From 4b1b265862d7a2629a29796fb4ad4a1094138c32 Mon Sep 17 00:00:00 2001 From: Lakhan Mandloi Date: Mon, 12 Aug 2019 18:16:09 +0530 Subject: [PATCH] Issue #SB-13915 task: Card Component --- .../accordion/accordion-config.d.ts | 10 + .../accordion/accordion.d.ts | 187 + .../accordion/accordion.module.d.ts | 4 + .../alert/alert-config.d.ts | 10 + dist/sunbird-ui-components/alert/alert.d.ts | 33 + .../alert/alert.module.d.ts | 4 + .../bundles/sunbird-ui-components.umd.js | 12846 ++++++++++++++++ .../bundles/sunbird-ui-components.umd.js.map | 1 + .../bundles/sunbird-ui-components.umd.min.js | 2 + .../sunbird-ui-components.umd.min.js.map | 1 + .../buttons/buttons.module.d.ts | 5 + .../buttons/checkbox.d.ts | 35 + dist/sunbird-ui-components/buttons/label.d.ts | 5 + dist/sunbird-ui-components/buttons/radio.d.ts | 73 + .../card/card-config.d.ts | 10 + dist/sunbird-ui-components/card/card.d.ts | 33 + .../card/card.module.d.ts | 4 + .../carousel/carousel-config.d.ts | 14 + .../carousel/carousel.d.ts | 154 + .../carousel/carousel.module.d.ts | 4 + .../collapse/collapse.d.ts | 9 + .../collapse/collapse.module.d.ts | 3 + .../datepicker/adapters/ngb-date-adapter.d.ts | 34 + .../adapters/ngb-date-native-adapter.d.ts | 18 + .../adapters/ngb-date-native-utc-adapter.d.ts | 11 + .../datepicker/datepicker-config.d.ts | 33 + .../datepicker-day-template-context.d.ts | 48 + .../datepicker/datepicker-day-view.d.ts | 12 + .../datepicker/datepicker-i18n.d.ts | 70 + .../datepicker/datepicker-input.d.ts | 242 + .../datepicker/datepicker-keymap-service.d.ts | 12 + .../datepicker/datepicker-month-view.d.ts | 15 + .../datepicker-navigation-select.d.ts | 14 + .../datepicker/datepicker-navigation.d.ts | 21 + .../datepicker/datepicker-service.d.ts | 37 + .../datepicker/datepicker-tools.d.ts | 17 + .../datepicker/datepicker-view-model.d.ts | 58 + .../datepicker/datepicker.d.ts | 195 + .../datepicker/datepicker.module.d.ts | 22 + .../hebrew/datepicker-i18n-hebrew.d.ts | 14 + .../datepicker/hebrew/hebrew.d.ts | 23 + .../hebrew/ngb-calendar-hebrew.d.ts | 24 + .../datepicker/hijri/ngb-calendar-hijri.d.ts | 31 + .../hijri/ngb-calendar-islamic-civil.d.ts | 20 + .../hijri/ngb-calendar-islamic-umalqura.d.ts | 19 + .../datepicker/jalali/jalali.d.ts | 15 + .../jalali/ngb-calendar-persian.d.ts | 13 + .../datepicker/ngb-calendar.d.ts | 74 + .../datepicker/ngb-date-parser-formatter.d.ts | 37 + .../datepicker/ngb-date-struct.d.ts | 21 + .../datepicker/ngb-date.d.ts | 51 + .../dropdown/dropdown-config.d.ts | 12 + .../dropdown/dropdown.d.ts | 148 + .../dropdown/dropdown.module.d.ts | 4 + .../esm2015/accordion/accordion-config.js | 28 + .../esm2015/accordion/accordion.js | 522 + .../esm2015/accordion/accordion.module.js | 17 + .../esm2015/alert/alert-config.js | 29 + .../esm2015/alert/alert.js | 109 + .../esm2015/alert/alert.module.js | 15 + .../esm2015/buttons/buttons.module.js | 19 + .../esm2015/buttons/checkbox.js | 160 + .../esm2015/buttons/label.js | 22 + .../esm2015/buttons/radio.js | 333 + .../esm2015/card/card-config.js | 29 + .../esm2015/card/card.js | 109 + .../esm2015/card/card.module.js | 15 + .../esm2015/carousel/carousel-config.js | 41 + .../esm2015/carousel/carousel.js | 507 + .../esm2015/carousel/carousel.module.js | 15 + .../esm2015/collapse/collapse.js | 34 + .../esm2015/collapse/collapse.module.js | 13 + .../datepicker/adapters/ngb-date-adapter.js | 75 + .../adapters/ngb-date-native-adapter.js | 54 + .../adapters/ngb-date-native-utc-adapter.js | 37 + .../esm2015/datepicker/datepicker-config.js | 55 + .../datepicker-day-template-context.js | 62 + .../esm2015/datepicker/datepicker-day-view.js | 62 + .../esm2015/datepicker/datepicker-i18n.js | 171 + .../esm2015/datepicker/datepicker-input.js | 736 + .../datepicker/datepicker-keymap-service.js | 111 + .../datepicker/datepicker-month-view.js | 81 + .../datepicker-navigation-select.js | 81 + .../datepicker/datepicker-navigation.js | 99 + .../esm2015/datepicker/datepicker-service.js | 404 + .../esm2015/datepicker/datepicker-tools.js | 301 + .../datepicker/datepicker-view-model.js | 13 + .../esm2015/datepicker/datepicker.js | 573 + .../esm2015/datepicker/datepicker.module.js | 46 + .../hebrew/datepicker-i18n-hebrew.js | 63 + .../esm2015/datepicker/hebrew/hebrew.js | 406 + .../datepicker/hebrew/ngb-calendar-hebrew.js | 116 + .../datepicker/hijri/ngb-calendar-hijri.js | 182 + .../hijri/ngb-calendar-islamic-civil.js | 177 + .../hijri/ngb-calendar-islamic-umalqura.js | 261 + .../esm2015/datepicker/jalali/jalali.js | 300 + .../datepicker/jalali/ngb-calendar-persian.js | 104 + .../esm2015/datepicker/ngb-calendar.js | 233 + .../datepicker/ngb-date-parser-formatter.js | 92 + .../esm2015/datepicker/ngb-date-struct.js | 31 + .../esm2015/datepicker/ngb-date.js | 115 + .../esm2015/dropdown/dropdown-config.js | 31 + .../esm2015/dropdown/dropdown.js | 670 + .../esm2015/dropdown/dropdown.module.js | 16 + dist/sunbird-ui-components/esm2015/index.js | 53 + .../esm2015/modal/modal-backdrop.js | 22 + .../esm2015/modal/modal-config.js | 118 + .../esm2015/modal/modal-dismiss-reasons.js | 13 + .../esm2015/modal/modal-ref.js | 191 + .../esm2015/modal/modal-stack.js | 427 + .../esm2015/modal/modal-window.js | 152 + .../esm2015/modal/modal.js | 96 + .../esm2015/modal/modal.module.js | 22 + .../esm2015/pagination/pagination-config.js | 46 + .../esm2015/pagination/pagination.js | 551 + .../esm2015/pagination/pagination.module.js | 20 + .../esm2015/popover/popover-config.js | 45 + .../esm2015/popover/popover.js | 396 + .../esm2015/popover/popover.module.js | 20 + .../esm2015/progressbar/progressbar-config.js | 39 + .../esm2015/progressbar/progressbar.js | 111 + .../esm2015/progressbar/progressbar.module.js | 15 + .../esm2015/rating/rating-config.js | 32 + .../esm2015/rating/rating.js | 341 + .../esm2015/rating/rating.module.js | 15 + .../esm2015/sunbird-ui-components.js | 33 + .../esm2015/tabset/tabset-config.js | 32 + .../esm2015/tabset/tabset.js | 307 + .../esm2015/tabset/tabset.module.js | 17 + .../esm2015/timepicker/ngb-time-adapter.js | 76 + .../esm2015/timepicker/ngb-time-struct.js | 27 + .../esm2015/timepicker/ngb-time.js | 90 + .../esm2015/timepicker/timepicker-config.js | 50 + .../esm2015/timepicker/timepicker-i18n.js | 72 + .../esm2015/timepicker/timepicker.js | 410 + .../esm2015/timepicker/timepicker.module.js | 17 + .../esm2015/toast/toast-config.js | 62 + .../esm2015/toast/toast.js | 184 + .../esm2015/toast/toast.module.js | 15 + .../esm2015/tooltip/tooltip-config.js | 45 + .../esm2015/tooltip/tooltip.js | 362 + .../esm2015/tooltip/tooltip.module.js | 14 + .../esm2015/typeahead/highlight.js | 83 + .../esm2015/typeahead/typeahead-config.js | 37 + .../esm2015/typeahead/typeahead-window.js | 184 + .../esm2015/typeahead/typeahead.js | 654 + .../esm2015/typeahead/typeahead.module.js | 24 + .../esm2015/util/accessibility/live.js | 98 + .../esm2015/util/autoclose.js | 105 + .../esm2015/util/focus-trap.js | 95 + .../sunbird-ui-components/esm2015/util/key.js | 33 + .../esm2015/util/popup.js | 135 + .../esm2015/util/positioning.js | 317 + .../esm2015/util/scrollbar.js | 102 + .../esm2015/util/triggers.js | 237 + .../esm2015/util/util.js | 120 + .../esm5/accordion/accordion-config.js | 30 + .../esm5/accordion/accordion.js | 593 + .../esm5/accordion/accordion.module.js | 21 + .../esm5/alert/alert-config.js | 31 + .../sunbird-ui-components/esm5/alert/alert.js | 110 + .../esm5/alert/alert.module.js | 19 + .../esm5/buttons/buttons.module.js | 23 + .../esm5/buttons/checkbox.js | 182 + .../esm5/buttons/label.js | 26 + .../esm5/buttons/radio.js | 415 + .../esm5/card/card-config.js | 31 + dist/sunbird-ui-components/esm5/card/card.js | 110 + .../esm5/card/card.module.js | 19 + .../esm5/carousel/carousel-config.js | 43 + .../esm5/carousel/carousel.js | 600 + .../esm5/carousel/carousel.module.js | 19 + .../esm5/collapse/collapse.js | 36 + .../esm5/collapse/collapse.module.js | 17 + .../datepicker/adapters/ngb-date-adapter.js | 102 + .../adapters/ngb-date-native-adapter.js | 87 + .../adapters/ngb-date-native-utc-adapter.js | 54 + .../esm5/datepicker/datepicker-config.js | 57 + .../datepicker-day-template-context.js | 62 + .../esm5/datepicker/datepicker-day-view.js | 64 + .../esm5/datepicker/datepicker-i18n.js | 229 + .../esm5/datepicker/datepicker-input.js | 848 + .../datepicker/datepicker-keymap-service.js | 114 + .../esm5/datepicker/datepicker-month-view.js | 62 + .../datepicker-navigation-select.js | 69 + .../esm5/datepicker/datepicker-navigation.js | 68 + .../esm5/datepicker/datepicker-service.js | 492 + .../esm5/datepicker/datepicker-tools.js | 302 + .../esm5/datepicker/datepicker-view-model.js | 13 + .../esm5/datepicker/datepicker.js | 598 + .../esm5/datepicker/datepicker.module.js | 50 + .../hebrew/datepicker-i18n-hebrew.js | 100 + .../esm5/datepicker/hebrew/hebrew.js | 406 + .../datepicker/hebrew/ngb-calendar-hebrew.js | 183 + .../datepicker/hijri/ngb-calendar-hijri.js | 250 + .../hijri/ngb-calendar-islamic-civil.js | 217 + .../hijri/ngb-calendar-islamic-umalqura.js | 299 + .../esm5/datepicker/jalali/jalali.js | 300 + .../datepicker/jalali/ngb-calendar-persian.js | 154 + .../esm5/datepicker/ngb-calendar.js | 287 + .../datepicker/ngb-date-parser-formatter.js | 111 + .../esm5/datepicker/ngb-date-struct.js | 31 + .../esm5/datepicker/ngb-date.js | 182 + .../esm5/dropdown/dropdown-config.js | 33 + .../esm5/dropdown/dropdown.js | 757 + .../esm5/dropdown/dropdown.module.js | 20 + dist/sunbird-ui-components/esm5/index.js | 57 + .../esm5/modal/modal-backdrop.js | 26 + .../esm5/modal/modal-config.js | 120 + .../esm5/modal/modal-dismiss-reasons.js | 13 + .../esm5/modal/modal-ref.js | 277 + .../esm5/modal/modal-stack.js | 514 + .../esm5/modal/modal-window.js | 166 + .../sunbird-ui-components/esm5/modal/modal.js | 137 + .../esm5/modal/modal.module.js | 26 + .../esm5/pagination/pagination-config.js | 48 + .../esm5/pagination/pagination.js | 561 + .../esm5/pagination/pagination.module.js | 24 + .../esm5/popover/popover-config.js | 47 + .../esm5/popover/popover.js | 446 + .../esm5/popover/popover.module.js | 24 + .../esm5/progressbar/progressbar-config.js | 41 + .../esm5/progressbar/progressbar.js | 108 + .../esm5/progressbar/progressbar.module.js | 19 + .../esm5/rating/rating-config.js | 34 + .../esm5/rating/rating.js | 391 + .../esm5/rating/rating.module.js | 19 + .../esm5/sunbird-ui-components.js | 33 + .../esm5/tabset/tabset-config.js | 34 + .../esm5/tabset/tabset.js | 316 + .../esm5/tabset/tabset.module.js | 21 + .../esm5/timepicker/ngb-time-adapter.js | 103 + .../esm5/timepicker/ngb-time-struct.js | 27 + .../esm5/timepicker/ngb-time.js | 128 + .../esm5/timepicker/timepicker-config.js | 52 + .../esm5/timepicker/timepicker-i18n.js | 84 + .../esm5/timepicker/timepicker.js | 420 + .../esm5/timepicker/timepicker.module.js | 21 + .../esm5/toast/toast-config.js | 64 + .../sunbird-ui-components/esm5/toast/toast.js | 190 + .../esm5/toast/toast.module.js | 19 + .../esm5/tooltip/tooltip-config.js | 47 + .../esm5/tooltip/tooltip.js | 416 + .../esm5/tooltip/tooltip.module.js | 18 + .../esm5/typeahead/highlight.js | 89 + .../esm5/typeahead/typeahead-config.js | 39 + .../esm5/typeahead/typeahead-window.js | 202 + .../esm5/typeahead/typeahead.js | 730 + .../esm5/typeahead/typeahead.module.js | 28 + .../esm5/util/accessibility/live.js | 104 + .../esm5/util/autoclose.js | 113 + .../esm5/util/focus-trap.js | 98 + dist/sunbird-ui-components/esm5/util/key.js | 33 + dist/sunbird-ui-components/esm5/util/popup.js | 146 + .../esm5/util/positioning.js | 384 + .../esm5/util/scrollbar.js | 149 + .../esm5/util/triggers.js | 241 + dist/sunbird-ui-components/esm5/util/util.js | 121 + .../fesm2015/sunbird-ui-components.js | 10860 +++++++++++++ .../fesm2015/sunbird-ui-components.js.map | 1 + .../fesm5/sunbird-ui-components.js | 12647 +++++++++++++++ .../fesm5/sunbird-ui-components.js.map | 1 + dist/sunbird-ui-components/index.d.ts | 21 + .../modal/modal-backdrop.d.ts | 3 + .../modal/modal-config.d.ts | 87 + .../modal/modal-dismiss-reasons.d.ts | 4 + .../modal/modal-ref.d.ts | 60 + .../modal/modal-stack.d.ts | 32 + .../modal/modal-window.d.ts | 21 + dist/sunbird-ui-components/modal/modal.d.ts | 39 + .../modal/modal.module.d.ts | 6 + dist/sunbird-ui-components/package.json | 56 + .../pagination/pagination-config.d.ts | 16 + .../pagination/pagination.d.ts | 189 + .../pagination/pagination.module.d.ts | 4 + .../popover/popover-config.d.ts | 17 + .../popover/popover.d.ts | 137 + .../popover/popover.module.d.ts | 5 + .../progressbar/progressbar-config.d.ts | 14 + .../progressbar/progressbar.d.ts | 45 + .../progressbar/progressbar.module.d.ts | 4 + .../rating/rating-config.d.ts | 11 + dist/sunbird-ui-components/rating/rating.d.ts | 84 + .../rating/rating.module.d.ts | 4 + .../sunbird-ui-components.d.ts | 28 + .../sunbird-ui-components.metadata.json | 1 + .../tabset/tabset-config.d.ts | 11 + dist/sunbird-ui-components/tabset/tabset.d.ts | 110 + .../tabset/tabset.module.d.ts | 4 + .../test/typings/custom-jasmine.d.ts | 9 + .../timepicker/ngb-time-adapter.d.ts | 35 + .../timepicker/ngb-time-struct.d.ts | 17 + .../timepicker/ngb-time.d.ts | 14 + .../timepicker/timepicker-config.d.ts | 17 + .../timepicker/timepicker-i18n.d.ts | 22 + .../timepicker/timepicker.d.ts | 72 + .../timepicker/timepicker.module.d.ts | 7 + .../toast/toast-config.d.ts | 36 + dist/sunbird-ui-components/toast/toast.d.ts | 56 + .../toast/toast.module.d.ts | 4 + .../tooltip/tooltip-config.d.ts | 17 + .../tooltip/tooltip.d.ts | 127 + .../tooltip/tooltip.module.d.ts | 5 + .../typeahead/highlight.d.ts | 29 + .../typeahead/typeahead-config.d.ts | 14 + .../typeahead/typeahead-window.d.ts | 58 + .../typeahead/typeahead.d.ts | 153 + .../typeahead/typeahead.module.d.ts | 6 + .../util/accessibility/live.d.ts | 11 + .../sunbird-ui-components/util/autoclose.d.ts | 3 + .../util/focus-trap.d.ts | 17 + dist/sunbird-ui-components/util/key.d.ts | 14 + dist/sunbird-ui-components/util/popup.d.ts | 21 + .../util/positioning.d.ts | 12 + .../sunbird-ui-components/util/scrollbar.d.ts | 38 + dist/sunbird-ui-components/util/triggers.d.ts | 14 + dist/sunbird-ui-components/util/util.d.ts | 11 + misc/api-doc-test-cases/class-with-doc.ts | 22 - .../component-with-internal-methods.ts | 31 - .../directives-no-in-out.ts | 23 - .../directives-with-inputs-default-vals.ts | 14 - .../directives-with-inputs-types-to-infer.ts | 14 - .../directives-with-inputs.ts | 30 - .../directives-with-methods.ts | 30 - .../directives-with-outputs.ts | 17 - .../directives-with-tricky-inputs.ts | 16 - .../interface-with-methods.ts | 9 - .../interface-with-properties.ts | 20 - misc/api-doc-test-cases/no-docs.ts | 7 - .../api-doc-test-cases/release-deprecation.ts | 73 - misc/api-doc-test-cases/release-features.ts | 72 - .../services-with-methods.ts | 22 - .../services-with-properties.ts | 27 - misc/api-doc-test-cases/type-parameters.ts | 37 - misc/api-doc-test-cases/types.ts | 34 - misc/generate-docs.ts | 16 - misc/generate-stackblitzes.ts | 114 - .../multiple/one/test.component.ts | 8 - .../multiple/one/test.module.ts | 10 - .../multiple/two/test.component.ts | 8 - .../multiple/two/test.module.ts | 10 - .../no-bootstrap-component/test.component.ts | 8 - .../no-bootstrap-component/test.module.ts | 9 - .../no-component-selector/test.component.ts | 7 - .../no-component-selector/test.module.ts | 10 - .../no-module/test.component.ts | 8 - .../oneliner/test.component.ts | 9 - .../oneliner/test.module.ts | 9 - .../simple/test.component.ts | 8 - .../simple/test.module.ts | 10 - .../syntax/test.component.ts | 9 - .../syntax/test.module.ts | 13 - misc/parse-demo.spec.ts | 56 - misc/parse-demo.ts | 86 - misc/stackblitzes-templates/index.html.ejs | 30 - misc/stackblitzes-templates/main.ts.ejs | 18 - misc/stackblitzes-templates/polyfills.ts | 67 - .../stackblitz.html.ejs | 53 - misc/validate-commit.js | 106 - 359 files changed, 71204 insertions(+), 1180 deletions(-) create mode 100644 dist/sunbird-ui-components/accordion/accordion-config.d.ts create mode 100644 dist/sunbird-ui-components/accordion/accordion.d.ts create mode 100644 dist/sunbird-ui-components/accordion/accordion.module.d.ts create mode 100644 dist/sunbird-ui-components/alert/alert-config.d.ts create mode 100644 dist/sunbird-ui-components/alert/alert.d.ts create mode 100644 dist/sunbird-ui-components/alert/alert.module.d.ts create mode 100644 dist/sunbird-ui-components/bundles/sunbird-ui-components.umd.js create mode 100644 dist/sunbird-ui-components/bundles/sunbird-ui-components.umd.js.map create mode 100644 dist/sunbird-ui-components/bundles/sunbird-ui-components.umd.min.js create mode 100644 dist/sunbird-ui-components/bundles/sunbird-ui-components.umd.min.js.map create mode 100644 dist/sunbird-ui-components/buttons/buttons.module.d.ts create mode 100644 dist/sunbird-ui-components/buttons/checkbox.d.ts create mode 100644 dist/sunbird-ui-components/buttons/label.d.ts create mode 100644 dist/sunbird-ui-components/buttons/radio.d.ts create mode 100644 dist/sunbird-ui-components/card/card-config.d.ts create mode 100644 dist/sunbird-ui-components/card/card.d.ts create mode 100644 dist/sunbird-ui-components/card/card.module.d.ts create mode 100644 dist/sunbird-ui-components/carousel/carousel-config.d.ts create mode 100644 dist/sunbird-ui-components/carousel/carousel.d.ts create mode 100644 dist/sunbird-ui-components/carousel/carousel.module.d.ts create mode 100644 dist/sunbird-ui-components/collapse/collapse.d.ts create mode 100644 dist/sunbird-ui-components/collapse/collapse.module.d.ts create mode 100644 dist/sunbird-ui-components/datepicker/adapters/ngb-date-adapter.d.ts create mode 100644 dist/sunbird-ui-components/datepicker/adapters/ngb-date-native-adapter.d.ts create mode 100644 dist/sunbird-ui-components/datepicker/adapters/ngb-date-native-utc-adapter.d.ts create mode 100644 dist/sunbird-ui-components/datepicker/datepicker-config.d.ts create mode 100644 dist/sunbird-ui-components/datepicker/datepicker-day-template-context.d.ts create mode 100644 dist/sunbird-ui-components/datepicker/datepicker-day-view.d.ts create mode 100644 dist/sunbird-ui-components/datepicker/datepicker-i18n.d.ts create mode 100644 dist/sunbird-ui-components/datepicker/datepicker-input.d.ts create mode 100644 dist/sunbird-ui-components/datepicker/datepicker-keymap-service.d.ts create mode 100644 dist/sunbird-ui-components/datepicker/datepicker-month-view.d.ts create mode 100644 dist/sunbird-ui-components/datepicker/datepicker-navigation-select.d.ts create mode 100644 dist/sunbird-ui-components/datepicker/datepicker-navigation.d.ts create mode 100644 dist/sunbird-ui-components/datepicker/datepicker-service.d.ts create mode 100644 dist/sunbird-ui-components/datepicker/datepicker-tools.d.ts create mode 100644 dist/sunbird-ui-components/datepicker/datepicker-view-model.d.ts create mode 100644 dist/sunbird-ui-components/datepicker/datepicker.d.ts create mode 100644 dist/sunbird-ui-components/datepicker/datepicker.module.d.ts create mode 100644 dist/sunbird-ui-components/datepicker/hebrew/datepicker-i18n-hebrew.d.ts create mode 100644 dist/sunbird-ui-components/datepicker/hebrew/hebrew.d.ts create mode 100644 dist/sunbird-ui-components/datepicker/hebrew/ngb-calendar-hebrew.d.ts create mode 100644 dist/sunbird-ui-components/datepicker/hijri/ngb-calendar-hijri.d.ts create mode 100644 dist/sunbird-ui-components/datepicker/hijri/ngb-calendar-islamic-civil.d.ts create mode 100644 dist/sunbird-ui-components/datepicker/hijri/ngb-calendar-islamic-umalqura.d.ts create mode 100644 dist/sunbird-ui-components/datepicker/jalali/jalali.d.ts create mode 100644 dist/sunbird-ui-components/datepicker/jalali/ngb-calendar-persian.d.ts create mode 100644 dist/sunbird-ui-components/datepicker/ngb-calendar.d.ts create mode 100644 dist/sunbird-ui-components/datepicker/ngb-date-parser-formatter.d.ts create mode 100644 dist/sunbird-ui-components/datepicker/ngb-date-struct.d.ts create mode 100644 dist/sunbird-ui-components/datepicker/ngb-date.d.ts create mode 100644 dist/sunbird-ui-components/dropdown/dropdown-config.d.ts create mode 100644 dist/sunbird-ui-components/dropdown/dropdown.d.ts create mode 100644 dist/sunbird-ui-components/dropdown/dropdown.module.d.ts create mode 100644 dist/sunbird-ui-components/esm2015/accordion/accordion-config.js create mode 100644 dist/sunbird-ui-components/esm2015/accordion/accordion.js create mode 100644 dist/sunbird-ui-components/esm2015/accordion/accordion.module.js create mode 100644 dist/sunbird-ui-components/esm2015/alert/alert-config.js create mode 100644 dist/sunbird-ui-components/esm2015/alert/alert.js create mode 100644 dist/sunbird-ui-components/esm2015/alert/alert.module.js create mode 100644 dist/sunbird-ui-components/esm2015/buttons/buttons.module.js create mode 100644 dist/sunbird-ui-components/esm2015/buttons/checkbox.js create mode 100644 dist/sunbird-ui-components/esm2015/buttons/label.js create mode 100644 dist/sunbird-ui-components/esm2015/buttons/radio.js create mode 100644 dist/sunbird-ui-components/esm2015/card/card-config.js create mode 100644 dist/sunbird-ui-components/esm2015/card/card.js create mode 100644 dist/sunbird-ui-components/esm2015/card/card.module.js create mode 100644 dist/sunbird-ui-components/esm2015/carousel/carousel-config.js create mode 100644 dist/sunbird-ui-components/esm2015/carousel/carousel.js create mode 100644 dist/sunbird-ui-components/esm2015/carousel/carousel.module.js create mode 100644 dist/sunbird-ui-components/esm2015/collapse/collapse.js create mode 100644 dist/sunbird-ui-components/esm2015/collapse/collapse.module.js create mode 100644 dist/sunbird-ui-components/esm2015/datepicker/adapters/ngb-date-adapter.js create mode 100644 dist/sunbird-ui-components/esm2015/datepicker/adapters/ngb-date-native-adapter.js create mode 100644 dist/sunbird-ui-components/esm2015/datepicker/adapters/ngb-date-native-utc-adapter.js create mode 100644 dist/sunbird-ui-components/esm2015/datepicker/datepicker-config.js create mode 100644 dist/sunbird-ui-components/esm2015/datepicker/datepicker-day-template-context.js create mode 100644 dist/sunbird-ui-components/esm2015/datepicker/datepicker-day-view.js create mode 100644 dist/sunbird-ui-components/esm2015/datepicker/datepicker-i18n.js create mode 100644 dist/sunbird-ui-components/esm2015/datepicker/datepicker-input.js create mode 100644 dist/sunbird-ui-components/esm2015/datepicker/datepicker-keymap-service.js create mode 100644 dist/sunbird-ui-components/esm2015/datepicker/datepicker-month-view.js create mode 100644 dist/sunbird-ui-components/esm2015/datepicker/datepicker-navigation-select.js create mode 100644 dist/sunbird-ui-components/esm2015/datepicker/datepicker-navigation.js create mode 100644 dist/sunbird-ui-components/esm2015/datepicker/datepicker-service.js create mode 100644 dist/sunbird-ui-components/esm2015/datepicker/datepicker-tools.js create mode 100644 dist/sunbird-ui-components/esm2015/datepicker/datepicker-view-model.js create mode 100644 dist/sunbird-ui-components/esm2015/datepicker/datepicker.js create mode 100644 dist/sunbird-ui-components/esm2015/datepicker/datepicker.module.js create mode 100644 dist/sunbird-ui-components/esm2015/datepicker/hebrew/datepicker-i18n-hebrew.js create mode 100644 dist/sunbird-ui-components/esm2015/datepicker/hebrew/hebrew.js create mode 100644 dist/sunbird-ui-components/esm2015/datepicker/hebrew/ngb-calendar-hebrew.js create mode 100644 dist/sunbird-ui-components/esm2015/datepicker/hijri/ngb-calendar-hijri.js create mode 100644 dist/sunbird-ui-components/esm2015/datepicker/hijri/ngb-calendar-islamic-civil.js create mode 100644 dist/sunbird-ui-components/esm2015/datepicker/hijri/ngb-calendar-islamic-umalqura.js create mode 100644 dist/sunbird-ui-components/esm2015/datepicker/jalali/jalali.js create mode 100644 dist/sunbird-ui-components/esm2015/datepicker/jalali/ngb-calendar-persian.js create mode 100644 dist/sunbird-ui-components/esm2015/datepicker/ngb-calendar.js create mode 100644 dist/sunbird-ui-components/esm2015/datepicker/ngb-date-parser-formatter.js create mode 100644 dist/sunbird-ui-components/esm2015/datepicker/ngb-date-struct.js create mode 100644 dist/sunbird-ui-components/esm2015/datepicker/ngb-date.js create mode 100644 dist/sunbird-ui-components/esm2015/dropdown/dropdown-config.js create mode 100644 dist/sunbird-ui-components/esm2015/dropdown/dropdown.js create mode 100644 dist/sunbird-ui-components/esm2015/dropdown/dropdown.module.js create mode 100644 dist/sunbird-ui-components/esm2015/index.js create mode 100644 dist/sunbird-ui-components/esm2015/modal/modal-backdrop.js create mode 100644 dist/sunbird-ui-components/esm2015/modal/modal-config.js create mode 100644 dist/sunbird-ui-components/esm2015/modal/modal-dismiss-reasons.js create mode 100644 dist/sunbird-ui-components/esm2015/modal/modal-ref.js create mode 100644 dist/sunbird-ui-components/esm2015/modal/modal-stack.js create mode 100644 dist/sunbird-ui-components/esm2015/modal/modal-window.js create mode 100644 dist/sunbird-ui-components/esm2015/modal/modal.js create mode 100644 dist/sunbird-ui-components/esm2015/modal/modal.module.js create mode 100644 dist/sunbird-ui-components/esm2015/pagination/pagination-config.js create mode 100644 dist/sunbird-ui-components/esm2015/pagination/pagination.js create mode 100644 dist/sunbird-ui-components/esm2015/pagination/pagination.module.js create mode 100644 dist/sunbird-ui-components/esm2015/popover/popover-config.js create mode 100644 dist/sunbird-ui-components/esm2015/popover/popover.js create mode 100644 dist/sunbird-ui-components/esm2015/popover/popover.module.js create mode 100644 dist/sunbird-ui-components/esm2015/progressbar/progressbar-config.js create mode 100644 dist/sunbird-ui-components/esm2015/progressbar/progressbar.js create mode 100644 dist/sunbird-ui-components/esm2015/progressbar/progressbar.module.js create mode 100644 dist/sunbird-ui-components/esm2015/rating/rating-config.js create mode 100644 dist/sunbird-ui-components/esm2015/rating/rating.js create mode 100644 dist/sunbird-ui-components/esm2015/rating/rating.module.js create mode 100644 dist/sunbird-ui-components/esm2015/sunbird-ui-components.js create mode 100644 dist/sunbird-ui-components/esm2015/tabset/tabset-config.js create mode 100644 dist/sunbird-ui-components/esm2015/tabset/tabset.js create mode 100644 dist/sunbird-ui-components/esm2015/tabset/tabset.module.js create mode 100644 dist/sunbird-ui-components/esm2015/timepicker/ngb-time-adapter.js create mode 100644 dist/sunbird-ui-components/esm2015/timepicker/ngb-time-struct.js create mode 100644 dist/sunbird-ui-components/esm2015/timepicker/ngb-time.js create mode 100644 dist/sunbird-ui-components/esm2015/timepicker/timepicker-config.js create mode 100644 dist/sunbird-ui-components/esm2015/timepicker/timepicker-i18n.js create mode 100644 dist/sunbird-ui-components/esm2015/timepicker/timepicker.js create mode 100644 dist/sunbird-ui-components/esm2015/timepicker/timepicker.module.js create mode 100644 dist/sunbird-ui-components/esm2015/toast/toast-config.js create mode 100644 dist/sunbird-ui-components/esm2015/toast/toast.js create mode 100644 dist/sunbird-ui-components/esm2015/toast/toast.module.js create mode 100644 dist/sunbird-ui-components/esm2015/tooltip/tooltip-config.js create mode 100644 dist/sunbird-ui-components/esm2015/tooltip/tooltip.js create mode 100644 dist/sunbird-ui-components/esm2015/tooltip/tooltip.module.js create mode 100644 dist/sunbird-ui-components/esm2015/typeahead/highlight.js create mode 100644 dist/sunbird-ui-components/esm2015/typeahead/typeahead-config.js create mode 100644 dist/sunbird-ui-components/esm2015/typeahead/typeahead-window.js create mode 100644 dist/sunbird-ui-components/esm2015/typeahead/typeahead.js create mode 100644 dist/sunbird-ui-components/esm2015/typeahead/typeahead.module.js create mode 100644 dist/sunbird-ui-components/esm2015/util/accessibility/live.js create mode 100644 dist/sunbird-ui-components/esm2015/util/autoclose.js create mode 100644 dist/sunbird-ui-components/esm2015/util/focus-trap.js create mode 100644 dist/sunbird-ui-components/esm2015/util/key.js create mode 100644 dist/sunbird-ui-components/esm2015/util/popup.js create mode 100644 dist/sunbird-ui-components/esm2015/util/positioning.js create mode 100644 dist/sunbird-ui-components/esm2015/util/scrollbar.js create mode 100644 dist/sunbird-ui-components/esm2015/util/triggers.js create mode 100644 dist/sunbird-ui-components/esm2015/util/util.js create mode 100644 dist/sunbird-ui-components/esm5/accordion/accordion-config.js create mode 100644 dist/sunbird-ui-components/esm5/accordion/accordion.js create mode 100644 dist/sunbird-ui-components/esm5/accordion/accordion.module.js create mode 100644 dist/sunbird-ui-components/esm5/alert/alert-config.js create mode 100644 dist/sunbird-ui-components/esm5/alert/alert.js create mode 100644 dist/sunbird-ui-components/esm5/alert/alert.module.js create mode 100644 dist/sunbird-ui-components/esm5/buttons/buttons.module.js create mode 100644 dist/sunbird-ui-components/esm5/buttons/checkbox.js create mode 100644 dist/sunbird-ui-components/esm5/buttons/label.js create mode 100644 dist/sunbird-ui-components/esm5/buttons/radio.js create mode 100644 dist/sunbird-ui-components/esm5/card/card-config.js create mode 100644 dist/sunbird-ui-components/esm5/card/card.js create mode 100644 dist/sunbird-ui-components/esm5/card/card.module.js create mode 100644 dist/sunbird-ui-components/esm5/carousel/carousel-config.js create mode 100644 dist/sunbird-ui-components/esm5/carousel/carousel.js create mode 100644 dist/sunbird-ui-components/esm5/carousel/carousel.module.js create mode 100644 dist/sunbird-ui-components/esm5/collapse/collapse.js create mode 100644 dist/sunbird-ui-components/esm5/collapse/collapse.module.js create mode 100644 dist/sunbird-ui-components/esm5/datepicker/adapters/ngb-date-adapter.js create mode 100644 dist/sunbird-ui-components/esm5/datepicker/adapters/ngb-date-native-adapter.js create mode 100644 dist/sunbird-ui-components/esm5/datepicker/adapters/ngb-date-native-utc-adapter.js create mode 100644 dist/sunbird-ui-components/esm5/datepicker/datepicker-config.js create mode 100644 dist/sunbird-ui-components/esm5/datepicker/datepicker-day-template-context.js create mode 100644 dist/sunbird-ui-components/esm5/datepicker/datepicker-day-view.js create mode 100644 dist/sunbird-ui-components/esm5/datepicker/datepicker-i18n.js create mode 100644 dist/sunbird-ui-components/esm5/datepicker/datepicker-input.js create mode 100644 dist/sunbird-ui-components/esm5/datepicker/datepicker-keymap-service.js create mode 100644 dist/sunbird-ui-components/esm5/datepicker/datepicker-month-view.js create mode 100644 dist/sunbird-ui-components/esm5/datepicker/datepicker-navigation-select.js create mode 100644 dist/sunbird-ui-components/esm5/datepicker/datepicker-navigation.js create mode 100644 dist/sunbird-ui-components/esm5/datepicker/datepicker-service.js create mode 100644 dist/sunbird-ui-components/esm5/datepicker/datepicker-tools.js create mode 100644 dist/sunbird-ui-components/esm5/datepicker/datepicker-view-model.js create mode 100644 dist/sunbird-ui-components/esm5/datepicker/datepicker.js create mode 100644 dist/sunbird-ui-components/esm5/datepicker/datepicker.module.js create mode 100644 dist/sunbird-ui-components/esm5/datepicker/hebrew/datepicker-i18n-hebrew.js create mode 100644 dist/sunbird-ui-components/esm5/datepicker/hebrew/hebrew.js create mode 100644 dist/sunbird-ui-components/esm5/datepicker/hebrew/ngb-calendar-hebrew.js create mode 100644 dist/sunbird-ui-components/esm5/datepicker/hijri/ngb-calendar-hijri.js create mode 100644 dist/sunbird-ui-components/esm5/datepicker/hijri/ngb-calendar-islamic-civil.js create mode 100644 dist/sunbird-ui-components/esm5/datepicker/hijri/ngb-calendar-islamic-umalqura.js create mode 100644 dist/sunbird-ui-components/esm5/datepicker/jalali/jalali.js create mode 100644 dist/sunbird-ui-components/esm5/datepicker/jalali/ngb-calendar-persian.js create mode 100644 dist/sunbird-ui-components/esm5/datepicker/ngb-calendar.js create mode 100644 dist/sunbird-ui-components/esm5/datepicker/ngb-date-parser-formatter.js create mode 100644 dist/sunbird-ui-components/esm5/datepicker/ngb-date-struct.js create mode 100644 dist/sunbird-ui-components/esm5/datepicker/ngb-date.js create mode 100644 dist/sunbird-ui-components/esm5/dropdown/dropdown-config.js create mode 100644 dist/sunbird-ui-components/esm5/dropdown/dropdown.js create mode 100644 dist/sunbird-ui-components/esm5/dropdown/dropdown.module.js create mode 100644 dist/sunbird-ui-components/esm5/index.js create mode 100644 dist/sunbird-ui-components/esm5/modal/modal-backdrop.js create mode 100644 dist/sunbird-ui-components/esm5/modal/modal-config.js create mode 100644 dist/sunbird-ui-components/esm5/modal/modal-dismiss-reasons.js create mode 100644 dist/sunbird-ui-components/esm5/modal/modal-ref.js create mode 100644 dist/sunbird-ui-components/esm5/modal/modal-stack.js create mode 100644 dist/sunbird-ui-components/esm5/modal/modal-window.js create mode 100644 dist/sunbird-ui-components/esm5/modal/modal.js create mode 100644 dist/sunbird-ui-components/esm5/modal/modal.module.js create mode 100644 dist/sunbird-ui-components/esm5/pagination/pagination-config.js create mode 100644 dist/sunbird-ui-components/esm5/pagination/pagination.js create mode 100644 dist/sunbird-ui-components/esm5/pagination/pagination.module.js create mode 100644 dist/sunbird-ui-components/esm5/popover/popover-config.js create mode 100644 dist/sunbird-ui-components/esm5/popover/popover.js create mode 100644 dist/sunbird-ui-components/esm5/popover/popover.module.js create mode 100644 dist/sunbird-ui-components/esm5/progressbar/progressbar-config.js create mode 100644 dist/sunbird-ui-components/esm5/progressbar/progressbar.js create mode 100644 dist/sunbird-ui-components/esm5/progressbar/progressbar.module.js create mode 100644 dist/sunbird-ui-components/esm5/rating/rating-config.js create mode 100644 dist/sunbird-ui-components/esm5/rating/rating.js create mode 100644 dist/sunbird-ui-components/esm5/rating/rating.module.js create mode 100644 dist/sunbird-ui-components/esm5/sunbird-ui-components.js create mode 100644 dist/sunbird-ui-components/esm5/tabset/tabset-config.js create mode 100644 dist/sunbird-ui-components/esm5/tabset/tabset.js create mode 100644 dist/sunbird-ui-components/esm5/tabset/tabset.module.js create mode 100644 dist/sunbird-ui-components/esm5/timepicker/ngb-time-adapter.js create mode 100644 dist/sunbird-ui-components/esm5/timepicker/ngb-time-struct.js create mode 100644 dist/sunbird-ui-components/esm5/timepicker/ngb-time.js create mode 100644 dist/sunbird-ui-components/esm5/timepicker/timepicker-config.js create mode 100644 dist/sunbird-ui-components/esm5/timepicker/timepicker-i18n.js create mode 100644 dist/sunbird-ui-components/esm5/timepicker/timepicker.js create mode 100644 dist/sunbird-ui-components/esm5/timepicker/timepicker.module.js create mode 100644 dist/sunbird-ui-components/esm5/toast/toast-config.js create mode 100644 dist/sunbird-ui-components/esm5/toast/toast.js create mode 100644 dist/sunbird-ui-components/esm5/toast/toast.module.js create mode 100644 dist/sunbird-ui-components/esm5/tooltip/tooltip-config.js create mode 100644 dist/sunbird-ui-components/esm5/tooltip/tooltip.js create mode 100644 dist/sunbird-ui-components/esm5/tooltip/tooltip.module.js create mode 100644 dist/sunbird-ui-components/esm5/typeahead/highlight.js create mode 100644 dist/sunbird-ui-components/esm5/typeahead/typeahead-config.js create mode 100644 dist/sunbird-ui-components/esm5/typeahead/typeahead-window.js create mode 100644 dist/sunbird-ui-components/esm5/typeahead/typeahead.js create mode 100644 dist/sunbird-ui-components/esm5/typeahead/typeahead.module.js create mode 100644 dist/sunbird-ui-components/esm5/util/accessibility/live.js create mode 100644 dist/sunbird-ui-components/esm5/util/autoclose.js create mode 100644 dist/sunbird-ui-components/esm5/util/focus-trap.js create mode 100644 dist/sunbird-ui-components/esm5/util/key.js create mode 100644 dist/sunbird-ui-components/esm5/util/popup.js create mode 100644 dist/sunbird-ui-components/esm5/util/positioning.js create mode 100644 dist/sunbird-ui-components/esm5/util/scrollbar.js create mode 100644 dist/sunbird-ui-components/esm5/util/triggers.js create mode 100644 dist/sunbird-ui-components/esm5/util/util.js create mode 100644 dist/sunbird-ui-components/fesm2015/sunbird-ui-components.js create mode 100644 dist/sunbird-ui-components/fesm2015/sunbird-ui-components.js.map create mode 100644 dist/sunbird-ui-components/fesm5/sunbird-ui-components.js create mode 100644 dist/sunbird-ui-components/fesm5/sunbird-ui-components.js.map create mode 100644 dist/sunbird-ui-components/index.d.ts create mode 100644 dist/sunbird-ui-components/modal/modal-backdrop.d.ts create mode 100644 dist/sunbird-ui-components/modal/modal-config.d.ts create mode 100644 dist/sunbird-ui-components/modal/modal-dismiss-reasons.d.ts create mode 100644 dist/sunbird-ui-components/modal/modal-ref.d.ts create mode 100644 dist/sunbird-ui-components/modal/modal-stack.d.ts create mode 100644 dist/sunbird-ui-components/modal/modal-window.d.ts create mode 100644 dist/sunbird-ui-components/modal/modal.d.ts create mode 100644 dist/sunbird-ui-components/modal/modal.module.d.ts create mode 100644 dist/sunbird-ui-components/package.json create mode 100644 dist/sunbird-ui-components/pagination/pagination-config.d.ts create mode 100644 dist/sunbird-ui-components/pagination/pagination.d.ts create mode 100644 dist/sunbird-ui-components/pagination/pagination.module.d.ts create mode 100644 dist/sunbird-ui-components/popover/popover-config.d.ts create mode 100644 dist/sunbird-ui-components/popover/popover.d.ts create mode 100644 dist/sunbird-ui-components/popover/popover.module.d.ts create mode 100644 dist/sunbird-ui-components/progressbar/progressbar-config.d.ts create mode 100644 dist/sunbird-ui-components/progressbar/progressbar.d.ts create mode 100644 dist/sunbird-ui-components/progressbar/progressbar.module.d.ts create mode 100644 dist/sunbird-ui-components/rating/rating-config.d.ts create mode 100644 dist/sunbird-ui-components/rating/rating.d.ts create mode 100644 dist/sunbird-ui-components/rating/rating.module.d.ts create mode 100644 dist/sunbird-ui-components/sunbird-ui-components.d.ts create mode 100644 dist/sunbird-ui-components/sunbird-ui-components.metadata.json create mode 100644 dist/sunbird-ui-components/tabset/tabset-config.d.ts create mode 100644 dist/sunbird-ui-components/tabset/tabset.d.ts create mode 100644 dist/sunbird-ui-components/tabset/tabset.module.d.ts create mode 100644 dist/sunbird-ui-components/test/typings/custom-jasmine.d.ts create mode 100644 dist/sunbird-ui-components/timepicker/ngb-time-adapter.d.ts create mode 100644 dist/sunbird-ui-components/timepicker/ngb-time-struct.d.ts create mode 100644 dist/sunbird-ui-components/timepicker/ngb-time.d.ts create mode 100644 dist/sunbird-ui-components/timepicker/timepicker-config.d.ts create mode 100644 dist/sunbird-ui-components/timepicker/timepicker-i18n.d.ts create mode 100644 dist/sunbird-ui-components/timepicker/timepicker.d.ts create mode 100644 dist/sunbird-ui-components/timepicker/timepicker.module.d.ts create mode 100644 dist/sunbird-ui-components/toast/toast-config.d.ts create mode 100644 dist/sunbird-ui-components/toast/toast.d.ts create mode 100644 dist/sunbird-ui-components/toast/toast.module.d.ts create mode 100644 dist/sunbird-ui-components/tooltip/tooltip-config.d.ts create mode 100644 dist/sunbird-ui-components/tooltip/tooltip.d.ts create mode 100644 dist/sunbird-ui-components/tooltip/tooltip.module.d.ts create mode 100644 dist/sunbird-ui-components/typeahead/highlight.d.ts create mode 100644 dist/sunbird-ui-components/typeahead/typeahead-config.d.ts create mode 100644 dist/sunbird-ui-components/typeahead/typeahead-window.d.ts create mode 100644 dist/sunbird-ui-components/typeahead/typeahead.d.ts create mode 100644 dist/sunbird-ui-components/typeahead/typeahead.module.d.ts create mode 100644 dist/sunbird-ui-components/util/accessibility/live.d.ts create mode 100644 dist/sunbird-ui-components/util/autoclose.d.ts create mode 100644 dist/sunbird-ui-components/util/focus-trap.d.ts create mode 100644 dist/sunbird-ui-components/util/key.d.ts create mode 100644 dist/sunbird-ui-components/util/popup.d.ts create mode 100644 dist/sunbird-ui-components/util/positioning.d.ts create mode 100644 dist/sunbird-ui-components/util/scrollbar.d.ts create mode 100644 dist/sunbird-ui-components/util/triggers.d.ts create mode 100644 dist/sunbird-ui-components/util/util.d.ts delete mode 100644 misc/api-doc-test-cases/class-with-doc.ts delete mode 100644 misc/api-doc-test-cases/component-with-internal-methods.ts delete mode 100644 misc/api-doc-test-cases/directives-no-in-out.ts delete mode 100644 misc/api-doc-test-cases/directives-with-inputs-default-vals.ts delete mode 100644 misc/api-doc-test-cases/directives-with-inputs-types-to-infer.ts delete mode 100644 misc/api-doc-test-cases/directives-with-inputs.ts delete mode 100644 misc/api-doc-test-cases/directives-with-methods.ts delete mode 100644 misc/api-doc-test-cases/directives-with-outputs.ts delete mode 100644 misc/api-doc-test-cases/directives-with-tricky-inputs.ts delete mode 100644 misc/api-doc-test-cases/interface-with-methods.ts delete mode 100644 misc/api-doc-test-cases/interface-with-properties.ts delete mode 100644 misc/api-doc-test-cases/no-docs.ts delete mode 100644 misc/api-doc-test-cases/release-deprecation.ts delete mode 100644 misc/api-doc-test-cases/release-features.ts delete mode 100644 misc/api-doc-test-cases/services-with-methods.ts delete mode 100644 misc/api-doc-test-cases/services-with-properties.ts delete mode 100644 misc/api-doc-test-cases/type-parameters.ts delete mode 100644 misc/api-doc-test-cases/types.ts delete mode 100644 misc/generate-docs.ts delete mode 100644 misc/generate-stackblitzes.ts delete mode 100644 misc/parse-demo-test-cases/multiple/one/test.component.ts delete mode 100644 misc/parse-demo-test-cases/multiple/one/test.module.ts delete mode 100644 misc/parse-demo-test-cases/multiple/two/test.component.ts delete mode 100644 misc/parse-demo-test-cases/multiple/two/test.module.ts delete mode 100644 misc/parse-demo-test-cases/no-bootstrap-component/test.component.ts delete mode 100644 misc/parse-demo-test-cases/no-bootstrap-component/test.module.ts delete mode 100644 misc/parse-demo-test-cases/no-component-selector/test.component.ts delete mode 100644 misc/parse-demo-test-cases/no-component-selector/test.module.ts delete mode 100644 misc/parse-demo-test-cases/no-module/test.component.ts delete mode 100644 misc/parse-demo-test-cases/oneliner/test.component.ts delete mode 100644 misc/parse-demo-test-cases/oneliner/test.module.ts delete mode 100644 misc/parse-demo-test-cases/simple/test.component.ts delete mode 100644 misc/parse-demo-test-cases/simple/test.module.ts delete mode 100644 misc/parse-demo-test-cases/syntax/test.component.ts delete mode 100644 misc/parse-demo-test-cases/syntax/test.module.ts delete mode 100644 misc/parse-demo.spec.ts delete mode 100644 misc/parse-demo.ts delete mode 100644 misc/stackblitzes-templates/index.html.ejs delete mode 100644 misc/stackblitzes-templates/main.ts.ejs delete mode 100644 misc/stackblitzes-templates/polyfills.ts delete mode 100644 misc/stackblitzes-templates/stackblitz.html.ejs delete mode 100644 misc/validate-commit.js diff --git a/dist/sunbird-ui-components/accordion/accordion-config.d.ts b/dist/sunbird-ui-components/accordion/accordion-config.d.ts new file mode 100644 index 0000000..987b672 --- /dev/null +++ b/dist/sunbird-ui-components/accordion/accordion-config.d.ts @@ -0,0 +1,10 @@ +/** + * A configuration service for the [NgbAccordion](#/components/accordion/api#NgbAccordion) component. + * + * You can inject this service, typically in your root component, and customize its properties + * to provide default values for all accordions used in the application. + */ +export declare class NgbAccordionConfig { + closeOthers: boolean; + type: string; +} diff --git a/dist/sunbird-ui-components/accordion/accordion.d.ts b/dist/sunbird-ui-components/accordion/accordion.d.ts new file mode 100644 index 0000000..a0776bf --- /dev/null +++ b/dist/sunbird-ui-components/accordion/accordion.d.ts @@ -0,0 +1,187 @@ +import { AfterContentChecked, EventEmitter, QueryList, TemplateRef } from '@angular/core'; +import { NgbAccordionConfig } from './accordion-config'; +/** + * The context for the [NgbPanelHeader](#/components/accordion/api#NgbPanelHeader) template + * + * @since 4.1.0 + */ +export interface NgbPanelHeaderContext { + /** + * `True` if current panel is opened + */ + opened: boolean; +} +/** + * A directive that wraps an accordion panel header with any HTML markup and a toggling button + * marked with [`NgbPanelToggle`](#/components/accordion/api#NgbPanelToggle). + * See the [header customization demo](#/components/accordion/examples#header) for more details. + * + * You can also use [`NgbPanelTitle`](#/components/accordion/api#NgbPanelTitle) to customize only the panel title. + * + * @since 4.1.0 + */ +export declare class NgbPanelHeader { + templateRef: TemplateRef; + constructor(templateRef: TemplateRef); +} +/** + * A directive that wraps only the panel title with HTML markup inside. + * + * You can also use [`NgbPanelHeader`](#/components/accordion/api#NgbPanelHeader) to customize the full panel header. + */ +export declare class NgbPanelTitle { + templateRef: TemplateRef; + constructor(templateRef: TemplateRef); +} +/** + * A directive that wraps the accordion panel content. + */ +export declare class NgbPanelContent { + templateRef: TemplateRef; + constructor(templateRef: TemplateRef); +} +/** + * A directive that wraps an individual accordion panel with title and collapsible content. + */ +export declare class NgbPanel implements AfterContentChecked { + /** + * If `true`, the panel is disabled an can't be toggled. + */ + disabled: boolean; + /** + * An optional id for the panel that must be unique on the page. + * + * If not provided, it will be auto-generated in the `ngb-panel-xxx` format. + */ + id: string; + isOpen: boolean; + /** + * The panel title. + * + * You can alternatively use [`NgbPanelTitle`](#/components/accordion/api#NgbPanelTitle) to set panel title. + */ + title: string; + /** + * Type of the current panel. + * + * Bootstrap provides styles for the following types: `'success'`, `'info'`, `'warning'`, `'danger'`, `'primary'`, + * `'secondary'`, `'light'` and `'dark'`. + */ + type: string; + titleTpl: NgbPanelTitle | null; + headerTpl: NgbPanelHeader | null; + contentTpl: NgbPanelContent | null; + titleTpls: QueryList; + headerTpls: QueryList; + contentTpls: QueryList; + ngAfterContentChecked(): void; +} +/** + * An event emitted right before toggling an accordion panel. + */ +export interface NgbPanelChangeEvent { + /** + * The id of the accordion panel that is being toggled. + */ + panelId: string; + /** + * The next state of the panel. + * + * `true` if it will be opened, `false` if closed. + */ + nextState: boolean; + /** + * Calling this function will prevent panel toggling. + */ + preventDefault: () => void; +} +/** + * Accordion is a collection of collapsible panels (bootstrap cards). + * + * It can ensure only one panel is opened at a time and allows to customize panel + * headers. + */ +export declare class NgbAccordion implements AfterContentChecked { + panels: QueryList; + /** + * An array or comma separated strings of panel ids that should be opened **initially**. + * + * For subsequent changes use methods like `expand()`, `collapse()`, etc. and + * the `(panelChange)` event. + */ + activeIds: string | string[]; + /** + * If `true`, only one panel could be opened at a time. + * + * Opening a new panel will close others. + */ + closeOtherPanels: boolean; + /** + * If `true`, panel content will be detached from DOM and not simply hidden when the panel is collapsed. + */ + destroyOnHide: boolean; + /** + * Type of panels. + * + * Bootstrap provides styles for the following types: `'success'`, `'info'`, `'warning'`, `'danger'`, `'primary'`, + * `'secondary'`, `'light'` and `'dark'`. + */ + type: string; + /** + * Event emitted right before the panel toggle happens. + * + * See [NgbPanelChangeEvent](#/components/accordion/api#NgbPanelChangeEvent) for payload details. + */ + panelChange: EventEmitter; + constructor(config: NgbAccordionConfig); + /** + * Checks if a panel with a given id is expanded. + */ + isExpanded(panelId: string): boolean; + /** + * Expands a panel with a given id. + * + * Has no effect if the panel is already expanded or disabled. + */ + expand(panelId: string): void; + /** + * Expands all panels, if `[closeOthers]` is `false`. + * + * If `[closeOthers]` is `true`, it will expand the first panel, unless there is already a panel opened. + */ + expandAll(): void; + /** + * Collapses a panel with the given id. + * + * Has no effect if the panel is already collapsed or disabled. + */ + collapse(panelId: string): void; + /** + * Collapses all opened panels. + */ + collapseAll(): void; + /** + * Toggles a panel with the given id. + * + * Has no effect if the panel is disabled. + */ + toggle(panelId: string): void; + ngAfterContentChecked(): void; + private _changeOpenState; + private _closeOthers; + private _findPanelById; + private _updateActiveIds; +} +/** + * A directive to put on a button that toggles panel opening and closing. + * + * To be used inside the [`NgbPanelHeader`](#/components/accordion/api#NgbPanelHeader) + * + * @since 4.1.0 + */ +export declare class NgbPanelToggle { + accordion: NgbAccordion; + panel: NgbPanel; + ngbPanelToggle: NgbPanel; + constructor(accordion: NgbAccordion, panel: NgbPanel); +} diff --git a/dist/sunbird-ui-components/accordion/accordion.module.d.ts b/dist/sunbird-ui-components/accordion/accordion.module.d.ts new file mode 100644 index 0000000..63c077b --- /dev/null +++ b/dist/sunbird-ui-components/accordion/accordion.module.d.ts @@ -0,0 +1,4 @@ +export { NgbAccordion, NgbPanel, NgbPanelTitle, NgbPanelContent, NgbPanelChangeEvent, NgbPanelHeader, NgbPanelHeaderContext, NgbPanelToggle } from './accordion'; +export { NgbAccordionConfig } from './accordion-config'; +export declare class NgbAccordionModule { +} diff --git a/dist/sunbird-ui-components/alert/alert-config.d.ts b/dist/sunbird-ui-components/alert/alert-config.d.ts new file mode 100644 index 0000000..e241dc3 --- /dev/null +++ b/dist/sunbird-ui-components/alert/alert-config.d.ts @@ -0,0 +1,10 @@ +/** + * A configuration service for the [NgbAlert](#/components/alert/api#NgbAlert) component. + * + * You can inject this service, typically in your root component, and customize its properties + * to provide default values for all alerts used in the application. + */ +export declare class NgbAlertConfig { + dismissible: boolean; + type: string; +} diff --git a/dist/sunbird-ui-components/alert/alert.d.ts b/dist/sunbird-ui-components/alert/alert.d.ts new file mode 100644 index 0000000..56ee2c8 --- /dev/null +++ b/dist/sunbird-ui-components/alert/alert.d.ts @@ -0,0 +1,33 @@ +import { EventEmitter, Renderer2, ElementRef, OnChanges, OnInit, SimpleChanges } from '@angular/core'; +import { NgbAlertConfig } from './alert-config'; +/** + * Alert is a component to provide contextual feedback messages for user. + * + * It supports several alert types and can be dismissed. + */ +export declare class NgbAlert implements OnInit, OnChanges { + private _renderer; + private _element; + /** + * If `true`, alert can be dismissed by the user. + * + * The close button (×) will be displayed and you can be notified + * of the event with the `(close)` output. + */ + dismissible: boolean; + /** + * Type of the alert. + * + * Bootstrap provides styles for the following types: `'success'`, `'info'`, `'warning'`, `'danger'`, `'primary'`, + * `'secondary'`, `'light'` and `'dark'`. + */ + type: string; + /** + * An event emitted when the close button is clicked. It has no payload and only relevant for dismissible alerts. + */ + close: EventEmitter; + constructor(config: NgbAlertConfig, _renderer: Renderer2, _element: ElementRef); + closeHandler(): void; + ngOnChanges(changes: SimpleChanges): void; + ngOnInit(): void; +} diff --git a/dist/sunbird-ui-components/alert/alert.module.d.ts b/dist/sunbird-ui-components/alert/alert.module.d.ts new file mode 100644 index 0000000..12b6eec --- /dev/null +++ b/dist/sunbird-ui-components/alert/alert.module.d.ts @@ -0,0 +1,4 @@ +export { NgbAlert } from './alert'; +export { NgbAlertConfig } from './alert-config'; +export declare class NgbAlertModule { +} diff --git a/dist/sunbird-ui-components/bundles/sunbird-ui-components.umd.js b/dist/sunbird-ui-components/bundles/sunbird-ui-components.umd.js new file mode 100644 index 0000000..39234f0 --- /dev/null +++ b/dist/sunbird-ui-components/bundles/sunbird-ui-components.umd.js @@ -0,0 +1,12846 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/common'), require('@angular/forms'), require('rxjs'), require('rxjs/operators')) : + typeof define === 'function' && define.amd ? define('sb', ['exports', '@angular/core', '@angular/common', '@angular/forms', 'rxjs', 'rxjs/operators'], factory) : + (global = global || self, factory(global.sb = {}, global.ng.core, global.ng.common, global.ng.forms, global.rxjs, global.rxjs.operators)); +}(this, function (exports, core, common, forms, rxjs, operators) { 'use strict'; + + /*! ***************************************************************************** + Copyright (c) Microsoft Corporation. All rights reserved. + Licensed under the Apache License, Version 2.0 (the "License"); you may not use + this file except in compliance with the License. You may obtain a copy of the + License at http://www.apache.org/licenses/LICENSE-2.0 + + THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED + WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, + MERCHANTABLITY OR NON-INFRINGEMENT. + + See the Apache Version 2.0 License for specific language governing permissions + and limitations under the License. + ***************************************************************************** */ + /* global Reflect, Promise */ + + var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + + function __extends(d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + } + + var __assign = function() { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); + }; + + function __values(o) { + var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0; + if (m) return m.call(o); + return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + } + + function __read(o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; + } + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** + * A configuration service for the [SbCard](#/components/alert/api#SbCard) component. + * + * You can inject this service, typically in your root component, and customize its properties + * to provide default values for all alerts used in the application. + */ + var SbCardConfig = /** @class */ (function () { + function SbCardConfig() { + this.dismissible = true; + this.type = 'warning'; + } + SbCardConfig.decorators = [ + { type: core.Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ SbCardConfig.ngInjectableDef = core.ɵɵdefineInjectable({ factory: function SbCardConfig_Factory() { return new SbCardConfig(); }, token: SbCardConfig, providedIn: "root" }); + return SbCardConfig; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** + * Alert is a component to provide contextual feedback messages for user. + * + * It supports several alert types and can be dismissed. + */ + var SbCard = /** @class */ (function () { + function SbCard(config, _renderer, _element) { + this._renderer = _renderer; + this._element = _element; + /** + * An event emitted when the close button is clicked. It has no payload and only relevant for dismissible alerts. + */ + this.close = new core.EventEmitter(); + this.dismissible = config.dismissible; + this.type = config.type; + } + /** + * @return {?} + */ + SbCard.prototype.closeHandler = /** + * @return {?} + */ + function () { this.close.emit(null); }; + /** + * @param {?} changes + * @return {?} + */ + SbCard.prototype.ngOnChanges = /** + * @param {?} changes + * @return {?} + */ + function (changes) { + /** @type {?} */ + var typeChange = changes['type']; + if (typeChange && !typeChange.firstChange) { + this._renderer.removeClass(this._element.nativeElement, "alert-" + typeChange.previousValue); + this._renderer.addClass(this._element.nativeElement, "alert-" + typeChange.currentValue); + } + }; + /** + * @return {?} + */ + SbCard.prototype.ngOnInit = /** + * @return {?} + */ + function () { this._renderer.addClass(this._element.nativeElement, "alert-" + this.type); }; + SbCard.decorators = [ + { type: core.Component, args: [{ + selector: 'sb-card', + changeDetection: core.ChangeDetectionStrategy.OnPush, + encapsulation: core.ViewEncapsulation.None, + host: { 'role': 'alert', 'class': 'alert', '[class.alert-dismissible]': 'dismissible' }, + template: "\n \n \n ", + styles: ["ngb-alert{display:block}"] + }] } + ]; + /** @nocollapse */ + SbCard.ctorParameters = function () { return [ + { type: SbCardConfig }, + { type: core.Renderer2 }, + { type: core.ElementRef } + ]; }; + SbCard.propDecorators = { + dismissible: [{ type: core.Input }], + type: [{ type: core.Input }], + close: [{ type: core.Output }] + }; + return SbCard; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + var SbCardModule = /** @class */ (function () { + function SbCardModule() { + } + SbCardModule.decorators = [ + { type: core.NgModule, args: [{ declarations: [SbCard], exports: [SbCard], imports: [common.CommonModule], entryComponents: [SbCard] },] } + ]; + return SbCardModule; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** + * @param {?} value + * @return {?} + */ + function toInteger(value) { + return parseInt("" + value, 10); + } + /** + * @param {?} value + * @return {?} + */ + function toString(value) { + return (value !== undefined && value !== null) ? "" + value : ''; + } + /** + * @param {?} value + * @param {?} max + * @param {?=} min + * @return {?} + */ + function getValueInRange(value, max, min) { + if (min === void 0) { min = 0; } + return Math.max(Math.min(value, max), min); + } + /** + * @param {?} value + * @return {?} + */ + function isString(value) { + return typeof value === 'string'; + } + /** + * @param {?} value + * @return {?} + */ + function isNumber(value) { + return !isNaN(toInteger(value)); + } + /** + * @param {?} value + * @return {?} + */ + function isInteger(value) { + return typeof value === 'number' && isFinite(value) && Math.floor(value) === value; + } + /** + * @param {?} value + * @return {?} + */ + function isDefined(value) { + return value !== undefined && value !== null; + } + /** + * @param {?} value + * @return {?} + */ + function padNumber(value) { + if (isNumber(value)) { + return ("0" + value).slice(-2); + } + else { + return ''; + } + } + /** + * @param {?} text + * @return {?} + */ + function regExpEscape(text) { + return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); + } + /** + * @param {?} element + * @param {?} className + * @return {?} + */ + function hasClassName(element, className) { + return element && element.className && element.className.split && + element.className.split(/\s+/).indexOf(className) >= 0; + } + if (typeof Element !== 'undefined' && !Element.prototype.closest) { + // Polyfill for ie10+ + if (!Element.prototype.matches) { + // IE uses the non-standard name: msMatchesSelector + Element.prototype.matches = ((/** @type {?} */ (Element.prototype))).msMatchesSelector || Element.prototype.webkitMatchesSelector; + } + Element.prototype.closest = (/** + * @param {?} s + * @return {?} + */ + function (s) { + /** @type {?} */ + var el = this; + if (!document.documentElement.contains(el)) { + return null; + } + do { + if (el.matches(s)) { + return el; + } + el = el.parentElement || el.parentNode; + } while (el !== null && el.nodeType === 1); + return null; + }); + } + /** + * @param {?} element + * @param {?} selector + * @return {?} + */ + function closest(element, selector) { + if (!selector) { + return null; + } + return element.closest(selector); + } + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** + * A configuration service for the [NgbAccordion](#/components/accordion/api#NgbAccordion) component. + * + * You can inject this service, typically in your root component, and customize its properties + * to provide default values for all accordions used in the application. + */ + var NgbAccordionConfig = /** @class */ (function () { + function NgbAccordionConfig() { + this.closeOthers = false; + } + NgbAccordionConfig.decorators = [ + { type: core.Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ NgbAccordionConfig.ngInjectableDef = core.ɵɵdefineInjectable({ factory: function NgbAccordionConfig_Factory() { return new NgbAccordionConfig(); }, token: NgbAccordionConfig, providedIn: "root" }); + return NgbAccordionConfig; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** @type {?} */ + var nextId = 0; + /** + * A directive that wraps an accordion panel header with any HTML markup and a toggling button + * marked with [`NgbPanelToggle`](#/components/accordion/api#NgbPanelToggle). + * See the [header customization demo](#/components/accordion/examples#header) for more details. + * + * You can also use [`NgbPanelTitle`](#/components/accordion/api#NgbPanelTitle) to customize only the panel title. + * + * \@since 4.1.0 + */ + var NgbPanelHeader = /** @class */ (function () { + function NgbPanelHeader(templateRef) { + this.templateRef = templateRef; + } + NgbPanelHeader.decorators = [ + { type: core.Directive, args: [{ selector: 'ng-template[ngbPanelHeader]' },] } + ]; + /** @nocollapse */ + NgbPanelHeader.ctorParameters = function () { return [ + { type: core.TemplateRef } + ]; }; + return NgbPanelHeader; + }()); + /** + * A directive that wraps only the panel title with HTML markup inside. + * + * You can also use [`NgbPanelHeader`](#/components/accordion/api#NgbPanelHeader) to customize the full panel header. + */ + var NgbPanelTitle = /** @class */ (function () { + function NgbPanelTitle(templateRef) { + this.templateRef = templateRef; + } + NgbPanelTitle.decorators = [ + { type: core.Directive, args: [{ selector: 'ng-template[ngbPanelTitle]' },] } + ]; + /** @nocollapse */ + NgbPanelTitle.ctorParameters = function () { return [ + { type: core.TemplateRef } + ]; }; + return NgbPanelTitle; + }()); + /** + * A directive that wraps the accordion panel content. + */ + var NgbPanelContent = /** @class */ (function () { + function NgbPanelContent(templateRef) { + this.templateRef = templateRef; + } + NgbPanelContent.decorators = [ + { type: core.Directive, args: [{ selector: 'ng-template[ngbPanelContent]' },] } + ]; + /** @nocollapse */ + NgbPanelContent.ctorParameters = function () { return [ + { type: core.TemplateRef } + ]; }; + return NgbPanelContent; + }()); + /** + * A directive that wraps an individual accordion panel with title and collapsible content. + */ + var NgbPanel = /** @class */ (function () { + function NgbPanel() { + /** + * If `true`, the panel is disabled an can't be toggled. + */ + this.disabled = false; + /** + * An optional id for the panel that must be unique on the page. + * + * If not provided, it will be auto-generated in the `ngb-panel-xxx` format. + */ + this.id = "ngb-panel-" + nextId++; + this.isOpen = false; + } + /** + * @return {?} + */ + NgbPanel.prototype.ngAfterContentChecked = /** + * @return {?} + */ + function () { + // We are using @ContentChildren instead of @ContentChild as in the Angular version being used + // only @ContentChildren allows us to specify the {descendants: false} option. + // Without {descendants: false} we are hitting bugs described in: + // https://github.com/ng-bootstrap/ng-bootstrap/issues/2240 + this.titleTpl = this.titleTpls.first; + this.headerTpl = this.headerTpls.first; + this.contentTpl = this.contentTpls.first; + }; + NgbPanel.decorators = [ + { type: core.Directive, args: [{ selector: 'ngb-panel' },] } + ]; + NgbPanel.propDecorators = { + disabled: [{ type: core.Input }], + id: [{ type: core.Input }], + title: [{ type: core.Input }], + type: [{ type: core.Input }], + titleTpls: [{ type: core.ContentChildren, args: [NgbPanelTitle, { descendants: false },] }], + headerTpls: [{ type: core.ContentChildren, args: [NgbPanelHeader, { descendants: false },] }], + contentTpls: [{ type: core.ContentChildren, args: [NgbPanelContent, { descendants: false },] }] + }; + return NgbPanel; + }()); + /** + * Accordion is a collection of collapsible panels (bootstrap cards). + * + * It can ensure only one panel is opened at a time and allows to customize panel + * headers. + */ + var NgbAccordion = /** @class */ (function () { + function NgbAccordion(config) { + /** + * An array or comma separated strings of panel ids that should be opened **initially**. + * + * For subsequent changes use methods like `expand()`, `collapse()`, etc. and + * the `(panelChange)` event. + */ + this.activeIds = []; + /** + * If `true`, panel content will be detached from DOM and not simply hidden when the panel is collapsed. + */ + this.destroyOnHide = true; + /** + * Event emitted right before the panel toggle happens. + * + * See [NgbPanelChangeEvent](#/components/accordion/api#NgbPanelChangeEvent) for payload details. + */ + this.panelChange = new core.EventEmitter(); + this.type = config.type; + this.closeOtherPanels = config.closeOthers; + } + /** + * Checks if a panel with a given id is expanded. + */ + /** + * Checks if a panel with a given id is expanded. + * @param {?} panelId + * @return {?} + */ + NgbAccordion.prototype.isExpanded = /** + * Checks if a panel with a given id is expanded. + * @param {?} panelId + * @return {?} + */ + function (panelId) { return this.activeIds.indexOf(panelId) > -1; }; + /** + * Expands a panel with a given id. + * + * Has no effect if the panel is already expanded or disabled. + */ + /** + * Expands a panel with a given id. + * + * Has no effect if the panel is already expanded or disabled. + * @param {?} panelId + * @return {?} + */ + NgbAccordion.prototype.expand = /** + * Expands a panel with a given id. + * + * Has no effect if the panel is already expanded or disabled. + * @param {?} panelId + * @return {?} + */ + function (panelId) { this._changeOpenState(this._findPanelById(panelId), true); }; + /** + * Expands all panels, if `[closeOthers]` is `false`. + * + * If `[closeOthers]` is `true`, it will expand the first panel, unless there is already a panel opened. + */ + /** + * Expands all panels, if `[closeOthers]` is `false`. + * + * If `[closeOthers]` is `true`, it will expand the first panel, unless there is already a panel opened. + * @return {?} + */ + NgbAccordion.prototype.expandAll = /** + * Expands all panels, if `[closeOthers]` is `false`. + * + * If `[closeOthers]` is `true`, it will expand the first panel, unless there is already a panel opened. + * @return {?} + */ + function () { + var _this = this; + if (this.closeOtherPanels) { + if (this.activeIds.length === 0 && this.panels.length) { + this._changeOpenState(this.panels.first, true); + } + } + else { + this.panels.forEach((/** + * @param {?} panel + * @return {?} + */ + function (panel) { return _this._changeOpenState(panel, true); })); + } + }; + /** + * Collapses a panel with the given id. + * + * Has no effect if the panel is already collapsed or disabled. + */ + /** + * Collapses a panel with the given id. + * + * Has no effect if the panel is already collapsed or disabled. + * @param {?} panelId + * @return {?} + */ + NgbAccordion.prototype.collapse = /** + * Collapses a panel with the given id. + * + * Has no effect if the panel is already collapsed or disabled. + * @param {?} panelId + * @return {?} + */ + function (panelId) { this._changeOpenState(this._findPanelById(panelId), false); }; + /** + * Collapses all opened panels. + */ + /** + * Collapses all opened panels. + * @return {?} + */ + NgbAccordion.prototype.collapseAll = /** + * Collapses all opened panels. + * @return {?} + */ + function () { + var _this = this; + this.panels.forEach((/** + * @param {?} panel + * @return {?} + */ + function (panel) { _this._changeOpenState(panel, false); })); + }; + /** + * Toggles a panel with the given id. + * + * Has no effect if the panel is disabled. + */ + /** + * Toggles a panel with the given id. + * + * Has no effect if the panel is disabled. + * @param {?} panelId + * @return {?} + */ + NgbAccordion.prototype.toggle = /** + * Toggles a panel with the given id. + * + * Has no effect if the panel is disabled. + * @param {?} panelId + * @return {?} + */ + function (panelId) { + /** @type {?} */ + var panel = this._findPanelById(panelId); + if (panel) { + this._changeOpenState(panel, !panel.isOpen); + } + }; + /** + * @return {?} + */ + NgbAccordion.prototype.ngAfterContentChecked = /** + * @return {?} + */ + function () { + var _this = this; + // active id updates + if (isString(this.activeIds)) { + this.activeIds = this.activeIds.split(/\s*,\s*/); + } + // update panels open states + this.panels.forEach((/** + * @param {?} panel + * @return {?} + */ + function (panel) { return panel.isOpen = !panel.disabled && _this.activeIds.indexOf(panel.id) > -1; })); + // closeOthers updates + if (this.activeIds.length > 1 && this.closeOtherPanels) { + this._closeOthers(this.activeIds[0]); + this._updateActiveIds(); + } + }; + /** + * @private + * @param {?} panel + * @param {?} nextState + * @return {?} + */ + NgbAccordion.prototype._changeOpenState = /** + * @private + * @param {?} panel + * @param {?} nextState + * @return {?} + */ + function (panel, nextState) { + if (panel && !panel.disabled && panel.isOpen !== nextState) { + /** @type {?} */ + var defaultPrevented_1 = false; + this.panelChange.emit({ panelId: panel.id, nextState: nextState, preventDefault: (/** + * @return {?} + */ + function () { defaultPrevented_1 = true; }) }); + if (!defaultPrevented_1) { + panel.isOpen = nextState; + if (nextState && this.closeOtherPanels) { + this._closeOthers(panel.id); + } + this._updateActiveIds(); + } + } + }; + /** + * @private + * @param {?} panelId + * @return {?} + */ + NgbAccordion.prototype._closeOthers = /** + * @private + * @param {?} panelId + * @return {?} + */ + function (panelId) { + this.panels.forEach((/** + * @param {?} panel + * @return {?} + */ + function (panel) { + if (panel.id !== panelId) { + panel.isOpen = false; + } + })); + }; + /** + * @private + * @param {?} panelId + * @return {?} + */ + NgbAccordion.prototype._findPanelById = /** + * @private + * @param {?} panelId + * @return {?} + */ + function (panelId) { return this.panels.find((/** + * @param {?} p + * @return {?} + */ + function (p) { return p.id === panelId; })); }; + /** + * @private + * @return {?} + */ + NgbAccordion.prototype._updateActiveIds = /** + * @private + * @return {?} + */ + function () { + this.activeIds = this.panels.filter((/** + * @param {?} panel + * @return {?} + */ + function (panel) { return panel.isOpen && !panel.disabled; })).map((/** + * @param {?} panel + * @return {?} + */ + function (panel) { return panel.id; })); + }; + NgbAccordion.decorators = [ + { type: core.Component, args: [{ + selector: 'ngb-accordion', + exportAs: 'ngbAccordion', + host: { 'class': 'accordion', 'role': 'tablist', '[attr.aria-multiselectable]': '!closeOtherPanels' }, + template: "\n \n \n \n \n
\n
\n \n
\n
\n
\n \n
\n
\n
\n
\n " + }] } + ]; + /** @nocollapse */ + NgbAccordion.ctorParameters = function () { return [ + { type: NgbAccordionConfig } + ]; }; + NgbAccordion.propDecorators = { + panels: [{ type: core.ContentChildren, args: [NgbPanel,] }], + activeIds: [{ type: core.Input }], + closeOtherPanels: [{ type: core.Input, args: ['closeOthers',] }], + destroyOnHide: [{ type: core.Input }], + type: [{ type: core.Input }], + panelChange: [{ type: core.Output }] + }; + return NgbAccordion; + }()); + /** + * A directive to put on a button that toggles panel opening and closing. + * + * To be used inside the [`NgbPanelHeader`](#/components/accordion/api#NgbPanelHeader) + * + * \@since 4.1.0 + */ + var NgbPanelToggle = /** @class */ (function () { + function NgbPanelToggle(accordion, panel) { + this.accordion = accordion; + this.panel = panel; + } + Object.defineProperty(NgbPanelToggle.prototype, "ngbPanelToggle", { + set: /** + * @param {?} panel + * @return {?} + */ + function (panel) { + if (panel) { + this.panel = panel; + } + }, + enumerable: true, + configurable: true + }); + NgbPanelToggle.decorators = [ + { type: core.Directive, args: [{ + selector: 'button[ngbPanelToggle]', + host: { + 'type': 'button', + '[disabled]': 'panel.disabled', + '[class.collapsed]': '!panel.isOpen', + '[attr.aria-expanded]': 'panel.isOpen', + '[attr.aria-controls]': 'panel.id', + '(click)': 'accordion.toggle(panel.id)' + } + },] } + ]; + /** @nocollapse */ + NgbPanelToggle.ctorParameters = function () { return [ + { type: NgbAccordion }, + { type: NgbPanel, decorators: [{ type: core.Optional }, { type: core.Host }] } + ]; }; + NgbPanelToggle.propDecorators = { + ngbPanelToggle: [{ type: core.Input }] + }; + return NgbPanelToggle; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** @type {?} */ + var NGB_ACCORDION_DIRECTIVES = [NgbAccordion, NgbPanel, NgbPanelTitle, NgbPanelContent, NgbPanelHeader, NgbPanelToggle]; + var NgbAccordionModule = /** @class */ (function () { + function NgbAccordionModule() { + } + NgbAccordionModule.decorators = [ + { type: core.NgModule, args: [{ declarations: NGB_ACCORDION_DIRECTIVES, exports: NGB_ACCORDION_DIRECTIVES, imports: [common.CommonModule] },] } + ]; + return NgbAccordionModule; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** + * A configuration service for the [NgbAlert](#/components/alert/api#NgbAlert) component. + * + * You can inject this service, typically in your root component, and customize its properties + * to provide default values for all alerts used in the application. + */ + var NgbAlertConfig = /** @class */ (function () { + function NgbAlertConfig() { + this.dismissible = true; + this.type = 'warning'; + } + NgbAlertConfig.decorators = [ + { type: core.Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ NgbAlertConfig.ngInjectableDef = core.ɵɵdefineInjectable({ factory: function NgbAlertConfig_Factory() { return new NgbAlertConfig(); }, token: NgbAlertConfig, providedIn: "root" }); + return NgbAlertConfig; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** + * Alert is a component to provide contextual feedback messages for user. + * + * It supports several alert types and can be dismissed. + */ + var NgbAlert = /** @class */ (function () { + function NgbAlert(config, _renderer, _element) { + this._renderer = _renderer; + this._element = _element; + /** + * An event emitted when the close button is clicked. It has no payload and only relevant for dismissible alerts. + */ + this.close = new core.EventEmitter(); + this.dismissible = config.dismissible; + this.type = config.type; + } + /** + * @return {?} + */ + NgbAlert.prototype.closeHandler = /** + * @return {?} + */ + function () { this.close.emit(null); }; + /** + * @param {?} changes + * @return {?} + */ + NgbAlert.prototype.ngOnChanges = /** + * @param {?} changes + * @return {?} + */ + function (changes) { + /** @type {?} */ + var typeChange = changes['type']; + if (typeChange && !typeChange.firstChange) { + this._renderer.removeClass(this._element.nativeElement, "alert-" + typeChange.previousValue); + this._renderer.addClass(this._element.nativeElement, "alert-" + typeChange.currentValue); + } + }; + /** + * @return {?} + */ + NgbAlert.prototype.ngOnInit = /** + * @return {?} + */ + function () { this._renderer.addClass(this._element.nativeElement, "alert-" + this.type); }; + NgbAlert.decorators = [ + { type: core.Component, args: [{ + selector: 'ngb-alert', + changeDetection: core.ChangeDetectionStrategy.OnPush, + encapsulation: core.ViewEncapsulation.None, + host: { 'role': 'alert', 'class': 'alert', '[class.alert-dismissible]': 'dismissible' }, + template: "\n \n \n ", + styles: ["ngb-alert{display:block}"] + }] } + ]; + /** @nocollapse */ + NgbAlert.ctorParameters = function () { return [ + { type: NgbAlertConfig }, + { type: core.Renderer2 }, + { type: core.ElementRef } + ]; }; + NgbAlert.propDecorators = { + dismissible: [{ type: core.Input }], + type: [{ type: core.Input }], + close: [{ type: core.Output }] + }; + return NgbAlert; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + var NgbAlertModule = /** @class */ (function () { + function NgbAlertModule() { + } + NgbAlertModule.decorators = [ + { type: core.NgModule, args: [{ declarations: [NgbAlert], exports: [NgbAlert], imports: [common.CommonModule], entryComponents: [NgbAlert] },] } + ]; + return NgbAlertModule; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + var NgbButtonLabel = /** @class */ (function () { + function NgbButtonLabel() { + } + NgbButtonLabel.decorators = [ + { type: core.Directive, args: [{ + selector: '[ngbButtonLabel]', + host: { '[class.btn]': 'true', '[class.active]': 'active', '[class.disabled]': 'disabled', '[class.focus]': 'focused' } + },] } + ]; + return NgbButtonLabel; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** @type {?} */ + var NGB_CHECKBOX_VALUE_ACCESSOR = { + provide: forms.NG_VALUE_ACCESSOR, + useExisting: core.forwardRef((/** + * @return {?} + */ + function () { return NgbCheckBox; })), + multi: true + }; + /** + * Allows to easily create Bootstrap-style checkbox buttons. + * + * Integrates with forms, so the value of a checked button is bound to the underlying form control + * either in a reactive or template-driven way. + */ + var NgbCheckBox = /** @class */ (function () { + function NgbCheckBox(_label, _cd) { + this._label = _label; + this._cd = _cd; + /** + * If `true`, the checkbox button will be disabled + */ + this.disabled = false; + /** + * The form control value when the checkbox is checked. + */ + this.valueChecked = true; + /** + * The form control value when the checkbox is unchecked. + */ + this.valueUnChecked = false; + this.onChange = (/** + * @param {?} _ + * @return {?} + */ + function (_) { }); + this.onTouched = (/** + * @return {?} + */ + function () { }); + } + Object.defineProperty(NgbCheckBox.prototype, "focused", { + set: /** + * @param {?} isFocused + * @return {?} + */ + function (isFocused) { + this._label.focused = isFocused; + if (!isFocused) { + this.onTouched(); + } + }, + enumerable: true, + configurable: true + }); + /** + * @param {?} $event + * @return {?} + */ + NgbCheckBox.prototype.onInputChange = /** + * @param {?} $event + * @return {?} + */ + function ($event) { + /** @type {?} */ + var modelToPropagate = $event.target.checked ? this.valueChecked : this.valueUnChecked; + this.onChange(modelToPropagate); + this.onTouched(); + this.writeValue(modelToPropagate); + }; + /** + * @param {?} fn + * @return {?} + */ + NgbCheckBox.prototype.registerOnChange = /** + * @param {?} fn + * @return {?} + */ + function (fn) { this.onChange = fn; }; + /** + * @param {?} fn + * @return {?} + */ + NgbCheckBox.prototype.registerOnTouched = /** + * @param {?} fn + * @return {?} + */ + function (fn) { this.onTouched = fn; }; + /** + * @param {?} isDisabled + * @return {?} + */ + NgbCheckBox.prototype.setDisabledState = /** + * @param {?} isDisabled + * @return {?} + */ + function (isDisabled) { + this.disabled = isDisabled; + this._label.disabled = isDisabled; + }; + /** + * @param {?} value + * @return {?} + */ + NgbCheckBox.prototype.writeValue = /** + * @param {?} value + * @return {?} + */ + function (value) { + this.checked = value === this.valueChecked; + this._label.active = this.checked; + // label won't be updated, if it is inside the OnPush component when [ngModel] changes + this._cd.markForCheck(); + }; + NgbCheckBox.decorators = [ + { type: core.Directive, args: [{ + selector: '[ngbButton][type=checkbox]', + host: { + 'autocomplete': 'off', + '[checked]': 'checked', + '[disabled]': 'disabled', + '(change)': 'onInputChange($event)', + '(focus)': 'focused = true', + '(blur)': 'focused = false' + }, + providers: [NGB_CHECKBOX_VALUE_ACCESSOR] + },] } + ]; + /** @nocollapse */ + NgbCheckBox.ctorParameters = function () { return [ + { type: NgbButtonLabel }, + { type: core.ChangeDetectorRef } + ]; }; + NgbCheckBox.propDecorators = { + disabled: [{ type: core.Input }], + valueChecked: [{ type: core.Input }], + valueUnChecked: [{ type: core.Input }] + }; + return NgbCheckBox; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** @type {?} */ + var NGB_RADIO_VALUE_ACCESSOR = { + provide: forms.NG_VALUE_ACCESSOR, + useExisting: core.forwardRef((/** + * @return {?} + */ + function () { return NgbRadioGroup; })), + multi: true + }; + /** @type {?} */ + var nextId$1 = 0; + /** + * Allows to easily create Bootstrap-style radio buttons. + * + * Integrates with forms, so the value of a checked button is bound to the underlying form control + * either in a reactive or template-driven way. + */ + var NgbRadioGroup = /** @class */ (function () { + function NgbRadioGroup() { + this._radios = new Set(); + this._value = null; + /** + * Name of the radio group applied to radio input elements. + * + * Will be applied to all radio input elements inside the group, + * unless [`NgbRadio`](#/components/buttons/api#NgbRadio)'s specify names themselves. + * + * If not provided, will be generated in the `ngb-radio-xx` format. + */ + this.name = "ngb-radio-" + nextId$1++; + this.onChange = (/** + * @param {?} _ + * @return {?} + */ + function (_) { }); + this.onTouched = (/** + * @return {?} + */ + function () { }); + } + Object.defineProperty(NgbRadioGroup.prototype, "disabled", { + get: /** + * @return {?} + */ + function () { return this._disabled; }, + set: /** + * @param {?} isDisabled + * @return {?} + */ + function (isDisabled) { this.setDisabledState(isDisabled); }, + enumerable: true, + configurable: true + }); + /** + * @param {?} radio + * @return {?} + */ + NgbRadioGroup.prototype.onRadioChange = /** + * @param {?} radio + * @return {?} + */ + function (radio) { + this.writeValue(radio.value); + this.onChange(radio.value); + }; + /** + * @return {?} + */ + NgbRadioGroup.prototype.onRadioValueUpdate = /** + * @return {?} + */ + function () { this._updateRadiosValue(); }; + /** + * @param {?} radio + * @return {?} + */ + NgbRadioGroup.prototype.register = /** + * @param {?} radio + * @return {?} + */ + function (radio) { this._radios.add(radio); }; + /** + * @param {?} fn + * @return {?} + */ + NgbRadioGroup.prototype.registerOnChange = /** + * @param {?} fn + * @return {?} + */ + function (fn) { this.onChange = fn; }; + /** + * @param {?} fn + * @return {?} + */ + NgbRadioGroup.prototype.registerOnTouched = /** + * @param {?} fn + * @return {?} + */ + function (fn) { this.onTouched = fn; }; + /** + * @param {?} isDisabled + * @return {?} + */ + NgbRadioGroup.prototype.setDisabledState = /** + * @param {?} isDisabled + * @return {?} + */ + function (isDisabled) { + this._disabled = isDisabled; + this._updateRadiosDisabled(); + }; + /** + * @param {?} radio + * @return {?} + */ + NgbRadioGroup.prototype.unregister = /** + * @param {?} radio + * @return {?} + */ + function (radio) { this._radios.delete(radio); }; + /** + * @param {?} value + * @return {?} + */ + NgbRadioGroup.prototype.writeValue = /** + * @param {?} value + * @return {?} + */ + function (value) { + this._value = value; + this._updateRadiosValue(); + }; + /** + * @private + * @return {?} + */ + NgbRadioGroup.prototype._updateRadiosValue = /** + * @private + * @return {?} + */ + function () { + var _this = this; + this._radios.forEach((/** + * @param {?} radio + * @return {?} + */ + function (radio) { return radio.updateValue(_this._value); })); + }; + /** + * @private + * @return {?} + */ + NgbRadioGroup.prototype._updateRadiosDisabled = /** + * @private + * @return {?} + */ + function () { this._radios.forEach((/** + * @param {?} radio + * @return {?} + */ + function (radio) { return radio.updateDisabled(); })); }; + NgbRadioGroup.decorators = [ + { type: core.Directive, args: [{ selector: '[ngbRadioGroup]', host: { 'role': 'radiogroup' }, providers: [NGB_RADIO_VALUE_ACCESSOR] },] } + ]; + NgbRadioGroup.propDecorators = { + name: [{ type: core.Input }] + }; + return NgbRadioGroup; + }()); + /** + * A directive that marks an input of type "radio" as a part of the + * [`NgbRadioGroup`](#/components/buttons/api#NgbRadioGroup). + */ + var NgbRadio = /** @class */ (function () { + function NgbRadio(_group, _label, _renderer, _element, _cd) { + this._group = _group; + this._label = _label; + this._renderer = _renderer; + this._element = _element; + this._cd = _cd; + this._value = null; + this._group.register(this); + this.updateDisabled(); + } + Object.defineProperty(NgbRadio.prototype, "value", { + get: /** + * @return {?} + */ + function () { return this._value; }, + /** + * The form control value when current radio button is checked. + */ + set: /** + * The form control value when current radio button is checked. + * @param {?} value + * @return {?} + */ + function (value) { + this._value = value; + /** @type {?} */ + var stringValue = value ? value.toString() : ''; + this._renderer.setProperty(this._element.nativeElement, 'value', stringValue); + this._group.onRadioValueUpdate(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbRadio.prototype, "disabled", { + get: /** + * @return {?} + */ + function () { return this._group.disabled || this._disabled; }, + /** + * If `true`, current radio button will be disabled. + */ + set: /** + * If `true`, current radio button will be disabled. + * @param {?} isDisabled + * @return {?} + */ + function (isDisabled) { + this._disabled = isDisabled !== false; + this.updateDisabled(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbRadio.prototype, "focused", { + set: /** + * @param {?} isFocused + * @return {?} + */ + function (isFocused) { + if (this._label) { + this._label.focused = isFocused; + } + if (!isFocused) { + this._group.onTouched(); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbRadio.prototype, "checked", { + get: /** + * @return {?} + */ + function () { return this._checked; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbRadio.prototype, "nameAttr", { + get: /** + * @return {?} + */ + function () { return this.name || this._group.name; }, + enumerable: true, + configurable: true + }); + /** + * @return {?} + */ + NgbRadio.prototype.ngOnDestroy = /** + * @return {?} + */ + function () { this._group.unregister(this); }; + /** + * @return {?} + */ + NgbRadio.prototype.onChange = /** + * @return {?} + */ + function () { this._group.onRadioChange(this); }; + /** + * @param {?} value + * @return {?} + */ + NgbRadio.prototype.updateValue = /** + * @param {?} value + * @return {?} + */ + function (value) { + // label won't be updated, if it is inside the OnPush component when [ngModel] changes + if (this.value !== value) { + this._cd.markForCheck(); + } + this._checked = this.value === value; + this._label.active = this._checked; + }; + /** + * @return {?} + */ + NgbRadio.prototype.updateDisabled = /** + * @return {?} + */ + function () { this._label.disabled = this.disabled; }; + NgbRadio.decorators = [ + { type: core.Directive, args: [{ + selector: '[ngbButton][type=radio]', + host: { + '[checked]': 'checked', + '[disabled]': 'disabled', + '[name]': 'nameAttr', + '(change)': 'onChange()', + '(focus)': 'focused = true', + '(blur)': 'focused = false' + } + },] } + ]; + /** @nocollapse */ + NgbRadio.ctorParameters = function () { return [ + { type: NgbRadioGroup }, + { type: NgbButtonLabel }, + { type: core.Renderer2 }, + { type: core.ElementRef }, + { type: core.ChangeDetectorRef } + ]; }; + NgbRadio.propDecorators = { + name: [{ type: core.Input }], + value: [{ type: core.Input, args: ['value',] }], + disabled: [{ type: core.Input, args: ['disabled',] }] + }; + return NgbRadio; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** @type {?} */ + var NGB_BUTTON_DIRECTIVES = [NgbButtonLabel, NgbCheckBox, NgbRadioGroup, NgbRadio]; + var NgbButtonsModule = /** @class */ (function () { + function NgbButtonsModule() { + } + NgbButtonsModule.decorators = [ + { type: core.NgModule, args: [{ declarations: NGB_BUTTON_DIRECTIVES, exports: NGB_BUTTON_DIRECTIVES },] } + ]; + return NgbButtonsModule; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** + * A configuration service for the [NgbCarousel](#/components/carousel/api#NgbCarousel) component. + * + * You can inject this service, typically in your root component, and customize its properties + * to provide default values for all carousels used in the application. + */ + var NgbCarouselConfig = /** @class */ (function () { + function NgbCarouselConfig() { + this.interval = 5000; + this.wrap = true; + this.keyboard = true; + this.pauseOnHover = true; + this.showNavigationArrows = true; + this.showNavigationIndicators = true; + } + NgbCarouselConfig.decorators = [ + { type: core.Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ NgbCarouselConfig.ngInjectableDef = core.ɵɵdefineInjectable({ factory: function NgbCarouselConfig_Factory() { return new NgbCarouselConfig(); }, token: NgbCarouselConfig, providedIn: "root" }); + return NgbCarouselConfig; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** @type {?} */ + var nextId$2 = 0; + /** + * A directive that wraps the individual carousel slide. + */ + var NgbSlide = /** @class */ (function () { + function NgbSlide(tplRef) { + this.tplRef = tplRef; + /** + * Slide id that must be unique for the entire document. + * + * If not provided, will be generated in the `ngb-slide-xx` format. + */ + this.id = "ngb-slide-" + nextId$2++; + } + NgbSlide.decorators = [ + { type: core.Directive, args: [{ selector: 'ng-template[ngbSlide]' },] } + ]; + /** @nocollapse */ + NgbSlide.ctorParameters = function () { return [ + { type: core.TemplateRef } + ]; }; + NgbSlide.propDecorators = { + id: [{ type: core.Input }] + }; + return NgbSlide; + }()); + /** + * Carousel is a component to easily create and control slideshows. + * + * Allows to set intervals, change the way user interacts with the slides and provides a programmatic API. + */ + var NgbCarousel = /** @class */ (function () { + function NgbCarousel(config, _platformId, _ngZone, _cd) { + this._platformId = _platformId; + this._ngZone = _ngZone; + this._cd = _cd; + this.NgbSlideEventSource = NgbSlideEventSource; + this._destroy$ = new rxjs.Subject(); + this._interval$ = new rxjs.BehaviorSubject(0); + this._mouseHover$ = new rxjs.BehaviorSubject(false); + this._pauseOnHover$ = new rxjs.BehaviorSubject(false); + this._pause$ = new rxjs.BehaviorSubject(false); + this._wrap$ = new rxjs.BehaviorSubject(false); + /** + * An event emitted right after the slide transition is completed. + * + * See [`NgbSlideEvent`](#/components/carousel/api#NgbSlideEvent) for payload details. + */ + this.slide = new core.EventEmitter(); + this.interval = config.interval; + this.wrap = config.wrap; + this.keyboard = config.keyboard; + this.pauseOnHover = config.pauseOnHover; + this.showNavigationArrows = config.showNavigationArrows; + this.showNavigationIndicators = config.showNavigationIndicators; + } + Object.defineProperty(NgbCarousel.prototype, "interval", { + get: /** + * @return {?} + */ + function () { return this._interval$.value; }, + /** + * Time in milliseconds before the next slide is shown. + */ + set: /** + * Time in milliseconds before the next slide is shown. + * @param {?} value + * @return {?} + */ + function (value) { + this._interval$.next(value); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbCarousel.prototype, "wrap", { + get: /** + * @return {?} + */ + function () { return this._wrap$.value; }, + /** + * If `true`, will 'wrap' the carousel by switching from the last slide back to the first. + */ + set: /** + * If `true`, will 'wrap' the carousel by switching from the last slide back to the first. + * @param {?} value + * @return {?} + */ + function (value) { + this._wrap$.next(value); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbCarousel.prototype, "pauseOnHover", { + get: /** + * @return {?} + */ + function () { return this._pauseOnHover$.value; }, + /** + * If `true`, will pause slide switching when mouse cursor hovers the slide. + * + * @since 2.2.0 + */ + set: /** + * If `true`, will pause slide switching when mouse cursor hovers the slide. + * + * \@since 2.2.0 + * @param {?} value + * @return {?} + */ + function (value) { + this._pauseOnHover$.next(value); + }, + enumerable: true, + configurable: true + }); + /** + * @return {?} + */ + NgbCarousel.prototype.mouseEnter = /** + * @return {?} + */ + function () { + this._mouseHover$.next(true); + }; + /** + * @return {?} + */ + NgbCarousel.prototype.mouseLeave = /** + * @return {?} + */ + function () { + this._mouseHover$.next(false); + }; + /** + * @return {?} + */ + NgbCarousel.prototype.ngAfterContentInit = /** + * @return {?} + */ + function () { + var _this = this; + // setInterval() doesn't play well with SSR and protractor, + // so we should run it in the browser and outside Angular + if (common.isPlatformBrowser(this._platformId)) { + this._ngZone.runOutsideAngular((/** + * @return {?} + */ + function () { + /** @type {?} */ + var hasNextSlide$ = rxjs.combineLatest(_this.slide.pipe(operators.map((/** + * @param {?} slideEvent + * @return {?} + */ + function (slideEvent) { return slideEvent.current; })), operators.startWith(_this.activeId)), _this._wrap$, _this.slides.changes.pipe(operators.startWith(null))) + .pipe(operators.map((/** + * @param {?} __0 + * @return {?} + */ + function (_a) { + var _b = __read(_a, 2), currentSlideId = _b[0], wrap = _b[1]; + /** @type {?} */ + var slideArr = _this.slides.toArray(); + /** @type {?} */ + var currentSlideIdx = _this._getSlideIdxById(currentSlideId); + return wrap ? slideArr.length > 1 : currentSlideIdx < slideArr.length - 1; + })), operators.distinctUntilChanged()); + rxjs.combineLatest(_this._pause$, _this._pauseOnHover$, _this._mouseHover$, _this._interval$, hasNextSlide$) + .pipe(operators.map((/** + * @param {?} __0 + * @return {?} + */ + function (_a) { + var _b = __read(_a, 5), pause = _b[0], pauseOnHover = _b[1], mouseHover = _b[2], interval = _b[3], hasNextSlide = _b[4]; + return ((pause || (pauseOnHover && mouseHover) || !hasNextSlide) ? 0 : interval); + })), operators.distinctUntilChanged(), operators.switchMap((/** + * @param {?} interval + * @return {?} + */ + function (interval) { return interval > 0 ? rxjs.timer(interval, interval) : rxjs.NEVER; })), operators.takeUntil(_this._destroy$)) + .subscribe((/** + * @return {?} + */ + function () { return _this._ngZone.run((/** + * @return {?} + */ + function () { return _this.next(NgbSlideEventSource.TIMER); })); })); + })); + } + this.slides.changes.pipe(operators.takeUntil(this._destroy$)).subscribe((/** + * @return {?} + */ + function () { return _this._cd.markForCheck(); })); + }; + /** + * @return {?} + */ + NgbCarousel.prototype.ngAfterContentChecked = /** + * @return {?} + */ + function () { + /** @type {?} */ + var activeSlide = this._getSlideById(this.activeId); + this.activeId = activeSlide ? activeSlide.id : (this.slides.length ? this.slides.first.id : null); + }; + /** + * @return {?} + */ + NgbCarousel.prototype.ngOnDestroy = /** + * @return {?} + */ + function () { this._destroy$.next(); }; + /** + * Navigates to a slide with the specified identifier. + */ + /** + * Navigates to a slide with the specified identifier. + * @param {?} slideId + * @param {?=} source + * @return {?} + */ + NgbCarousel.prototype.select = /** + * Navigates to a slide with the specified identifier. + * @param {?} slideId + * @param {?=} source + * @return {?} + */ + function (slideId, source) { + this._cycleToSelected(slideId, this._getSlideEventDirection(this.activeId, slideId), source); + }; + /** + * Navigates to the previous slide. + */ + /** + * Navigates to the previous slide. + * @param {?=} source + * @return {?} + */ + NgbCarousel.prototype.prev = /** + * Navigates to the previous slide. + * @param {?=} source + * @return {?} + */ + function (source) { + this._cycleToSelected(this._getPrevSlide(this.activeId), NgbSlideEventDirection.RIGHT, source); + }; + /** + * Navigates to the next slide. + */ + /** + * Navigates to the next slide. + * @param {?=} source + * @return {?} + */ + NgbCarousel.prototype.next = /** + * Navigates to the next slide. + * @param {?=} source + * @return {?} + */ + function (source) { + this._cycleToSelected(this._getNextSlide(this.activeId), NgbSlideEventDirection.LEFT, source); + }; + /** + * Pauses cycling through the slides. + */ + /** + * Pauses cycling through the slides. + * @return {?} + */ + NgbCarousel.prototype.pause = /** + * Pauses cycling through the slides. + * @return {?} + */ + function () { this._pause$.next(true); }; + /** + * Restarts cycling through the slides from left to right. + */ + /** + * Restarts cycling through the slides from left to right. + * @return {?} + */ + NgbCarousel.prototype.cycle = /** + * Restarts cycling through the slides from left to right. + * @return {?} + */ + function () { this._pause$.next(false); }; + /** + * @private + * @param {?} slideIdx + * @param {?} direction + * @param {?=} source + * @return {?} + */ + NgbCarousel.prototype._cycleToSelected = /** + * @private + * @param {?} slideIdx + * @param {?} direction + * @param {?=} source + * @return {?} + */ + function (slideIdx, direction, source) { + /** @type {?} */ + var selectedSlide = this._getSlideById(slideIdx); + if (selectedSlide && selectedSlide.id !== this.activeId) { + this.slide.emit({ prev: this.activeId, current: selectedSlide.id, direction: direction, paused: this._pause$.value, source: source }); + this.activeId = selectedSlide.id; + } + // we get here after the interval fires or any external API call like next(), prev() or select() + this._cd.markForCheck(); + }; + /** + * @private + * @param {?} currentActiveSlideId + * @param {?} nextActiveSlideId + * @return {?} + */ + NgbCarousel.prototype._getSlideEventDirection = /** + * @private + * @param {?} currentActiveSlideId + * @param {?} nextActiveSlideId + * @return {?} + */ + function (currentActiveSlideId, nextActiveSlideId) { + /** @type {?} */ + var currentActiveSlideIdx = this._getSlideIdxById(currentActiveSlideId); + /** @type {?} */ + var nextActiveSlideIdx = this._getSlideIdxById(nextActiveSlideId); + return currentActiveSlideIdx > nextActiveSlideIdx ? NgbSlideEventDirection.RIGHT : NgbSlideEventDirection.LEFT; + }; + /** + * @private + * @param {?} slideId + * @return {?} + */ + NgbCarousel.prototype._getSlideById = /** + * @private + * @param {?} slideId + * @return {?} + */ + function (slideId) { return this.slides.find((/** + * @param {?} slide + * @return {?} + */ + function (slide) { return slide.id === slideId; })); }; + /** + * @private + * @param {?} slideId + * @return {?} + */ + NgbCarousel.prototype._getSlideIdxById = /** + * @private + * @param {?} slideId + * @return {?} + */ + function (slideId) { + return this.slides.toArray().indexOf(this._getSlideById(slideId)); + }; + /** + * @private + * @param {?} currentSlideId + * @return {?} + */ + NgbCarousel.prototype._getNextSlide = /** + * @private + * @param {?} currentSlideId + * @return {?} + */ + function (currentSlideId) { + /** @type {?} */ + var slideArr = this.slides.toArray(); + /** @type {?} */ + var currentSlideIdx = this._getSlideIdxById(currentSlideId); + /** @type {?} */ + var isLastSlide = currentSlideIdx === slideArr.length - 1; + return isLastSlide ? (this.wrap ? slideArr[0].id : slideArr[slideArr.length - 1].id) : + slideArr[currentSlideIdx + 1].id; + }; + /** + * @private + * @param {?} currentSlideId + * @return {?} + */ + NgbCarousel.prototype._getPrevSlide = /** + * @private + * @param {?} currentSlideId + * @return {?} + */ + function (currentSlideId) { + /** @type {?} */ + var slideArr = this.slides.toArray(); + /** @type {?} */ + var currentSlideIdx = this._getSlideIdxById(currentSlideId); + /** @type {?} */ + var isFirstSlide = currentSlideIdx === 0; + return isFirstSlide ? (this.wrap ? slideArr[slideArr.length - 1].id : slideArr[0].id) : + slideArr[currentSlideIdx - 1].id; + }; + NgbCarousel.decorators = [ + { type: core.Component, args: [{ + selector: 'ngb-carousel', + exportAs: 'ngbCarousel', + changeDetection: core.ChangeDetectionStrategy.OnPush, + host: { + 'class': 'carousel slide', + '[style.display]': '"block"', + 'tabIndex': '0', + '(keydown.arrowLeft)': 'keyboard && prev(NgbSlideEventSource.ARROW_LEFT)', + '(keydown.arrowRight)': 'keyboard && next(NgbSlideEventSource.ARROW_RIGHT)' + }, + template: "\n
    \n
  1. \n
\n
\n
\n \n
\n
\n \n \n Previous\n \n \n \n Next\n \n " + }] } + ]; + /** @nocollapse */ + NgbCarousel.ctorParameters = function () { return [ + { type: NgbCarouselConfig }, + { type: undefined, decorators: [{ type: core.Inject, args: [core.PLATFORM_ID,] }] }, + { type: core.NgZone }, + { type: core.ChangeDetectorRef } + ]; }; + NgbCarousel.propDecorators = { + slides: [{ type: core.ContentChildren, args: [NgbSlide,] }], + activeId: [{ type: core.Input }], + interval: [{ type: core.Input }], + wrap: [{ type: core.Input }], + keyboard: [{ type: core.Input }], + pauseOnHover: [{ type: core.Input }], + showNavigationArrows: [{ type: core.Input }], + showNavigationIndicators: [{ type: core.Input }], + slide: [{ type: core.Output }], + mouseEnter: [{ type: core.HostListener, args: ['mouseenter',] }], + mouseLeave: [{ type: core.HostListener, args: ['mouseleave',] }] + }; + return NgbCarousel; + }()); + /** @enum {string} */ + var NgbSlideEventDirection = { + LEFT: (/** @type {?} */ ('left')), + RIGHT: (/** @type {?} */ ('right')), + }; + /** @enum {string} */ + var NgbSlideEventSource = { + TIMER: 'timer', + ARROW_LEFT: 'arrowLeft', + ARROW_RIGHT: 'arrowRight', + INDICATOR: 'indicator', + }; + /** @type {?} */ + var NGB_CAROUSEL_DIRECTIVES = [NgbCarousel, NgbSlide]; + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + var NgbCarouselModule = /** @class */ (function () { + function NgbCarouselModule() { + } + NgbCarouselModule.decorators = [ + { type: core.NgModule, args: [{ declarations: NGB_CAROUSEL_DIRECTIVES, exports: NGB_CAROUSEL_DIRECTIVES, imports: [common.CommonModule] },] } + ]; + return NgbCarouselModule; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** + * A directive to provide a simple way of hiding and showing elements on the page. + */ + var NgbCollapse = /** @class */ (function () { + function NgbCollapse() { + /** + * If `true`, will collapse the element or show it otherwise. + */ + this.collapsed = false; + } + NgbCollapse.decorators = [ + { type: core.Directive, args: [{ + selector: '[ngbCollapse]', + exportAs: 'ngbCollapse', + host: { '[class.collapse]': 'true', '[class.show]': '!collapsed' } + },] } + ]; + NgbCollapse.propDecorators = { + collapsed: [{ type: core.Input, args: ['ngbCollapse',] }] + }; + return NgbCollapse; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + var NgbCollapseModule = /** @class */ (function () { + function NgbCollapseModule() { + } + NgbCollapseModule.decorators = [ + { type: core.NgModule, args: [{ declarations: [NgbCollapse], exports: [NgbCollapse] },] } + ]; + return NgbCollapseModule; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** + * A simple class that represents a date that datepicker also uses internally. + * + * It is the implementation of the `NgbDateStruct` interface that adds some convenience methods, + * like `.equals()`, `.before()`, etc. + * + * All datepicker APIs consume `NgbDateStruct`, but return `NgbDate`. + * + * In many cases it is simpler to manipulate these objects together with + * [`NgbCalendar`](#/components/datepicker/api#NgbCalendar) than native JS Dates. + * + * See the [date format overview](#/components/datepicker/overview#date-model) for more details. + * + * \@since 3.0.0 + */ + var /** + * A simple class that represents a date that datepicker also uses internally. + * + * It is the implementation of the `NgbDateStruct` interface that adds some convenience methods, + * like `.equals()`, `.before()`, etc. + * + * All datepicker APIs consume `NgbDateStruct`, but return `NgbDate`. + * + * In many cases it is simpler to manipulate these objects together with + * [`NgbCalendar`](#/components/datepicker/api#NgbCalendar) than native JS Dates. + * + * See the [date format overview](#/components/datepicker/overview#date-model) for more details. + * + * \@since 3.0.0 + */ + NgbDate = /** @class */ (function () { + function NgbDate(year, month, day) { + this.year = isInteger(year) ? year : null; + this.month = isInteger(month) ? month : null; + this.day = isInteger(day) ? day : null; + } + /** + * A **static method** that creates a new date object from the `NgbDateStruct`, + * + * ex. `NgbDate.from({year: 2000, month: 5, day: 1})`. + * + * If the `date` is already of `NgbDate` type, the method will return the same object. + */ + /** + * A **static method** that creates a new date object from the `NgbDateStruct`, + * + * ex. `NgbDate.from({year: 2000, month: 5, day: 1})`. + * + * If the `date` is already of `NgbDate` type, the method will return the same object. + * @param {?} date + * @return {?} + */ + NgbDate.from = /** + * A **static method** that creates a new date object from the `NgbDateStruct`, + * + * ex. `NgbDate.from({year: 2000, month: 5, day: 1})`. + * + * If the `date` is already of `NgbDate` type, the method will return the same object. + * @param {?} date + * @return {?} + */ + function (date) { + if (date instanceof NgbDate) { + return date; + } + return date ? new NgbDate(date.year, date.month, date.day) : null; + }; + /** + * Checks if the current date is equal to another date. + */ + /** + * Checks if the current date is equal to another date. + * @param {?} other + * @return {?} + */ + NgbDate.prototype.equals = /** + * Checks if the current date is equal to another date. + * @param {?} other + * @return {?} + */ + function (other) { + return other && this.year === other.year && this.month === other.month && this.day === other.day; + }; + /** + * Checks if the current date is before another date. + */ + /** + * Checks if the current date is before another date. + * @param {?} other + * @return {?} + */ + NgbDate.prototype.before = /** + * Checks if the current date is before another date. + * @param {?} other + * @return {?} + */ + function (other) { + if (!other) { + return false; + } + if (this.year === other.year) { + if (this.month === other.month) { + return this.day === other.day ? false : this.day < other.day; + } + else { + return this.month < other.month; + } + } + else { + return this.year < other.year; + } + }; + /** + * Checks if the current date is after another date. + */ + /** + * Checks if the current date is after another date. + * @param {?} other + * @return {?} + */ + NgbDate.prototype.after = /** + * Checks if the current date is after another date. + * @param {?} other + * @return {?} + */ + function (other) { + if (!other) { + return false; + } + if (this.year === other.year) { + if (this.month === other.month) { + return this.day === other.day ? false : this.day > other.day; + } + else { + return this.month > other.month; + } + } + else { + return this.year > other.year; + } + }; + return NgbDate; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** + * @param {?} jsDate + * @return {?} + */ + function fromJSDate(jsDate) { + return new NgbDate(jsDate.getFullYear(), jsDate.getMonth() + 1, jsDate.getDate()); + } + /** + * @param {?} date + * @return {?} + */ + function toJSDate(date) { + /** @type {?} */ + var jsDate = new Date(date.year, date.month - 1, date.day, 12); + // this is done avoid 30 -> 1930 conversion + if (!isNaN(jsDate.getTime())) { + jsDate.setFullYear(date.year); + } + return jsDate; + } + /** + * @return {?} + */ + function NGB_DATEPICKER_CALENDAR_FACTORY() { + return new NgbCalendarGregorian(); + } + /** + * A service that represents the calendar used by the datepicker. + * + * The default implementation uses the Gregorian calendar. You can inject it in your own + * implementations if necessary to simplify `NgbDate` calculations. + * @abstract + */ + var NgbCalendar = /** @class */ (function () { + function NgbCalendar() { + } + NgbCalendar.decorators = [ + { type: core.Injectable, args: [{ providedIn: 'root', useFactory: NGB_DATEPICKER_CALENDAR_FACTORY },] } + ]; + /** @nocollapse */ NgbCalendar.ngInjectableDef = core.ɵɵdefineInjectable({ factory: NGB_DATEPICKER_CALENDAR_FACTORY, token: NgbCalendar, providedIn: "root" }); + return NgbCalendar; + }()); + var NgbCalendarGregorian = /** @class */ (function (_super) { + __extends(NgbCalendarGregorian, _super); + function NgbCalendarGregorian() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * @return {?} + */ + NgbCalendarGregorian.prototype.getDaysPerWeek = /** + * @return {?} + */ + function () { return 7; }; + /** + * @return {?} + */ + NgbCalendarGregorian.prototype.getMonths = /** + * @return {?} + */ + function () { return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; }; + /** + * @return {?} + */ + NgbCalendarGregorian.prototype.getWeeksPerMonth = /** + * @return {?} + */ + function () { return 6; }; + /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + NgbCalendarGregorian.prototype.getNext = /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + function (date, period, number) { + if (period === void 0) { period = 'd'; } + if (number === void 0) { number = 1; } + /** @type {?} */ + var jsDate = toJSDate(date); + switch (period) { + case 'y': + return new NgbDate(date.year + number, 1, 1); + case 'm': + jsDate = new Date(date.year, date.month + number - 1, 1, 12); + break; + case 'd': + jsDate.setDate(jsDate.getDate() + number); + break; + default: + return date; + } + return fromJSDate(jsDate); + }; + /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + NgbCalendarGregorian.prototype.getPrev = /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + function (date, period, number) { + if (period === void 0) { period = 'd'; } + if (number === void 0) { number = 1; } + return this.getNext(date, period, -number); + }; + /** + * @param {?} date + * @return {?} + */ + NgbCalendarGregorian.prototype.getWeekday = /** + * @param {?} date + * @return {?} + */ + function (date) { + /** @type {?} */ + var jsDate = toJSDate(date); + /** @type {?} */ + var day = jsDate.getDay(); + // in JS Date Sun=0, in ISO 8601 Sun=7 + return day === 0 ? 7 : day; + }; + /** + * @param {?} week + * @param {?} firstDayOfWeek + * @return {?} + */ + NgbCalendarGregorian.prototype.getWeekNumber = /** + * @param {?} week + * @param {?} firstDayOfWeek + * @return {?} + */ + function (week, firstDayOfWeek) { + // in JS Date Sun=0, in ISO 8601 Sun=7 + if (firstDayOfWeek === 7) { + firstDayOfWeek = 0; + } + /** @type {?} */ + var thursdayIndex = (4 + 7 - firstDayOfWeek) % 7; + /** @type {?} */ + var date = week[thursdayIndex]; + /** @type {?} */ + var jsDate = toJSDate(date); + jsDate.setDate(jsDate.getDate() + 4 - (jsDate.getDay() || 7)); // Thursday + // Thursday + /** @type {?} */ + var time = jsDate.getTime(); + jsDate.setMonth(0); // Compare with Jan 1 + jsDate.setDate(1); + return Math.floor(Math.round((time - jsDate.getTime()) / 86400000) / 7) + 1; + }; + /** + * @return {?} + */ + NgbCalendarGregorian.prototype.getToday = /** + * @return {?} + */ + function () { return fromJSDate(new Date()); }; + /** + * @param {?} date + * @return {?} + */ + NgbCalendarGregorian.prototype.isValid = /** + * @param {?} date + * @return {?} + */ + function (date) { + if (!date || !isInteger(date.year) || !isInteger(date.month) || !isInteger(date.day)) { + return false; + } + // year 0 doesn't exist in Gregorian calendar + if (date.year === 0) { + return false; + } + /** @type {?} */ + var jsDate = toJSDate(date); + return !isNaN(jsDate.getTime()) && jsDate.getFullYear() === date.year && jsDate.getMonth() + 1 === date.month && + jsDate.getDate() === date.day; + }; + NgbCalendarGregorian.decorators = [ + { type: core.Injectable } + ]; + return NgbCalendarGregorian; + }(NgbCalendar)); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** + * @param {?} prev + * @param {?} next + * @return {?} + */ + function isChangedDate(prev, next) { + return !dateComparator(prev, next); + } + /** + * @param {?} prev + * @param {?} next + * @return {?} + */ + function isChangedMonth(prev, next) { + return !prev && !next ? false : !prev || !next ? true : prev.year !== next.year || prev.month !== next.month; + } + /** + * @param {?} prev + * @param {?} next + * @return {?} + */ + function dateComparator(prev, next) { + return (!prev && !next) || (!!prev && !!next && prev.equals(next)); + } + /** + * @param {?} minDate + * @param {?} maxDate + * @return {?} + */ + function checkMinBeforeMax(minDate, maxDate) { + if (maxDate && minDate && maxDate.before(minDate)) { + throw new Error("'maxDate' " + maxDate + " should be greater than 'minDate' " + minDate); + } + } + /** + * @param {?} date + * @param {?} minDate + * @param {?} maxDate + * @return {?} + */ + function checkDateInRange(date, minDate, maxDate) { + if (date && minDate && date.before(minDate)) { + return minDate; + } + if (date && maxDate && date.after(maxDate)) { + return maxDate; + } + return date; + } + /** + * @param {?} date + * @param {?} state + * @return {?} + */ + function isDateSelectable(date, state) { + var minDate = state.minDate, maxDate = state.maxDate, disabled = state.disabled, markDisabled = state.markDisabled; + // clang-format off + return !(!isDefined(date) || + disabled || + (markDisabled && markDisabled(date, { year: date.year, month: date.month })) || + (minDate && date.before(minDate)) || + (maxDate && date.after(maxDate))); + // clang-format on + } + /** + * @param {?} calendar + * @param {?} date + * @param {?} minDate + * @param {?} maxDate + * @return {?} + */ + function generateSelectBoxMonths(calendar, date, minDate, maxDate) { + if (!date) { + return []; + } + /** @type {?} */ + var months = calendar.getMonths(date.year); + if (minDate && date.year === minDate.year) { + /** @type {?} */ + var index = months.findIndex((/** + * @param {?} month + * @return {?} + */ + function (month) { return month === minDate.month; })); + months = months.slice(index); + } + if (maxDate && date.year === maxDate.year) { + /** @type {?} */ + var index = months.findIndex((/** + * @param {?} month + * @return {?} + */ + function (month) { return month === maxDate.month; })); + months = months.slice(0, index + 1); + } + return months; + } + /** + * @param {?} date + * @param {?} minDate + * @param {?} maxDate + * @return {?} + */ + function generateSelectBoxYears(date, minDate, maxDate) { + if (!date) { + return []; + } + /** @type {?} */ + var start = minDate && minDate.year || date.year - 10; + /** @type {?} */ + var end = maxDate && maxDate.year || date.year + 10; + return Array.from({ length: end - start + 1 }, (/** + * @param {?} e + * @param {?} i + * @return {?} + */ + function (e, i) { return start + i; })); + } + /** + * @param {?} calendar + * @param {?} date + * @param {?} maxDate + * @return {?} + */ + function nextMonthDisabled(calendar, date, maxDate) { + return maxDate && calendar.getNext(date, 'm').after(maxDate); + } + /** + * @param {?} calendar + * @param {?} date + * @param {?} minDate + * @return {?} + */ + function prevMonthDisabled(calendar, date, minDate) { + /** @type {?} */ + var prevDate = calendar.getPrev(date, 'm'); + return minDate && (prevDate.year === minDate.year && prevDate.month < minDate.month || + prevDate.year < minDate.year && minDate.month === 1); + } + /** + * @param {?} calendar + * @param {?} date + * @param {?} state + * @param {?} i18n + * @param {?} force + * @return {?} + */ + function buildMonths(calendar, date, state, i18n, force) { + var displayMonths = state.displayMonths, months = state.months; + // move old months to a temporary array + /** @type {?} */ + var monthsToReuse = months.splice(0, months.length); + // generate new first dates, nullify or reuse months + /** @type {?} */ + var firstDates = Array.from({ length: displayMonths }, (/** + * @param {?} _ + * @param {?} i + * @return {?} + */ + function (_, i) { + /** @type {?} */ + var firstDate = calendar.getNext(date, 'm', i); + months[i] = null; + if (!force) { + /** @type {?} */ + var reusedIndex = monthsToReuse.findIndex((/** + * @param {?} month + * @return {?} + */ + function (month) { return month.firstDate.equals(firstDate); })); + // move reused month back to months + if (reusedIndex !== -1) { + months[i] = monthsToReuse.splice(reusedIndex, 1)[0]; + } + } + return firstDate; + })); + // rebuild nullified months + firstDates.forEach((/** + * @param {?} firstDate + * @param {?} i + * @return {?} + */ + function (firstDate, i) { + if (months[i] === null) { + months[i] = buildMonth(calendar, firstDate, state, i18n, monthsToReuse.shift() || (/** @type {?} */ ({}))); + } + })); + return months; + } + /** + * @param {?} calendar + * @param {?} date + * @param {?} state + * @param {?} i18n + * @param {?=} month + * @return {?} + */ + function buildMonth(calendar, date, state, i18n, month) { + if (month === void 0) { month = (/** @type {?} */ ({})); } + var dayTemplateData = state.dayTemplateData, minDate = state.minDate, maxDate = state.maxDate, firstDayOfWeek = state.firstDayOfWeek, markDisabled = state.markDisabled, outsideDays = state.outsideDays; + /** @type {?} */ + var calendarToday = calendar.getToday(); + month.firstDate = null; + month.lastDate = null; + month.number = date.month; + month.year = date.year; + month.weeks = month.weeks || []; + month.weekdays = month.weekdays || []; + date = getFirstViewDate(calendar, date, firstDayOfWeek); + // month has weeks + for (var week = 0; week < calendar.getWeeksPerMonth(); week++) { + /** @type {?} */ + var weekObject = month.weeks[week]; + if (!weekObject) { + weekObject = month.weeks[week] = { number: 0, days: [], collapsed: true }; + } + /** @type {?} */ + var days = weekObject.days; + // week has days + for (var day = 0; day < calendar.getDaysPerWeek(); day++) { + if (week === 0) { + month.weekdays[day] = calendar.getWeekday(date); + } + /** @type {?} */ + var newDate = new NgbDate(date.year, date.month, date.day); + /** @type {?} */ + var nextDate = calendar.getNext(newDate); + /** @type {?} */ + var ariaLabel = i18n.getDayAriaLabel(newDate); + // marking date as disabled + /** @type {?} */ + var disabled = !!((minDate && newDate.before(minDate)) || (maxDate && newDate.after(maxDate))); + if (!disabled && markDisabled) { + disabled = markDisabled(newDate, { month: month.number, year: month.year }); + } + // today + /** @type {?} */ + var today = newDate.equals(calendarToday); + // adding user-provided data to the context + /** @type {?} */ + var contextUserData = dayTemplateData ? dayTemplateData(newDate, { month: month.number, year: month.year }) : undefined; + // saving first date of the month + if (month.firstDate === null && newDate.month === month.number) { + month.firstDate = newDate; + } + // saving last date of the month + if (newDate.month === month.number && nextDate.month !== month.number) { + month.lastDate = newDate; + } + /** @type {?} */ + var dayObject = days[day]; + if (!dayObject) { + dayObject = days[day] = (/** @type {?} */ ({})); + } + dayObject.date = newDate; + dayObject.context = Object.assign(dayObject.context || {}, { + $implicit: newDate, + date: newDate, + data: contextUserData, + currentMonth: month.number, disabled: disabled, + focused: false, + selected: false, today: today + }); + dayObject.tabindex = -1; + dayObject.ariaLabel = ariaLabel; + dayObject.hidden = false; + date = nextDate; + } + weekObject.number = calendar.getWeekNumber(days.map((/** + * @param {?} day + * @return {?} + */ + function (day) { return day.date; })), firstDayOfWeek); + // marking week as collapsed + weekObject.collapsed = outsideDays === 'collapsed' && days[0].date.month !== month.number && + days[days.length - 1].date.month !== month.number; + } + return month; + } + /** + * @param {?} calendar + * @param {?} date + * @param {?} firstDayOfWeek + * @return {?} + */ + function getFirstViewDate(calendar, date, firstDayOfWeek) { + /** @type {?} */ + var daysPerWeek = calendar.getDaysPerWeek(); + /** @type {?} */ + var firstMonthDate = new NgbDate(date.year, date.month, 1); + /** @type {?} */ + var dayOfWeek = calendar.getWeekday(firstMonthDate) % daysPerWeek; + return calendar.getPrev(firstMonthDate, 'd', (daysPerWeek + dayOfWeek - firstDayOfWeek) % daysPerWeek); + } + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** + * @param {?} locale + * @return {?} + */ + function NGB_DATEPICKER_18N_FACTORY(locale) { + return new NgbDatepickerI18nDefault(locale); + } + /** + * A service supplying i18n data to the datepicker component. + * + * The default implementation of this service uses the Angular locale and registered locale data for + * weekdays and month names (as explained in the Angular i18n guide). + * + * It also provides a way to i18n data that depends on calendar calculations, like aria labels, day, week and year + * numerals. For other static labels the datepicker uses the default Angular i18n. + * + * See the [i18n demo](#/components/datepicker/examples#i18n) and + * [Hebrew calendar demo](#/components/datepicker/calendars#hebrew) on how to extend this class and define + * a custom provider for i18n. + * @abstract + */ + var NgbDatepickerI18n = /** @class */ (function () { + function NgbDatepickerI18n() { + } + /** + * Returns the textual representation of a day that is rendered in a day cell. + * + * @since 3.0.0 + */ + /** + * Returns the textual representation of a day that is rendered in a day cell. + * + * \@since 3.0.0 + * @param {?} date + * @return {?} + */ + NgbDatepickerI18n.prototype.getDayNumerals = /** + * Returns the textual representation of a day that is rendered in a day cell. + * + * \@since 3.0.0 + * @param {?} date + * @return {?} + */ + function (date) { return "" + date.day; }; + /** + * Returns the textual representation of a week number rendered by datepicker. + * + * @since 3.0.0 + */ + /** + * Returns the textual representation of a week number rendered by datepicker. + * + * \@since 3.0.0 + * @param {?} weekNumber + * @return {?} + */ + NgbDatepickerI18n.prototype.getWeekNumerals = /** + * Returns the textual representation of a week number rendered by datepicker. + * + * \@since 3.0.0 + * @param {?} weekNumber + * @return {?} + */ + function (weekNumber) { return "" + weekNumber; }; + /** + * Returns the textual representation of a year that is rendered in the datepicker year select box. + * + * @since 3.0.0 + */ + /** + * Returns the textual representation of a year that is rendered in the datepicker year select box. + * + * \@since 3.0.0 + * @param {?} year + * @return {?} + */ + NgbDatepickerI18n.prototype.getYearNumerals = /** + * Returns the textual representation of a year that is rendered in the datepicker year select box. + * + * \@since 3.0.0 + * @param {?} year + * @return {?} + */ + function (year) { return "" + year; }; + NgbDatepickerI18n.decorators = [ + { type: core.Injectable, args: [{ providedIn: 'root', useFactory: NGB_DATEPICKER_18N_FACTORY, deps: [core.LOCALE_ID] },] } + ]; + /** @nocollapse */ NgbDatepickerI18n.ngInjectableDef = core.ɵɵdefineInjectable({ factory: function NgbDatepickerI18n_Factory() { return NGB_DATEPICKER_18N_FACTORY(core.ɵɵinject(core.LOCALE_ID)); }, token: NgbDatepickerI18n, providedIn: "root" }); + return NgbDatepickerI18n; + }()); + var NgbDatepickerI18nDefault = /** @class */ (function (_super) { + __extends(NgbDatepickerI18nDefault, _super); + function NgbDatepickerI18nDefault(_locale) { + var _this = _super.call(this) || this; + _this._locale = _locale; + /** @type {?} */ + var weekdaysStartingOnSunday = common.getLocaleDayNames(_locale, common.FormStyle.Standalone, common.TranslationWidth.Short); + _this._weekdaysShort = weekdaysStartingOnSunday.map((/** + * @param {?} day + * @param {?} index + * @return {?} + */ + function (day, index) { return weekdaysStartingOnSunday[(index + 1) % 7]; })); + _this._monthsShort = common.getLocaleMonthNames(_locale, common.FormStyle.Standalone, common.TranslationWidth.Abbreviated); + _this._monthsFull = common.getLocaleMonthNames(_locale, common.FormStyle.Standalone, common.TranslationWidth.Wide); + return _this; + } + /** + * @param {?} weekday + * @return {?} + */ + NgbDatepickerI18nDefault.prototype.getWeekdayShortName = /** + * @param {?} weekday + * @return {?} + */ + function (weekday) { return this._weekdaysShort[weekday - 1]; }; + /** + * @param {?} month + * @return {?} + */ + NgbDatepickerI18nDefault.prototype.getMonthShortName = /** + * @param {?} month + * @return {?} + */ + function (month) { return this._monthsShort[month - 1]; }; + /** + * @param {?} month + * @return {?} + */ + NgbDatepickerI18nDefault.prototype.getMonthFullName = /** + * @param {?} month + * @return {?} + */ + function (month) { return this._monthsFull[month - 1]; }; + /** + * @param {?} date + * @return {?} + */ + NgbDatepickerI18nDefault.prototype.getDayAriaLabel = /** + * @param {?} date + * @return {?} + */ + function (date) { + /** @type {?} */ + var jsDate = new Date(date.year, date.month - 1, date.day); + return common.formatDate(jsDate, 'fullDate', this._locale); + }; + NgbDatepickerI18nDefault.decorators = [ + { type: core.Injectable } + ]; + /** @nocollapse */ + NgbDatepickerI18nDefault.ctorParameters = function () { return [ + { type: String, decorators: [{ type: core.Inject, args: [core.LOCALE_ID,] }] } + ]; }; + return NgbDatepickerI18nDefault; + }(NgbDatepickerI18n)); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + var NgbDatepickerService = /** @class */ (function () { + function NgbDatepickerService(_calendar, _i18n) { + this._calendar = _calendar; + this._i18n = _i18n; + this._model$ = new rxjs.Subject(); + this._select$ = new rxjs.Subject(); + this._state = { + disabled: false, + displayMonths: 1, + firstDayOfWeek: 1, + focusVisible: false, + months: [], + navigation: 'select', + outsideDays: 'visible', + prevDisabled: false, + nextDisabled: false, + selectBoxes: { years: [], months: [] }, + selectedDate: null + }; + } + Object.defineProperty(NgbDatepickerService.prototype, "model$", { + get: /** + * @return {?} + */ + function () { return this._model$.pipe(operators.filter((/** + * @param {?} model + * @return {?} + */ + function (model) { return model.months.length > 0; }))); }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbDatepickerService.prototype, "select$", { + get: /** + * @return {?} + */ + function () { return this._select$.pipe(operators.filter((/** + * @param {?} date + * @return {?} + */ + function (date) { return date !== null; }))); }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbDatepickerService.prototype, "dayTemplateData", { + set: /** + * @param {?} dayTemplateData + * @return {?} + */ + function (dayTemplateData) { + if (this._state.dayTemplateData !== dayTemplateData) { + this._nextState({ dayTemplateData: dayTemplateData }); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbDatepickerService.prototype, "disabled", { + set: /** + * @param {?} disabled + * @return {?} + */ + function (disabled) { + if (this._state.disabled !== disabled) { + this._nextState({ disabled: disabled }); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbDatepickerService.prototype, "displayMonths", { + set: /** + * @param {?} displayMonths + * @return {?} + */ + function (displayMonths) { + displayMonths = toInteger(displayMonths); + if (isInteger(displayMonths) && displayMonths > 0 && this._state.displayMonths !== displayMonths) { + this._nextState({ displayMonths: displayMonths }); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbDatepickerService.prototype, "firstDayOfWeek", { + set: /** + * @param {?} firstDayOfWeek + * @return {?} + */ + function (firstDayOfWeek) { + firstDayOfWeek = toInteger(firstDayOfWeek); + if (isInteger(firstDayOfWeek) && firstDayOfWeek >= 0 && this._state.firstDayOfWeek !== firstDayOfWeek) { + this._nextState({ firstDayOfWeek: firstDayOfWeek }); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbDatepickerService.prototype, "focusVisible", { + set: /** + * @param {?} focusVisible + * @return {?} + */ + function (focusVisible) { + if (this._state.focusVisible !== focusVisible && !this._state.disabled) { + this._nextState({ focusVisible: focusVisible }); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbDatepickerService.prototype, "maxDate", { + set: /** + * @param {?} date + * @return {?} + */ + function (date) { + /** @type {?} */ + var maxDate = this.toValidDate(date, null); + if (isChangedDate(this._state.maxDate, maxDate)) { + this._nextState({ maxDate: maxDate }); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbDatepickerService.prototype, "markDisabled", { + set: /** + * @param {?} markDisabled + * @return {?} + */ + function (markDisabled) { + if (this._state.markDisabled !== markDisabled) { + this._nextState({ markDisabled: markDisabled }); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbDatepickerService.prototype, "minDate", { + set: /** + * @param {?} date + * @return {?} + */ + function (date) { + /** @type {?} */ + var minDate = this.toValidDate(date, null); + if (isChangedDate(this._state.minDate, minDate)) { + this._nextState({ minDate: minDate }); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbDatepickerService.prototype, "navigation", { + set: /** + * @param {?} navigation + * @return {?} + */ + function (navigation) { + if (this._state.navigation !== navigation) { + this._nextState({ navigation: navigation }); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbDatepickerService.prototype, "outsideDays", { + set: /** + * @param {?} outsideDays + * @return {?} + */ + function (outsideDays) { + if (this._state.outsideDays !== outsideDays) { + this._nextState({ outsideDays: outsideDays }); + } + }, + enumerable: true, + configurable: true + }); + /** + * @param {?} date + * @return {?} + */ + NgbDatepickerService.prototype.focus = /** + * @param {?} date + * @return {?} + */ + function (date) { + if (!this._state.disabled && this._calendar.isValid(date) && isChangedDate(this._state.focusDate, date)) { + this._nextState({ focusDate: date }); + } + }; + /** + * @param {?=} period + * @param {?=} number + * @return {?} + */ + NgbDatepickerService.prototype.focusMove = /** + * @param {?=} period + * @param {?=} number + * @return {?} + */ + function (period, number) { + this.focus(this._calendar.getNext(this._state.focusDate, period, number)); + }; + /** + * @return {?} + */ + NgbDatepickerService.prototype.focusSelect = /** + * @return {?} + */ + function () { + if (isDateSelectable(this._state.focusDate, this._state)) { + this.select(this._state.focusDate, { emitEvent: true }); + } + }; + /** + * @param {?} date + * @return {?} + */ + NgbDatepickerService.prototype.open = /** + * @param {?} date + * @return {?} + */ + function (date) { + /** @type {?} */ + var firstDate = this.toValidDate(date, this._calendar.getToday()); + if (!this._state.disabled && (!this._state.firstDate || isChangedMonth(this._state.firstDate, date))) { + this._nextState({ firstDate: firstDate }); + } + }; + /** + * @param {?} date + * @param {?=} options + * @return {?} + */ + NgbDatepickerService.prototype.select = /** + * @param {?} date + * @param {?=} options + * @return {?} + */ + function (date, options) { + if (options === void 0) { options = {}; } + /** @type {?} */ + var selectedDate = this.toValidDate(date, null); + if (!this._state.disabled) { + if (isChangedDate(this._state.selectedDate, selectedDate)) { + this._nextState({ selectedDate: selectedDate }); + } + if (options.emitEvent && isDateSelectable(selectedDate, this._state)) { + this._select$.next(selectedDate); + } + } + }; + /** + * @param {?} date + * @param {?=} defaultValue + * @return {?} + */ + NgbDatepickerService.prototype.toValidDate = /** + * @param {?} date + * @param {?=} defaultValue + * @return {?} + */ + function (date, defaultValue) { + /** @type {?} */ + var ngbDate = NgbDate.from(date); + if (defaultValue === undefined) { + defaultValue = this._calendar.getToday(); + } + return this._calendar.isValid(ngbDate) ? ngbDate : defaultValue; + }; + /** + * @private + * @param {?} patch + * @return {?} + */ + NgbDatepickerService.prototype._nextState = /** + * @private + * @param {?} patch + * @return {?} + */ + function (patch) { + /** @type {?} */ + var newState = this._updateState(patch); + this._patchContexts(newState); + this._state = newState; + this._model$.next(this._state); + }; + /** + * @private + * @param {?} state + * @return {?} + */ + NgbDatepickerService.prototype._patchContexts = /** + * @private + * @param {?} state + * @return {?} + */ + function (state) { + var months = state.months, displayMonths = state.displayMonths, selectedDate = state.selectedDate, focusDate = state.focusDate, focusVisible = state.focusVisible, disabled = state.disabled, outsideDays = state.outsideDays; + state.months.forEach((/** + * @param {?} month + * @return {?} + */ + function (month) { + month.weeks.forEach((/** + * @param {?} week + * @return {?} + */ + function (week) { + week.days.forEach((/** + * @param {?} day + * @return {?} + */ + function (day) { + // patch focus flag + if (focusDate) { + day.context.focused = focusDate.equals(day.date) && focusVisible; + } + // calculating tabindex + day.tabindex = !disabled && day.date.equals(focusDate) && focusDate.month === month.number ? 0 : -1; + // override context disabled + if (disabled === true) { + day.context.disabled = true; + } + // patch selection flag + if (selectedDate !== undefined) { + day.context.selected = selectedDate !== null && selectedDate.equals(day.date); + } + // visibility + if (month.number !== day.date.month) { + day.hidden = outsideDays === 'hidden' || outsideDays === 'collapsed' || + (displayMonths > 1 && day.date.after(months[0].firstDate) && + day.date.before(months[displayMonths - 1].lastDate)); + } + })); + })); + })); + }; + /** + * @private + * @param {?} patch + * @return {?} + */ + NgbDatepickerService.prototype._updateState = /** + * @private + * @param {?} patch + * @return {?} + */ + function (patch) { + // patching fields + /** @type {?} */ + var state = Object.assign({}, this._state, patch); + /** @type {?} */ + var startDate = state.firstDate; + // min/max dates changed + if ('minDate' in patch || 'maxDate' in patch) { + checkMinBeforeMax(state.minDate, state.maxDate); + state.focusDate = checkDateInRange(state.focusDate, state.minDate, state.maxDate); + state.firstDate = checkDateInRange(state.firstDate, state.minDate, state.maxDate); + startDate = state.focusDate; + } + // disabled + if ('disabled' in patch) { + state.focusVisible = false; + } + // initial rebuild via 'select()' + if ('selectedDate' in patch && this._state.months.length === 0) { + startDate = state.selectedDate; + } + // terminate early if only focus visibility was changed + if ('focusVisible' in patch) { + return state; + } + // focus date changed + if ('focusDate' in patch) { + state.focusDate = checkDateInRange(state.focusDate, state.minDate, state.maxDate); + startDate = state.focusDate; + // nothing to rebuild if only focus changed and it is still visible + if (state.months.length !== 0 && !state.focusDate.before(state.firstDate) && + !state.focusDate.after(state.lastDate)) { + return state; + } + } + // first date changed + if ('firstDate' in patch) { + state.firstDate = checkDateInRange(state.firstDate, state.minDate, state.maxDate); + startDate = state.firstDate; + } + // rebuilding months + if (startDate) { + /** @type {?} */ + var forceRebuild = 'dayTemplateData' in patch || 'firstDayOfWeek' in patch || 'markDisabled' in patch || + 'minDate' in patch || 'maxDate' in patch || 'disabled' in patch || 'outsideDays' in patch; + /** @type {?} */ + var months = buildMonths(this._calendar, startDate, state, this._i18n, forceRebuild); + // updating months and boundary dates + state.months = months; + state.firstDate = months.length > 0 ? months[0].firstDate : undefined; + state.lastDate = months.length > 0 ? months[months.length - 1].lastDate : undefined; + // reset selected date if 'markDisabled' returns true + if ('selectedDate' in patch && !isDateSelectable(state.selectedDate, state)) { + state.selectedDate = null; + } + // adjusting focus after months were built + if ('firstDate' in patch) { + if (state.focusDate === undefined || state.focusDate.before(state.firstDate) || + state.focusDate.after(state.lastDate)) { + state.focusDate = startDate; + } + } + // adjusting months/years for the select box navigation + /** @type {?} */ + var yearChanged = !this._state.firstDate || this._state.firstDate.year !== state.firstDate.year; + /** @type {?} */ + var monthChanged = !this._state.firstDate || this._state.firstDate.month !== state.firstDate.month; + if (state.navigation === 'select') { + // years -> boundaries (min/max were changed) + if ('minDate' in patch || 'maxDate' in patch || state.selectBoxes.years.length === 0 || yearChanged) { + state.selectBoxes.years = generateSelectBoxYears(state.firstDate, state.minDate, state.maxDate); + } + // months -> when current year or boundaries change + if ('minDate' in patch || 'maxDate' in patch || state.selectBoxes.months.length === 0 || yearChanged) { + state.selectBoxes.months = + generateSelectBoxMonths(this._calendar, state.firstDate, state.minDate, state.maxDate); + } + } + else { + state.selectBoxes = { years: [], months: [] }; + } + // updating navigation arrows -> boundaries change (min/max) or month/year changes + if ((state.navigation === 'arrows' || state.navigation === 'select') && + (monthChanged || yearChanged || 'minDate' in patch || 'maxDate' in patch || 'disabled' in patch)) { + state.prevDisabled = state.disabled || prevMonthDisabled(this._calendar, state.firstDate, state.minDate); + state.nextDisabled = state.disabled || nextMonthDisabled(this._calendar, state.lastDate, state.maxDate); + } + } + return state; + }; + NgbDatepickerService.decorators = [ + { type: core.Injectable } + ]; + /** @nocollapse */ + NgbDatepickerService.ctorParameters = function () { return [ + { type: NgbCalendar }, + { type: NgbDatepickerI18n } + ]; }; + return NgbDatepickerService; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** @enum {number} */ + var Key = { + Tab: 9, + Enter: 13, + Escape: 27, + Space: 32, + PageUp: 33, + PageDown: 34, + End: 35, + Home: 36, + ArrowLeft: 37, + ArrowUp: 38, + ArrowRight: 39, + ArrowDown: 40, + }; + Key[Key.Tab] = 'Tab'; + Key[Key.Enter] = 'Enter'; + Key[Key.Escape] = 'Escape'; + Key[Key.Space] = 'Space'; + Key[Key.PageUp] = 'PageUp'; + Key[Key.PageDown] = 'PageDown'; + Key[Key.End] = 'End'; + Key[Key.Home] = 'Home'; + Key[Key.ArrowLeft] = 'ArrowLeft'; + Key[Key.ArrowUp] = 'ArrowUp'; + Key[Key.ArrowRight] = 'ArrowRight'; + Key[Key.ArrowDown] = 'ArrowDown'; + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + var NgbDatepickerKeyMapService = /** @class */ (function () { + function NgbDatepickerKeyMapService(_service, _calendar) { + var _this = this; + this._service = _service; + this._calendar = _calendar; + _service.model$.subscribe((/** + * @param {?} model + * @return {?} + */ + function (model) { + _this._minDate = model.minDate; + _this._maxDate = model.maxDate; + _this._firstViewDate = model.firstDate; + _this._lastViewDate = model.lastDate; + })); + } + /** + * @param {?} event + * @return {?} + */ + NgbDatepickerKeyMapService.prototype.processKey = /** + * @param {?} event + * @return {?} + */ + function (event) { + // tslint:disable-next-line:deprecation + switch (event.which) { + case Key.PageUp: + this._service.focusMove(event.shiftKey ? 'y' : 'm', -1); + break; + case Key.PageDown: + this._service.focusMove(event.shiftKey ? 'y' : 'm', 1); + break; + case Key.End: + this._service.focus(event.shiftKey ? this._maxDate : this._lastViewDate); + break; + case Key.Home: + this._service.focus(event.shiftKey ? this._minDate : this._firstViewDate); + break; + case Key.ArrowLeft: + this._service.focusMove('d', -1); + break; + case Key.ArrowUp: + this._service.focusMove('d', -this._calendar.getDaysPerWeek()); + break; + case Key.ArrowRight: + this._service.focusMove('d', 1); + break; + case Key.ArrowDown: + this._service.focusMove('d', this._calendar.getDaysPerWeek()); + break; + case Key.Enter: + case Key.Space: + this._service.focusSelect(); + break; + default: + return; + } + // note 'return' in default case + event.preventDefault(); + event.stopPropagation(); + }; + NgbDatepickerKeyMapService.decorators = [ + { type: core.Injectable } + ]; + /** @nocollapse */ + NgbDatepickerKeyMapService.ctorParameters = function () { return [ + { type: NgbDatepickerService }, + { type: NgbCalendar } + ]; }; + return NgbDatepickerKeyMapService; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** @enum {number} */ + var NavigationEvent = { + PREV: 0, + NEXT: 1, + }; + NavigationEvent[NavigationEvent.PREV] = 'PREV'; + NavigationEvent[NavigationEvent.NEXT] = 'NEXT'; + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** + * A configuration service for the [`NgbDatepicker`](#/components/datepicker/api#NgbDatepicker) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the datepickers used in the application. + */ + var NgbDatepickerConfig = /** @class */ (function () { + function NgbDatepickerConfig() { + this.displayMonths = 1; + this.firstDayOfWeek = 1; + this.navigation = 'select'; + this.outsideDays = 'visible'; + this.showWeekdays = true; + this.showWeekNumbers = false; + } + NgbDatepickerConfig.decorators = [ + { type: core.Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ NgbDatepickerConfig.ngInjectableDef = core.ɵɵdefineInjectable({ factory: function NgbDatepickerConfig_Factory() { return new NgbDatepickerConfig(); }, token: NgbDatepickerConfig, providedIn: "root" }); + return NgbDatepickerConfig; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** + * @return {?} + */ + function NGB_DATEPICKER_DATE_ADAPTER_FACTORY() { + return new NgbDateStructAdapter(); + } + /** + * An abstract service that does the conversion between the internal datepicker `NgbDateStruct` model and + * any provided user date model `D`, ex. a string, a native date, etc. + * + * The adapter is used **only** for conversion when binding datepicker to a form control, + * ex. `[(ngModel)]="userDateModel"`. Here `userDateModel` can be of any type. + * + * The default datepicker implementation assumes we use `NgbDateStruct` as a user model. + * + * See the [date format overview](#/components/datepicker/overview#date-model) for more details + * and the [custom adapter demo](#/components/datepicker/examples#adapter) for an example. + * @abstract + * @template D + */ + var NgbDateAdapter = /** @class */ (function () { + function NgbDateAdapter() { + } + NgbDateAdapter.decorators = [ + { type: core.Injectable, args: [{ providedIn: 'root', useFactory: NGB_DATEPICKER_DATE_ADAPTER_FACTORY },] } + ]; + /** @nocollapse */ NgbDateAdapter.ngInjectableDef = core.ɵɵdefineInjectable({ factory: NGB_DATEPICKER_DATE_ADAPTER_FACTORY, token: NgbDateAdapter, providedIn: "root" }); + return NgbDateAdapter; + }()); + var NgbDateStructAdapter = /** @class */ (function (_super) { + __extends(NgbDateStructAdapter, _super); + function NgbDateStructAdapter() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * Converts a NgbDateStruct value into NgbDateStruct value + */ + /** + * Converts a NgbDateStruct value into NgbDateStruct value + * @param {?} date + * @return {?} + */ + NgbDateStructAdapter.prototype.fromModel = /** + * Converts a NgbDateStruct value into NgbDateStruct value + * @param {?} date + * @return {?} + */ + function (date) { + return (date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day)) ? + { year: date.year, month: date.month, day: date.day } : + null; + }; + /** + * Converts a NgbDateStruct value into NgbDateStruct value + */ + /** + * Converts a NgbDateStruct value into NgbDateStruct value + * @param {?} date + * @return {?} + */ + NgbDateStructAdapter.prototype.toModel = /** + * Converts a NgbDateStruct value into NgbDateStruct value + * @param {?} date + * @return {?} + */ + function (date) { + return (date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day)) ? + { year: date.year, month: date.month, day: date.day } : + null; + }; + NgbDateStructAdapter.decorators = [ + { type: core.Injectable } + ]; + return NgbDateStructAdapter; + }(NgbDateAdapter)); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** @type {?} */ + var NGB_DATEPICKER_VALUE_ACCESSOR = { + provide: forms.NG_VALUE_ACCESSOR, + useExisting: core.forwardRef((/** + * @return {?} + */ + function () { return NgbDatepicker; })), + multi: true + }; + /** + * A highly configurable component that helps you with selecting calendar dates. + * + * `NgbDatepicker` is meant to be displayed inline on a page or put inside a popup. + */ + var NgbDatepicker = /** @class */ (function () { + function NgbDatepicker(_keyMapService, _service, _calendar, i18n, config, _cd, _elementRef, _ngbDateAdapter, _ngZone) { + var _this = this; + this._keyMapService = _keyMapService; + this._service = _service; + this._calendar = _calendar; + this.i18n = i18n; + this._cd = _cd; + this._elementRef = _elementRef; + this._ngbDateAdapter = _ngbDateAdapter; + this._ngZone = _ngZone; + this._destroyed$ = new rxjs.Subject(); + /** + * An event emitted right before the navigation happens and displayed month changes. + * + * See [`NgbDatepickerNavigateEvent`](#/components/datepicker/api#NgbDatepickerNavigateEvent) for the payload info. + */ + this.navigate = new core.EventEmitter(); + /** + * An event emitted when user selects a date using keyboard or mouse. + * + * The payload of the event is currently selected `NgbDate`. + */ + this.select = new core.EventEmitter(); + this.onChange = (/** + * @param {?} _ + * @return {?} + */ + function (_) { }); + this.onTouched = (/** + * @return {?} + */ + function () { }); + ['dayTemplate', 'dayTemplateData', 'displayMonths', 'firstDayOfWeek', 'footerTemplate', 'markDisabled', 'minDate', + 'maxDate', 'navigation', 'outsideDays', 'showWeekdays', 'showWeekNumbers', 'startDate'] + .forEach((/** + * @param {?} input + * @return {?} + */ + function (input) { return _this[input] = config[input]; })); + _service.select$.pipe(operators.takeUntil(this._destroyed$)).subscribe((/** + * @param {?} date + * @return {?} + */ + function (date) { _this.select.emit(date); })); + _service.model$.pipe(operators.takeUntil(this._destroyed$)).subscribe((/** + * @param {?} model + * @return {?} + */ + function (model) { + /** @type {?} */ + var newDate = model.firstDate; + /** @type {?} */ + var oldDate = _this.model ? _this.model.firstDate : null; + /** @type {?} */ + var navigationPrevented = false; + // emitting navigation event if the first month changes + if (!newDate.equals(oldDate)) { + _this.navigate.emit({ + current: oldDate ? { year: oldDate.year, month: oldDate.month } : null, + next: { year: newDate.year, month: newDate.month }, + preventDefault: (/** + * @return {?} + */ + function () { return navigationPrevented = true; }) + }); + // can't prevent the very first navigation + if (navigationPrevented && oldDate !== null) { + _this._service.open(oldDate); + return; + } + } + /** @type {?} */ + var newSelectedDate = model.selectedDate; + /** @type {?} */ + var newFocusedDate = model.focusDate; + /** @type {?} */ + var oldFocusedDate = _this.model ? _this.model.focusDate : null; + _this.model = model; + // handling selection change + if (isChangedDate(newSelectedDate, _this._controlValue)) { + _this._controlValue = newSelectedDate; + _this.onTouched(); + _this.onChange(_this._ngbDateAdapter.toModel(newSelectedDate)); + } + // handling focus change + if (isChangedDate(newFocusedDate, oldFocusedDate) && oldFocusedDate && model.focusVisible) { + _this.focus(); + } + _cd.markForCheck(); + })); + } + /** + * @return {?} + */ + NgbDatepicker.prototype.focus = /** + * @return {?} + */ + function () { + var _this = this; + this._ngZone.onStable.asObservable().pipe(operators.take(1)).subscribe((/** + * @return {?} + */ + function () { + /** @type {?} */ + var elementToFocus = _this._elementRef.nativeElement.querySelector('div.ngb-dp-day[tabindex="0"]'); + if (elementToFocus) { + elementToFocus.focus(); + } + })); + }; + /** + * Navigates to the provided date. + * + * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec. + * If nothing or invalid date provided calendar will open current month. + * + * Use the `[startDate]` input as an alternative. + */ + /** + * Navigates to the provided date. + * + * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec. + * If nothing or invalid date provided calendar will open current month. + * + * Use the `[startDate]` input as an alternative. + * @param {?=} date + * @return {?} + */ + NgbDatepicker.prototype.navigateTo = /** + * Navigates to the provided date. + * + * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec. + * If nothing or invalid date provided calendar will open current month. + * + * Use the `[startDate]` input as an alternative. + * @param {?=} date + * @return {?} + */ + function (date) { + this._service.open(NgbDate.from(date ? date.day ? (/** @type {?} */ (date)) : __assign({}, date, { day: 1 }) : null)); + }; + /** + * @return {?} + */ + NgbDatepicker.prototype.ngAfterViewInit = /** + * @return {?} + */ + function () { + var _this = this; + this._ngZone.runOutsideAngular((/** + * @return {?} + */ + function () { + /** @type {?} */ + var focusIns$ = rxjs.fromEvent(_this._monthsEl.nativeElement, 'focusin'); + /** @type {?} */ + var focusOuts$ = rxjs.fromEvent(_this._monthsEl.nativeElement, 'focusout'); + // we're changing 'focusVisible' only when entering or leaving months view + // and ignoring all focus events where both 'target' and 'related' target are day cells + rxjs.merge(focusIns$, focusOuts$) + .pipe(operators.filter((/** + * @param {?} __0 + * @return {?} + */ + function (_a) { + var target = _a.target, relatedTarget = _a.relatedTarget; + return !(hasClassName(target, 'ngb-dp-day') && hasClassName(relatedTarget, 'ngb-dp-day')); + })), operators.takeUntil(_this._destroyed$)) + .subscribe((/** + * @param {?} __0 + * @return {?} + */ + function (_a) { + var type = _a.type; + return _this._ngZone.run((/** + * @return {?} + */ + function () { return _this._service.focusVisible = type === 'focusin'; })); + })); + })); + }; + /** + * @return {?} + */ + NgbDatepicker.prototype.ngOnDestroy = /** + * @return {?} + */ + function () { this._destroyed$.next(); }; + /** + * @return {?} + */ + NgbDatepicker.prototype.ngOnInit = /** + * @return {?} + */ + function () { + var _this = this; + if (this.model === undefined) { + ['dayTemplateData', 'displayMonths', 'markDisabled', 'firstDayOfWeek', 'navigation', 'minDate', 'maxDate', + 'outsideDays'] + .forEach((/** + * @param {?} input + * @return {?} + */ + function (input) { return _this._service[input] = _this[input]; })); + this.navigateTo(this.startDate); + } + }; + /** + * @param {?} changes + * @return {?} + */ + NgbDatepicker.prototype.ngOnChanges = /** + * @param {?} changes + * @return {?} + */ + function (changes) { + var _this = this; + ['dayTemplateData', 'displayMonths', 'markDisabled', 'firstDayOfWeek', 'navigation', 'minDate', 'maxDate', + 'outsideDays'] + .filter((/** + * @param {?} input + * @return {?} + */ + function (input) { return input in changes; })) + .forEach((/** + * @param {?} input + * @return {?} + */ + function (input) { return _this._service[input] = _this[input]; })); + if ('startDate' in changes) { + var _a = changes.startDate, currentValue = _a.currentValue, previousValue = _a.previousValue; + if (isChangedMonth(previousValue, currentValue)) { + this.navigateTo(this.startDate); + } + } + }; + /** + * @param {?} date + * @return {?} + */ + NgbDatepicker.prototype.onDateSelect = /** + * @param {?} date + * @return {?} + */ + function (date) { + this._service.focus(date); + this._service.select(date, { emitEvent: true }); + }; + /** + * @param {?} event + * @return {?} + */ + NgbDatepicker.prototype.onKeyDown = /** + * @param {?} event + * @return {?} + */ + function (event) { this._keyMapService.processKey(event); }; + /** + * @param {?} date + * @return {?} + */ + NgbDatepicker.prototype.onNavigateDateSelect = /** + * @param {?} date + * @return {?} + */ + function (date) { this._service.open(date); }; + /** + * @param {?} event + * @return {?} + */ + NgbDatepicker.prototype.onNavigateEvent = /** + * @param {?} event + * @return {?} + */ + function (event) { + switch (event) { + case NavigationEvent.PREV: + this._service.open(this._calendar.getPrev(this.model.firstDate, 'm', 1)); + break; + case NavigationEvent.NEXT: + this._service.open(this._calendar.getNext(this.model.firstDate, 'm', 1)); + break; + } + }; + /** + * @param {?} fn + * @return {?} + */ + NgbDatepicker.prototype.registerOnChange = /** + * @param {?} fn + * @return {?} + */ + function (fn) { this.onChange = fn; }; + /** + * @param {?} fn + * @return {?} + */ + NgbDatepicker.prototype.registerOnTouched = /** + * @param {?} fn + * @return {?} + */ + function (fn) { this.onTouched = fn; }; + /** + * @param {?} isDisabled + * @return {?} + */ + NgbDatepicker.prototype.setDisabledState = /** + * @param {?} isDisabled + * @return {?} + */ + function (isDisabled) { this._service.disabled = isDisabled; }; + /** + * @param {?} value + * @return {?} + */ + NgbDatepicker.prototype.writeValue = /** + * @param {?} value + * @return {?} + */ + function (value) { + this._controlValue = NgbDate.from(this._ngbDateAdapter.fromModel(value)); + this._service.select(this._controlValue); + }; + NgbDatepicker.decorators = [ + { type: core.Component, args: [{ + exportAs: 'ngbDatepicker', + selector: 'ngb-datepicker', + changeDetection: core.ChangeDetectionStrategy.OnPush, + encapsulation: core.ViewEncapsulation.None, + template: "\n \n
\n
\n
\n\n
\n \n \n
\n\n
\n \n
\n
1 && navigation === 'select')\"\n class=\"ngb-dp-month-name\">\n {{ i18n.getMonthFullName(month.number, month.year) }} {{ i18n.getYearNumerals(month.year) }}\n
\n \n \n
\n
\n
\n\n \n ", + providers: [NGB_DATEPICKER_VALUE_ACCESSOR, NgbDatepickerService, NgbDatepickerKeyMapService], + styles: ["ngb-datepicker{border:1px solid #dfdfdf;border-radius:.25rem;display:inline-block}ngb-datepicker-month-view{pointer-events:auto}ngb-datepicker.dropdown-menu{padding:0}.ngb-dp-body{z-index:1050}.ngb-dp-header{border-bottom:0;border-radius:.25rem .25rem 0 0;padding-top:.25rem;background-color:#f8f9fa}.ngb-dp-months{display:-ms-flexbox;display:flex}.ngb-dp-month{pointer-events:none}.ngb-dp-month-name{font-size:larger;height:2rem;line-height:2rem;text-align:center;background-color:#f8f9fa}.ngb-dp-month+.ngb-dp-month .ngb-dp-month-name,.ngb-dp-month+.ngb-dp-month .ngb-dp-week{padding-left:1rem}.ngb-dp-month:last-child .ngb-dp-week{padding-right:.25rem}.ngb-dp-month:first-child .ngb-dp-week{padding-left:.25rem}.ngb-dp-month .ngb-dp-week:last-child{padding-bottom:.25rem}"] + }] } + ]; + /** @nocollapse */ + NgbDatepicker.ctorParameters = function () { return [ + { type: NgbDatepickerKeyMapService }, + { type: NgbDatepickerService }, + { type: NgbCalendar }, + { type: NgbDatepickerI18n }, + { type: NgbDatepickerConfig }, + { type: core.ChangeDetectorRef }, + { type: core.ElementRef }, + { type: NgbDateAdapter }, + { type: core.NgZone } + ]; }; + NgbDatepicker.propDecorators = { + _monthsEl: [{ type: core.ViewChild, args: ['months', { static: true },] }], + dayTemplate: [{ type: core.Input }], + dayTemplateData: [{ type: core.Input }], + displayMonths: [{ type: core.Input }], + firstDayOfWeek: [{ type: core.Input }], + footerTemplate: [{ type: core.Input }], + markDisabled: [{ type: core.Input }], + maxDate: [{ type: core.Input }], + minDate: [{ type: core.Input }], + navigation: [{ type: core.Input }], + outsideDays: [{ type: core.Input }], + showWeekdays: [{ type: core.Input }], + showWeekNumbers: [{ type: core.Input }], + startDate: [{ type: core.Input }], + navigate: [{ type: core.Output }], + select: [{ type: core.Output }] + }; + return NgbDatepicker; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + var NgbDatepickerMonthView = /** @class */ (function () { + function NgbDatepickerMonthView(i18n) { + this.i18n = i18n; + this.select = new core.EventEmitter(); + } + /** + * @param {?} day + * @return {?} + */ + NgbDatepickerMonthView.prototype.doSelect = /** + * @param {?} day + * @return {?} + */ + function (day) { + if (!day.context.disabled && !day.hidden) { + this.select.emit(day.date); + } + }; + NgbDatepickerMonthView.decorators = [ + { type: core.Component, args: [{ + selector: 'ngb-datepicker-month-view', + host: { 'role': 'grid' }, + encapsulation: core.ViewEncapsulation.None, + template: "\n
\n
\n
\n {{ i18n.getWeekdayShortName(w) }}\n
\n
\n \n
\n
{{ i18n.getWeekNumerals(week.number) }}
\n
\n \n \n \n
\n
\n
\n ", + styles: ["ngb-datepicker-month-view{display:block}.ngb-dp-week-number,.ngb-dp-weekday{line-height:2rem;text-align:center;font-style:italic}.ngb-dp-weekday{color:#5bc0de;color:var(--info)}.ngb-dp-week{border-radius:.25rem;display:-ms-flexbox;display:flex}.ngb-dp-weekdays{border-bottom:1px solid rgba(0,0,0,.125);border-radius:0}.ngb-dp-day,.ngb-dp-week-number,.ngb-dp-weekday{width:2rem;height:2rem}.ngb-dp-day{cursor:pointer}.ngb-dp-day.disabled,.ngb-dp-day.hidden{cursor:default}"] + }] } + ]; + /** @nocollapse */ + NgbDatepickerMonthView.ctorParameters = function () { return [ + { type: NgbDatepickerI18n } + ]; }; + NgbDatepickerMonthView.propDecorators = { + dayTemplate: [{ type: core.Input }], + month: [{ type: core.Input }], + showWeekdays: [{ type: core.Input }], + showWeekNumbers: [{ type: core.Input }], + select: [{ type: core.Output }] + }; + return NgbDatepickerMonthView; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + var NgbDatepickerNavigation = /** @class */ (function () { + function NgbDatepickerNavigation(i18n) { + this.i18n = i18n; + this.navigation = NavigationEvent; + this.months = []; + this.navigate = new core.EventEmitter(); + this.select = new core.EventEmitter(); + } + NgbDatepickerNavigation.decorators = [ + { type: core.Component, args: [{ + selector: 'ngb-datepicker-navigation', + changeDetection: core.ChangeDetectionStrategy.OnPush, + encapsulation: core.ViewEncapsulation.None, + template: "\n
\n \n
\n \n \n\n \n
0\">
\n
\n {{ i18n.getMonthFullName(month.number, month.year) }} {{ i18n.getYearNumerals(month.year) }}\n
\n
\n
\n
\n \n
\n ", + styles: ["ngb-datepicker-navigation{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.ngb-dp-navigation-chevron{border-style:solid;border-width:.2em .2em 0 0;display:inline-block;width:.75em;height:.75em;margin-left:.25em;margin-right:.15em;-webkit-transform:rotate(-135deg);transform:rotate(-135deg)}.right .ngb-dp-navigation-chevron{-webkit-transform:rotate(45deg);transform:rotate(45deg);margin-left:.15em;margin-right:.25em}.ngb-dp-arrow{display:-ms-flexbox;display:flex;-ms-flex:1 1 auto;flex:1 1 auto;padding-right:0;padding-left:0;margin:0;width:2rem;height:2rem}.ngb-dp-arrow.right{-ms-flex-pack:end;justify-content:flex-end}.ngb-dp-arrow-btn{padding:0 .25rem;margin:0 .5rem;border:none;background-color:transparent;z-index:1}.ngb-dp-arrow-btn:focus{outline-width:1px;outline-style:auto}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.ngb-dp-arrow-btn:focus{outline-style:solid}}.ngb-dp-month-name{font-size:larger;height:2rem;line-height:2rem;text-align:center}.ngb-dp-navigation-select{display:-ms-flexbox;display:flex;-ms-flex:1 1 9rem;flex:1 1 9rem}"] + }] } + ]; + /** @nocollapse */ + NgbDatepickerNavigation.ctorParameters = function () { return [ + { type: NgbDatepickerI18n } + ]; }; + NgbDatepickerNavigation.propDecorators = { + date: [{ type: core.Input }], + disabled: [{ type: core.Input }], + months: [{ type: core.Input }], + showSelect: [{ type: core.Input }], + prevDisabled: [{ type: core.Input }], + nextDisabled: [{ type: core.Input }], + selectBoxes: [{ type: core.Input }], + navigate: [{ type: core.Output }], + select: [{ type: core.Output }] + }; + return NgbDatepickerNavigation; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** @type {?} */ + var isContainedIn = (/** + * @param {?} element + * @param {?=} array + * @return {?} + */ + function (element, array) { + return array ? array.some((/** + * @param {?} item + * @return {?} + */ + function (item) { return item.contains(element); })) : false; + }); + /** @type {?} */ + var matchesSelectorIfAny = (/** + * @param {?} element + * @param {?=} selector + * @return {?} + */ + function (element, selector) { + return !selector || closest(element, selector) != null; + }); + // we'll have to use 'touch' events instead of 'mouse' events on iOS and add a more significant delay + // to avoid re-opening when handling (click) on a toggling element + // TODO: use proper Angular platform detection when NgbAutoClose becomes a service and we can inject PLATFORM_ID + /** @type {?} */ + var iOS = false; + if (typeof navigator !== 'undefined') { + iOS = !!navigator.userAgent && /iPad|iPhone|iPod/.test(navigator.userAgent); + } + /** + * @param {?} zone + * @param {?} document + * @param {?} type + * @param {?} close + * @param {?} closed$ + * @param {?} insideElements + * @param {?=} ignoreElements + * @param {?=} insideSelector + * @return {?} + */ + function ngbAutoClose(zone, document, type, close, closed$, insideElements, ignoreElements, insideSelector) { + // closing on ESC and outside clicks + if (type) { + zone.runOutsideAngular((/** + * @return {?} + */ + function () { + /** @type {?} */ + var shouldCloseOnClick = (/** + * @param {?} event + * @return {?} + */ + function (event) { + /** @type {?} */ + var element = (/** @type {?} */ (event.target)); + if ((event instanceof MouseEvent && event.button === 2) || isContainedIn(element, ignoreElements)) { + return false; + } + if (type === 'inside') { + return isContainedIn(element, insideElements) && matchesSelectorIfAny(element, insideSelector); + } + else if (type === 'outside') { + return !isContainedIn(element, insideElements); + } + else /* if (type === true) */ { + return matchesSelectorIfAny(element, insideSelector) || !isContainedIn(element, insideElements); + } + }); + /** @type {?} */ + var escapes$ = rxjs.fromEvent(document, 'keydown') + .pipe(operators.takeUntil(closed$), + // tslint:disable-next-line:deprecation + operators.filter((/** + * @param {?} e + * @return {?} + */ + function (e) { return e.which === Key.Escape; }))); + // we have to pre-calculate 'shouldCloseOnClick' on 'mousedown/touchstart', + // because on 'mouseup/touchend' DOM nodes might be detached + /** @type {?} */ + var mouseDowns$ = rxjs.fromEvent(document, iOS ? 'touchstart' : 'mousedown') + .pipe(operators.map(shouldCloseOnClick), operators.takeUntil(closed$)); + /** @type {?} */ + var closeableClicks$ = (/** @type {?} */ (rxjs.fromEvent(document, iOS ? 'touchend' : 'mouseup') + .pipe(operators.withLatestFrom(mouseDowns$), operators.filter((/** + * @param {?} __0 + * @return {?} + */ + function (_a) { + var _b = __read(_a, 2), _ = _b[0], shouldClose = _b[1]; + return shouldClose; + })), operators.delay(iOS ? 16 : 0), operators.takeUntil(closed$)))); + rxjs.race([escapes$, closeableClicks$]).subscribe((/** + * @return {?} + */ + function () { return zone.run(close); })); + })); + } + } + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** @type {?} */ + var FOCUSABLE_ELEMENTS_SELECTOR = [ + 'a[href]', 'button:not([disabled])', 'input:not([disabled]):not([type="hidden"])', 'select:not([disabled])', + 'textarea:not([disabled])', '[contenteditable]', '[tabindex]:not([tabindex="-1"])' + ].join(', '); + /** + * Returns first and last focusable elements inside of a given element based on specific CSS selector + * @param {?} element + * @return {?} + */ + function getFocusableBoundaryElements(element) { + /** @type {?} */ + var list = Array.from((/** @type {?} */ (element.querySelectorAll(FOCUSABLE_ELEMENTS_SELECTOR)))) + .filter((/** + * @param {?} el + * @return {?} + */ + function (el) { return el.tabIndex !== -1; })); + return [list[0], list[list.length - 1]]; + } + /** + * Function that enforces browser focus to be trapped inside a DOM element. + * + * Works only for clicks inside the element and navigation with 'Tab', ignoring clicks outside of the element + * + * \@param element The element around which focus will be trapped inside + * \@param stopFocusTrap$ The observable stream. When completed the focus trap will clean up listeners + * and free internal resources + * \@param refocusOnClick Put the focus back to the last focused element whenever a click occurs on element (default to + * false) + * @type {?} + */ + var ngbFocusTrap = (/** + * @param {?} element + * @param {?} stopFocusTrap$ + * @param {?=} refocusOnClick + * @return {?} + */ + function (element, stopFocusTrap$, refocusOnClick) { + if (refocusOnClick === void 0) { refocusOnClick = false; } + // last focused element + /** @type {?} */ + var lastFocusedElement$ = rxjs.fromEvent(element, 'focusin').pipe(operators.takeUntil(stopFocusTrap$), operators.map((/** + * @param {?} e + * @return {?} + */ + function (e) { return e.target; }))); + // 'tab' / 'shift+tab' stream + rxjs.fromEvent(element, 'keydown') + .pipe(operators.takeUntil(stopFocusTrap$), + // tslint:disable:deprecation + operators.filter((/** + * @param {?} e + * @return {?} + */ + function (e) { return e.which === Key.Tab; })), + // tslint:enable:deprecation + operators.withLatestFrom(lastFocusedElement$)) + .subscribe((/** + * @param {?} __0 + * @return {?} + */ + function (_a) { + var _b = __read(_a, 2), tabEvent = _b[0], focusedElement = _b[1]; + var _c = __read(getFocusableBoundaryElements(element), 2), first = _c[0], last = _c[1]; + if ((focusedElement === first || focusedElement === element) && tabEvent.shiftKey) { + last.focus(); + tabEvent.preventDefault(); + } + if (focusedElement === last && !tabEvent.shiftKey) { + first.focus(); + tabEvent.preventDefault(); + } + })); + // inside click + if (refocusOnClick) { + rxjs.fromEvent(element, 'click') + .pipe(operators.takeUntil(stopFocusTrap$), operators.withLatestFrom(lastFocusedElement$), operators.map((/** + * @param {?} arr + * @return {?} + */ + function (arr) { return (/** @type {?} */ (arr[1])); }))) + .subscribe((/** + * @param {?} lastFocusedElement + * @return {?} + */ + function (lastFocusedElement) { return lastFocusedElement.focus(); })); + } + }); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + // previous version: + // https://github.com/angular-ui/bootstrap/blob/07c31d0731f7cb068a1932b8e01d2312b796b4ec/src/position/position.js + var + // previous version: + // https://github.com/angular-ui/bootstrap/blob/07c31d0731f7cb068a1932b8e01d2312b796b4ec/src/position/position.js + Positioning = /** @class */ (function () { + function Positioning() { + } + /** + * @private + * @param {?} element + * @return {?} + */ + Positioning.prototype.getAllStyles = /** + * @private + * @param {?} element + * @return {?} + */ + function (element) { return window.getComputedStyle(element); }; + /** + * @private + * @param {?} element + * @param {?} prop + * @return {?} + */ + Positioning.prototype.getStyle = /** + * @private + * @param {?} element + * @param {?} prop + * @return {?} + */ + function (element, prop) { return this.getAllStyles(element)[prop]; }; + /** + * @private + * @param {?} element + * @return {?} + */ + Positioning.prototype.isStaticPositioned = /** + * @private + * @param {?} element + * @return {?} + */ + function (element) { + return (this.getStyle(element, 'position') || 'static') === 'static'; + }; + /** + * @private + * @param {?} element + * @return {?} + */ + Positioning.prototype.offsetParent = /** + * @private + * @param {?} element + * @return {?} + */ + function (element) { + /** @type {?} */ + var offsetParentEl = (/** @type {?} */ (element.offsetParent)) || document.documentElement; + while (offsetParentEl && offsetParentEl !== document.documentElement && this.isStaticPositioned(offsetParentEl)) { + offsetParentEl = (/** @type {?} */ (offsetParentEl.offsetParent)); + } + return offsetParentEl || document.documentElement; + }; + /** + * @param {?} element + * @param {?=} round + * @return {?} + */ + Positioning.prototype.position = /** + * @param {?} element + * @param {?=} round + * @return {?} + */ + function (element, round) { + if (round === void 0) { round = true; } + /** @type {?} */ + var elPosition; + /** @type {?} */ + var parentOffset = { width: 0, height: 0, top: 0, bottom: 0, left: 0, right: 0 }; + if (this.getStyle(element, 'position') === 'fixed') { + elPosition = element.getBoundingClientRect(); + elPosition = { + top: elPosition.top, + bottom: elPosition.bottom, + left: elPosition.left, + right: elPosition.right, + height: elPosition.height, + width: elPosition.width + }; + } + else { + /** @type {?} */ + var offsetParentEl = this.offsetParent(element); + elPosition = this.offset(element, false); + if (offsetParentEl !== document.documentElement) { + parentOffset = this.offset(offsetParentEl, false); + } + parentOffset.top += offsetParentEl.clientTop; + parentOffset.left += offsetParentEl.clientLeft; + } + elPosition.top -= parentOffset.top; + elPosition.bottom -= parentOffset.top; + elPosition.left -= parentOffset.left; + elPosition.right -= parentOffset.left; + if (round) { + elPosition.top = Math.round(elPosition.top); + elPosition.bottom = Math.round(elPosition.bottom); + elPosition.left = Math.round(elPosition.left); + elPosition.right = Math.round(elPosition.right); + } + return elPosition; + }; + /** + * @param {?} element + * @param {?=} round + * @return {?} + */ + Positioning.prototype.offset = /** + * @param {?} element + * @param {?=} round + * @return {?} + */ + function (element, round) { + if (round === void 0) { round = true; } + /** @type {?} */ + var elBcr = element.getBoundingClientRect(); + /** @type {?} */ + var viewportOffset = { + top: window.pageYOffset - document.documentElement.clientTop, + left: window.pageXOffset - document.documentElement.clientLeft + }; + /** @type {?} */ + var elOffset = { + height: elBcr.height || element.offsetHeight, + width: elBcr.width || element.offsetWidth, + top: elBcr.top + viewportOffset.top, + bottom: elBcr.bottom + viewportOffset.top, + left: elBcr.left + viewportOffset.left, + right: elBcr.right + viewportOffset.left + }; + if (round) { + elOffset.height = Math.round(elOffset.height); + elOffset.width = Math.round(elOffset.width); + elOffset.top = Math.round(elOffset.top); + elOffset.bottom = Math.round(elOffset.bottom); + elOffset.left = Math.round(elOffset.left); + elOffset.right = Math.round(elOffset.right); + } + return elOffset; + }; + /* + Return false if the element to position is outside the viewport + */ + /* + Return false if the element to position is outside the viewport + */ + /** + * @param {?} hostElement + * @param {?} targetElement + * @param {?} placement + * @param {?=} appendToBody + * @return {?} + */ + Positioning.prototype.positionElements = /* + Return false if the element to position is outside the viewport + */ + /** + * @param {?} hostElement + * @param {?} targetElement + * @param {?} placement + * @param {?=} appendToBody + * @return {?} + */ + function (hostElement, targetElement, placement, appendToBody) { + var _a = __read(placement.split('-'), 2), _b = _a[0], placementPrimary = _b === void 0 ? 'top' : _b, _c = _a[1], placementSecondary = _c === void 0 ? 'center' : _c; + /** @type {?} */ + var hostElPosition = appendToBody ? this.offset(hostElement, false) : this.position(hostElement, false); + /** @type {?} */ + var targetElStyles = this.getAllStyles(targetElement); + /** @type {?} */ + var marginTop = parseFloat(targetElStyles.marginTop); + /** @type {?} */ + var marginBottom = parseFloat(targetElStyles.marginBottom); + /** @type {?} */ + var marginLeft = parseFloat(targetElStyles.marginLeft); + /** @type {?} */ + var marginRight = parseFloat(targetElStyles.marginRight); + /** @type {?} */ + var topPosition = 0; + /** @type {?} */ + var leftPosition = 0; + switch (placementPrimary) { + case 'top': + topPosition = (hostElPosition.top - (targetElement.offsetHeight + marginTop + marginBottom)); + break; + case 'bottom': + topPosition = (hostElPosition.top + hostElPosition.height); + break; + case 'left': + leftPosition = (hostElPosition.left - (targetElement.offsetWidth + marginLeft + marginRight)); + break; + case 'right': + leftPosition = (hostElPosition.left + hostElPosition.width); + break; + } + switch (placementSecondary) { + case 'top': + topPosition = hostElPosition.top; + break; + case 'bottom': + topPosition = hostElPosition.top + hostElPosition.height - targetElement.offsetHeight; + break; + case 'left': + leftPosition = hostElPosition.left; + break; + case 'right': + leftPosition = hostElPosition.left + hostElPosition.width - targetElement.offsetWidth; + break; + case 'center': + if (placementPrimary === 'top' || placementPrimary === 'bottom') { + leftPosition = (hostElPosition.left + hostElPosition.width / 2 - targetElement.offsetWidth / 2); + } + else { + topPosition = (hostElPosition.top + hostElPosition.height / 2 - targetElement.offsetHeight / 2); + } + break; + } + /// The translate3d/gpu acceleration render a blurry text on chrome, the next line is commented until a browser fix + // targetElement.style.transform = `translate3d(${Math.round(leftPosition)}px, ${Math.floor(topPosition)}px, 0px)`; + targetElement.style.transform = "translate(" + Math.round(leftPosition) + "px, " + Math.round(topPosition) + "px)"; + // Check if the targetElement is inside the viewport + /** @type {?} */ + var targetElBCR = targetElement.getBoundingClientRect(); + /** @type {?} */ + var html = document.documentElement; + /** @type {?} */ + var windowHeight = window.innerHeight || html.clientHeight; + /** @type {?} */ + var windowWidth = window.innerWidth || html.clientWidth; + return targetElBCR.left >= 0 && targetElBCR.top >= 0 && targetElBCR.right <= windowWidth && + targetElBCR.bottom <= windowHeight; + }; + return Positioning; + }()); + /** @type {?} */ + var placementSeparator = /\s+/; + /** @type {?} */ + var positionService = new Positioning(); + /* + * Accept the placement array and applies the appropriate placement dependent on the viewport. + * Returns the applied placement. + * In case of auto placement, placements are selected in order + * 'top', 'bottom', 'left', 'right', + * 'top-left', 'top-right', + * 'bottom-left', 'bottom-right', + * 'left-top', 'left-bottom', + * 'right-top', 'right-bottom'. + * */ + /** + * @param {?} hostElement + * @param {?} targetElement + * @param {?} placement + * @param {?=} appendToBody + * @param {?=} baseClass + * @return {?} + */ + function positionElements(hostElement, targetElement, placement, appendToBody, baseClass) { + var e_1, _a; + /** @type {?} */ + var placementVals = Array.isArray(placement) ? placement : (/** @type {?} */ (placement.split(placementSeparator))); + /** @type {?} */ + var allowedPlacements = [ + 'top', 'bottom', 'left', 'right', 'top-left', 'top-right', 'bottom-left', 'bottom-right', 'left-top', 'left-bottom', + 'right-top', 'right-bottom' + ]; + /** @type {?} */ + var classList = targetElement.classList; + /** @type {?} */ + var addClassesToTarget = (/** + * @param {?} targetPlacement + * @return {?} + */ + function (targetPlacement) { + var _a = __read(targetPlacement.split('-'), 2), primary = _a[0], secondary = _a[1]; + /** @type {?} */ + var classes = []; + if (baseClass) { + classes.push(baseClass + "-" + primary); + if (secondary) { + classes.push(baseClass + "-" + primary + "-" + secondary); + } + classes.forEach((/** + * @param {?} classname + * @return {?} + */ + function (classname) { classList.add(classname); })); + } + return classes; + }); + // Remove old placement classes to avoid issues + if (baseClass) { + allowedPlacements.forEach((/** + * @param {?} placementToRemove + * @return {?} + */ + function (placementToRemove) { classList.remove(baseClass + "-" + placementToRemove); })); + } + // replace auto placement with other placements + /** @type {?} */ + var hasAuto = placementVals.findIndex((/** + * @param {?} val + * @return {?} + */ + function (val) { return val === 'auto'; })); + if (hasAuto >= 0) { + allowedPlacements.forEach((/** + * @param {?} obj + * @return {?} + */ + function (obj) { + if (placementVals.find((/** + * @param {?} val + * @return {?} + */ + function (val) { return val.search('^' + obj) !== -1; })) == null) { + placementVals.splice(hasAuto++, 1, (/** @type {?} */ (obj))); + } + })); + } + // coordinates where to position + // Required for transform: + /** @type {?} */ + var style = targetElement.style; + style.position = 'absolute'; + style.top = '0'; + style.left = '0'; + style['will-change'] = 'transform'; + /** @type {?} */ + var testPlacement; + /** @type {?} */ + var isInViewport = false; + try { + for (var placementVals_1 = __values(placementVals), placementVals_1_1 = placementVals_1.next(); !placementVals_1_1.done; placementVals_1_1 = placementVals_1.next()) { + testPlacement = placementVals_1_1.value; + /** @type {?} */ + var addedClasses = addClassesToTarget(testPlacement); + if (positionService.positionElements(hostElement, targetElement, testPlacement, appendToBody)) { + isInViewport = true; + break; + } + // Remove the baseClasses for further calculation + if (baseClass) { + addedClasses.forEach((/** + * @param {?} classname + * @return {?} + */ + function (classname) { classList.remove(classname); })); + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (placementVals_1_1 && !placementVals_1_1.done && (_a = placementVals_1.return)) _a.call(placementVals_1); + } + finally { if (e_1) throw e_1.error; } + } + if (!isInViewport) { + // If nothing match, the first placement is the default one + testPlacement = placementVals[0]; + addClassesToTarget(testPlacement); + positionService.positionElements(hostElement, targetElement, testPlacement, appendToBody); + } + return testPlacement; + } + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** + * @return {?} + */ + function NGB_DATEPICKER_PARSER_FORMATTER_FACTORY() { + return new NgbDateISOParserFormatter(); + } + /** + * An abstract service for parsing and formatting dates for the + * [`NgbInputDatepicker`](#/components/datepicker/api#NgbInputDatepicker) directive. + * Converts between the internal `NgbDateStruct` model presentation and a `string` that is displayed in the + * input element. + * + * When user types something in the input this service attempts to parse it into a `NgbDateStruct` object. + * And vice versa, when users selects a date in the calendar with the mouse, it must be displayed as a `string` + * in the input. + * + * Default implementation uses the ISO 8601 format, but you can provide another implementation via DI + * to use an alternative string format or a custom parsing logic. + * + * See the [date format overview](#/components/datepicker/overview#date-model) for more details. + * @abstract + */ + var NgbDateParserFormatter = /** @class */ (function () { + function NgbDateParserFormatter() { + } + NgbDateParserFormatter.decorators = [ + { type: core.Injectable, args: [{ providedIn: 'root', useFactory: NGB_DATEPICKER_PARSER_FORMATTER_FACTORY },] } + ]; + /** @nocollapse */ NgbDateParserFormatter.ngInjectableDef = core.ɵɵdefineInjectable({ factory: NGB_DATEPICKER_PARSER_FORMATTER_FACTORY, token: NgbDateParserFormatter, providedIn: "root" }); + return NgbDateParserFormatter; + }()); + var NgbDateISOParserFormatter = /** @class */ (function (_super) { + __extends(NgbDateISOParserFormatter, _super); + function NgbDateISOParserFormatter() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * @param {?} value + * @return {?} + */ + NgbDateISOParserFormatter.prototype.parse = /** + * @param {?} value + * @return {?} + */ + function (value) { + if (value) { + /** @type {?} */ + var dateParts = value.trim().split('-'); + if (dateParts.length === 1 && isNumber(dateParts[0])) { + return { year: toInteger(dateParts[0]), month: null, day: null }; + } + else if (dateParts.length === 2 && isNumber(dateParts[0]) && isNumber(dateParts[1])) { + return { year: toInteger(dateParts[0]), month: toInteger(dateParts[1]), day: null }; + } + else if (dateParts.length === 3 && isNumber(dateParts[0]) && isNumber(dateParts[1]) && isNumber(dateParts[2])) { + return { year: toInteger(dateParts[0]), month: toInteger(dateParts[1]), day: toInteger(dateParts[2]) }; + } + } + return null; + }; + /** + * @param {?} date + * @return {?} + */ + NgbDateISOParserFormatter.prototype.format = /** + * @param {?} date + * @return {?} + */ + function (date) { + return date ? + date.year + "-" + (isNumber(date.month) ? padNumber(date.month) : '') + "-" + (isNumber(date.day) ? padNumber(date.day) : '') : + ''; + }; + NgbDateISOParserFormatter.decorators = [ + { type: core.Injectable } + ]; + return NgbDateISOParserFormatter; + }(NgbDateParserFormatter)); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** @type {?} */ + var NGB_DATEPICKER_VALUE_ACCESSOR$1 = { + provide: forms.NG_VALUE_ACCESSOR, + useExisting: core.forwardRef((/** + * @return {?} + */ + function () { return NgbInputDatepicker; })), + multi: true + }; + /** @type {?} */ + var NGB_DATEPICKER_VALIDATOR = { + provide: forms.NG_VALIDATORS, + useExisting: core.forwardRef((/** + * @return {?} + */ + function () { return NgbInputDatepicker; })), + multi: true + }; + /** + * A directive that allows to stick a datepicker popup to an input field. + * + * Manages interaction with the input field itself, does value formatting and provides forms integration. + */ + var NgbInputDatepicker = /** @class */ (function () { + function NgbInputDatepicker(_parserFormatter, _elRef, _vcRef, _renderer, _cfr, _ngZone, _service, _calendar, _dateAdapter, _document, _changeDetector) { + var _this = this; + this._parserFormatter = _parserFormatter; + this._elRef = _elRef; + this._vcRef = _vcRef; + this._renderer = _renderer; + this._cfr = _cfr; + this._ngZone = _ngZone; + this._service = _service; + this._calendar = _calendar; + this._dateAdapter = _dateAdapter; + this._document = _document; + this._changeDetector = _changeDetector; + this._cRef = null; + this._disabled = false; + /** + * Indicates whether the datepicker popup should be closed automatically after date selection / outside click or not. + * + * * `true` - the popup will close on both date selection and outside click. + * * `false` - the popup can only be closed manually via `close()` or `toggle()` methods. + * * `"inside"` - the popup will close on date selection, but not outside clicks. + * * `"outside"` - the popup will close only on the outside click and not on date selection/inside clicks. + * + * \@since 3.0.0 + */ + this.autoClose = true; + /** + * The preferred placement of the datepicker popup. + * + * Possible values are `"top"`, `"top-left"`, `"top-right"`, `"bottom"`, `"bottom-left"`, + * `"bottom-right"`, `"left"`, `"left-top"`, `"left-bottom"`, `"right"`, `"right-top"`, + * `"right-bottom"` + * + * Accepts an array of strings or a string with space separated possible values. + * + * The default order of preference is `"bottom-left bottom-right top-left top-right"` + * + * Please see the [positioning overview](#/positioning) for more details. + */ + this.placement = ['bottom-left', 'bottom-right', 'top-left', 'top-right']; + /** + * An event emitted when user selects a date using keyboard or mouse. + * + * The payload of the event is currently selected `NgbDate`. + * + * \@since 1.1.1 + */ + this.dateSelect = new core.EventEmitter(); + /** + * Event emitted right after the navigation happens and displayed month changes. + * + * See [`NgbDatepickerNavigateEvent`](#/components/datepicker/api#NgbDatepickerNavigateEvent) for the payload info. + */ + this.navigate = new core.EventEmitter(); + /** + * An event fired after closing datepicker window. + * + * \@since 4.2.0 + */ + this.closed = new core.EventEmitter(); + this._onChange = (/** + * @param {?} _ + * @return {?} + */ + function (_) { }); + this._onTouched = (/** + * @return {?} + */ + function () { }); + this._validatorChange = (/** + * @return {?} + */ + function () { }); + this._zoneSubscription = _ngZone.onStable.subscribe((/** + * @return {?} + */ + function () { return _this._updatePopupPosition(); })); + } + Object.defineProperty(NgbInputDatepicker.prototype, "disabled", { + get: /** + * @return {?} + */ + function () { + return this._disabled; + }, + set: /** + * @param {?} value + * @return {?} + */ + function (value) { + this._disabled = value === '' || (value && value !== 'false'); + if (this.isOpen()) { + this._cRef.instance.setDisabledState(this._disabled); + } + }, + enumerable: true, + configurable: true + }); + /** + * @param {?} fn + * @return {?} + */ + NgbInputDatepicker.prototype.registerOnChange = /** + * @param {?} fn + * @return {?} + */ + function (fn) { this._onChange = fn; }; + /** + * @param {?} fn + * @return {?} + */ + NgbInputDatepicker.prototype.registerOnTouched = /** + * @param {?} fn + * @return {?} + */ + function (fn) { this._onTouched = fn; }; + /** + * @param {?} fn + * @return {?} + */ + NgbInputDatepicker.prototype.registerOnValidatorChange = /** + * @param {?} fn + * @return {?} + */ + function (fn) { this._validatorChange = fn; }; + /** + * @param {?} isDisabled + * @return {?} + */ + NgbInputDatepicker.prototype.setDisabledState = /** + * @param {?} isDisabled + * @return {?} + */ + function (isDisabled) { this.disabled = isDisabled; }; + /** + * @param {?} c + * @return {?} + */ + NgbInputDatepicker.prototype.validate = /** + * @param {?} c + * @return {?} + */ + function (c) { + /** @type {?} */ + var value = c.value; + if (value === null || value === undefined) { + return null; + } + /** @type {?} */ + var ngbDate = this._fromDateStruct(this._dateAdapter.fromModel(value)); + if (!this._calendar.isValid(ngbDate)) { + return { 'ngbDate': { invalid: c.value } }; + } + if (this.minDate && ngbDate.before(NgbDate.from(this.minDate))) { + return { 'ngbDate': { requiredBefore: this.minDate } }; + } + if (this.maxDate && ngbDate.after(NgbDate.from(this.maxDate))) { + return { 'ngbDate': { requiredAfter: this.maxDate } }; + } + }; + /** + * @param {?} value + * @return {?} + */ + NgbInputDatepicker.prototype.writeValue = /** + * @param {?} value + * @return {?} + */ + function (value) { + this._model = this._fromDateStruct(this._dateAdapter.fromModel(value)); + this._writeModelValue(this._model); + }; + /** + * @param {?} value + * @param {?=} updateView + * @return {?} + */ + NgbInputDatepicker.prototype.manualDateChange = /** + * @param {?} value + * @param {?=} updateView + * @return {?} + */ + function (value, updateView) { + if (updateView === void 0) { updateView = false; } + /** @type {?} */ + var inputValueChanged = value !== this._inputValue; + if (inputValueChanged) { + this._inputValue = value; + this._model = this._fromDateStruct(this._parserFormatter.parse(value)); + } + if (inputValueChanged || !updateView) { + this._onChange(this._model ? this._dateAdapter.toModel(this._model) : (value === '' ? null : value)); + } + if (updateView && this._model) { + this._writeModelValue(this._model); + } + }; + /** + * @return {?} + */ + NgbInputDatepicker.prototype.isOpen = /** + * @return {?} + */ + function () { return !!this._cRef; }; + /** + * Opens the datepicker popup. + * + * If the related form control contains a valid date, the corresponding month will be opened. + */ + /** + * Opens the datepicker popup. + * + * If the related form control contains a valid date, the corresponding month will be opened. + * @return {?} + */ + NgbInputDatepicker.prototype.open = /** + * Opens the datepicker popup. + * + * If the related form control contains a valid date, the corresponding month will be opened. + * @return {?} + */ + function () { + var _this = this; + if (!this.isOpen()) { + /** @type {?} */ + var cf = this._cfr.resolveComponentFactory(NgbDatepicker); + this._cRef = this._vcRef.createComponent(cf); + this._applyPopupStyling(this._cRef.location.nativeElement); + this._applyDatepickerInputs(this._cRef.instance); + this._subscribeForDatepickerOutputs(this._cRef.instance); + this._cRef.instance.ngOnInit(); + this._cRef.instance.writeValue(this._dateAdapter.toModel(this._model)); + // date selection event handling + this._cRef.instance.registerOnChange((/** + * @param {?} selectedDate + * @return {?} + */ + function (selectedDate) { + _this.writeValue(selectedDate); + _this._onChange(selectedDate); + _this._onTouched(); + })); + this._cRef.changeDetectorRef.detectChanges(); + this._cRef.instance.setDisabledState(this.disabled); + if (this.container === 'body') { + window.document.querySelector(this.container).appendChild(this._cRef.location.nativeElement); + } + // focus handling + ngbFocusTrap(this._cRef.location.nativeElement, this.closed, true); + this._cRef.instance.focus(); + ngbAutoClose(this._ngZone, this._document, this.autoClose, (/** + * @return {?} + */ + function () { return _this.close(); }), this.closed, [], [this._elRef.nativeElement, this._cRef.location.nativeElement]); + } + }; + /** + * Closes the datepicker popup. + */ + /** + * Closes the datepicker popup. + * @return {?} + */ + NgbInputDatepicker.prototype.close = /** + * Closes the datepicker popup. + * @return {?} + */ + function () { + if (this.isOpen()) { + this._vcRef.remove(this._vcRef.indexOf(this._cRef.hostView)); + this._cRef = null; + this.closed.emit(); + this._changeDetector.markForCheck(); + } + }; + /** + * Toggles the datepicker popup. + */ + /** + * Toggles the datepicker popup. + * @return {?} + */ + NgbInputDatepicker.prototype.toggle = /** + * Toggles the datepicker popup. + * @return {?} + */ + function () { + if (this.isOpen()) { + this.close(); + } + else { + this.open(); + } + }; + /** + * Navigates to the provided date. + * + * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec. + * If nothing or invalid date provided calendar will open current month. + * + * Use the `[startDate]` input as an alternative. + */ + /** + * Navigates to the provided date. + * + * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec. + * If nothing or invalid date provided calendar will open current month. + * + * Use the `[startDate]` input as an alternative. + * @param {?=} date + * @return {?} + */ + NgbInputDatepicker.prototype.navigateTo = /** + * Navigates to the provided date. + * + * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec. + * If nothing or invalid date provided calendar will open current month. + * + * Use the `[startDate]` input as an alternative. + * @param {?=} date + * @return {?} + */ + function (date) { + if (this.isOpen()) { + this._cRef.instance.navigateTo(date); + } + }; + /** + * @return {?} + */ + NgbInputDatepicker.prototype.onBlur = /** + * @return {?} + */ + function () { this._onTouched(); }; + /** + * @param {?} changes + * @return {?} + */ + NgbInputDatepicker.prototype.ngOnChanges = /** + * @param {?} changes + * @return {?} + */ + function (changes) { + if (changes['minDate'] || changes['maxDate']) { + this._validatorChange(); + } + }; + /** + * @return {?} + */ + NgbInputDatepicker.prototype.ngOnDestroy = /** + * @return {?} + */ + function () { + this.close(); + this._zoneSubscription.unsubscribe(); + }; + /** + * @private + * @param {?} datepickerInstance + * @return {?} + */ + NgbInputDatepicker.prototype._applyDatepickerInputs = /** + * @private + * @param {?} datepickerInstance + * @return {?} + */ + function (datepickerInstance) { + var _this = this; + ['dayTemplate', 'dayTemplateData', 'displayMonths', 'firstDayOfWeek', 'footerTemplate', 'markDisabled', 'minDate', + 'maxDate', 'navigation', 'outsideDays', 'showNavigation', 'showWeekdays', 'showWeekNumbers'] + .forEach((/** + * @param {?} optionName + * @return {?} + */ + function (optionName) { + if (_this[optionName] !== undefined) { + datepickerInstance[optionName] = _this[optionName]; + } + })); + datepickerInstance.startDate = this.startDate || this._model; + }; + /** + * @private + * @param {?} nativeElement + * @return {?} + */ + NgbInputDatepicker.prototype._applyPopupStyling = /** + * @private + * @param {?} nativeElement + * @return {?} + */ + function (nativeElement) { + this._renderer.addClass(nativeElement, 'dropdown-menu'); + this._renderer.addClass(nativeElement, 'show'); + if (this.container === 'body') { + this._renderer.addClass(nativeElement, 'ngb-dp-body'); + } + }; + /** + * @private + * @param {?} datepickerInstance + * @return {?} + */ + NgbInputDatepicker.prototype._subscribeForDatepickerOutputs = /** + * @private + * @param {?} datepickerInstance + * @return {?} + */ + function (datepickerInstance) { + var _this = this; + datepickerInstance.navigate.subscribe((/** + * @param {?} navigateEvent + * @return {?} + */ + function (navigateEvent) { return _this.navigate.emit(navigateEvent); })); + datepickerInstance.select.subscribe((/** + * @param {?} date + * @return {?} + */ + function (date) { + _this.dateSelect.emit(date); + if (_this.autoClose === true || _this.autoClose === 'inside') { + _this.close(); + } + })); + }; + /** + * @private + * @param {?} model + * @return {?} + */ + NgbInputDatepicker.prototype._writeModelValue = /** + * @private + * @param {?} model + * @return {?} + */ + function (model) { + /** @type {?} */ + var value = this._parserFormatter.format(model); + this._inputValue = value; + this._renderer.setProperty(this._elRef.nativeElement, 'value', value); + if (this.isOpen()) { + this._cRef.instance.writeValue(this._dateAdapter.toModel(model)); + this._onTouched(); + } + }; + /** + * @private + * @param {?} date + * @return {?} + */ + NgbInputDatepicker.prototype._fromDateStruct = /** + * @private + * @param {?} date + * @return {?} + */ + function (date) { + /** @type {?} */ + var ngbDate = date ? new NgbDate(date.year, date.month, date.day) : null; + return this._calendar.isValid(ngbDate) ? ngbDate : null; + }; + /** + * @private + * @return {?} + */ + NgbInputDatepicker.prototype._updatePopupPosition = /** + * @private + * @return {?} + */ + function () { + if (!this._cRef) { + return; + } + /** @type {?} */ + var hostElement; + if (typeof this.positionTarget === 'string') { + hostElement = window.document.querySelector(this.positionTarget); + } + else if (this.positionTarget instanceof HTMLElement) { + hostElement = this.positionTarget; + } + else { + hostElement = this._elRef.nativeElement; + } + if (this.positionTarget && !hostElement) { + throw new Error('ngbDatepicker could not find element declared in [positionTarget] to position against.'); + } + positionElements(hostElement, this._cRef.location.nativeElement, this.placement, this.container === 'body'); + }; + NgbInputDatepicker.decorators = [ + { type: core.Directive, args: [{ + selector: 'input[ngbDatepicker]', + exportAs: 'ngbDatepicker', + host: { + '(input)': 'manualDateChange($event.target.value)', + '(change)': 'manualDateChange($event.target.value, true)', + '(blur)': 'onBlur()', + '[disabled]': 'disabled' + }, + providers: [NGB_DATEPICKER_VALUE_ACCESSOR$1, NGB_DATEPICKER_VALIDATOR, NgbDatepickerService] + },] } + ]; + /** @nocollapse */ + NgbInputDatepicker.ctorParameters = function () { return [ + { type: NgbDateParserFormatter }, + { type: core.ElementRef }, + { type: core.ViewContainerRef }, + { type: core.Renderer2 }, + { type: core.ComponentFactoryResolver }, + { type: core.NgZone }, + { type: NgbDatepickerService }, + { type: NgbCalendar }, + { type: NgbDateAdapter }, + { type: undefined, decorators: [{ type: core.Inject, args: [common.DOCUMENT,] }] }, + { type: core.ChangeDetectorRef } + ]; }; + NgbInputDatepicker.propDecorators = { + autoClose: [{ type: core.Input }], + dayTemplate: [{ type: core.Input }], + dayTemplateData: [{ type: core.Input }], + displayMonths: [{ type: core.Input }], + firstDayOfWeek: [{ type: core.Input }], + footerTemplate: [{ type: core.Input }], + markDisabled: [{ type: core.Input }], + minDate: [{ type: core.Input }], + maxDate: [{ type: core.Input }], + navigation: [{ type: core.Input }], + outsideDays: [{ type: core.Input }], + placement: [{ type: core.Input }], + showWeekdays: [{ type: core.Input }], + showWeekNumbers: [{ type: core.Input }], + startDate: [{ type: core.Input }], + container: [{ type: core.Input }], + positionTarget: [{ type: core.Input }], + dateSelect: [{ type: core.Output }], + navigate: [{ type: core.Output }], + closed: [{ type: core.Output }], + disabled: [{ type: core.Input }] + }; + return NgbInputDatepicker; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + var NgbDatepickerDayView = /** @class */ (function () { + function NgbDatepickerDayView(i18n) { + this.i18n = i18n; + } + /** + * @return {?} + */ + NgbDatepickerDayView.prototype.isMuted = /** + * @return {?} + */ + function () { return !this.selected && (this.date.month !== this.currentMonth || this.disabled); }; + NgbDatepickerDayView.decorators = [ + { type: core.Component, args: [{ + selector: '[ngbDatepickerDayView]', + changeDetection: core.ChangeDetectionStrategy.OnPush, + encapsulation: core.ViewEncapsulation.None, + host: { + 'class': 'btn-light', + '[class.bg-primary]': 'selected', + '[class.text-white]': 'selected', + '[class.text-muted]': 'isMuted()', + '[class.outside]': 'isMuted()', + '[class.active]': 'focused' + }, + template: "{{ i18n.getDayNumerals(date) }}", + styles: ["[ngbDatepickerDayView]{text-align:center;width:2rem;height:2rem;line-height:2rem;border-radius:.25rem;background:0 0}[ngbDatepickerDayView].outside{opacity:.5}"] + }] } + ]; + /** @nocollapse */ + NgbDatepickerDayView.ctorParameters = function () { return [ + { type: NgbDatepickerI18n } + ]; }; + NgbDatepickerDayView.propDecorators = { + currentMonth: [{ type: core.Input }], + date: [{ type: core.Input }], + disabled: [{ type: core.Input }], + focused: [{ type: core.Input }], + selected: [{ type: core.Input }] + }; + return NgbDatepickerDayView; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + var NgbDatepickerNavigationSelect = /** @class */ (function () { + function NgbDatepickerNavigationSelect(i18n) { + this.i18n = i18n; + this.select = new core.EventEmitter(); + } + /** + * @param {?} month + * @return {?} + */ + NgbDatepickerNavigationSelect.prototype.changeMonth = /** + * @param {?} month + * @return {?} + */ + function (month) { this.select.emit(new NgbDate(this.date.year, toInteger(month), 1)); }; + /** + * @param {?} year + * @return {?} + */ + NgbDatepickerNavigationSelect.prototype.changeYear = /** + * @param {?} year + * @return {?} + */ + function (year) { this.select.emit(new NgbDate(toInteger(year), this.date.month, 1)); }; + NgbDatepickerNavigationSelect.decorators = [ + { type: core.Component, args: [{ + selector: 'ngb-datepicker-navigation-select', + changeDetection: core.ChangeDetectionStrategy.OnPush, + encapsulation: core.ViewEncapsulation.None, + template: "\n \n \n \n \n \n ", + styles: ["ngb-datepicker-navigation-select>.custom-select{-ms-flex:1 1 auto;flex:1 1 auto;padding:0 .5rem;font-size:.875rem;height:1.85rem}"] + }] } + ]; + /** @nocollapse */ + NgbDatepickerNavigationSelect.ctorParameters = function () { return [ + { type: NgbDatepickerI18n } + ]; }; + NgbDatepickerNavigationSelect.propDecorators = { + date: [{ type: core.Input }], + disabled: [{ type: core.Input }], + months: [{ type: core.Input }], + years: [{ type: core.Input }], + select: [{ type: core.Output }] + }; + return NgbDatepickerNavigationSelect; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** + * @abstract + */ + var NgbCalendarHijri = /** @class */ (function (_super) { + __extends(NgbCalendarHijri, _super); + function NgbCalendarHijri() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * @return {?} + */ + NgbCalendarHijri.prototype.getDaysPerWeek = /** + * @return {?} + */ + function () { return 7; }; + /** + * @return {?} + */ + NgbCalendarHijri.prototype.getMonths = /** + * @return {?} + */ + function () { return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; }; + /** + * @return {?} + */ + NgbCalendarHijri.prototype.getWeeksPerMonth = /** + * @return {?} + */ + function () { return 6; }; + /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + NgbCalendarHijri.prototype.getNext = /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + function (date, period, number) { + if (period === void 0) { period = 'd'; } + if (number === void 0) { number = 1; } + date = new NgbDate(date.year, date.month, date.day); + switch (period) { + case 'y': + date = this._setYear(date, date.year + number); + date.month = 1; + date.day = 1; + return date; + case 'm': + date = this._setMonth(date, date.month + number); + date.day = 1; + return date; + case 'd': + return this._setDay(date, date.day + number); + default: + return date; + } + }; + /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + NgbCalendarHijri.prototype.getPrev = /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + function (date, period, number) { + if (period === void 0) { period = 'd'; } + if (number === void 0) { number = 1; } + return this.getNext(date, period, -number); + }; + /** + * @param {?} date + * @return {?} + */ + NgbCalendarHijri.prototype.getWeekday = /** + * @param {?} date + * @return {?} + */ + function (date) { + /** @type {?} */ + var day = this.toGregorian(date).getDay(); + // in JS Date Sun=0, in ISO 8601 Sun=7 + return day === 0 ? 7 : day; + }; + /** + * @param {?} week + * @param {?} firstDayOfWeek + * @return {?} + */ + NgbCalendarHijri.prototype.getWeekNumber = /** + * @param {?} week + * @param {?} firstDayOfWeek + * @return {?} + */ + function (week, firstDayOfWeek) { + // in JS Date Sun=0, in ISO 8601 Sun=7 + if (firstDayOfWeek === 7) { + firstDayOfWeek = 0; + } + /** @type {?} */ + var thursdayIndex = (4 + 7 - firstDayOfWeek) % 7; + /** @type {?} */ + var date = week[thursdayIndex]; + /** @type {?} */ + var jsDate = this.toGregorian(date); + jsDate.setDate(jsDate.getDate() + 4 - (jsDate.getDay() || 7)); // Thursday + // Thursday + /** @type {?} */ + var time = jsDate.getTime(); + /** @type {?} */ + var MuhDate = this.toGregorian(new NgbDate(date.year, 1, 1)); + return Math.floor(Math.round((time - MuhDate.getTime()) / 86400000) / 7) + 1; + }; + /** + * @return {?} + */ + NgbCalendarHijri.prototype.getToday = /** + * @return {?} + */ + function () { return this.fromGregorian(new Date()); }; + /** + * @param {?} date + * @return {?} + */ + NgbCalendarHijri.prototype.isValid = /** + * @param {?} date + * @return {?} + */ + function (date) { + return date && isNumber(date.year) && isNumber(date.month) && isNumber(date.day) && + !isNaN(this.toGregorian(date).getTime()); + }; + /** + * @private + * @param {?} date + * @param {?} day + * @return {?} + */ + NgbCalendarHijri.prototype._setDay = /** + * @private + * @param {?} date + * @param {?} day + * @return {?} + */ + function (date, day) { + day = +day; + /** @type {?} */ + var mDays = this.getDaysPerMonth(date.month, date.year); + if (day <= 0) { + while (day <= 0) { + date = this._setMonth(date, date.month - 1); + mDays = this.getDaysPerMonth(date.month, date.year); + day += mDays; + } + } + else if (day > mDays) { + while (day > mDays) { + day -= mDays; + date = this._setMonth(date, date.month + 1); + mDays = this.getDaysPerMonth(date.month, date.year); + } + } + date.day = day; + return date; + }; + /** + * @private + * @param {?} date + * @param {?} month + * @return {?} + */ + NgbCalendarHijri.prototype._setMonth = /** + * @private + * @param {?} date + * @param {?} month + * @return {?} + */ + function (date, month) { + month = +month; + date.year = date.year + Math.floor((month - 1) / 12); + date.month = Math.floor(((month - 1) % 12 + 12) % 12) + 1; + return date; + }; + /** + * @private + * @param {?} date + * @param {?} year + * @return {?} + */ + NgbCalendarHijri.prototype._setYear = /** + * @private + * @param {?} date + * @param {?} year + * @return {?} + */ + function (date, year) { + date.year = +year; + return date; + }; + NgbCalendarHijri.decorators = [ + { type: core.Injectable } + ]; + return NgbCalendarHijri; + }(NgbCalendar)); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** + * Checks if islamic year is a leap year + * @param {?} hYear + * @return {?} + */ + function isIslamicLeapYear(hYear) { + return (14 + 11 * hYear) % 30 < 11; + } + /** + * Checks if gregorian years is a leap year + * @param {?} gDate + * @return {?} + */ + function isGregorianLeapYear(gDate) { + /** @type {?} */ + var year = gDate.getFullYear(); + return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0; + } + /** + * Returns the start of Hijri Month. + * `hMonth` is 0 for Muharram, 1 for Safar, etc. + * `hYear` is any Hijri hYear. + * @param {?} hYear + * @param {?} hMonth + * @return {?} + */ + function getIslamicMonthStart(hYear, hMonth) { + return Math.ceil(29.5 * hMonth) + (hYear - 1) * 354 + Math.floor((3 + 11 * hYear) / 30.0); + } + /** + * Returns the start of Hijri year. + * `year` is any Hijri year. + * @param {?} year + * @return {?} + */ + function getIslamicYearStart(year) { + return (year - 1) * 354 + Math.floor((3 + 11 * year) / 30.0); + } + /** + * @param {?} a + * @param {?} b + * @return {?} + */ + function mod(a, b) { + return a - b * Math.floor(a / b); + } + /** + * The civil calendar is one type of Hijri calendars used in islamic countries. + * Uses a fixed cycle of alternating 29- and 30-day months, + * with a leap day added to the last month of 11 out of every 30 years. + * http://cldr.unicode.org/development/development-process/design-proposals/islamic-calendar-types + * All the calculations here are based on the equations from "Calendrical Calculations" By Edward M. Reingold, Nachum + * Dershowitz. + * @type {?} + */ + var GREGORIAN_EPOCH = 1721425.5; + /** @type {?} */ + var ISLAMIC_EPOCH = 1948439.5; + var NgbCalendarIslamicCivil = /** @class */ (function (_super) { + __extends(NgbCalendarIslamicCivil, _super); + function NgbCalendarIslamicCivil() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * Returns the equivalent islamic(civil) date value for a give input Gregorian date. + * `gDate` is a JS Date to be converted to Hijri. + */ + /** + * Returns the equivalent islamic(civil) date value for a give input Gregorian date. + * `gDate` is a JS Date to be converted to Hijri. + * @param {?} gDate + * @return {?} + */ + NgbCalendarIslamicCivil.prototype.fromGregorian = /** + * Returns the equivalent islamic(civil) date value for a give input Gregorian date. + * `gDate` is a JS Date to be converted to Hijri. + * @param {?} gDate + * @return {?} + */ + function (gDate) { + /** @type {?} */ + var gYear = gDate.getFullYear(); + /** @type {?} */ + var gMonth = gDate.getMonth(); + /** @type {?} */ + var gDay = gDate.getDate(); + /** @type {?} */ + var julianDay = GREGORIAN_EPOCH - 1 + 365 * (gYear - 1) + Math.floor((gYear - 1) / 4) + + -Math.floor((gYear - 1) / 100) + Math.floor((gYear - 1) / 400) + + Math.floor((367 * (gMonth + 1) - 362) / 12 + (gMonth + 1 <= 2 ? 0 : isGregorianLeapYear(gDate) ? -1 : -2) + gDay); + julianDay = Math.floor(julianDay) + 0.5; + /** @type {?} */ + var days = julianDay - ISLAMIC_EPOCH; + /** @type {?} */ + var hYear = Math.floor((30 * days + 10646) / 10631.0); + /** @type {?} */ + var hMonth = Math.ceil((days - 29 - getIslamicYearStart(hYear)) / 29.5); + hMonth = Math.min(hMonth, 11); + /** @type {?} */ + var hDay = Math.ceil(days - getIslamicMonthStart(hYear, hMonth)) + 1; + return new NgbDate(hYear, hMonth + 1, hDay); + }; + /** + * Returns the equivalent JS date value for a give input islamic(civil) date. + * `hDate` is an islamic(civil) date to be converted to Gregorian. + */ + /** + * Returns the equivalent JS date value for a give input islamic(civil) date. + * `hDate` is an islamic(civil) date to be converted to Gregorian. + * @param {?} hDate + * @return {?} + */ + NgbCalendarIslamicCivil.prototype.toGregorian = /** + * Returns the equivalent JS date value for a give input islamic(civil) date. + * `hDate` is an islamic(civil) date to be converted to Gregorian. + * @param {?} hDate + * @return {?} + */ + function (hDate) { + /** @type {?} */ + var hYear = hDate.year; + /** @type {?} */ + var hMonth = hDate.month - 1; + /** @type {?} */ + var hDay = hDate.day; + /** @type {?} */ + var julianDay = hDay + Math.ceil(29.5 * hMonth) + (hYear - 1) * 354 + Math.floor((3 + 11 * hYear) / 30) + ISLAMIC_EPOCH - 1; + /** @type {?} */ + var wjd = Math.floor(julianDay - 0.5) + 0.5; + /** @type {?} */ + var depoch = wjd - GREGORIAN_EPOCH; + /** @type {?} */ + var quadricent = Math.floor(depoch / 146097); + /** @type {?} */ + var dqc = mod(depoch, 146097); + /** @type {?} */ + var cent = Math.floor(dqc / 36524); + /** @type {?} */ + var dcent = mod(dqc, 36524); + /** @type {?} */ + var quad = Math.floor(dcent / 1461); + /** @type {?} */ + var dquad = mod(dcent, 1461); + /** @type {?} */ + var yindex = Math.floor(dquad / 365); + /** @type {?} */ + var year = quadricent * 400 + cent * 100 + quad * 4 + yindex; + if (!(cent === 4 || yindex === 4)) { + year++; + } + /** @type {?} */ + var gYearStart = GREGORIAN_EPOCH + 365 * (year - 1) + Math.floor((year - 1) / 4) - Math.floor((year - 1) / 100) + + Math.floor((year - 1) / 400); + /** @type {?} */ + var yearday = wjd - gYearStart; + /** @type {?} */ + var tjd = GREGORIAN_EPOCH - 1 + 365 * (year - 1) + Math.floor((year - 1) / 4) - Math.floor((year - 1) / 100) + + Math.floor((year - 1) / 400) + Math.floor(739 / 12 + (isGregorianLeapYear(new Date(year, 3, 1)) ? -1 : -2) + 1); + /** @type {?} */ + var leapadj = wjd < tjd ? 0 : isGregorianLeapYear(new Date(year, 3, 1)) ? 1 : 2; + /** @type {?} */ + var month = Math.floor(((yearday + leapadj) * 12 + 373) / 367); + /** @type {?} */ + var tjd2 = GREGORIAN_EPOCH - 1 + 365 * (year - 1) + Math.floor((year - 1) / 4) - Math.floor((year - 1) / 100) + + Math.floor((year - 1) / 400) + + Math.floor((367 * month - 362) / 12 + (month <= 2 ? 0 : isGregorianLeapYear(new Date(year, month - 1, 1)) ? -1 : -2) + + 1); + /** @type {?} */ + var day = wjd - tjd2 + 1; + return new Date(year, month - 1, day); + }; + /** + * Returns the number of days in a specific Hijri month. + * `month` is 1 for Muharram, 2 for Safar, etc. + * `year` is any Hijri year. + */ + /** + * Returns the number of days in a specific Hijri month. + * `month` is 1 for Muharram, 2 for Safar, etc. + * `year` is any Hijri year. + * @param {?} month + * @param {?} year + * @return {?} + */ + NgbCalendarIslamicCivil.prototype.getDaysPerMonth = /** + * Returns the number of days in a specific Hijri month. + * `month` is 1 for Muharram, 2 for Safar, etc. + * `year` is any Hijri year. + * @param {?} month + * @param {?} year + * @return {?} + */ + function (month, year) { + year = year + Math.floor(month / 13); + month = ((month - 1) % 12) + 1; + /** @type {?} */ + var length = 29 + month % 2; + if (month === 12 && isIslamicLeapYear(year)) { + length++; + } + return length; + }; + NgbCalendarIslamicCivil.decorators = [ + { type: core.Injectable } + ]; + return NgbCalendarIslamicCivil; + }(NgbCalendarHijri)); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** + * Umalqura calendar is one type of Hijri calendars used in islamic countries. + * This Calendar is used by Saudi Arabia for administrative purpose. + * Unlike tabular calendars, the algorithm involves astronomical calculation, but it's still deterministic. + * http://cldr.unicode.org/development/development-process/design-proposals/islamic-calendar-types + * @type {?} + */ + var GREGORIAN_FIRST_DATE = new Date(1882, 10, 12); + /** @type {?} */ + var GREGORIAN_LAST_DATE = new Date(2174, 10, 25); + /** @type {?} */ + var HIJRI_BEGIN = 1300; + /** @type {?} */ + var HIJRI_END = 1600; + /** @type {?} */ + var ONE_DAY = 1000 * 60 * 60 * 24; + /** @type {?} */ + var MONTH_LENGTH = [ + // 1300-1304 + '101010101010', '110101010100', '111011001001', '011011010100', '011011101010', + // 1305-1309 + '001101101100', '101010101101', '010101010101', '011010101001', '011110010010', + // 1310-1314 + '101110101001', '010111010100', '101011011010', '010101011100', '110100101101', + // 1315-1319 + '011010010101', '011101001010', '101101010100', '101101101010', '010110101101', + // 1320-1324 + '010010101110', '101001001111', '010100010111', '011010001011', '011010100101', + // 1325-1329 + '101011010101', '001011010110', '100101011011', '010010011101', '101001001101', + // 1330-1334 + '110100100110', '110110010101', '010110101100', '100110110110', '001010111010', + // 1335-1339 + '101001011011', '010100101011', '101010010101', '011011001010', '101011101001', + // 1340-1344 + '001011110100', '100101110110', '001010110110', '100101010110', '101011001010', + // 1345-1349 + '101110100100', '101111010010', '010111011001', '001011011100', '100101101101', + // 1350-1354 + '010101001101', '101010100101', '101101010010', '101110100101', '010110110100', + // 1355-1359 + '100110110110', '010101010111', '001010010111', '010101001011', '011010100011', + // 1360-1364 + '011101010010', '101101100101', '010101101010', '101010101011', '010100101011', + // 1365-1369 + '110010010101', '110101001010', '110110100101', '010111001010', '101011010110', + // 1370-1374 + '100101010111', '010010101011', '100101001011', '101010100101', '101101010010', + // 1375-1379 + '101101101010', '010101110101', '001001110110', '100010110111', '010001011011', + // 1380-1384 + '010101010101', '010110101001', '010110110100', '100111011010', '010011011101', + // 1385-1389 + '001001101110', '100100110110', '101010101010', '110101010100', '110110110010', + // 1390-1394 + '010111010101', '001011011010', '100101011011', '010010101011', '101001010101', + // 1395-1399 + '101101001001', '101101100100', '101101110001', '010110110100', '101010110101', + // 1400-1404 + '101001010101', '110100100101', '111010010010', '111011001001', '011011010100', + // 1405-1409 + '101011101001', '100101101011', '010010101011', '101010010011', '110101001001', + // 1410-1414 + '110110100100', '110110110010', '101010111001', '010010111010', '101001011011', + // 1415-1419 + '010100101011', '101010010101', '101100101010', '101101010101', '010101011100', + // 1420-1424 + '010010111101', '001000111101', '100100011101', '101010010101', '101101001010', + // 1425-1429 + '101101011010', '010101101101', '001010110110', '100100111011', '010010011011', + // 1430-1434 + '011001010101', '011010101001', '011101010100', '101101101010', '010101101100', + // 1435-1439 + '101010101101', '010101010101', '101100101001', '101110010010', '101110101001', + // 1440-1444 + '010111010100', '101011011010', '010101011010', '101010101011', '010110010101', + // 1445-1449 + '011101001001', '011101100100', '101110101010', '010110110101', '001010110110', + // 1450-1454 + '101001010110', '111001001101', '101100100101', '101101010010', '101101101010', + // 1455-1459 + '010110101101', '001010101110', '100100101111', '010010010111', '011001001011', + // 1460-1464 + '011010100101', '011010101100', '101011010110', '010101011101', '010010011101', + // 1465-1469 + '101001001101', '110100010110', '110110010101', '010110101010', '010110110101', + // 1470-1474 + '001011011010', '100101011011', '010010101101', '010110010101', '011011001010', + // 1475-1479 + '011011100100', '101011101010', '010011110101', '001010110110', '100101010110', + // 1480-1484 + '101010101010', '101101010100', '101111010010', '010111011001', '001011101010', + // 1485-1489 + '100101101101', '010010101101', '101010010101', '101101001010', '101110100101', + // 1490-1494 + '010110110010', '100110110101', '010011010110', '101010010111', '010101000111', + // 1495-1499 + '011010010011', '011101001001', '101101010101', '010101101010', '101001101011', + // 1500-1504 + '010100101011', '101010001011', '110101000110', '110110100011', '010111001010', + // 1505-1509 + '101011010110', '010011011011', '001001101011', '100101001011', '101010100101', + // 1510-1514 + '101101010010', '101101101001', '010101110101', '000101110110', '100010110111', + // 1515-1519 + '001001011011', '010100101011', '010101100101', '010110110100', '100111011010', + // 1520-1524 + '010011101101', '000101101101', '100010110110', '101010100110', '110101010010', + // 1525-1529 + '110110101001', '010111010100', '101011011010', '100101011011', '010010101011', + // 1530-1534 + '011001010011', '011100101001', '011101100010', '101110101001', '010110110010', + // 1535-1539 + '101010110101', '010101010101', '101100100101', '110110010010', '111011001001', + // 1540-1544 + '011011010010', '101011101001', '010101101011', '010010101011', '101001010101', + // 1545-1549 + '110100101001', '110101010100', '110110101010', '100110110101', '010010111010', + // 1550-1554 + '101000111011', '010010011011', '101001001101', '101010101010', '101011010101', + // 1555-1559 + '001011011010', '100101011101', '010001011110', '101000101110', '110010011010', + // 1560-1564 + '110101010101', '011010110010', '011010111001', '010010111010', '101001011101', + // 1565-1569 + '010100101101', '101010010101', '101101010010', '101110101000', '101110110100', + // 1570-1574 + '010110111001', '001011011010', '100101011010', '101101001010', '110110100100', + // 1575-1579 + '111011010001', '011011101000', '101101101010', '010101101101', '010100110101', + // 1580-1584 + '011010010101', '110101001010', '110110101000', '110111010100', '011011011010', + // 1585-1589 + '010101011011', '001010011101', '011000101011', '101100010101', '101101001010', + // 1590-1594 + '101110010101', '010110101010', '101010101110', '100100101110', '110010001111', + // 1595-1599 + '010100100111', '011010010101', '011010101010', '101011010110', '010101011101', + // 1600 + '001010011101' + ]; + /** + * @param {?} date1 + * @param {?} date2 + * @return {?} + */ + function getDaysDiff(date1, date2) { + // Ignores the time part in date1 and date2: + /** @type {?} */ + var time1 = Date.UTC(date1.getFullYear(), date1.getMonth(), date1.getDate()); + /** @type {?} */ + var time2 = Date.UTC(date2.getFullYear(), date2.getMonth(), date2.getDate()); + /** @type {?} */ + var diff = Math.abs(time1 - time2); + return Math.round(diff / ONE_DAY); + } + var NgbCalendarIslamicUmalqura = /** @class */ (function (_super) { + __extends(NgbCalendarIslamicUmalqura, _super); + function NgbCalendarIslamicUmalqura() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * Returns the equivalent islamic(Umalqura) date value for a give input Gregorian date. + * `gdate` is s JS Date to be converted to Hijri. + */ + /** + * Returns the equivalent islamic(Umalqura) date value for a give input Gregorian date. + * `gdate` is s JS Date to be converted to Hijri. + * @param {?} gDate + * @return {?} + */ + NgbCalendarIslamicUmalqura.prototype.fromGregorian = /** + * Returns the equivalent islamic(Umalqura) date value for a give input Gregorian date. + * `gdate` is s JS Date to be converted to Hijri. + * @param {?} gDate + * @return {?} + */ + function (gDate) { + /** @type {?} */ + var hDay = 1; + /** @type {?} */ + var hMonth = 0; + /** @type {?} */ + var hYear = 1300; + /** @type {?} */ + var daysDiff = getDaysDiff(gDate, GREGORIAN_FIRST_DATE); + if (gDate.getTime() - GREGORIAN_FIRST_DATE.getTime() >= 0 && gDate.getTime() - GREGORIAN_LAST_DATE.getTime() <= 0) { + /** @type {?} */ + var year = 1300; + for (var i = 0; i < MONTH_LENGTH.length; i++, year++) { + for (var j = 0; j < 12; j++) { + /** @type {?} */ + var numOfDays = +MONTH_LENGTH[i][j] + 29; + if (daysDiff <= numOfDays) { + hDay = daysDiff + 1; + if (hDay > numOfDays) { + hDay = 1; + j++; + } + if (j > 11) { + j = 0; + year++; + } + hMonth = j; + hYear = year; + return new NgbDate(hYear, hMonth + 1, hDay); + } + daysDiff = daysDiff - numOfDays; + } + } + } + else { + return _super.prototype.fromGregorian.call(this, gDate); + } + }; + /** + * Converts the current Hijri date to Gregorian. + */ + /** + * Converts the current Hijri date to Gregorian. + * @param {?} hDate + * @return {?} + */ + NgbCalendarIslamicUmalqura.prototype.toGregorian = /** + * Converts the current Hijri date to Gregorian. + * @param {?} hDate + * @return {?} + */ + function (hDate) { + /** @type {?} */ + var hYear = hDate.year; + /** @type {?} */ + var hMonth = hDate.month - 1; + /** @type {?} */ + var hDay = hDate.day; + /** @type {?} */ + var gDate = new Date(GREGORIAN_FIRST_DATE); + /** @type {?} */ + var dayDiff = hDay - 1; + if (hYear >= HIJRI_BEGIN && hYear <= HIJRI_END) { + for (var y = 0; y < hYear - HIJRI_BEGIN; y++) { + for (var m = 0; m < 12; m++) { + dayDiff += +MONTH_LENGTH[y][m] + 29; + } + } + for (var m = 0; m < hMonth; m++) { + dayDiff += +MONTH_LENGTH[hYear - HIJRI_BEGIN][m] + 29; + } + gDate.setDate(GREGORIAN_FIRST_DATE.getDate() + dayDiff); + } + else { + gDate = _super.prototype.toGregorian.call(this, hDate); + } + return gDate; + }; + /** + * Returns the number of days in a specific Hijri hMonth. + * `hMonth` is 1 for Muharram, 2 for Safar, etc. + * `hYear` is any Hijri hYear. + */ + /** + * Returns the number of days in a specific Hijri hMonth. + * `hMonth` is 1 for Muharram, 2 for Safar, etc. + * `hYear` is any Hijri hYear. + * @param {?} hMonth + * @param {?} hYear + * @return {?} + */ + NgbCalendarIslamicUmalqura.prototype.getDaysPerMonth = /** + * Returns the number of days in a specific Hijri hMonth. + * `hMonth` is 1 for Muharram, 2 for Safar, etc. + * `hYear` is any Hijri hYear. + * @param {?} hMonth + * @param {?} hYear + * @return {?} + */ + function (hMonth, hYear) { + if (hYear >= HIJRI_BEGIN && hYear <= HIJRI_END) { + /** @type {?} */ + var pos = hYear - HIJRI_BEGIN; + return +MONTH_LENGTH[pos][hMonth - 1] + 29; + } + return _super.prototype.getDaysPerMonth.call(this, hMonth, hYear); + }; + NgbCalendarIslamicUmalqura.decorators = [ + { type: core.Injectable } + ]; + return NgbCalendarIslamicUmalqura; + }(NgbCalendarIslamicCivil)); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** + * Returns the equivalent JS date value for a give input Jalali date. + * `jalaliDate` is an Jalali date to be converted to Gregorian. + * @param {?} jalaliDate + * @return {?} + */ + function toGregorian(jalaliDate) { + /** @type {?} */ + var jdn = jalaliToJulian(jalaliDate.year, jalaliDate.month, jalaliDate.day); + /** @type {?} */ + var date = julianToGregorian(jdn); + date.setHours(6, 30, 3, 200); + return date; + } + /** + * Returns the equivalent jalali date value for a give input Gregorian date. + * `gdate` is a JS Date to be converted to jalali. + * utc to local + * @param {?} gdate + * @return {?} + */ + function fromGregorian(gdate) { + /** @type {?} */ + var g2d = gregorianToJulian(gdate.getFullYear(), gdate.getMonth() + 1, gdate.getDate()); + return julianToJalali(g2d); + } + /** + * @param {?} date + * @param {?} yearValue + * @return {?} + */ + function setJalaliYear(date, yearValue) { + date.year = +yearValue; + return date; + } + /** + * @param {?} date + * @param {?} month + * @return {?} + */ + function setJalaliMonth(date, month) { + month = +month; + date.year = date.year + Math.floor((month - 1) / 12); + date.month = Math.floor(((month - 1) % 12 + 12) % 12) + 1; + return date; + } + /** + * @param {?} date + * @param {?} day + * @return {?} + */ + function setJalaliDay(date, day) { + /** @type {?} */ + var mDays = getDaysPerMonth(date.month, date.year); + if (day <= 0) { + while (day <= 0) { + date = setJalaliMonth(date, date.month - 1); + mDays = getDaysPerMonth(date.month, date.year); + day += mDays; + } + } + else if (day > mDays) { + while (day > mDays) { + day -= mDays; + date = setJalaliMonth(date, date.month + 1); + mDays = getDaysPerMonth(date.month, date.year); + } + } + date.day = day; + return date; + } + /** + * @param {?} a + * @param {?} b + * @return {?} + */ + function mod$1(a, b) { + return a - b * Math.floor(a / b); + } + /** + * @param {?} a + * @param {?} b + * @return {?} + */ + function div(a, b) { + return Math.trunc(a / b); + } + /* + This function determines if the Jalali (Persian) year is + leap (366-day long) or is the common year (365 days), and + finds the day in March (Gregorian calendar) of the first + day of the Jalali year (jalaliYear). + @param jalaliYear Jalali calendar year (-61 to 3177) + @return + leap: number of years since the last leap year (0 to 4) + gYear: Gregorian year of the beginning of Jalali year + march: the March day of Farvardin the 1st (1st day of jalaliYear) + @see: http://www.astro.uni.torun.pl/~kb/Papers/EMP/PersianC-EMP.htm + @see: http://www.fourmilab.ch/documents/calendar/ + */ + /** + * @param {?} jalaliYear + * @return {?} + */ + function jalCal(jalaliYear) { + // Jalali years starting the 33-year rule. + /** @type {?} */ + var breaks = [-61, 9, 38, 199, 426, 686, 756, 818, 1111, 1181, 1210, 1635, 2060, 2097, 2192, 2262, 2324, 2394, 2456, 3178]; + /** @type {?} */ + var breaksLength = breaks.length; + /** @type {?} */ + var gYear = jalaliYear + 621; + /** @type {?} */ + var leapJ = -14; + /** @type {?} */ + var jp = breaks[0]; + if (jalaliYear < jp || jalaliYear >= breaks[breaksLength - 1]) { + throw new Error('Invalid Jalali year ' + jalaliYear); + } + // Find the limiting years for the Jalali year jalaliYear. + /** @type {?} */ + var jump; + for (var i = 1; i < breaksLength; i += 1) { + /** @type {?} */ + var jm = breaks[i]; + jump = jm - jp; + if (jalaliYear < jm) { + break; + } + leapJ = leapJ + div(jump, 33) * 8 + div(mod$1(jump, 33), 4); + jp = jm; + } + /** @type {?} */ + var n = jalaliYear - jp; + // Find the number of leap years from AD 621 to the beginning + // of the current Jalali year in the Persian calendar. + leapJ = leapJ + div(n, 33) * 8 + div(mod$1(n, 33) + 3, 4); + if (mod$1(jump, 33) === 4 && jump - n === 4) { + leapJ += 1; + } + // And the same in the Gregorian calendar (until the year gYear). + /** @type {?} */ + var leapG = div(gYear, 4) - div((div(gYear, 100) + 1) * 3, 4) - 150; + // Determine the Gregorian date of Farvardin the 1st. + /** @type {?} */ + var march = 20 + leapJ - leapG; + // Find how many years have passed since the last leap year. + if (jump - n < 6) { + n = n - jump + div(jump + 4, 33) * 33; + } + /** @type {?} */ + var leap = mod$1(mod$1(n + 1, 33) - 1, 4); + if (leap === -1) { + leap = 4; + } + return { leap: leap, gy: gYear, march: march }; + } + /* + Calculates Gregorian and Julian calendar dates from the Julian Day number + (jdn) for the period since jdn=-34839655 (i.e. the year -100100 of both + calendars) to some millions years ahead of the present. + @param jdn Julian Day number + @return + gYear: Calendar year (years BC numbered 0, -1, -2, ...) + gMonth: Calendar month (1 to 12) + gDay: Calendar day of the month M (1 to 28/29/30/31) + */ + /** + * @param {?} julianDayNumber + * @return {?} + */ + function julianToGregorian(julianDayNumber) { + /** @type {?} */ + var j = 4 * julianDayNumber + 139361631; + j = j + div(div(4 * julianDayNumber + 183187720, 146097) * 3, 4) * 4 - 3908; + /** @type {?} */ + var i = div(mod$1(j, 1461), 4) * 5 + 308; + /** @type {?} */ + var gDay = div(mod$1(i, 153), 5) + 1; + /** @type {?} */ + var gMonth = mod$1(div(i, 153), 12) + 1; + /** @type {?} */ + var gYear = div(j, 1461) - 100100 + div(8 - gMonth, 6); + return new Date(gYear, gMonth - 1, gDay); + } + /* + Converts a date of the Jalali calendar to the Julian Day number. + @param jy Jalali year (1 to 3100) + @param jm Jalali month (1 to 12) + @param jd Jalali day (1 to 29/31) + @return Julian Day number + */ + /** + * @param {?} gy + * @param {?} gm + * @param {?} gd + * @return {?} + */ + function gregorianToJulian(gy, gm, gd) { + /** @type {?} */ + var d = div((gy + div(gm - 8, 6) + 100100) * 1461, 4) + div(153 * mod$1(gm + 9, 12) + 2, 5) + gd - 34840408; + d = d - div(div(gy + 100100 + div(gm - 8, 6), 100) * 3, 4) + 752; + return d; + } + /* + Converts the Julian Day number to a date in the Jalali calendar. + @param julianDayNumber Julian Day number + @return + jalaliYear: Jalali year (1 to 3100) + jalaliMonth: Jalali month (1 to 12) + jalaliDay: Jalali day (1 to 29/31) + */ + /** + * @param {?} julianDayNumber + * @return {?} + */ + function julianToJalali(julianDayNumber) { + /** @type {?} */ + var gy = julianToGregorian(julianDayNumber).getFullYear() // Calculate Gregorian year (gy). + ; + /** @type {?} */ + var jalaliYear = gy - 621; + /** @type {?} */ + var r = jalCal(jalaliYear); + /** @type {?} */ + var gregorianDay = gregorianToJulian(gy, 3, r.march); + /** @type {?} */ + var jalaliDay; + /** @type {?} */ + var jalaliMonth; + /** @type {?} */ + var numberOfDays; + // Find number of days that passed since 1 Farvardin. + numberOfDays = julianDayNumber - gregorianDay; + if (numberOfDays >= 0) { + if (numberOfDays <= 185) { + // The first 6 months. + jalaliMonth = 1 + div(numberOfDays, 31); + jalaliDay = mod$1(numberOfDays, 31) + 1; + return new NgbDate(jalaliYear, jalaliMonth, jalaliDay); + } + else { + // The remaining months. + numberOfDays -= 186; + } + } + else { + // Previous Jalali year. + jalaliYear -= 1; + numberOfDays += 179; + if (r.leap === 1) { + numberOfDays += 1; + } + } + jalaliMonth = 7 + div(numberOfDays, 30); + jalaliDay = mod$1(numberOfDays, 30) + 1; + return new NgbDate(jalaliYear, jalaliMonth, jalaliDay); + } + /* + Converts a date of the Jalali calendar to the Julian Day number. + @param jYear Jalali year (1 to 3100) + @param jMonth Jalali month (1 to 12) + @param jDay Jalali day (1 to 29/31) + @return Julian Day number + */ + /** + * @param {?} jYear + * @param {?} jMonth + * @param {?} jDay + * @return {?} + */ + function jalaliToJulian(jYear, jMonth, jDay) { + /** @type {?} */ + var r = jalCal(jYear); + return gregorianToJulian(r.gy, 3, r.march) + (jMonth - 1) * 31 - div(jMonth, 7) * (jMonth - 7) + jDay - 1; + } + /** + * Returns the number of days in a specific jalali month. + * @param {?} month + * @param {?} year + * @return {?} + */ + function getDaysPerMonth(month, year) { + if (month <= 6) { + return 31; + } + if (month <= 11) { + return 30; + } + if (jalCal(year).leap === 0) { + return 30; + } + return 29; + } + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + var NgbCalendarPersian = /** @class */ (function (_super) { + __extends(NgbCalendarPersian, _super); + function NgbCalendarPersian() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * @return {?} + */ + NgbCalendarPersian.prototype.getDaysPerWeek = /** + * @return {?} + */ + function () { return 7; }; + /** + * @return {?} + */ + NgbCalendarPersian.prototype.getMonths = /** + * @return {?} + */ + function () { return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; }; + /** + * @return {?} + */ + NgbCalendarPersian.prototype.getWeeksPerMonth = /** + * @return {?} + */ + function () { return 6; }; + /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + NgbCalendarPersian.prototype.getNext = /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + function (date, period, number) { + if (period === void 0) { period = 'd'; } + if (number === void 0) { number = 1; } + date = new NgbDate(date.year, date.month, date.day); + switch (period) { + case 'y': + date = setJalaliYear(date, date.year + number); + date.month = 1; + date.day = 1; + return date; + case 'm': + date = setJalaliMonth(date, date.month + number); + date.day = 1; + return date; + case 'd': + return setJalaliDay(date, date.day + number); + default: + return date; + } + }; + /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + NgbCalendarPersian.prototype.getPrev = /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + function (date, period, number) { + if (period === void 0) { period = 'd'; } + if (number === void 0) { number = 1; } + return this.getNext(date, period, -number); + }; + /** + * @param {?} date + * @return {?} + */ + NgbCalendarPersian.prototype.getWeekday = /** + * @param {?} date + * @return {?} + */ + function (date) { + /** @type {?} */ + var day = toGregorian(date).getDay(); + // in JS Date Sun=0, in ISO 8601 Sun=7 + return day === 0 ? 7 : day; + }; + /** + * @param {?} week + * @param {?} firstDayOfWeek + * @return {?} + */ + NgbCalendarPersian.prototype.getWeekNumber = /** + * @param {?} week + * @param {?} firstDayOfWeek + * @return {?} + */ + function (week, firstDayOfWeek) { + // in JS Date Sun=0, in ISO 8601 Sun=7 + if (firstDayOfWeek === 7) { + firstDayOfWeek = 0; + } + /** @type {?} */ + var thursdayIndex = (4 + 7 - firstDayOfWeek) % 7; + /** @type {?} */ + var date = week[thursdayIndex]; + /** @type {?} */ + var jsDate = toGregorian(date); + jsDate.setDate(jsDate.getDate() + 4 - (jsDate.getDay() || 7)); // Thursday + // Thursday + /** @type {?} */ + var time = jsDate.getTime(); + /** @type {?} */ + var startDate = toGregorian(new NgbDate(date.year, 1, 1)); + return Math.floor(Math.round((time - startDate.getTime()) / 86400000) / 7) + 1; + }; + /** + * @return {?} + */ + NgbCalendarPersian.prototype.getToday = /** + * @return {?} + */ + function () { return fromGregorian(new Date()); }; + /** + * @param {?} date + * @return {?} + */ + NgbCalendarPersian.prototype.isValid = /** + * @param {?} date + * @return {?} + */ + function (date) { + return date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day) && + !isNaN(toGregorian(date).getTime()); + }; + NgbCalendarPersian.decorators = [ + { type: core.Injectable } + ]; + return NgbCalendarPersian; + }(NgbCalendar)); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** @type {?} */ + var PARTS_PER_HOUR = 1080; + /** @type {?} */ + var PARTS_PER_DAY = 24 * PARTS_PER_HOUR; + /** @type {?} */ + var PARTS_FRACTIONAL_MONTH = 12 * PARTS_PER_HOUR + 793; + /** @type {?} */ + var PARTS_PER_MONTH = 29 * PARTS_PER_DAY + PARTS_FRACTIONAL_MONTH; + /** @type {?} */ + var BAHARAD = 11 * PARTS_PER_HOUR + 204; + /** @type {?} */ + var HEBREW_DAY_ON_JAN_1_1970 = 2092591; + /** @type {?} */ + var GREGORIAN_EPOCH$1 = 1721425.5; + /** + * @param {?} year + * @return {?} + */ + function isGregorianLeapYear$1(year) { + return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0; + } + /** + * @param {?} year + * @return {?} + */ + function numberOfFirstDayInYear(year) { + /** @type {?} */ + var monthsBeforeYear = Math.floor((235 * year - 234) / 19); + /** @type {?} */ + var fractionalMonthsBeforeYear = monthsBeforeYear * PARTS_FRACTIONAL_MONTH + BAHARAD; + /** @type {?} */ + var dayNumber = monthsBeforeYear * 29 + Math.floor(fractionalMonthsBeforeYear / PARTS_PER_DAY); + /** @type {?} */ + var timeOfDay = fractionalMonthsBeforeYear % PARTS_PER_DAY; + /** @type {?} */ + var dayOfWeek = dayNumber % 7; + if (dayOfWeek === 2 || dayOfWeek === 4 || dayOfWeek === 6) { + dayNumber++; + dayOfWeek = dayNumber % 7; + } + if (dayOfWeek === 1 && timeOfDay > 15 * PARTS_PER_HOUR + 204 && !isHebrewLeapYear(year)) { + dayNumber += 2; + } + else if (dayOfWeek === 0 && timeOfDay > 21 * PARTS_PER_HOUR + 589 && isHebrewLeapYear(year - 1)) { + dayNumber++; + } + return dayNumber; + } + /** + * @param {?} month + * @param {?} year + * @return {?} + */ + function getDaysInGregorianMonth(month, year) { + /** @type {?} */ + var days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + if (isGregorianLeapYear$1(year)) { + days[1]++; + } + return days[month - 1]; + } + /** + * @param {?} year + * @return {?} + */ + function getHebrewMonths(year) { + return isHebrewLeapYear(year) ? 13 : 12; + } + /** + * Returns the number of days in a specific Hebrew year. + * `year` is any Hebrew year. + * @param {?} year + * @return {?} + */ + function getDaysInHebrewYear(year) { + return numberOfFirstDayInYear(year + 1) - numberOfFirstDayInYear(year); + } + /** + * @param {?} year + * @return {?} + */ + function isHebrewLeapYear(year) { + /** @type {?} */ + var b = (year * 12 + 17) % 19; + return b >= ((b < 0) ? -7 : 12); + } + /** + * Returns the number of days in a specific Hebrew month. + * `month` is 1 for Nisan, 2 for Iyar etc. Note: Hebrew leap year contains 13 months. + * `year` is any Hebrew year. + * @param {?} month + * @param {?} year + * @return {?} + */ + function getDaysInHebrewMonth(month, year) { + /** @type {?} */ + var yearLength = numberOfFirstDayInYear(year + 1) - numberOfFirstDayInYear(year); + /** @type {?} */ + var yearType = (yearLength <= 380 ? yearLength : (yearLength - 30)) - 353; + /** @type {?} */ + var leapYear = isHebrewLeapYear(year); + /** @type {?} */ + var daysInMonth = leapYear ? [30, 29, 29, 29, 30, 30, 29, 30, 29, 30, 29, 30, 29] : + [30, 29, 29, 29, 30, 29, 30, 29, 30, 29, 30, 29]; + if (yearType > 0) { + daysInMonth[2]++; // Kislev gets an extra day in normal or complete years. + } + if (yearType > 1) { + daysInMonth[1]++; // Heshvan gets an extra day in complete years only. + } + return daysInMonth[month - 1]; + } + /** + * @param {?} date + * @return {?} + */ + function getDayNumberInHebrewYear(date) { + /** @type {?} */ + var numberOfDay = 0; + for (var i = 1; i < date.month; i++) { + numberOfDay += getDaysInHebrewMonth(i, date.year); + } + return numberOfDay + date.day; + } + /** + * @param {?} date + * @param {?} val + * @return {?} + */ + function setHebrewMonth(date, val) { + /** @type {?} */ + var after = val >= 0; + if (!after) { + val = -val; + } + while (val > 0) { + if (after) { + if (val > getHebrewMonths(date.year) - date.month) { + val -= getHebrewMonths(date.year) - date.month + 1; + date.year++; + date.month = 1; + } + else { + date.month += val; + val = 0; + } + } + else { + if (val >= date.month) { + date.year--; + val -= date.month; + date.month = getHebrewMonths(date.year); + } + else { + date.month -= val; + val = 0; + } + } + } + return date; + } + /** + * @param {?} date + * @param {?} val + * @return {?} + */ + function setHebrewDay(date, val) { + /** @type {?} */ + var after = val >= 0; + if (!after) { + val = -val; + } + while (val > 0) { + if (after) { + if (val > getDaysInHebrewYear(date.year) - getDayNumberInHebrewYear(date)) { + val -= getDaysInHebrewYear(date.year) - getDayNumberInHebrewYear(date) + 1; + date.year++; + date.month = 1; + date.day = 1; + } + else if (val > getDaysInHebrewMonth(date.month, date.year) - date.day) { + val -= getDaysInHebrewMonth(date.month, date.year) - date.day + 1; + date.month++; + date.day = 1; + } + else { + date.day += val; + val = 0; + } + } + else { + if (val >= date.day) { + val -= date.day; + date.month--; + if (date.month === 0) { + date.year--; + date.month = getHebrewMonths(date.year); + } + date.day = getDaysInHebrewMonth(date.month, date.year); + } + else { + date.day -= val; + val = 0; + } + } + } + return date; + } + /** + * Returns the equivalent Hebrew date value for a give input Gregorian date. + * `gdate` is a JS Date to be converted to Hebrew date. + * @param {?} gdate + * @return {?} + */ + function fromGregorian$1(gdate) { + /** @type {?} */ + var date = new Date(gdate); + /** @type {?} */ + var gYear = date.getFullYear(); + /** @type {?} */ + var gMonth = date.getMonth(); + /** @type {?} */ + var gDay = date.getDate(); + /** @type {?} */ + var julianDay = GREGORIAN_EPOCH$1 - 1 + 365 * (gYear - 1) + Math.floor((gYear - 1) / 4) - + Math.floor((gYear - 1) / 100) + Math.floor((gYear - 1) / 400) + + Math.floor((367 * (gMonth + 1) - 362) / 12 + (gMonth + 1 <= 2 ? 0 : isGregorianLeapYear$1(gYear) ? -1 : -2) + gDay); + julianDay = Math.floor(julianDay + 0.5); + /** @type {?} */ + var daysSinceHebEpoch = julianDay - 347997; + /** @type {?} */ + var monthsSinceHebEpoch = Math.floor(daysSinceHebEpoch * PARTS_PER_DAY / PARTS_PER_MONTH); + /** @type {?} */ + var hYear = Math.floor((monthsSinceHebEpoch * 19 + 234) / 235) + 1; + /** @type {?} */ + var firstDayOfThisYear = numberOfFirstDayInYear(hYear); + /** @type {?} */ + var dayOfYear = daysSinceHebEpoch - firstDayOfThisYear; + while (dayOfYear < 1) { + hYear--; + firstDayOfThisYear = numberOfFirstDayInYear(hYear); + dayOfYear = daysSinceHebEpoch - firstDayOfThisYear; + } + /** @type {?} */ + var hMonth = 1; + /** @type {?} */ + var hDay = dayOfYear; + while (hDay > getDaysInHebrewMonth(hMonth, hYear)) { + hDay -= getDaysInHebrewMonth(hMonth, hYear); + hMonth++; + } + return new NgbDate(hYear, hMonth, hDay); + } + /** + * Returns the equivalent JS date value for a given Hebrew date. + * `hebrewDate` is an Hebrew date to be converted to Gregorian. + * @param {?} hebrewDate + * @return {?} + */ + function toGregorian$1(hebrewDate) { + /** @type {?} */ + var hYear = hebrewDate.year; + /** @type {?} */ + var hMonth = hebrewDate.month; + /** @type {?} */ + var hDay = hebrewDate.day; + /** @type {?} */ + var days = numberOfFirstDayInYear(hYear); + for (var i = 1; i < hMonth; i++) { + days += getDaysInHebrewMonth(i, hYear); + } + days += hDay; + /** @type {?} */ + var diffDays = days - HEBREW_DAY_ON_JAN_1_1970; + /** @type {?} */ + var after = diffDays >= 0; + if (!after) { + diffDays = -diffDays; + } + /** @type {?} */ + var gYear = 1970; + /** @type {?} */ + var gMonth = 1; + /** @type {?} */ + var gDay = 1; + while (diffDays > 0) { + if (after) { + if (diffDays >= (isGregorianLeapYear$1(gYear) ? 366 : 365)) { + diffDays -= isGregorianLeapYear$1(gYear) ? 366 : 365; + gYear++; + } + else if (diffDays >= getDaysInGregorianMonth(gMonth, gYear)) { + diffDays -= getDaysInGregorianMonth(gMonth, gYear); + gMonth++; + } + else { + gDay += diffDays; + diffDays = 0; + } + } + else { + if (diffDays >= (isGregorianLeapYear$1(gYear - 1) ? 366 : 365)) { + diffDays -= isGregorianLeapYear$1(gYear - 1) ? 366 : 365; + gYear--; + } + else { + if (gMonth > 1) { + gMonth--; + } + else { + gMonth = 12; + gYear--; + } + if (diffDays >= getDaysInGregorianMonth(gMonth, gYear)) { + diffDays -= getDaysInGregorianMonth(gMonth, gYear); + } + else { + gDay = getDaysInGregorianMonth(gMonth, gYear) - diffDays + 1; + diffDays = 0; + } + } + } + } + return new Date(gYear, gMonth - 1, gDay); + } + /** + * @param {?} numerals + * @return {?} + */ + function hebrewNumerals(numerals) { + if (!numerals) { + return ''; + } + /** @type {?} */ + var hArray0_9 = ['', '\u05d0', '\u05d1', '\u05d2', '\u05d3', '\u05d4', '\u05d5', '\u05d6', '\u05d7', '\u05d8']; + /** @type {?} */ + var hArray10_19 = [ + '\u05d9', '\u05d9\u05d0', '\u05d9\u05d1', '\u05d9\u05d2', '\u05d9\u05d3', '\u05d8\u05d5', '\u05d8\u05d6', + '\u05d9\u05d6', '\u05d9\u05d7', '\u05d9\u05d8' + ]; + /** @type {?} */ + var hArray20_90 = ['', '', '\u05db', '\u05dc', '\u05de', '\u05e0', '\u05e1', '\u05e2', '\u05e4', '\u05e6']; + /** @type {?} */ + var hArray100_900 = [ + '', '\u05e7', '\u05e8', '\u05e9', '\u05ea', '\u05ea\u05e7', '\u05ea\u05e8', '\u05ea\u05e9', '\u05ea\u05ea', + '\u05ea\u05ea\u05e7' + ]; + /** @type {?} */ + var hArray1000_9000 = [ + '', '\u05d0', '\u05d1', '\u05d1\u05d0', '\u05d1\u05d1', '\u05d4', '\u05d4\u05d0', '\u05d4\u05d1', + '\u05d4\u05d1\u05d0', '\u05d4\u05d1\u05d1' + ]; + /** @type {?} */ + var geresh = '\u05f3'; + /** @type {?} */ + var gershaim = '\u05f4'; + /** @type {?} */ + var mem = 0; + /** @type {?} */ + var result = []; + /** @type {?} */ + var step = 0; + while (numerals > 0) { + /** @type {?} */ + var m = numerals % 10; + if (step === 0) { + mem = m; + } + else if (step === 1) { + if (m !== 1) { + result.unshift(hArray20_90[m], hArray0_9[mem]); + } + else { + result.unshift(hArray10_19[mem]); + } + } + else if (step === 2) { + result.unshift(hArray100_900[m]); + } + else { + if (m !== 5) { + result.unshift(hArray1000_9000[m], geresh, ' '); + } + break; + } + numerals = Math.floor(numerals / 10); + if (step === 0 && numerals === 0) { + result.unshift(hArray0_9[m]); + } + step++; + } + result = result.join('').split(''); + if (result.length === 1) { + result.push(geresh); + } + else if (result.length > 1) { + result.splice(result.length - 1, 0, gershaim); + } + return result.join(''); + } + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** + * \@since 3.2.0 + */ + var NgbCalendarHebrew = /** @class */ (function (_super) { + __extends(NgbCalendarHebrew, _super); + function NgbCalendarHebrew() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * @return {?} + */ + NgbCalendarHebrew.prototype.getDaysPerWeek = /** + * @return {?} + */ + function () { return 7; }; + /** + * @param {?=} year + * @return {?} + */ + NgbCalendarHebrew.prototype.getMonths = /** + * @param {?=} year + * @return {?} + */ + function (year) { + if (year && isHebrewLeapYear(year)) { + return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]; + } + else { + return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; + } + }; + /** + * @return {?} + */ + NgbCalendarHebrew.prototype.getWeeksPerMonth = /** + * @return {?} + */ + function () { return 6; }; + /** + * @param {?} date + * @return {?} + */ + NgbCalendarHebrew.prototype.isValid = /** + * @param {?} date + * @return {?} + */ + function (date) { + /** @type {?} */ + var b = date && isNumber(date.year) && isNumber(date.month) && isNumber(date.day); + b = b && date.month > 0 && date.month <= (isHebrewLeapYear(date.year) ? 13 : 12); + b = b && date.day > 0 && date.day <= getDaysInHebrewMonth(date.month, date.year); + return b && !isNaN(toGregorian$1(date).getTime()); + }; + /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + NgbCalendarHebrew.prototype.getNext = /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + function (date, period, number) { + if (period === void 0) { period = 'd'; } + if (number === void 0) { number = 1; } + date = new NgbDate(date.year, date.month, date.day); + switch (period) { + case 'y': + date.year += number; + date.month = 1; + date.day = 1; + return date; + case 'm': + date = setHebrewMonth(date, number); + date.day = 1; + return date; + case 'd': + return setHebrewDay(date, number); + default: + return date; + } + }; + /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + NgbCalendarHebrew.prototype.getPrev = /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + function (date, period, number) { + if (period === void 0) { period = 'd'; } + if (number === void 0) { number = 1; } + return this.getNext(date, period, -number); + }; + /** + * @param {?} date + * @return {?} + */ + NgbCalendarHebrew.prototype.getWeekday = /** + * @param {?} date + * @return {?} + */ + function (date) { + /** @type {?} */ + var day = toGregorian$1(date).getDay(); + // in JS Date Sun=0, in ISO 8601 Sun=7 + return day === 0 ? 7 : day; + }; + /** + * @param {?} week + * @param {?} firstDayOfWeek + * @return {?} + */ + NgbCalendarHebrew.prototype.getWeekNumber = /** + * @param {?} week + * @param {?} firstDayOfWeek + * @return {?} + */ + function (week, firstDayOfWeek) { + /** @type {?} */ + var date = week[week.length - 1]; + return Math.ceil(getDayNumberInHebrewYear(date) / 7); + }; + /** + * @return {?} + */ + NgbCalendarHebrew.prototype.getToday = /** + * @return {?} + */ + function () { return fromGregorian$1(new Date()); }; + /** + * @since 3.4.0 + */ + /** + * \@since 3.4.0 + * @param {?} date + * @return {?} + */ + NgbCalendarHebrew.prototype.toGregorian = /** + * \@since 3.4.0 + * @param {?} date + * @return {?} + */ + function (date) { return fromJSDate(toGregorian$1(date)); }; + /** + * @since 3.4.0 + */ + /** + * \@since 3.4.0 + * @param {?} date + * @return {?} + */ + NgbCalendarHebrew.prototype.fromGregorian = /** + * \@since 3.4.0 + * @param {?} date + * @return {?} + */ + function (date) { return fromGregorian$1(toJSDate(date)); }; + NgbCalendarHebrew.decorators = [ + { type: core.Injectable } + ]; + return NgbCalendarHebrew; + }(NgbCalendar)); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** @type {?} */ + var WEEKDAYS = ['שני', 'שלישי', 'רביעי', 'חמישי', 'שישי', 'שבת', 'ראשון']; + /** @type {?} */ + var MONTHS = ['תשרי', 'חשון', 'כסלו', 'טבת', 'שבט', 'אדר', 'ניסן', 'אייר', 'סיון', 'תמוז', 'אב', 'אלול']; + /** @type {?} */ + var MONTHS_LEAP = ['תשרי', 'חשון', 'כסלו', 'טבת', 'שבט', 'אדר א׳', 'אדר ב׳', 'ניסן', 'אייר', 'סיון', 'תמוז', 'אב', 'אלול']; + /** + * \@since 3.2.0 + */ + var NgbDatepickerI18nHebrew = /** @class */ (function (_super) { + __extends(NgbDatepickerI18nHebrew, _super); + function NgbDatepickerI18nHebrew() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * @param {?} month + * @param {?=} year + * @return {?} + */ + NgbDatepickerI18nHebrew.prototype.getMonthShortName = /** + * @param {?} month + * @param {?=} year + * @return {?} + */ + function (month, year) { return this.getMonthFullName(month, year); }; + /** + * @param {?} month + * @param {?=} year + * @return {?} + */ + NgbDatepickerI18nHebrew.prototype.getMonthFullName = /** + * @param {?} month + * @param {?=} year + * @return {?} + */ + function (month, year) { + return isHebrewLeapYear(year) ? MONTHS_LEAP[month - 1] : MONTHS[month - 1]; + }; + /** + * @param {?} weekday + * @return {?} + */ + NgbDatepickerI18nHebrew.prototype.getWeekdayShortName = /** + * @param {?} weekday + * @return {?} + */ + function (weekday) { return WEEKDAYS[weekday - 1]; }; + /** + * @param {?} date + * @return {?} + */ + NgbDatepickerI18nHebrew.prototype.getDayAriaLabel = /** + * @param {?} date + * @return {?} + */ + function (date) { + return hebrewNumerals(date.day) + " " + this.getMonthFullName(date.month, date.year) + " " + hebrewNumerals(date.year); + }; + /** + * @param {?} date + * @return {?} + */ + NgbDatepickerI18nHebrew.prototype.getDayNumerals = /** + * @param {?} date + * @return {?} + */ + function (date) { return hebrewNumerals(date.day); }; + /** + * @param {?} weekNumber + * @return {?} + */ + NgbDatepickerI18nHebrew.prototype.getWeekNumerals = /** + * @param {?} weekNumber + * @return {?} + */ + function (weekNumber) { return hebrewNumerals(weekNumber); }; + /** + * @param {?} year + * @return {?} + */ + NgbDatepickerI18nHebrew.prototype.getYearNumerals = /** + * @param {?} year + * @return {?} + */ + function (year) { return hebrewNumerals(year); }; + NgbDatepickerI18nHebrew.decorators = [ + { type: core.Injectable } + ]; + return NgbDatepickerI18nHebrew; + }(NgbDatepickerI18n)); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** + * [`NgbDateAdapter`](#/components/datepicker/api#NgbDateAdapter) implementation that uses + * native javascript dates as a user date model. + */ + var NgbDateNativeAdapter = /** @class */ (function (_super) { + __extends(NgbDateNativeAdapter, _super); + function NgbDateNativeAdapter() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * Converts a native `Date` to a `NgbDateStruct`. + */ + /** + * Converts a native `Date` to a `NgbDateStruct`. + * @param {?} date + * @return {?} + */ + NgbDateNativeAdapter.prototype.fromModel = /** + * Converts a native `Date` to a `NgbDateStruct`. + * @param {?} date + * @return {?} + */ + function (date) { + return (date instanceof Date && !isNaN(date.getTime())) ? this._fromNativeDate(date) : null; + }; + /** + * Converts a `NgbDateStruct` to a native `Date`. + */ + /** + * Converts a `NgbDateStruct` to a native `Date`. + * @param {?} date + * @return {?} + */ + NgbDateNativeAdapter.prototype.toModel = /** + * Converts a `NgbDateStruct` to a native `Date`. + * @param {?} date + * @return {?} + */ + function (date) { + return date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day) ? this._toNativeDate(date) : + null; + }; + /** + * @protected + * @param {?} date + * @return {?} + */ + NgbDateNativeAdapter.prototype._fromNativeDate = /** + * @protected + * @param {?} date + * @return {?} + */ + function (date) { + return { year: date.getFullYear(), month: date.getMonth() + 1, day: date.getDate() }; + }; + /** + * @protected + * @param {?} date + * @return {?} + */ + NgbDateNativeAdapter.prototype._toNativeDate = /** + * @protected + * @param {?} date + * @return {?} + */ + function (date) { + /** @type {?} */ + var jsDate = new Date(date.year, date.month - 1, date.day, 12); + // avoid 30 -> 1930 conversion + jsDate.setFullYear(date.year); + return jsDate; + }; + NgbDateNativeAdapter.decorators = [ + { type: core.Injectable } + ]; + return NgbDateNativeAdapter; + }(NgbDateAdapter)); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** + * Same as [`NgbDateNativeAdapter`](#/components/datepicker/api#NgbDateNativeAdapter), but with UTC dates. + * + * \@since 3.2.0 + */ + var NgbDateNativeUTCAdapter = /** @class */ (function (_super) { + __extends(NgbDateNativeUTCAdapter, _super); + function NgbDateNativeUTCAdapter() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * @protected + * @param {?} date + * @return {?} + */ + NgbDateNativeUTCAdapter.prototype._fromNativeDate = /** + * @protected + * @param {?} date + * @return {?} + */ + function (date) { + return { year: date.getUTCFullYear(), month: date.getUTCMonth() + 1, day: date.getUTCDate() }; + }; + /** + * @protected + * @param {?} date + * @return {?} + */ + NgbDateNativeUTCAdapter.prototype._toNativeDate = /** + * @protected + * @param {?} date + * @return {?} + */ + function (date) { + /** @type {?} */ + var jsDate = new Date(Date.UTC(date.year, date.month - 1, date.day)); + // avoid 30 -> 1930 conversion + jsDate.setUTCFullYear(date.year); + return jsDate; + }; + NgbDateNativeUTCAdapter.decorators = [ + { type: core.Injectable } + ]; + return NgbDateNativeUTCAdapter; + }(NgbDateNativeAdapter)); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + var NgbDatepickerModule = /** @class */ (function () { + function NgbDatepickerModule() { + } + NgbDatepickerModule.decorators = [ + { type: core.NgModule, args: [{ + declarations: [ + NgbDatepicker, NgbDatepickerMonthView, NgbDatepickerNavigation, NgbDatepickerNavigationSelect, NgbDatepickerDayView, + NgbInputDatepicker + ], + exports: [NgbDatepicker, NgbInputDatepicker], + imports: [common.CommonModule, forms.FormsModule], + entryComponents: [NgbDatepicker] + },] } + ]; + return NgbDatepickerModule; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** + * A configuration service for the [`NgbDropdown`](#/components/dropdown/api#NgbDropdown) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the dropdowns used in the application. + */ + var NgbDropdownConfig = /** @class */ (function () { + function NgbDropdownConfig() { + this.autoClose = true; + this.placement = ['bottom-left', 'bottom-right', 'top-left', 'top-right']; + } + NgbDropdownConfig.decorators = [ + { type: core.Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ NgbDropdownConfig.ngInjectableDef = core.ɵɵdefineInjectable({ factory: function NgbDropdownConfig_Factory() { return new NgbDropdownConfig(); }, token: NgbDropdownConfig, providedIn: "root" }); + return NgbDropdownConfig; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + var NgbNavbar = /** @class */ (function () { + function NgbNavbar() { + } + NgbNavbar.decorators = [ + { type: core.Directive, args: [{ selector: '.navbar' },] } + ]; + return NgbNavbar; + }()); + /** + * A directive you should put put on a dropdown item to enable keyboard navigation. + * Arrow keys will move focus between items marked with this directive. + * + * \@since 4.1.0 + */ + var NgbDropdownItem = /** @class */ (function () { + function NgbDropdownItem(elementRef) { + this.elementRef = elementRef; + this._disabled = false; + } + Object.defineProperty(NgbDropdownItem.prototype, "disabled", { + get: /** + * @return {?} + */ + function () { return this._disabled; }, + set: /** + * @param {?} value + * @return {?} + */ + function (value) { + this._disabled = (/** @type {?} */ (value)) === '' || value === true; // accept an empty attribute as true + }, + enumerable: true, + configurable: true + }); + NgbDropdownItem.decorators = [ + { type: core.Directive, args: [{ selector: '[ngbDropdownItem]', host: { 'class': 'dropdown-item', '[class.disabled]': 'disabled' } },] } + ]; + /** @nocollapse */ + NgbDropdownItem.ctorParameters = function () { return [ + { type: core.ElementRef } + ]; }; + NgbDropdownItem.propDecorators = { + disabled: [{ type: core.Input }] + }; + return NgbDropdownItem; + }()); + /** + * A directive that wraps dropdown menu content and dropdown items. + */ + var NgbDropdownMenu = /** @class */ (function () { + function NgbDropdownMenu(dropdown) { + this.dropdown = dropdown; + this.placement = 'bottom'; + this.isOpen = false; + } + NgbDropdownMenu.decorators = [ + { type: core.Directive, args: [{ + selector: '[ngbDropdownMenu]', + host: { + '[class.dropdown-menu]': 'true', + '[class.show]': 'dropdown.isOpen()', + '[attr.x-placement]': 'placement', + '(keydown.ArrowUp)': 'dropdown.onKeyDown($event)', + '(keydown.ArrowDown)': 'dropdown.onKeyDown($event)', + '(keydown.Home)': 'dropdown.onKeyDown($event)', + '(keydown.End)': 'dropdown.onKeyDown($event)', + '(keydown.Enter)': 'dropdown.onKeyDown($event)', + '(keydown.Space)': 'dropdown.onKeyDown($event)' + } + },] } + ]; + /** @nocollapse */ + NgbDropdownMenu.ctorParameters = function () { return [ + { type: undefined, decorators: [{ type: core.Inject, args: [core.forwardRef((/** + * @return {?} + */ + function () { return NgbDropdown; })),] }] } + ]; }; + NgbDropdownMenu.propDecorators = { + menuItems: [{ type: core.ContentChildren, args: [NgbDropdownItem,] }] + }; + return NgbDropdownMenu; + }()); + /** + * A directive to mark an element to which dropdown menu will be anchored. + * + * This is a simple version of the `NgbDropdownToggle` directive. + * It plays the same role, but doesn't listen to click events to toggle dropdown menu thus enabling support + * for events other than click. + * + * \@since 1.1.0 + */ + var NgbDropdownAnchor = /** @class */ (function () { + function NgbDropdownAnchor(dropdown, _elementRef) { + this.dropdown = dropdown; + this._elementRef = _elementRef; + this.anchorEl = _elementRef.nativeElement; + } + /** + * @return {?} + */ + NgbDropdownAnchor.prototype.getNativeElement = /** + * @return {?} + */ + function () { return this._elementRef.nativeElement; }; + NgbDropdownAnchor.decorators = [ + { type: core.Directive, args: [{ + selector: '[ngbDropdownAnchor]', + host: { 'class': 'dropdown-toggle', 'aria-haspopup': 'true', '[attr.aria-expanded]': 'dropdown.isOpen()' } + },] } + ]; + /** @nocollapse */ + NgbDropdownAnchor.ctorParameters = function () { return [ + { type: undefined, decorators: [{ type: core.Inject, args: [core.forwardRef((/** + * @return {?} + */ + function () { return NgbDropdown; })),] }] }, + { type: core.ElementRef } + ]; }; + return NgbDropdownAnchor; + }()); + /** + * A directive to mark an element that will toggle dropdown via the `click` event. + * + * You can also use `NgbDropdownAnchor` as an alternative. + */ + var NgbDropdownToggle = /** @class */ (function (_super) { + __extends(NgbDropdownToggle, _super); + function NgbDropdownToggle(dropdown, elementRef) { + return _super.call(this, dropdown, elementRef) || this; + } + NgbDropdownToggle.decorators = [ + { type: core.Directive, args: [{ + selector: '[ngbDropdownToggle]', + host: { + 'class': 'dropdown-toggle', + 'aria-haspopup': 'true', + '[attr.aria-expanded]': 'dropdown.isOpen()', + '(click)': 'dropdown.toggle()', + '(keydown.ArrowUp)': 'dropdown.onKeyDown($event)', + '(keydown.ArrowDown)': 'dropdown.onKeyDown($event)', + '(keydown.Home)': 'dropdown.onKeyDown($event)', + '(keydown.End)': 'dropdown.onKeyDown($event)' + }, + providers: [{ provide: NgbDropdownAnchor, useExisting: core.forwardRef((/** + * @return {?} + */ + function () { return NgbDropdownToggle; })) }] + },] } + ]; + /** @nocollapse */ + NgbDropdownToggle.ctorParameters = function () { return [ + { type: undefined, decorators: [{ type: core.Inject, args: [core.forwardRef((/** + * @return {?} + */ + function () { return NgbDropdown; })),] }] }, + { type: core.ElementRef } + ]; }; + return NgbDropdownToggle; + }(NgbDropdownAnchor)); + /** + * A directive that provides contextual overlays for displaying lists of links and more. + */ + var NgbDropdown = /** @class */ (function () { + function NgbDropdown(_changeDetector, config, _document, _ngZone, _elementRef, _renderer, ngbNavbar) { + var _this = this; + this._changeDetector = _changeDetector; + this._document = _document; + this._ngZone = _ngZone; + this._elementRef = _elementRef; + this._renderer = _renderer; + this._closed$ = new rxjs.Subject(); + /** + * Defines whether or not the dropdown menu is opened initially. + */ + this._open = false; + /** + * An event fired when the dropdown is opened or closed. + * + * The event payload is a `boolean`: + * * `true` - the dropdown was opened + * * `false` - the dropdown was closed + */ + this.openChange = new core.EventEmitter(); + this.placement = config.placement; + this.container = config.container; + this.autoClose = config.autoClose; + this.display = ngbNavbar ? 'static' : 'dynamic'; + this._zoneSubscription = _ngZone.onStable.subscribe((/** + * @return {?} + */ + function () { _this._positionMenu(); })); + } + /** + * @return {?} + */ + NgbDropdown.prototype.ngAfterContentInit = /** + * @return {?} + */ + function () { + var _this = this; + this._ngZone.onStable.pipe(operators.take(1)).subscribe((/** + * @return {?} + */ + function () { + _this._applyPlacementClasses(); + if (_this._open) { + _this._setCloseHandlers(); + } + })); + }; + /** + * @param {?} changes + * @return {?} + */ + NgbDropdown.prototype.ngOnChanges = /** + * @param {?} changes + * @return {?} + */ + function (changes) { + if (changes.container && this._open) { + this._applyContainer(this.container); + } + if (changes.placement && !changes.placement.isFirstChange) { + this._applyPlacementClasses(); + } + }; + /** + * Checks if the dropdown menu is open. + */ + /** + * Checks if the dropdown menu is open. + * @return {?} + */ + NgbDropdown.prototype.isOpen = /** + * Checks if the dropdown menu is open. + * @return {?} + */ + function () { return this._open; }; + /** + * Opens the dropdown menu. + */ + /** + * Opens the dropdown menu. + * @return {?} + */ + NgbDropdown.prototype.open = /** + * Opens the dropdown menu. + * @return {?} + */ + function () { + if (!this._open) { + this._open = true; + this._applyContainer(this.container); + this.openChange.emit(true); + this._setCloseHandlers(); + } + }; + /** + * @private + * @return {?} + */ + NgbDropdown.prototype._setCloseHandlers = /** + * @private + * @return {?} + */ + function () { + var _this = this; + /** @type {?} */ + var anchor = this._anchor; + ngbAutoClose(this._ngZone, this._document, this.autoClose, (/** + * @return {?} + */ + function () { return _this.close(); }), this._closed$, this._menu ? [this._menuElement.nativeElement] : [], anchor ? [anchor.getNativeElement()] : [], '.dropdown-item,.dropdown-divider'); + }; + /** + * Closes the dropdown menu. + */ + /** + * Closes the dropdown menu. + * @return {?} + */ + NgbDropdown.prototype.close = /** + * Closes the dropdown menu. + * @return {?} + */ + function () { + if (this._open) { + this._open = false; + this._resetContainer(); + this._closed$.next(); + this.openChange.emit(false); + this._changeDetector.markForCheck(); + } + }; + /** + * Toggles the dropdown menu. + */ + /** + * Toggles the dropdown menu. + * @return {?} + */ + NgbDropdown.prototype.toggle = /** + * Toggles the dropdown menu. + * @return {?} + */ + function () { + if (this.isOpen()) { + this.close(); + } + else { + this.open(); + } + }; + /** + * @return {?} + */ + NgbDropdown.prototype.ngOnDestroy = /** + * @return {?} + */ + function () { + this._resetContainer(); + this._closed$.next(); + this._zoneSubscription.unsubscribe(); + }; + /** + * @param {?} event + * @return {?} + */ + NgbDropdown.prototype.onKeyDown = /** + * @param {?} event + * @return {?} + */ + function (event) { + var _this = this; + // tslint:disable-next-line:deprecation + /** @type {?} */ + var key = event.which; + /** @type {?} */ + var itemElements = this._getMenuElements(); + /** @type {?} */ + var position = -1; + /** @type {?} */ + var isEventFromItems = false; + /** @type {?} */ + var isEventFromToggle = this._isEventFromToggle(event); + if (!isEventFromToggle && itemElements.length) { + itemElements.forEach((/** + * @param {?} itemElement + * @param {?} index + * @return {?} + */ + function (itemElement, index) { + if (itemElement.contains((/** @type {?} */ (event.target)))) { + isEventFromItems = true; + } + if (itemElement === _this._document.activeElement) { + position = index; + } + })); + } + // closing on Enter / Space + if (key === Key.Space || key === Key.Enter) { + if (isEventFromItems && (this.autoClose === true || this.autoClose === 'inside')) { + this.close(); + } + return; + } + // opening / navigating + if (isEventFromToggle || isEventFromItems) { + this.open(); + if (itemElements.length) { + switch (key) { + case Key.ArrowDown: + position = Math.min(position + 1, itemElements.length - 1); + break; + case Key.ArrowUp: + if (this._isDropup() && position === -1) { + position = itemElements.length - 1; + break; + } + position = Math.max(position - 1, 0); + break; + case Key.Home: + position = 0; + break; + case Key.End: + position = itemElements.length - 1; + break; + } + itemElements[position].focus(); + } + event.preventDefault(); + } + }; + /** + * @private + * @return {?} + */ + NgbDropdown.prototype._isDropup = /** + * @private + * @return {?} + */ + function () { return this._elementRef.nativeElement.classList.contains('dropup'); }; + /** + * @private + * @param {?} event + * @return {?} + */ + NgbDropdown.prototype._isEventFromToggle = /** + * @private + * @param {?} event + * @return {?} + */ + function (event) { + return this._anchor.getNativeElement().contains((/** @type {?} */ (event.target))); + }; + /** + * @private + * @return {?} + */ + NgbDropdown.prototype._getMenuElements = /** + * @private + * @return {?} + */ + function () { + /** @type {?} */ + var menu = this._menu; + if (menu == null) { + return []; + } + return menu.menuItems.filter((/** + * @param {?} item + * @return {?} + */ + function (item) { return !item.disabled; })).map((/** + * @param {?} item + * @return {?} + */ + function (item) { return item.elementRef.nativeElement; })); + }; + /** + * @private + * @return {?} + */ + NgbDropdown.prototype._positionMenu = /** + * @private + * @return {?} + */ + function () { + /** @type {?} */ + var menu = this._menu; + if (this.isOpen() && menu) { + this._applyPlacementClasses(this.display === 'dynamic' ? + positionElements(this._anchor.anchorEl, this._bodyContainer || this._menuElement.nativeElement, this.placement, this.container === 'body') : + this._getFirstPlacement(this.placement)); + } + }; + /** + * @private + * @param {?} placement + * @return {?} + */ + NgbDropdown.prototype._getFirstPlacement = /** + * @private + * @param {?} placement + * @return {?} + */ + function (placement) { + return Array.isArray(placement) ? placement[0] : (/** @type {?} */ (placement.split(' ')[0])); + }; + /** + * @private + * @return {?} + */ + NgbDropdown.prototype._resetContainer = /** + * @private + * @return {?} + */ + function () { + /** @type {?} */ + var renderer = this._renderer; + /** @type {?} */ + var menuElement = this._menuElement; + if (menuElement) { + /** @type {?} */ + var dropdownElement = this._elementRef.nativeElement; + /** @type {?} */ + var dropdownMenuElement = menuElement.nativeElement; + renderer.appendChild(dropdownElement, dropdownMenuElement); + renderer.removeStyle(dropdownMenuElement, 'position'); + renderer.removeStyle(dropdownMenuElement, 'transform'); + } + if (this._bodyContainer) { + renderer.removeChild(this._document.body, this._bodyContainer); + this._bodyContainer = null; + } + }; + /** + * @private + * @param {?=} container + * @return {?} + */ + NgbDropdown.prototype._applyContainer = /** + * @private + * @param {?=} container + * @return {?} + */ + function (container) { + if (container === void 0) { container = null; } + this._resetContainer(); + if (container === 'body') { + /** @type {?} */ + var renderer = this._renderer; + /** @type {?} */ + var dropdownMenuElement = this._menuElement.nativeElement; + /** @type {?} */ + var bodyContainer = this._bodyContainer = this._bodyContainer || renderer.createElement('div'); + // Override some styles to have the positionning working + renderer.setStyle(bodyContainer, 'position', 'absolute'); + renderer.setStyle(dropdownMenuElement, 'position', 'static'); + renderer.setStyle(bodyContainer, 'z-index', '1050'); + renderer.appendChild(bodyContainer, dropdownMenuElement); + renderer.appendChild(this._document.body, bodyContainer); + } + }; + /** + * @private + * @param {?=} placement + * @return {?} + */ + NgbDropdown.prototype._applyPlacementClasses = /** + * @private + * @param {?=} placement + * @return {?} + */ + function (placement) { + /** @type {?} */ + var menu = this._menu; + if (menu) { + if (!placement) { + placement = this._getFirstPlacement(this.placement); + } + /** @type {?} */ + var renderer = this._renderer; + /** @type {?} */ + var dropdownElement = this._elementRef.nativeElement; + // remove the current placement classes + renderer.removeClass(dropdownElement, 'dropup'); + renderer.removeClass(dropdownElement, 'dropdown'); + menu.placement = this.display === 'static' ? null : placement; + /* + * apply the new placement + * in case of top use up-arrow or down-arrow otherwise + */ + /** @type {?} */ + var dropdownClass = placement.search('^top') !== -1 ? 'dropup' : 'dropdown'; + renderer.addClass(dropdownElement, dropdownClass); + /** @type {?} */ + var bodyContainer = this._bodyContainer; + if (bodyContainer) { + renderer.removeClass(bodyContainer, 'dropup'); + renderer.removeClass(bodyContainer, 'dropdown'); + renderer.addClass(bodyContainer, dropdownClass); + } + } + }; + NgbDropdown.decorators = [ + { type: core.Directive, args: [{ selector: '[ngbDropdown]', exportAs: 'ngbDropdown', host: { '[class.show]': 'isOpen()' } },] } + ]; + /** @nocollapse */ + NgbDropdown.ctorParameters = function () { return [ + { type: core.ChangeDetectorRef }, + { type: NgbDropdownConfig }, + { type: undefined, decorators: [{ type: core.Inject, args: [common.DOCUMENT,] }] }, + { type: core.NgZone }, + { type: core.ElementRef }, + { type: core.Renderer2 }, + { type: NgbNavbar, decorators: [{ type: core.Optional }] } + ]; }; + NgbDropdown.propDecorators = { + _menu: [{ type: core.ContentChild, args: [NgbDropdownMenu, { static: false },] }], + _menuElement: [{ type: core.ContentChild, args: [NgbDropdownMenu, { read: core.ElementRef, static: false },] }], + _anchor: [{ type: core.ContentChild, args: [NgbDropdownAnchor, { static: false },] }], + autoClose: [{ type: core.Input }], + _open: [{ type: core.Input, args: ['open',] }], + placement: [{ type: core.Input }], + container: [{ type: core.Input }], + display: [{ type: core.Input }], + openChange: [{ type: core.Output }] + }; + return NgbDropdown; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** @type {?} */ + var NGB_DROPDOWN_DIRECTIVES = [NgbDropdown, NgbDropdownAnchor, NgbDropdownToggle, NgbDropdownMenu, NgbDropdownItem, NgbNavbar]; + var NgbDropdownModule = /** @class */ (function () { + function NgbDropdownModule() { + } + NgbDropdownModule.decorators = [ + { type: core.NgModule, args: [{ declarations: NGB_DROPDOWN_DIRECTIVES, exports: NGB_DROPDOWN_DIRECTIVES },] } + ]; + return NgbDropdownModule; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** + * A configuration service for the [`NgbModal`](#/components/modal/api#NgbModal) service. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all modals used in the application. + * + * \@since 3.1.0 + */ + var NgbModalConfig = /** @class */ (function () { + function NgbModalConfig() { + this.backdrop = true; + this.keyboard = true; + } + NgbModalConfig.decorators = [ + { type: core.Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ NgbModalConfig.ngInjectableDef = core.ɵɵdefineInjectable({ factory: function NgbModalConfig_Factory() { return new NgbModalConfig(); }, token: NgbModalConfig, providedIn: "root" }); + return NgbModalConfig; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + var ContentRef = /** @class */ (function () { + function ContentRef(nodes, viewRef, componentRef) { + this.nodes = nodes; + this.viewRef = viewRef; + this.componentRef = componentRef; + } + return ContentRef; + }()); + /** + * @template T + */ + var /** + * @template T + */ + PopupService = /** @class */ (function () { + function PopupService(_type, _injector, _viewContainerRef, _renderer, _componentFactoryResolver, _applicationRef) { + this._type = _type; + this._injector = _injector; + this._viewContainerRef = _viewContainerRef; + this._renderer = _renderer; + this._componentFactoryResolver = _componentFactoryResolver; + this._applicationRef = _applicationRef; + } + /** + * @param {?=} content + * @param {?=} context + * @return {?} + */ + PopupService.prototype.open = /** + * @param {?=} content + * @param {?=} context + * @return {?} + */ + function (content, context) { + if (!this._windowRef) { + this._contentRef = this._getContentRef(content, context); + this._windowRef = this._viewContainerRef.createComponent(this._componentFactoryResolver.resolveComponentFactory(this._type), 0, this._injector, this._contentRef.nodes); + } + return this._windowRef; + }; + /** + * @return {?} + */ + PopupService.prototype.close = /** + * @return {?} + */ + function () { + if (this._windowRef) { + this._viewContainerRef.remove(this._viewContainerRef.indexOf(this._windowRef.hostView)); + this._windowRef = null; + if (this._contentRef.viewRef) { + this._applicationRef.detachView(this._contentRef.viewRef); + this._contentRef.viewRef.destroy(); + this._contentRef = null; + } + } + }; + /** + * @private + * @param {?} content + * @param {?=} context + * @return {?} + */ + PopupService.prototype._getContentRef = /** + * @private + * @param {?} content + * @param {?=} context + * @return {?} + */ + function (content, context) { + if (!content) { + return new ContentRef([]); + } + else if (content instanceof core.TemplateRef) { + /** @type {?} */ + var viewRef = content.createEmbeddedView(context); + this._applicationRef.attachView(viewRef); + return new ContentRef([viewRef.rootNodes], viewRef); + } + else { + return new ContentRef([[this._renderer.createText("" + content)]]); + } + }; + return PopupService; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** @type {?} */ + var noop = (/** + * @return {?} + */ + function () { }); + /** + * Utility to handle the scrollbar. + * + * It allows to compensate the lack of a vertical scrollbar by adding an + * equivalent padding on the right of the body, and to remove this compensation. + */ + var ScrollBar = /** @class */ (function () { + function ScrollBar(_document) { + this._document = _document; + } + /** + * Detects if a scrollbar is present and if yes, already compensates for its + * removal by adding an equivalent padding on the right of the body. + * + * @return a callback used to revert the compensation (noop if there was none, + * otherwise a function removing the padding) + */ + /** + * Detects if a scrollbar is present and if yes, already compensates for its + * removal by adding an equivalent padding on the right of the body. + * + * @return {?} a callback used to revert the compensation (noop if there was none, + * otherwise a function removing the padding) + */ + ScrollBar.prototype.compensate = /** + * Detects if a scrollbar is present and if yes, already compensates for its + * removal by adding an equivalent padding on the right of the body. + * + * @return {?} a callback used to revert the compensation (noop if there was none, + * otherwise a function removing the padding) + */ + function () { return !this._isPresent() ? noop : this._adjustBody(this._getWidth()); }; + /** + * Adds a padding of the given width on the right of the body. + * + * @return a callback used to revert the padding to its previous value + */ + /** + * Adds a padding of the given width on the right of the body. + * + * @private + * @param {?} width + * @return {?} a callback used to revert the padding to its previous value + */ + ScrollBar.prototype._adjustBody = /** + * Adds a padding of the given width on the right of the body. + * + * @private + * @param {?} width + * @return {?} a callback used to revert the padding to its previous value + */ + function (width) { + /** @type {?} */ + var body = this._document.body; + /** @type {?} */ + var userSetPadding = body.style.paddingRight; + /** @type {?} */ + var paddingAmount = parseFloat(window.getComputedStyle(body)['padding-right']); + body.style['padding-right'] = paddingAmount + width + "px"; + return (/** + * @return {?} + */ + function () { return body.style['padding-right'] = userSetPadding; }); + }; + /** + * Tells whether a scrollbar is currently present on the body. + * + * @return true if scrollbar is present, false otherwise + */ + /** + * Tells whether a scrollbar is currently present on the body. + * + * @private + * @return {?} true if scrollbar is present, false otherwise + */ + ScrollBar.prototype._isPresent = /** + * Tells whether a scrollbar is currently present on the body. + * + * @private + * @return {?} true if scrollbar is present, false otherwise + */ + function () { + /** @type {?} */ + var rect = this._document.body.getBoundingClientRect(); + return rect.left + rect.right < window.innerWidth; + }; + /** + * Calculates and returns the width of a scrollbar. + * + * @return the width of a scrollbar on this page + */ + /** + * Calculates and returns the width of a scrollbar. + * + * @private + * @return {?} the width of a scrollbar on this page + */ + ScrollBar.prototype._getWidth = /** + * Calculates and returns the width of a scrollbar. + * + * @private + * @return {?} the width of a scrollbar on this page + */ + function () { + /** @type {?} */ + var measurer = this._document.createElement('div'); + measurer.className = 'modal-scrollbar-measure'; + /** @type {?} */ + var body = this._document.body; + body.appendChild(measurer); + /** @type {?} */ + var width = measurer.getBoundingClientRect().width - measurer.clientWidth; + body.removeChild(measurer); + return width; + }; + ScrollBar.decorators = [ + { type: core.Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ + ScrollBar.ctorParameters = function () { return [ + { type: undefined, decorators: [{ type: core.Inject, args: [common.DOCUMENT,] }] } + ]; }; + /** @nocollapse */ ScrollBar.ngInjectableDef = core.ɵɵdefineInjectable({ factory: function ScrollBar_Factory() { return new ScrollBar(core.ɵɵinject(common.DOCUMENT)); }, token: ScrollBar, providedIn: "root" }); + return ScrollBar; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + var NgbModalBackdrop = /** @class */ (function () { + function NgbModalBackdrop() { + } + NgbModalBackdrop.decorators = [ + { type: core.Component, args: [{ + selector: 'ngb-modal-backdrop', + template: '', + host: { '[class]': '"modal-backdrop fade show" + (backdropClass ? " " + backdropClass : "")', 'style': 'z-index: 1050' } + }] } + ]; + NgbModalBackdrop.propDecorators = { + backdropClass: [{ type: core.Input }] + }; + return NgbModalBackdrop; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** + * A reference to the currently opened (active) modal. + * + * Instances of this class can be injected into your component passed as modal content. + * So you can `.close()` or `.dismiss()` the modal window from your component. + */ + var /** + * A reference to the currently opened (active) modal. + * + * Instances of this class can be injected into your component passed as modal content. + * So you can `.close()` or `.dismiss()` the modal window from your component. + */ + NgbActiveModal = /** @class */ (function () { + function NgbActiveModal() { + } + /** + * Closes the modal with an optional `result` value. + * + * The `NgbMobalRef.result` promise will be resolved with the provided value. + */ + /** + * Closes the modal with an optional `result` value. + * + * The `NgbMobalRef.result` promise will be resolved with the provided value. + * @param {?=} result + * @return {?} + */ + NgbActiveModal.prototype.close = /** + * Closes the modal with an optional `result` value. + * + * The `NgbMobalRef.result` promise will be resolved with the provided value. + * @param {?=} result + * @return {?} + */ + function (result) { }; + /** + * Dismisses the modal with an optional `reason` value. + * + * The `NgbModalRef.result` promise will be rejected with the provided value. + */ + /** + * Dismisses the modal with an optional `reason` value. + * + * The `NgbModalRef.result` promise will be rejected with the provided value. + * @param {?=} reason + * @return {?} + */ + NgbActiveModal.prototype.dismiss = /** + * Dismisses the modal with an optional `reason` value. + * + * The `NgbModalRef.result` promise will be rejected with the provided value. + * @param {?=} reason + * @return {?} + */ + function (reason) { }; + return NgbActiveModal; + }()); + /** + * A reference to the newly opened modal returned by the `NgbModal.open()` method. + */ + var /** + * A reference to the newly opened modal returned by the `NgbModal.open()` method. + */ + NgbModalRef = /** @class */ (function () { + function NgbModalRef(_windowCmptRef, _contentRef, _backdropCmptRef, _beforeDismiss) { + var _this = this; + this._windowCmptRef = _windowCmptRef; + this._contentRef = _contentRef; + this._backdropCmptRef = _backdropCmptRef; + this._beforeDismiss = _beforeDismiss; + _windowCmptRef.instance.dismissEvent.subscribe((/** + * @param {?} reason + * @return {?} + */ + function (reason) { _this.dismiss(reason); })); + this.result = new Promise((/** + * @param {?} resolve + * @param {?} reject + * @return {?} + */ + function (resolve, reject) { + _this._resolve = resolve; + _this._reject = reject; + })); + this.result.then(null, (/** + * @return {?} + */ + function () { })); + } + Object.defineProperty(NgbModalRef.prototype, "componentInstance", { + /** + * The instance of a component used for the modal content. + * + * When a `TemplateRef` is used as the content, will return `undefined`. + */ + get: /** + * The instance of a component used for the modal content. + * + * When a `TemplateRef` is used as the content, will return `undefined`. + * @return {?} + */ + function () { + if (this._contentRef.componentRef) { + return this._contentRef.componentRef.instance; + } + }, + enumerable: true, + configurable: true + }); + /** + * Closes the modal with an optional `result` value. + * + * The `NgbMobalRef.result` promise will be resolved with the provided value. + */ + /** + * Closes the modal with an optional `result` value. + * + * The `NgbMobalRef.result` promise will be resolved with the provided value. + * @param {?=} result + * @return {?} + */ + NgbModalRef.prototype.close = /** + * Closes the modal with an optional `result` value. + * + * The `NgbMobalRef.result` promise will be resolved with the provided value. + * @param {?=} result + * @return {?} + */ + function (result) { + if (this._windowCmptRef) { + this._resolve(result); + this._removeModalElements(); + } + }; + /** + * @private + * @param {?=} reason + * @return {?} + */ + NgbModalRef.prototype._dismiss = /** + * @private + * @param {?=} reason + * @return {?} + */ + function (reason) { + this._reject(reason); + this._removeModalElements(); + }; + /** + * Dismisses the modal with an optional `reason` value. + * + * The `NgbModalRef.result` promise will be rejected with the provided value. + */ + /** + * Dismisses the modal with an optional `reason` value. + * + * The `NgbModalRef.result` promise will be rejected with the provided value. + * @param {?=} reason + * @return {?} + */ + NgbModalRef.prototype.dismiss = /** + * Dismisses the modal with an optional `reason` value. + * + * The `NgbModalRef.result` promise will be rejected with the provided value. + * @param {?=} reason + * @return {?} + */ + function (reason) { + var _this = this; + if (this._windowCmptRef) { + if (!this._beforeDismiss) { + this._dismiss(reason); + } + else { + /** @type {?} */ + var dismiss = this._beforeDismiss(); + if (dismiss && dismiss.then) { + dismiss.then((/** + * @param {?} result + * @return {?} + */ + function (result) { + if (result !== false) { + _this._dismiss(reason); + } + }), (/** + * @return {?} + */ + function () { })); + } + else if (dismiss !== false) { + this._dismiss(reason); + } + } + } + }; + /** + * @private + * @return {?} + */ + NgbModalRef.prototype._removeModalElements = /** + * @private + * @return {?} + */ + function () { + /** @type {?} */ + var windowNativeEl = this._windowCmptRef.location.nativeElement; + windowNativeEl.parentNode.removeChild(windowNativeEl); + this._windowCmptRef.destroy(); + if (this._backdropCmptRef) { + /** @type {?} */ + var backdropNativeEl = this._backdropCmptRef.location.nativeElement; + backdropNativeEl.parentNode.removeChild(backdropNativeEl); + this._backdropCmptRef.destroy(); + } + if (this._contentRef && this._contentRef.viewRef) { + this._contentRef.viewRef.destroy(); + } + this._windowCmptRef = null; + this._backdropCmptRef = null; + this._contentRef = null; + }; + return NgbModalRef; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** @enum {number} */ + var ModalDismissReasons = { + BACKDROP_CLICK: 0, + ESC: 1, + }; + ModalDismissReasons[ModalDismissReasons.BACKDROP_CLICK] = 'BACKDROP_CLICK'; + ModalDismissReasons[ModalDismissReasons.ESC] = 'ESC'; + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + var NgbModalWindow = /** @class */ (function () { + function NgbModalWindow(_document, _elRef) { + this._document = _document; + this._elRef = _elRef; + this.backdrop = true; + this.keyboard = true; + this.dismissEvent = new core.EventEmitter(); + } + /** + * @param {?} $event + * @return {?} + */ + NgbModalWindow.prototype.backdropClick = /** + * @param {?} $event + * @return {?} + */ + function ($event) { + if (this.backdrop === true && this._elRef.nativeElement === $event.target) { + this.dismiss(ModalDismissReasons.BACKDROP_CLICK); + } + }; + /** + * @param {?} $event + * @return {?} + */ + NgbModalWindow.prototype.escKey = /** + * @param {?} $event + * @return {?} + */ + function ($event) { + if (this.keyboard && !$event.defaultPrevented) { + this.dismiss(ModalDismissReasons.ESC); + } + }; + /** + * @param {?} reason + * @return {?} + */ + NgbModalWindow.prototype.dismiss = /** + * @param {?} reason + * @return {?} + */ + function (reason) { this.dismissEvent.emit(reason); }; + /** + * @return {?} + */ + NgbModalWindow.prototype.ngOnInit = /** + * @return {?} + */ + function () { this._elWithFocus = this._document.activeElement; }; + /** + * @return {?} + */ + NgbModalWindow.prototype.ngAfterViewInit = /** + * @return {?} + */ + function () { + if (!this._elRef.nativeElement.contains(document.activeElement)) { + /** @type {?} */ + var autoFocusable = (/** @type {?} */ (this._elRef.nativeElement.querySelector("[ngbAutofocus]"))); + /** @type {?} */ + var firstFocusable = getFocusableBoundaryElements(this._elRef.nativeElement)[0]; + /** @type {?} */ + var elementToFocus = autoFocusable || firstFocusable || this._elRef.nativeElement; + elementToFocus.focus(); + } + }; + /** + * @return {?} + */ + NgbModalWindow.prototype.ngOnDestroy = /** + * @return {?} + */ + function () { + /** @type {?} */ + var body = this._document.body; + /** @type {?} */ + var elWithFocus = this._elWithFocus; + /** @type {?} */ + var elementToFocus; + if (elWithFocus && elWithFocus['focus'] && body.contains(elWithFocus)) { + elementToFocus = elWithFocus; + } + else { + elementToFocus = body; + } + elementToFocus.focus(); + this._elWithFocus = null; + }; + NgbModalWindow.decorators = [ + { type: core.Component, args: [{ + selector: 'ngb-modal-window', + host: { + '[class]': '"modal fade show d-block" + (windowClass ? " " + windowClass : "")', + 'role': 'dialog', + 'tabindex': '-1', + '(keyup.esc)': 'escKey($event)', + '(click)': 'backdropClick($event)', + '[attr.aria-modal]': 'true', + '[attr.aria-labelledby]': 'ariaLabelledBy', + }, + template: "\n
\n
\n
\n ", + encapsulation: core.ViewEncapsulation.None, + styles: ["ngb-modal-window .component-host-scrollable{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;overflow:hidden}"] + }] } + ]; + /** @nocollapse */ + NgbModalWindow.ctorParameters = function () { return [ + { type: undefined, decorators: [{ type: core.Inject, args: [common.DOCUMENT,] }] }, + { type: core.ElementRef } + ]; }; + NgbModalWindow.propDecorators = { + ariaLabelledBy: [{ type: core.Input }], + backdrop: [{ type: core.Input }], + centered: [{ type: core.Input }], + keyboard: [{ type: core.Input }], + scrollable: [{ type: core.Input }], + size: [{ type: core.Input }], + windowClass: [{ type: core.Input }], + dismissEvent: [{ type: core.Output, args: ['dismiss',] }] + }; + return NgbModalWindow; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + var NgbModalStack = /** @class */ (function () { + function NgbModalStack(_applicationRef, _injector, _document, _scrollBar, _rendererFactory) { + var _this = this; + this._applicationRef = _applicationRef; + this._injector = _injector; + this._document = _document; + this._scrollBar = _scrollBar; + this._rendererFactory = _rendererFactory; + this._activeWindowCmptHasChanged = new rxjs.Subject(); + this._ariaHiddenValues = new Map(); + this._backdropAttributes = ['backdropClass']; + this._modalRefs = []; + this._windowAttributes = ['ariaLabelledBy', 'backdrop', 'centered', 'keyboard', 'scrollable', 'size', 'windowClass']; + this._windowCmpts = []; + // Trap focus on active WindowCmpt + this._activeWindowCmptHasChanged.subscribe((/** + * @return {?} + */ + function () { + if (_this._windowCmpts.length) { + /** @type {?} */ + var activeWindowCmpt = _this._windowCmpts[_this._windowCmpts.length - 1]; + ngbFocusTrap(activeWindowCmpt.location.nativeElement, _this._activeWindowCmptHasChanged); + _this._revertAriaHidden(); + _this._setAriaHidden(activeWindowCmpt.location.nativeElement); + } + })); + } + /** + * @param {?} moduleCFR + * @param {?} contentInjector + * @param {?} content + * @param {?} options + * @return {?} + */ + NgbModalStack.prototype.open = /** + * @param {?} moduleCFR + * @param {?} contentInjector + * @param {?} content + * @param {?} options + * @return {?} + */ + function (moduleCFR, contentInjector, content, options) { + var _this = this; + /** @type {?} */ + var containerEl = isDefined(options.container) ? this._document.querySelector(options.container) : this._document.body; + /** @type {?} */ + var renderer = this._rendererFactory.createRenderer(null, null); + /** @type {?} */ + var revertPaddingForScrollBar = this._scrollBar.compensate(); + /** @type {?} */ + var removeBodyClass = (/** + * @return {?} + */ + function () { + if (!_this._modalRefs.length) { + renderer.removeClass(_this._document.body, 'modal-open'); + _this._revertAriaHidden(); + } + }); + if (!containerEl) { + throw new Error("The specified modal container \"" + (options.container || 'body') + "\" was not found in the DOM."); + } + /** @type {?} */ + var activeModal = new NgbActiveModal(); + /** @type {?} */ + var contentRef = this._getContentRef(moduleCFR, options.injector || contentInjector, content, activeModal, options); + /** @type {?} */ + var backdropCmptRef = options.backdrop !== false ? this._attachBackdrop(moduleCFR, containerEl) : null; + /** @type {?} */ + var windowCmptRef = this._attachWindowComponent(moduleCFR, containerEl, contentRef); + /** @type {?} */ + var ngbModalRef = new NgbModalRef(windowCmptRef, contentRef, backdropCmptRef, options.beforeDismiss); + this._registerModalRef(ngbModalRef); + this._registerWindowCmpt(windowCmptRef); + ngbModalRef.result.then(revertPaddingForScrollBar, revertPaddingForScrollBar); + ngbModalRef.result.then(removeBodyClass, removeBodyClass); + activeModal.close = (/** + * @param {?} result + * @return {?} + */ + function (result) { ngbModalRef.close(result); }); + activeModal.dismiss = (/** + * @param {?} reason + * @return {?} + */ + function (reason) { ngbModalRef.dismiss(reason); }); + this._applyWindowOptions(windowCmptRef.instance, options); + if (this._modalRefs.length === 1) { + renderer.addClass(this._document.body, 'modal-open'); + } + if (backdropCmptRef && backdropCmptRef.instance) { + this._applyBackdropOptions(backdropCmptRef.instance, options); + } + return ngbModalRef; + }; + /** + * @param {?=} reason + * @return {?} + */ + NgbModalStack.prototype.dismissAll = /** + * @param {?=} reason + * @return {?} + */ + function (reason) { this._modalRefs.forEach((/** + * @param {?} ngbModalRef + * @return {?} + */ + function (ngbModalRef) { return ngbModalRef.dismiss(reason); })); }; + /** + * @return {?} + */ + NgbModalStack.prototype.hasOpenModals = /** + * @return {?} + */ + function () { return this._modalRefs.length > 0; }; + /** + * @private + * @param {?} moduleCFR + * @param {?} containerEl + * @return {?} + */ + NgbModalStack.prototype._attachBackdrop = /** + * @private + * @param {?} moduleCFR + * @param {?} containerEl + * @return {?} + */ + function (moduleCFR, containerEl) { + /** @type {?} */ + var backdropFactory = moduleCFR.resolveComponentFactory(NgbModalBackdrop); + /** @type {?} */ + var backdropCmptRef = backdropFactory.create(this._injector); + this._applicationRef.attachView(backdropCmptRef.hostView); + containerEl.appendChild(backdropCmptRef.location.nativeElement); + return backdropCmptRef; + }; + /** + * @private + * @param {?} moduleCFR + * @param {?} containerEl + * @param {?} contentRef + * @return {?} + */ + NgbModalStack.prototype._attachWindowComponent = /** + * @private + * @param {?} moduleCFR + * @param {?} containerEl + * @param {?} contentRef + * @return {?} + */ + function (moduleCFR, containerEl, contentRef) { + /** @type {?} */ + var windowFactory = moduleCFR.resolveComponentFactory(NgbModalWindow); + /** @type {?} */ + var windowCmptRef = windowFactory.create(this._injector, contentRef.nodes); + this._applicationRef.attachView(windowCmptRef.hostView); + containerEl.appendChild(windowCmptRef.location.nativeElement); + return windowCmptRef; + }; + /** + * @private + * @param {?} windowInstance + * @param {?} options + * @return {?} + */ + NgbModalStack.prototype._applyWindowOptions = /** + * @private + * @param {?} windowInstance + * @param {?} options + * @return {?} + */ + function (windowInstance, options) { + this._windowAttributes.forEach((/** + * @param {?} optionName + * @return {?} + */ + function (optionName) { + if (isDefined(options[optionName])) { + windowInstance[optionName] = options[optionName]; + } + })); + }; + /** + * @private + * @param {?} backdropInstance + * @param {?} options + * @return {?} + */ + NgbModalStack.prototype._applyBackdropOptions = /** + * @private + * @param {?} backdropInstance + * @param {?} options + * @return {?} + */ + function (backdropInstance, options) { + this._backdropAttributes.forEach((/** + * @param {?} optionName + * @return {?} + */ + function (optionName) { + if (isDefined(options[optionName])) { + backdropInstance[optionName] = options[optionName]; + } + })); + }; + /** + * @private + * @param {?} moduleCFR + * @param {?} contentInjector + * @param {?} content + * @param {?} activeModal + * @param {?} options + * @return {?} + */ + NgbModalStack.prototype._getContentRef = /** + * @private + * @param {?} moduleCFR + * @param {?} contentInjector + * @param {?} content + * @param {?} activeModal + * @param {?} options + * @return {?} + */ + function (moduleCFR, contentInjector, content, activeModal, options) { + if (!content) { + return new ContentRef([]); + } + else if (content instanceof core.TemplateRef) { + return this._createFromTemplateRef(content, activeModal); + } + else if (isString(content)) { + return this._createFromString(content); + } + else { + return this._createFromComponent(moduleCFR, contentInjector, content, activeModal, options); + } + }; + /** + * @private + * @param {?} content + * @param {?} activeModal + * @return {?} + */ + NgbModalStack.prototype._createFromTemplateRef = /** + * @private + * @param {?} content + * @param {?} activeModal + * @return {?} + */ + function (content, activeModal) { + /** @type {?} */ + var context = { + $implicit: activeModal, + close: /** + * @param {?} result + * @return {?} + */ + function (result) { activeModal.close(result); }, + dismiss: /** + * @param {?} reason + * @return {?} + */ + function (reason) { activeModal.dismiss(reason); } + }; + /** @type {?} */ + var viewRef = content.createEmbeddedView(context); + this._applicationRef.attachView(viewRef); + return new ContentRef([viewRef.rootNodes], viewRef); + }; + /** + * @private + * @param {?} content + * @return {?} + */ + NgbModalStack.prototype._createFromString = /** + * @private + * @param {?} content + * @return {?} + */ + function (content) { + /** @type {?} */ + var component = this._document.createTextNode("" + content); + return new ContentRef([[component]]); + }; + /** + * @private + * @param {?} moduleCFR + * @param {?} contentInjector + * @param {?} content + * @param {?} context + * @param {?} options + * @return {?} + */ + NgbModalStack.prototype._createFromComponent = /** + * @private + * @param {?} moduleCFR + * @param {?} contentInjector + * @param {?} content + * @param {?} context + * @param {?} options + * @return {?} + */ + function (moduleCFR, contentInjector, content, context, options) { + /** @type {?} */ + var contentCmptFactory = moduleCFR.resolveComponentFactory(content); + /** @type {?} */ + var modalContentInjector = core.Injector.create({ providers: [{ provide: NgbActiveModal, useValue: context }], parent: contentInjector }); + /** @type {?} */ + var componentRef = contentCmptFactory.create(modalContentInjector); + /** @type {?} */ + var componentNativeEl = componentRef.location.nativeElement; + if (options.scrollable) { + ((/** @type {?} */ (componentNativeEl))).classList.add('component-host-scrollable'); + } + this._applicationRef.attachView(componentRef.hostView); + // FIXME: we should here get rid of the component nativeElement + // and use `[Array.from(componentNativeEl.childNodes)]` instead and remove the above CSS class. + return new ContentRef([[componentNativeEl]], componentRef.hostView, componentRef); + }; + /** + * @private + * @param {?} element + * @return {?} + */ + NgbModalStack.prototype._setAriaHidden = /** + * @private + * @param {?} element + * @return {?} + */ + function (element) { + var _this = this; + /** @type {?} */ + var parent = element.parentElement; + if (parent && element !== this._document.body) { + Array.from(parent.children).forEach((/** + * @param {?} sibling + * @return {?} + */ + function (sibling) { + if (sibling !== element && sibling.nodeName !== 'SCRIPT') { + _this._ariaHiddenValues.set(sibling, sibling.getAttribute('aria-hidden')); + sibling.setAttribute('aria-hidden', 'true'); + } + })); + this._setAriaHidden(parent); + } + }; + /** + * @private + * @return {?} + */ + NgbModalStack.prototype._revertAriaHidden = /** + * @private + * @return {?} + */ + function () { + this._ariaHiddenValues.forEach((/** + * @param {?} value + * @param {?} element + * @return {?} + */ + function (value, element) { + if (value) { + element.setAttribute('aria-hidden', value); + } + else { + element.removeAttribute('aria-hidden'); + } + })); + this._ariaHiddenValues.clear(); + }; + /** + * @private + * @param {?} ngbModalRef + * @return {?} + */ + NgbModalStack.prototype._registerModalRef = /** + * @private + * @param {?} ngbModalRef + * @return {?} + */ + function (ngbModalRef) { + var _this = this; + /** @type {?} */ + var unregisterModalRef = (/** + * @return {?} + */ + function () { + /** @type {?} */ + var index = _this._modalRefs.indexOf(ngbModalRef); + if (index > -1) { + _this._modalRefs.splice(index, 1); + } + }); + this._modalRefs.push(ngbModalRef); + ngbModalRef.result.then(unregisterModalRef, unregisterModalRef); + }; + /** + * @private + * @param {?} ngbWindowCmpt + * @return {?} + */ + NgbModalStack.prototype._registerWindowCmpt = /** + * @private + * @param {?} ngbWindowCmpt + * @return {?} + */ + function (ngbWindowCmpt) { + var _this = this; + this._windowCmpts.push(ngbWindowCmpt); + this._activeWindowCmptHasChanged.next(); + ngbWindowCmpt.onDestroy((/** + * @return {?} + */ + function () { + /** @type {?} */ + var index = _this._windowCmpts.indexOf(ngbWindowCmpt); + if (index > -1) { + _this._windowCmpts.splice(index, 1); + _this._activeWindowCmptHasChanged.next(); + } + })); + }; + NgbModalStack.decorators = [ + { type: core.Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ + NgbModalStack.ctorParameters = function () { return [ + { type: core.ApplicationRef }, + { type: core.Injector }, + { type: undefined, decorators: [{ type: core.Inject, args: [common.DOCUMENT,] }] }, + { type: ScrollBar }, + { type: core.RendererFactory2 } + ]; }; + /** @nocollapse */ NgbModalStack.ngInjectableDef = core.ɵɵdefineInjectable({ factory: function NgbModalStack_Factory() { return new NgbModalStack(core.ɵɵinject(core.ApplicationRef), core.ɵɵinject(core.INJECTOR), core.ɵɵinject(common.DOCUMENT), core.ɵɵinject(ScrollBar), core.ɵɵinject(core.RendererFactory2)); }, token: NgbModalStack, providedIn: "root" }); + return NgbModalStack; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** + * A service for opening modal windows. + * + * Creating a modal is straightforward: create a component or a template and pass it as an argument to + * the `.open()` method. + */ + var NgbModal = /** @class */ (function () { + function NgbModal(_moduleCFR, _injector, _modalStack, _config) { + this._moduleCFR = _moduleCFR; + this._injector = _injector; + this._modalStack = _modalStack; + this._config = _config; + } + /** + * Opens a new modal window with the specified content and supplied options. + * + * Content can be provided as a `TemplateRef` or a component type. If you pass a component type as content, + * then instances of those components can be injected with an instance of the `NgbActiveModal` class. You can then + * use `NgbActiveModal` methods to close / dismiss modals from "inside" of your component. + * + * Also see the [`NgbModalOptions`](#/components/modal/api#NgbModalOptions) for the list of supported options. + */ + /** + * Opens a new modal window with the specified content and supplied options. + * + * Content can be provided as a `TemplateRef` or a component type. If you pass a component type as content, + * then instances of those components can be injected with an instance of the `NgbActiveModal` class. You can then + * use `NgbActiveModal` methods to close / dismiss modals from "inside" of your component. + * + * Also see the [`NgbModalOptions`](#/components/modal/api#NgbModalOptions) for the list of supported options. + * @param {?} content + * @param {?=} options + * @return {?} + */ + NgbModal.prototype.open = /** + * Opens a new modal window with the specified content and supplied options. + * + * Content can be provided as a `TemplateRef` or a component type. If you pass a component type as content, + * then instances of those components can be injected with an instance of the `NgbActiveModal` class. You can then + * use `NgbActiveModal` methods to close / dismiss modals from "inside" of your component. + * + * Also see the [`NgbModalOptions`](#/components/modal/api#NgbModalOptions) for the list of supported options. + * @param {?} content + * @param {?=} options + * @return {?} + */ + function (content, options) { + if (options === void 0) { options = {}; } + /** @type {?} */ + var combinedOptions = Object.assign({}, this._config, options); + return this._modalStack.open(this._moduleCFR, this._injector, content, combinedOptions); + }; + /** + * Dismisses all currently displayed modal windows with the supplied reason. + * + * @since 3.1.0 + */ + /** + * Dismisses all currently displayed modal windows with the supplied reason. + * + * \@since 3.1.0 + * @param {?=} reason + * @return {?} + */ + NgbModal.prototype.dismissAll = /** + * Dismisses all currently displayed modal windows with the supplied reason. + * + * \@since 3.1.0 + * @param {?=} reason + * @return {?} + */ + function (reason) { this._modalStack.dismissAll(reason); }; + /** + * Indicates if there are currently any open modal windows in the application. + * + * @since 3.3.0 + */ + /** + * Indicates if there are currently any open modal windows in the application. + * + * \@since 3.3.0 + * @return {?} + */ + NgbModal.prototype.hasOpenModals = /** + * Indicates if there are currently any open modal windows in the application. + * + * \@since 3.3.0 + * @return {?} + */ + function () { return this._modalStack.hasOpenModals(); }; + NgbModal.decorators = [ + { type: core.Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ + NgbModal.ctorParameters = function () { return [ + { type: core.ComponentFactoryResolver }, + { type: core.Injector }, + { type: NgbModalStack }, + { type: NgbModalConfig } + ]; }; + /** @nocollapse */ NgbModal.ngInjectableDef = core.ɵɵdefineInjectable({ factory: function NgbModal_Factory() { return new NgbModal(core.ɵɵinject(core.ComponentFactoryResolver), core.ɵɵinject(core.INJECTOR), core.ɵɵinject(NgbModalStack), core.ɵɵinject(NgbModalConfig)); }, token: NgbModal, providedIn: "root" }); + return NgbModal; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + var NgbModalModule = /** @class */ (function () { + function NgbModalModule() { + } + NgbModalModule.decorators = [ + { type: core.NgModule, args: [{ + declarations: [NgbModalBackdrop, NgbModalWindow], + entryComponents: [NgbModalBackdrop, NgbModalWindow], + providers: [NgbModal] + },] } + ]; + return NgbModalModule; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** + * A configuration service for the [`NgbPagination`](#/components/pagination/api#NgbPagination) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the paginations used in the application. + */ + var NgbPaginationConfig = /** @class */ (function () { + function NgbPaginationConfig() { + this.disabled = false; + this.boundaryLinks = false; + this.directionLinks = true; + this.ellipses = true; + this.maxSize = 0; + this.pageSize = 10; + this.rotate = false; + } + NgbPaginationConfig.decorators = [ + { type: core.Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ NgbPaginationConfig.ngInjectableDef = core.ɵɵdefineInjectable({ factory: function NgbPaginationConfig_Factory() { return new NgbPaginationConfig(); }, token: NgbPaginationConfig, providedIn: "root" }); + return NgbPaginationConfig; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** + * A directive to match the 'ellipsis' link template + * + * \@since 4.1.0 + */ + var NgbPaginationEllipsis = /** @class */ (function () { + function NgbPaginationEllipsis(templateRef) { + this.templateRef = templateRef; + } + NgbPaginationEllipsis.decorators = [ + { type: core.Directive, args: [{ selector: 'ng-template[ngbPaginationEllipsis]' },] } + ]; + /** @nocollapse */ + NgbPaginationEllipsis.ctorParameters = function () { return [ + { type: core.TemplateRef } + ]; }; + return NgbPaginationEllipsis; + }()); + /** + * A directive to match the 'first' link template + * + * \@since 4.1.0 + */ + var NgbPaginationFirst = /** @class */ (function () { + function NgbPaginationFirst(templateRef) { + this.templateRef = templateRef; + } + NgbPaginationFirst.decorators = [ + { type: core.Directive, args: [{ selector: 'ng-template[ngbPaginationFirst]' },] } + ]; + /** @nocollapse */ + NgbPaginationFirst.ctorParameters = function () { return [ + { type: core.TemplateRef } + ]; }; + return NgbPaginationFirst; + }()); + /** + * A directive to match the 'last' link template + * + * \@since 4.1.0 + */ + var NgbPaginationLast = /** @class */ (function () { + function NgbPaginationLast(templateRef) { + this.templateRef = templateRef; + } + NgbPaginationLast.decorators = [ + { type: core.Directive, args: [{ selector: 'ng-template[ngbPaginationLast]' },] } + ]; + /** @nocollapse */ + NgbPaginationLast.ctorParameters = function () { return [ + { type: core.TemplateRef } + ]; }; + return NgbPaginationLast; + }()); + /** + * A directive to match the 'next' link template + * + * \@since 4.1.0 + */ + var NgbPaginationNext = /** @class */ (function () { + function NgbPaginationNext(templateRef) { + this.templateRef = templateRef; + } + NgbPaginationNext.decorators = [ + { type: core.Directive, args: [{ selector: 'ng-template[ngbPaginationNext]' },] } + ]; + /** @nocollapse */ + NgbPaginationNext.ctorParameters = function () { return [ + { type: core.TemplateRef } + ]; }; + return NgbPaginationNext; + }()); + /** + * A directive to match the page 'number' link template + * + * \@since 4.1.0 + */ + var NgbPaginationNumber = /** @class */ (function () { + function NgbPaginationNumber(templateRef) { + this.templateRef = templateRef; + } + NgbPaginationNumber.decorators = [ + { type: core.Directive, args: [{ selector: 'ng-template[ngbPaginationNumber]' },] } + ]; + /** @nocollapse */ + NgbPaginationNumber.ctorParameters = function () { return [ + { type: core.TemplateRef } + ]; }; + return NgbPaginationNumber; + }()); + /** + * A directive to match the 'previous' link template + * + * \@since 4.1.0 + */ + var NgbPaginationPrevious = /** @class */ (function () { + function NgbPaginationPrevious(templateRef) { + this.templateRef = templateRef; + } + NgbPaginationPrevious.decorators = [ + { type: core.Directive, args: [{ selector: 'ng-template[ngbPaginationPrevious]' },] } + ]; + /** @nocollapse */ + NgbPaginationPrevious.ctorParameters = function () { return [ + { type: core.TemplateRef } + ]; }; + return NgbPaginationPrevious; + }()); + /** + * A component that displays page numbers and allows to customize them in several ways. + */ + var NgbPagination = /** @class */ (function () { + function NgbPagination(config) { + this.pageCount = 0; + this.pages = []; + /** + * The current page. + * + * Page numbers start with `1`. + */ + this.page = 1; + /** + * An event fired when the page is changed. Will fire only if collection size is set and all values are valid. + * + * Event payload is the number of the newly selected page. + * + * Page numbers start with `1`. + */ + this.pageChange = new core.EventEmitter(true); + this.disabled = config.disabled; + this.boundaryLinks = config.boundaryLinks; + this.directionLinks = config.directionLinks; + this.ellipses = config.ellipses; + this.maxSize = config.maxSize; + this.pageSize = config.pageSize; + this.rotate = config.rotate; + this.size = config.size; + } + /** + * @return {?} + */ + NgbPagination.prototype.hasPrevious = /** + * @return {?} + */ + function () { return this.page > 1; }; + /** + * @return {?} + */ + NgbPagination.prototype.hasNext = /** + * @return {?} + */ + function () { return this.page < this.pageCount; }; + /** + * @return {?} + */ + NgbPagination.prototype.nextDisabled = /** + * @return {?} + */ + function () { return !this.hasNext() || this.disabled; }; + /** + * @return {?} + */ + NgbPagination.prototype.previousDisabled = /** + * @return {?} + */ + function () { return !this.hasPrevious() || this.disabled; }; + /** + * @param {?} pageNumber + * @return {?} + */ + NgbPagination.prototype.selectPage = /** + * @param {?} pageNumber + * @return {?} + */ + function (pageNumber) { this._updatePages(pageNumber); }; + /** + * @param {?} changes + * @return {?} + */ + NgbPagination.prototype.ngOnChanges = /** + * @param {?} changes + * @return {?} + */ + function (changes) { this._updatePages(this.page); }; + /** + * @param {?} pageNumber + * @return {?} + */ + NgbPagination.prototype.isEllipsis = /** + * @param {?} pageNumber + * @return {?} + */ + function (pageNumber) { return pageNumber === -1; }; + /** + * Appends ellipses and first/last page number to the displayed pages + */ + /** + * Appends ellipses and first/last page number to the displayed pages + * @private + * @param {?} start + * @param {?} end + * @return {?} + */ + NgbPagination.prototype._applyEllipses = /** + * Appends ellipses and first/last page number to the displayed pages + * @private + * @param {?} start + * @param {?} end + * @return {?} + */ + function (start, end) { + if (this.ellipses) { + if (start > 0) { + if (start > 1) { + this.pages.unshift(-1); + } + this.pages.unshift(1); + } + if (end < this.pageCount) { + if (end < (this.pageCount - 1)) { + this.pages.push(-1); + } + this.pages.push(this.pageCount); + } + } + }; + /** + * Rotates page numbers based on maxSize items visible. + * Currently selected page stays in the middle: + * + * Ex. for selected page = 6: + * [5,*6*,7] for maxSize = 3 + * [4,5,*6*,7] for maxSize = 4 + */ + /** + * Rotates page numbers based on maxSize items visible. + * Currently selected page stays in the middle: + * + * Ex. for selected page = 6: + * [5,*6*,7] for maxSize = 3 + * [4,5,*6*,7] for maxSize = 4 + * @private + * @return {?} + */ + NgbPagination.prototype._applyRotation = /** + * Rotates page numbers based on maxSize items visible. + * Currently selected page stays in the middle: + * + * Ex. for selected page = 6: + * [5,*6*,7] for maxSize = 3 + * [4,5,*6*,7] for maxSize = 4 + * @private + * @return {?} + */ + function () { + /** @type {?} */ + var start = 0; + /** @type {?} */ + var end = this.pageCount; + /** @type {?} */ + var leftOffset = Math.floor(this.maxSize / 2); + /** @type {?} */ + var rightOffset = this.maxSize % 2 === 0 ? leftOffset - 1 : leftOffset; + if (this.page <= leftOffset) { + // very beginning, no rotation -> [0..maxSize] + end = this.maxSize; + } + else if (this.pageCount - this.page < leftOffset) { + // very end, no rotation -> [len-maxSize..len] + start = this.pageCount - this.maxSize; + } + else { + // rotate + start = this.page - leftOffset - 1; + end = this.page + rightOffset; + } + return [start, end]; + }; + /** + * Paginates page numbers based on maxSize items per page. + */ + /** + * Paginates page numbers based on maxSize items per page. + * @private + * @return {?} + */ + NgbPagination.prototype._applyPagination = /** + * Paginates page numbers based on maxSize items per page. + * @private + * @return {?} + */ + function () { + /** @type {?} */ + var page = Math.ceil(this.page / this.maxSize) - 1; + /** @type {?} */ + var start = page * this.maxSize; + /** @type {?} */ + var end = start + this.maxSize; + return [start, end]; + }; + /** + * @private + * @param {?} newPageNo + * @return {?} + */ + NgbPagination.prototype._setPageInRange = /** + * @private + * @param {?} newPageNo + * @return {?} + */ + function (newPageNo) { + /** @type {?} */ + var prevPageNo = this.page; + this.page = getValueInRange(newPageNo, this.pageCount, 1); + if (this.page !== prevPageNo && isNumber(this.collectionSize)) { + this.pageChange.emit(this.page); + } + }; + /** + * @private + * @param {?} newPage + * @return {?} + */ + NgbPagination.prototype._updatePages = /** + * @private + * @param {?} newPage + * @return {?} + */ + function (newPage) { + var _a, _b; + this.pageCount = Math.ceil(this.collectionSize / this.pageSize); + if (!isNumber(this.pageCount)) { + this.pageCount = 0; + } + // fill-in model needed to render pages + this.pages.length = 0; + for (var i = 1; i <= this.pageCount; i++) { + this.pages.push(i); + } + // set page within 1..max range + this._setPageInRange(newPage); + // apply maxSize if necessary + if (this.maxSize > 0 && this.pageCount > this.maxSize) { + /** @type {?} */ + var start = 0; + /** @type {?} */ + var end = this.pageCount; + // either paginating or rotating page numbers + if (this.rotate) { + _a = __read(this._applyRotation(), 2), start = _a[0], end = _a[1]; + } + else { + _b = __read(this._applyPagination(), 2), start = _b[0], end = _b[1]; + } + this.pages = this.pages.slice(start, end); + // adding ellipses + this._applyEllipses(start, end); + } + }; + NgbPagination.decorators = [ + { type: core.Component, args: [{ + selector: 'ngb-pagination', + changeDetection: core.ChangeDetectionStrategy.OnPush, + host: { 'role': 'navigation' }, + template: "\n ««\n «\n »\n »»\n ...\n \n {{ page }}\n (current)\n \n \n " + }] } + ]; + /** @nocollapse */ + NgbPagination.ctorParameters = function () { return [ + { type: NgbPaginationConfig } + ]; }; + NgbPagination.propDecorators = { + tplEllipsis: [{ type: core.ContentChild, args: [NgbPaginationEllipsis, { static: false },] }], + tplFirst: [{ type: core.ContentChild, args: [NgbPaginationFirst, { static: false },] }], + tplLast: [{ type: core.ContentChild, args: [NgbPaginationLast, { static: false },] }], + tplNext: [{ type: core.ContentChild, args: [NgbPaginationNext, { static: false },] }], + tplNumber: [{ type: core.ContentChild, args: [NgbPaginationNumber, { static: false },] }], + tplPrevious: [{ type: core.ContentChild, args: [NgbPaginationPrevious, { static: false },] }], + disabled: [{ type: core.Input }], + boundaryLinks: [{ type: core.Input }], + directionLinks: [{ type: core.Input }], + ellipses: [{ type: core.Input }], + rotate: [{ type: core.Input }], + collectionSize: [{ type: core.Input }], + maxSize: [{ type: core.Input }], + page: [{ type: core.Input }], + pageSize: [{ type: core.Input }], + pageChange: [{ type: core.Output }], + size: [{ type: core.Input }] + }; + return NgbPagination; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** @type {?} */ + var DIRECTIVES = [ + NgbPagination, NgbPaginationEllipsis, NgbPaginationFirst, NgbPaginationLast, NgbPaginationNext, NgbPaginationNumber, + NgbPaginationPrevious + ]; + var NgbPaginationModule = /** @class */ (function () { + function NgbPaginationModule() { + } + NgbPaginationModule.decorators = [ + { type: core.NgModule, args: [{ declarations: DIRECTIVES, exports: DIRECTIVES, imports: [common.CommonModule] },] } + ]; + return NgbPaginationModule; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + var Trigger = /** @class */ (function () { + function Trigger(open, close) { + this.open = open; + this.close = close; + if (!close) { + this.close = open; + } + } + /** + * @return {?} + */ + Trigger.prototype.isManual = /** + * @return {?} + */ + function () { return this.open === 'manual' || this.close === 'manual'; }; + return Trigger; + }()); + /** @type {?} */ + var DEFAULT_ALIASES = { + 'hover': ['mouseenter', 'mouseleave'], + 'focus': ['focusin', 'focusout'], + }; + /** + * @param {?} triggers + * @param {?=} aliases + * @return {?} + */ + function parseTriggers(triggers, aliases) { + if (aliases === void 0) { aliases = DEFAULT_ALIASES; } + /** @type {?} */ + var trimmedTriggers = (triggers || '').trim(); + if (trimmedTriggers.length === 0) { + return []; + } + /** @type {?} */ + var parsedTriggers = trimmedTriggers.split(/\s+/).map((/** + * @param {?} trigger + * @return {?} + */ + function (trigger) { return trigger.split(':'); })).map((/** + * @param {?} triggerPair + * @return {?} + */ + function (triggerPair) { + /** @type {?} */ + var alias = aliases[triggerPair[0]] || triggerPair; + return new Trigger(alias[0], alias[1]); + })); + /** @type {?} */ + var manualTriggers = parsedTriggers.filter((/** + * @param {?} triggerPair + * @return {?} + */ + function (triggerPair) { return triggerPair.isManual(); })); + if (manualTriggers.length > 1) { + throw 'Triggers parse error: only one manual trigger is allowed'; + } + if (manualTriggers.length === 1 && parsedTriggers.length > 1) { + throw 'Triggers parse error: manual trigger can\'t be mixed with other triggers'; + } + return parsedTriggers; + } + /** + * @param {?} renderer + * @param {?} nativeElement + * @param {?} triggers + * @param {?} isOpenedFn + * @return {?} + */ + function observeTriggers(renderer, nativeElement, triggers, isOpenedFn) { + return new rxjs.Observable((/** + * @param {?} subscriber + * @return {?} + */ + function (subscriber) { + /** @type {?} */ + var listeners = []; + /** @type {?} */ + var openFn = (/** + * @return {?} + */ + function () { return subscriber.next(true); }); + /** @type {?} */ + var closeFn = (/** + * @return {?} + */ + function () { return subscriber.next(false); }); + /** @type {?} */ + var toggleFn = (/** + * @return {?} + */ + function () { return subscriber.next(!isOpenedFn()); }); + triggers.forEach((/** + * @param {?} trigger + * @return {?} + */ + function (trigger) { + if (trigger.open === trigger.close) { + listeners.push(renderer.listen(nativeElement, trigger.open, toggleFn)); + } + else { + listeners.push(renderer.listen(nativeElement, trigger.open, openFn), renderer.listen(nativeElement, trigger.close, closeFn)); + } + })); + return (/** + * @return {?} + */ + function () { listeners.forEach((/** + * @param {?} unsubscribeFn + * @return {?} + */ + function (unsubscribeFn) { return unsubscribeFn(); })); }); + })); + } + /** @type {?} */ + var delayOrNoop = (/** + * @template T + * @param {?} time + * @return {?} + */ + function (time) { return time > 0 ? operators.delay(time) : (/** + * @param {?} a + * @return {?} + */ + function (a) { return a; }); }); + /** + * @param {?} openDelay + * @param {?} closeDelay + * @param {?} isOpenedFn + * @return {?} + */ + function triggerDelay(openDelay, closeDelay, isOpenedFn) { + return (/** + * @param {?} input$ + * @return {?} + */ + function (input$) { + /** @type {?} */ + var pending = null; + /** @type {?} */ + var filteredInput$ = input$.pipe(operators.map((/** + * @param {?} open + * @return {?} + */ + function (open) { return ({ open: open }); })), operators.filter((/** + * @param {?} event + * @return {?} + */ + function (event) { + /** @type {?} */ + var currentlyOpen = isOpenedFn(); + if (currentlyOpen !== event.open && (!pending || pending.open === currentlyOpen)) { + pending = event; + return true; + } + if (pending && pending.open !== event.open) { + pending = null; + } + return false; + })), operators.share()); + /** @type {?} */ + var delayedOpen$ = filteredInput$.pipe(operators.filter((/** + * @param {?} event + * @return {?} + */ + function (event) { return event.open; })), delayOrNoop(openDelay)); + /** @type {?} */ + var delayedClose$ = filteredInput$.pipe(operators.filter((/** + * @param {?} event + * @return {?} + */ + function (event) { return !event.open; })), delayOrNoop(closeDelay)); + return rxjs.merge(delayedOpen$, delayedClose$) + .pipe(operators.filter((/** + * @param {?} event + * @return {?} + */ + function (event) { + if (event === pending) { + pending = null; + return event.open !== isOpenedFn(); + } + return false; + })), operators.map((/** + * @param {?} event + * @return {?} + */ + function (event) { return event.open; }))); + }); + } + /** + * @param {?} renderer + * @param {?} nativeElement + * @param {?} triggers + * @param {?} isOpenedFn + * @param {?} openFn + * @param {?} closeFn + * @param {?=} openDelay + * @param {?=} closeDelay + * @return {?} + */ + function listenToTriggers(renderer, nativeElement, triggers, isOpenedFn, openFn, closeFn, openDelay, closeDelay) { + if (openDelay === void 0) { openDelay = 0; } + if (closeDelay === void 0) { closeDelay = 0; } + /** @type {?} */ + var parsedTriggers = parseTriggers(triggers); + if (parsedTriggers.length === 1 && parsedTriggers[0].isManual()) { + return (/** + * @return {?} + */ + function () { }); + } + /** @type {?} */ + var subscription = observeTriggers(renderer, nativeElement, parsedTriggers, isOpenedFn) + .pipe(triggerDelay(openDelay, closeDelay, isOpenedFn)) + .subscribe((/** + * @param {?} open + * @return {?} + */ + function (open) { return (open ? openFn() : closeFn()); })); + return (/** + * @return {?} + */ + function () { return subscription.unsubscribe(); }); + } + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** + * A configuration service for the [`NgbPopover`](#/components/popover/api#NgbPopover) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the popovers used in the application. + */ + var NgbPopoverConfig = /** @class */ (function () { + function NgbPopoverConfig() { + this.autoClose = true; + this.placement = 'auto'; + this.triggers = 'click'; + this.disablePopover = false; + this.openDelay = 0; + this.closeDelay = 0; + } + NgbPopoverConfig.decorators = [ + { type: core.Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ NgbPopoverConfig.ngInjectableDef = core.ɵɵdefineInjectable({ factory: function NgbPopoverConfig_Factory() { return new NgbPopoverConfig(); }, token: NgbPopoverConfig, providedIn: "root" }); + return NgbPopoverConfig; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** @type {?} */ + var nextId$3 = 0; + var NgbPopoverWindow = /** @class */ (function () { + function NgbPopoverWindow() { + } + /** + * @return {?} + */ + NgbPopoverWindow.prototype.isTitleTemplate = /** + * @return {?} + */ + function () { return this.title instanceof core.TemplateRef; }; + NgbPopoverWindow.decorators = [ + { type: core.Component, args: [{ + selector: 'ngb-popover-window', + changeDetection: core.ChangeDetectionStrategy.OnPush, + encapsulation: core.ViewEncapsulation.None, + host: { '[class]': '"popover" + (popoverClass ? " " + popoverClass : "")', 'role': 'tooltip', '[id]': 'id' }, + template: "\n
\n

\n {{title}}\n \n

\n
", + styles: ["ngb-popover-window.bs-popover-bottom>.arrow,ngb-popover-window.bs-popover-top>.arrow{left:50%;margin-left:-.5rem}ngb-popover-window.bs-popover-bottom-left>.arrow,ngb-popover-window.bs-popover-top-left>.arrow{left:2em}ngb-popover-window.bs-popover-bottom-right>.arrow,ngb-popover-window.bs-popover-top-right>.arrow{left:auto;right:2em}ngb-popover-window.bs-popover-left>.arrow,ngb-popover-window.bs-popover-right>.arrow{top:50%;margin-top:-.5rem}ngb-popover-window.bs-popover-left-top>.arrow,ngb-popover-window.bs-popover-right-top>.arrow{top:.7em}ngb-popover-window.bs-popover-left-bottom>.arrow,ngb-popover-window.bs-popover-right-bottom>.arrow{top:auto;bottom:.7em}"] + }] } + ]; + NgbPopoverWindow.propDecorators = { + title: [{ type: core.Input }], + id: [{ type: core.Input }], + popoverClass: [{ type: core.Input }], + context: [{ type: core.Input }] + }; + return NgbPopoverWindow; + }()); + /** + * A lightweight and extensible directive for fancy popover creation. + */ + var NgbPopover = /** @class */ (function () { + function NgbPopover(_elementRef, _renderer, injector, componentFactoryResolver, viewContainerRef, config, _ngZone, _document, _changeDetector, _applicationRef) { + var _this = this; + this._elementRef = _elementRef; + this._renderer = _renderer; + this._ngZone = _ngZone; + this._document = _document; + this._changeDetector = _changeDetector; + this._applicationRef = _applicationRef; + /** + * An event emitted when the popover is shown. Contains no payload. + */ + this.shown = new core.EventEmitter(); + /** + * An event emitted when the popover is hidden. Contains no payload. + */ + this.hidden = new core.EventEmitter(); + this._ngbPopoverWindowId = "ngb-popover-" + nextId$3++; + this.autoClose = config.autoClose; + this.placement = config.placement; + this.triggers = config.triggers; + this.container = config.container; + this.disablePopover = config.disablePopover; + this.popoverClass = config.popoverClass; + this.openDelay = config.openDelay; + this.closeDelay = config.closeDelay; + this._popupService = new PopupService(NgbPopoverWindow, injector, viewContainerRef, _renderer, componentFactoryResolver, _applicationRef); + this._zoneSubscription = _ngZone.onStable.subscribe((/** + * @return {?} + */ + function () { + if (_this._windowRef) { + positionElements(_this._elementRef.nativeElement, _this._windowRef.location.nativeElement, _this.placement, _this.container === 'body', 'bs-popover'); + } + })); + } + /** + * @private + * @return {?} + */ + NgbPopover.prototype._isDisabled = /** + * @private + * @return {?} + */ + function () { + if (this.disablePopover) { + return true; + } + if (!this.ngbPopover && !this.popoverTitle) { + return true; + } + return false; + }; + /** + * Opens the popover. + * + * This is considered to be a "manual" triggering. + * The `context` is an optional value to be injected into the popover template when it is created. + */ + /** + * Opens the popover. + * + * This is considered to be a "manual" triggering. + * The `context` is an optional value to be injected into the popover template when it is created. + * @param {?=} context + * @return {?} + */ + NgbPopover.prototype.open = /** + * Opens the popover. + * + * This is considered to be a "manual" triggering. + * The `context` is an optional value to be injected into the popover template when it is created. + * @param {?=} context + * @return {?} + */ + function (context) { + var _this = this; + if (!this._windowRef && !this._isDisabled()) { + this._windowRef = this._popupService.open(this.ngbPopover, context); + this._windowRef.instance.title = this.popoverTitle; + this._windowRef.instance.context = context; + this._windowRef.instance.popoverClass = this.popoverClass; + this._windowRef.instance.id = this._ngbPopoverWindowId; + this._renderer.setAttribute(this._elementRef.nativeElement, 'aria-describedby', this._ngbPopoverWindowId); + if (this.container === 'body') { + this._document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement); + } + // We need to detect changes, because we don't know where .open() might be called from. + // Ex. opening popover from one of lifecycle hooks that run after the CD + // (say from ngAfterViewInit) will result in 'ExpressionHasChanged' exception + this._windowRef.changeDetectorRef.detectChanges(); + // We need to mark for check, because popover won't work inside the OnPush component. + // Ex. when we use expression like `{{ popover.isOpen() : 'opened' : 'closed' }}` + // inside the template of an OnPush component and we change the popover from + // open -> closed, the expression in question won't be updated unless we explicitly + // mark the parent component to be checked. + this._windowRef.changeDetectorRef.markForCheck(); + ngbAutoClose(this._ngZone, this._document, this.autoClose, (/** + * @return {?} + */ + function () { return _this.close(); }), this.hidden, [this._windowRef.location.nativeElement]); + this.shown.emit(); + } + }; + /** + * Closes the popover. + * + * This is considered to be a "manual" triggering of the popover. + */ + /** + * Closes the popover. + * + * This is considered to be a "manual" triggering of the popover. + * @return {?} + */ + NgbPopover.prototype.close = /** + * Closes the popover. + * + * This is considered to be a "manual" triggering of the popover. + * @return {?} + */ + function () { + if (this._windowRef) { + this._renderer.removeAttribute(this._elementRef.nativeElement, 'aria-describedby'); + this._popupService.close(); + this._windowRef = null; + this.hidden.emit(); + this._changeDetector.markForCheck(); + } + }; + /** + * Toggles the popover. + * + * This is considered to be a "manual" triggering of the popover. + */ + /** + * Toggles the popover. + * + * This is considered to be a "manual" triggering of the popover. + * @return {?} + */ + NgbPopover.prototype.toggle = /** + * Toggles the popover. + * + * This is considered to be a "manual" triggering of the popover. + * @return {?} + */ + function () { + if (this._windowRef) { + this.close(); + } + else { + this.open(); + } + }; + /** + * Returns `true`, if the popover is currently shown. + */ + /** + * Returns `true`, if the popover is currently shown. + * @return {?} + */ + NgbPopover.prototype.isOpen = /** + * Returns `true`, if the popover is currently shown. + * @return {?} + */ + function () { return this._windowRef != null; }; + /** + * @return {?} + */ + NgbPopover.prototype.ngOnInit = /** + * @return {?} + */ + function () { + this._unregisterListenersFn = listenToTriggers(this._renderer, this._elementRef.nativeElement, this.triggers, this.isOpen.bind(this), this.open.bind(this), this.close.bind(this), +this.openDelay, +this.closeDelay); + }; + /** + * @param {?} changes + * @return {?} + */ + NgbPopover.prototype.ngOnChanges = /** + * @param {?} changes + * @return {?} + */ + function (changes) { + // close popover if title and content become empty, or disablePopover set to true + if ((changes['ngbPopover'] || changes['popoverTitle'] || changes['disablePopover']) && this._isDisabled()) { + this.close(); + } + }; + /** + * @return {?} + */ + NgbPopover.prototype.ngOnDestroy = /** + * @return {?} + */ + function () { + this.close(); + // This check is needed as it might happen that ngOnDestroy is called before ngOnInit + // under certain conditions, see: https://github.com/ng-bootstrap/ng-bootstrap/issues/2199 + if (this._unregisterListenersFn) { + this._unregisterListenersFn(); + } + this._zoneSubscription.unsubscribe(); + }; + NgbPopover.decorators = [ + { type: core.Directive, args: [{ selector: '[ngbPopover]', exportAs: 'ngbPopover' },] } + ]; + /** @nocollapse */ + NgbPopover.ctorParameters = function () { return [ + { type: core.ElementRef }, + { type: core.Renderer2 }, + { type: core.Injector }, + { type: core.ComponentFactoryResolver }, + { type: core.ViewContainerRef }, + { type: NgbPopoverConfig }, + { type: core.NgZone }, + { type: undefined, decorators: [{ type: core.Inject, args: [common.DOCUMENT,] }] }, + { type: core.ChangeDetectorRef }, + { type: core.ApplicationRef } + ]; }; + NgbPopover.propDecorators = { + autoClose: [{ type: core.Input }], + ngbPopover: [{ type: core.Input }], + popoverTitle: [{ type: core.Input }], + placement: [{ type: core.Input }], + triggers: [{ type: core.Input }], + container: [{ type: core.Input }], + disablePopover: [{ type: core.Input }], + popoverClass: [{ type: core.Input }], + openDelay: [{ type: core.Input }], + closeDelay: [{ type: core.Input }], + shown: [{ type: core.Output }], + hidden: [{ type: core.Output }] + }; + return NgbPopover; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + var NgbPopoverModule = /** @class */ (function () { + function NgbPopoverModule() { + } + NgbPopoverModule.decorators = [ + { type: core.NgModule, args: [{ + declarations: [NgbPopover, NgbPopoverWindow], + exports: [NgbPopover], + imports: [common.CommonModule], + entryComponents: [NgbPopoverWindow] + },] } + ]; + return NgbPopoverModule; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** + * A configuration service for the [`NgbProgressbar`](#/components/progressbar/api#NgbProgressbar) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the progress bars used in the application. + */ + var NgbProgressbarConfig = /** @class */ (function () { + function NgbProgressbarConfig() { + this.max = 100; + this.animated = false; + this.striped = false; + this.showValue = false; + } + NgbProgressbarConfig.decorators = [ + { type: core.Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ NgbProgressbarConfig.ngInjectableDef = core.ɵɵdefineInjectable({ factory: function NgbProgressbarConfig_Factory() { return new NgbProgressbarConfig(); }, token: NgbProgressbarConfig, providedIn: "root" }); + return NgbProgressbarConfig; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** + * A directive that provides feedback on the progress of a workflow or an action. + */ + var NgbProgressbar = /** @class */ (function () { + function NgbProgressbar(config) { + /** + * The current value for the progress bar. + * + * Should be in the `[0, max]` range. + */ + this.value = 0; + this.max = config.max; + this.animated = config.animated; + this.striped = config.striped; + this.type = config.type; + this.showValue = config.showValue; + this.height = config.height; + } + /** + * @return {?} + */ + NgbProgressbar.prototype.getValue = /** + * @return {?} + */ + function () { return getValueInRange(this.value, this.max); }; + /** + * @return {?} + */ + NgbProgressbar.prototype.getPercentValue = /** + * @return {?} + */ + function () { return 100 * this.getValue() / this.max; }; + NgbProgressbar.decorators = [ + { type: core.Component, args: [{ + selector: 'ngb-progressbar', + changeDetection: core.ChangeDetectionStrategy.OnPush, + template: "\n
\n
\n {{getPercentValue()}}%\n
\n
\n " + }] } + ]; + /** @nocollapse */ + NgbProgressbar.ctorParameters = function () { return [ + { type: NgbProgressbarConfig } + ]; }; + NgbProgressbar.propDecorators = { + max: [{ type: core.Input }], + animated: [{ type: core.Input }], + striped: [{ type: core.Input }], + showValue: [{ type: core.Input }], + type: [{ type: core.Input }], + value: [{ type: core.Input }], + height: [{ type: core.Input }] + }; + return NgbProgressbar; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + var NgbProgressbarModule = /** @class */ (function () { + function NgbProgressbarModule() { + } + NgbProgressbarModule.decorators = [ + { type: core.NgModule, args: [{ declarations: [NgbProgressbar], exports: [NgbProgressbar], imports: [common.CommonModule] },] } + ]; + return NgbProgressbarModule; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** + * A configuration service for the [`NgbRating`](#/components/rating/api#NgbRating) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the ratings used in the application. + */ + var NgbRatingConfig = /** @class */ (function () { + function NgbRatingConfig() { + this.max = 10; + this.readonly = false; + this.resettable = false; + } + NgbRatingConfig.decorators = [ + { type: core.Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ NgbRatingConfig.ngInjectableDef = core.ɵɵdefineInjectable({ factory: function NgbRatingConfig_Factory() { return new NgbRatingConfig(); }, token: NgbRatingConfig, providedIn: "root" }); + return NgbRatingConfig; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** @type {?} */ + var NGB_RATING_VALUE_ACCESSOR = { + provide: forms.NG_VALUE_ACCESSOR, + useExisting: core.forwardRef((/** + * @return {?} + */ + function () { return NgbRating; })), + multi: true + }; + /** + * A directive that helps visualising and interacting with a star rating bar. + */ + var NgbRating = /** @class */ (function () { + function NgbRating(config, _changeDetectorRef) { + this._changeDetectorRef = _changeDetectorRef; + this.contexts = []; + this.disabled = false; + /** + * An event emitted when the user is hovering over a given rating. + * + * Event payload equals to the rating being hovered over. + */ + this.hover = new core.EventEmitter(); + /** + * An event emitted when the user stops hovering over a given rating. + * + * Event payload equals to the rating of the last item being hovered over. + */ + this.leave = new core.EventEmitter(); + /** + * An event emitted when the user selects a new rating. + * + * Event payload equals to the newly selected rating. + */ + this.rateChange = new core.EventEmitter(true); + this.onChange = (/** + * @param {?} _ + * @return {?} + */ + function (_) { }); + this.onTouched = (/** + * @return {?} + */ + function () { }); + this.max = config.max; + this.readonly = config.readonly; + } + /** + * @return {?} + */ + NgbRating.prototype.ariaValueText = /** + * @return {?} + */ + function () { return this.nextRate + " out of " + this.max; }; + /** + * @param {?} value + * @return {?} + */ + NgbRating.prototype.enter = /** + * @param {?} value + * @return {?} + */ + function (value) { + if (!this.readonly && !this.disabled) { + this._updateState(value); + } + this.hover.emit(value); + }; + /** + * @return {?} + */ + NgbRating.prototype.handleBlur = /** + * @return {?} + */ + function () { this.onTouched(); }; + /** + * @param {?} value + * @return {?} + */ + NgbRating.prototype.handleClick = /** + * @param {?} value + * @return {?} + */ + function (value) { this.update(this.resettable && this.rate === value ? 0 : value); }; + /** + * @param {?} event + * @return {?} + */ + NgbRating.prototype.handleKeyDown = /** + * @param {?} event + * @return {?} + */ + function (event) { + // tslint:disable-next-line:deprecation + switch (event.which) { + case Key.ArrowDown: + case Key.ArrowLeft: + this.update(this.rate - 1); + break; + case Key.ArrowUp: + case Key.ArrowRight: + this.update(this.rate + 1); + break; + case Key.Home: + this.update(0); + break; + case Key.End: + this.update(this.max); + break; + default: + return; + } + // note 'return' in default case + event.preventDefault(); + }; + /** + * @param {?} changes + * @return {?} + */ + NgbRating.prototype.ngOnChanges = /** + * @param {?} changes + * @return {?} + */ + function (changes) { + if (changes['rate']) { + this.update(this.rate); + } + }; + /** + * @return {?} + */ + NgbRating.prototype.ngOnInit = /** + * @return {?} + */ + function () { + this.contexts = Array.from({ length: this.max }, (/** + * @param {?} v + * @param {?} k + * @return {?} + */ + function (v, k) { return ({ fill: 0, index: k }); })); + this._updateState(this.rate); + }; + /** + * @param {?} fn + * @return {?} + */ + NgbRating.prototype.registerOnChange = /** + * @param {?} fn + * @return {?} + */ + function (fn) { this.onChange = fn; }; + /** + * @param {?} fn + * @return {?} + */ + NgbRating.prototype.registerOnTouched = /** + * @param {?} fn + * @return {?} + */ + function (fn) { this.onTouched = fn; }; + /** + * @return {?} + */ + NgbRating.prototype.reset = /** + * @return {?} + */ + function () { + this.leave.emit(this.nextRate); + this._updateState(this.rate); + }; + /** + * @param {?} isDisabled + * @return {?} + */ + NgbRating.prototype.setDisabledState = /** + * @param {?} isDisabled + * @return {?} + */ + function (isDisabled) { this.disabled = isDisabled; }; + /** + * @param {?} value + * @param {?=} internalChange + * @return {?} + */ + NgbRating.prototype.update = /** + * @param {?} value + * @param {?=} internalChange + * @return {?} + */ + function (value, internalChange) { + if (internalChange === void 0) { internalChange = true; } + /** @type {?} */ + var newRate = getValueInRange(value, this.max, 0); + if (!this.readonly && !this.disabled && this.rate !== newRate) { + this.rate = newRate; + this.rateChange.emit(this.rate); + } + if (internalChange) { + this.onChange(this.rate); + this.onTouched(); + } + this._updateState(this.rate); + }; + /** + * @param {?} value + * @return {?} + */ + NgbRating.prototype.writeValue = /** + * @param {?} value + * @return {?} + */ + function (value) { + this.update(value, false); + this._changeDetectorRef.markForCheck(); + }; + /** + * @private + * @param {?} index + * @return {?} + */ + NgbRating.prototype._getFillValue = /** + * @private + * @param {?} index + * @return {?} + */ + function (index) { + /** @type {?} */ + var diff = this.nextRate - index; + if (diff >= 1) { + return 100; + } + if (diff < 1 && diff > 0) { + return parseInt((diff * 100).toFixed(2), 10); + } + return 0; + }; + /** + * @private + * @param {?} nextValue + * @return {?} + */ + NgbRating.prototype._updateState = /** + * @private + * @param {?} nextValue + * @return {?} + */ + function (nextValue) { + var _this = this; + this.nextRate = nextValue; + this.contexts.forEach((/** + * @param {?} context + * @param {?} index + * @return {?} + */ + function (context, index) { return context.fill = _this._getFillValue(index); })); + }; + NgbRating.decorators = [ + { type: core.Component, args: [{ + selector: 'ngb-rating', + changeDetection: core.ChangeDetectionStrategy.OnPush, + host: { + 'class': 'd-inline-flex', + 'tabindex': '0', + 'role': 'slider', + 'aria-valuemin': '0', + '[attr.aria-valuemax]': 'max', + '[attr.aria-valuenow]': 'nextRate', + '[attr.aria-valuetext]': 'ariaValueText()', + '[attr.aria-disabled]': 'readonly ? true : null', + '(blur)': 'handleBlur()', + '(keydown)': 'handleKeyDown($event)', + '(mouseleave)': 'reset()' + }, + template: "\n {{ fill === 100 ? '★' : '☆' }}\n \n ({{ index < nextRate ? '*' : ' ' }})\n \n \n \n \n \n ", + providers: [NGB_RATING_VALUE_ACCESSOR] + }] } + ]; + /** @nocollapse */ + NgbRating.ctorParameters = function () { return [ + { type: NgbRatingConfig }, + { type: core.ChangeDetectorRef } + ]; }; + NgbRating.propDecorators = { + max: [{ type: core.Input }], + rate: [{ type: core.Input }], + readonly: [{ type: core.Input }], + resettable: [{ type: core.Input }], + starTemplate: [{ type: core.Input }], + starTemplateFromContent: [{ type: core.ContentChild, args: [core.TemplateRef, { static: false },] }], + hover: [{ type: core.Output }], + leave: [{ type: core.Output }], + rateChange: [{ type: core.Output }] + }; + return NgbRating; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + var NgbRatingModule = /** @class */ (function () { + function NgbRatingModule() { + } + NgbRatingModule.decorators = [ + { type: core.NgModule, args: [{ declarations: [NgbRating], exports: [NgbRating], imports: [common.CommonModule] },] } + ]; + return NgbRatingModule; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** + * A configuration service for the [`NgbTabset`](#/components/tabset/api#NgbTabset) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the tabsets used in the application. + */ + var NgbTabsetConfig = /** @class */ (function () { + function NgbTabsetConfig() { + this.justify = 'start'; + this.orientation = 'horizontal'; + this.type = 'tabs'; + } + NgbTabsetConfig.decorators = [ + { type: core.Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ NgbTabsetConfig.ngInjectableDef = core.ɵɵdefineInjectable({ factory: function NgbTabsetConfig_Factory() { return new NgbTabsetConfig(); }, token: NgbTabsetConfig, providedIn: "root" }); + return NgbTabsetConfig; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** @type {?} */ + var nextId$4 = 0; + /** + * A directive to wrap tab titles that need to contain HTML markup or other directives. + * + * Alternatively you could use the `NgbTab.title` input for string titles. + */ + var NgbTabTitle = /** @class */ (function () { + function NgbTabTitle(templateRef) { + this.templateRef = templateRef; + } + NgbTabTitle.decorators = [ + { type: core.Directive, args: [{ selector: 'ng-template[ngbTabTitle]' },] } + ]; + /** @nocollapse */ + NgbTabTitle.ctorParameters = function () { return [ + { type: core.TemplateRef } + ]; }; + return NgbTabTitle; + }()); + /** + * A directive to wrap content to be displayed in a tab. + */ + var NgbTabContent = /** @class */ (function () { + function NgbTabContent(templateRef) { + this.templateRef = templateRef; + } + NgbTabContent.decorators = [ + { type: core.Directive, args: [{ selector: 'ng-template[ngbTabContent]' },] } + ]; + /** @nocollapse */ + NgbTabContent.ctorParameters = function () { return [ + { type: core.TemplateRef } + ]; }; + return NgbTabContent; + }()); + /** + * A directive representing an individual tab. + */ + var NgbTab = /** @class */ (function () { + function NgbTab() { + /** + * The tab identifier. + * + * Must be unique for the entire document for proper accessibility support. + */ + this.id = "ngb-tab-" + nextId$4++; + /** + * If `true`, the current tab is disabled and can't be toggled. + */ + this.disabled = false; + } + /** + * @return {?} + */ + NgbTab.prototype.ngAfterContentChecked = /** + * @return {?} + */ + function () { + // We are using @ContentChildren instead of @ContentChild as in the Angular version being used + // only @ContentChildren allows us to specify the {descendants: false} option. + // Without {descendants: false} we are hitting bugs described in: + // https://github.com/ng-bootstrap/ng-bootstrap/issues/2240 + this.titleTpl = this.titleTpls.first; + this.contentTpl = this.contentTpls.first; + }; + NgbTab.decorators = [ + { type: core.Directive, args: [{ selector: 'ngb-tab' },] } + ]; + NgbTab.propDecorators = { + id: [{ type: core.Input }], + title: [{ type: core.Input }], + disabled: [{ type: core.Input }], + titleTpls: [{ type: core.ContentChildren, args: [NgbTabTitle, { descendants: false },] }], + contentTpls: [{ type: core.ContentChildren, args: [NgbTabContent, { descendants: false },] }] + }; + return NgbTab; + }()); + /** + * A component that makes it easy to create tabbed interface. + */ + var NgbTabset = /** @class */ (function () { + function NgbTabset(config) { + /** + * If `true`, non-visible tabs content will be removed from DOM. Otherwise it will just be hidden. + */ + this.destroyOnHide = true; + /** + * A tab change event emitted right before the tab change happens. + * + * See [`NgbTabChangeEvent`](#/components/tabset/api#NgbTabChangeEvent) for payload details. + */ + this.tabChange = new core.EventEmitter(); + this.type = config.type; + this.justify = config.justify; + this.orientation = config.orientation; + } + Object.defineProperty(NgbTabset.prototype, "justify", { + /** + * The horizontal alignment of the tabs with flexbox utilities. + */ + set: /** + * The horizontal alignment of the tabs with flexbox utilities. + * @param {?} className + * @return {?} + */ + function (className) { + if (className === 'fill' || className === 'justified') { + this.justifyClass = "nav-" + className; + } + else { + this.justifyClass = "justify-content-" + className; + } + }, + enumerable: true, + configurable: true + }); + /** + * Selects the tab with the given id and shows its associated content panel. + * + * Any other tab that was previously selected becomes unselected and its associated pane is removed from DOM or + * hidden depending on the `destroyOnHide` value. + */ + /** + * Selects the tab with the given id and shows its associated content panel. + * + * Any other tab that was previously selected becomes unselected and its associated pane is removed from DOM or + * hidden depending on the `destroyOnHide` value. + * @param {?} tabId + * @return {?} + */ + NgbTabset.prototype.select = /** + * Selects the tab with the given id and shows its associated content panel. + * + * Any other tab that was previously selected becomes unselected and its associated pane is removed from DOM or + * hidden depending on the `destroyOnHide` value. + * @param {?} tabId + * @return {?} + */ + function (tabId) { + /** @type {?} */ + var selectedTab = this._getTabById(tabId); + if (selectedTab && !selectedTab.disabled && this.activeId !== selectedTab.id) { + /** @type {?} */ + var defaultPrevented_1 = false; + this.tabChange.emit({ activeId: this.activeId, nextId: selectedTab.id, preventDefault: (/** + * @return {?} + */ + function () { defaultPrevented_1 = true; }) }); + if (!defaultPrevented_1) { + this.activeId = selectedTab.id; + } + } + }; + /** + * @return {?} + */ + NgbTabset.prototype.ngAfterContentChecked = /** + * @return {?} + */ + function () { + // auto-correct activeId that might have been set incorrectly as input + /** @type {?} */ + var activeTab = this._getTabById(this.activeId); + this.activeId = activeTab ? activeTab.id : (this.tabs.length ? this.tabs.first.id : null); + }; + /** + * @private + * @param {?} id + * @return {?} + */ + NgbTabset.prototype._getTabById = /** + * @private + * @param {?} id + * @return {?} + */ + function (id) { + /** @type {?} */ + var tabsWithId = this.tabs.filter((/** + * @param {?} tab + * @return {?} + */ + function (tab) { return tab.id === id; })); + return tabsWithId.length ? tabsWithId[0] : null; + }; + NgbTabset.decorators = [ + { type: core.Component, args: [{ + selector: 'ngb-tabset', + exportAs: 'ngbTabset', + template: "\n \n
\n \n \n \n
\n \n \n " + }] } + ]; + /** @nocollapse */ + NgbTabset.ctorParameters = function () { return [ + { type: NgbTabsetConfig } + ]; }; + NgbTabset.propDecorators = { + tabs: [{ type: core.ContentChildren, args: [NgbTab,] }], + activeId: [{ type: core.Input }], + destroyOnHide: [{ type: core.Input }], + justify: [{ type: core.Input }], + orientation: [{ type: core.Input }], + type: [{ type: core.Input }], + tabChange: [{ type: core.Output }] + }; + return NgbTabset; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** @type {?} */ + var NGB_TABSET_DIRECTIVES = [NgbTabset, NgbTab, NgbTabContent, NgbTabTitle]; + var NgbTabsetModule = /** @class */ (function () { + function NgbTabsetModule() { + } + NgbTabsetModule.decorators = [ + { type: core.NgModule, args: [{ declarations: NGB_TABSET_DIRECTIVES, exports: NGB_TABSET_DIRECTIVES, imports: [common.CommonModule] },] } + ]; + return NgbTabsetModule; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + var NgbTime = /** @class */ (function () { + function NgbTime(hour, minute, second) { + this.hour = toInteger(hour); + this.minute = toInteger(minute); + this.second = toInteger(second); + } + /** + * @param {?=} step + * @return {?} + */ + NgbTime.prototype.changeHour = /** + * @param {?=} step + * @return {?} + */ + function (step) { + if (step === void 0) { step = 1; } + this.updateHour((isNaN(this.hour) ? 0 : this.hour) + step); + }; + /** + * @param {?} hour + * @return {?} + */ + NgbTime.prototype.updateHour = /** + * @param {?} hour + * @return {?} + */ + function (hour) { + if (isNumber(hour)) { + this.hour = (hour < 0 ? 24 + hour : hour) % 24; + } + else { + this.hour = NaN; + } + }; + /** + * @param {?=} step + * @return {?} + */ + NgbTime.prototype.changeMinute = /** + * @param {?=} step + * @return {?} + */ + function (step) { + if (step === void 0) { step = 1; } + this.updateMinute((isNaN(this.minute) ? 0 : this.minute) + step); + }; + /** + * @param {?} minute + * @return {?} + */ + NgbTime.prototype.updateMinute = /** + * @param {?} minute + * @return {?} + */ + function (minute) { + if (isNumber(minute)) { + this.minute = minute % 60 < 0 ? 60 + minute % 60 : minute % 60; + this.changeHour(Math.floor(minute / 60)); + } + else { + this.minute = NaN; + } + }; + /** + * @param {?=} step + * @return {?} + */ + NgbTime.prototype.changeSecond = /** + * @param {?=} step + * @return {?} + */ + function (step) { + if (step === void 0) { step = 1; } + this.updateSecond((isNaN(this.second) ? 0 : this.second) + step); + }; + /** + * @param {?} second + * @return {?} + */ + NgbTime.prototype.updateSecond = /** + * @param {?} second + * @return {?} + */ + function (second) { + if (isNumber(second)) { + this.second = second < 0 ? 60 + second % 60 : second % 60; + this.changeMinute(Math.floor(second / 60)); + } + else { + this.second = NaN; + } + }; + /** + * @param {?=} checkSecs + * @return {?} + */ + NgbTime.prototype.isValid = /** + * @param {?=} checkSecs + * @return {?} + */ + function (checkSecs) { + if (checkSecs === void 0) { checkSecs = true; } + return isNumber(this.hour) && isNumber(this.minute) && (checkSecs ? isNumber(this.second) : true); + }; + /** + * @return {?} + */ + NgbTime.prototype.toString = /** + * @return {?} + */ + function () { return (this.hour || 0) + ":" + (this.minute || 0) + ":" + (this.second || 0); }; + return NgbTime; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** + * A configuration service for the [`NgbTimepicker`](#/components/timepicker/api#NgbTimepicker) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the timepickers used in the application. + */ + var NgbTimepickerConfig = /** @class */ (function () { + function NgbTimepickerConfig() { + this.meridian = false; + this.spinners = true; + this.seconds = false; + this.hourStep = 1; + this.minuteStep = 1; + this.secondStep = 1; + this.disabled = false; + this.readonlyInputs = false; + this.size = 'medium'; + } + NgbTimepickerConfig.decorators = [ + { type: core.Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ NgbTimepickerConfig.ngInjectableDef = core.ɵɵdefineInjectable({ factory: function NgbTimepickerConfig_Factory() { return new NgbTimepickerConfig(); }, token: NgbTimepickerConfig, providedIn: "root" }); + return NgbTimepickerConfig; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** + * @return {?} + */ + function NGB_DATEPICKER_TIME_ADAPTER_FACTORY() { + return new NgbTimeStructAdapter(); + } + /** + * An abstract service that does the conversion between the internal timepicker `NgbTimeStruct` model and + * any provided user time model `T`, ex. a string, a native date, etc. + * + * The adapter is used **only** for conversion when binding timepicker to a form control, + * ex. `[(ngModel)]="userTimeModel"`. Here `userTimeModel` can be of any type. + * + * The default timepicker implementation assumes we use `NgbTimeStruct` as a user model. + * + * See the [custom time adapter demo](#/components/timepicker/examples#adapter) for an example. + * + * \@since 2.2.0 + * @abstract + * @template T + */ + var NgbTimeAdapter = /** @class */ (function () { + function NgbTimeAdapter() { + } + NgbTimeAdapter.decorators = [ + { type: core.Injectable, args: [{ providedIn: 'root', useFactory: NGB_DATEPICKER_TIME_ADAPTER_FACTORY },] } + ]; + /** @nocollapse */ NgbTimeAdapter.ngInjectableDef = core.ɵɵdefineInjectable({ factory: NGB_DATEPICKER_TIME_ADAPTER_FACTORY, token: NgbTimeAdapter, providedIn: "root" }); + return NgbTimeAdapter; + }()); + var NgbTimeStructAdapter = /** @class */ (function (_super) { + __extends(NgbTimeStructAdapter, _super); + function NgbTimeStructAdapter() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * Converts a NgbTimeStruct value into NgbTimeStruct value + */ + /** + * Converts a NgbTimeStruct value into NgbTimeStruct value + * @param {?} time + * @return {?} + */ + NgbTimeStructAdapter.prototype.fromModel = /** + * Converts a NgbTimeStruct value into NgbTimeStruct value + * @param {?} time + * @return {?} + */ + function (time) { + return (time && isInteger(time.hour) && isInteger(time.minute)) ? + { hour: time.hour, minute: time.minute, second: isInteger(time.second) ? time.second : null } : + null; + }; + /** + * Converts a NgbTimeStruct value into NgbTimeStruct value + */ + /** + * Converts a NgbTimeStruct value into NgbTimeStruct value + * @param {?} time + * @return {?} + */ + NgbTimeStructAdapter.prototype.toModel = /** + * Converts a NgbTimeStruct value into NgbTimeStruct value + * @param {?} time + * @return {?} + */ + function (time) { + return (time && isInteger(time.hour) && isInteger(time.minute)) ? + { hour: time.hour, minute: time.minute, second: isInteger(time.second) ? time.second : null } : + null; + }; + NgbTimeStructAdapter.decorators = [ + { type: core.Injectable } + ]; + return NgbTimeStructAdapter; + }(NgbTimeAdapter)); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** + * @param {?} locale + * @return {?} + */ + function NGB_TIMEPICKER_I18N_FACTORY(locale) { + return new NgbTimepickerI18nDefault(locale); + } + /** + * Type of the service supplying day periods (for example, 'AM' and 'PM') to NgbTimepicker component. + * The default implementation of this service honors the Angular locale, and uses the registered locale data, + * as explained in the Angular i18n guide. + * @abstract + */ + var NgbTimepickerI18n = /** @class */ (function () { + function NgbTimepickerI18n() { + } + NgbTimepickerI18n.decorators = [ + { type: core.Injectable, args: [{ providedIn: 'root', useFactory: NGB_TIMEPICKER_I18N_FACTORY, deps: [core.LOCALE_ID] },] } + ]; + /** @nocollapse */ NgbTimepickerI18n.ngInjectableDef = core.ɵɵdefineInjectable({ factory: function NgbTimepickerI18n_Factory() { return NGB_TIMEPICKER_I18N_FACTORY(core.ɵɵinject(core.LOCALE_ID)); }, token: NgbTimepickerI18n, providedIn: "root" }); + return NgbTimepickerI18n; + }()); + var NgbTimepickerI18nDefault = /** @class */ (function (_super) { + __extends(NgbTimepickerI18nDefault, _super); + function NgbTimepickerI18nDefault(locale) { + var _this = _super.call(this) || this; + _this._periods = common.getLocaleDayPeriods(locale, common.FormStyle.Standalone, common.TranslationWidth.Narrow); + return _this; + } + /** + * @return {?} + */ + NgbTimepickerI18nDefault.prototype.getMorningPeriod = /** + * @return {?} + */ + function () { return this._periods[0]; }; + /** + * @return {?} + */ + NgbTimepickerI18nDefault.prototype.getAfternoonPeriod = /** + * @return {?} + */ + function () { return this._periods[1]; }; + NgbTimepickerI18nDefault.decorators = [ + { type: core.Injectable } + ]; + /** @nocollapse */ + NgbTimepickerI18nDefault.ctorParameters = function () { return [ + { type: String, decorators: [{ type: core.Inject, args: [core.LOCALE_ID,] }] } + ]; }; + return NgbTimepickerI18nDefault; + }(NgbTimepickerI18n)); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** @type {?} */ + var NGB_TIMEPICKER_VALUE_ACCESSOR = { + provide: forms.NG_VALUE_ACCESSOR, + useExisting: core.forwardRef((/** + * @return {?} + */ + function () { return NgbTimepicker; })), + multi: true + }; + /** + * A directive that helps with wth picking hours, minutes and seconds. + */ + var NgbTimepicker = /** @class */ (function () { + function NgbTimepicker(_config, _ngbTimeAdapter, _cd, i18n) { + this._config = _config; + this._ngbTimeAdapter = _ngbTimeAdapter; + this._cd = _cd; + this.i18n = i18n; + this.onChange = (/** + * @param {?} _ + * @return {?} + */ + function (_) { }); + this.onTouched = (/** + * @return {?} + */ + function () { }); + this.meridian = _config.meridian; + this.spinners = _config.spinners; + this.seconds = _config.seconds; + this.hourStep = _config.hourStep; + this.minuteStep = _config.minuteStep; + this.secondStep = _config.secondStep; + this.disabled = _config.disabled; + this.readonlyInputs = _config.readonlyInputs; + this.size = _config.size; + } + Object.defineProperty(NgbTimepicker.prototype, "hourStep", { + get: /** + * @return {?} + */ + function () { return this._hourStep; }, + /** + * The number of hours to add/subtract when clicking hour spinners. + */ + set: /** + * The number of hours to add/subtract when clicking hour spinners. + * @param {?} step + * @return {?} + */ + function (step) { + this._hourStep = isInteger(step) ? step : this._config.hourStep; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbTimepicker.prototype, "minuteStep", { + get: /** + * @return {?} + */ + function () { return this._minuteStep; }, + /** + * The number of minutes to add/subtract when clicking minute spinners. + */ + set: /** + * The number of minutes to add/subtract when clicking minute spinners. + * @param {?} step + * @return {?} + */ + function (step) { + this._minuteStep = isInteger(step) ? step : this._config.minuteStep; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbTimepicker.prototype, "secondStep", { + get: /** + * @return {?} + */ + function () { return this._secondStep; }, + /** + * The number of seconds to add/subtract when clicking second spinners. + */ + set: /** + * The number of seconds to add/subtract when clicking second spinners. + * @param {?} step + * @return {?} + */ + function (step) { + this._secondStep = isInteger(step) ? step : this._config.secondStep; + }, + enumerable: true, + configurable: true + }); + /** + * @param {?} value + * @return {?} + */ + NgbTimepicker.prototype.writeValue = /** + * @param {?} value + * @return {?} + */ + function (value) { + /** @type {?} */ + var structValue = this._ngbTimeAdapter.fromModel(value); + this.model = structValue ? new NgbTime(structValue.hour, structValue.minute, structValue.second) : new NgbTime(); + if (!this.seconds && (!structValue || !isNumber(structValue.second))) { + this.model.second = 0; + } + this._cd.markForCheck(); + }; + /** + * @param {?} fn + * @return {?} + */ + NgbTimepicker.prototype.registerOnChange = /** + * @param {?} fn + * @return {?} + */ + function (fn) { this.onChange = fn; }; + /** + * @param {?} fn + * @return {?} + */ + NgbTimepicker.prototype.registerOnTouched = /** + * @param {?} fn + * @return {?} + */ + function (fn) { this.onTouched = fn; }; + /** + * @param {?} isDisabled + * @return {?} + */ + NgbTimepicker.prototype.setDisabledState = /** + * @param {?} isDisabled + * @return {?} + */ + function (isDisabled) { this.disabled = isDisabled; }; + /** + * @param {?} step + * @return {?} + */ + NgbTimepicker.prototype.changeHour = /** + * @param {?} step + * @return {?} + */ + function (step) { + this.model.changeHour(step); + this.propagateModelChange(); + }; + /** + * @param {?} step + * @return {?} + */ + NgbTimepicker.prototype.changeMinute = /** + * @param {?} step + * @return {?} + */ + function (step) { + this.model.changeMinute(step); + this.propagateModelChange(); + }; + /** + * @param {?} step + * @return {?} + */ + NgbTimepicker.prototype.changeSecond = /** + * @param {?} step + * @return {?} + */ + function (step) { + this.model.changeSecond(step); + this.propagateModelChange(); + }; + /** + * @param {?} newVal + * @return {?} + */ + NgbTimepicker.prototype.updateHour = /** + * @param {?} newVal + * @return {?} + */ + function (newVal) { + /** @type {?} */ + var isPM = this.model.hour >= 12; + /** @type {?} */ + var enteredHour = toInteger(newVal); + if (this.meridian && (isPM && enteredHour < 12 || !isPM && enteredHour === 12)) { + this.model.updateHour(enteredHour + 12); + } + else { + this.model.updateHour(enteredHour); + } + this.propagateModelChange(); + }; + /** + * @param {?} newVal + * @return {?} + */ + NgbTimepicker.prototype.updateMinute = /** + * @param {?} newVal + * @return {?} + */ + function (newVal) { + this.model.updateMinute(toInteger(newVal)); + this.propagateModelChange(); + }; + /** + * @param {?} newVal + * @return {?} + */ + NgbTimepicker.prototype.updateSecond = /** + * @param {?} newVal + * @return {?} + */ + function (newVal) { + this.model.updateSecond(toInteger(newVal)); + this.propagateModelChange(); + }; + /** + * @return {?} + */ + NgbTimepicker.prototype.toggleMeridian = /** + * @return {?} + */ + function () { + if (this.meridian) { + this.changeHour(12); + } + }; + /** + * @param {?} value + * @return {?} + */ + NgbTimepicker.prototype.formatHour = /** + * @param {?} value + * @return {?} + */ + function (value) { + if (isNumber(value)) { + if (this.meridian) { + return padNumber(value % 12 === 0 ? 12 : value % 12); + } + else { + return padNumber(value % 24); + } + } + else { + return padNumber(NaN); + } + }; + /** + * @param {?} value + * @return {?} + */ + NgbTimepicker.prototype.formatMinSec = /** + * @param {?} value + * @return {?} + */ + function (value) { return padNumber(value); }; + Object.defineProperty(NgbTimepicker.prototype, "isSmallSize", { + get: /** + * @return {?} + */ + function () { return this.size === 'small'; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbTimepicker.prototype, "isLargeSize", { + get: /** + * @return {?} + */ + function () { return this.size === 'large'; }, + enumerable: true, + configurable: true + }); + /** + * @param {?} changes + * @return {?} + */ + NgbTimepicker.prototype.ngOnChanges = /** + * @param {?} changes + * @return {?} + */ + function (changes) { + if (changes['seconds'] && !this.seconds && this.model && !isNumber(this.model.second)) { + this.model.second = 0; + this.propagateModelChange(false); + } + }; + /** + * @private + * @param {?=} touched + * @return {?} + */ + NgbTimepicker.prototype.propagateModelChange = /** + * @private + * @param {?=} touched + * @return {?} + */ + function (touched) { + if (touched === void 0) { touched = true; } + if (touched) { + this.onTouched(); + } + if (this.model.isValid(this.seconds)) { + this.onChange(this._ngbTimeAdapter.toModel({ hour: this.model.hour, minute: this.model.minute, second: this.model.second })); + } + else { + this.onChange(this._ngbTimeAdapter.toModel(null)); + } + }; + NgbTimepicker.decorators = [ + { type: core.Component, args: [{ + selector: 'ngb-timepicker', + encapsulation: core.ViewEncapsulation.None, + template: "\n
\n
\n
\n \n \n \n
\n
:
\n
\n \n \n \n
\n
:
\n
\n \n \n \n
\n
\n
\n \n
\n
\n
\n ", + providers: [NGB_TIMEPICKER_VALUE_ACCESSOR], + styles: ["ngb-timepicker{font-size:1rem}.ngb-tp{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.ngb-tp-input-container{width:4em}.ngb-tp-chevron::before{border-style:solid;border-width:.29em .29em 0 0;content:\"\";display:inline-block;height:.69em;left:.05em;position:relative;top:.15em;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);vertical-align:middle;width:.69em}.ngb-tp-chevron.bottom:before{top:-.3em;-webkit-transform:rotate(135deg);transform:rotate(135deg)}.ngb-tp-input{text-align:center}.ngb-tp-hour,.ngb-tp-meridian,.ngb-tp-minute,.ngb-tp-second{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-align:center;align-items:center;-ms-flex-pack:distribute;justify-content:space-around}.ngb-tp-spacer{width:1em;text-align:center}"] + }] } + ]; + /** @nocollapse */ + NgbTimepicker.ctorParameters = function () { return [ + { type: NgbTimepickerConfig }, + { type: NgbTimeAdapter }, + { type: core.ChangeDetectorRef }, + { type: NgbTimepickerI18n } + ]; }; + NgbTimepicker.propDecorators = { + meridian: [{ type: core.Input }], + spinners: [{ type: core.Input }], + seconds: [{ type: core.Input }], + hourStep: [{ type: core.Input }], + minuteStep: [{ type: core.Input }], + secondStep: [{ type: core.Input }], + readonlyInputs: [{ type: core.Input }], + size: [{ type: core.Input }] + }; + return NgbTimepicker; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + var NgbTimepickerModule = /** @class */ (function () { + function NgbTimepickerModule() { + } + NgbTimepickerModule.decorators = [ + { type: core.NgModule, args: [{ declarations: [NgbTimepicker], exports: [NgbTimepicker], imports: [common.CommonModule] },] } + ]; + return NgbTimepickerModule; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** + * Configuration service for the NgbToast component. You can inject this service, typically in your root component, + * and customize the values of its properties in order to provide default values for all the toasts used in the + * application. + * + * \@since 5.0.0 + */ + var NgbToastConfig = /** @class */ (function () { + function NgbToastConfig() { + this.autohide = true; + this.delay = 500; + this.ariaLive = 'polite'; + } + NgbToastConfig.decorators = [ + { type: core.Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ NgbToastConfig.ngInjectableDef = core.ɵɵdefineInjectable({ factory: function NgbToastConfig_Factory() { return new NgbToastConfig(); }, token: NgbToastConfig, providedIn: "root" }); + return NgbToastConfig; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** + * This directive allows the usage of HTML markup or other directives + * inside of the toast's header. + * + * \@since 5.0.0 + */ + var NgbToastHeader = /** @class */ (function () { + function NgbToastHeader() { + } + NgbToastHeader.decorators = [ + { type: core.Directive, args: [{ selector: '[ngbToastHeader]' },] } + ]; + return NgbToastHeader; + }()); + /** + * Toasts provide feedback messages as notifications to the user. + * Goal is to mimic the push notifications available both on mobile and desktop operating systems. + * + * \@since 5.0.0 + */ + var NgbToast = /** @class */ (function () { + function NgbToast(ariaLive, config) { + this.ariaLive = ariaLive; + /** + * A template like `` can be + * used in the projected content to allow markup usage. + */ + this.contentHeaderTpl = null; + /** + * An event fired immediately when toast's `hide()` method has been called. + * It can only occur in 2 different scenarios: + * - `autohide` timeout fires + * - user clicks on a closing cross (×) + * + * Additionally this output is purely informative. The toast won't disappear. It's up to the user to take care of + * that. + */ + this.hideOutput = new core.EventEmitter(); + if (this.ariaLive == null) { + this.ariaLive = config.ariaLive; + } + this.delay = config.delay; + this.autohide = config.autohide; + } + /** + * @return {?} + */ + NgbToast.prototype.ngAfterContentInit = /** + * @return {?} + */ + function () { this._init(); }; + /** + * @param {?} changes + * @return {?} + */ + NgbToast.prototype.ngOnChanges = /** + * @param {?} changes + * @return {?} + */ + function (changes) { + if ('autohide' in changes) { + this._clearTimeout(); + this._init(); + } + }; + /** + * @return {?} + */ + NgbToast.prototype.hide = /** + * @return {?} + */ + function () { + this._clearTimeout(); + this.hideOutput.emit(); + }; + /** + * @private + * @return {?} + */ + NgbToast.prototype._init = /** + * @private + * @return {?} + */ + function () { + var _this = this; + if (this.autohide && !this._timeoutID) { + this._timeoutID = setTimeout((/** + * @return {?} + */ + function () { return _this.hide(); }), this.delay); + } + }; + /** + * @private + * @return {?} + */ + NgbToast.prototype._clearTimeout = /** + * @private + * @return {?} + */ + function () { + if (this._timeoutID) { + clearTimeout(this._timeoutID); + this._timeoutID = null; + } + }; + NgbToast.decorators = [ + { type: core.Component, args: [{ + selector: 'ngb-toast', + exportAs: 'ngbToast', + encapsulation: core.ViewEncapsulation.None, + host: { + 'role': 'alert', + '[attr.aria-live]': 'ariaLive', + 'aria-atomic': 'true', + '[class.toast]': 'true', + '[class.show]': 'true', + '[class.autohide]': 'autohide', + }, + template: "\n \n {{header}}\n \n \n
\n \n \n
\n
\n
\n \n
\n ", + styles: [".ngb-toasts{position:fixed;top:0;right:0;margin:.5em;z-index:1200}ngb-toast .toast-header .close{margin-left:auto;margin-bottom:.25rem}"] + }] } + ]; + /** @nocollapse */ + NgbToast.ctorParameters = function () { return [ + { type: String, decorators: [{ type: core.Attribute, args: ['aria-live',] }] }, + { type: NgbToastConfig } + ]; }; + NgbToast.propDecorators = { + delay: [{ type: core.Input }], + autohide: [{ type: core.Input }], + header: [{ type: core.Input }], + contentHeaderTpl: [{ type: core.ContentChild, args: [NgbToastHeader, { read: core.TemplateRef, static: true },] }], + hideOutput: [{ type: core.Output, args: ['hide',] }] + }; + return NgbToast; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + var NgbToastModule = /** @class */ (function () { + function NgbToastModule() { + } + NgbToastModule.decorators = [ + { type: core.NgModule, args: [{ declarations: [NgbToast, NgbToastHeader], imports: [common.CommonModule], exports: [NgbToast, NgbToastHeader] },] } + ]; + return NgbToastModule; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** + * A configuration service for the [`NgbTooltip`](#/components/tooltip/api#NgbTooltip) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the tooltips used in the application. + */ + var NgbTooltipConfig = /** @class */ (function () { + function NgbTooltipConfig() { + this.autoClose = true; + this.placement = 'auto'; + this.triggers = 'hover focus'; + this.disableTooltip = false; + this.openDelay = 0; + this.closeDelay = 0; + } + NgbTooltipConfig.decorators = [ + { type: core.Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ NgbTooltipConfig.ngInjectableDef = core.ɵɵdefineInjectable({ factory: function NgbTooltipConfig_Factory() { return new NgbTooltipConfig(); }, token: NgbTooltipConfig, providedIn: "root" }); + return NgbTooltipConfig; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** @type {?} */ + var nextId$5 = 0; + var NgbTooltipWindow = /** @class */ (function () { + function NgbTooltipWindow() { + } + NgbTooltipWindow.decorators = [ + { type: core.Component, args: [{ + selector: 'ngb-tooltip-window', + changeDetection: core.ChangeDetectionStrategy.OnPush, + encapsulation: core.ViewEncapsulation.None, + host: { '[class]': '"tooltip show" + (tooltipClass ? " " + tooltipClass : "")', 'role': 'tooltip', '[id]': 'id' }, + template: "
", + styles: ["ngb-tooltip-window.bs-tooltip-bottom .arrow,ngb-tooltip-window.bs-tooltip-top .arrow{left:calc(50% - .4rem)}ngb-tooltip-window.bs-tooltip-bottom-left .arrow,ngb-tooltip-window.bs-tooltip-top-left .arrow{left:1em}ngb-tooltip-window.bs-tooltip-bottom-right .arrow,ngb-tooltip-window.bs-tooltip-top-right .arrow{left:auto;right:.8rem}ngb-tooltip-window.bs-tooltip-left .arrow,ngb-tooltip-window.bs-tooltip-right .arrow{top:calc(50% - .4rem)}ngb-tooltip-window.bs-tooltip-left-top .arrow,ngb-tooltip-window.bs-tooltip-right-top .arrow{top:.4rem}ngb-tooltip-window.bs-tooltip-left-bottom .arrow,ngb-tooltip-window.bs-tooltip-right-bottom .arrow{top:auto;bottom:.4rem}"] + }] } + ]; + NgbTooltipWindow.propDecorators = { + id: [{ type: core.Input }], + tooltipClass: [{ type: core.Input }] + }; + return NgbTooltipWindow; + }()); + /** + * A lightweight and extensible directive for fancy tooltip creation. + */ + var NgbTooltip = /** @class */ (function () { + function NgbTooltip(_elementRef, _renderer, injector, componentFactoryResolver, viewContainerRef, config, _ngZone, _document, _changeDetector, _applicationRef) { + var _this = this; + this._elementRef = _elementRef; + this._renderer = _renderer; + this._ngZone = _ngZone; + this._document = _document; + this._changeDetector = _changeDetector; + this._applicationRef = _applicationRef; + /** + * An event emitted when the tooltip is shown. Contains no payload. + */ + this.shown = new core.EventEmitter(); + /** + * An event emitted when the popover is hidden. Contains no payload. + */ + this.hidden = new core.EventEmitter(); + this._ngbTooltipWindowId = "ngb-tooltip-" + nextId$5++; + this.autoClose = config.autoClose; + this.placement = config.placement; + this.triggers = config.triggers; + this.container = config.container; + this.disableTooltip = config.disableTooltip; + this.tooltipClass = config.tooltipClass; + this.openDelay = config.openDelay; + this.closeDelay = config.closeDelay; + this._popupService = new PopupService(NgbTooltipWindow, injector, viewContainerRef, _renderer, componentFactoryResolver, _applicationRef); + this._zoneSubscription = _ngZone.onStable.subscribe((/** + * @return {?} + */ + function () { + if (_this._windowRef) { + positionElements(_this._elementRef.nativeElement, _this._windowRef.location.nativeElement, _this.placement, _this.container === 'body', 'bs-tooltip'); + } + })); + } + Object.defineProperty(NgbTooltip.prototype, "ngbTooltip", { + get: /** + * @return {?} + */ + function () { return this._ngbTooltip; }, + /** + * The string content or a `TemplateRef` for the content to be displayed in the tooltip. + * + * If the content if falsy, the tooltip won't open. + */ + set: /** + * The string content or a `TemplateRef` for the content to be displayed in the tooltip. + * + * If the content if falsy, the tooltip won't open. + * @param {?} value + * @return {?} + */ + function (value) { + this._ngbTooltip = value; + if (!value && this._windowRef) { + this.close(); + } + }, + enumerable: true, + configurable: true + }); + /** + * Opens the tooltip. + * + * This is considered to be a "manual" triggering. + * The `context` is an optional value to be injected into the tooltip template when it is created. + */ + /** + * Opens the tooltip. + * + * This is considered to be a "manual" triggering. + * The `context` is an optional value to be injected into the tooltip template when it is created. + * @param {?=} context + * @return {?} + */ + NgbTooltip.prototype.open = /** + * Opens the tooltip. + * + * This is considered to be a "manual" triggering. + * The `context` is an optional value to be injected into the tooltip template when it is created. + * @param {?=} context + * @return {?} + */ + function (context) { + var _this = this; + if (!this._windowRef && this._ngbTooltip && !this.disableTooltip) { + this._windowRef = this._popupService.open(this._ngbTooltip, context); + this._windowRef.instance.tooltipClass = this.tooltipClass; + this._windowRef.instance.id = this._ngbTooltipWindowId; + this._renderer.setAttribute(this._elementRef.nativeElement, 'aria-describedby', this._ngbTooltipWindowId); + if (this.container === 'body') { + this._document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement); + } + // We need to detect changes, because we don't know where .open() might be called from. + // Ex. opening tooltip from one of lifecycle hooks that run after the CD + // (say from ngAfterViewInit) will result in 'ExpressionHasChanged' exception + this._windowRef.changeDetectorRef.detectChanges(); + // We need to mark for check, because tooltip won't work inside the OnPush component. + // Ex. when we use expression like `{{ tooltip.isOpen() : 'opened' : 'closed' }}` + // inside the template of an OnPush component and we change the tooltip from + // open -> closed, the expression in question won't be updated unless we explicitly + // mark the parent component to be checked. + this._windowRef.changeDetectorRef.markForCheck(); + ngbAutoClose(this._ngZone, this._document, this.autoClose, (/** + * @return {?} + */ + function () { return _this.close(); }), this.hidden, [this._windowRef.location.nativeElement]); + this.shown.emit(); + } + }; + /** + * Closes the tooltip. + * + * This is considered to be a "manual" triggering of the tooltip. + */ + /** + * Closes the tooltip. + * + * This is considered to be a "manual" triggering of the tooltip. + * @return {?} + */ + NgbTooltip.prototype.close = /** + * Closes the tooltip. + * + * This is considered to be a "manual" triggering of the tooltip. + * @return {?} + */ + function () { + if (this._windowRef != null) { + this._renderer.removeAttribute(this._elementRef.nativeElement, 'aria-describedby'); + this._popupService.close(); + this._windowRef = null; + this.hidden.emit(); + this._changeDetector.markForCheck(); + } + }; + /** + * Toggles the tooltip. + * + * This is considered to be a "manual" triggering of the tooltip. + */ + /** + * Toggles the tooltip. + * + * This is considered to be a "manual" triggering of the tooltip. + * @return {?} + */ + NgbTooltip.prototype.toggle = /** + * Toggles the tooltip. + * + * This is considered to be a "manual" triggering of the tooltip. + * @return {?} + */ + function () { + if (this._windowRef) { + this.close(); + } + else { + this.open(); + } + }; + /** + * Returns `true`, if the popover is currently shown. + */ + /** + * Returns `true`, if the popover is currently shown. + * @return {?} + */ + NgbTooltip.prototype.isOpen = /** + * Returns `true`, if the popover is currently shown. + * @return {?} + */ + function () { return this._windowRef != null; }; + /** + * @return {?} + */ + NgbTooltip.prototype.ngOnInit = /** + * @return {?} + */ + function () { + this._unregisterListenersFn = listenToTriggers(this._renderer, this._elementRef.nativeElement, this.triggers, this.isOpen.bind(this), this.open.bind(this), this.close.bind(this), +this.openDelay, +this.closeDelay); + }; + /** + * @return {?} + */ + NgbTooltip.prototype.ngOnDestroy = /** + * @return {?} + */ + function () { + this.close(); + // This check is needed as it might happen that ngOnDestroy is called before ngOnInit + // under certain conditions, see: https://github.com/ng-bootstrap/ng-bootstrap/issues/2199 + if (this._unregisterListenersFn) { + this._unregisterListenersFn(); + } + this._zoneSubscription.unsubscribe(); + }; + NgbTooltip.decorators = [ + { type: core.Directive, args: [{ selector: '[ngbTooltip]', exportAs: 'ngbTooltip' },] } + ]; + /** @nocollapse */ + NgbTooltip.ctorParameters = function () { return [ + { type: core.ElementRef }, + { type: core.Renderer2 }, + { type: core.Injector }, + { type: core.ComponentFactoryResolver }, + { type: core.ViewContainerRef }, + { type: NgbTooltipConfig }, + { type: core.NgZone }, + { type: undefined, decorators: [{ type: core.Inject, args: [common.DOCUMENT,] }] }, + { type: core.ChangeDetectorRef }, + { type: core.ApplicationRef } + ]; }; + NgbTooltip.propDecorators = { + autoClose: [{ type: core.Input }], + placement: [{ type: core.Input }], + triggers: [{ type: core.Input }], + container: [{ type: core.Input }], + disableTooltip: [{ type: core.Input }], + tooltipClass: [{ type: core.Input }], + openDelay: [{ type: core.Input }], + closeDelay: [{ type: core.Input }], + shown: [{ type: core.Output }], + hidden: [{ type: core.Output }], + ngbTooltip: [{ type: core.Input }] + }; + return NgbTooltip; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + var NgbTooltipModule = /** @class */ (function () { + function NgbTooltipModule() { + } + NgbTooltipModule.decorators = [ + { type: core.NgModule, args: [{ declarations: [NgbTooltip, NgbTooltipWindow], exports: [NgbTooltip], entryComponents: [NgbTooltipWindow] },] } + ]; + return NgbTooltipModule; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** + * A component that helps with text highlighting. + * + * If splits the `result` text into parts that contain the searched `term` and generates the HTML markup to simplify + * highlighting: + * + * Ex. `result="Alaska"` and `term="as"` will produce `Alaska`. + */ + var NgbHighlight = /** @class */ (function () { + function NgbHighlight() { + /** + * The CSS class for `` elements wrapping the `term` inside the `result`. + */ + this.highlightClass = 'ngb-highlight'; + } + /** + * @param {?} changes + * @return {?} + */ + NgbHighlight.prototype.ngOnChanges = /** + * @param {?} changes + * @return {?} + */ + function (changes) { + /** @type {?} */ + var result = toString(this.result); + /** @type {?} */ + var terms = Array.isArray(this.term) ? this.term : [this.term]; + /** @type {?} */ + var escapedTerms = terms.map((/** + * @param {?} term + * @return {?} + */ + function (term) { return regExpEscape(toString(term)); })).filter((/** + * @param {?} term + * @return {?} + */ + function (term) { return term; })); + this.parts = escapedTerms.length ? result.split(new RegExp("(" + escapedTerms.join('|') + ")", 'gmi')) : [result]; + }; + NgbHighlight.decorators = [ + { type: core.Component, args: [{ + selector: 'ngb-highlight', + changeDetection: core.ChangeDetectionStrategy.OnPush, + encapsulation: core.ViewEncapsulation.None, + template: "" + + "{{part}}{{part}}" + + "", + styles: [".ngb-highlight{font-weight:700}"] + }] } + ]; + NgbHighlight.propDecorators = { + highlightClass: [{ type: core.Input }], + result: [{ type: core.Input }], + term: [{ type: core.Input }] + }; + return NgbHighlight; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + var NgbTypeaheadWindow = /** @class */ (function () { + function NgbTypeaheadWindow() { + this.activeIdx = 0; + /** + * Flag indicating if the first row should be active initially + */ + this.focusFirst = true; + /** + * A function used to format a given result before display. This function should return a formatted string without any + * HTML markup + */ + this.formatter = toString; + /** + * Event raised when user selects a particular result row + */ + this.selectEvent = new core.EventEmitter(); + this.activeChangeEvent = new core.EventEmitter(); + } + /** + * @return {?} + */ + NgbTypeaheadWindow.prototype.hasActive = /** + * @return {?} + */ + function () { return this.activeIdx > -1 && this.activeIdx < this.results.length; }; + /** + * @return {?} + */ + NgbTypeaheadWindow.prototype.getActive = /** + * @return {?} + */ + function () { return this.results[this.activeIdx]; }; + /** + * @param {?} activeIdx + * @return {?} + */ + NgbTypeaheadWindow.prototype.markActive = /** + * @param {?} activeIdx + * @return {?} + */ + function (activeIdx) { + this.activeIdx = activeIdx; + this._activeChanged(); + }; + /** + * @return {?} + */ + NgbTypeaheadWindow.prototype.next = /** + * @return {?} + */ + function () { + if (this.activeIdx === this.results.length - 1) { + this.activeIdx = this.focusFirst ? (this.activeIdx + 1) % this.results.length : -1; + } + else { + this.activeIdx++; + } + this._activeChanged(); + }; + /** + * @return {?} + */ + NgbTypeaheadWindow.prototype.prev = /** + * @return {?} + */ + function () { + if (this.activeIdx < 0) { + this.activeIdx = this.results.length - 1; + } + else if (this.activeIdx === 0) { + this.activeIdx = this.focusFirst ? this.results.length - 1 : -1; + } + else { + this.activeIdx--; + } + this._activeChanged(); + }; + /** + * @return {?} + */ + NgbTypeaheadWindow.prototype.resetActive = /** + * @return {?} + */ + function () { + this.activeIdx = this.focusFirst ? 0 : -1; + this._activeChanged(); + }; + /** + * @param {?} item + * @return {?} + */ + NgbTypeaheadWindow.prototype.select = /** + * @param {?} item + * @return {?} + */ + function (item) { this.selectEvent.emit(item); }; + /** + * @return {?} + */ + NgbTypeaheadWindow.prototype.ngOnInit = /** + * @return {?} + */ + function () { this.resetActive(); }; + /** + * @private + * @return {?} + */ + NgbTypeaheadWindow.prototype._activeChanged = /** + * @private + * @return {?} + */ + function () { + this.activeChangeEvent.emit(this.activeIdx >= 0 ? this.id + '-' + this.activeIdx : undefined); + }; + NgbTypeaheadWindow.decorators = [ + { type: core.Component, args: [{ + selector: 'ngb-typeahead-window', + exportAs: 'ngbTypeaheadWindow', + host: { '(mousedown)': '$event.preventDefault()', 'class': 'dropdown-menu show', 'role': 'listbox', '[id]': 'id' }, + template: "\n \n \n \n \n \n \n " + }] } + ]; + NgbTypeaheadWindow.propDecorators = { + id: [{ type: core.Input }], + focusFirst: [{ type: core.Input }], + results: [{ type: core.Input }], + term: [{ type: core.Input }], + formatter: [{ type: core.Input }], + resultTemplate: [{ type: core.Input }], + selectEvent: [{ type: core.Output, args: ['select',] }], + activeChangeEvent: [{ type: core.Output, args: ['activeChange',] }] + }; + return NgbTypeaheadWindow; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** @type {?} */ + var ARIA_LIVE_DELAY = new core.InjectionToken('live announcer delay', { providedIn: 'root', factory: ARIA_LIVE_DELAY_FACTORY }); + /** + * @return {?} + */ + function ARIA_LIVE_DELAY_FACTORY() { + return 100; + } + /** + * @param {?} document + * @param {?=} lazyCreate + * @return {?} + */ + function getLiveElement(document, lazyCreate) { + if (lazyCreate === void 0) { lazyCreate = false; } + /** @type {?} */ + var element = (/** @type {?} */ (document.body.querySelector('#ngb-live'))); + if (element == null && lazyCreate) { + element = document.createElement('div'); + element.setAttribute('id', 'ngb-live'); + element.setAttribute('aria-live', 'polite'); + element.setAttribute('aria-atomic', 'true'); + element.classList.add('sr-only'); + document.body.appendChild(element); + } + return element; + } + var Live = /** @class */ (function () { + function Live(_document, _delay) { + this._document = _document; + this._delay = _delay; + } + /** + * @return {?} + */ + Live.prototype.ngOnDestroy = /** + * @return {?} + */ + function () { + /** @type {?} */ + var element = getLiveElement(this._document); + if (element) { + element.parentElement.removeChild(element); + } + }; + /** + * @param {?} message + * @return {?} + */ + Live.prototype.say = /** + * @param {?} message + * @return {?} + */ + function (message) { + /** @type {?} */ + var element = getLiveElement(this._document, true); + /** @type {?} */ + var delay = this._delay; + element.textContent = ''; + /** @type {?} */ + var setText = (/** + * @return {?} + */ + function () { return element.textContent = message; }); + if (delay === null) { + setText(); + } + else { + setTimeout(setText, delay); + } + }; + Live.decorators = [ + { type: core.Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ + Live.ctorParameters = function () { return [ + { type: undefined, decorators: [{ type: core.Inject, args: [common.DOCUMENT,] }] }, + { type: undefined, decorators: [{ type: core.Inject, args: [ARIA_LIVE_DELAY,] }] } + ]; }; + /** @nocollapse */ Live.ngInjectableDef = core.ɵɵdefineInjectable({ factory: function Live_Factory() { return new Live(core.ɵɵinject(common.DOCUMENT), core.ɵɵinject(ARIA_LIVE_DELAY)); }, token: Live, providedIn: "root" }); + return Live; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** + * A configuration service for the [`NgbTypeahead`](#/components/typeahead/api#NgbTypeahead) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the typeaheads used in the application. + */ + var NgbTypeaheadConfig = /** @class */ (function () { + function NgbTypeaheadConfig() { + this.editable = true; + this.focusFirst = true; + this.showHint = false; + this.placement = ['bottom-left', 'bottom-right', 'top-left', 'top-right']; + } + NgbTypeaheadConfig.decorators = [ + { type: core.Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ NgbTypeaheadConfig.ngInjectableDef = core.ɵɵdefineInjectable({ factory: function NgbTypeaheadConfig_Factory() { return new NgbTypeaheadConfig(); }, token: NgbTypeaheadConfig, providedIn: "root" }); + return NgbTypeaheadConfig; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** @type {?} */ + var NGB_TYPEAHEAD_VALUE_ACCESSOR = { + provide: forms.NG_VALUE_ACCESSOR, + useExisting: core.forwardRef((/** + * @return {?} + */ + function () { return NgbTypeahead; })), + multi: true + }; + /** @type {?} */ + var nextWindowId = 0; + /** + * A directive providing a simple way of creating powerful typeaheads from any text input. + */ + var NgbTypeahead = /** @class */ (function () { + function NgbTypeahead(_elementRef, _viewContainerRef, _renderer, _injector, componentFactoryResolver, config, ngZone, _live, _document, _ngZone, _changeDetector, _applicationRef) { + var _this = this; + this._elementRef = _elementRef; + this._viewContainerRef = _viewContainerRef; + this._renderer = _renderer; + this._injector = _injector; + this._live = _live; + this._document = _document; + this._ngZone = _ngZone; + this._changeDetector = _changeDetector; + this._applicationRef = _applicationRef; + this._closed$ = new rxjs.Subject(); + /** + * The value for the `autocomplete` attribute for the `` element. + * + * Defaults to `"off"` to disable the native browser autocomplete, but you can override it if necessary. + * + * \@since 2.1.0 + */ + this.autocomplete = 'off'; + /** + * The preferred placement of the typeahead. + * + * Possible values are `"top"`, `"top-left"`, `"top-right"`, `"bottom"`, `"bottom-left"`, + * `"bottom-right"`, `"left"`, `"left-top"`, `"left-bottom"`, `"right"`, `"right-top"`, + * `"right-bottom"` + * + * Accepts an array of strings or a string with space separated possible values. + * + * The default order of preference is `"bottom-left bottom-right top-left top-right"` + * + * Please see the [positioning overview](#/positioning) for more details. + */ + this.placement = 'bottom-left'; + /** + * An event emitted right before an item is selected from the result list. + * + * Event payload is of type [`NgbTypeaheadSelectItemEvent`](#/components/typeahead/api#NgbTypeaheadSelectItemEvent). + */ + this.selectItem = new core.EventEmitter(); + this.popupId = "ngb-typeahead-" + nextWindowId++; + this._onTouched = (/** + * @return {?} + */ + function () { }); + this._onChange = (/** + * @param {?} _ + * @return {?} + */ + function (_) { }); + this.container = config.container; + this.editable = config.editable; + this.focusFirst = config.focusFirst; + this.showHint = config.showHint; + this.placement = config.placement; + this._valueChanges = rxjs.fromEvent(_elementRef.nativeElement, 'input') + .pipe(operators.map((/** + * @param {?} $event + * @return {?} + */ + function ($event) { return ((/** @type {?} */ ($event.target))).value; }))); + this._resubscribeTypeahead = new rxjs.BehaviorSubject(null); + this._popupService = new PopupService(NgbTypeaheadWindow, _injector, _viewContainerRef, _renderer, componentFactoryResolver, _applicationRef); + this._zoneSubscription = ngZone.onStable.subscribe((/** + * @return {?} + */ + function () { + if (_this.isPopupOpen()) { + positionElements(_this._elementRef.nativeElement, _this._windowRef.location.nativeElement, _this.placement, _this.container === 'body'); + } + })); + } + /** + * @return {?} + */ + NgbTypeahead.prototype.ngOnInit = /** + * @return {?} + */ + function () { + var _this = this; + /** @type {?} */ + var inputValues$ = this._valueChanges.pipe(operators.tap((/** + * @param {?} value + * @return {?} + */ + function (value) { + _this._inputValueBackup = _this.showHint ? value : null; + if (_this.editable) { + _this._onChange(value); + } + }))); + /** @type {?} */ + var results$ = inputValues$.pipe(this.ngbTypeahead); + /** @type {?} */ + var processedResults$ = results$.pipe(operators.tap((/** + * @return {?} + */ + function () { + if (!_this.editable) { + _this._onChange(undefined); + } + }))); + /** @type {?} */ + var userInput$ = this._resubscribeTypeahead.pipe(operators.switchMap((/** + * @return {?} + */ + function () { return processedResults$; }))); + this._subscription = this._subscribeToUserInput(userInput$); + }; + /** + * @return {?} + */ + NgbTypeahead.prototype.ngOnDestroy = /** + * @return {?} + */ + function () { + this._closePopup(); + this._unsubscribeFromUserInput(); + this._zoneSubscription.unsubscribe(); + }; + /** + * @param {?} fn + * @return {?} + */ + NgbTypeahead.prototype.registerOnChange = /** + * @param {?} fn + * @return {?} + */ + function (fn) { this._onChange = fn; }; + /** + * @param {?} fn + * @return {?} + */ + NgbTypeahead.prototype.registerOnTouched = /** + * @param {?} fn + * @return {?} + */ + function (fn) { this._onTouched = fn; }; + /** + * @param {?} value + * @return {?} + */ + NgbTypeahead.prototype.writeValue = /** + * @param {?} value + * @return {?} + */ + function (value) { + this._writeInputValue(this._formatItemForInput(value)); + if (this.showHint) { + this._inputValueBackup = value; + } + }; + /** + * @param {?} isDisabled + * @return {?} + */ + NgbTypeahead.prototype.setDisabledState = /** + * @param {?} isDisabled + * @return {?} + */ + function (isDisabled) { + this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled); + }; + /** + * Dismisses typeahead popup window + */ + /** + * Dismisses typeahead popup window + * @return {?} + */ + NgbTypeahead.prototype.dismissPopup = /** + * Dismisses typeahead popup window + * @return {?} + */ + function () { + if (this.isPopupOpen()) { + this._resubscribeTypeahead.next(null); + this._closePopup(); + if (this.showHint && this._inputValueBackup !== null) { + this._writeInputValue(this._inputValueBackup); + } + this._changeDetector.markForCheck(); + } + }; + /** + * Returns true if the typeahead popup window is displayed + */ + /** + * Returns true if the typeahead popup window is displayed + * @return {?} + */ + NgbTypeahead.prototype.isPopupOpen = /** + * Returns true if the typeahead popup window is displayed + * @return {?} + */ + function () { return this._windowRef != null; }; + /** + * @return {?} + */ + NgbTypeahead.prototype.handleBlur = /** + * @return {?} + */ + function () { + this._resubscribeTypeahead.next(null); + this._onTouched(); + }; + /** + * @param {?} event + * @return {?} + */ + NgbTypeahead.prototype.handleKeyDown = /** + * @param {?} event + * @return {?} + */ + function (event) { + if (!this.isPopupOpen()) { + return; + } + // tslint:disable-next-line:deprecation + switch (event.which) { + case Key.ArrowDown: + event.preventDefault(); + this._windowRef.instance.next(); + this._showHint(); + break; + case Key.ArrowUp: + event.preventDefault(); + this._windowRef.instance.prev(); + this._showHint(); + break; + case Key.Enter: + case Key.Tab: + /** @type {?} */ + var result = this._windowRef.instance.getActive(); + if (isDefined(result)) { + event.preventDefault(); + event.stopPropagation(); + this._selectResult(result); + } + this._closePopup(); + break; + } + }; + /** + * @private + * @return {?} + */ + NgbTypeahead.prototype._openPopup = /** + * @private + * @return {?} + */ + function () { + var _this = this; + if (!this.isPopupOpen()) { + this._inputValueBackup = this._elementRef.nativeElement.value; + this._windowRef = this._popupService.open(); + this._windowRef.instance.id = this.popupId; + this._windowRef.instance.selectEvent.subscribe((/** + * @param {?} result + * @return {?} + */ + function (result) { return _this._selectResultClosePopup(result); })); + this._windowRef.instance.activeChangeEvent.subscribe((/** + * @param {?} activeId + * @return {?} + */ + function (activeId) { return _this.activeDescendant = activeId; })); + if (this.container === 'body') { + window.document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement); + } + this._changeDetector.markForCheck(); + ngbAutoClose(this._ngZone, this._document, 'outside', (/** + * @return {?} + */ + function () { return _this.dismissPopup(); }), this._closed$, [this._elementRef.nativeElement, this._windowRef.location.nativeElement]); + } + }; + /** + * @private + * @return {?} + */ + NgbTypeahead.prototype._closePopup = /** + * @private + * @return {?} + */ + function () { + this._closed$.next(); + this._popupService.close(); + this._windowRef = null; + this.activeDescendant = undefined; + }; + /** + * @private + * @param {?} result + * @return {?} + */ + NgbTypeahead.prototype._selectResult = /** + * @private + * @param {?} result + * @return {?} + */ + function (result) { + /** @type {?} */ + var defaultPrevented = false; + this.selectItem.emit({ item: result, preventDefault: (/** + * @return {?} + */ + function () { defaultPrevented = true; }) }); + this._resubscribeTypeahead.next(null); + if (!defaultPrevented) { + this.writeValue(result); + this._onChange(result); + } + }; + /** + * @private + * @param {?} result + * @return {?} + */ + NgbTypeahead.prototype._selectResultClosePopup = /** + * @private + * @param {?} result + * @return {?} + */ + function (result) { + this._selectResult(result); + this._closePopup(); + }; + /** + * @private + * @return {?} + */ + NgbTypeahead.prototype._showHint = /** + * @private + * @return {?} + */ + function () { + if (this.showHint && this._windowRef.instance.hasActive() && this._inputValueBackup != null) { + /** @type {?} */ + var userInputLowerCase = this._inputValueBackup.toLowerCase(); + /** @type {?} */ + var formattedVal = this._formatItemForInput(this._windowRef.instance.getActive()); + if (userInputLowerCase === formattedVal.substr(0, this._inputValueBackup.length).toLowerCase()) { + this._writeInputValue(this._inputValueBackup + formattedVal.substr(this._inputValueBackup.length)); + this._elementRef.nativeElement['setSelectionRange'].apply(this._elementRef.nativeElement, [this._inputValueBackup.length, formattedVal.length]); + } + else { + this._writeInputValue(formattedVal); + } + } + }; + /** + * @private + * @param {?} item + * @return {?} + */ + NgbTypeahead.prototype._formatItemForInput = /** + * @private + * @param {?} item + * @return {?} + */ + function (item) { + return item != null && this.inputFormatter ? this.inputFormatter(item) : toString(item); + }; + /** + * @private + * @param {?} value + * @return {?} + */ + NgbTypeahead.prototype._writeInputValue = /** + * @private + * @param {?} value + * @return {?} + */ + function (value) { + this._renderer.setProperty(this._elementRef.nativeElement, 'value', toString(value)); + }; + /** + * @private + * @param {?} userInput$ + * @return {?} + */ + NgbTypeahead.prototype._subscribeToUserInput = /** + * @private + * @param {?} userInput$ + * @return {?} + */ + function (userInput$) { + var _this = this; + return userInput$.subscribe((/** + * @param {?} results + * @return {?} + */ + function (results) { + if (!results || results.length === 0) { + _this._closePopup(); + } + else { + _this._openPopup(); + _this._windowRef.instance.focusFirst = _this.focusFirst; + _this._windowRef.instance.results = results; + _this._windowRef.instance.term = _this._elementRef.nativeElement.value; + if (_this.resultFormatter) { + _this._windowRef.instance.formatter = _this.resultFormatter; + } + if (_this.resultTemplate) { + _this._windowRef.instance.resultTemplate = _this.resultTemplate; + } + _this._windowRef.instance.resetActive(); + // The observable stream we are subscribing to might have async steps + // and if a component containing typeahead is using the OnPush strategy + // the change detection turn wouldn't be invoked automatically. + _this._windowRef.changeDetectorRef.detectChanges(); + _this._showHint(); + } + // live announcer + /** @type {?} */ + var count = results ? results.length : 0; + _this._live.say(count === 0 ? 'No results available' : count + " result" + (count === 1 ? '' : 's') + " available"); + })); + }; + /** + * @private + * @return {?} + */ + NgbTypeahead.prototype._unsubscribeFromUserInput = /** + * @private + * @return {?} + */ + function () { + if (this._subscription) { + this._subscription.unsubscribe(); + } + this._subscription = null; + }; + NgbTypeahead.decorators = [ + { type: core.Directive, args: [{ + selector: 'input[ngbTypeahead]', + exportAs: 'ngbTypeahead', + host: { + '(blur)': 'handleBlur()', + '[class.open]': 'isPopupOpen()', + '(keydown)': 'handleKeyDown($event)', + '[autocomplete]': 'autocomplete', + 'autocapitalize': 'off', + 'autocorrect': 'off', + 'role': 'combobox', + 'aria-multiline': 'false', + '[attr.aria-autocomplete]': 'showHint ? "both" : "list"', + '[attr.aria-activedescendant]': 'activeDescendant', + '[attr.aria-owns]': 'isPopupOpen() ? popupId : null', + '[attr.aria-expanded]': 'isPopupOpen()' + }, + providers: [NGB_TYPEAHEAD_VALUE_ACCESSOR] + },] } + ]; + /** @nocollapse */ + NgbTypeahead.ctorParameters = function () { return [ + { type: core.ElementRef }, + { type: core.ViewContainerRef }, + { type: core.Renderer2 }, + { type: core.Injector }, + { type: core.ComponentFactoryResolver }, + { type: NgbTypeaheadConfig }, + { type: core.NgZone }, + { type: Live }, + { type: undefined, decorators: [{ type: core.Inject, args: [common.DOCUMENT,] }] }, + { type: core.NgZone }, + { type: core.ChangeDetectorRef }, + { type: core.ApplicationRef } + ]; }; + NgbTypeahead.propDecorators = { + autocomplete: [{ type: core.Input }], + container: [{ type: core.Input }], + editable: [{ type: core.Input }], + focusFirst: [{ type: core.Input }], + inputFormatter: [{ type: core.Input }], + ngbTypeahead: [{ type: core.Input }], + resultFormatter: [{ type: core.Input }], + resultTemplate: [{ type: core.Input }], + showHint: [{ type: core.Input }], + placement: [{ type: core.Input }], + selectItem: [{ type: core.Output }] + }; + return NgbTypeahead; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + var NgbTypeaheadModule = /** @class */ (function () { + function NgbTypeaheadModule() { + } + NgbTypeaheadModule.decorators = [ + { type: core.NgModule, args: [{ + declarations: [NgbTypeahead, NgbHighlight, NgbTypeaheadWindow], + exports: [NgbTypeahead, NgbHighlight], + imports: [common.CommonModule], + entryComponents: [NgbTypeaheadWindow] + },] } + ]; + return NgbTypeaheadModule; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** @type {?} */ + var NGB_MODULES = [ + SbCardModule, NgbAccordionModule, NgbAlertModule, NgbButtonsModule, NgbCarouselModule, NgbCollapseModule, NgbDatepickerModule, + NgbDropdownModule, NgbModalModule, NgbPaginationModule, NgbPopoverModule, NgbProgressbarModule, NgbRatingModule, + NgbTabsetModule, NgbTimepickerModule, NgbToastModule, NgbTooltipModule, NgbTypeaheadModule + ]; + var NgbModule = /** @class */ (function () { + function NgbModule() { + } + NgbModule.decorators = [ + { type: core.NgModule, args: [{ imports: NGB_MODULES, exports: NGB_MODULES },] } + ]; + return NgbModule; + }()); + + exports.ModalDismissReasons = ModalDismissReasons; + exports.NgbAccordion = NgbAccordion; + exports.NgbAccordionConfig = NgbAccordionConfig; + exports.NgbAccordionModule = NgbAccordionModule; + exports.NgbActiveModal = NgbActiveModal; + exports.NgbAlert = NgbAlert; + exports.NgbAlertConfig = NgbAlertConfig; + exports.NgbAlertModule = NgbAlertModule; + exports.NgbButtonLabel = NgbButtonLabel; + exports.NgbButtonsModule = NgbButtonsModule; + exports.NgbCalendar = NgbCalendar; + exports.NgbCalendarGregorian = NgbCalendarGregorian; + exports.NgbCalendarHebrew = NgbCalendarHebrew; + exports.NgbCalendarIslamicCivil = NgbCalendarIslamicCivil; + exports.NgbCalendarIslamicUmalqura = NgbCalendarIslamicUmalqura; + exports.NgbCalendarPersian = NgbCalendarPersian; + exports.NgbCarousel = NgbCarousel; + exports.NgbCarouselConfig = NgbCarouselConfig; + exports.NgbCarouselModule = NgbCarouselModule; + exports.NgbCheckBox = NgbCheckBox; + exports.NgbCollapse = NgbCollapse; + exports.NgbCollapseModule = NgbCollapseModule; + exports.NgbDate = NgbDate; + exports.NgbDateAdapter = NgbDateAdapter; + exports.NgbDateNativeAdapter = NgbDateNativeAdapter; + exports.NgbDateNativeUTCAdapter = NgbDateNativeUTCAdapter; + exports.NgbDateParserFormatter = NgbDateParserFormatter; + exports.NgbDatepicker = NgbDatepicker; + exports.NgbDatepickerConfig = NgbDatepickerConfig; + exports.NgbDatepickerI18n = NgbDatepickerI18n; + exports.NgbDatepickerI18nHebrew = NgbDatepickerI18nHebrew; + exports.NgbDatepickerModule = NgbDatepickerModule; + exports.NgbDropdown = NgbDropdown; + exports.NgbDropdownAnchor = NgbDropdownAnchor; + exports.NgbDropdownConfig = NgbDropdownConfig; + exports.NgbDropdownItem = NgbDropdownItem; + exports.NgbDropdownMenu = NgbDropdownMenu; + exports.NgbDropdownModule = NgbDropdownModule; + exports.NgbDropdownToggle = NgbDropdownToggle; + exports.NgbHighlight = NgbHighlight; + exports.NgbInputDatepicker = NgbInputDatepicker; + exports.NgbModal = NgbModal; + exports.NgbModalConfig = NgbModalConfig; + exports.NgbModalModule = NgbModalModule; + exports.NgbModalRef = NgbModalRef; + exports.NgbModule = NgbModule; + exports.NgbPagination = NgbPagination; + exports.NgbPaginationConfig = NgbPaginationConfig; + exports.NgbPaginationEllipsis = NgbPaginationEllipsis; + exports.NgbPaginationFirst = NgbPaginationFirst; + exports.NgbPaginationLast = NgbPaginationLast; + exports.NgbPaginationModule = NgbPaginationModule; + exports.NgbPaginationNext = NgbPaginationNext; + exports.NgbPaginationNumber = NgbPaginationNumber; + exports.NgbPaginationPrevious = NgbPaginationPrevious; + exports.NgbPanel = NgbPanel; + exports.NgbPanelContent = NgbPanelContent; + exports.NgbPanelHeader = NgbPanelHeader; + exports.NgbPanelTitle = NgbPanelTitle; + exports.NgbPanelToggle = NgbPanelToggle; + exports.NgbPopover = NgbPopover; + exports.NgbPopoverConfig = NgbPopoverConfig; + exports.NgbPopoverModule = NgbPopoverModule; + exports.NgbProgressbar = NgbProgressbar; + exports.NgbProgressbarConfig = NgbProgressbarConfig; + exports.NgbProgressbarModule = NgbProgressbarModule; + exports.NgbRadio = NgbRadio; + exports.NgbRadioGroup = NgbRadioGroup; + exports.NgbRating = NgbRating; + exports.NgbRatingConfig = NgbRatingConfig; + exports.NgbRatingModule = NgbRatingModule; + exports.NgbSlide = NgbSlide; + exports.NgbSlideEventDirection = NgbSlideEventDirection; + exports.NgbSlideEventSource = NgbSlideEventSource; + exports.NgbTab = NgbTab; + exports.NgbTabContent = NgbTabContent; + exports.NgbTabTitle = NgbTabTitle; + exports.NgbTabset = NgbTabset; + exports.NgbTabsetConfig = NgbTabsetConfig; + exports.NgbTabsetModule = NgbTabsetModule; + exports.NgbTimeAdapter = NgbTimeAdapter; + exports.NgbTimepicker = NgbTimepicker; + exports.NgbTimepickerConfig = NgbTimepickerConfig; + exports.NgbTimepickerI18n = NgbTimepickerI18n; + exports.NgbTimepickerModule = NgbTimepickerModule; + exports.NgbToast = NgbToast; + exports.NgbToastConfig = NgbToastConfig; + exports.NgbToastHeader = NgbToastHeader; + exports.NgbToastModule = NgbToastModule; + exports.NgbTooltip = NgbTooltip; + exports.NgbTooltipConfig = NgbTooltipConfig; + exports.NgbTooltipModule = NgbTooltipModule; + exports.NgbTypeahead = NgbTypeahead; + exports.NgbTypeaheadConfig = NgbTypeaheadConfig; + exports.NgbTypeaheadModule = NgbTypeaheadModule; + exports.SbCard = SbCard; + exports.SbCardConfig = SbCardConfig; + exports.SbCardModule = SbCardModule; + exports.ɵa = NGB_CAROUSEL_DIRECTIVES; + exports.ɵb = NGB_DATEPICKER_CALENDAR_FACTORY; + exports.ɵba = ARIA_LIVE_DELAY; + exports.ɵbb = ARIA_LIVE_DELAY_FACTORY; + exports.ɵbc = Live; + exports.ɵbd = NgbCalendarHijri; + exports.ɵbe = ContentRef; + exports.ɵc = NgbDatepickerMonthView; + exports.ɵd = NgbDatepickerDayView; + exports.ɵe = NgbDatepickerNavigation; + exports.ɵf = NgbDatepickerNavigationSelect; + exports.ɵg = NGB_DATEPICKER_18N_FACTORY; + exports.ɵh = NgbDatepickerI18nDefault; + exports.ɵi = NGB_DATEPICKER_DATE_ADAPTER_FACTORY; + exports.ɵj = NgbDateStructAdapter; + exports.ɵk = NGB_DATEPICKER_PARSER_FORMATTER_FACTORY; + exports.ɵl = NgbDateISOParserFormatter; + exports.ɵm = NgbNavbar; + exports.ɵn = NgbPopoverWindow; + exports.ɵo = NGB_DATEPICKER_TIME_ADAPTER_FACTORY; + exports.ɵp = NgbTimeStructAdapter; + exports.ɵq = NGB_TIMEPICKER_I18N_FACTORY; + exports.ɵr = NgbTimepickerI18nDefault; + exports.ɵs = NgbTooltipWindow; + exports.ɵt = NgbTypeaheadWindow; + exports.ɵu = NgbDatepickerService; + exports.ɵv = NgbDatepickerKeyMapService; + exports.ɵw = NgbModalBackdrop; + exports.ɵx = NgbModalWindow; + exports.ɵy = NgbModalStack; + exports.ɵz = ScrollBar; + + Object.defineProperty(exports, '__esModule', { value: true }); + +})); +//# sourceMappingURL=sunbird-ui-components.umd.js.map diff --git a/dist/sunbird-ui-components/bundles/sunbird-ui-components.umd.js.map b/dist/sunbird-ui-components/bundles/sunbird-ui-components.umd.js.map new file mode 100644 index 0000000..709757a --- /dev/null +++ b/dist/sunbird-ui-components/bundles/sunbird-ui-components.umd.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sunbird-ui-components.umd.js","sources":["../../../node_modules/tslib/tslib.es6.js","ng://@sunbird-ed/sunbird-ui-components/card/card-config.ts","ng://@sunbird-ed/sunbird-ui-components/card/card.ts","ng://@sunbird-ed/sunbird-ui-components/card/card.module.ts","ng://@sunbird-ed/sunbird-ui-components/util/util.ts","ng://@sunbird-ed/sunbird-ui-components/accordion/accordion-config.ts","ng://@sunbird-ed/sunbird-ui-components/accordion/accordion.ts","ng://@sunbird-ed/sunbird-ui-components/accordion/accordion.module.ts","ng://@sunbird-ed/sunbird-ui-components/alert/alert-config.ts","ng://@sunbird-ed/sunbird-ui-components/alert/alert.ts","ng://@sunbird-ed/sunbird-ui-components/alert/alert.module.ts","ng://@sunbird-ed/sunbird-ui-components/buttons/label.ts","ng://@sunbird-ed/sunbird-ui-components/buttons/checkbox.ts","ng://@sunbird-ed/sunbird-ui-components/buttons/radio.ts","ng://@sunbird-ed/sunbird-ui-components/buttons/buttons.module.ts","ng://@sunbird-ed/sunbird-ui-components/carousel/carousel-config.ts","ng://@sunbird-ed/sunbird-ui-components/carousel/carousel.ts","ng://@sunbird-ed/sunbird-ui-components/carousel/carousel.module.ts","ng://@sunbird-ed/sunbird-ui-components/collapse/collapse.ts","ng://@sunbird-ed/sunbird-ui-components/collapse/collapse.module.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/ngb-date.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/ngb-calendar.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker-tools.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker-i18n.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker-service.ts","ng://@sunbird-ed/sunbird-ui-components/util/key.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker-keymap-service.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker-view-model.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker-config.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/adapters/ngb-date-adapter.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker-month-view.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker-navigation.ts","ng://@sunbird-ed/sunbird-ui-components/util/autoclose.ts","ng://@sunbird-ed/sunbird-ui-components/util/focus-trap.ts","ng://@sunbird-ed/sunbird-ui-components/util/positioning.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/ngb-date-parser-formatter.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker-input.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker-day-view.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker-navigation-select.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/hijri/ngb-calendar-hijri.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/hijri/ngb-calendar-islamic-civil.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/hijri/ngb-calendar-islamic-umalqura.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/jalali/jalali.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/jalali/ngb-calendar-persian.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/hebrew/hebrew.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/hebrew/ngb-calendar-hebrew.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/hebrew/datepicker-i18n-hebrew.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/adapters/ngb-date-native-adapter.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/adapters/ngb-date-native-utc-adapter.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker.module.ts","ng://@sunbird-ed/sunbird-ui-components/dropdown/dropdown-config.ts","ng://@sunbird-ed/sunbird-ui-components/dropdown/dropdown.ts","ng://@sunbird-ed/sunbird-ui-components/dropdown/dropdown.module.ts","ng://@sunbird-ed/sunbird-ui-components/modal/modal-config.ts","ng://@sunbird-ed/sunbird-ui-components/util/popup.ts","ng://@sunbird-ed/sunbird-ui-components/util/scrollbar.ts","ng://@sunbird-ed/sunbird-ui-components/modal/modal-backdrop.ts","ng://@sunbird-ed/sunbird-ui-components/modal/modal-ref.ts","ng://@sunbird-ed/sunbird-ui-components/modal/modal-dismiss-reasons.ts","ng://@sunbird-ed/sunbird-ui-components/modal/modal-window.ts","ng://@sunbird-ed/sunbird-ui-components/modal/modal-stack.ts","ng://@sunbird-ed/sunbird-ui-components/modal/modal.ts","ng://@sunbird-ed/sunbird-ui-components/modal/modal.module.ts","ng://@sunbird-ed/sunbird-ui-components/pagination/pagination-config.ts","ng://@sunbird-ed/sunbird-ui-components/pagination/pagination.ts","ng://@sunbird-ed/sunbird-ui-components/pagination/pagination.module.ts","ng://@sunbird-ed/sunbird-ui-components/util/triggers.ts","ng://@sunbird-ed/sunbird-ui-components/popover/popover-config.ts","ng://@sunbird-ed/sunbird-ui-components/popover/popover.ts","ng://@sunbird-ed/sunbird-ui-components/popover/popover.module.ts","ng://@sunbird-ed/sunbird-ui-components/progressbar/progressbar-config.ts","ng://@sunbird-ed/sunbird-ui-components/progressbar/progressbar.ts","ng://@sunbird-ed/sunbird-ui-components/progressbar/progressbar.module.ts","ng://@sunbird-ed/sunbird-ui-components/rating/rating-config.ts","ng://@sunbird-ed/sunbird-ui-components/rating/rating.ts","ng://@sunbird-ed/sunbird-ui-components/rating/rating.module.ts","ng://@sunbird-ed/sunbird-ui-components/tabset/tabset-config.ts","ng://@sunbird-ed/sunbird-ui-components/tabset/tabset.ts","ng://@sunbird-ed/sunbird-ui-components/tabset/tabset.module.ts","ng://@sunbird-ed/sunbird-ui-components/timepicker/ngb-time.ts","ng://@sunbird-ed/sunbird-ui-components/timepicker/timepicker-config.ts","ng://@sunbird-ed/sunbird-ui-components/timepicker/ngb-time-adapter.ts","ng://@sunbird-ed/sunbird-ui-components/timepicker/timepicker-i18n.ts","ng://@sunbird-ed/sunbird-ui-components/timepicker/timepicker.ts","ng://@sunbird-ed/sunbird-ui-components/timepicker/timepicker.module.ts","ng://@sunbird-ed/sunbird-ui-components/toast/toast-config.ts","ng://@sunbird-ed/sunbird-ui-components/toast/toast.ts","ng://@sunbird-ed/sunbird-ui-components/toast/toast.module.ts","ng://@sunbird-ed/sunbird-ui-components/tooltip/tooltip-config.ts","ng://@sunbird-ed/sunbird-ui-components/tooltip/tooltip.ts","ng://@sunbird-ed/sunbird-ui-components/tooltip/tooltip.module.ts","ng://@sunbird-ed/sunbird-ui-components/typeahead/highlight.ts","ng://@sunbird-ed/sunbird-ui-components/typeahead/typeahead-window.ts","ng://@sunbird-ed/sunbird-ui-components/util/accessibility/live.ts","ng://@sunbird-ed/sunbird-ui-components/typeahead/typeahead-config.ts","ng://@sunbird-ed/sunbird-ui-components/typeahead/typeahead.ts","ng://@sunbird-ed/sunbird-ui-components/typeahead/typeahead.module.ts","ng://@sunbird-ed/sunbird-ui-components/index.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","import {Injectable} from '@angular/core';\n\n/**\n * A configuration service for the [SbCard](#/components/alert/api#SbCard) component.\n *\n * You can inject this service, typically in your root component, and customize its properties\n * to provide default values for all alerts used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class SbCardConfig {\n dismissible = true;\n type = 'warning';\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n ChangeDetectionStrategy,\n Renderer2,\n ElementRef,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewEncapsulation\n} from '@angular/core';\n\nimport {SbCardConfig} from './card-config';\n\n/**\n * Alert is a component to provide contextual feedback messages for user.\n *\n * It supports several alert types and can be dismissed.\n */\n@Component({\n selector: 'sb-card',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {'role': 'alert', 'class': 'alert', '[class.alert-dismissible]': 'dismissible'},\n template: `\n \n \n `,\n styleUrls: ['./card.scss']\n})\nexport class SbCard implements OnInit,\n OnChanges {\n /**\n * If `true`, alert can be dismissed by the user.\n *\n * The close button (×) will be displayed and you can be notified\n * of the event with the `(close)` output.\n */\n @Input() dismissible: boolean;\n /**\n * Type of the alert.\n *\n * Bootstrap provides styles for the following types: `'success'`, `'info'`, `'warning'`, `'danger'`, `'primary'`,\n * `'secondary'`, `'light'` and `'dark'`.\n */\n @Input() type: string;\n /**\n * An event emitted when the close button is clicked. It has no payload and only relevant for dismissible alerts.\n */\n @Output() close = new EventEmitter();\n\n constructor(config: SbCardConfig, private _renderer: Renderer2, private _element: ElementRef) {\n this.dismissible = config.dismissible;\n this.type = config.type;\n }\n\n closeHandler() { this.close.emit(null); }\n\n ngOnChanges(changes: SimpleChanges) {\n const typeChange = changes['type'];\n if (typeChange && !typeChange.firstChange) {\n this._renderer.removeClass(this._element.nativeElement, `alert-${typeChange.previousValue}`);\n this._renderer.addClass(this._element.nativeElement, `alert-${typeChange.currentValue}`);\n }\n }\n\n ngOnInit() { this._renderer.addClass(this._element.nativeElement, `alert-${this.type}`); }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\nimport {SbCard} from './card';\n\nexport {SbCard} from './card';\nexport {SbCardConfig} from './card-config';\n\n@NgModule({declarations: [SbCard], exports: [SbCard], imports: [CommonModule], entryComponents: [SbCard]})\nexport class SbCardModule {\n}\n","export function toInteger(value: any): number {\n return parseInt(`${value}`, 10);\n}\n\nexport function toString(value: any): string {\n return (value !== undefined && value !== null) ? `${value}` : '';\n}\n\nexport function getValueInRange(value: number, max: number, min = 0): number {\n return Math.max(Math.min(value, max), min);\n}\n\nexport function isString(value: any): value is string {\n return typeof value === 'string';\n}\n\nexport function isNumber(value: any): value is number {\n return !isNaN(toInteger(value));\n}\n\nexport function isInteger(value: any): value is number {\n return typeof value === 'number' && isFinite(value) && Math.floor(value) === value;\n}\n\nexport function isDefined(value: any): boolean {\n return value !== undefined && value !== null;\n}\n\nexport function padNumber(value: number) {\n if (isNumber(value)) {\n return `0${value}`.slice(-2);\n } else {\n return '';\n }\n}\n\nexport function regExpEscape(text) {\n return text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n}\n\nexport function hasClassName(element: any, className: string): boolean {\n return element && element.className && element.className.split &&\n element.className.split(/\\s+/).indexOf(className) >= 0;\n}\n\nif (typeof Element !== 'undefined' && !Element.prototype.closest) {\n // Polyfill for ie10+\n\n if (!Element.prototype.matches) {\n // IE uses the non-standard name: msMatchesSelector\n Element.prototype.matches = (Element.prototype as any).msMatchesSelector || Element.prototype.webkitMatchesSelector;\n }\n\n Element.prototype.closest = function(s: string) {\n let el = this;\n if (!document.documentElement.contains(el)) {\n return null;\n }\n do {\n if (el.matches(s)) {\n return el;\n }\n el = el.parentElement || el.parentNode;\n } while (el !== null && el.nodeType === 1);\n return null;\n };\n}\n\nexport function closest(element: HTMLElement, selector): HTMLElement {\n if (!selector) {\n return null;\n }\n\n return element.closest(selector);\n}\n","import {Injectable} from '@angular/core';\n\n/**\n * A configuration service for the [NgbAccordion](#/components/accordion/api#NgbAccordion) component.\n *\n * You can inject this service, typically in your root component, and customize its properties\n * to provide default values for all accordions used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbAccordionConfig {\n closeOthers = false;\n type: string;\n}\n","import {\n AfterContentChecked,\n Component,\n ContentChildren,\n Directive,\n EventEmitter,\n Host,\n Input,\n Optional,\n Output,\n QueryList,\n TemplateRef\n} from '@angular/core';\n\nimport {isString} from '../util/util';\n\nimport {NgbAccordionConfig} from './accordion-config';\n\nlet nextId = 0;\n\n/**\n * The context for the [NgbPanelHeader](#/components/accordion/api#NgbPanelHeader) template\n *\n * @since 4.1.0\n */\nexport interface NgbPanelHeaderContext {\n /**\n * `True` if current panel is opened\n */\n opened: boolean;\n}\n\n/**\n * A directive that wraps an accordion panel header with any HTML markup and a toggling button\n * marked with [`NgbPanelToggle`](#/components/accordion/api#NgbPanelToggle).\n * See the [header customization demo](#/components/accordion/examples#header) for more details.\n *\n * You can also use [`NgbPanelTitle`](#/components/accordion/api#NgbPanelTitle) to customize only the panel title.\n *\n * @since 4.1.0\n */\n@Directive({selector: 'ng-template[ngbPanelHeader]'})\nexport class NgbPanelHeader {\n constructor(public templateRef: TemplateRef) {}\n}\n\n/**\n * A directive that wraps only the panel title with HTML markup inside.\n *\n * You can also use [`NgbPanelHeader`](#/components/accordion/api#NgbPanelHeader) to customize the full panel header.\n */\n@Directive({selector: 'ng-template[ngbPanelTitle]'})\nexport class NgbPanelTitle {\n constructor(public templateRef: TemplateRef) {}\n}\n\n/**\n * A directive that wraps the accordion panel content.\n */\n@Directive({selector: 'ng-template[ngbPanelContent]'})\nexport class NgbPanelContent {\n constructor(public templateRef: TemplateRef) {}\n}\n\n/**\n * A directive that wraps an individual accordion panel with title and collapsible content.\n */\n@Directive({selector: 'ngb-panel'})\nexport class NgbPanel implements AfterContentChecked {\n /**\n * If `true`, the panel is disabled an can't be toggled.\n */\n @Input() disabled = false;\n\n /**\n * An optional id for the panel that must be unique on the page.\n *\n * If not provided, it will be auto-generated in the `ngb-panel-xxx` format.\n */\n @Input() id = `ngb-panel-${nextId++}`;\n\n isOpen = false;\n\n /**\n * The panel title.\n *\n * You can alternatively use [`NgbPanelTitle`](#/components/accordion/api#NgbPanelTitle) to set panel title.\n */\n @Input() title: string;\n\n /**\n * Type of the current panel.\n *\n * Bootstrap provides styles for the following types: `'success'`, `'info'`, `'warning'`, `'danger'`, `'primary'`,\n * `'secondary'`, `'light'` and `'dark'`.\n */\n @Input() type: string;\n\n titleTpl: NgbPanelTitle | null;\n headerTpl: NgbPanelHeader | null;\n contentTpl: NgbPanelContent | null;\n\n @ContentChildren(NgbPanelTitle, {descendants: false}) titleTpls: QueryList;\n @ContentChildren(NgbPanelHeader, {descendants: false}) headerTpls: QueryList;\n @ContentChildren(NgbPanelContent, {descendants: false}) contentTpls: QueryList;\n\n ngAfterContentChecked() {\n // We are using @ContentChildren instead of @ContentChild as in the Angular version being used\n // only @ContentChildren allows us to specify the {descendants: false} option.\n // Without {descendants: false} we are hitting bugs described in:\n // https://github.com/ng-bootstrap/ng-bootstrap/issues/2240\n this.titleTpl = this.titleTpls.first;\n this.headerTpl = this.headerTpls.first;\n this.contentTpl = this.contentTpls.first;\n }\n}\n\n/**\n * An event emitted right before toggling an accordion panel.\n */\nexport interface NgbPanelChangeEvent {\n /**\n * The id of the accordion panel that is being toggled.\n */\n panelId: string;\n\n /**\n * The next state of the panel.\n *\n * `true` if it will be opened, `false` if closed.\n */\n nextState: boolean;\n\n /**\n * Calling this function will prevent panel toggling.\n */\n preventDefault: () => void;\n}\n\n/**\n * Accordion is a collection of collapsible panels (bootstrap cards).\n *\n * It can ensure only one panel is opened at a time and allows to customize panel\n * headers.\n */\n@Component({\n selector: 'ngb-accordion',\n exportAs: 'ngbAccordion',\n host: {'class': 'accordion', 'role': 'tablist', '[attr.aria-multiselectable]': '!closeOtherPanels'},\n template: `\n \n \n \n \n
\n
\n \n
\n
\n
\n \n
\n
\n
\n
\n `\n})\nexport class NgbAccordion implements AfterContentChecked {\n @ContentChildren(NgbPanel) panels: QueryList;\n\n /**\n * An array or comma separated strings of panel ids that should be opened **initially**.\n *\n * For subsequent changes use methods like `expand()`, `collapse()`, etc. and\n * the `(panelChange)` event.\n */\n @Input() activeIds: string | string[] = [];\n\n /**\n * If `true`, only one panel could be opened at a time.\n *\n * Opening a new panel will close others.\n */\n @Input('closeOthers') closeOtherPanels: boolean;\n\n /**\n * If `true`, panel content will be detached from DOM and not simply hidden when the panel is collapsed.\n */\n @Input() destroyOnHide = true;\n\n /**\n * Type of panels.\n *\n * Bootstrap provides styles for the following types: `'success'`, `'info'`, `'warning'`, `'danger'`, `'primary'`,\n * `'secondary'`, `'light'` and `'dark'`.\n */\n @Input() type: string;\n\n /**\n * Event emitted right before the panel toggle happens.\n *\n * See [NgbPanelChangeEvent](#/components/accordion/api#NgbPanelChangeEvent) for payload details.\n */\n @Output() panelChange = new EventEmitter();\n\n constructor(config: NgbAccordionConfig) {\n this.type = config.type;\n this.closeOtherPanels = config.closeOthers;\n }\n\n /**\n * Checks if a panel with a given id is expanded.\n */\n isExpanded(panelId: string): boolean { return this.activeIds.indexOf(panelId) > -1; }\n\n /**\n * Expands a panel with a given id.\n *\n * Has no effect if the panel is already expanded or disabled.\n */\n expand(panelId: string): void { this._changeOpenState(this._findPanelById(panelId), true); }\n\n /**\n * Expands all panels, if `[closeOthers]` is `false`.\n *\n * If `[closeOthers]` is `true`, it will expand the first panel, unless there is already a panel opened.\n */\n expandAll(): void {\n if (this.closeOtherPanels) {\n if (this.activeIds.length === 0 && this.panels.length) {\n this._changeOpenState(this.panels.first, true);\n }\n } else {\n this.panels.forEach(panel => this._changeOpenState(panel, true));\n }\n }\n\n /**\n * Collapses a panel with the given id.\n *\n * Has no effect if the panel is already collapsed or disabled.\n */\n collapse(panelId: string) { this._changeOpenState(this._findPanelById(panelId), false); }\n\n /**\n * Collapses all opened panels.\n */\n collapseAll() {\n this.panels.forEach((panel) => { this._changeOpenState(panel, false); });\n }\n\n /**\n * Toggles a panel with the given id.\n *\n * Has no effect if the panel is disabled.\n */\n toggle(panelId: string) {\n const panel = this._findPanelById(panelId);\n if (panel) {\n this._changeOpenState(panel, !panel.isOpen);\n }\n }\n\n ngAfterContentChecked() {\n // active id updates\n if (isString(this.activeIds)) {\n this.activeIds = this.activeIds.split(/\\s*,\\s*/);\n }\n\n // update panels open states\n this.panels.forEach(panel => panel.isOpen = !panel.disabled && this.activeIds.indexOf(panel.id) > -1);\n\n // closeOthers updates\n if (this.activeIds.length > 1 && this.closeOtherPanels) {\n this._closeOthers(this.activeIds[0]);\n this._updateActiveIds();\n }\n }\n\n private _changeOpenState(panel: NgbPanel, nextState: boolean) {\n if (panel && !panel.disabled && panel.isOpen !== nextState) {\n let defaultPrevented = false;\n\n this.panelChange.emit(\n {panelId: panel.id, nextState: nextState, preventDefault: () => { defaultPrevented = true; }});\n\n if (!defaultPrevented) {\n panel.isOpen = nextState;\n\n if (nextState && this.closeOtherPanels) {\n this._closeOthers(panel.id);\n }\n this._updateActiveIds();\n }\n }\n }\n\n private _closeOthers(panelId: string) {\n this.panels.forEach(panel => {\n if (panel.id !== panelId) {\n panel.isOpen = false;\n }\n });\n }\n\n private _findPanelById(panelId: string): NgbPanel | null { return this.panels.find(p => p.id === panelId); }\n\n private _updateActiveIds() {\n this.activeIds = this.panels.filter(panel => panel.isOpen && !panel.disabled).map(panel => panel.id);\n }\n}\n\n/**\n * A directive to put on a button that toggles panel opening and closing.\n *\n * To be used inside the [`NgbPanelHeader`](#/components/accordion/api#NgbPanelHeader)\n *\n * @since 4.1.0\n */\n@Directive({\n selector: 'button[ngbPanelToggle]',\n host: {\n 'type': 'button',\n '[disabled]': 'panel.disabled',\n '[class.collapsed]': '!panel.isOpen',\n '[attr.aria-expanded]': 'panel.isOpen',\n '[attr.aria-controls]': 'panel.id',\n '(click)': 'accordion.toggle(panel.id)'\n }\n})\nexport class NgbPanelToggle {\n @Input()\n set ngbPanelToggle(panel: NgbPanel) {\n if (panel) {\n this.panel = panel;\n }\n }\n\n constructor(public accordion: NgbAccordion, @Optional() @Host() public panel: NgbPanel) {}\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\nimport {NgbAccordion, NgbPanel, NgbPanelTitle, NgbPanelContent, NgbPanelHeader, NgbPanelToggle} from './accordion';\n\nexport {\n NgbAccordion,\n NgbPanel,\n NgbPanelTitle,\n NgbPanelContent,\n NgbPanelChangeEvent,\n NgbPanelHeader,\n NgbPanelHeaderContext,\n NgbPanelToggle\n} from './accordion';\nexport {NgbAccordionConfig} from './accordion-config';\n\nconst NGB_ACCORDION_DIRECTIVES =\n [NgbAccordion, NgbPanel, NgbPanelTitle, NgbPanelContent, NgbPanelHeader, NgbPanelToggle];\n\n@NgModule({declarations: NGB_ACCORDION_DIRECTIVES, exports: NGB_ACCORDION_DIRECTIVES, imports: [CommonModule]})\nexport class NgbAccordionModule {\n}\n","import {Injectable} from '@angular/core';\n\n/**\n * A configuration service for the [NgbAlert](#/components/alert/api#NgbAlert) component.\n *\n * You can inject this service, typically in your root component, and customize its properties\n * to provide default values for all alerts used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbAlertConfig {\n dismissible = true;\n type = 'warning';\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n ChangeDetectionStrategy,\n Renderer2,\n ElementRef,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewEncapsulation\n} from '@angular/core';\n\nimport {NgbAlertConfig} from './alert-config';\n\n/**\n * Alert is a component to provide contextual feedback messages for user.\n *\n * It supports several alert types and can be dismissed.\n */\n@Component({\n selector: 'ngb-alert',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {'role': 'alert', 'class': 'alert', '[class.alert-dismissible]': 'dismissible'},\n template: `\n \n \n `,\n styleUrls: ['./alert.scss']\n})\nexport class NgbAlert implements OnInit,\n OnChanges {\n /**\n * If `true`, alert can be dismissed by the user.\n *\n * The close button (×) will be displayed and you can be notified\n * of the event with the `(close)` output.\n */\n @Input() dismissible: boolean;\n /**\n * Type of the alert.\n *\n * Bootstrap provides styles for the following types: `'success'`, `'info'`, `'warning'`, `'danger'`, `'primary'`,\n * `'secondary'`, `'light'` and `'dark'`.\n */\n @Input() type: string;\n /**\n * An event emitted when the close button is clicked. It has no payload and only relevant for dismissible alerts.\n */\n @Output() close = new EventEmitter();\n\n constructor(config: NgbAlertConfig, private _renderer: Renderer2, private _element: ElementRef) {\n this.dismissible = config.dismissible;\n this.type = config.type;\n }\n\n closeHandler() { this.close.emit(null); }\n\n ngOnChanges(changes: SimpleChanges) {\n const typeChange = changes['type'];\n if (typeChange && !typeChange.firstChange) {\n this._renderer.removeClass(this._element.nativeElement, `alert-${typeChange.previousValue}`);\n this._renderer.addClass(this._element.nativeElement, `alert-${typeChange.currentValue}`);\n }\n }\n\n ngOnInit() { this._renderer.addClass(this._element.nativeElement, `alert-${this.type}`); }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\nimport {NgbAlert} from './alert';\n\nexport {NgbAlert} from './alert';\nexport {NgbAlertConfig} from './alert-config';\n\n@NgModule({declarations: [NgbAlert], exports: [NgbAlert], imports: [CommonModule], entryComponents: [NgbAlert]})\nexport class NgbAlertModule {\n}\n","import {Directive} from '@angular/core';\n\n@Directive({\n selector: '[ngbButtonLabel]',\n host:\n {'[class.btn]': 'true', '[class.active]': 'active', '[class.disabled]': 'disabled', '[class.focus]': 'focused'}\n})\nexport class NgbButtonLabel {\n active: boolean;\n disabled: boolean;\n focused: boolean;\n}\n","import {ChangeDetectorRef, Directive, forwardRef, Input} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\n\nimport {NgbButtonLabel} from './label';\n\nconst NGB_CHECKBOX_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgbCheckBox),\n multi: true\n};\n\n\n/**\n * Allows to easily create Bootstrap-style checkbox buttons.\n *\n * Integrates with forms, so the value of a checked button is bound to the underlying form control\n * either in a reactive or template-driven way.\n */\n@Directive({\n selector: '[ngbButton][type=checkbox]',\n host: {\n 'autocomplete': 'off',\n '[checked]': 'checked',\n '[disabled]': 'disabled',\n '(change)': 'onInputChange($event)',\n '(focus)': 'focused = true',\n '(blur)': 'focused = false'\n },\n providers: [NGB_CHECKBOX_VALUE_ACCESSOR]\n})\nexport class NgbCheckBox implements ControlValueAccessor {\n checked;\n\n /**\n * If `true`, the checkbox button will be disabled\n */\n @Input() disabled = false;\n\n /**\n * The form control value when the checkbox is checked.\n */\n @Input() valueChecked = true;\n\n /**\n * The form control value when the checkbox is unchecked.\n */\n @Input() valueUnChecked = false;\n\n onChange = (_: any) => {};\n onTouched = () => {};\n\n set focused(isFocused: boolean) {\n this._label.focused = isFocused;\n if (!isFocused) {\n this.onTouched();\n }\n }\n\n constructor(private _label: NgbButtonLabel, private _cd: ChangeDetectorRef) {}\n\n onInputChange($event) {\n const modelToPropagate = $event.target.checked ? this.valueChecked : this.valueUnChecked;\n this.onChange(modelToPropagate);\n this.onTouched();\n this.writeValue(modelToPropagate);\n }\n\n registerOnChange(fn: (value: any) => any): void { this.onChange = fn; }\n\n registerOnTouched(fn: () => any): void { this.onTouched = fn; }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this._label.disabled = isDisabled;\n }\n\n writeValue(value) {\n this.checked = value === this.valueChecked;\n this._label.active = this.checked;\n\n // label won't be updated, if it is inside the OnPush component when [ngModel] changes\n this._cd.markForCheck();\n }\n}\n","import {ChangeDetectorRef, Directive, ElementRef, forwardRef, Input, OnDestroy, Renderer2} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\n\nimport {NgbButtonLabel} from './label';\n\nconst NGB_RADIO_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgbRadioGroup),\n multi: true\n};\n\nlet nextId = 0;\n\n/**\n * Allows to easily create Bootstrap-style radio buttons.\n *\n * Integrates with forms, so the value of a checked button is bound to the underlying form control\n * either in a reactive or template-driven way.\n */\n@Directive({selector: '[ngbRadioGroup]', host: {'role': 'radiogroup'}, providers: [NGB_RADIO_VALUE_ACCESSOR]})\nexport class NgbRadioGroup implements ControlValueAccessor {\n private _radios: Set = new Set();\n private _value = null;\n private _disabled: boolean;\n\n get disabled() { return this._disabled; }\n set disabled(isDisabled: boolean) { this.setDisabledState(isDisabled); }\n\n /**\n * Name of the radio group applied to radio input elements.\n *\n * Will be applied to all radio input elements inside the group,\n * unless [`NgbRadio`](#/components/buttons/api#NgbRadio)'s specify names themselves.\n *\n * If not provided, will be generated in the `ngb-radio-xx` format.\n */\n @Input() name = `ngb-radio-${nextId++}`;\n\n onChange = (_: any) => {};\n onTouched = () => {};\n\n onRadioChange(radio: NgbRadio) {\n this.writeValue(radio.value);\n this.onChange(radio.value);\n }\n\n onRadioValueUpdate() { this._updateRadiosValue(); }\n\n register(radio: NgbRadio) { this._radios.add(radio); }\n\n registerOnChange(fn: (value: any) => any): void { this.onChange = fn; }\n\n registerOnTouched(fn: () => any): void { this.onTouched = fn; }\n\n setDisabledState(isDisabled: boolean): void {\n this._disabled = isDisabled;\n this._updateRadiosDisabled();\n }\n\n unregister(radio: NgbRadio) { this._radios.delete(radio); }\n\n writeValue(value) {\n this._value = value;\n this._updateRadiosValue();\n }\n\n private _updateRadiosValue() { this._radios.forEach((radio) => radio.updateValue(this._value)); }\n private _updateRadiosDisabled() { this._radios.forEach((radio) => radio.updateDisabled()); }\n}\n\n\n/**\n * A directive that marks an input of type \"radio\" as a part of the\n * [`NgbRadioGroup`](#/components/buttons/api#NgbRadioGroup).\n */\n@Directive({\n selector: '[ngbButton][type=radio]',\n host: {\n '[checked]': 'checked',\n '[disabled]': 'disabled',\n '[name]': 'nameAttr',\n '(change)': 'onChange()',\n '(focus)': 'focused = true',\n '(blur)': 'focused = false'\n }\n})\nexport class NgbRadio implements OnDestroy {\n private _checked: boolean;\n private _disabled: boolean;\n private _value: any = null;\n\n /**\n * The value for the 'name' property of the input element.\n *\n * All inputs of the radio group should have the same name. If not specified,\n * the name of the enclosing group is used.\n */\n @Input() name: string;\n\n /**\n * The form control value when current radio button is checked.\n */\n @Input('value')\n set value(value: any) {\n this._value = value;\n const stringValue = value ? value.toString() : '';\n this._renderer.setProperty(this._element.nativeElement, 'value', stringValue);\n this._group.onRadioValueUpdate();\n }\n\n /**\n * If `true`, current radio button will be disabled.\n */\n @Input('disabled')\n set disabled(isDisabled: boolean) {\n this._disabled = isDisabled !== false;\n this.updateDisabled();\n }\n\n set focused(isFocused: boolean) {\n if (this._label) {\n this._label.focused = isFocused;\n }\n if (!isFocused) {\n this._group.onTouched();\n }\n }\n\n get checked() { return this._checked; }\n\n get disabled() { return this._group.disabled || this._disabled; }\n\n get value() { return this._value; }\n\n get nameAttr() { return this.name || this._group.name; }\n\n constructor(\n private _group: NgbRadioGroup, private _label: NgbButtonLabel, private _renderer: Renderer2,\n private _element: ElementRef, private _cd: ChangeDetectorRef) {\n this._group.register(this);\n this.updateDisabled();\n }\n\n ngOnDestroy() { this._group.unregister(this); }\n\n onChange() { this._group.onRadioChange(this); }\n\n updateValue(value) {\n // label won't be updated, if it is inside the OnPush component when [ngModel] changes\n if (this.value !== value) {\n this._cd.markForCheck();\n }\n\n this._checked = this.value === value;\n this._label.active = this._checked;\n }\n\n updateDisabled() { this._label.disabled = this.disabled; }\n}\n","import {NgModule} from '@angular/core';\nimport {NgbButtonLabel} from './label';\nimport {NgbCheckBox} from './checkbox';\nimport {NgbRadio, NgbRadioGroup} from './radio';\n\nexport {NgbButtonLabel} from './label';\nexport {NgbCheckBox} from './checkbox';\nexport {NgbRadio, NgbRadioGroup} from './radio';\n\n\nconst NGB_BUTTON_DIRECTIVES = [NgbButtonLabel, NgbCheckBox, NgbRadioGroup, NgbRadio];\n\n@NgModule({declarations: NGB_BUTTON_DIRECTIVES, exports: NGB_BUTTON_DIRECTIVES})\nexport class NgbButtonsModule {\n}\n","import {Injectable} from '@angular/core';\n\n/**\n * A configuration service for the [NgbCarousel](#/components/carousel/api#NgbCarousel) component.\n *\n * You can inject this service, typically in your root component, and customize its properties\n * to provide default values for all carousels used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbCarouselConfig {\n interval = 5000;\n wrap = true;\n keyboard = true;\n pauseOnHover = true;\n showNavigationArrows = true;\n showNavigationIndicators = true;\n}\n","import {\n AfterContentChecked,\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n Directive,\n EventEmitter,\n Inject,\n Input,\n NgZone,\n OnDestroy,\n Output,\n PLATFORM_ID,\n QueryList,\n TemplateRef,\n HostListener\n} from '@angular/core';\nimport {isPlatformBrowser} from '@angular/common';\n\nimport {NgbCarouselConfig} from './carousel-config';\n\nimport {Subject, timer, BehaviorSubject, combineLatest, NEVER} from 'rxjs';\nimport {startWith, map, switchMap, takeUntil, distinctUntilChanged} from 'rxjs/operators';\n\nlet nextId = 0;\n\n/**\n * A directive that wraps the individual carousel slide.\n */\n@Directive({selector: 'ng-template[ngbSlide]'})\nexport class NgbSlide {\n /**\n * Slide id that must be unique for the entire document.\n *\n * If not provided, will be generated in the `ngb-slide-xx` format.\n */\n @Input() id = `ngb-slide-${nextId++}`;\n constructor(public tplRef: TemplateRef) {}\n}\n\n/**\n * Carousel is a component to easily create and control slideshows.\n *\n * Allows to set intervals, change the way user interacts with the slides and provides a programmatic API.\n */\n@Component({\n selector: 'ngb-carousel',\n exportAs: 'ngbCarousel',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'carousel slide',\n '[style.display]': '\"block\"',\n 'tabIndex': '0',\n '(keydown.arrowLeft)': 'keyboard && prev(NgbSlideEventSource.ARROW_LEFT)',\n '(keydown.arrowRight)': 'keyboard && next(NgbSlideEventSource.ARROW_RIGHT)'\n },\n template: `\n
    \n
  1. \n
\n
\n
\n \n
\n
\n \n \n Previous\n \n \n \n Next\n \n `\n})\nexport class NgbCarousel implements AfterContentChecked,\n AfterContentInit, OnDestroy {\n @ContentChildren(NgbSlide) slides: QueryList;\n\n public NgbSlideEventSource = NgbSlideEventSource;\n\n private _destroy$ = new Subject();\n private _interval$ = new BehaviorSubject(0);\n private _mouseHover$ = new BehaviorSubject(false);\n private _pauseOnHover$ = new BehaviorSubject(false);\n private _pause$ = new BehaviorSubject(false);\n private _wrap$ = new BehaviorSubject(false);\n\n /**\n * The slide id that should be displayed **initially**.\n *\n * For subsequent interactions use methods `select()`, `next()`, etc. and the `(slide)` output.\n */\n @Input() activeId: string;\n\n /**\n * Time in milliseconds before the next slide is shown.\n */\n @Input()\n set interval(value: number) {\n this._interval$.next(value);\n }\n\n get interval() { return this._interval$.value; }\n\n /**\n * If `true`, will 'wrap' the carousel by switching from the last slide back to the first.\n */\n @Input()\n set wrap(value: boolean) {\n this._wrap$.next(value);\n }\n\n get wrap() { return this._wrap$.value; }\n\n /**\n * If `true`, allows to interact with carousel using keyboard 'arrow left' and 'arrow right'.\n */\n @Input() keyboard: boolean;\n\n /**\n * If `true`, will pause slide switching when mouse cursor hovers the slide.\n *\n * @since 2.2.0\n */\n @Input()\n set pauseOnHover(value: boolean) {\n this._pauseOnHover$.next(value);\n }\n\n get pauseOnHover() { return this._pauseOnHover$.value; }\n\n /**\n * If `true`, 'previous' and 'next' navigation arrows will be visible on the slide.\n *\n * @since 2.2.0\n */\n @Input() showNavigationArrows: boolean;\n\n /**\n * If `true`, navigation indicators at the bottom of the slide will be visible.\n *\n * @since 2.2.0\n */\n @Input() showNavigationIndicators: boolean;\n\n /**\n * An event emitted right after the slide transition is completed.\n *\n * See [`NgbSlideEvent`](#/components/carousel/api#NgbSlideEvent) for payload details.\n */\n @Output() slide = new EventEmitter();\n\n constructor(\n config: NgbCarouselConfig, @Inject(PLATFORM_ID) private _platformId, private _ngZone: NgZone,\n private _cd: ChangeDetectorRef) {\n this.interval = config.interval;\n this.wrap = config.wrap;\n this.keyboard = config.keyboard;\n this.pauseOnHover = config.pauseOnHover;\n this.showNavigationArrows = config.showNavigationArrows;\n this.showNavigationIndicators = config.showNavigationIndicators;\n }\n\n @HostListener('mouseenter')\n mouseEnter() {\n this._mouseHover$.next(true);\n }\n\n @HostListener('mouseleave')\n mouseLeave() {\n this._mouseHover$.next(false);\n }\n\n ngAfterContentInit() {\n // setInterval() doesn't play well with SSR and protractor,\n // so we should run it in the browser and outside Angular\n if (isPlatformBrowser(this._platformId)) {\n this._ngZone.runOutsideAngular(() => {\n const hasNextSlide$ = combineLatest(\n this.slide.pipe(map(slideEvent => slideEvent.current), startWith(this.activeId)),\n this._wrap$, this.slides.changes.pipe(startWith(null)))\n .pipe(\n map(([currentSlideId, wrap]) => {\n const slideArr = this.slides.toArray();\n const currentSlideIdx = this._getSlideIdxById(currentSlideId);\n return wrap ? slideArr.length > 1 : currentSlideIdx < slideArr.length - 1;\n }),\n distinctUntilChanged());\n combineLatest(this._pause$, this._pauseOnHover$, this._mouseHover$, this._interval$, hasNextSlide$)\n .pipe(\n map(([pause, pauseOnHover, mouseHover, interval, hasNextSlide]) =>\n ((pause || (pauseOnHover && mouseHover) || !hasNextSlide) ? 0 : interval)),\n\n distinctUntilChanged(), switchMap(interval => interval > 0 ? timer(interval, interval) : NEVER),\n takeUntil(this._destroy$))\n .subscribe(() => this._ngZone.run(() => this.next(NgbSlideEventSource.TIMER)));\n });\n }\n\n this.slides.changes.pipe(takeUntil(this._destroy$)).subscribe(() => this._cd.markForCheck());\n }\n\n ngAfterContentChecked() {\n let activeSlide = this._getSlideById(this.activeId);\n this.activeId = activeSlide ? activeSlide.id : (this.slides.length ? this.slides.first.id : null);\n }\n\n ngOnDestroy() { this._destroy$.next(); }\n\n /**\n * Navigates to a slide with the specified identifier.\n */\n select(slideId: string, source?: NgbSlideEventSource) {\n this._cycleToSelected(slideId, this._getSlideEventDirection(this.activeId, slideId), source);\n }\n\n /**\n * Navigates to the previous slide.\n */\n prev(source?: NgbSlideEventSource) {\n this._cycleToSelected(this._getPrevSlide(this.activeId), NgbSlideEventDirection.RIGHT, source);\n }\n\n /**\n * Navigates to the next slide.\n */\n next(source?: NgbSlideEventSource) {\n this._cycleToSelected(this._getNextSlide(this.activeId), NgbSlideEventDirection.LEFT, source);\n }\n\n /**\n * Pauses cycling through the slides.\n */\n pause() { this._pause$.next(true); }\n\n /**\n * Restarts cycling through the slides from left to right.\n */\n cycle() { this._pause$.next(false); }\n\n private _cycleToSelected(slideIdx: string, direction: NgbSlideEventDirection, source?: NgbSlideEventSource) {\n let selectedSlide = this._getSlideById(slideIdx);\n if (selectedSlide && selectedSlide.id !== this.activeId) {\n this.slide.emit(\n {prev: this.activeId, current: selectedSlide.id, direction: direction, paused: this._pause$.value, source});\n this.activeId = selectedSlide.id;\n }\n\n // we get here after the interval fires or any external API call like next(), prev() or select()\n this._cd.markForCheck();\n }\n\n private _getSlideEventDirection(currentActiveSlideId: string, nextActiveSlideId: string): NgbSlideEventDirection {\n const currentActiveSlideIdx = this._getSlideIdxById(currentActiveSlideId);\n const nextActiveSlideIdx = this._getSlideIdxById(nextActiveSlideId);\n\n return currentActiveSlideIdx > nextActiveSlideIdx ? NgbSlideEventDirection.RIGHT : NgbSlideEventDirection.LEFT;\n }\n\n private _getSlideById(slideId: string): NgbSlide { return this.slides.find(slide => slide.id === slideId); }\n\n private _getSlideIdxById(slideId: string): number {\n return this.slides.toArray().indexOf(this._getSlideById(slideId));\n }\n\n private _getNextSlide(currentSlideId: string): string {\n const slideArr = this.slides.toArray();\n const currentSlideIdx = this._getSlideIdxById(currentSlideId);\n const isLastSlide = currentSlideIdx === slideArr.length - 1;\n\n return isLastSlide ? (this.wrap ? slideArr[0].id : slideArr[slideArr.length - 1].id) :\n slideArr[currentSlideIdx + 1].id;\n }\n\n private _getPrevSlide(currentSlideId: string): string {\n const slideArr = this.slides.toArray();\n const currentSlideIdx = this._getSlideIdxById(currentSlideId);\n const isFirstSlide = currentSlideIdx === 0;\n\n return isFirstSlide ? (this.wrap ? slideArr[slideArr.length - 1].id : slideArr[0].id) :\n slideArr[currentSlideIdx - 1].id;\n }\n}\n\n/**\n * A slide change event emitted right after the slide transition is completed.\n */\nexport interface NgbSlideEvent {\n /**\n * The previous slide id.\n */\n prev: string;\n\n /**\n * The current slide id.\n */\n current: string;\n\n /**\n * The slide event direction.\n *\n * Possible values are `'left' | 'right'`.\n */\n direction: NgbSlideEventDirection;\n\n /**\n * Whether the pause() method was called (and no cycle() call was done afterwards).\n *\n * @since 5.1.0\n */\n paused: boolean;\n\n /**\n * Source triggering the slide change event.\n *\n * Possible values are `'timer' | 'arrowLeft' | 'arrowRight' | 'indicator'`\n *\n * @since 5.1.0\n */\n source?: NgbSlideEventSource;\n}\n\n/**\n * Defines the carousel slide transition direction.\n */\nexport enum NgbSlideEventDirection {\n LEFT = 'left',\n RIGHT = 'right'\n}\n\nexport enum NgbSlideEventSource {\n TIMER = 'timer',\n ARROW_LEFT = 'arrowLeft',\n ARROW_RIGHT = 'arrowRight',\n INDICATOR = 'indicator'\n}\n\nexport const NGB_CAROUSEL_DIRECTIVES = [NgbCarousel, NgbSlide];\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\nimport {NGB_CAROUSEL_DIRECTIVES} from './carousel';\n\nexport {NgbCarousel, NgbSlide, NgbSlideEvent, NgbSlideEventDirection, NgbSlideEventSource} from './carousel';\nexport {NgbCarouselConfig} from './carousel-config';\n\n@NgModule({declarations: NGB_CAROUSEL_DIRECTIVES, exports: NGB_CAROUSEL_DIRECTIVES, imports: [CommonModule]})\nexport class NgbCarouselModule {\n}\n","import {Directive, Input} from '@angular/core';\n\n/**\n * A directive to provide a simple way of hiding and showing elements on the page.\n */\n@Directive({\n selector: '[ngbCollapse]',\n exportAs: 'ngbCollapse',\n host: {'[class.collapse]': 'true', '[class.show]': '!collapsed'}\n})\nexport class NgbCollapse {\n /**\n * If `true`, will collapse the element or show it otherwise.\n */\n @Input('ngbCollapse') collapsed = false;\n}\n","import {NgModule} from '@angular/core';\nimport {NgbCollapse} from './collapse';\n\nexport {NgbCollapse} from './collapse';\n\n@NgModule({declarations: [NgbCollapse], exports: [NgbCollapse]})\nexport class NgbCollapseModule {\n}\n","import {NgbDateStruct} from './ngb-date-struct';\nimport {isInteger} from '../util/util';\n\n/**\n * A simple class that represents a date that datepicker also uses internally.\n *\n * It is the implementation of the `NgbDateStruct` interface that adds some convenience methods,\n * like `.equals()`, `.before()`, etc.\n *\n * All datepicker APIs consume `NgbDateStruct`, but return `NgbDate`.\n *\n * In many cases it is simpler to manipulate these objects together with\n * [`NgbCalendar`](#/components/datepicker/api#NgbCalendar) than native JS Dates.\n *\n * See the [date format overview](#/components/datepicker/overview#date-model) for more details.\n *\n * @since 3.0.0\n */\nexport class NgbDate implements NgbDateStruct {\n /**\n * The year, for example 2016\n */\n year: number;\n\n /**\n * The month, for example 1=Jan ... 12=Dec as in ISO 8601\n */\n month: number;\n\n /**\n * The day of month, starting with 1\n */\n day: number;\n\n /**\n * A **static method** that creates a new date object from the `NgbDateStruct`,\n *\n * ex. `NgbDate.from({year: 2000, month: 5, day: 1})`.\n *\n * If the `date` is already of `NgbDate` type, the method will return the same object.\n */\n static from(date: NgbDateStruct): NgbDate {\n if (date instanceof NgbDate) {\n return date;\n }\n return date ? new NgbDate(date.year, date.month, date.day) : null;\n }\n\n constructor(year: number, month: number, day: number) {\n this.year = isInteger(year) ? year : null;\n this.month = isInteger(month) ? month : null;\n this.day = isInteger(day) ? day : null;\n }\n\n /**\n * Checks if the current date is equal to another date.\n */\n equals(other: NgbDateStruct): boolean {\n return other && this.year === other.year && this.month === other.month && this.day === other.day;\n }\n\n /**\n * Checks if the current date is before another date.\n */\n before(other: NgbDateStruct): boolean {\n if (!other) {\n return false;\n }\n\n if (this.year === other.year) {\n if (this.month === other.month) {\n return this.day === other.day ? false : this.day < other.day;\n } else {\n return this.month < other.month;\n }\n } else {\n return this.year < other.year;\n }\n }\n\n /**\n * Checks if the current date is after another date.\n */\n after(other: NgbDateStruct): boolean {\n if (!other) {\n return false;\n }\n if (this.year === other.year) {\n if (this.month === other.month) {\n return this.day === other.day ? false : this.day > other.day;\n } else {\n return this.month > other.month;\n }\n } else {\n return this.year > other.year;\n }\n }\n}\n","import {NgbDate} from './ngb-date';\nimport {Injectable} from '@angular/core';\nimport {isInteger} from '../util/util';\n\nexport function fromJSDate(jsDate: Date) {\n return new NgbDate(jsDate.getFullYear(), jsDate.getMonth() + 1, jsDate.getDate());\n}\nexport function toJSDate(date: NgbDate) {\n const jsDate = new Date(date.year, date.month - 1, date.day, 12);\n // this is done avoid 30 -> 1930 conversion\n if (!isNaN(jsDate.getTime())) {\n jsDate.setFullYear(date.year);\n }\n return jsDate;\n}\n\nexport type NgbPeriod = 'y' | 'm' | 'd';\n\nexport function NGB_DATEPICKER_CALENDAR_FACTORY() {\n return new NgbCalendarGregorian();\n}\n\n/**\n * A service that represents the calendar used by the datepicker.\n *\n * The default implementation uses the Gregorian calendar. You can inject it in your own\n * implementations if necessary to simplify `NgbDate` calculations.\n */\n@Injectable({providedIn: 'root', useFactory: NGB_DATEPICKER_CALENDAR_FACTORY})\nexport abstract class NgbCalendar {\n /**\n * Returns the number of days per week.\n */\n abstract getDaysPerWeek(): number;\n\n /**\n * Returns an array of months per year.\n *\n * With default calendar we use ISO 8601 and return [1, 2, ..., 12];\n */\n abstract getMonths(year?: number): number[];\n\n /**\n * Returns the number of weeks per month.\n */\n abstract getWeeksPerMonth(): number;\n\n /**\n * Returns the weekday number for a given day.\n *\n * With the default calendar we use ISO 8601: 'weekday' is 1=Mon ... 7=Sun\n */\n abstract getWeekday(date: NgbDate): number;\n\n /**\n * Adds a number of years, months or days to a given date.\n *\n * * `period` can be `y`, `m` or `d` and defaults to day.\n * * `number` defaults to 1.\n *\n * Always returns a new date.\n */\n abstract getNext(date: NgbDate, period?: NgbPeriod, number?: number): NgbDate;\n\n /**\n * Subtracts a number of years, months or days from a given date.\n *\n * * `period` can be `y`, `m` or `d` and defaults to day.\n * * `number` defaults to 1.\n *\n * Always returns a new date.\n */\n abstract getPrev(date: NgbDate, period?: NgbPeriod, number?: number): NgbDate;\n\n /**\n * Returns the week number for a given week.\n */\n abstract getWeekNumber(week: NgbDate[], firstDayOfWeek: number): number;\n\n /**\n * Returns the today's date.\n */\n abstract getToday(): NgbDate;\n\n /**\n * Checks if a date is valid in the current calendar.\n */\n abstract isValid(date: NgbDate): boolean;\n}\n\n@Injectable()\nexport class NgbCalendarGregorian extends NgbCalendar {\n getDaysPerWeek() { return 7; }\n\n getMonths() { return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; }\n\n getWeeksPerMonth() { return 6; }\n\n getNext(date: NgbDate, period: NgbPeriod = 'd', number = 1) {\n let jsDate = toJSDate(date);\n\n switch (period) {\n case 'y':\n return new NgbDate(date.year + number, 1, 1);\n case 'm':\n jsDate = new Date(date.year, date.month + number - 1, 1, 12);\n break;\n case 'd':\n jsDate.setDate(jsDate.getDate() + number);\n break;\n default:\n return date;\n }\n\n return fromJSDate(jsDate);\n }\n\n getPrev(date: NgbDate, period: NgbPeriod = 'd', number = 1) { return this.getNext(date, period, -number); }\n\n getWeekday(date: NgbDate) {\n let jsDate = toJSDate(date);\n let day = jsDate.getDay();\n // in JS Date Sun=0, in ISO 8601 Sun=7\n return day === 0 ? 7 : day;\n }\n\n getWeekNumber(week: NgbDate[], firstDayOfWeek: number) {\n // in JS Date Sun=0, in ISO 8601 Sun=7\n if (firstDayOfWeek === 7) {\n firstDayOfWeek = 0;\n }\n\n const thursdayIndex = (4 + 7 - firstDayOfWeek) % 7;\n let date = week[thursdayIndex];\n\n const jsDate = toJSDate(date);\n jsDate.setDate(jsDate.getDate() + 4 - (jsDate.getDay() || 7)); // Thursday\n const time = jsDate.getTime();\n jsDate.setMonth(0); // Compare with Jan 1\n jsDate.setDate(1);\n return Math.floor(Math.round((time - jsDate.getTime()) / 86400000) / 7) + 1;\n }\n\n getToday(): NgbDate { return fromJSDate(new Date()); }\n\n isValid(date: NgbDate): boolean {\n if (!date || !isInteger(date.year) || !isInteger(date.month) || !isInteger(date.day)) {\n return false;\n }\n\n // year 0 doesn't exist in Gregorian calendar\n if (date.year === 0) {\n return false;\n }\n\n const jsDate = toJSDate(date);\n\n return !isNaN(jsDate.getTime()) && jsDate.getFullYear() === date.year && jsDate.getMonth() + 1 === date.month &&\n jsDate.getDate() === date.day;\n }\n}\n","import {NgbDate} from './ngb-date';\nimport {DatepickerViewModel, DayViewModel, MonthViewModel} from './datepicker-view-model';\nimport {NgbCalendar} from './ngb-calendar';\nimport {isDefined} from '../util/util';\nimport {NgbDatepickerI18n} from './datepicker-i18n';\n\nexport function isChangedDate(prev: NgbDate, next: NgbDate) {\n return !dateComparator(prev, next);\n}\n\nexport function isChangedMonth(prev: NgbDate, next: NgbDate) {\n return !prev && !next ? false : !prev || !next ? true : prev.year !== next.year || prev.month !== next.month;\n}\n\nexport function dateComparator(prev: NgbDate, next: NgbDate) {\n return (!prev && !next) || (!!prev && !!next && prev.equals(next));\n}\n\nexport function checkMinBeforeMax(minDate: NgbDate, maxDate: NgbDate) {\n if (maxDate && minDate && maxDate.before(minDate)) {\n throw new Error(`'maxDate' ${maxDate} should be greater than 'minDate' ${minDate}`);\n }\n}\n\nexport function checkDateInRange(date: NgbDate, minDate: NgbDate, maxDate: NgbDate): NgbDate {\n if (date && minDate && date.before(minDate)) {\n return minDate;\n }\n if (date && maxDate && date.after(maxDate)) {\n return maxDate;\n }\n\n return date;\n}\n\nexport function isDateSelectable(date: NgbDate, state: DatepickerViewModel) {\n const {minDate, maxDate, disabled, markDisabled} = state;\n // clang-format off\n return !(\n !isDefined(date) ||\n disabled ||\n (markDisabled && markDisabled(date, {year: date.year, month: date.month})) ||\n (minDate && date.before(minDate)) ||\n (maxDate && date.after(maxDate))\n );\n // clang-format on\n}\n\nexport function generateSelectBoxMonths(calendar: NgbCalendar, date: NgbDate, minDate: NgbDate, maxDate: NgbDate) {\n if (!date) {\n return [];\n }\n\n let months = calendar.getMonths(date.year);\n\n if (minDate && date.year === minDate.year) {\n const index = months.findIndex(month => month === minDate.month);\n months = months.slice(index);\n }\n\n if (maxDate && date.year === maxDate.year) {\n const index = months.findIndex(month => month === maxDate.month);\n months = months.slice(0, index + 1);\n }\n\n return months;\n}\n\nexport function generateSelectBoxYears(date: NgbDate, minDate: NgbDate, maxDate: NgbDate) {\n if (!date) {\n return [];\n }\n\n const start = minDate && minDate.year || date.year - 10;\n const end = maxDate && maxDate.year || date.year + 10;\n\n return Array.from({length: end - start + 1}, (e, i) => start + i);\n}\n\nexport function nextMonthDisabled(calendar: NgbCalendar, date: NgbDate, maxDate: NgbDate) {\n return maxDate && calendar.getNext(date, 'm').after(maxDate);\n}\n\nexport function prevMonthDisabled(calendar: NgbCalendar, date: NgbDate, minDate: NgbDate) {\n const prevDate = calendar.getPrev(date, 'm');\n return minDate && (prevDate.year === minDate.year && prevDate.month < minDate.month ||\n prevDate.year < minDate.year && minDate.month === 1);\n}\n\nexport function buildMonths(\n calendar: NgbCalendar, date: NgbDate, state: DatepickerViewModel, i18n: NgbDatepickerI18n,\n force: boolean): MonthViewModel[] {\n const {displayMonths, months} = state;\n // move old months to a temporary array\n const monthsToReuse = months.splice(0, months.length);\n\n // generate new first dates, nullify or reuse months\n const firstDates = Array.from({length: displayMonths}, (_, i) => {\n const firstDate = calendar.getNext(date, 'm', i);\n months[i] = null;\n\n if (!force) {\n const reusedIndex = monthsToReuse.findIndex(month => month.firstDate.equals(firstDate));\n // move reused month back to months\n if (reusedIndex !== -1) {\n months[i] = monthsToReuse.splice(reusedIndex, 1)[0];\n }\n }\n\n return firstDate;\n });\n\n // rebuild nullified months\n firstDates.forEach((firstDate, i) => {\n if (months[i] === null) {\n months[i] = buildMonth(calendar, firstDate, state, i18n, monthsToReuse.shift() || {} as MonthViewModel);\n }\n });\n\n return months;\n}\n\nexport function buildMonth(\n calendar: NgbCalendar, date: NgbDate, state: DatepickerViewModel, i18n: NgbDatepickerI18n,\n month: MonthViewModel = {} as MonthViewModel): MonthViewModel {\n const {dayTemplateData, minDate, maxDate, firstDayOfWeek, markDisabled, outsideDays} = state;\n const calendarToday = calendar.getToday();\n\n month.firstDate = null;\n month.lastDate = null;\n month.number = date.month;\n month.year = date.year;\n month.weeks = month.weeks || [];\n month.weekdays = month.weekdays || [];\n\n date = getFirstViewDate(calendar, date, firstDayOfWeek);\n\n // month has weeks\n for (let week = 0; week < calendar.getWeeksPerMonth(); week++) {\n let weekObject = month.weeks[week];\n if (!weekObject) {\n weekObject = month.weeks[week] = {number: 0, days: [], collapsed: true};\n }\n const days = weekObject.days;\n\n // week has days\n for (let day = 0; day < calendar.getDaysPerWeek(); day++) {\n if (week === 0) {\n month.weekdays[day] = calendar.getWeekday(date);\n }\n\n const newDate = new NgbDate(date.year, date.month, date.day);\n const nextDate = calendar.getNext(newDate);\n\n const ariaLabel = i18n.getDayAriaLabel(newDate);\n\n // marking date as disabled\n let disabled = !!((minDate && newDate.before(minDate)) || (maxDate && newDate.after(maxDate)));\n if (!disabled && markDisabled) {\n disabled = markDisabled(newDate, {month: month.number, year: month.year});\n }\n\n // today\n let today = newDate.equals(calendarToday);\n\n // adding user-provided data to the context\n let contextUserData =\n dayTemplateData ? dayTemplateData(newDate, {month: month.number, year: month.year}) : undefined;\n\n // saving first date of the month\n if (month.firstDate === null && newDate.month === month.number) {\n month.firstDate = newDate;\n }\n\n // saving last date of the month\n if (newDate.month === month.number && nextDate.month !== month.number) {\n month.lastDate = newDate;\n }\n\n let dayObject = days[day];\n if (!dayObject) {\n dayObject = days[day] = {} as DayViewModel;\n }\n dayObject.date = newDate;\n dayObject.context = Object.assign(dayObject.context || {}, {\n $implicit: newDate,\n date: newDate,\n data: contextUserData,\n currentMonth: month.number, disabled,\n focused: false,\n selected: false, today\n });\n dayObject.tabindex = -1;\n dayObject.ariaLabel = ariaLabel;\n dayObject.hidden = false;\n\n date = nextDate;\n }\n\n weekObject.number = calendar.getWeekNumber(days.map(day => day.date), firstDayOfWeek);\n\n // marking week as collapsed\n weekObject.collapsed = outsideDays === 'collapsed' && days[0].date.month !== month.number &&\n days[days.length - 1].date.month !== month.number;\n }\n\n return month;\n}\n\nexport function getFirstViewDate(calendar: NgbCalendar, date: NgbDate, firstDayOfWeek: number): NgbDate {\n const daysPerWeek = calendar.getDaysPerWeek();\n const firstMonthDate = new NgbDate(date.year, date.month, 1);\n const dayOfWeek = calendar.getWeekday(firstMonthDate) % daysPerWeek;\n return calendar.getPrev(firstMonthDate, 'd', (daysPerWeek + dayOfWeek - firstDayOfWeek) % daysPerWeek);\n}\n","import {Inject, Injectable, LOCALE_ID} from '@angular/core';\nimport {FormStyle, getLocaleDayNames, getLocaleMonthNames, TranslationWidth, formatDate} from '@angular/common';\nimport {NgbDateStruct} from './ngb-date-struct';\n\nexport function NGB_DATEPICKER_18N_FACTORY(locale) {\n return new NgbDatepickerI18nDefault(locale);\n}\n\n/**\n * A service supplying i18n data to the datepicker component.\n *\n * The default implementation of this service uses the Angular locale and registered locale data for\n * weekdays and month names (as explained in the Angular i18n guide).\n *\n * It also provides a way to i18n data that depends on calendar calculations, like aria labels, day, week and year\n * numerals. For other static labels the datepicker uses the default Angular i18n.\n *\n * See the [i18n demo](#/components/datepicker/examples#i18n) and\n * [Hebrew calendar demo](#/components/datepicker/calendars#hebrew) on how to extend this class and define\n * a custom provider for i18n.\n */\n@Injectable({providedIn: 'root', useFactory: NGB_DATEPICKER_18N_FACTORY, deps: [LOCALE_ID]})\nexport abstract class NgbDatepickerI18n {\n /**\n * Returns the short weekday name to display in the heading of the month view.\n *\n * With default calendar we use ISO 8601: 'weekday' is 1=Mon ... 7=Sun.\n */\n abstract getWeekdayShortName(weekday: number): string;\n\n /**\n * Returns the short month name to display in the date picker navigation.\n *\n * With default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec.\n */\n abstract getMonthShortName(month: number, year?: number): string;\n\n /**\n * Returns the full month name to display in the date picker navigation.\n *\n * With default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec.\n */\n abstract getMonthFullName(month: number, year?: number): string;\n\n /**\n * Returns the value of the `aria-label` attribute for a specific date.\n *\n * @since 2.0.0\n */\n abstract getDayAriaLabel(date: NgbDateStruct): string;\n\n /**\n * Returns the textual representation of a day that is rendered in a day cell.\n *\n * @since 3.0.0\n */\n getDayNumerals(date: NgbDateStruct): string { return `${date.day}`; }\n\n /**\n * Returns the textual representation of a week number rendered by datepicker.\n *\n * @since 3.0.0\n */\n getWeekNumerals(weekNumber: number): string { return `${weekNumber}`; }\n\n /**\n * Returns the textual representation of a year that is rendered in the datepicker year select box.\n *\n * @since 3.0.0\n */\n getYearNumerals(year: number): string { return `${year}`; }\n}\n\n@Injectable()\nexport class NgbDatepickerI18nDefault extends NgbDatepickerI18n {\n private _weekdaysShort: Array;\n private _monthsShort: Array;\n private _monthsFull: Array;\n\n constructor(@Inject(LOCALE_ID) private _locale: string) {\n super();\n\n const weekdaysStartingOnSunday = getLocaleDayNames(_locale, FormStyle.Standalone, TranslationWidth.Short);\n this._weekdaysShort = weekdaysStartingOnSunday.map((day, index) => weekdaysStartingOnSunday[(index + 1) % 7]);\n\n this._monthsShort = getLocaleMonthNames(_locale, FormStyle.Standalone, TranslationWidth.Abbreviated);\n this._monthsFull = getLocaleMonthNames(_locale, FormStyle.Standalone, TranslationWidth.Wide);\n }\n\n getWeekdayShortName(weekday: number): string { return this._weekdaysShort[weekday - 1]; }\n\n getMonthShortName(month: number): string { return this._monthsShort[month - 1]; }\n\n getMonthFullName(month: number): string { return this._monthsFull[month - 1]; }\n\n getDayAriaLabel(date: NgbDateStruct): string {\n const jsDate = new Date(date.year, date.month - 1, date.day);\n return formatDate(jsDate, 'fullDate', this._locale);\n }\n}\n","import {NgbCalendar, NgbPeriod} from './ngb-calendar';\nimport {NgbDate} from './ngb-date';\nimport {NgbDateStruct} from './ngb-date-struct';\nimport {DatepickerViewModel, NgbDayTemplateData, NgbMarkDisabled} from './datepicker-view-model';\nimport {Injectable} from '@angular/core';\nimport {isInteger, toInteger} from '../util/util';\nimport {Observable, Subject} from 'rxjs';\nimport {\n buildMonths,\n checkDateInRange,\n checkMinBeforeMax,\n isChangedDate,\n isChangedMonth,\n isDateSelectable,\n generateSelectBoxYears,\n generateSelectBoxMonths,\n prevMonthDisabled,\n nextMonthDisabled\n} from './datepicker-tools';\n\nimport {filter} from 'rxjs/operators';\nimport {NgbDatepickerI18n} from './datepicker-i18n';\n\n@Injectable()\nexport class NgbDatepickerService {\n private _model$ = new Subject();\n\n private _select$ = new Subject();\n\n private _state: DatepickerViewModel = {\n disabled: false,\n displayMonths: 1,\n firstDayOfWeek: 1,\n focusVisible: false,\n months: [],\n navigation: 'select',\n outsideDays: 'visible',\n prevDisabled: false,\n nextDisabled: false,\n selectBoxes: {years: [], months: []},\n selectedDate: null\n };\n\n get model$(): Observable { return this._model$.pipe(filter(model => model.months.length > 0)); }\n\n get select$(): Observable { return this._select$.pipe(filter(date => date !== null)); }\n\n set dayTemplateData(dayTemplateData: NgbDayTemplateData) {\n if (this._state.dayTemplateData !== dayTemplateData) {\n this._nextState({dayTemplateData});\n }\n }\n\n set disabled(disabled: boolean) {\n if (this._state.disabled !== disabled) {\n this._nextState({disabled});\n }\n }\n\n set displayMonths(displayMonths: number) {\n displayMonths = toInteger(displayMonths);\n if (isInteger(displayMonths) && displayMonths > 0 && this._state.displayMonths !== displayMonths) {\n this._nextState({displayMonths});\n }\n }\n\n set firstDayOfWeek(firstDayOfWeek: number) {\n firstDayOfWeek = toInteger(firstDayOfWeek);\n if (isInteger(firstDayOfWeek) && firstDayOfWeek >= 0 && this._state.firstDayOfWeek !== firstDayOfWeek) {\n this._nextState({firstDayOfWeek});\n }\n }\n\n set focusVisible(focusVisible: boolean) {\n if (this._state.focusVisible !== focusVisible && !this._state.disabled) {\n this._nextState({focusVisible});\n }\n }\n\n set maxDate(date: NgbDate) {\n const maxDate = this.toValidDate(date, null);\n if (isChangedDate(this._state.maxDate, maxDate)) {\n this._nextState({maxDate});\n }\n }\n\n set markDisabled(markDisabled: NgbMarkDisabled) {\n if (this._state.markDisabled !== markDisabled) {\n this._nextState({markDisabled});\n }\n }\n\n set minDate(date: NgbDate) {\n const minDate = this.toValidDate(date, null);\n if (isChangedDate(this._state.minDate, minDate)) {\n this._nextState({minDate});\n }\n }\n\n set navigation(navigation: 'select' | 'arrows' | 'none') {\n if (this._state.navigation !== navigation) {\n this._nextState({navigation});\n }\n }\n\n set outsideDays(outsideDays: 'visible' | 'collapsed' | 'hidden') {\n if (this._state.outsideDays !== outsideDays) {\n this._nextState({outsideDays});\n }\n }\n\n constructor(private _calendar: NgbCalendar, private _i18n: NgbDatepickerI18n) {}\n\n focus(date: NgbDate) {\n if (!this._state.disabled && this._calendar.isValid(date) && isChangedDate(this._state.focusDate, date)) {\n this._nextState({focusDate: date});\n }\n }\n\n focusMove(period?: NgbPeriod, number?: number) {\n this.focus(this._calendar.getNext(this._state.focusDate, period, number));\n }\n\n focusSelect() {\n if (isDateSelectable(this._state.focusDate, this._state)) {\n this.select(this._state.focusDate, {emitEvent: true});\n }\n }\n\n open(date: NgbDate) {\n const firstDate = this.toValidDate(date, this._calendar.getToday());\n if (!this._state.disabled && (!this._state.firstDate || isChangedMonth(this._state.firstDate, date))) {\n this._nextState({firstDate});\n }\n }\n\n select(date: NgbDate, options: {emitEvent?: boolean} = {}) {\n const selectedDate = this.toValidDate(date, null);\n if (!this._state.disabled) {\n if (isChangedDate(this._state.selectedDate, selectedDate)) {\n this._nextState({selectedDate});\n }\n\n if (options.emitEvent && isDateSelectable(selectedDate, this._state)) {\n this._select$.next(selectedDate);\n }\n }\n }\n\n toValidDate(date: NgbDateStruct, defaultValue?: NgbDate): NgbDate {\n const ngbDate = NgbDate.from(date);\n if (defaultValue === undefined) {\n defaultValue = this._calendar.getToday();\n }\n return this._calendar.isValid(ngbDate) ? ngbDate : defaultValue;\n }\n\n private _nextState(patch: Partial) {\n const newState = this._updateState(patch);\n this._patchContexts(newState);\n this._state = newState;\n this._model$.next(this._state);\n }\n\n private _patchContexts(state: DatepickerViewModel) {\n const {months, displayMonths, selectedDate, focusDate, focusVisible, disabled, outsideDays} = state;\n state.months.forEach(month => {\n month.weeks.forEach(week => {\n week.days.forEach(day => {\n\n // patch focus flag\n if (focusDate) {\n day.context.focused = focusDate.equals(day.date) && focusVisible;\n }\n\n // calculating tabindex\n day.tabindex = !disabled && day.date.equals(focusDate) && focusDate.month === month.number ? 0 : -1;\n\n // override context disabled\n if (disabled === true) {\n day.context.disabled = true;\n }\n\n // patch selection flag\n if (selectedDate !== undefined) {\n day.context.selected = selectedDate !== null && selectedDate.equals(day.date);\n }\n\n // visibility\n if (month.number !== day.date.month) {\n day.hidden = outsideDays === 'hidden' || outsideDays === 'collapsed' ||\n (displayMonths > 1 && day.date.after(months[0].firstDate) &&\n day.date.before(months[displayMonths - 1].lastDate));\n }\n });\n });\n });\n }\n\n private _updateState(patch: Partial): DatepickerViewModel {\n // patching fields\n const state = Object.assign({}, this._state, patch);\n\n let startDate = state.firstDate;\n\n // min/max dates changed\n if ('minDate' in patch || 'maxDate' in patch) {\n checkMinBeforeMax(state.minDate, state.maxDate);\n state.focusDate = checkDateInRange(state.focusDate, state.minDate, state.maxDate);\n state.firstDate = checkDateInRange(state.firstDate, state.minDate, state.maxDate);\n startDate = state.focusDate;\n }\n\n // disabled\n if ('disabled' in patch) {\n state.focusVisible = false;\n }\n\n // initial rebuild via 'select()'\n if ('selectedDate' in patch && this._state.months.length === 0) {\n startDate = state.selectedDate;\n }\n\n // terminate early if only focus visibility was changed\n if ('focusVisible' in patch) {\n return state;\n }\n\n // focus date changed\n if ('focusDate' in patch) {\n state.focusDate = checkDateInRange(state.focusDate, state.minDate, state.maxDate);\n startDate = state.focusDate;\n\n // nothing to rebuild if only focus changed and it is still visible\n if (state.months.length !== 0 && !state.focusDate.before(state.firstDate) &&\n !state.focusDate.after(state.lastDate)) {\n return state;\n }\n }\n\n // first date changed\n if ('firstDate' in patch) {\n state.firstDate = checkDateInRange(state.firstDate, state.minDate, state.maxDate);\n startDate = state.firstDate;\n }\n\n // rebuilding months\n if (startDate) {\n const forceRebuild = 'dayTemplateData' in patch || 'firstDayOfWeek' in patch || 'markDisabled' in patch ||\n 'minDate' in patch || 'maxDate' in patch || 'disabled' in patch || 'outsideDays' in patch;\n\n const months = buildMonths(this._calendar, startDate, state, this._i18n, forceRebuild);\n\n // updating months and boundary dates\n state.months = months;\n state.firstDate = months.length > 0 ? months[0].firstDate : undefined;\n state.lastDate = months.length > 0 ? months[months.length - 1].lastDate : undefined;\n\n // reset selected date if 'markDisabled' returns true\n if ('selectedDate' in patch && !isDateSelectable(state.selectedDate, state)) {\n state.selectedDate = null;\n }\n\n // adjusting focus after months were built\n if ('firstDate' in patch) {\n if (state.focusDate === undefined || state.focusDate.before(state.firstDate) ||\n state.focusDate.after(state.lastDate)) {\n state.focusDate = startDate;\n }\n }\n\n // adjusting months/years for the select box navigation\n const yearChanged = !this._state.firstDate || this._state.firstDate.year !== state.firstDate.year;\n const monthChanged = !this._state.firstDate || this._state.firstDate.month !== state.firstDate.month;\n if (state.navigation === 'select') {\n // years -> boundaries (min/max were changed)\n if ('minDate' in patch || 'maxDate' in patch || state.selectBoxes.years.length === 0 || yearChanged) {\n state.selectBoxes.years = generateSelectBoxYears(state.firstDate, state.minDate, state.maxDate);\n }\n\n // months -> when current year or boundaries change\n if ('minDate' in patch || 'maxDate' in patch || state.selectBoxes.months.length === 0 || yearChanged) {\n state.selectBoxes.months =\n generateSelectBoxMonths(this._calendar, state.firstDate, state.minDate, state.maxDate);\n }\n } else {\n state.selectBoxes = {years: [], months: []};\n }\n\n // updating navigation arrows -> boundaries change (min/max) or month/year changes\n if ((state.navigation === 'arrows' || state.navigation === 'select') &&\n (monthChanged || yearChanged || 'minDate' in patch || 'maxDate' in patch || 'disabled' in patch)) {\n state.prevDisabled = state.disabled || prevMonthDisabled(this._calendar, state.firstDate, state.minDate);\n state.nextDisabled = state.disabled || nextMonthDisabled(this._calendar, state.lastDate, state.maxDate);\n }\n }\n\n return state;\n }\n}\n","export enum Key {\n Tab = 9,\n Enter = 13,\n Escape = 27,\n Space = 32,\n PageUp = 33,\n PageDown = 34,\n End = 35,\n Home = 36,\n ArrowLeft = 37,\n ArrowUp = 38,\n ArrowRight = 39,\n ArrowDown = 40\n}\n","import {Injectable} from '@angular/core';\nimport {NgbDatepickerService} from './datepicker-service';\nimport {NgbCalendar} from './ngb-calendar';\nimport {Key} from '../util/key';\nimport {NgbDate} from './ngb-date';\n\n@Injectable()\nexport class NgbDatepickerKeyMapService {\n private _minDate: NgbDate;\n private _maxDate: NgbDate;\n private _firstViewDate: NgbDate;\n private _lastViewDate: NgbDate;\n\n constructor(private _service: NgbDatepickerService, private _calendar: NgbCalendar) {\n _service.model$.subscribe(model => {\n this._minDate = model.minDate;\n this._maxDate = model.maxDate;\n this._firstViewDate = model.firstDate;\n this._lastViewDate = model.lastDate;\n });\n }\n\n processKey(event: KeyboardEvent) {\n // tslint:disable-next-line:deprecation\n switch (event.which) {\n case Key.PageUp:\n this._service.focusMove(event.shiftKey ? 'y' : 'm', -1);\n break;\n case Key.PageDown:\n this._service.focusMove(event.shiftKey ? 'y' : 'm', 1);\n break;\n case Key.End:\n this._service.focus(event.shiftKey ? this._maxDate : this._lastViewDate);\n break;\n case Key.Home:\n this._service.focus(event.shiftKey ? this._minDate : this._firstViewDate);\n break;\n case Key.ArrowLeft:\n this._service.focusMove('d', -1);\n break;\n case Key.ArrowUp:\n this._service.focusMove('d', -this._calendar.getDaysPerWeek());\n break;\n case Key.ArrowRight:\n this._service.focusMove('d', 1);\n break;\n case Key.ArrowDown:\n this._service.focusMove('d', this._calendar.getDaysPerWeek());\n break;\n case Key.Enter:\n case Key.Space:\n this._service.focusSelect();\n break;\n default:\n return;\n }\n\n // note 'return' in default case\n event.preventDefault();\n event.stopPropagation();\n }\n}\n","import {NgbDate} from './ngb-date';\nimport {NgbDateStruct} from './ngb-date-struct';\nimport {DayTemplateContext} from './datepicker-day-template-context';\n\nexport type NgbMarkDisabled = (date: NgbDateStruct, current: {year: number, month: number}) => boolean;\nexport type NgbDayTemplateData = (date: NgbDateStruct, current: {year: number, month: number}) => any;\n\nexport type DayViewModel = {\n date: NgbDate,\n context: DayTemplateContext,\n tabindex: number,\n ariaLabel: string,\n hidden: boolean\n};\n\nexport type WeekViewModel = {\n number: number,\n days: DayViewModel[],\n collapsed: boolean\n};\n\nexport type MonthViewModel = {\n firstDate: NgbDate,\n lastDate: NgbDate,\n number: number,\n year: number,\n weeks: WeekViewModel[],\n weekdays: number[]\n};\n\n// clang-format off\nexport type DatepickerViewModel = {\n dayTemplateData?: NgbDayTemplateData,\n disabled: boolean,\n displayMonths: number,\n firstDate?: NgbDate,\n firstDayOfWeek: number,\n focusDate?: NgbDate,\n focusVisible: boolean,\n lastDate?: NgbDate,\n markDisabled?: NgbMarkDisabled,\n maxDate?: NgbDate,\n minDate?: NgbDate,\n months: MonthViewModel[],\n navigation: 'select' | 'arrows' | 'none',\n outsideDays: 'visible' | 'collapsed' | 'hidden',\n prevDisabled: boolean,\n nextDisabled: boolean,\n selectBoxes: {\n years: number[],\n months: number[]\n },\n selectedDate: NgbDate\n};\n// clang-format on\n\nexport enum NavigationEvent {\n PREV,\n NEXT\n}\n","import {Injectable, TemplateRef} from '@angular/core';\nimport {DayTemplateContext} from './datepicker-day-template-context';\nimport {NgbDateStruct} from './ngb-date-struct';\n\n/**\n * A configuration service for the [`NgbDatepicker`](#/components/datepicker/api#NgbDatepicker) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the datepickers used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbDatepickerConfig {\n dayTemplate: TemplateRef;\n dayTemplateData: (date: NgbDateStruct, current: {year: number, month: number}) => any;\n footerTemplate: TemplateRef;\n displayMonths = 1;\n firstDayOfWeek = 1;\n markDisabled: (date: NgbDateStruct, current: {year: number, month: number}) => boolean;\n minDate: NgbDateStruct;\n maxDate: NgbDateStruct;\n navigation: 'select' | 'arrows' | 'none' = 'select';\n outsideDays: 'visible' | 'collapsed' | 'hidden' = 'visible';\n showWeekdays = true;\n showWeekNumbers = false;\n startDate: {year: number, month: number};\n}\n","import {Injectable} from '@angular/core';\nimport {NgbDateStruct} from '../ngb-date-struct';\nimport {isInteger} from '../../util/util';\n\nexport function NGB_DATEPICKER_DATE_ADAPTER_FACTORY() {\n return new NgbDateStructAdapter();\n}\n\n/**\n * An abstract service that does the conversion between the internal datepicker `NgbDateStruct` model and\n * any provided user date model `D`, ex. a string, a native date, etc.\n *\n * The adapter is used **only** for conversion when binding datepicker to a form control,\n * ex. `[(ngModel)]=\"userDateModel\"`. Here `userDateModel` can be of any type.\n *\n * The default datepicker implementation assumes we use `NgbDateStruct` as a user model.\n *\n * See the [date format overview](#/components/datepicker/overview#date-model) for more details\n * and the [custom adapter demo](#/components/datepicker/examples#adapter) for an example.\n */\n@Injectable({providedIn: 'root', useFactory: NGB_DATEPICKER_DATE_ADAPTER_FACTORY})\nexport abstract class NgbDateAdapter {\n /**\n * Converts a user-model date of type `D` to an `NgbDateStruct` for internal use.\n */\n abstract fromModel(value: D): NgbDateStruct;\n\n /**\n * Converts an internal `NgbDateStruct` date to a user-model date of type `D`.\n */\n abstract toModel(date: NgbDateStruct): D;\n}\n\n@Injectable()\nexport class NgbDateStructAdapter extends NgbDateAdapter {\n /**\n * Converts a NgbDateStruct value into NgbDateStruct value\n */\n fromModel(date: NgbDateStruct): NgbDateStruct {\n return (date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day)) ?\n {year: date.year, month: date.month, day: date.day} :\n null;\n }\n\n /**\n * Converts a NgbDateStruct value into NgbDateStruct value\n */\n toModel(date: NgbDateStruct): NgbDateStruct {\n return (date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day)) ?\n {year: date.year, month: date.month, day: date.day} :\n null;\n }\n}\n","import {fromEvent, merge, Subject} from 'rxjs';\nimport {filter, take, takeUntil} from 'rxjs/operators';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {NgbCalendar} from './ngb-calendar';\nimport {NgbDate} from './ngb-date';\nimport {NgbDatepickerService} from './datepicker-service';\nimport {NgbDatepickerKeyMapService} from './datepicker-keymap-service';\nimport {DatepickerViewModel, NavigationEvent} from './datepicker-view-model';\nimport {DayTemplateContext} from './datepicker-day-template-context';\nimport {NgbDatepickerConfig} from './datepicker-config';\nimport {NgbDateAdapter} from './adapters/ngb-date-adapter';\nimport {NgbDateStruct} from './ngb-date-struct';\nimport {NgbDatepickerI18n} from './datepicker-i18n';\nimport {isChangedDate, isChangedMonth} from './datepicker-tools';\nimport {hasClassName} from '../util/util';\n\nconst NGB_DATEPICKER_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgbDatepicker),\n multi: true\n};\n\n/**\n * An event emitted right before the navigation happens and the month displayed by the datepicker changes.\n */\nexport interface NgbDatepickerNavigateEvent {\n /**\n * The currently displayed month.\n */\n current: {year: number, month: number};\n\n /**\n * The month we're navigating to.\n */\n next: {year: number, month: number};\n\n /**\n * Calling this function will prevent navigation from happening.\n *\n * @since 4.1.0\n */\n preventDefault: () => void;\n}\n\n/**\n * A highly configurable component that helps you with selecting calendar dates.\n *\n * `NgbDatepicker` is meant to be displayed inline on a page or put inside a popup.\n */\n@Component({\n exportAs: 'ngbDatepicker',\n selector: 'ngb-datepicker',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./datepicker.scss'],\n template: `\n \n
\n
\n
\n\n
\n \n \n
\n\n
\n \n
\n
1 && navigation === 'select')\"\n class=\"ngb-dp-month-name\">\n {{ i18n.getMonthFullName(month.number, month.year) }} {{ i18n.getYearNumerals(month.year) }}\n
\n \n \n
\n
\n
\n\n \n `,\n providers: [NGB_DATEPICKER_VALUE_ACCESSOR, NgbDatepickerService, NgbDatepickerKeyMapService]\n})\nexport class NgbDatepicker implements OnDestroy,\n OnChanges, OnInit, AfterViewInit, ControlValueAccessor {\n model: DatepickerViewModel;\n\n @ViewChild('months', {static: true}) private _monthsEl: ElementRef;\n private _controlValue: NgbDate;\n private _destroyed$ = new Subject();\n\n /**\n * The reference to a custom template for the day.\n *\n * Allows to completely override the way a day 'cell' in the calendar is displayed.\n *\n * See [`DayTemplateContext`](#/components/datepicker/api#DayTemplateContext) for the data you get inside.\n */\n @Input() dayTemplate: TemplateRef;\n\n /**\n * The callback to pass any arbitrary data to the template cell via the\n * [`DayTemplateContext`](#/components/datepicker/api#DayTemplateContext)'s `data` parameter.\n *\n * `current` is the month that is currently displayed by the datepicker.\n *\n * @since 3.3.0\n */\n @Input() dayTemplateData: (date: NgbDate, current: {year: number, month: number}) => any;\n\n /**\n * The number of months to display.\n */\n @Input() displayMonths: number;\n\n /**\n * The first day of the week.\n *\n * With default calendar we use ISO 8601: 'weekday' is 1=Mon ... 7=Sun.\n */\n @Input() firstDayOfWeek: number;\n\n /**\n * The reference to the custom template for the datepicker footer.\n *\n * @since 3.3.0\n */\n @Input() footerTemplate: TemplateRef;\n\n /**\n * The callback to mark some dates as disabled.\n *\n * It is called for each new date when navigating to a different month.\n *\n * `current` is the month that is currently displayed by the datepicker.\n */\n @Input() markDisabled: (date: NgbDate, current: {year: number, month: number}) => boolean;\n\n /**\n * The latest date that can be displayed or selected.\n *\n * If not provided, 'year' select box will display 10 years after the current month.\n */\n @Input() maxDate: NgbDateStruct;\n\n /**\n * The earliest date that can be displayed or selected.\n *\n * If not provided, 'year' select box will display 10 years before the current month.\n */\n @Input() minDate: NgbDateStruct;\n\n /**\n * Navigation type.\n *\n * * `\"select\"` - select boxes for month and navigation arrows\n * * `\"arrows\"` - only navigation arrows\n * * `\"none\"` - no navigation visible at all\n */\n @Input() navigation: 'select' | 'arrows' | 'none';\n\n /**\n * The way of displaying days that don't belong to the current month.\n *\n * * `\"visible\"` - days are visible\n * * `\"hidden\"` - days are hidden, white space preserved\n * * `\"collapsed\"` - days are collapsed, so the datepicker height might change between months\n *\n * For the 2+ months view, days in between months are never shown.\n */\n @Input() outsideDays: 'visible' | 'collapsed' | 'hidden';\n\n /**\n * If `true`, weekdays will be displayed.\n */\n @Input() showWeekdays: boolean;\n\n /**\n * If `true`, week numbers will be displayed.\n */\n @Input() showWeekNumbers: boolean;\n\n /**\n * The date to open calendar with.\n *\n * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec.\n * If nothing or invalid date is provided, calendar will open with current month.\n *\n * You could use `navigateTo(date)` method as an alternative.\n */\n @Input() startDate: {year: number, month: number, day?: number};\n\n /**\n * An event emitted right before the navigation happens and displayed month changes.\n *\n * See [`NgbDatepickerNavigateEvent`](#/components/datepicker/api#NgbDatepickerNavigateEvent) for the payload info.\n */\n @Output() navigate = new EventEmitter();\n\n /**\n * An event emitted when user selects a date using keyboard or mouse.\n *\n * The payload of the event is currently selected `NgbDate`.\n */\n @Output() select = new EventEmitter();\n\n onChange = (_: any) => {};\n onTouched = () => {};\n\n constructor(\n private _keyMapService: NgbDatepickerKeyMapService, public _service: NgbDatepickerService,\n private _calendar: NgbCalendar, public i18n: NgbDatepickerI18n, config: NgbDatepickerConfig,\n private _cd: ChangeDetectorRef, private _elementRef: ElementRef,\n private _ngbDateAdapter: NgbDateAdapter, private _ngZone: NgZone) {\n ['dayTemplate', 'dayTemplateData', 'displayMonths', 'firstDayOfWeek', 'footerTemplate', 'markDisabled', 'minDate',\n 'maxDate', 'navigation', 'outsideDays', 'showWeekdays', 'showWeekNumbers', 'startDate']\n .forEach(input => this[input] = config[input]);\n\n _service.select$.pipe(takeUntil(this._destroyed$)).subscribe(date => { this.select.emit(date); });\n\n _service.model$.pipe(takeUntil(this._destroyed$)).subscribe(model => {\n const newDate = model.firstDate;\n const oldDate = this.model ? this.model.firstDate : null;\n\n let navigationPrevented = false;\n // emitting navigation event if the first month changes\n if (!newDate.equals(oldDate)) {\n this.navigate.emit({\n current: oldDate ? {year: oldDate.year, month: oldDate.month} : null,\n next: {year: newDate.year, month: newDate.month},\n preventDefault: () => navigationPrevented = true\n });\n\n // can't prevent the very first navigation\n if (navigationPrevented && oldDate !== null) {\n this._service.open(oldDate);\n return;\n }\n }\n\n const newSelectedDate = model.selectedDate;\n const newFocusedDate = model.focusDate;\n const oldFocusedDate = this.model ? this.model.focusDate : null;\n\n this.model = model;\n\n // handling selection change\n if (isChangedDate(newSelectedDate, this._controlValue)) {\n this._controlValue = newSelectedDate;\n this.onTouched();\n this.onChange(this._ngbDateAdapter.toModel(newSelectedDate));\n }\n\n // handling focus change\n if (isChangedDate(newFocusedDate, oldFocusedDate) && oldFocusedDate && model.focusVisible) {\n this.focus();\n }\n\n _cd.markForCheck();\n });\n }\n\n focus() {\n this._ngZone.onStable.asObservable().pipe(take(1)).subscribe(() => {\n const elementToFocus =\n this._elementRef.nativeElement.querySelector('div.ngb-dp-day[tabindex=\"0\"]');\n if (elementToFocus) {\n elementToFocus.focus();\n }\n });\n }\n\n /**\n * Navigates to the provided date.\n *\n * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec.\n * If nothing or invalid date provided calendar will open current month.\n *\n * Use the `[startDate]` input as an alternative.\n */\n navigateTo(date?: {year: number, month: number, day?: number}) {\n this._service.open(NgbDate.from(date ? date.day ? date as NgbDateStruct : {...date, day: 1} : null));\n }\n\n ngAfterViewInit() {\n this._ngZone.runOutsideAngular(() => {\n const focusIns$ = fromEvent(this._monthsEl.nativeElement, 'focusin');\n const focusOuts$ = fromEvent(this._monthsEl.nativeElement, 'focusout');\n\n // we're changing 'focusVisible' only when entering or leaving months view\n // and ignoring all focus events where both 'target' and 'related' target are day cells\n merge(focusIns$, focusOuts$)\n .pipe(\n filter(\n ({target, relatedTarget}) =>\n !(hasClassName(target, 'ngb-dp-day') && hasClassName(relatedTarget, 'ngb-dp-day'))),\n takeUntil(this._destroyed$))\n .subscribe(({type}) => this._ngZone.run(() => this._service.focusVisible = type === 'focusin'));\n });\n }\n\n ngOnDestroy() { this._destroyed$.next(); }\n\n ngOnInit() {\n if (this.model === undefined) {\n ['dayTemplateData', 'displayMonths', 'markDisabled', 'firstDayOfWeek', 'navigation', 'minDate', 'maxDate',\n 'outsideDays']\n .forEach(input => this._service[input] = this[input]);\n this.navigateTo(this.startDate);\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n ['dayTemplateData', 'displayMonths', 'markDisabled', 'firstDayOfWeek', 'navigation', 'minDate', 'maxDate',\n 'outsideDays']\n .filter(input => input in changes)\n .forEach(input => this._service[input] = this[input]);\n\n if ('startDate' in changes) {\n const {currentValue, previousValue} = changes.startDate;\n if (isChangedMonth(previousValue, currentValue)) {\n this.navigateTo(this.startDate);\n }\n }\n }\n\n onDateSelect(date: NgbDate) {\n this._service.focus(date);\n this._service.select(date, {emitEvent: true});\n }\n\n onKeyDown(event: KeyboardEvent) { this._keyMapService.processKey(event); }\n\n onNavigateDateSelect(date: NgbDate) { this._service.open(date); }\n\n onNavigateEvent(event: NavigationEvent) {\n switch (event) {\n case NavigationEvent.PREV:\n this._service.open(this._calendar.getPrev(this.model.firstDate, 'm', 1));\n break;\n case NavigationEvent.NEXT:\n this._service.open(this._calendar.getNext(this.model.firstDate, 'm', 1));\n break;\n }\n }\n\n registerOnChange(fn: (value: any) => any): void { this.onChange = fn; }\n\n registerOnTouched(fn: () => any): void { this.onTouched = fn; }\n\n setDisabledState(isDisabled: boolean) { this._service.disabled = isDisabled; }\n\n writeValue(value) {\n this._controlValue = NgbDate.from(this._ngbDateAdapter.fromModel(value));\n this._service.select(this._controlValue);\n }\n}\n","import {Component, Input, TemplateRef, Output, EventEmitter, ViewEncapsulation} from '@angular/core';\nimport {MonthViewModel, DayViewModel} from './datepicker-view-model';\nimport {NgbDate} from './ngb-date';\nimport {NgbDatepickerI18n} from './datepicker-i18n';\nimport {DayTemplateContext} from './datepicker-day-template-context';\n\n@Component({\n selector: 'ngb-datepicker-month-view',\n host: {'role': 'grid'},\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./datepicker-month-view.scss'],\n template: `\n
\n
\n
\n {{ i18n.getWeekdayShortName(w) }}\n
\n
\n \n
\n
{{ i18n.getWeekNumerals(week.number) }}
\n
\n \n \n \n
\n
\n
\n `\n})\nexport class NgbDatepickerMonthView {\n @Input() dayTemplate: TemplateRef;\n @Input() month: MonthViewModel;\n @Input() showWeekdays;\n @Input() showWeekNumbers;\n\n @Output() select = new EventEmitter();\n\n constructor(public i18n: NgbDatepickerI18n) {}\n\n doSelect(day: DayViewModel) {\n if (!day.context.disabled && !day.hidden) {\n this.select.emit(day.date);\n }\n }\n}\n","import {Component, Input, Output, EventEmitter, ChangeDetectionStrategy, ViewEncapsulation} from '@angular/core';\nimport {NavigationEvent, MonthViewModel} from './datepicker-view-model';\nimport {NgbDate} from './ngb-date';\nimport {NgbDatepickerI18n} from './datepicker-i18n';\n\n@Component({\n selector: 'ngb-datepicker-navigation',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./datepicker-navigation.scss'],\n template: `\n
\n \n
\n \n \n\n \n
0\">
\n
\n {{ i18n.getMonthFullName(month.number, month.year) }} {{ i18n.getYearNumerals(month.year) }}\n
\n
\n
\n
\n \n
\n `\n})\nexport class NgbDatepickerNavigation {\n navigation = NavigationEvent;\n\n @Input() date: NgbDate;\n @Input() disabled: boolean;\n @Input() months: MonthViewModel[] = [];\n @Input() showSelect: boolean;\n @Input() prevDisabled: boolean;\n @Input() nextDisabled: boolean;\n @Input() selectBoxes: {years: number[], months: number[]};\n\n @Output() navigate = new EventEmitter();\n @Output() select = new EventEmitter();\n\n constructor(public i18n: NgbDatepickerI18n) {}\n}\n","import {NgZone} from '@angular/core';\nimport {fromEvent, Observable, race} from 'rxjs';\nimport {delay, filter, map, takeUntil, withLatestFrom} from 'rxjs/operators';\nimport {Key} from './key';\nimport {closest} from './util';\n\nconst isContainedIn = (element: HTMLElement, array?: HTMLElement[]) =>\n array ? array.some(item => item.contains(element)) : false;\n\nconst matchesSelectorIfAny = (element: HTMLElement, selector?: string) =>\n !selector || closest(element, selector) != null;\n\n// we'll have to use 'touch' events instead of 'mouse' events on iOS and add a more significant delay\n// to avoid re-opening when handling (click) on a toggling element\n// TODO: use proper Angular platform detection when NgbAutoClose becomes a service and we can inject PLATFORM_ID\nlet iOS = false;\nif (typeof navigator !== 'undefined') {\n iOS = !!navigator.userAgent && /iPad|iPhone|iPod/.test(navigator.userAgent);\n}\n\nexport function ngbAutoClose(\n zone: NgZone, document: any, type: boolean | 'inside' | 'outside', close: () => void, closed$: Observable,\n insideElements: HTMLElement[], ignoreElements?: HTMLElement[], insideSelector?: string) {\n // closing on ESC and outside clicks\n if (type) {\n zone.runOutsideAngular(() => {\n\n const shouldCloseOnClick = (event: MouseEvent | TouchEvent) => {\n const element = event.target as HTMLElement;\n if ((event instanceof MouseEvent && event.button === 2) || isContainedIn(element, ignoreElements)) {\n return false;\n }\n if (type === 'inside') {\n return isContainedIn(element, insideElements) && matchesSelectorIfAny(element, insideSelector);\n } else if (type === 'outside') {\n return !isContainedIn(element, insideElements);\n } else /* if (type === true) */ {\n return matchesSelectorIfAny(element, insideSelector) || !isContainedIn(element, insideElements);\n }\n };\n\n const escapes$ = fromEvent(document, 'keydown')\n .pipe(\n takeUntil(closed$),\n // tslint:disable-next-line:deprecation\n filter(e => e.which === Key.Escape));\n\n\n // we have to pre-calculate 'shouldCloseOnClick' on 'mousedown/touchstart',\n // because on 'mouseup/touchend' DOM nodes might be detached\n const mouseDowns$ = fromEvent(document, iOS ? 'touchstart' : 'mousedown')\n .pipe(map(shouldCloseOnClick), takeUntil(closed$));\n\n const closeableClicks$ = fromEvent(document, iOS ? 'touchend' : 'mouseup')\n .pipe(\n withLatestFrom(mouseDowns$), filter(([_, shouldClose]) => shouldClose),\n delay(iOS ? 16 : 0), takeUntil(closed$)) as Observable;\n\n\n race([escapes$, closeableClicks$]).subscribe(() => zone.run(close));\n });\n }\n}\n","import {fromEvent, Observable} from 'rxjs';\nimport {filter, map, takeUntil, withLatestFrom} from 'rxjs/operators';\n\nimport {Key} from '../util/key';\n\n\nconst FOCUSABLE_ELEMENTS_SELECTOR = [\n 'a[href]', 'button:not([disabled])', 'input:not([disabled]):not([type=\"hidden\"])', 'select:not([disabled])',\n 'textarea:not([disabled])', '[contenteditable]', '[tabindex]:not([tabindex=\"-1\"])'\n].join(', ');\n\n/**\n * Returns first and last focusable elements inside of a given element based on specific CSS selector\n */\nexport function getFocusableBoundaryElements(element: HTMLElement): HTMLElement[] {\n const list: HTMLElement[] =\n Array.from(element.querySelectorAll(FOCUSABLE_ELEMENTS_SELECTOR) as NodeListOf)\n .filter(el => el.tabIndex !== -1);\n return [list[0], list[list.length - 1]];\n}\n\n/**\n * Function that enforces browser focus to be trapped inside a DOM element.\n *\n * Works only for clicks inside the element and navigation with 'Tab', ignoring clicks outside of the element\n *\n * @param element The element around which focus will be trapped inside\n * @param stopFocusTrap$ The observable stream. When completed the focus trap will clean up listeners\n * and free internal resources\n * @param refocusOnClick Put the focus back to the last focused element whenever a click occurs on element (default to\n * false)\n */\nexport const ngbFocusTrap = (element: HTMLElement, stopFocusTrap$: Observable, refocusOnClick = false) => {\n // last focused element\n const lastFocusedElement$ =\n fromEvent(element, 'focusin').pipe(takeUntil(stopFocusTrap$), map(e => e.target));\n\n // 'tab' / 'shift+tab' stream\n fromEvent(element, 'keydown')\n .pipe(\n takeUntil(stopFocusTrap$),\n // tslint:disable:deprecation\n filter(e => e.which === Key.Tab),\n // tslint:enable:deprecation\n withLatestFrom(lastFocusedElement$))\n .subscribe(([tabEvent, focusedElement]) => {\n const[first, last] = getFocusableBoundaryElements(element);\n\n if ((focusedElement === first || focusedElement === element) && tabEvent.shiftKey) {\n last.focus();\n tabEvent.preventDefault();\n }\n\n if (focusedElement === last && !tabEvent.shiftKey) {\n first.focus();\n tabEvent.preventDefault();\n }\n });\n\n // inside click\n if (refocusOnClick) {\n fromEvent(element, 'click')\n .pipe(takeUntil(stopFocusTrap$), withLatestFrom(lastFocusedElement$), map(arr => arr[1] as HTMLElement))\n .subscribe(lastFocusedElement => lastFocusedElement.focus());\n }\n};\n","// previous version:\n// https://github.com/angular-ui/bootstrap/blob/07c31d0731f7cb068a1932b8e01d2312b796b4ec/src/position/position.js\nexport class Positioning {\n private getAllStyles(element: HTMLElement) { return window.getComputedStyle(element); }\n\n private getStyle(element: HTMLElement, prop: string): string { return this.getAllStyles(element)[prop]; }\n\n private isStaticPositioned(element: HTMLElement): boolean {\n return (this.getStyle(element, 'position') || 'static') === 'static';\n }\n\n private offsetParent(element: HTMLElement): HTMLElement {\n let offsetParentEl = element.offsetParent || document.documentElement;\n\n while (offsetParentEl && offsetParentEl !== document.documentElement && this.isStaticPositioned(offsetParentEl)) {\n offsetParentEl = offsetParentEl.offsetParent;\n }\n\n return offsetParentEl || document.documentElement;\n }\n\n position(element: HTMLElement, round = true): ClientRect {\n let elPosition: ClientRect;\n let parentOffset: ClientRect = {width: 0, height: 0, top: 0, bottom: 0, left: 0, right: 0};\n\n if (this.getStyle(element, 'position') === 'fixed') {\n elPosition = element.getBoundingClientRect();\n elPosition = {\n top: elPosition.top,\n bottom: elPosition.bottom,\n left: elPosition.left,\n right: elPosition.right,\n height: elPosition.height,\n width: elPosition.width\n };\n } else {\n const offsetParentEl = this.offsetParent(element);\n\n elPosition = this.offset(element, false);\n\n if (offsetParentEl !== document.documentElement) {\n parentOffset = this.offset(offsetParentEl, false);\n }\n\n parentOffset.top += offsetParentEl.clientTop;\n parentOffset.left += offsetParentEl.clientLeft;\n }\n\n elPosition.top -= parentOffset.top;\n elPosition.bottom -= parentOffset.top;\n elPosition.left -= parentOffset.left;\n elPosition.right -= parentOffset.left;\n\n if (round) {\n elPosition.top = Math.round(elPosition.top);\n elPosition.bottom = Math.round(elPosition.bottom);\n elPosition.left = Math.round(elPosition.left);\n elPosition.right = Math.round(elPosition.right);\n }\n\n return elPosition;\n }\n\n offset(element: HTMLElement, round = true): ClientRect {\n const elBcr = element.getBoundingClientRect();\n const viewportOffset = {\n top: window.pageYOffset - document.documentElement.clientTop,\n left: window.pageXOffset - document.documentElement.clientLeft\n };\n\n let elOffset = {\n height: elBcr.height || element.offsetHeight,\n width: elBcr.width || element.offsetWidth,\n top: elBcr.top + viewportOffset.top,\n bottom: elBcr.bottom + viewportOffset.top,\n left: elBcr.left + viewportOffset.left,\n right: elBcr.right + viewportOffset.left\n };\n\n if (round) {\n elOffset.height = Math.round(elOffset.height);\n elOffset.width = Math.round(elOffset.width);\n elOffset.top = Math.round(elOffset.top);\n elOffset.bottom = Math.round(elOffset.bottom);\n elOffset.left = Math.round(elOffset.left);\n elOffset.right = Math.round(elOffset.right);\n }\n\n return elOffset;\n }\n\n /*\n Return false if the element to position is outside the viewport\n */\n positionElements(hostElement: HTMLElement, targetElement: HTMLElement, placement: string, appendToBody?: boolean):\n boolean {\n const[placementPrimary = 'top', placementSecondary = 'center'] = placement.split('-');\n\n const hostElPosition = appendToBody ? this.offset(hostElement, false) : this.position(hostElement, false);\n const targetElStyles = this.getAllStyles(targetElement);\n\n const marginTop = parseFloat(targetElStyles.marginTop);\n const marginBottom = parseFloat(targetElStyles.marginBottom);\n const marginLeft = parseFloat(targetElStyles.marginLeft);\n const marginRight = parseFloat(targetElStyles.marginRight);\n\n let topPosition = 0;\n let leftPosition = 0;\n\n switch (placementPrimary) {\n case 'top':\n topPosition = (hostElPosition.top - (targetElement.offsetHeight + marginTop + marginBottom));\n break;\n case 'bottom':\n topPosition = (hostElPosition.top + hostElPosition.height);\n break;\n case 'left':\n leftPosition = (hostElPosition.left - (targetElement.offsetWidth + marginLeft + marginRight));\n break;\n case 'right':\n leftPosition = (hostElPosition.left + hostElPosition.width);\n break;\n }\n\n switch (placementSecondary) {\n case 'top':\n topPosition = hostElPosition.top;\n break;\n case 'bottom':\n topPosition = hostElPosition.top + hostElPosition.height - targetElement.offsetHeight;\n break;\n case 'left':\n leftPosition = hostElPosition.left;\n break;\n case 'right':\n leftPosition = hostElPosition.left + hostElPosition.width - targetElement.offsetWidth;\n break;\n case 'center':\n if (placementPrimary === 'top' || placementPrimary === 'bottom') {\n leftPosition = (hostElPosition.left + hostElPosition.width / 2 - targetElement.offsetWidth / 2);\n } else {\n topPosition = (hostElPosition.top + hostElPosition.height / 2 - targetElement.offsetHeight / 2);\n }\n break;\n }\n\n /// The translate3d/gpu acceleration render a blurry text on chrome, the next line is commented until a browser fix\n // targetElement.style.transform = `translate3d(${Math.round(leftPosition)}px, ${Math.floor(topPosition)}px, 0px)`;\n targetElement.style.transform = `translate(${Math.round(leftPosition)}px, ${Math.round(topPosition)}px)`;\n\n // Check if the targetElement is inside the viewport\n const targetElBCR = targetElement.getBoundingClientRect();\n const html = document.documentElement;\n const windowHeight = window.innerHeight || html.clientHeight;\n const windowWidth = window.innerWidth || html.clientWidth;\n\n return targetElBCR.left >= 0 && targetElBCR.top >= 0 && targetElBCR.right <= windowWidth &&\n targetElBCR.bottom <= windowHeight;\n }\n}\n\nconst placementSeparator = /\\s+/;\nconst positionService = new Positioning();\n\n/*\n * Accept the placement array and applies the appropriate placement dependent on the viewport.\n * Returns the applied placement.\n * In case of auto placement, placements are selected in order\n * 'top', 'bottom', 'left', 'right',\n * 'top-left', 'top-right',\n * 'bottom-left', 'bottom-right',\n * 'left-top', 'left-bottom',\n * 'right-top', 'right-bottom'.\n * */\nexport function positionElements(\n hostElement: HTMLElement, targetElement: HTMLElement, placement: string | Placement | PlacementArray,\n appendToBody?: boolean, baseClass?: string): Placement {\n let placementVals: Array =\n Array.isArray(placement) ? placement : placement.split(placementSeparator) as Array;\n\n const allowedPlacements = [\n 'top', 'bottom', 'left', 'right', 'top-left', 'top-right', 'bottom-left', 'bottom-right', 'left-top', 'left-bottom',\n 'right-top', 'right-bottom'\n ];\n\n const classList = targetElement.classList;\n const addClassesToTarget = (targetPlacement: Placement): Array => {\n const[primary, secondary] = targetPlacement.split('-');\n const classes = [];\n if (baseClass) {\n classes.push(`${baseClass}-${primary}`);\n if (secondary) {\n classes.push(`${baseClass}-${primary}-${secondary}`);\n }\n\n classes.forEach((classname) => { classList.add(classname); });\n }\n return classes;\n };\n\n // Remove old placement classes to avoid issues\n if (baseClass) {\n allowedPlacements.forEach((placementToRemove) => { classList.remove(`${baseClass}-${placementToRemove}`); });\n }\n\n // replace auto placement with other placements\n let hasAuto = placementVals.findIndex(val => val === 'auto');\n if (hasAuto >= 0) {\n allowedPlacements.forEach(function(obj) {\n if (placementVals.find(val => val.search('^' + obj) !== -1) == null) {\n placementVals.splice(hasAuto++, 1, obj as Placement);\n }\n });\n }\n\n // coordinates where to position\n\n // Required for transform:\n const style = targetElement.style;\n style.position = 'absolute';\n style.top = '0';\n style.left = '0';\n style['will-change'] = 'transform';\n\n let testPlacement: Placement;\n let isInViewport = false;\n for (testPlacement of placementVals) {\n let addedClasses = addClassesToTarget(testPlacement);\n\n if (positionService.positionElements(hostElement, targetElement, testPlacement, appendToBody)) {\n isInViewport = true;\n break;\n }\n\n // Remove the baseClasses for further calculation\n if (baseClass) {\n addedClasses.forEach((classname) => { classList.remove(classname); });\n }\n }\n\n if (!isInViewport) {\n // If nothing match, the first placement is the default one\n testPlacement = placementVals[0];\n addClassesToTarget(testPlacement);\n positionService.positionElements(hostElement, targetElement, testPlacement, appendToBody);\n }\n\n return testPlacement;\n}\n\nexport type Placement = 'auto' | 'top' | 'bottom' | 'left' | 'right' | 'top-left' | 'top-right' | 'bottom-left' |\n 'bottom-right' | 'left-top' | 'left-bottom' | 'right-top' | 'right-bottom';\n\nexport type PlacementArray = Placement | Array| string;\n","import {padNumber, toInteger, isNumber} from '../util/util';\nimport {NgbDateStruct} from './ngb-date-struct';\nimport {Injectable} from '@angular/core';\n\nexport function NGB_DATEPICKER_PARSER_FORMATTER_FACTORY() {\n return new NgbDateISOParserFormatter();\n}\n\n/**\n * An abstract service for parsing and formatting dates for the\n * [`NgbInputDatepicker`](#/components/datepicker/api#NgbInputDatepicker) directive.\n * Converts between the internal `NgbDateStruct` model presentation and a `string` that is displayed in the\n * input element.\n *\n * When user types something in the input this service attempts to parse it into a `NgbDateStruct` object.\n * And vice versa, when users selects a date in the calendar with the mouse, it must be displayed as a `string`\n * in the input.\n *\n * Default implementation uses the ISO 8601 format, but you can provide another implementation via DI\n * to use an alternative string format or a custom parsing logic.\n *\n * See the [date format overview](#/components/datepicker/overview#date-model) for more details.\n */\n@Injectable({providedIn: 'root', useFactory: NGB_DATEPICKER_PARSER_FORMATTER_FACTORY})\nexport abstract class NgbDateParserFormatter {\n /**\n * Parses the given `string` to an `NgbDateStruct`.\n *\n * Implementations should try their best to provide a result, even\n * partial. They must return `null` if the value can't be parsed.\n */\n abstract parse(value: string): NgbDateStruct;\n\n /**\n * Formats the given `NgbDateStruct` to a `string`.\n *\n * Implementations should return an empty string if the given date is `null`,\n * and try their best to provide a partial result if the given date is incomplete or invalid.\n */\n abstract format(date: NgbDateStruct): string;\n}\n\n@Injectable()\nexport class NgbDateISOParserFormatter extends NgbDateParserFormatter {\n parse(value: string): NgbDateStruct {\n if (value) {\n const dateParts = value.trim().split('-');\n if (dateParts.length === 1 && isNumber(dateParts[0])) {\n return {year: toInteger(dateParts[0]), month: null, day: null};\n } else if (dateParts.length === 2 && isNumber(dateParts[0]) && isNumber(dateParts[1])) {\n return {year: toInteger(dateParts[0]), month: toInteger(dateParts[1]), day: null};\n } else if (dateParts.length === 3 && isNumber(dateParts[0]) && isNumber(dateParts[1]) && isNumber(dateParts[2])) {\n return {year: toInteger(dateParts[0]), month: toInteger(dateParts[1]), day: toInteger(dateParts[2])};\n }\n }\n return null;\n }\n\n format(date: NgbDateStruct): string {\n return date ?\n `${date.year}-${isNumber(date.month) ? padNumber(date.month) : ''}-${isNumber(date.day) ? padNumber(date.day) : ''}` :\n '';\n }\n}\n","import {\n ChangeDetectorRef,\n ComponentFactoryResolver,\n ComponentRef,\n Directive,\n ElementRef,\n EventEmitter,\n forwardRef,\n Inject,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n Output,\n Renderer2,\n SimpleChanges,\n TemplateRef,\n ViewContainerRef\n} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\nimport {AbstractControl, ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validator} from '@angular/forms';\n\nimport {ngbAutoClose} from '../util/autoclose';\nimport {ngbFocusTrap} from '../util/focus-trap';\nimport {PlacementArray, positionElements} from '../util/positioning';\n\nimport {NgbDateAdapter} from './adapters/ngb-date-adapter';\nimport {NgbDatepicker, NgbDatepickerNavigateEvent} from './datepicker';\nimport {DayTemplateContext} from './datepicker-day-template-context';\nimport {NgbDatepickerService} from './datepicker-service';\nimport {NgbCalendar} from './ngb-calendar';\nimport {NgbDate} from './ngb-date';\nimport {NgbDateParserFormatter} from './ngb-date-parser-formatter';\nimport {NgbDateStruct} from './ngb-date-struct';\n\nconst NGB_DATEPICKER_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgbInputDatepicker),\n multi: true\n};\n\nconst NGB_DATEPICKER_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => NgbInputDatepicker),\n multi: true\n};\n\n/**\n * A directive that allows to stick a datepicker popup to an input field.\n *\n * Manages interaction with the input field itself, does value formatting and provides forms integration.\n */\n@Directive({\n selector: 'input[ngbDatepicker]',\n exportAs: 'ngbDatepicker',\n host: {\n '(input)': 'manualDateChange($event.target.value)',\n '(change)': 'manualDateChange($event.target.value, true)',\n '(blur)': 'onBlur()',\n '[disabled]': 'disabled'\n },\n providers: [NGB_DATEPICKER_VALUE_ACCESSOR, NGB_DATEPICKER_VALIDATOR, NgbDatepickerService]\n})\nexport class NgbInputDatepicker implements OnChanges,\n OnDestroy, ControlValueAccessor, Validator {\n private _cRef: ComponentRef = null;\n private _disabled = false;\n private _model: NgbDate;\n private _inputValue: string;\n private _zoneSubscription: any;\n\n /**\n * Indicates whether the datepicker popup should be closed automatically after date selection / outside click or not.\n *\n * * `true` - the popup will close on both date selection and outside click.\n * * `false` - the popup can only be closed manually via `close()` or `toggle()` methods.\n * * `\"inside\"` - the popup will close on date selection, but not outside clicks.\n * * `\"outside\"` - the popup will close only on the outside click and not on date selection/inside clicks.\n *\n * @since 3.0.0\n */\n @Input() autoClose: boolean | 'inside' | 'outside' = true;\n\n /**\n * The reference to a custom template for the day.\n *\n * Allows to completely override the way a day 'cell' in the calendar is displayed.\n *\n * See [`DayTemplateContext`](#/components/datepicker/api#DayTemplateContext) for the data you get inside.\n */\n @Input() dayTemplate: TemplateRef;\n\n /**\n * The callback to pass any arbitrary data to the template cell via the\n * [`DayTemplateContext`](#/components/datepicker/api#DayTemplateContext)'s `data` parameter.\n *\n * `current` is the month that is currently displayed by the datepicker.\n *\n * @since 3.3.0\n */\n @Input() dayTemplateData: (date: NgbDate, current: {year: number, month: number}) => any;\n\n /**\n * The number of months to display.\n */\n @Input() displayMonths: number;\n\n /**\n * The first day of the week.\n *\n * With default calendar we use ISO 8601: 'weekday' is 1=Mon ... 7=Sun.\n */\n @Input() firstDayOfWeek: number;\n\n /**\n * The reference to the custom template for the datepicker footer.\n *\n * @since 3.3.0\n */\n @Input() footerTemplate: TemplateRef;\n\n /**\n * The callback to mark some dates as disabled.\n *\n * It is called for each new date when navigating to a different month.\n *\n * `current` is the month that is currently displayed by the datepicker.\n */\n @Input() markDisabled: (date: NgbDate, current: {year: number, month: number}) => boolean;\n\n /**\n * The earliest date that can be displayed or selected. Also used for form validation.\n *\n * If not provided, 'year' select box will display 10 years before the current month.\n */\n @Input() minDate: NgbDateStruct;\n\n /**\n * The latest date that can be displayed or selected. Also used for form validation.\n *\n * If not provided, 'year' select box will display 10 years after the current month.\n */\n @Input() maxDate: NgbDateStruct;\n\n /**\n * Navigation type.\n *\n * * `\"select\"` - select boxes for month and navigation arrows\n * * `\"arrows\"` - only navigation arrows\n * * `\"none\"` - no navigation visible at all\n */\n @Input() navigation: 'select' | 'arrows' | 'none';\n\n /**\n * The way of displaying days that don't belong to the current month.\n *\n * * `\"visible\"` - days are visible\n * * `\"hidden\"` - days are hidden, white space preserved\n * * `\"collapsed\"` - days are collapsed, so the datepicker height might change between months\n *\n * For the 2+ months view, days in between months are never shown.\n */\n @Input() outsideDays: 'visible' | 'collapsed' | 'hidden';\n\n /**\n * The preferred placement of the datepicker popup.\n *\n * Possible values are `\"top\"`, `\"top-left\"`, `\"top-right\"`, `\"bottom\"`, `\"bottom-left\"`,\n * `\"bottom-right\"`, `\"left\"`, `\"left-top\"`, `\"left-bottom\"`, `\"right\"`, `\"right-top\"`,\n * `\"right-bottom\"`\n *\n * Accepts an array of strings or a string with space separated possible values.\n *\n * The default order of preference is `\"bottom-left bottom-right top-left top-right\"`\n *\n * Please see the [positioning overview](#/positioning) for more details.\n */\n @Input() placement: PlacementArray = ['bottom-left', 'bottom-right', 'top-left', 'top-right'];\n\n /**\n * If `true`, weekdays will be displayed.\n */\n @Input() showWeekdays: boolean;\n\n /**\n * If `true`, week numbers will be displayed.\n */\n @Input() showWeekNumbers: boolean;\n\n /**\n * The date to open calendar with.\n *\n * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec.\n * If nothing or invalid date is provided, calendar will open with current month.\n *\n * You could use `navigateTo(date)` method as an alternative.\n */\n @Input() startDate: {year: number, month: number, day?: number};\n\n /**\n * A selector specifying the element the datepicker popup should be appended to.\n *\n * Currently only supports `\"body\"`.\n */\n @Input() container: string;\n\n /**\n * A css selector or html element specifying the element the datepicker popup should be positioned against.\n *\n * By default the input is used as a target.\n *\n * @since 4.2.0\n */\n @Input() positionTarget: string | HTMLElement;\n\n /**\n * An event emitted when user selects a date using keyboard or mouse.\n *\n * The payload of the event is currently selected `NgbDate`.\n *\n * @since 1.1.1\n */\n @Output() dateSelect = new EventEmitter();\n\n /**\n * Event emitted right after the navigation happens and displayed month changes.\n *\n * See [`NgbDatepickerNavigateEvent`](#/components/datepicker/api#NgbDatepickerNavigateEvent) for the payload info.\n */\n @Output() navigate = new EventEmitter();\n\n /**\n * An event fired after closing datepicker window.\n *\n * @since 4.2.0\n */\n @Output() closed = new EventEmitter();\n\n @Input()\n get disabled() {\n return this._disabled;\n }\n set disabled(value: any) {\n this._disabled = value === '' || (value && value !== 'false');\n\n if (this.isOpen()) {\n this._cRef.instance.setDisabledState(this._disabled);\n }\n }\n\n private _onChange = (_: any) => {};\n private _onTouched = () => {};\n private _validatorChange = () => {};\n\n\n constructor(\n private _parserFormatter: NgbDateParserFormatter, private _elRef: ElementRef,\n private _vcRef: ViewContainerRef, private _renderer: Renderer2, private _cfr: ComponentFactoryResolver,\n private _ngZone: NgZone, private _service: NgbDatepickerService, private _calendar: NgbCalendar,\n private _dateAdapter: NgbDateAdapter, @Inject(DOCUMENT) private _document: any,\n private _changeDetector: ChangeDetectorRef) {\n this._zoneSubscription = _ngZone.onStable.subscribe(() => this._updatePopupPosition());\n }\n\n registerOnChange(fn: (value: any) => any): void { this._onChange = fn; }\n\n registerOnTouched(fn: () => any): void { this._onTouched = fn; }\n\n registerOnValidatorChange(fn: () => void): void { this._validatorChange = fn; }\n\n setDisabledState(isDisabled: boolean): void { this.disabled = isDisabled; }\n\n validate(c: AbstractControl): {[key: string]: any} {\n const value = c.value;\n\n if (value === null || value === undefined) {\n return null;\n }\n\n const ngbDate = this._fromDateStruct(this._dateAdapter.fromModel(value));\n\n if (!this._calendar.isValid(ngbDate)) {\n return {'ngbDate': {invalid: c.value}};\n }\n\n if (this.minDate && ngbDate.before(NgbDate.from(this.minDate))) {\n return {'ngbDate': {requiredBefore: this.minDate}};\n }\n\n if (this.maxDate && ngbDate.after(NgbDate.from(this.maxDate))) {\n return {'ngbDate': {requiredAfter: this.maxDate}};\n }\n }\n\n writeValue(value) {\n this._model = this._fromDateStruct(this._dateAdapter.fromModel(value));\n this._writeModelValue(this._model);\n }\n\n manualDateChange(value: string, updateView = false) {\n const inputValueChanged = value !== this._inputValue;\n if (inputValueChanged) {\n this._inputValue = value;\n this._model = this._fromDateStruct(this._parserFormatter.parse(value));\n }\n if (inputValueChanged || !updateView) {\n this._onChange(this._model ? this._dateAdapter.toModel(this._model) : (value === '' ? null : value));\n }\n if (updateView && this._model) {\n this._writeModelValue(this._model);\n }\n }\n\n isOpen() { return !!this._cRef; }\n\n /**\n * Opens the datepicker popup.\n *\n * If the related form control contains a valid date, the corresponding month will be opened.\n */\n open() {\n if (!this.isOpen()) {\n const cf = this._cfr.resolveComponentFactory(NgbDatepicker);\n this._cRef = this._vcRef.createComponent(cf);\n\n this._applyPopupStyling(this._cRef.location.nativeElement);\n this._applyDatepickerInputs(this._cRef.instance);\n this._subscribeForDatepickerOutputs(this._cRef.instance);\n this._cRef.instance.ngOnInit();\n this._cRef.instance.writeValue(this._dateAdapter.toModel(this._model));\n\n // date selection event handling\n this._cRef.instance.registerOnChange((selectedDate) => {\n this.writeValue(selectedDate);\n this._onChange(selectedDate);\n this._onTouched();\n });\n\n this._cRef.changeDetectorRef.detectChanges();\n\n this._cRef.instance.setDisabledState(this.disabled);\n\n if (this.container === 'body') {\n window.document.querySelector(this.container).appendChild(this._cRef.location.nativeElement);\n }\n\n // focus handling\n ngbFocusTrap(this._cRef.location.nativeElement, this.closed, true);\n this._cRef.instance.focus();\n\n ngbAutoClose(\n this._ngZone, this._document, this.autoClose, () => this.close(), this.closed, [],\n [this._elRef.nativeElement, this._cRef.location.nativeElement]);\n }\n }\n\n /**\n * Closes the datepicker popup.\n */\n close() {\n if (this.isOpen()) {\n this._vcRef.remove(this._vcRef.indexOf(this._cRef.hostView));\n this._cRef = null;\n this.closed.emit();\n this._changeDetector.markForCheck();\n }\n }\n\n /**\n * Toggles the datepicker popup.\n */\n toggle() {\n if (this.isOpen()) {\n this.close();\n } else {\n this.open();\n }\n }\n\n /**\n * Navigates to the provided date.\n *\n * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec.\n * If nothing or invalid date provided calendar will open current month.\n *\n * Use the `[startDate]` input as an alternative.\n */\n navigateTo(date?: {year: number, month: number, day?: number}) {\n if (this.isOpen()) {\n this._cRef.instance.navigateTo(date);\n }\n }\n\n onBlur() { this._onTouched(); }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['minDate'] || changes['maxDate']) {\n this._validatorChange();\n }\n }\n\n ngOnDestroy() {\n this.close();\n this._zoneSubscription.unsubscribe();\n }\n\n private _applyDatepickerInputs(datepickerInstance: NgbDatepicker): void {\n ['dayTemplate', 'dayTemplateData', 'displayMonths', 'firstDayOfWeek', 'footerTemplate', 'markDisabled', 'minDate',\n 'maxDate', 'navigation', 'outsideDays', 'showNavigation', 'showWeekdays', 'showWeekNumbers']\n .forEach((optionName: string) => {\n if (this[optionName] !== undefined) {\n datepickerInstance[optionName] = this[optionName];\n }\n });\n datepickerInstance.startDate = this.startDate || this._model;\n }\n\n private _applyPopupStyling(nativeElement: any) {\n this._renderer.addClass(nativeElement, 'dropdown-menu');\n this._renderer.addClass(nativeElement, 'show');\n\n if (this.container === 'body') {\n this._renderer.addClass(nativeElement, 'ngb-dp-body');\n }\n }\n\n private _subscribeForDatepickerOutputs(datepickerInstance: NgbDatepicker) {\n datepickerInstance.navigate.subscribe(navigateEvent => this.navigate.emit(navigateEvent));\n datepickerInstance.select.subscribe(date => {\n this.dateSelect.emit(date);\n if (this.autoClose === true || this.autoClose === 'inside') {\n this.close();\n }\n });\n }\n\n private _writeModelValue(model: NgbDate) {\n const value = this._parserFormatter.format(model);\n this._inputValue = value;\n this._renderer.setProperty(this._elRef.nativeElement, 'value', value);\n if (this.isOpen()) {\n this._cRef.instance.writeValue(this._dateAdapter.toModel(model));\n this._onTouched();\n }\n }\n\n private _fromDateStruct(date: NgbDateStruct): NgbDate {\n const ngbDate = date ? new NgbDate(date.year, date.month, date.day) : null;\n return this._calendar.isValid(ngbDate) ? ngbDate : null;\n }\n\n private _updatePopupPosition() {\n if (!this._cRef) {\n return;\n }\n\n let hostElement: HTMLElement;\n if (typeof this.positionTarget === 'string') {\n hostElement = window.document.querySelector(this.positionTarget);\n } else if (this.positionTarget instanceof HTMLElement) {\n hostElement = this.positionTarget;\n } else {\n hostElement = this._elRef.nativeElement;\n }\n\n if (this.positionTarget && !hostElement) {\n throw new Error('ngbDatepicker could not find element declared in [positionTarget] to position against.');\n }\n\n positionElements(hostElement, this._cRef.location.nativeElement, this.placement, this.container === 'body');\n }\n}\n","import {ChangeDetectionStrategy, Component, Input, ViewEncapsulation} from '@angular/core';\nimport {NgbDate} from './ngb-date';\nimport {NgbDatepickerI18n} from './datepicker-i18n';\n\n@Component({\n selector: '[ngbDatepickerDayView]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./datepicker-day-view.scss'],\n host: {\n 'class': 'btn-light',\n '[class.bg-primary]': 'selected',\n '[class.text-white]': 'selected',\n '[class.text-muted]': 'isMuted()',\n '[class.outside]': 'isMuted()',\n '[class.active]': 'focused'\n },\n template: `{{ i18n.getDayNumerals(date) }}`\n})\nexport class NgbDatepickerDayView {\n @Input() currentMonth: number;\n @Input() date: NgbDate;\n @Input() disabled: boolean;\n @Input() focused: boolean;\n @Input() selected: boolean;\n\n constructor(public i18n: NgbDatepickerI18n) {}\n\n isMuted() { return !this.selected && (this.date.month !== this.currentMonth || this.disabled); }\n}\n","import {Component, Input, Output, EventEmitter, ChangeDetectionStrategy, ViewEncapsulation} from '@angular/core';\nimport {NgbDate} from './ngb-date';\nimport {toInteger} from '../util/util';\nimport {NgbDatepickerI18n} from './datepicker-i18n';\n\n@Component({\n selector: 'ngb-datepicker-navigation-select',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./datepicker-navigation-select.scss'],\n template: `\n \n \n \n \n \n `\n})\nexport class NgbDatepickerNavigationSelect {\n @Input() date: NgbDate;\n @Input() disabled: boolean;\n @Input() months: number[];\n @Input() years: number[];\n\n @Output() select = new EventEmitter();\n\n constructor(public i18n: NgbDatepickerI18n) {}\n\n changeMonth(month: string) { this.select.emit(new NgbDate(this.date.year, toInteger(month), 1)); }\n\n changeYear(year: string) { this.select.emit(new NgbDate(toInteger(year), this.date.month, 1)); }\n}\n","import {NgbDate} from '../ngb-date';\nimport {NgbPeriod, NgbCalendar} from '../ngb-calendar';\nimport {Injectable} from '@angular/core';\nimport {isNumber} from '../../util/util';\n\n@Injectable()\nexport abstract class NgbCalendarHijri extends NgbCalendar {\n /**\n * Returns the number of days in a specific Hijri month.\n * `month` is 1 for Muharram, 2 for Safar, etc.\n * `year` is any Hijri year.\n */\n abstract getDaysPerMonth(month: number, year: number): number;\n\n /**\n * Returns the equivalent Hijri date value for a give input Gregorian date.\n * `gDate` is s JS Date to be converted to Hijri.\n */\n abstract fromGregorian(gDate: Date): NgbDate;\n\n /**\n * Converts the current Hijri date to Gregorian.\n */\n abstract toGregorian(hDate: NgbDate): Date;\n\n getDaysPerWeek() { return 7; }\n\n getMonths() { return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; }\n\n getWeeksPerMonth() { return 6; }\n\n getNext(date: NgbDate, period: NgbPeriod = 'd', number = 1) {\n date = new NgbDate(date.year, date.month, date.day);\n\n switch (period) {\n case 'y':\n date = this._setYear(date, date.year + number);\n date.month = 1;\n date.day = 1;\n return date;\n case 'm':\n date = this._setMonth(date, date.month + number);\n date.day = 1;\n return date;\n case 'd':\n return this._setDay(date, date.day + number);\n default:\n return date;\n }\n }\n\n getPrev(date: NgbDate, period: NgbPeriod = 'd', number = 1) { return this.getNext(date, period, -number); }\n\n getWeekday(date: NgbDate) {\n const day = this.toGregorian(date).getDay();\n // in JS Date Sun=0, in ISO 8601 Sun=7\n return day === 0 ? 7 : day;\n }\n\n getWeekNumber(week: NgbDate[], firstDayOfWeek: number) {\n // in JS Date Sun=0, in ISO 8601 Sun=7\n if (firstDayOfWeek === 7) {\n firstDayOfWeek = 0;\n }\n\n const thursdayIndex = (4 + 7 - firstDayOfWeek) % 7;\n const date = week[thursdayIndex];\n\n const jsDate = this.toGregorian(date);\n jsDate.setDate(jsDate.getDate() + 4 - (jsDate.getDay() || 7)); // Thursday\n const time = jsDate.getTime();\n const MuhDate = this.toGregorian(new NgbDate(date.year, 1, 1)); // Compare with Muharram 1\n return Math.floor(Math.round((time - MuhDate.getTime()) / 86400000) / 7) + 1;\n }\n\n getToday(): NgbDate { return this.fromGregorian(new Date()); }\n\n\n isValid(date: NgbDate): boolean {\n return date && isNumber(date.year) && isNumber(date.month) && isNumber(date.day) &&\n !isNaN(this.toGregorian(date).getTime());\n }\n\n private _setDay(date: NgbDate, day: number): NgbDate {\n day = +day;\n let mDays = this.getDaysPerMonth(date.month, date.year);\n if (day <= 0) {\n while (day <= 0) {\n date = this._setMonth(date, date.month - 1);\n mDays = this.getDaysPerMonth(date.month, date.year);\n day += mDays;\n }\n } else if (day > mDays) {\n while (day > mDays) {\n day -= mDays;\n date = this._setMonth(date, date.month + 1);\n mDays = this.getDaysPerMonth(date.month, date.year);\n }\n }\n date.day = day;\n return date;\n }\n\n private _setMonth(date: NgbDate, month: number): NgbDate {\n month = +month;\n date.year = date.year + Math.floor((month - 1) / 12);\n date.month = Math.floor(((month - 1) % 12 + 12) % 12) + 1;\n return date;\n }\n\n private _setYear(date: NgbDate, year: number): NgbDate {\n date.year = +year;\n return date;\n }\n}\n","import {NgbCalendarHijri} from './ngb-calendar-hijri';\nimport {NgbDate} from '../ngb-date';\nimport {Injectable} from '@angular/core';\n\n/**\n * Checks if islamic year is a leap year\n */\nfunction isIslamicLeapYear(hYear: number): boolean {\n return (14 + 11 * hYear) % 30 < 11;\n}\n\n/**\n * Checks if gregorian years is a leap year\n */\nfunction isGregorianLeapYear(gDate: Date): boolean {\n const year = gDate.getFullYear();\n return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;\n}\n\n/**\n * Returns the start of Hijri Month.\n * `hMonth` is 0 for Muharram, 1 for Safar, etc.\n * `hYear` is any Hijri hYear.\n */\nfunction getIslamicMonthStart(hYear: number, hMonth: number): number {\n return Math.ceil(29.5 * hMonth) + (hYear - 1) * 354 + Math.floor((3 + 11 * hYear) / 30.0);\n}\n\n/**\n * Returns the start of Hijri year.\n * `year` is any Hijri year.\n */\nfunction getIslamicYearStart(year: number): number {\n return (year - 1) * 354 + Math.floor((3 + 11 * year) / 30.0);\n}\n\nfunction mod(a: number, b: number): number {\n return a - b * Math.floor(a / b);\n}\n\n/**\n * The civil calendar is one type of Hijri calendars used in islamic countries.\n * Uses a fixed cycle of alternating 29- and 30-day months,\n * with a leap day added to the last month of 11 out of every 30 years.\n * http://cldr.unicode.org/development/development-process/design-proposals/islamic-calendar-types\n * All the calculations here are based on the equations from \"Calendrical Calculations\" By Edward M. Reingold, Nachum\n * Dershowitz.\n */\n\nconst GREGORIAN_EPOCH = 1721425.5;\nconst ISLAMIC_EPOCH = 1948439.5;\n\n@Injectable()\nexport class NgbCalendarIslamicCivil extends NgbCalendarHijri {\n /**\n * Returns the equivalent islamic(civil) date value for a give input Gregorian date.\n * `gDate` is a JS Date to be converted to Hijri.\n */\n fromGregorian(gDate: Date): NgbDate {\n const gYear = gDate.getFullYear(), gMonth = gDate.getMonth(), gDay = gDate.getDate();\n\n let julianDay = GREGORIAN_EPOCH - 1 + 365 * (gYear - 1) + Math.floor((gYear - 1) / 4) +\n -Math.floor((gYear - 1) / 100) + Math.floor((gYear - 1) / 400) +\n Math.floor(\n (367 * (gMonth + 1) - 362) / 12 + (gMonth + 1 <= 2 ? 0 : isGregorianLeapYear(gDate) ? -1 : -2) + gDay);\n julianDay = Math.floor(julianDay) + 0.5;\n\n const days = julianDay - ISLAMIC_EPOCH;\n const hYear = Math.floor((30 * days + 10646) / 10631.0);\n let hMonth = Math.ceil((days - 29 - getIslamicYearStart(hYear)) / 29.5);\n hMonth = Math.min(hMonth, 11);\n const hDay = Math.ceil(days - getIslamicMonthStart(hYear, hMonth)) + 1;\n return new NgbDate(hYear, hMonth + 1, hDay);\n }\n\n /**\n * Returns the equivalent JS date value for a give input islamic(civil) date.\n * `hDate` is an islamic(civil) date to be converted to Gregorian.\n */\n toGregorian(hDate: NgbDate): Date {\n const hYear = hDate.year;\n const hMonth = hDate.month - 1;\n const hDay = hDate.day;\n const julianDay =\n hDay + Math.ceil(29.5 * hMonth) + (hYear - 1) * 354 + Math.floor((3 + 11 * hYear) / 30) + ISLAMIC_EPOCH - 1;\n\n const wjd = Math.floor(julianDay - 0.5) + 0.5, depoch = wjd - GREGORIAN_EPOCH,\n quadricent = Math.floor(depoch / 146097), dqc = mod(depoch, 146097), cent = Math.floor(dqc / 36524),\n dcent = mod(dqc, 36524), quad = Math.floor(dcent / 1461), dquad = mod(dcent, 1461),\n yindex = Math.floor(dquad / 365);\n let year = quadricent * 400 + cent * 100 + quad * 4 + yindex;\n if (!(cent === 4 || yindex === 4)) {\n year++;\n }\n\n const gYearStart = GREGORIAN_EPOCH + 365 * (year - 1) + Math.floor((year - 1) / 4) - Math.floor((year - 1) / 100) +\n Math.floor((year - 1) / 400);\n\n const yearday = wjd - gYearStart;\n\n const tjd = GREGORIAN_EPOCH - 1 + 365 * (year - 1) + Math.floor((year - 1) / 4) - Math.floor((year - 1) / 100) +\n Math.floor((year - 1) / 400) + Math.floor(739 / 12 + (isGregorianLeapYear(new Date(year, 3, 1)) ? -1 : -2) + 1);\n\n const leapadj = wjd < tjd ? 0 : isGregorianLeapYear(new Date(year, 3, 1)) ? 1 : 2;\n\n const month = Math.floor(((yearday + leapadj) * 12 + 373) / 367);\n const tjd2 = GREGORIAN_EPOCH - 1 + 365 * (year - 1) + Math.floor((year - 1) / 4) - Math.floor((year - 1) / 100) +\n Math.floor((year - 1) / 400) +\n Math.floor(\n (367 * month - 362) / 12 + (month <= 2 ? 0 : isGregorianLeapYear(new Date(year, month - 1, 1)) ? -1 : -2) +\n 1);\n\n const day = wjd - tjd2 + 1;\n\n return new Date(year, month - 1, day);\n }\n\n /**\n * Returns the number of days in a specific Hijri month.\n * `month` is 1 for Muharram, 2 for Safar, etc.\n * `year` is any Hijri year.\n */\n getDaysPerMonth(month: number, year: number): number {\n year = year + Math.floor(month / 13);\n month = ((month - 1) % 12) + 1;\n let length = 29 + month % 2;\n if (month === 12 && isIslamicLeapYear(year)) {\n length++;\n }\n return length;\n }\n}\n","import {NgbCalendarIslamicCivil} from './ngb-calendar-islamic-civil';\nimport {NgbDate} from '../ngb-date';\nimport {Injectable} from '@angular/core';\n\n/**\n * Umalqura calendar is one type of Hijri calendars used in islamic countries.\n * This Calendar is used by Saudi Arabia for administrative purpose.\n * Unlike tabular calendars, the algorithm involves astronomical calculation, but it's still deterministic.\n * http://cldr.unicode.org/development/development-process/design-proposals/islamic-calendar-types\n */\n\nconst GREGORIAN_FIRST_DATE = new Date(1882, 10, 12);\nconst GREGORIAN_LAST_DATE = new Date(2174, 10, 25);\nconst HIJRI_BEGIN = 1300;\nconst HIJRI_END = 1600;\nconst ONE_DAY = 1000 * 60 * 60 * 24;\n\nconst MONTH_LENGTH = [\n // 1300-1304\n '101010101010', '110101010100', '111011001001', '011011010100', '011011101010',\n // 1305-1309\n '001101101100', '101010101101', '010101010101', '011010101001', '011110010010',\n // 1310-1314\n '101110101001', '010111010100', '101011011010', '010101011100', '110100101101',\n // 1315-1319\n '011010010101', '011101001010', '101101010100', '101101101010', '010110101101',\n // 1320-1324\n '010010101110', '101001001111', '010100010111', '011010001011', '011010100101',\n // 1325-1329\n '101011010101', '001011010110', '100101011011', '010010011101', '101001001101',\n // 1330-1334\n '110100100110', '110110010101', '010110101100', '100110110110', '001010111010',\n // 1335-1339\n '101001011011', '010100101011', '101010010101', '011011001010', '101011101001',\n // 1340-1344\n '001011110100', '100101110110', '001010110110', '100101010110', '101011001010',\n // 1345-1349\n '101110100100', '101111010010', '010111011001', '001011011100', '100101101101',\n // 1350-1354\n '010101001101', '101010100101', '101101010010', '101110100101', '010110110100',\n // 1355-1359\n '100110110110', '010101010111', '001010010111', '010101001011', '011010100011',\n // 1360-1364\n '011101010010', '101101100101', '010101101010', '101010101011', '010100101011',\n // 1365-1369\n '110010010101', '110101001010', '110110100101', '010111001010', '101011010110',\n // 1370-1374\n '100101010111', '010010101011', '100101001011', '101010100101', '101101010010',\n // 1375-1379\n '101101101010', '010101110101', '001001110110', '100010110111', '010001011011',\n // 1380-1384\n '010101010101', '010110101001', '010110110100', '100111011010', '010011011101',\n // 1385-1389\n '001001101110', '100100110110', '101010101010', '110101010100', '110110110010',\n // 1390-1394\n '010111010101', '001011011010', '100101011011', '010010101011', '101001010101',\n // 1395-1399\n '101101001001', '101101100100', '101101110001', '010110110100', '101010110101',\n // 1400-1404\n '101001010101', '110100100101', '111010010010', '111011001001', '011011010100',\n // 1405-1409\n '101011101001', '100101101011', '010010101011', '101010010011', '110101001001',\n // 1410-1414\n '110110100100', '110110110010', '101010111001', '010010111010', '101001011011',\n // 1415-1419\n '010100101011', '101010010101', '101100101010', '101101010101', '010101011100',\n // 1420-1424\n '010010111101', '001000111101', '100100011101', '101010010101', '101101001010',\n // 1425-1429\n '101101011010', '010101101101', '001010110110', '100100111011', '010010011011',\n // 1430-1434\n '011001010101', '011010101001', '011101010100', '101101101010', '010101101100',\n // 1435-1439\n '101010101101', '010101010101', '101100101001', '101110010010', '101110101001',\n // 1440-1444\n '010111010100', '101011011010', '010101011010', '101010101011', '010110010101',\n // 1445-1449\n '011101001001', '011101100100', '101110101010', '010110110101', '001010110110',\n // 1450-1454\n '101001010110', '111001001101', '101100100101', '101101010010', '101101101010',\n // 1455-1459\n '010110101101', '001010101110', '100100101111', '010010010111', '011001001011',\n // 1460-1464\n '011010100101', '011010101100', '101011010110', '010101011101', '010010011101',\n // 1465-1469\n '101001001101', '110100010110', '110110010101', '010110101010', '010110110101',\n // 1470-1474\n '001011011010', '100101011011', '010010101101', '010110010101', '011011001010',\n // 1475-1479\n '011011100100', '101011101010', '010011110101', '001010110110', '100101010110',\n // 1480-1484\n '101010101010', '101101010100', '101111010010', '010111011001', '001011101010',\n // 1485-1489\n '100101101101', '010010101101', '101010010101', '101101001010', '101110100101',\n // 1490-1494\n '010110110010', '100110110101', '010011010110', '101010010111', '010101000111',\n // 1495-1499\n '011010010011', '011101001001', '101101010101', '010101101010', '101001101011',\n // 1500-1504\n '010100101011', '101010001011', '110101000110', '110110100011', '010111001010',\n // 1505-1509\n '101011010110', '010011011011', '001001101011', '100101001011', '101010100101',\n // 1510-1514\n '101101010010', '101101101001', '010101110101', '000101110110', '100010110111',\n // 1515-1519\n '001001011011', '010100101011', '010101100101', '010110110100', '100111011010',\n // 1520-1524\n '010011101101', '000101101101', '100010110110', '101010100110', '110101010010',\n // 1525-1529\n '110110101001', '010111010100', '101011011010', '100101011011', '010010101011',\n // 1530-1534\n '011001010011', '011100101001', '011101100010', '101110101001', '010110110010',\n // 1535-1539\n '101010110101', '010101010101', '101100100101', '110110010010', '111011001001',\n // 1540-1544\n '011011010010', '101011101001', '010101101011', '010010101011', '101001010101',\n // 1545-1549\n '110100101001', '110101010100', '110110101010', '100110110101', '010010111010',\n // 1550-1554\n '101000111011', '010010011011', '101001001101', '101010101010', '101011010101',\n // 1555-1559\n '001011011010', '100101011101', '010001011110', '101000101110', '110010011010',\n // 1560-1564\n '110101010101', '011010110010', '011010111001', '010010111010', '101001011101',\n // 1565-1569\n '010100101101', '101010010101', '101101010010', '101110101000', '101110110100',\n // 1570-1574\n '010110111001', '001011011010', '100101011010', '101101001010', '110110100100',\n // 1575-1579\n '111011010001', '011011101000', '101101101010', '010101101101', '010100110101',\n // 1580-1584\n '011010010101', '110101001010', '110110101000', '110111010100', '011011011010',\n // 1585-1589\n '010101011011', '001010011101', '011000101011', '101100010101', '101101001010',\n // 1590-1594\n '101110010101', '010110101010', '101010101110', '100100101110', '110010001111',\n // 1595-1599\n '010100100111', '011010010101', '011010101010', '101011010110', '010101011101',\n // 1600\n '001010011101'\n];\n\nfunction getDaysDiff(date1: Date, date2: Date): number {\n // Ignores the time part in date1 and date2:\n const time1 = Date.UTC(date1.getFullYear(), date1.getMonth(), date1.getDate());\n const time2 = Date.UTC(date2.getFullYear(), date2.getMonth(), date2.getDate());\n const diff = Math.abs(time1 - time2);\n return Math.round(diff / ONE_DAY);\n}\n\n@Injectable()\nexport class NgbCalendarIslamicUmalqura extends NgbCalendarIslamicCivil {\n /**\n * Returns the equivalent islamic(Umalqura) date value for a give input Gregorian date.\n * `gdate` is s JS Date to be converted to Hijri.\n */\n fromGregorian(gDate: Date): NgbDate {\n let hDay = 1, hMonth = 0, hYear = 1300;\n let daysDiff = getDaysDiff(gDate, GREGORIAN_FIRST_DATE);\n if (gDate.getTime() - GREGORIAN_FIRST_DATE.getTime() >= 0 && gDate.getTime() - GREGORIAN_LAST_DATE.getTime() <= 0) {\n let year = 1300;\n for (let i = 0; i < MONTH_LENGTH.length; i++, year++) {\n for (let j = 0; j < 12; j++) {\n let numOfDays = +MONTH_LENGTH[i][j] + 29;\n if (daysDiff <= numOfDays) {\n hDay = daysDiff + 1;\n if (hDay > numOfDays) {\n hDay = 1;\n j++;\n }\n if (j > 11) {\n j = 0;\n year++;\n }\n hMonth = j;\n hYear = year;\n return new NgbDate(hYear, hMonth + 1, hDay);\n }\n daysDiff = daysDiff - numOfDays;\n }\n }\n } else {\n return super.fromGregorian(gDate);\n }\n }\n /**\n * Converts the current Hijri date to Gregorian.\n */\n toGregorian(hDate: NgbDate): Date {\n const hYear = hDate.year;\n const hMonth = hDate.month - 1;\n const hDay = hDate.day;\n let gDate = new Date(GREGORIAN_FIRST_DATE);\n let dayDiff = hDay - 1;\n if (hYear >= HIJRI_BEGIN && hYear <= HIJRI_END) {\n for (let y = 0; y < hYear - HIJRI_BEGIN; y++) {\n for (let m = 0; m < 12; m++) {\n dayDiff += +MONTH_LENGTH[y][m] + 29;\n }\n }\n for (let m = 0; m < hMonth; m++) {\n dayDiff += +MONTH_LENGTH[hYear - HIJRI_BEGIN][m] + 29;\n }\n gDate.setDate(GREGORIAN_FIRST_DATE.getDate() + dayDiff);\n } else {\n gDate = super.toGregorian(hDate);\n }\n return gDate;\n }\n /**\n * Returns the number of days in a specific Hijri hMonth.\n * `hMonth` is 1 for Muharram, 2 for Safar, etc.\n * `hYear` is any Hijri hYear.\n */\n getDaysPerMonth(hMonth: number, hYear: number): number {\n if (hYear >= HIJRI_BEGIN && hYear <= HIJRI_END) {\n const pos = hYear - HIJRI_BEGIN;\n return +MONTH_LENGTH[pos][hMonth - 1] + 29;\n }\n return super.getDaysPerMonth(hMonth, hYear);\n }\n}\n","import {NgbDate} from '../ngb-date';\n\n/**\n * Returns the equivalent JS date value for a give input Jalali date.\n * `jalaliDate` is an Jalali date to be converted to Gregorian.\n */\nexport function toGregorian(jalaliDate: NgbDate): Date {\n let jdn = jalaliToJulian(jalaliDate.year, jalaliDate.month, jalaliDate.day);\n let date = julianToGregorian(jdn);\n date.setHours(6, 30, 3, 200);\n return date;\n}\n\n/**\n * Returns the equivalent jalali date value for a give input Gregorian date.\n * `gdate` is a JS Date to be converted to jalali.\n * utc to local\n */\nexport function fromGregorian(gdate: Date): NgbDate {\n let g2d = gregorianToJulian(gdate.getFullYear(), gdate.getMonth() + 1, gdate.getDate());\n return julianToJalali(g2d);\n}\n\nexport function setJalaliYear(date: NgbDate, yearValue: number): NgbDate {\n date.year = +yearValue;\n return date;\n}\n\nexport function setJalaliMonth(date: NgbDate, month: number): NgbDate {\n month = +month;\n date.year = date.year + Math.floor((month - 1) / 12);\n date.month = Math.floor(((month - 1) % 12 + 12) % 12) + 1;\n return date;\n}\n\nexport function setJalaliDay(date: NgbDate, day: number): NgbDate {\n let mDays = getDaysPerMonth(date.month, date.year);\n if (day <= 0) {\n while (day <= 0) {\n date = setJalaliMonth(date, date.month - 1);\n mDays = getDaysPerMonth(date.month, date.year);\n day += mDays;\n }\n } else if (day > mDays) {\n while (day > mDays) {\n day -= mDays;\n date = setJalaliMonth(date, date.month + 1);\n mDays = getDaysPerMonth(date.month, date.year);\n }\n }\n date.day = day;\n return date;\n}\n\nfunction mod(a: number, b: number): number {\n return a - b * Math.floor(a / b);\n}\n\nfunction div(a: number, b: number) {\n return Math.trunc(a / b);\n}\n\n/*\n This function determines if the Jalali (Persian) year is\n leap (366-day long) or is the common year (365 days), and\n finds the day in March (Gregorian calendar) of the first\n day of the Jalali year (jalaliYear).\n @param jalaliYear Jalali calendar year (-61 to 3177)\n @return\n leap: number of years since the last leap year (0 to 4)\n gYear: Gregorian year of the beginning of Jalali year\n march: the March day of Farvardin the 1st (1st day of jalaliYear)\n @see: http://www.astro.uni.torun.pl/~kb/Papers/EMP/PersianC-EMP.htm\n @see: http://www.fourmilab.ch/documents/calendar/\n */\nfunction jalCal(jalaliYear: number) {\n // Jalali years starting the 33-year rule.\n let breaks =\n [-61, 9, 38, 199, 426, 686, 756, 818, 1111, 1181, 1210, 1635, 2060, 2097, 2192, 2262, 2324, 2394, 2456, 3178];\n const breaksLength = breaks.length;\n const gYear = jalaliYear + 621;\n let leapJ = -14;\n let jp = breaks[0];\n\n if (jalaliYear < jp || jalaliYear >= breaks[breaksLength - 1]) {\n throw new Error('Invalid Jalali year ' + jalaliYear);\n }\n\n // Find the limiting years for the Jalali year jalaliYear.\n let jump;\n for (let i = 1; i < breaksLength; i += 1) {\n const jm = breaks[i];\n jump = jm - jp;\n if (jalaliYear < jm) {\n break;\n }\n leapJ = leapJ + div(jump, 33) * 8 + div(mod(jump, 33), 4);\n jp = jm;\n }\n let n = jalaliYear - jp;\n\n // Find the number of leap years from AD 621 to the beginning\n // of the current Jalali year in the Persian calendar.\n leapJ = leapJ + div(n, 33) * 8 + div(mod(n, 33) + 3, 4);\n if (mod(jump, 33) === 4 && jump - n === 4) {\n leapJ += 1;\n }\n\n // And the same in the Gregorian calendar (until the year gYear).\n const leapG = div(gYear, 4) - div((div(gYear, 100) + 1) * 3, 4) - 150;\n\n // Determine the Gregorian date of Farvardin the 1st.\n const march = 20 + leapJ - leapG;\n\n // Find how many years have passed since the last leap year.\n if (jump - n < 6) {\n n = n - jump + div(jump + 4, 33) * 33;\n }\n let leap = mod(mod(n + 1, 33) - 1, 4);\n if (leap === -1) {\n leap = 4;\n }\n\n return {leap: leap, gy: gYear, march: march};\n}\n\n/*\n Calculates Gregorian and Julian calendar dates from the Julian Day number\n (jdn) for the period since jdn=-34839655 (i.e. the year -100100 of both\n calendars) to some millions years ahead of the present.\n @param jdn Julian Day number\n @return\n gYear: Calendar year (years BC numbered 0, -1, -2, ...)\n gMonth: Calendar month (1 to 12)\n gDay: Calendar day of the month M (1 to 28/29/30/31)\n */\nfunction julianToGregorian(julianDayNumber: number) {\n let j = 4 * julianDayNumber + 139361631;\n j = j + div(div(4 * julianDayNumber + 183187720, 146097) * 3, 4) * 4 - 3908;\n const i = div(mod(j, 1461), 4) * 5 + 308;\n const gDay = div(mod(i, 153), 5) + 1;\n const gMonth = mod(div(i, 153), 12) + 1;\n const gYear = div(j, 1461) - 100100 + div(8 - gMonth, 6);\n\n return new Date(gYear, gMonth - 1, gDay);\n}\n\n/*\n Converts a date of the Jalali calendar to the Julian Day number.\n @param jy Jalali year (1 to 3100)\n @param jm Jalali month (1 to 12)\n @param jd Jalali day (1 to 29/31)\n @return Julian Day number\n */\nfunction gregorianToJulian(gy: number, gm: number, gd: number) {\n let d = div((gy + div(gm - 8, 6) + 100100) * 1461, 4) + div(153 * mod(gm + 9, 12) + 2, 5) + gd - 34840408;\n d = d - div(div(gy + 100100 + div(gm - 8, 6), 100) * 3, 4) + 752;\n return d;\n}\n\n/*\n Converts the Julian Day number to a date in the Jalali calendar.\n @param julianDayNumber Julian Day number\n @return\n jalaliYear: Jalali year (1 to 3100)\n jalaliMonth: Jalali month (1 to 12)\n jalaliDay: Jalali day (1 to 29/31)\n */\nfunction julianToJalali(julianDayNumber: number) {\n let gy = julianToGregorian(julianDayNumber).getFullYear() // Calculate Gregorian year (gy).\n ,\n jalaliYear = gy - 621, r = jalCal(jalaliYear), gregorianDay = gregorianToJulian(gy, 3, r.march), jalaliDay,\n jalaliMonth, numberOfDays;\n\n // Find number of days that passed since 1 Farvardin.\n numberOfDays = julianDayNumber - gregorianDay;\n if (numberOfDays >= 0) {\n if (numberOfDays <= 185) {\n // The first 6 months.\n jalaliMonth = 1 + div(numberOfDays, 31);\n jalaliDay = mod(numberOfDays, 31) + 1;\n return new NgbDate(jalaliYear, jalaliMonth, jalaliDay);\n } else {\n // The remaining months.\n numberOfDays -= 186;\n }\n } else {\n // Previous Jalali year.\n jalaliYear -= 1;\n numberOfDays += 179;\n if (r.leap === 1) {\n numberOfDays += 1;\n }\n }\n jalaliMonth = 7 + div(numberOfDays, 30);\n jalaliDay = mod(numberOfDays, 30) + 1;\n\n return new NgbDate(jalaliYear, jalaliMonth, jalaliDay);\n}\n\n/*\n Converts a date of the Jalali calendar to the Julian Day number.\n @param jYear Jalali year (1 to 3100)\n @param jMonth Jalali month (1 to 12)\n @param jDay Jalali day (1 to 29/31)\n @return Julian Day number\n */\nfunction jalaliToJulian(jYear: number, jMonth: number, jDay: number) {\n let r = jalCal(jYear);\n return gregorianToJulian(r.gy, 3, r.march) + (jMonth - 1) * 31 - div(jMonth, 7) * (jMonth - 7) + jDay - 1;\n}\n\n/**\n * Returns the number of days in a specific jalali month.\n */\nfunction getDaysPerMonth(month: number, year: number): number {\n if (month <= 6) {\n return 31;\n }\n if (month <= 11) {\n return 30;\n }\n if (jalCal(year).leap === 0) {\n return 30;\n }\n return 29;\n}\n","import {Injectable} from '@angular/core';\nimport {NgbDate} from '../ngb-date';\nimport {NgbCalendar, NgbPeriod} from '../ngb-calendar';\nimport {isInteger} from '../../util/util';\n\nimport {fromGregorian, setJalaliDay, setJalaliMonth, setJalaliYear, toGregorian} from './jalali';\n\n@Injectable()\nexport class NgbCalendarPersian extends NgbCalendar {\n getDaysPerWeek() { return 7; }\n\n getMonths() { return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; }\n\n getWeeksPerMonth() { return 6; }\n\n getNext(date: NgbDate, period: NgbPeriod = 'd', number = 1) {\n date = new NgbDate(date.year, date.month, date.day);\n\n switch (period) {\n case 'y':\n date = setJalaliYear(date, date.year + number);\n date.month = 1;\n date.day = 1;\n return date;\n case 'm':\n date = setJalaliMonth(date, date.month + number);\n date.day = 1;\n return date;\n case 'd':\n return setJalaliDay(date, date.day + number);\n default:\n return date;\n }\n }\n\n getPrev(date: NgbDate, period: NgbPeriod = 'd', number = 1) { return this.getNext(date, period, -number); }\n\n getWeekday(date: NgbDate) {\n const day = toGregorian(date).getDay();\n // in JS Date Sun=0, in ISO 8601 Sun=7\n return day === 0 ? 7 : day;\n }\n\n getWeekNumber(week: NgbDate[], firstDayOfWeek: number) {\n // in JS Date Sun=0, in ISO 8601 Sun=7\n if (firstDayOfWeek === 7) {\n firstDayOfWeek = 0;\n }\n\n const thursdayIndex = (4 + 7 - firstDayOfWeek) % 7;\n const date = week[thursdayIndex];\n\n const jsDate = toGregorian(date);\n jsDate.setDate(jsDate.getDate() + 4 - (jsDate.getDay() || 7)); // Thursday\n const time = jsDate.getTime();\n const startDate = toGregorian(new NgbDate(date.year, 1, 1));\n return Math.floor(Math.round((time - startDate.getTime()) / 86400000) / 7) + 1;\n }\n\n getToday(): NgbDate { return fromGregorian(new Date()); }\n\n isValid(date: NgbDate): boolean {\n return date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day) &&\n !isNaN(toGregorian(date).getTime());\n }\n}\n","import {NgbDate} from '../ngb-date';\nimport {NgbDateStruct} from '../ngb-date-struct';\n\nconst PARTS_PER_HOUR = 1080;\nconst PARTS_PER_DAY = 24 * PARTS_PER_HOUR;\nconst PARTS_FRACTIONAL_MONTH = 12 * PARTS_PER_HOUR + 793;\nconst PARTS_PER_MONTH = 29 * PARTS_PER_DAY + PARTS_FRACTIONAL_MONTH;\nconst BAHARAD = 11 * PARTS_PER_HOUR + 204;\nconst HEBREW_DAY_ON_JAN_1_1970 = 2092591;\nconst GREGORIAN_EPOCH = 1721425.5;\n\nfunction isGregorianLeapYear(year: number): boolean {\n return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;\n}\n\nfunction numberOfFirstDayInYear(year: number): number {\n let monthsBeforeYear = Math.floor((235 * year - 234) / 19);\n let fractionalMonthsBeforeYear = monthsBeforeYear * PARTS_FRACTIONAL_MONTH + BAHARAD;\n let dayNumber = monthsBeforeYear * 29 + Math.floor(fractionalMonthsBeforeYear / PARTS_PER_DAY);\n let timeOfDay = fractionalMonthsBeforeYear % PARTS_PER_DAY;\n\n let dayOfWeek = dayNumber % 7; // 0 == Monday\n\n if (dayOfWeek === 2 || dayOfWeek === 4 || dayOfWeek === 6) {\n dayNumber++;\n dayOfWeek = dayNumber % 7;\n }\n if (dayOfWeek === 1 && timeOfDay > 15 * PARTS_PER_HOUR + 204 && !isHebrewLeapYear(year)) {\n dayNumber += 2;\n } else if (dayOfWeek === 0 && timeOfDay > 21 * PARTS_PER_HOUR + 589 && isHebrewLeapYear(year - 1)) {\n dayNumber++;\n }\n return dayNumber;\n}\n\nfunction getDaysInGregorianMonth(month: number, year: number): number {\n let days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n if (isGregorianLeapYear(year)) {\n days[1]++;\n }\n return days[month - 1];\n}\n\nfunction getHebrewMonths(year: number): number {\n return isHebrewLeapYear(year) ? 13 : 12;\n}\n\n/**\n * Returns the number of days in a specific Hebrew year.\n * `year` is any Hebrew year.\n */\nfunction getDaysInHebrewYear(year: number): number {\n return numberOfFirstDayInYear(year + 1) - numberOfFirstDayInYear(year);\n}\n\nexport function isHebrewLeapYear(year: number): boolean {\n let b = (year * 12 + 17) % 19;\n return b >= ((b < 0) ? -7 : 12);\n}\n\n/**\n * Returns the number of days in a specific Hebrew month.\n * `month` is 1 for Nisan, 2 for Iyar etc. Note: Hebrew leap year contains 13 months.\n * `year` is any Hebrew year.\n */\nexport function getDaysInHebrewMonth(month: number, year: number): number {\n let yearLength = numberOfFirstDayInYear(year + 1) - numberOfFirstDayInYear(year);\n let yearType = (yearLength <= 380 ? yearLength : (yearLength - 30)) - 353;\n let leapYear = isHebrewLeapYear(year);\n let daysInMonth = leapYear ? [30, 29, 29, 29, 30, 30, 29, 30, 29, 30, 29, 30, 29] :\n [30, 29, 29, 29, 30, 29, 30, 29, 30, 29, 30, 29];\n if (yearType > 0) {\n daysInMonth[2]++; // Kislev gets an extra day in normal or complete years.\n }\n if (yearType > 1) {\n daysInMonth[1]++; // Heshvan gets an extra day in complete years only.\n }\n return daysInMonth[month - 1];\n}\n\nexport function getDayNumberInHebrewYear(date: NgbDate): number {\n let numberOfDay = 0;\n for (let i = 1; i < date.month; i++) {\n numberOfDay += getDaysInHebrewMonth(i, date.year);\n }\n return numberOfDay + date.day;\n}\n\nexport function setHebrewMonth(date: NgbDate, val: number): NgbDate {\n let after = val >= 0;\n if (!after) {\n val = -val;\n }\n while (val > 0) {\n if (after) {\n if (val > getHebrewMonths(date.year) - date.month) {\n val -= getHebrewMonths(date.year) - date.month + 1;\n date.year++;\n date.month = 1;\n } else {\n date.month += val;\n val = 0;\n }\n } else {\n if (val >= date.month) {\n date.year--;\n val -= date.month;\n date.month = getHebrewMonths(date.year);\n } else {\n date.month -= val;\n val = 0;\n }\n }\n }\n return date;\n}\n\nexport function setHebrewDay(date: NgbDate, val: number): NgbDate {\n let after = val >= 0;\n if (!after) {\n val = -val;\n }\n while (val > 0) {\n if (after) {\n if (val > getDaysInHebrewYear(date.year) - getDayNumberInHebrewYear(date)) {\n val -= getDaysInHebrewYear(date.year) - getDayNumberInHebrewYear(date) + 1;\n date.year++;\n date.month = 1;\n date.day = 1;\n } else if (val > getDaysInHebrewMonth(date.month, date.year) - date.day) {\n val -= getDaysInHebrewMonth(date.month, date.year) - date.day + 1;\n date.month++;\n date.day = 1;\n } else {\n date.day += val;\n val = 0;\n }\n } else {\n if (val >= date.day) {\n val -= date.day;\n date.month--;\n if (date.month === 0) {\n date.year--;\n date.month = getHebrewMonths(date.year);\n }\n date.day = getDaysInHebrewMonth(date.month, date.year);\n } else {\n date.day -= val;\n val = 0;\n }\n }\n }\n return date;\n}\n\n/**\n * Returns the equivalent Hebrew date value for a give input Gregorian date.\n * `gdate` is a JS Date to be converted to Hebrew date.\n */\nexport function fromGregorian(gdate: Date): NgbDate {\n const date = new Date(gdate);\n const gYear = date.getFullYear(), gMonth = date.getMonth(), gDay = date.getDate();\n let julianDay = GREGORIAN_EPOCH - 1 + 365 * (gYear - 1) + Math.floor((gYear - 1) / 4) -\n Math.floor((gYear - 1) / 100) + Math.floor((gYear - 1) / 400) +\n Math.floor((367 * (gMonth + 1) - 362) / 12 + (gMonth + 1 <= 2 ? 0 : isGregorianLeapYear(gYear) ? -1 : -2) + gDay);\n julianDay = Math.floor(julianDay + 0.5);\n let daysSinceHebEpoch = julianDay - 347997;\n let monthsSinceHebEpoch = Math.floor(daysSinceHebEpoch * PARTS_PER_DAY / PARTS_PER_MONTH);\n let hYear = Math.floor((monthsSinceHebEpoch * 19 + 234) / 235) + 1;\n let firstDayOfThisYear = numberOfFirstDayInYear(hYear);\n let dayOfYear = daysSinceHebEpoch - firstDayOfThisYear;\n while (dayOfYear < 1) {\n hYear--;\n firstDayOfThisYear = numberOfFirstDayInYear(hYear);\n dayOfYear = daysSinceHebEpoch - firstDayOfThisYear;\n }\n let hMonth = 1;\n let hDay = dayOfYear;\n while (hDay > getDaysInHebrewMonth(hMonth, hYear)) {\n hDay -= getDaysInHebrewMonth(hMonth, hYear);\n hMonth++;\n }\n return new NgbDate(hYear, hMonth, hDay);\n}\n\n/**\n * Returns the equivalent JS date value for a given Hebrew date.\n * `hebrewDate` is an Hebrew date to be converted to Gregorian.\n */\nexport function toGregorian(hebrewDate: NgbDateStruct | NgbDate): Date {\n const hYear = hebrewDate.year;\n const hMonth = hebrewDate.month;\n const hDay = hebrewDate.day;\n let days = numberOfFirstDayInYear(hYear);\n for (let i = 1; i < hMonth; i++) {\n days += getDaysInHebrewMonth(i, hYear);\n }\n days += hDay;\n let diffDays = days - HEBREW_DAY_ON_JAN_1_1970;\n let after = diffDays >= 0;\n if (!after) {\n diffDays = -diffDays;\n }\n let gYear = 1970;\n let gMonth = 1;\n let gDay = 1;\n while (diffDays > 0) {\n if (after) {\n if (diffDays >= (isGregorianLeapYear(gYear) ? 366 : 365)) {\n diffDays -= isGregorianLeapYear(gYear) ? 366 : 365;\n gYear++;\n } else if (diffDays >= getDaysInGregorianMonth(gMonth, gYear)) {\n diffDays -= getDaysInGregorianMonth(gMonth, gYear);\n gMonth++;\n } else {\n gDay += diffDays;\n diffDays = 0;\n }\n } else {\n if (diffDays >= (isGregorianLeapYear(gYear - 1) ? 366 : 365)) {\n diffDays -= isGregorianLeapYear(gYear - 1) ? 366 : 365;\n gYear--;\n } else {\n if (gMonth > 1) {\n gMonth--;\n } else {\n gMonth = 12;\n gYear--;\n }\n if (diffDays >= getDaysInGregorianMonth(gMonth, gYear)) {\n diffDays -= getDaysInGregorianMonth(gMonth, gYear);\n } else {\n gDay = getDaysInGregorianMonth(gMonth, gYear) - diffDays + 1;\n diffDays = 0;\n }\n }\n }\n }\n return new Date(gYear, gMonth - 1, gDay);\n}\n\nexport function hebrewNumerals(numerals: number): string {\n if (!numerals) {\n return '';\n }\n const hArray0_9 = ['', '\\u05d0', '\\u05d1', '\\u05d2', '\\u05d3', '\\u05d4', '\\u05d5', '\\u05d6', '\\u05d7', '\\u05d8'];\n const hArray10_19 = [\n '\\u05d9', '\\u05d9\\u05d0', '\\u05d9\\u05d1', '\\u05d9\\u05d2', '\\u05d9\\u05d3', '\\u05d8\\u05d5', '\\u05d8\\u05d6',\n '\\u05d9\\u05d6', '\\u05d9\\u05d7', '\\u05d9\\u05d8'\n ];\n const hArray20_90 = ['', '', '\\u05db', '\\u05dc', '\\u05de', '\\u05e0', '\\u05e1', '\\u05e2', '\\u05e4', '\\u05e6'];\n const hArray100_900 = [\n '', '\\u05e7', '\\u05e8', '\\u05e9', '\\u05ea', '\\u05ea\\u05e7', '\\u05ea\\u05e8', '\\u05ea\\u05e9', '\\u05ea\\u05ea',\n '\\u05ea\\u05ea\\u05e7'\n ];\n const hArray1000_9000 = [\n '', '\\u05d0', '\\u05d1', '\\u05d1\\u05d0', '\\u05d1\\u05d1', '\\u05d4', '\\u05d4\\u05d0', '\\u05d4\\u05d1',\n '\\u05d4\\u05d1\\u05d0', '\\u05d4\\u05d1\\u05d1'\n ];\n const geresh = '\\u05f3', gershaim = '\\u05f4';\n let mem = 0;\n let result = [];\n let step = 0;\n while (numerals > 0) {\n let m = numerals % 10;\n if (step === 0) {\n mem = m;\n } else if (step === 1) {\n if (m !== 1) {\n result.unshift(hArray20_90[m], hArray0_9[mem]);\n } else {\n result.unshift(hArray10_19[mem]);\n }\n } else if (step === 2) {\n result.unshift(hArray100_900[m]);\n } else {\n if (m !== 5) {\n result.unshift(hArray1000_9000[m], geresh, ' ');\n }\n break;\n }\n numerals = Math.floor(numerals / 10);\n if (step === 0 && numerals === 0) {\n result.unshift(hArray0_9[m]);\n }\n step++;\n }\n result = result.join('').split('');\n if (result.length === 1) {\n result.push(geresh);\n } else if (result.length > 1) {\n result.splice(result.length - 1, 0, gershaim);\n }\n return result.join('');\n}\n","import {NgbDate} from '../ngb-date';\nimport {fromJSDate, NgbCalendar, NgbPeriod, toJSDate} from '../ngb-calendar';\nimport {Injectable} from '@angular/core';\nimport {isNumber} from '../../util/util';\nimport {\n fromGregorian,\n getDayNumberInHebrewYear,\n getDaysInHebrewMonth,\n isHebrewLeapYear,\n toGregorian,\n setHebrewDay,\n setHebrewMonth\n} from './hebrew';\n\n/**\n * @since 3.2.0\n */\n@Injectable()\nexport class NgbCalendarHebrew extends NgbCalendar {\n getDaysPerWeek() { return 7; }\n\n getMonths(year?: number) {\n if (year && isHebrewLeapYear(year)) {\n return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13];\n } else {\n return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];\n }\n }\n\n getWeeksPerMonth() { return 6; }\n\n isValid(date: NgbDate): boolean {\n let b = date && isNumber(date.year) && isNumber(date.month) && isNumber(date.day);\n b = b && date.month > 0 && date.month <= (isHebrewLeapYear(date.year) ? 13 : 12);\n b = b && date.day > 0 && date.day <= getDaysInHebrewMonth(date.month, date.year);\n return b && !isNaN(toGregorian(date).getTime());\n }\n\n getNext(date: NgbDate, period: NgbPeriod = 'd', number = 1) {\n date = new NgbDate(date.year, date.month, date.day);\n\n switch (period) {\n case 'y':\n date.year += number;\n date.month = 1;\n date.day = 1;\n return date;\n case 'm':\n date = setHebrewMonth(date, number);\n date.day = 1;\n return date;\n case 'd':\n return setHebrewDay(date, number);\n default:\n return date;\n }\n }\n\n getPrev(date: NgbDate, period: NgbPeriod = 'd', number = 1) { return this.getNext(date, period, -number); }\n\n getWeekday(date: NgbDate) {\n const day = toGregorian(date).getDay();\n // in JS Date Sun=0, in ISO 8601 Sun=7\n return day === 0 ? 7 : day;\n }\n\n getWeekNumber(week: NgbDate[], firstDayOfWeek: number) {\n const date = week[week.length - 1];\n return Math.ceil(getDayNumberInHebrewYear(date) / 7);\n }\n\n getToday(): NgbDate { return fromGregorian(new Date()); }\n\n /**\n * @since 3.4.0\n */\n toGregorian(date: NgbDate): NgbDate { return fromJSDate(toGregorian(date)); }\n\n /**\n * @since 3.4.0\n */\n fromGregorian(date: NgbDate): NgbDate { return fromGregorian(toJSDate(date)); }\n}\n","import {NgbDatepickerI18n} from '../datepicker-i18n';\nimport {NgbDateStruct} from '../../index';\nimport {hebrewNumerals, isHebrewLeapYear} from './hebrew';\nimport {Injectable} from '@angular/core';\n\n\nconst WEEKDAYS = ['שני', 'שלישי', 'רביעי', 'חמישי', 'שישי', 'שבת', 'ראשון'];\nconst MONTHS = ['תשרי', 'חשון', 'כסלו', 'טבת', 'שבט', 'אדר', 'ניסן', 'אייר', 'סיון', 'תמוז', 'אב', 'אלול'];\nconst MONTHS_LEAP =\n ['תשרי', 'חשון', 'כסלו', 'טבת', 'שבט', 'אדר א׳', 'אדר ב׳', 'ניסן', 'אייר', 'סיון', 'תמוז', 'אב', 'אלול'];\n\n/**\n * @since 3.2.0\n */\n@Injectable()\nexport class NgbDatepickerI18nHebrew extends NgbDatepickerI18n {\n getMonthShortName(month: number, year?: number): string { return this.getMonthFullName(month, year); }\n\n getMonthFullName(month: number, year?: number): string {\n return isHebrewLeapYear(year) ? MONTHS_LEAP[month - 1] : MONTHS[month - 1];\n }\n\n getWeekdayShortName(weekday: number): string { return WEEKDAYS[weekday - 1]; }\n\n getDayAriaLabel(date: NgbDateStruct): string {\n return `${hebrewNumerals(date.day)} ${this.getMonthFullName(date.month, date.year)} ${hebrewNumerals(date.year)}`;\n }\n\n getDayNumerals(date: NgbDateStruct): string { return hebrewNumerals(date.day); }\n\n getWeekNumerals(weekNumber: number): string { return hebrewNumerals(weekNumber); }\n\n getYearNumerals(year: number): string { return hebrewNumerals(year); }\n}\n","import {Injectable} from '@angular/core';\nimport {NgbDateAdapter} from './ngb-date-adapter';\nimport {NgbDateStruct} from '../ngb-date-struct';\nimport {isInteger} from '../../util/util';\n\n/**\n * [`NgbDateAdapter`](#/components/datepicker/api#NgbDateAdapter) implementation that uses\n * native javascript dates as a user date model.\n */\n@Injectable()\nexport class NgbDateNativeAdapter extends NgbDateAdapter {\n /**\n * Converts a native `Date` to a `NgbDateStruct`.\n */\n fromModel(date: Date): NgbDateStruct {\n return (date instanceof Date && !isNaN(date.getTime())) ? this._fromNativeDate(date) : null;\n }\n\n /**\n * Converts a `NgbDateStruct` to a native `Date`.\n */\n toModel(date: NgbDateStruct): Date {\n return date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day) ? this._toNativeDate(date) :\n null;\n }\n\n protected _fromNativeDate(date: Date): NgbDateStruct {\n return {year: date.getFullYear(), month: date.getMonth() + 1, day: date.getDate()};\n }\n\n protected _toNativeDate(date: NgbDateStruct): Date {\n const jsDate = new Date(date.year, date.month - 1, date.day, 12);\n // avoid 30 -> 1930 conversion\n jsDate.setFullYear(date.year);\n return jsDate;\n }\n}\n","import {Injectable} from '@angular/core';\nimport {NgbDateStruct} from '../ngb-date-struct';\nimport {NgbDateNativeAdapter} from './ngb-date-native-adapter';\n\n/**\n * Same as [`NgbDateNativeAdapter`](#/components/datepicker/api#NgbDateNativeAdapter), but with UTC dates.\n *\n * @since 3.2.0\n */\n@Injectable()\nexport class NgbDateNativeUTCAdapter extends NgbDateNativeAdapter {\n protected _fromNativeDate(date: Date): NgbDateStruct {\n return {year: date.getUTCFullYear(), month: date.getUTCMonth() + 1, day: date.getUTCDate()};\n }\n\n protected _toNativeDate(date: NgbDateStruct): Date {\n const jsDate = new Date(Date.UTC(date.year, date.month - 1, date.day));\n // avoid 30 -> 1930 conversion\n jsDate.setUTCFullYear(date.year);\n return jsDate;\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FormsModule} from '@angular/forms';\nimport {NgbDatepicker} from './datepicker';\nimport {NgbDatepickerMonthView} from './datepicker-month-view';\nimport {NgbDatepickerNavigation} from './datepicker-navigation';\nimport {NgbInputDatepicker} from './datepicker-input';\nimport {NgbDatepickerDayView} from './datepicker-day-view';\nimport {NgbDatepickerNavigationSelect} from './datepicker-navigation-select';\n\nexport {NgbDatepicker, NgbDatepickerNavigateEvent} from './datepicker';\nexport {NgbInputDatepicker} from './datepicker-input';\nexport {NgbCalendar, NgbPeriod, NgbCalendarGregorian} from './ngb-calendar';\nexport {NgbCalendarIslamicCivil} from './hijri/ngb-calendar-islamic-civil';\nexport {NgbCalendarIslamicUmalqura} from './hijri/ngb-calendar-islamic-umalqura';\nexport {NgbCalendarPersian} from './jalali/ngb-calendar-persian';\nexport {NgbCalendarHebrew} from './hebrew/ngb-calendar-hebrew';\nexport {NgbDatepickerI18nHebrew} from './hebrew/datepicker-i18n-hebrew';\nexport {NgbDatepickerMonthView} from './datepicker-month-view';\nexport {NgbDatepickerDayView} from './datepicker-day-view';\nexport {NgbDatepickerNavigation} from './datepicker-navigation';\nexport {NgbDatepickerNavigationSelect} from './datepicker-navigation-select';\nexport {NgbDatepickerConfig} from './datepicker-config';\nexport {NgbDatepickerI18n} from './datepicker-i18n';\nexport {NgbDateStruct} from './ngb-date-struct';\nexport {NgbDate} from './ngb-date';\nexport {NgbDateAdapter} from './adapters/ngb-date-adapter';\nexport {NgbDateNativeAdapter} from './adapters/ngb-date-native-adapter';\nexport {NgbDateNativeUTCAdapter} from './adapters/ngb-date-native-utc-adapter';\nexport {NgbDateParserFormatter} from './ngb-date-parser-formatter';\n\n@NgModule({\n declarations: [\n NgbDatepicker, NgbDatepickerMonthView, NgbDatepickerNavigation, NgbDatepickerNavigationSelect, NgbDatepickerDayView,\n NgbInputDatepicker\n ],\n exports: [NgbDatepicker, NgbInputDatepicker],\n imports: [CommonModule, FormsModule],\n entryComponents: [NgbDatepicker]\n})\nexport class NgbDatepickerModule {\n}\n","import {Injectable} from '@angular/core';\nimport {PlacementArray} from '../util/positioning';\n\n/**\n * A configuration service for the [`NgbDropdown`](#/components/dropdown/api#NgbDropdown) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the dropdowns used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbDropdownConfig {\n autoClose: boolean | 'outside' | 'inside' = true;\n placement: PlacementArray = ['bottom-left', 'bottom-right', 'top-left', 'top-right'];\n container: null | 'body';\n}\n","import {\n ChangeDetectorRef,\n ContentChild,\n ContentChildren,\n Directive,\n ElementRef,\n EventEmitter,\n forwardRef,\n Inject,\n Input,\n NgZone,\n AfterContentInit,\n OnDestroy,\n Output,\n QueryList,\n Renderer2,\n SimpleChanges,\n Optional\n} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\nimport {Subject, Subscription} from 'rxjs';\nimport {take} from 'rxjs/operators';\n\nimport {Placement, PlacementArray, positionElements} from '../util/positioning';\nimport {ngbAutoClose} from '../util/autoclose';\nimport {Key} from '../util/key';\n\nimport {NgbDropdownConfig} from './dropdown-config';\n\n@Directive({selector: '.navbar'})\nexport class NgbNavbar {\n}\n\n/**\n * A directive you should put put on a dropdown item to enable keyboard navigation.\n * Arrow keys will move focus between items marked with this directive.\n *\n * @since 4.1.0\n */\n@Directive({selector: '[ngbDropdownItem]', host: {'class': 'dropdown-item', '[class.disabled]': 'disabled'}})\nexport class NgbDropdownItem {\n private _disabled = false;\n\n @Input()\n set disabled(value: boolean) {\n this._disabled = value === '' || value === true; // accept an empty attribute as true\n }\n\n get disabled(): boolean { return this._disabled; }\n\n constructor(public elementRef: ElementRef) {}\n}\n\n/**\n * A directive that wraps dropdown menu content and dropdown items.\n */\n@Directive({\n selector: '[ngbDropdownMenu]',\n host: {\n '[class.dropdown-menu]': 'true',\n '[class.show]': 'dropdown.isOpen()',\n '[attr.x-placement]': 'placement',\n '(keydown.ArrowUp)': 'dropdown.onKeyDown($event)',\n '(keydown.ArrowDown)': 'dropdown.onKeyDown($event)',\n '(keydown.Home)': 'dropdown.onKeyDown($event)',\n '(keydown.End)': 'dropdown.onKeyDown($event)',\n '(keydown.Enter)': 'dropdown.onKeyDown($event)',\n '(keydown.Space)': 'dropdown.onKeyDown($event)'\n }\n})\nexport class NgbDropdownMenu {\n placement: Placement = 'bottom';\n isOpen = false;\n\n @ContentChildren(NgbDropdownItem) menuItems: QueryList;\n\n constructor(@Inject(forwardRef(() => NgbDropdown)) public dropdown) {}\n}\n\n/**\n * A directive to mark an element to which dropdown menu will be anchored.\n *\n * This is a simple version of the `NgbDropdownToggle` directive.\n * It plays the same role, but doesn't listen to click events to toggle dropdown menu thus enabling support\n * for events other than click.\n *\n * @since 1.1.0\n */\n@Directive({\n selector: '[ngbDropdownAnchor]',\n host: {'class': 'dropdown-toggle', 'aria-haspopup': 'true', '[attr.aria-expanded]': 'dropdown.isOpen()'}\n})\nexport class NgbDropdownAnchor {\n anchorEl;\n\n constructor(@Inject(forwardRef(() => NgbDropdown)) public dropdown, private _elementRef: ElementRef) {\n this.anchorEl = _elementRef.nativeElement;\n }\n\n getNativeElement() { return this._elementRef.nativeElement; }\n}\n\n/**\n * A directive to mark an element that will toggle dropdown via the `click` event.\n *\n * You can also use `NgbDropdownAnchor` as an alternative.\n */\n@Directive({\n selector: '[ngbDropdownToggle]',\n host: {\n 'class': 'dropdown-toggle',\n 'aria-haspopup': 'true',\n '[attr.aria-expanded]': 'dropdown.isOpen()',\n '(click)': 'dropdown.toggle()',\n '(keydown.ArrowUp)': 'dropdown.onKeyDown($event)',\n '(keydown.ArrowDown)': 'dropdown.onKeyDown($event)',\n '(keydown.Home)': 'dropdown.onKeyDown($event)',\n '(keydown.End)': 'dropdown.onKeyDown($event)'\n },\n providers: [{provide: NgbDropdownAnchor, useExisting: forwardRef(() => NgbDropdownToggle)}]\n})\nexport class NgbDropdownToggle extends NgbDropdownAnchor {\n constructor(@Inject(forwardRef(() => NgbDropdown)) dropdown, elementRef: ElementRef) {\n super(dropdown, elementRef);\n }\n}\n\n/**\n * A directive that provides contextual overlays for displaying lists of links and more.\n */\n@Directive({selector: '[ngbDropdown]', exportAs: 'ngbDropdown', host: {'[class.show]': 'isOpen()'}})\nexport class NgbDropdown implements AfterContentInit, OnDestroy {\n private _closed$ = new Subject();\n private _zoneSubscription: Subscription;\n private _bodyContainer: HTMLElement;\n\n @ContentChild(NgbDropdownMenu, {static: false}) private _menu: NgbDropdownMenu;\n @ContentChild(NgbDropdownMenu, {read: ElementRef, static: false}) private _menuElement: ElementRef;\n @ContentChild(NgbDropdownAnchor, {static: false}) private _anchor: NgbDropdownAnchor;\n\n /**\n * Indicates whether the dropdown should be closed when clicking one of dropdown items or pressing ESC.\n *\n * * `true` - the dropdown will close on both outside and inside (menu) clicks.\n * * `false` - the dropdown can only be closed manually via `close()` or `toggle()` methods.\n * * `\"inside\"` - the dropdown will close on inside menu clicks, but not outside clicks.\n * * `\"outside\"` - the dropdown will close only on the outside clicks and not on menu clicks.\n */\n @Input() autoClose: boolean | 'outside' | 'inside';\n\n /**\n * Defines whether or not the dropdown menu is opened initially.\n */\n @Input('open') _open = false;\n\n /**\n * The preferred placement of the dropdown.\n *\n * Possible values are `\"top\"`, `\"top-left\"`, `\"top-right\"`, `\"bottom\"`, `\"bottom-left\"`,\n * `\"bottom-right\"`, `\"left\"`, `\"left-top\"`, `\"left-bottom\"`, `\"right\"`, `\"right-top\"`,\n * `\"right-bottom\"`\n *\n * Accepts an array of strings or a string with space separated possible values.\n *\n * The default order of preference is `\"bottom-left bottom-right top-left top-right\"`\n *\n * Please see the [positioning overview](#/positioning) for more details.\n */\n @Input() placement: PlacementArray;\n\n /**\n * A selector specifying the element the dropdown should be appended to.\n * Currently only supports \"body\".\n *\n * @since 4.1.0\n */\n @Input() container: null | 'body';\n\n /**\n * Enable or disable the dynamic positioning. The default value is dynamic unless the dropdown is used\n * inside a Bootstrap navbar. If you need custom placement for a dropdown in a navbar, set it to\n * dynamic explicitly. See the [positioning of dropdown](#/positioning#dropdown)\n * and the [navbar demo](/#/components/dropdown/examples#navbar) for more details.\n *\n * @since 4.2.0\n */\n @Input() display: 'dynamic' | 'static';\n\n /**\n * An event fired when the dropdown is opened or closed.\n *\n * The event payload is a `boolean`:\n * * `true` - the dropdown was opened\n * * `false` - the dropdown was closed\n */\n @Output() openChange = new EventEmitter();\n\n constructor(\n private _changeDetector: ChangeDetectorRef, config: NgbDropdownConfig, @Inject(DOCUMENT) private _document: any,\n private _ngZone: NgZone, private _elementRef: ElementRef, private _renderer: Renderer2,\n @Optional() ngbNavbar: NgbNavbar) {\n this.placement = config.placement;\n this.container = config.container;\n this.autoClose = config.autoClose;\n\n this.display = ngbNavbar ? 'static' : 'dynamic';\n\n this._zoneSubscription = _ngZone.onStable.subscribe(() => { this._positionMenu(); });\n }\n\n ngAfterContentInit() {\n this._ngZone.onStable.pipe(take(1)).subscribe(() => {\n this._applyPlacementClasses();\n if (this._open) {\n this._setCloseHandlers();\n }\n });\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.container && this._open) {\n this._applyContainer(this.container);\n }\n\n if (changes.placement && !changes.placement.isFirstChange) {\n this._applyPlacementClasses();\n }\n }\n\n /**\n * Checks if the dropdown menu is open.\n */\n isOpen(): boolean { return this._open; }\n\n /**\n * Opens the dropdown menu.\n */\n open(): void {\n if (!this._open) {\n this._open = true;\n this._applyContainer(this.container);\n this.openChange.emit(true);\n this._setCloseHandlers();\n }\n }\n\n private _setCloseHandlers() {\n const anchor = this._anchor;\n ngbAutoClose(\n this._ngZone, this._document, this.autoClose, () => this.close(), this._closed$,\n this._menu ? [this._menuElement.nativeElement] : [], anchor ? [anchor.getNativeElement()] : [],\n '.dropdown-item,.dropdown-divider');\n }\n\n /**\n * Closes the dropdown menu.\n */\n close(): void {\n if (this._open) {\n this._open = false;\n this._resetContainer();\n this._closed$.next();\n this.openChange.emit(false);\n this._changeDetector.markForCheck();\n }\n }\n\n /**\n * Toggles the dropdown menu.\n */\n toggle(): void {\n if (this.isOpen()) {\n this.close();\n } else {\n this.open();\n }\n }\n\n ngOnDestroy() {\n this._resetContainer();\n\n this._closed$.next();\n this._zoneSubscription.unsubscribe();\n }\n\n onKeyDown(event: KeyboardEvent) {\n // tslint:disable-next-line:deprecation\n const key = event.which;\n const itemElements = this._getMenuElements();\n\n let position = -1;\n let isEventFromItems = false;\n const isEventFromToggle = this._isEventFromToggle(event);\n\n if (!isEventFromToggle && itemElements.length) {\n itemElements.forEach((itemElement, index) => {\n if (itemElement.contains(event.target as HTMLElement)) {\n isEventFromItems = true;\n }\n if (itemElement === this._document.activeElement) {\n position = index;\n }\n });\n }\n\n // closing on Enter / Space\n if (key === Key.Space || key === Key.Enter) {\n if (isEventFromItems && (this.autoClose === true || this.autoClose === 'inside')) {\n this.close();\n }\n return;\n }\n\n // opening / navigating\n if (isEventFromToggle || isEventFromItems) {\n this.open();\n\n if (itemElements.length) {\n switch (key) {\n case Key.ArrowDown:\n position = Math.min(position + 1, itemElements.length - 1);\n break;\n case Key.ArrowUp:\n if (this._isDropup() && position === -1) {\n position = itemElements.length - 1;\n break;\n }\n position = Math.max(position - 1, 0);\n break;\n case Key.Home:\n position = 0;\n break;\n case Key.End:\n position = itemElements.length - 1;\n break;\n }\n itemElements[position].focus();\n }\n event.preventDefault();\n }\n }\n\n private _isDropup(): boolean { return this._elementRef.nativeElement.classList.contains('dropup'); }\n\n private _isEventFromToggle(event: KeyboardEvent) {\n return this._anchor.getNativeElement().contains(event.target as HTMLElement);\n }\n\n private _getMenuElements(): HTMLElement[] {\n const menu = this._menu;\n if (menu == null) {\n return [];\n }\n return menu.menuItems.filter(item => !item.disabled).map(item => item.elementRef.nativeElement);\n }\n\n private _positionMenu() {\n const menu = this._menu;\n if (this.isOpen() && menu) {\n this._applyPlacementClasses(\n this.display === 'dynamic' ?\n positionElements(\n this._anchor.anchorEl, this._bodyContainer || this._menuElement.nativeElement, this.placement,\n this.container === 'body') :\n this._getFirstPlacement(this.placement));\n }\n }\n\n private _getFirstPlacement(placement: PlacementArray): Placement {\n return Array.isArray(placement) ? placement[0] : placement.split(' ')[0] as Placement;\n }\n\n private _resetContainer() {\n const renderer = this._renderer;\n const menuElement = this._menuElement;\n if (menuElement) {\n const dropdownElement = this._elementRef.nativeElement;\n const dropdownMenuElement = menuElement.nativeElement;\n\n renderer.appendChild(dropdownElement, dropdownMenuElement);\n renderer.removeStyle(dropdownMenuElement, 'position');\n renderer.removeStyle(dropdownMenuElement, 'transform');\n }\n if (this._bodyContainer) {\n renderer.removeChild(this._document.body, this._bodyContainer);\n this._bodyContainer = null;\n }\n }\n\n private _applyContainer(container: null | 'body' = null) {\n this._resetContainer();\n if (container === 'body') {\n const renderer = this._renderer;\n const dropdownMenuElement = this._menuElement.nativeElement;\n const bodyContainer = this._bodyContainer = this._bodyContainer || renderer.createElement('div');\n\n // Override some styles to have the positionning working\n renderer.setStyle(bodyContainer, 'position', 'absolute');\n renderer.setStyle(dropdownMenuElement, 'position', 'static');\n renderer.setStyle(bodyContainer, 'z-index', '1050');\n\n renderer.appendChild(bodyContainer, dropdownMenuElement);\n renderer.appendChild(this._document.body, bodyContainer);\n }\n }\n\n private _applyPlacementClasses(placement?: Placement) {\n const menu = this._menu;\n if (menu) {\n if (!placement) {\n placement = this._getFirstPlacement(this.placement);\n }\n\n const renderer = this._renderer;\n const dropdownElement = this._elementRef.nativeElement;\n\n // remove the current placement classes\n renderer.removeClass(dropdownElement, 'dropup');\n renderer.removeClass(dropdownElement, 'dropdown');\n menu.placement = this.display === 'static' ? null : placement;\n\n /*\n * apply the new placement\n * in case of top use up-arrow or down-arrow otherwise\n */\n const dropdownClass = placement.search('^top') !== -1 ? 'dropup' : 'dropdown';\n renderer.addClass(dropdownElement, dropdownClass);\n\n const bodyContainer = this._bodyContainer;\n if (bodyContainer) {\n renderer.removeClass(bodyContainer, 'dropup');\n renderer.removeClass(bodyContainer, 'dropdown');\n renderer.addClass(bodyContainer, dropdownClass);\n }\n }\n }\n}\n","import {NgModule} from '@angular/core';\nimport {\n NgbDropdown,\n NgbDropdownAnchor,\n NgbDropdownToggle,\n NgbDropdownMenu,\n NgbDropdownItem,\n NgbNavbar\n} from './dropdown';\n\nexport {NgbDropdown, NgbDropdownAnchor, NgbDropdownToggle, NgbDropdownMenu, NgbDropdownItem} from './dropdown';\nexport {NgbDropdownConfig} from './dropdown-config';\n\nconst NGB_DROPDOWN_DIRECTIVES =\n [NgbDropdown, NgbDropdownAnchor, NgbDropdownToggle, NgbDropdownMenu, NgbDropdownItem, NgbNavbar];\n\n@NgModule({declarations: NGB_DROPDOWN_DIRECTIVES, exports: NGB_DROPDOWN_DIRECTIVES})\nexport class NgbDropdownModule {\n}\n","import {Injectable, Injector} from '@angular/core';\n\n/**\n * Options available when opening new modal windows with `NgbModal.open()` method.\n */\nexport interface NgbModalOptions {\n /**\n * `aria-labelledby` attribute value to set on the modal window.\n *\n * @since 2.2.0\n */\n ariaLabelledBy?: string;\n\n /**\n * If `true`, the backdrop element will be created for a given modal.\n *\n * Alternatively, specify `'static'` for a backdrop which doesn't close the modal on click.\n *\n * Default value is `true`.\n */\n backdrop?: boolean | 'static';\n\n /**\n * Callback right before the modal will be dismissed.\n *\n * If this function returns:\n * * `false`\n * * a promise resolved with `false`\n * * a promise that is rejected\n *\n * then the modal won't be dismissed.\n */\n beforeDismiss?: () => boolean | Promise;\n\n /**\n * If `true`, the modal will be centered vertically.\n *\n * Default value is `false`.\n *\n * @since 1.1.0\n */\n centered?: boolean;\n\n /**\n * A selector specifying the element all new modal windows should be appended to.\n *\n * If not specified, will be `body`.\n */\n container?: string;\n\n /**\n * The `Injector` to use for modal content.\n */\n injector?: Injector;\n\n /**\n * If `true`, the modal will be closed when `Escape` key is pressed\n *\n * Default value is `true`.\n */\n keyboard?: boolean;\n\n /**\n * Scrollable modal content (false by default).\n *\n * @since 5.0.0\n */\n scrollable?: boolean;\n\n /**\n * Size of a new modal window.\n */\n size?: 'sm' | 'lg' | 'xl';\n\n /**\n * A custom class to append to the modal window.\n */\n windowClass?: string;\n\n /**\n * A custom class to append to the modal backdrop.\n *\n * @since 1.1.0\n */\n backdropClass?: string;\n}\n\n/**\n * A configuration service for the [`NgbModal`](#/components/modal/api#NgbModal) service.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all modals used in the application.\n*\n* @since 3.1.0\n*/\n@Injectable({providedIn: 'root'})\nexport class NgbModalConfig implements NgbModalOptions {\n backdrop: boolean | 'static' = true;\n keyboard = true;\n}\n","import {\n Injector,\n TemplateRef,\n ViewRef,\n ViewContainerRef,\n Renderer2,\n ComponentRef,\n ComponentFactoryResolver,\n ApplicationRef\n} from '@angular/core';\n\nexport class ContentRef {\n constructor(public nodes: any[], public viewRef?: ViewRef, public componentRef?: ComponentRef) {}\n}\n\nexport class PopupService {\n private _windowRef: ComponentRef;\n private _contentRef: ContentRef;\n\n constructor(\n private _type: any, private _injector: Injector, private _viewContainerRef: ViewContainerRef,\n private _renderer: Renderer2, private _componentFactoryResolver: ComponentFactoryResolver,\n private _applicationRef: ApplicationRef) {}\n\n open(content?: string | TemplateRef, context?: any): ComponentRef {\n if (!this._windowRef) {\n this._contentRef = this._getContentRef(content, context);\n this._windowRef = this._viewContainerRef.createComponent(\n this._componentFactoryResolver.resolveComponentFactory(this._type), 0, this._injector,\n this._contentRef.nodes);\n }\n\n return this._windowRef;\n }\n\n close() {\n if (this._windowRef) {\n this._viewContainerRef.remove(this._viewContainerRef.indexOf(this._windowRef.hostView));\n this._windowRef = null;\n\n if (this._contentRef.viewRef) {\n this._applicationRef.detachView(this._contentRef.viewRef);\n this._contentRef.viewRef.destroy();\n this._contentRef = null;\n }\n }\n }\n\n private _getContentRef(content: string | TemplateRef, context?: any): ContentRef {\n if (!content) {\n return new ContentRef([]);\n } else if (content instanceof TemplateRef) {\n const viewRef = content.createEmbeddedView(context);\n this._applicationRef.attachView(viewRef);\n return new ContentRef([viewRef.rootNodes], viewRef);\n } else {\n return new ContentRef([[this._renderer.createText(`${content}`)]]);\n }\n }\n}\n","import {Injectable, Inject} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\n\n\nconst noop = () => {};\n\n\n\n/** Type for the callback used to revert the scrollbar compensation. */\nexport type CompensationReverter = () => void;\n\n\n\n/**\n * Utility to handle the scrollbar.\n *\n * It allows to compensate the lack of a vertical scrollbar by adding an\n * equivalent padding on the right of the body, and to remove this compensation.\n */\n@Injectable({providedIn: 'root'})\nexport class ScrollBar {\n constructor(@Inject(DOCUMENT) private _document: any) {}\n\n /**\n * Detects if a scrollbar is present and if yes, already compensates for its\n * removal by adding an equivalent padding on the right of the body.\n *\n * @return a callback used to revert the compensation (noop if there was none,\n * otherwise a function removing the padding)\n */\n compensate(): CompensationReverter { return !this._isPresent() ? noop : this._adjustBody(this._getWidth()); }\n\n /**\n * Adds a padding of the given width on the right of the body.\n *\n * @return a callback used to revert the padding to its previous value\n */\n private _adjustBody(width: number): CompensationReverter {\n const body = this._document.body;\n const userSetPadding = body.style.paddingRight;\n const paddingAmount = parseFloat(window.getComputedStyle(body)['padding-right']);\n body.style['padding-right'] = `${paddingAmount + width}px`;\n return () => body.style['padding-right'] = userSetPadding;\n }\n\n /**\n * Tells whether a scrollbar is currently present on the body.\n *\n * @return true if scrollbar is present, false otherwise\n */\n private _isPresent(): boolean {\n const rect = this._document.body.getBoundingClientRect();\n return rect.left + rect.right < window.innerWidth;\n }\n\n /**\n * Calculates and returns the width of a scrollbar.\n *\n * @return the width of a scrollbar on this page\n */\n private _getWidth(): number {\n const measurer = this._document.createElement('div');\n measurer.className = 'modal-scrollbar-measure';\n\n const body = this._document.body;\n body.appendChild(measurer);\n const width = measurer.getBoundingClientRect().width - measurer.clientWidth;\n body.removeChild(measurer);\n\n return width;\n }\n}\n","import {Component, Input} from '@angular/core';\n\n@Component({\n selector: 'ngb-modal-backdrop',\n template: '',\n host:\n {'[class]': '\"modal-backdrop fade show\" + (backdropClass ? \" \" + backdropClass : \"\")', 'style': 'z-index: 1050'}\n})\nexport class NgbModalBackdrop {\n @Input() backdropClass: string;\n}\n","import {ComponentRef} from '@angular/core';\n\nimport {NgbModalBackdrop} from './modal-backdrop';\nimport {NgbModalWindow} from './modal-window';\n\nimport {ContentRef} from '../util/popup';\n\n/**\n * A reference to the currently opened (active) modal.\n *\n * Instances of this class can be injected into your component passed as modal content.\n * So you can `.close()` or `.dismiss()` the modal window from your component.\n */\nexport class NgbActiveModal {\n /**\n * Closes the modal with an optional `result` value.\n *\n * The `NgbMobalRef.result` promise will be resolved with the provided value.\n */\n close(result?: any): void {}\n\n /**\n * Dismisses the modal with an optional `reason` value.\n *\n * The `NgbModalRef.result` promise will be rejected with the provided value.\n */\n dismiss(reason?: any): void {}\n}\n\n/**\n * A reference to the newly opened modal returned by the `NgbModal.open()` method.\n */\nexport class NgbModalRef {\n private _resolve: (result?: any) => void;\n private _reject: (reason?: any) => void;\n\n /**\n * The instance of a component used for the modal content.\n *\n * When a `TemplateRef` is used as the content, will return `undefined`.\n */\n get componentInstance(): any {\n if (this._contentRef.componentRef) {\n return this._contentRef.componentRef.instance;\n }\n }\n\n /**\n * The promise that is resolved when the modal is closed and rejected when the modal is dismissed.\n */\n result: Promise;\n\n constructor(\n private _windowCmptRef: ComponentRef, private _contentRef: ContentRef,\n private _backdropCmptRef?: ComponentRef, private _beforeDismiss?: Function) {\n _windowCmptRef.instance.dismissEvent.subscribe((reason: any) => { this.dismiss(reason); });\n\n this.result = new Promise((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n this.result.then(null, () => {});\n }\n\n /**\n * Closes the modal with an optional `result` value.\n *\n * The `NgbMobalRef.result` promise will be resolved with the provided value.\n */\n close(result?: any): void {\n if (this._windowCmptRef) {\n this._resolve(result);\n this._removeModalElements();\n }\n }\n\n private _dismiss(reason?: any) {\n this._reject(reason);\n this._removeModalElements();\n }\n\n /**\n * Dismisses the modal with an optional `reason` value.\n *\n * The `NgbModalRef.result` promise will be rejected with the provided value.\n */\n dismiss(reason?: any): void {\n if (this._windowCmptRef) {\n if (!this._beforeDismiss) {\n this._dismiss(reason);\n } else {\n const dismiss = this._beforeDismiss();\n if (dismiss && dismiss.then) {\n dismiss.then(\n result => {\n if (result !== false) {\n this._dismiss(reason);\n }\n },\n () => {});\n } else if (dismiss !== false) {\n this._dismiss(reason);\n }\n }\n }\n }\n\n private _removeModalElements() {\n const windowNativeEl = this._windowCmptRef.location.nativeElement;\n windowNativeEl.parentNode.removeChild(windowNativeEl);\n this._windowCmptRef.destroy();\n\n if (this._backdropCmptRef) {\n const backdropNativeEl = this._backdropCmptRef.location.nativeElement;\n backdropNativeEl.parentNode.removeChild(backdropNativeEl);\n this._backdropCmptRef.destroy();\n }\n\n if (this._contentRef && this._contentRef.viewRef) {\n this._contentRef.viewRef.destroy();\n }\n\n this._windowCmptRef = null;\n this._backdropCmptRef = null;\n this._contentRef = null;\n }\n}\n","export enum ModalDismissReasons {\n BACKDROP_CLICK,\n ESC\n}\n","import {DOCUMENT} from '@angular/common';\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport {getFocusableBoundaryElements} from '../util/focus-trap';\nimport {ModalDismissReasons} from './modal-dismiss-reasons';\n\n@Component({\n selector: 'ngb-modal-window',\n host: {\n '[class]': '\"modal fade show d-block\" + (windowClass ? \" \" + windowClass : \"\")',\n 'role': 'dialog',\n 'tabindex': '-1',\n '(keyup.esc)': 'escKey($event)',\n '(click)': 'backdropClick($event)',\n '[attr.aria-modal]': 'true',\n '[attr.aria-labelledby]': 'ariaLabelledBy',\n },\n template: `\n
\n
\n
\n `,\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./modal.scss']\n})\nexport class NgbModalWindow implements OnInit,\n AfterViewInit, OnDestroy {\n private _elWithFocus: Element; // element that is focused prior to modal opening\n\n @Input() ariaLabelledBy: string;\n @Input() backdrop: boolean | string = true;\n @Input() centered: string;\n @Input() keyboard = true;\n @Input() scrollable: string;\n @Input() size: string;\n @Input() windowClass: string;\n\n @Output('dismiss') dismissEvent = new EventEmitter();\n\n constructor(@Inject(DOCUMENT) private _document: any, private _elRef: ElementRef) {}\n\n backdropClick($event): void {\n if (this.backdrop === true && this._elRef.nativeElement === $event.target) {\n this.dismiss(ModalDismissReasons.BACKDROP_CLICK);\n }\n }\n\n escKey($event): void {\n if (this.keyboard && !$event.defaultPrevented) {\n this.dismiss(ModalDismissReasons.ESC);\n }\n }\n\n dismiss(reason): void { this.dismissEvent.emit(reason); }\n\n ngOnInit() { this._elWithFocus = this._document.activeElement; }\n\n ngAfterViewInit() {\n if (!this._elRef.nativeElement.contains(document.activeElement)) {\n const autoFocusable = this._elRef.nativeElement.querySelector(`[ngbAutofocus]`) as HTMLElement;\n const firstFocusable = getFocusableBoundaryElements(this._elRef.nativeElement)[0];\n\n const elementToFocus = autoFocusable || firstFocusable || this._elRef.nativeElement;\n elementToFocus.focus();\n }\n }\n\n ngOnDestroy() {\n const body = this._document.body;\n const elWithFocus = this._elWithFocus;\n\n let elementToFocus;\n if (elWithFocus && elWithFocus['focus'] && body.contains(elWithFocus)) {\n elementToFocus = elWithFocus;\n } else {\n elementToFocus = body;\n }\n elementToFocus.focus();\n this._elWithFocus = null;\n }\n}\n","import {DOCUMENT} from '@angular/common';\nimport {\n ApplicationRef,\n ComponentFactoryResolver,\n ComponentRef,\n Inject,\n Injectable,\n Injector,\n RendererFactory2,\n TemplateRef,\n} from '@angular/core';\nimport {Subject} from 'rxjs';\n\nimport {ngbFocusTrap} from '../util/focus-trap';\nimport {ContentRef} from '../util/popup';\nimport {ScrollBar} from '../util/scrollbar';\nimport {isDefined, isString} from '../util/util';\nimport {NgbModalBackdrop} from './modal-backdrop';\nimport {NgbModalOptions} from './modal-config';\nimport {NgbActiveModal, NgbModalRef} from './modal-ref';\nimport {NgbModalWindow} from './modal-window';\n\n@Injectable({providedIn: 'root'})\nexport class NgbModalStack {\n private _activeWindowCmptHasChanged = new Subject();\n private _ariaHiddenValues: Map = new Map();\n private _backdropAttributes = ['backdropClass'];\n private _modalRefs: NgbModalRef[] = [];\n private _windowAttributes =\n ['ariaLabelledBy', 'backdrop', 'centered', 'keyboard', 'scrollable', 'size', 'windowClass'];\n private _windowCmpts: ComponentRef[] = [];\n\n constructor(\n private _applicationRef: ApplicationRef, private _injector: Injector, @Inject(DOCUMENT) private _document: any,\n private _scrollBar: ScrollBar, private _rendererFactory: RendererFactory2) {\n // Trap focus on active WindowCmpt\n this._activeWindowCmptHasChanged.subscribe(() => {\n if (this._windowCmpts.length) {\n const activeWindowCmpt = this._windowCmpts[this._windowCmpts.length - 1];\n ngbFocusTrap(activeWindowCmpt.location.nativeElement, this._activeWindowCmptHasChanged);\n this._revertAriaHidden();\n this._setAriaHidden(activeWindowCmpt.location.nativeElement);\n }\n });\n }\n\n open(moduleCFR: ComponentFactoryResolver, contentInjector: Injector, content: any, options): NgbModalRef {\n const containerEl =\n isDefined(options.container) ? this._document.querySelector(options.container) : this._document.body;\n const renderer = this._rendererFactory.createRenderer(null, null);\n\n const revertPaddingForScrollBar = this._scrollBar.compensate();\n const removeBodyClass = () => {\n if (!this._modalRefs.length) {\n renderer.removeClass(this._document.body, 'modal-open');\n this._revertAriaHidden();\n }\n };\n\n if (!containerEl) {\n throw new Error(`The specified modal container \"${options.container || 'body'}\" was not found in the DOM.`);\n }\n\n const activeModal = new NgbActiveModal();\n const contentRef =\n this._getContentRef(moduleCFR, options.injector || contentInjector, content, activeModal, options);\n\n let backdropCmptRef: ComponentRef =\n options.backdrop !== false ? this._attachBackdrop(moduleCFR, containerEl) : null;\n let windowCmptRef: ComponentRef = this._attachWindowComponent(moduleCFR, containerEl, contentRef);\n let ngbModalRef: NgbModalRef = new NgbModalRef(windowCmptRef, contentRef, backdropCmptRef, options.beforeDismiss);\n\n this._registerModalRef(ngbModalRef);\n this._registerWindowCmpt(windowCmptRef);\n ngbModalRef.result.then(revertPaddingForScrollBar, revertPaddingForScrollBar);\n ngbModalRef.result.then(removeBodyClass, removeBodyClass);\n activeModal.close = (result: any) => { ngbModalRef.close(result); };\n activeModal.dismiss = (reason: any) => { ngbModalRef.dismiss(reason); };\n\n this._applyWindowOptions(windowCmptRef.instance, options);\n if (this._modalRefs.length === 1) {\n renderer.addClass(this._document.body, 'modal-open');\n }\n\n if (backdropCmptRef && backdropCmptRef.instance) {\n this._applyBackdropOptions(backdropCmptRef.instance, options);\n }\n return ngbModalRef;\n }\n\n dismissAll(reason?: any) { this._modalRefs.forEach(ngbModalRef => ngbModalRef.dismiss(reason)); }\n\n hasOpenModals(): boolean { return this._modalRefs.length > 0; }\n\n private _attachBackdrop(moduleCFR: ComponentFactoryResolver, containerEl: any): ComponentRef {\n let backdropFactory = moduleCFR.resolveComponentFactory(NgbModalBackdrop);\n let backdropCmptRef = backdropFactory.create(this._injector);\n this._applicationRef.attachView(backdropCmptRef.hostView);\n containerEl.appendChild(backdropCmptRef.location.nativeElement);\n return backdropCmptRef;\n }\n\n private _attachWindowComponent(moduleCFR: ComponentFactoryResolver, containerEl: any, contentRef: any):\n ComponentRef {\n let windowFactory = moduleCFR.resolveComponentFactory(NgbModalWindow);\n let windowCmptRef = windowFactory.create(this._injector, contentRef.nodes);\n this._applicationRef.attachView(windowCmptRef.hostView);\n containerEl.appendChild(windowCmptRef.location.nativeElement);\n return windowCmptRef;\n }\n\n private _applyWindowOptions(windowInstance: NgbModalWindow, options: Object): void {\n this._windowAttributes.forEach((optionName: string) => {\n if (isDefined(options[optionName])) {\n windowInstance[optionName] = options[optionName];\n }\n });\n }\n\n private _applyBackdropOptions(backdropInstance: NgbModalBackdrop, options: Object): void {\n this._backdropAttributes.forEach((optionName: string) => {\n if (isDefined(options[optionName])) {\n backdropInstance[optionName] = options[optionName];\n }\n });\n }\n\n private _getContentRef(\n moduleCFR: ComponentFactoryResolver, contentInjector: Injector, content: any, activeModal: NgbActiveModal,\n options: NgbModalOptions): ContentRef {\n if (!content) {\n return new ContentRef([]);\n } else if (content instanceof TemplateRef) {\n return this._createFromTemplateRef(content, activeModal);\n } else if (isString(content)) {\n return this._createFromString(content);\n } else {\n return this._createFromComponent(moduleCFR, contentInjector, content, activeModal, options);\n }\n }\n\n private _createFromTemplateRef(content: TemplateRef, activeModal: NgbActiveModal): ContentRef {\n const context = {\n $implicit: activeModal,\n close(result) { activeModal.close(result); },\n dismiss(reason) { activeModal.dismiss(reason); }\n };\n const viewRef = content.createEmbeddedView(context);\n this._applicationRef.attachView(viewRef);\n return new ContentRef([viewRef.rootNodes], viewRef);\n }\n\n private _createFromString(content: string): ContentRef {\n const component = this._document.createTextNode(`${content}`);\n return new ContentRef([[component]]);\n }\n\n private _createFromComponent(\n moduleCFR: ComponentFactoryResolver, contentInjector: Injector, content: any, context: NgbActiveModal,\n options: NgbModalOptions): ContentRef {\n const contentCmptFactory = moduleCFR.resolveComponentFactory(content);\n const modalContentInjector =\n Injector.create({providers: [{provide: NgbActiveModal, useValue: context}], parent: contentInjector});\n const componentRef = contentCmptFactory.create(modalContentInjector);\n const componentNativeEl = componentRef.location.nativeElement;\n if (options.scrollable) {\n (componentNativeEl as HTMLElement).classList.add('component-host-scrollable');\n }\n this._applicationRef.attachView(componentRef.hostView);\n // FIXME: we should here get rid of the component nativeElement\n // and use `[Array.from(componentNativeEl.childNodes)]` instead and remove the above CSS class.\n return new ContentRef([[componentNativeEl]], componentRef.hostView, componentRef);\n }\n\n private _setAriaHidden(element: Element) {\n const parent = element.parentElement;\n if (parent && element !== this._document.body) {\n Array.from(parent.children).forEach(sibling => {\n if (sibling !== element && sibling.nodeName !== 'SCRIPT') {\n this._ariaHiddenValues.set(sibling, sibling.getAttribute('aria-hidden'));\n sibling.setAttribute('aria-hidden', 'true');\n }\n });\n\n this._setAriaHidden(parent);\n }\n }\n\n private _revertAriaHidden() {\n this._ariaHiddenValues.forEach((value, element) => {\n if (value) {\n element.setAttribute('aria-hidden', value);\n } else {\n element.removeAttribute('aria-hidden');\n }\n });\n this._ariaHiddenValues.clear();\n }\n\n private _registerModalRef(ngbModalRef: NgbModalRef) {\n const unregisterModalRef = () => {\n const index = this._modalRefs.indexOf(ngbModalRef);\n if (index > -1) {\n this._modalRefs.splice(index, 1);\n }\n };\n this._modalRefs.push(ngbModalRef);\n ngbModalRef.result.then(unregisterModalRef, unregisterModalRef);\n }\n\n private _registerWindowCmpt(ngbWindowCmpt: ComponentRef) {\n this._windowCmpts.push(ngbWindowCmpt);\n this._activeWindowCmptHasChanged.next();\n\n ngbWindowCmpt.onDestroy(() => {\n const index = this._windowCmpts.indexOf(ngbWindowCmpt);\n if (index > -1) {\n this._windowCmpts.splice(index, 1);\n this._activeWindowCmptHasChanged.next();\n }\n });\n }\n}\n","import {Injectable, Injector, ComponentFactoryResolver} from '@angular/core';\n\nimport {NgbModalOptions, NgbModalConfig} from './modal-config';\nimport {NgbModalRef} from './modal-ref';\nimport {NgbModalStack} from './modal-stack';\n\n/**\n * A service for opening modal windows.\n *\n * Creating a modal is straightforward: create a component or a template and pass it as an argument to\n * the `.open()` method.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbModal {\n constructor(\n private _moduleCFR: ComponentFactoryResolver, private _injector: Injector, private _modalStack: NgbModalStack,\n private _config: NgbModalConfig) {}\n\n /**\n * Opens a new modal window with the specified content and supplied options.\n *\n * Content can be provided as a `TemplateRef` or a component type. If you pass a component type as content,\n * then instances of those components can be injected with an instance of the `NgbActiveModal` class. You can then\n * use `NgbActiveModal` methods to close / dismiss modals from \"inside\" of your component.\n *\n * Also see the [`NgbModalOptions`](#/components/modal/api#NgbModalOptions) for the list of supported options.\n */\n open(content: any, options: NgbModalOptions = {}): NgbModalRef {\n const combinedOptions = Object.assign({}, this._config, options);\n return this._modalStack.open(this._moduleCFR, this._injector, content, combinedOptions);\n }\n\n /**\n * Dismisses all currently displayed modal windows with the supplied reason.\n *\n * @since 3.1.0\n */\n dismissAll(reason?: any) { this._modalStack.dismissAll(reason); }\n\n /**\n * Indicates if there are currently any open modal windows in the application.\n *\n * @since 3.3.0\n */\n hasOpenModals(): boolean { return this._modalStack.hasOpenModals(); }\n}\n","import {NgModule} from '@angular/core';\n\nimport {NgbModal} from './modal';\nimport {NgbModalBackdrop} from './modal-backdrop';\nimport {NgbModalWindow} from './modal-window';\n\nexport {NgbModal} from './modal';\nexport {NgbModalConfig, NgbModalOptions} from './modal-config';\nexport {NgbModalRef, NgbActiveModal} from './modal-ref';\nexport {ModalDismissReasons} from './modal-dismiss-reasons';\n\n@NgModule({\n declarations: [NgbModalBackdrop, NgbModalWindow],\n entryComponents: [NgbModalBackdrop, NgbModalWindow],\n providers: [NgbModal]\n})\nexport class NgbModalModule {\n}\n","import {Injectable} from '@angular/core';\n\n/**\n * A configuration service for the [`NgbPagination`](#/components/pagination/api#NgbPagination) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the paginations used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbPaginationConfig {\n disabled = false;\n boundaryLinks = false;\n directionLinks = true;\n ellipses = true;\n maxSize = 0;\n pageSize = 10;\n rotate = false;\n size: 'sm' | 'lg';\n}\n","import {\n Component,\n ContentChild,\n Directive,\n EventEmitter,\n Input,\n Output,\n OnChanges,\n ChangeDetectionStrategy,\n SimpleChanges,\n TemplateRef\n} from '@angular/core';\nimport {getValueInRange, isNumber} from '../util/util';\nimport {NgbPaginationConfig} from './pagination-config';\n\n/**\n * A context for the\n * * `NgbPaginationFirst`\n * * `NgbPaginationPrevious`\n * * `NgbPaginationNext`\n * * `NgbPaginationLast`\n * * `NgbPaginationEllipsis`\n *\n * link templates in case you want to override one.\n *\n * @since 4.1.0\n */\nexport interface NgbPaginationLinkContext {\n /**\n * The currently selected page number\n */\n currentPage: number;\n\n /**\n * If `true`, the current link is disabled\n */\n disabled: boolean;\n}\n\n/**\n * A context for the `NgbPaginationNumber` link template in case you want to override one.\n *\n * Extends `NgbPaginationLinkContext`.\n *\n * @since 4.1.0\n */\nexport interface NgbPaginationNumberContext extends NgbPaginationLinkContext {\n /**\n * The page number, displayed by the current page link.\n */\n $implicit: number;\n}\n\n/**\n * A directive to match the 'ellipsis' link template\n *\n * @since 4.1.0\n */\n@Directive({selector: 'ng-template[ngbPaginationEllipsis]'})\nexport class NgbPaginationEllipsis {\n constructor(public templateRef: TemplateRef) {}\n}\n\n/**\n * A directive to match the 'first' link template\n *\n * @since 4.1.0\n */\n@Directive({selector: 'ng-template[ngbPaginationFirst]'})\nexport class NgbPaginationFirst {\n constructor(public templateRef: TemplateRef) {}\n}\n\n/**\n * A directive to match the 'last' link template\n *\n * @since 4.1.0\n */\n@Directive({selector: 'ng-template[ngbPaginationLast]'})\nexport class NgbPaginationLast {\n constructor(public templateRef: TemplateRef) {}\n}\n\n/**\n * A directive to match the 'next' link template\n *\n * @since 4.1.0\n */\n@Directive({selector: 'ng-template[ngbPaginationNext]'})\nexport class NgbPaginationNext {\n constructor(public templateRef: TemplateRef) {}\n}\n\n/**\n * A directive to match the page 'number' link template\n *\n * @since 4.1.0\n */\n@Directive({selector: 'ng-template[ngbPaginationNumber]'})\nexport class NgbPaginationNumber {\n constructor(public templateRef: TemplateRef) {}\n}\n\n/**\n * A directive to match the 'previous' link template\n *\n * @since 4.1.0\n */\n@Directive({selector: 'ng-template[ngbPaginationPrevious]'})\nexport class NgbPaginationPrevious {\n constructor(public templateRef: TemplateRef) {}\n}\n\n/**\n * A component that displays page numbers and allows to customize them in several ways.\n */\n@Component({\n selector: 'ngb-pagination',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {'role': 'navigation'},\n template: `\n ««\n «\n »\n »»\n ...\n \n {{ page }}\n (current)\n \n \n `\n})\nexport class NgbPagination implements OnChanges {\n pageCount = 0;\n pages: number[] = [];\n\n @ContentChild(NgbPaginationEllipsis, {static: false}) tplEllipsis: NgbPaginationEllipsis;\n @ContentChild(NgbPaginationFirst, {static: false}) tplFirst: NgbPaginationFirst;\n @ContentChild(NgbPaginationLast, {static: false}) tplLast: NgbPaginationLast;\n @ContentChild(NgbPaginationNext, {static: false}) tplNext: NgbPaginationNext;\n @ContentChild(NgbPaginationNumber, {static: false}) tplNumber: NgbPaginationNumber;\n @ContentChild(NgbPaginationPrevious, {static: false}) tplPrevious: NgbPaginationPrevious;\n\n /**\n * If `true`, pagination links will be disabled.\n */\n @Input() disabled: boolean;\n\n /**\n * If `true`, the \"First\" and \"Last\" page links are shown.\n */\n @Input() boundaryLinks: boolean;\n\n /**\n * If `true`, the \"Next\" and \"Previous\" page links are shown.\n */\n @Input() directionLinks: boolean;\n\n /**\n * If `true`, the ellipsis symbols and first/last page numbers will be shown when `maxSize` > number of pages.\n */\n @Input() ellipses: boolean;\n\n /**\n * Whether to rotate pages when `maxSize` > number of pages.\n *\n * The current page always stays in the middle if `true`.\n */\n @Input() rotate: boolean;\n\n /**\n * The number of items in your paginated collection.\n *\n * Note, that this is not the number of pages. Page numbers are calculated dynamically based on\n * `collectionSize` and `pageSize`. Ex. if you have 100 items in your collection and displaying 20 items per page,\n * you'll end up with 5 pages.\n */\n @Input() collectionSize: number;\n\n /**\n * The maximum number of pages to display.\n */\n @Input() maxSize: number;\n\n /**\n * The current page.\n *\n * Page numbers start with `1`.\n */\n @Input() page = 1;\n\n /**\n * The number of items per page.\n */\n @Input() pageSize: number;\n\n /**\n * An event fired when the page is changed. Will fire only if collection size is set and all values are valid.\n *\n * Event payload is the number of the newly selected page.\n *\n * Page numbers start with `1`.\n */\n @Output() pageChange = new EventEmitter(true);\n\n /**\n * The pagination display size.\n *\n * Bootstrap currently supports small and large sizes.\n */\n @Input() size: 'sm' | 'lg';\n\n constructor(config: NgbPaginationConfig) {\n this.disabled = config.disabled;\n this.boundaryLinks = config.boundaryLinks;\n this.directionLinks = config.directionLinks;\n this.ellipses = config.ellipses;\n this.maxSize = config.maxSize;\n this.pageSize = config.pageSize;\n this.rotate = config.rotate;\n this.size = config.size;\n }\n\n hasPrevious(): boolean { return this.page > 1; }\n\n hasNext(): boolean { return this.page < this.pageCount; }\n\n nextDisabled(): boolean { return !this.hasNext() || this.disabled; }\n\n previousDisabled(): boolean { return !this.hasPrevious() || this.disabled; }\n\n selectPage(pageNumber: number): void { this._updatePages(pageNumber); }\n\n ngOnChanges(changes: SimpleChanges): void { this._updatePages(this.page); }\n\n isEllipsis(pageNumber): boolean { return pageNumber === -1; }\n\n /**\n * Appends ellipses and first/last page number to the displayed pages\n */\n private _applyEllipses(start: number, end: number) {\n if (this.ellipses) {\n if (start > 0) {\n if (start > 1) {\n this.pages.unshift(-1);\n }\n this.pages.unshift(1);\n }\n if (end < this.pageCount) {\n if (end < (this.pageCount - 1)) {\n this.pages.push(-1);\n }\n this.pages.push(this.pageCount);\n }\n }\n }\n\n /**\n * Rotates page numbers based on maxSize items visible.\n * Currently selected page stays in the middle:\n *\n * Ex. for selected page = 6:\n * [5,*6*,7] for maxSize = 3\n * [4,5,*6*,7] for maxSize = 4\n */\n private _applyRotation(): [number, number] {\n let start = 0;\n let end = this.pageCount;\n let leftOffset = Math.floor(this.maxSize / 2);\n let rightOffset = this.maxSize % 2 === 0 ? leftOffset - 1 : leftOffset;\n\n if (this.page <= leftOffset) {\n // very beginning, no rotation -> [0..maxSize]\n end = this.maxSize;\n } else if (this.pageCount - this.page < leftOffset) {\n // very end, no rotation -> [len-maxSize..len]\n start = this.pageCount - this.maxSize;\n } else {\n // rotate\n start = this.page - leftOffset - 1;\n end = this.page + rightOffset;\n }\n\n return [start, end];\n }\n\n /**\n * Paginates page numbers based on maxSize items per page.\n */\n private _applyPagination(): [number, number] {\n let page = Math.ceil(this.page / this.maxSize) - 1;\n let start = page * this.maxSize;\n let end = start + this.maxSize;\n\n return [start, end];\n }\n\n private _setPageInRange(newPageNo) {\n const prevPageNo = this.page;\n this.page = getValueInRange(newPageNo, this.pageCount, 1);\n\n if (this.page !== prevPageNo && isNumber(this.collectionSize)) {\n this.pageChange.emit(this.page);\n }\n }\n\n private _updatePages(newPage: number) {\n this.pageCount = Math.ceil(this.collectionSize / this.pageSize);\n\n if (!isNumber(this.pageCount)) {\n this.pageCount = 0;\n }\n\n // fill-in model needed to render pages\n this.pages.length = 0;\n for (let i = 1; i <= this.pageCount; i++) {\n this.pages.push(i);\n }\n\n // set page within 1..max range\n this._setPageInRange(newPage);\n\n // apply maxSize if necessary\n if (this.maxSize > 0 && this.pageCount > this.maxSize) {\n let start = 0;\n let end = this.pageCount;\n\n // either paginating or rotating page numbers\n if (this.rotate) {\n [start, end] = this._applyRotation();\n } else {\n [start, end] = this._applyPagination();\n }\n\n this.pages = this.pages.slice(start, end);\n\n // adding ellipses\n this._applyEllipses(start, end);\n }\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\nimport {\n NgbPagination,\n NgbPaginationEllipsis,\n NgbPaginationFirst,\n NgbPaginationLast,\n NgbPaginationNext,\n NgbPaginationNumber,\n NgbPaginationPrevious\n} from './pagination';\n\nexport {\n NgbPagination,\n NgbPaginationEllipsis,\n NgbPaginationFirst,\n NgbPaginationLast,\n NgbPaginationNext,\n NgbPaginationNumber,\n NgbPaginationPrevious\n} from './pagination';\nexport {NgbPaginationConfig} from './pagination-config';\n\nconst DIRECTIVES = [\n NgbPagination, NgbPaginationEllipsis, NgbPaginationFirst, NgbPaginationLast, NgbPaginationNext, NgbPaginationNumber,\n NgbPaginationPrevious\n];\n\n@NgModule({declarations: DIRECTIVES, exports: DIRECTIVES, imports: [CommonModule]})\nexport class NgbPaginationModule {\n}\n","import {Observable, merge} from 'rxjs';\nimport {share, filter, delay, map} from 'rxjs/operators';\n\nexport class Trigger {\n constructor(public open: string, public close?: string) {\n if (!close) {\n this.close = open;\n }\n }\n\n isManual() { return this.open === 'manual' || this.close === 'manual'; }\n}\n\nconst DEFAULT_ALIASES = {\n 'hover': ['mouseenter', 'mouseleave'],\n 'focus': ['focusin', 'focusout'],\n};\n\nexport function parseTriggers(triggers: string, aliases = DEFAULT_ALIASES): Trigger[] {\n const trimmedTriggers = (triggers || '').trim();\n\n if (trimmedTriggers.length === 0) {\n return [];\n }\n\n const parsedTriggers = trimmedTriggers.split(/\\s+/).map(trigger => trigger.split(':')).map((triggerPair) => {\n let alias = aliases[triggerPair[0]] || triggerPair;\n return new Trigger(alias[0], alias[1]);\n });\n\n const manualTriggers = parsedTriggers.filter(triggerPair => triggerPair.isManual());\n\n if (manualTriggers.length > 1) {\n throw 'Triggers parse error: only one manual trigger is allowed';\n }\n\n if (manualTriggers.length === 1 && parsedTriggers.length > 1) {\n throw 'Triggers parse error: manual trigger can\\'t be mixed with other triggers';\n }\n\n return parsedTriggers;\n}\n\nexport function observeTriggers(renderer: any, nativeElement: any, triggers: Trigger[], isOpenedFn: () => boolean) {\n return new Observable(subscriber => {\n const listeners = [];\n const openFn = () => subscriber.next(true);\n const closeFn = () => subscriber.next(false);\n const toggleFn = () => subscriber.next(!isOpenedFn());\n\n triggers.forEach((trigger: Trigger) => {\n if (trigger.open === trigger.close) {\n listeners.push(renderer.listen(nativeElement, trigger.open, toggleFn));\n } else {\n listeners.push(\n renderer.listen(nativeElement, trigger.open, openFn),\n renderer.listen(nativeElement, trigger.close, closeFn));\n }\n });\n\n return () => { listeners.forEach(unsubscribeFn => unsubscribeFn()); };\n });\n}\n\nconst delayOrNoop = (time: number) => time > 0 ? delay(time) : (a: Observable) => a;\n\nexport function triggerDelay(openDelay: number, closeDelay: number, isOpenedFn: () => boolean) {\n return (input$: Observable) => {\n let pending = null;\n const filteredInput$ = input$.pipe(\n map(open => ({open})), filter(event => {\n const currentlyOpen = isOpenedFn();\n if (currentlyOpen !== event.open && (!pending || pending.open === currentlyOpen)) {\n pending = event;\n return true;\n }\n if (pending && pending.open !== event.open) {\n pending = null;\n }\n return false;\n }),\n share());\n const delayedOpen$ = filteredInput$.pipe(filter(event => event.open), delayOrNoop(openDelay));\n const delayedClose$ = filteredInput$.pipe(filter(event => !event.open), delayOrNoop(closeDelay));\n return merge(delayedOpen$, delayedClose$)\n .pipe(\n filter(event => {\n if (event === pending) {\n pending = null;\n return event.open !== isOpenedFn();\n }\n return false;\n }),\n map(event => event.open));\n };\n}\n\nexport function listenToTriggers(\n renderer: any, nativeElement: any, triggers: string, isOpenedFn: () => boolean, openFn, closeFn, openDelay = 0,\n closeDelay = 0) {\n const parsedTriggers = parseTriggers(triggers);\n\n if (parsedTriggers.length === 1 && parsedTriggers[0].isManual()) {\n return () => {};\n }\n\n const subscription = observeTriggers(renderer, nativeElement, parsedTriggers, isOpenedFn)\n .pipe(triggerDelay(openDelay, closeDelay, isOpenedFn))\n .subscribe(open => (open ? openFn() : closeFn()));\n\n return () => subscription.unsubscribe();\n}\n","import {Injectable} from '@angular/core';\nimport {PlacementArray} from '../util/positioning';\n\n/**\n * A configuration service for the [`NgbPopover`](#/components/popover/api#NgbPopover) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the popovers used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbPopoverConfig {\n autoClose: boolean | 'inside' | 'outside' = true;\n placement: PlacementArray = 'auto';\n triggers = 'click';\n container: string;\n disablePopover = false;\n popoverClass: string;\n openDelay = 0;\n closeDelay = 0;\n}\n","import {\n Component,\n Directive,\n Input,\n Output,\n EventEmitter,\n ChangeDetectionStrategy,\n OnInit,\n OnDestroy,\n OnChanges,\n Inject,\n Injector,\n Renderer2,\n ComponentRef,\n ElementRef,\n TemplateRef,\n ViewContainerRef,\n ComponentFactoryResolver,\n NgZone,\n SimpleChanges,\n ViewEncapsulation,\n ChangeDetectorRef,\n ApplicationRef\n} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\n\nimport {listenToTriggers} from '../util/triggers';\nimport {ngbAutoClose} from '../util/autoclose';\nimport {positionElements, PlacementArray} from '../util/positioning';\nimport {PopupService} from '../util/popup';\n\nimport {NgbPopoverConfig} from './popover-config';\n\nlet nextId = 0;\n\n@Component({\n selector: 'ngb-popover-window',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {'[class]': '\"popover\" + (popoverClass ? \" \" + popoverClass : \"\")', 'role': 'tooltip', '[id]': 'id'},\n template: `\n
\n

\n {{title}}\n \n

\n
`,\n styleUrls: ['./popover.scss']\n})\nexport class NgbPopoverWindow {\n @Input() title: undefined | string | TemplateRef;\n @Input() id: string;\n @Input() popoverClass: string;\n @Input() context: any;\n\n isTitleTemplate() { return this.title instanceof TemplateRef; }\n}\n\n/**\n * A lightweight and extensible directive for fancy popover creation.\n */\n@Directive({selector: '[ngbPopover]', exportAs: 'ngbPopover'})\nexport class NgbPopover implements OnInit, OnDestroy, OnChanges {\n /**\n * Indicates whether the popover should be closed on `Escape` key and inside/outside clicks:\n *\n * * `true` - closes on both outside and inside clicks as well as `Escape` presses\n * * `false` - disables the autoClose feature (NB: triggers still apply)\n * * `\"inside\"` - closes on inside clicks as well as Escape presses\n * * `\"outside\"` - closes on outside clicks (sometimes also achievable through triggers)\n * as well as `Escape` presses\n *\n * @since 3.0.0\n */\n @Input() autoClose: boolean | 'inside' | 'outside';\n\n /**\n * The string content or a `TemplateRef` for the content to be displayed in the popover.\n *\n * If the title and the content are empty, the popover won't open.\n */\n @Input() ngbPopover: string | TemplateRef;\n\n /**\n * The title of the popover.\n *\n * If the title and the content are empty, the popover won't open.\n */\n @Input() popoverTitle: string | TemplateRef;\n\n /**\n * The preferred placement of the popover.\n *\n * Possible values are `\"top\"`, `\"top-left\"`, `\"top-right\"`, `\"bottom\"`, `\"bottom-left\"`,\n * `\"bottom-right\"`, `\"left\"`, `\"left-top\"`, `\"left-bottom\"`, `\"right\"`, `\"right-top\"`,\n * `\"right-bottom\"`\n *\n * Accepts an array of strings or a string with space separated possible values.\n *\n * The default order of preference is `\"auto\"` (same as the sequence above).\n *\n * Please see the [positioning overview](#/positioning) for more details.\n */\n @Input() placement: PlacementArray;\n\n /**\n * Specifies events that should trigger the tooltip.\n *\n * Supports a space separated list of event names.\n * For more details see the [triggers demo](#/components/popover/examples#triggers).\n */\n @Input() triggers: string;\n\n /**\n * A selector specifying the element the popover should be appended to.\n *\n * Currently only supports `body`.\n */\n @Input() container: string;\n\n /**\n * If `true`, popover is disabled and won't be displayed.\n *\n * @since 1.1.0\n */\n @Input() disablePopover: boolean;\n\n /**\n * An optional class applied to the popover window element.\n *\n * @since 2.2.0\n */\n @Input() popoverClass: string;\n\n /**\n * The opening delay in ms. Works only for \"non-manual\" opening triggers defined by the `triggers` input.\n *\n * @since 4.1.0\n */\n @Input() openDelay: number;\n\n /**\n * The closing delay in ms. Works only for \"non-manual\" opening triggers defined by the `triggers` input.\n *\n * @since 4.1.0\n */\n @Input() closeDelay: number;\n\n /**\n * An event emitted when the popover is shown. Contains no payload.\n */\n @Output() shown = new EventEmitter();\n\n /**\n * An event emitted when the popover is hidden. Contains no payload.\n */\n @Output() hidden = new EventEmitter();\n\n private _ngbPopoverWindowId = `ngb-popover-${nextId++}`;\n private _popupService: PopupService;\n private _windowRef: ComponentRef;\n private _unregisterListenersFn;\n private _zoneSubscription: any;\n private _isDisabled(): boolean {\n if (this.disablePopover) {\n return true;\n }\n if (!this.ngbPopover && !this.popoverTitle) {\n return true;\n }\n return false;\n }\n\n constructor(\n private _elementRef: ElementRef, private _renderer: Renderer2, injector: Injector,\n componentFactoryResolver: ComponentFactoryResolver, viewContainerRef: ViewContainerRef, config: NgbPopoverConfig,\n private _ngZone: NgZone, @Inject(DOCUMENT) private _document: any, private _changeDetector: ChangeDetectorRef,\n private _applicationRef: ApplicationRef) {\n this.autoClose = config.autoClose;\n this.placement = config.placement;\n this.triggers = config.triggers;\n this.container = config.container;\n this.disablePopover = config.disablePopover;\n this.popoverClass = config.popoverClass;\n this.openDelay = config.openDelay;\n this.closeDelay = config.closeDelay;\n this._popupService = new PopupService(\n NgbPopoverWindow, injector, viewContainerRef, _renderer, componentFactoryResolver, _applicationRef);\n\n this._zoneSubscription = _ngZone.onStable.subscribe(() => {\n if (this._windowRef) {\n positionElements(\n this._elementRef.nativeElement, this._windowRef.location.nativeElement, this.placement,\n this.container === 'body', 'bs-popover');\n }\n });\n }\n\n /**\n * Opens the popover.\n *\n * This is considered to be a \"manual\" triggering.\n * The `context` is an optional value to be injected into the popover template when it is created.\n */\n open(context?: any) {\n if (!this._windowRef && !this._isDisabled()) {\n this._windowRef = this._popupService.open(this.ngbPopover, context);\n this._windowRef.instance.title = this.popoverTitle;\n this._windowRef.instance.context = context;\n this._windowRef.instance.popoverClass = this.popoverClass;\n this._windowRef.instance.id = this._ngbPopoverWindowId;\n\n this._renderer.setAttribute(this._elementRef.nativeElement, 'aria-describedby', this._ngbPopoverWindowId);\n\n if (this.container === 'body') {\n this._document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement);\n }\n\n // We need to detect changes, because we don't know where .open() might be called from.\n // Ex. opening popover from one of lifecycle hooks that run after the CD\n // (say from ngAfterViewInit) will result in 'ExpressionHasChanged' exception\n this._windowRef.changeDetectorRef.detectChanges();\n\n // We need to mark for check, because popover won't work inside the OnPush component.\n // Ex. when we use expression like `{{ popover.isOpen() : 'opened' : 'closed' }}`\n // inside the template of an OnPush component and we change the popover from\n // open -> closed, the expression in question won't be updated unless we explicitly\n // mark the parent component to be checked.\n this._windowRef.changeDetectorRef.markForCheck();\n\n ngbAutoClose(\n this._ngZone, this._document, this.autoClose, () => this.close(), this.hidden,\n [this._windowRef.location.nativeElement]);\n this.shown.emit();\n }\n }\n\n /**\n * Closes the popover.\n *\n * This is considered to be a \"manual\" triggering of the popover.\n */\n close(): void {\n if (this._windowRef) {\n this._renderer.removeAttribute(this._elementRef.nativeElement, 'aria-describedby');\n this._popupService.close();\n this._windowRef = null;\n this.hidden.emit();\n this._changeDetector.markForCheck();\n }\n }\n\n /**\n * Toggles the popover.\n *\n * This is considered to be a \"manual\" triggering of the popover.\n */\n toggle(): void {\n if (this._windowRef) {\n this.close();\n } else {\n this.open();\n }\n }\n\n /**\n * Returns `true`, if the popover is currently shown.\n */\n isOpen(): boolean { return this._windowRef != null; }\n\n ngOnInit() {\n this._unregisterListenersFn = listenToTriggers(\n this._renderer, this._elementRef.nativeElement, this.triggers, this.isOpen.bind(this), this.open.bind(this),\n this.close.bind(this), +this.openDelay, +this.closeDelay);\n }\n\n ngOnChanges(changes: SimpleChanges) {\n // close popover if title and content become empty, or disablePopover set to true\n if ((changes['ngbPopover'] || changes['popoverTitle'] || changes['disablePopover']) && this._isDisabled()) {\n this.close();\n }\n }\n\n ngOnDestroy() {\n this.close();\n // This check is needed as it might happen that ngOnDestroy is called before ngOnInit\n // under certain conditions, see: https://github.com/ng-bootstrap/ng-bootstrap/issues/2199\n if (this._unregisterListenersFn) {\n this._unregisterListenersFn();\n }\n this._zoneSubscription.unsubscribe();\n }\n}\n","import {NgModule} from '@angular/core';\n\nimport {NgbPopover, NgbPopoverWindow} from './popover';\nimport {CommonModule} from '@angular/common';\n\nexport {NgbPopover} from './popover';\nexport {NgbPopoverConfig} from './popover-config';\nexport {Placement} from '../util/positioning';\n\n@NgModule({\n declarations: [NgbPopover, NgbPopoverWindow],\n exports: [NgbPopover],\n imports: [CommonModule],\n entryComponents: [NgbPopoverWindow]\n})\nexport class NgbPopoverModule {\n}\n","import {Injectable} from '@angular/core';\n\n/**\n * A configuration service for the [`NgbProgressbar`](#/components/progressbar/api#NgbProgressbar) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the progress bars used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbProgressbarConfig {\n max = 100;\n animated = false;\n striped = false;\n type: string;\n showValue = false;\n height: string;\n}\n","import {Component, Input, ChangeDetectionStrategy} from '@angular/core';\nimport {getValueInRange} from '../util/util';\nimport {NgbProgressbarConfig} from './progressbar-config';\n\n/**\n * A directive that provides feedback on the progress of a workflow or an action.\n */\n@Component({\n selector: 'ngb-progressbar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n
\n
\n {{getPercentValue()}}%\n
\n
\n `\n})\nexport class NgbProgressbar {\n /**\n * The maximal value to be displayed in the progressbar.\n */\n @Input() max: number;\n\n /**\n * If `true`, the stripes on the progressbar are animated.\n *\n * Takes effect only for browsers supporting CSS3 animations, and if `striped` is `true`.\n */\n @Input() animated: boolean;\n\n /**\n * If `true`, the progress bars will be displayed as striped.\n */\n @Input() striped: boolean;\n\n /**\n * If `true`, the current percentage will be shown in the `xx%` format.\n */\n @Input() showValue: boolean;\n\n /**\n * The type of the progress bar.\n *\n * Currently Bootstrap supports `\"success\"`, `\"info\"`, `\"warning\"` or `\"danger\"`.\n */\n @Input() type: string;\n\n /**\n * The current value for the progress bar.\n *\n * Should be in the `[0, max]` range.\n */\n @Input() value = 0;\n\n /**\n * THe height of the progress bar.\n *\n * Accepts any valid CSS height values, ex. `\"2rem\"`\n */\n @Input() height: string;\n\n constructor(config: NgbProgressbarConfig) {\n this.max = config.max;\n this.animated = config.animated;\n this.striped = config.striped;\n this.type = config.type;\n this.showValue = config.showValue;\n this.height = config.height;\n }\n\n getValue() { return getValueInRange(this.value, this.max); }\n\n getPercentValue() { return 100 * this.getValue() / this.max; }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\nimport {NgbProgressbar} from './progressbar';\n\nexport {NgbProgressbar} from './progressbar';\nexport {NgbProgressbarConfig} from './progressbar-config';\n\n@NgModule({declarations: [NgbProgressbar], exports: [NgbProgressbar], imports: [CommonModule]})\nexport class NgbProgressbarModule {\n}\n","import {Injectable} from '@angular/core';\n\n/**\n * A configuration service for the [`NgbRating`](#/components/rating/api#NgbRating) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the ratings used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbRatingConfig {\n max = 10;\n readonly = false;\n resettable = false;\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n Input,\n Output,\n EventEmitter,\n OnInit,\n TemplateRef,\n OnChanges,\n SimpleChanges,\n ContentChild,\n forwardRef,\n ChangeDetectorRef\n} from '@angular/core';\nimport {NgbRatingConfig} from './rating-config';\nimport {getValueInRange} from '../util/util';\nimport {Key} from '../util/key';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\n\n/**\n * The context for the custom star display template defined in the `starTemplate`.\n */\nexport interface StarTemplateContext {\n /**\n * The star fill percentage, an integer in the `[0, 100]` range.\n */\n fill: number;\n\n /**\n * Index of the star, starts with `0`.\n */\n index: number;\n}\n\nconst NGB_RATING_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgbRating),\n multi: true\n};\n\n/**\n * A directive that helps visualising and interacting with a star rating bar.\n */\n@Component({\n selector: 'ngb-rating',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'd-inline-flex',\n 'tabindex': '0',\n 'role': 'slider',\n 'aria-valuemin': '0',\n '[attr.aria-valuemax]': 'max',\n '[attr.aria-valuenow]': 'nextRate',\n '[attr.aria-valuetext]': 'ariaValueText()',\n '[attr.aria-disabled]': 'readonly ? true : null',\n '(blur)': 'handleBlur()',\n '(keydown)': 'handleKeyDown($event)',\n '(mouseleave)': 'reset()'\n },\n template: `\n {{ fill === 100 ? '★' : '☆' }}\n \n ({{ index < nextRate ? '*' : ' ' }})\n \n \n \n \n \n `,\n providers: [NGB_RATING_VALUE_ACCESSOR]\n})\nexport class NgbRating implements ControlValueAccessor,\n OnInit, OnChanges {\n contexts: StarTemplateContext[] = [];\n disabled = false;\n nextRate: number;\n\n\n /**\n * The maximal rating that can be given.\n */\n @Input() max: number;\n\n /**\n * The current rating. Could be a decimal value like `3.75`.\n */\n @Input() rate: number;\n\n /**\n * If `true`, the rating can't be changed.\n */\n @Input() readonly: boolean;\n\n /**\n * If `true`, the rating can be reset to `0` by mouse clicking currently set rating.\n */\n @Input() resettable: boolean;\n\n /**\n * The template to override the way each star is displayed.\n *\n * Alternatively put an `` as the only child of your `` element\n */\n @Input() starTemplate: TemplateRef;\n @ContentChild(TemplateRef, {static: false}) starTemplateFromContent: TemplateRef;\n\n /**\n * An event emitted when the user is hovering over a given rating.\n *\n * Event payload equals to the rating being hovered over.\n */\n @Output() hover = new EventEmitter();\n\n /**\n * An event emitted when the user stops hovering over a given rating.\n *\n * Event payload equals to the rating of the last item being hovered over.\n */\n @Output() leave = new EventEmitter();\n\n /**\n * An event emitted when the user selects a new rating.\n *\n * Event payload equals to the newly selected rating.\n */\n @Output() rateChange = new EventEmitter(true);\n\n onChange = (_: any) => {};\n onTouched = () => {};\n\n constructor(config: NgbRatingConfig, private _changeDetectorRef: ChangeDetectorRef) {\n this.max = config.max;\n this.readonly = config.readonly;\n }\n\n ariaValueText() { return `${this.nextRate} out of ${this.max}`; }\n\n enter(value: number): void {\n if (!this.readonly && !this.disabled) {\n this._updateState(value);\n }\n this.hover.emit(value);\n }\n\n handleBlur() { this.onTouched(); }\n\n handleClick(value: number) { this.update(this.resettable && this.rate === value ? 0 : value); }\n\n handleKeyDown(event: KeyboardEvent) {\n // tslint:disable-next-line:deprecation\n switch (event.which) {\n case Key.ArrowDown:\n case Key.ArrowLeft:\n this.update(this.rate - 1);\n break;\n case Key.ArrowUp:\n case Key.ArrowRight:\n this.update(this.rate + 1);\n break;\n case Key.Home:\n this.update(0);\n break;\n case Key.End:\n this.update(this.max);\n break;\n default:\n return;\n }\n\n // note 'return' in default case\n event.preventDefault();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['rate']) {\n this.update(this.rate);\n }\n }\n\n ngOnInit(): void {\n this.contexts = Array.from({length: this.max}, (v, k) => ({fill: 0, index: k}));\n this._updateState(this.rate);\n }\n\n registerOnChange(fn: (value: any) => any): void { this.onChange = fn; }\n\n registerOnTouched(fn: () => any): void { this.onTouched = fn; }\n\n reset(): void {\n this.leave.emit(this.nextRate);\n this._updateState(this.rate);\n }\n\n setDisabledState(isDisabled: boolean) { this.disabled = isDisabled; }\n\n update(value: number, internalChange = true): void {\n const newRate = getValueInRange(value, this.max, 0);\n if (!this.readonly && !this.disabled && this.rate !== newRate) {\n this.rate = newRate;\n this.rateChange.emit(this.rate);\n }\n if (internalChange) {\n this.onChange(this.rate);\n this.onTouched();\n }\n this._updateState(this.rate);\n }\n\n writeValue(value) {\n this.update(value, false);\n this._changeDetectorRef.markForCheck();\n }\n\n private _getFillValue(index: number): number {\n const diff = this.nextRate - index;\n\n if (diff >= 1) {\n return 100;\n }\n if (diff < 1 && diff > 0) {\n return parseInt((diff * 100).toFixed(2), 10);\n }\n\n return 0;\n }\n\n private _updateState(nextValue: number) {\n this.nextRate = nextValue;\n this.contexts.forEach((context, index) => context.fill = this._getFillValue(index));\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\nimport {NgbRating} from './rating';\n\nexport {NgbRating} from './rating';\nexport {NgbRatingConfig} from './rating-config';\n\n@NgModule({declarations: [NgbRating], exports: [NgbRating], imports: [CommonModule]})\nexport class NgbRatingModule {\n}\n","import {Injectable} from '@angular/core';\n\n/**\n * A configuration service for the [`NgbTabset`](#/components/tabset/api#NgbTabset) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the tabsets used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbTabsetConfig {\n justify: 'start' | 'center' | 'end' | 'fill' | 'justified' = 'start';\n orientation: 'horizontal' | 'vertical' = 'horizontal';\n type: 'tabs' | 'pills' = 'tabs';\n}\n","import {\n Component,\n Input,\n ContentChildren,\n QueryList,\n Directive,\n TemplateRef,\n AfterContentChecked,\n Output,\n EventEmitter\n} from '@angular/core';\nimport {NgbTabsetConfig} from './tabset-config';\n\nlet nextId = 0;\n\n/**\n * A directive to wrap tab titles that need to contain HTML markup or other directives.\n *\n * Alternatively you could use the `NgbTab.title` input for string titles.\n */\n@Directive({selector: 'ng-template[ngbTabTitle]'})\nexport class NgbTabTitle {\n constructor(public templateRef: TemplateRef) {}\n}\n\n/**\n * A directive to wrap content to be displayed in a tab.\n */\n@Directive({selector: 'ng-template[ngbTabContent]'})\nexport class NgbTabContent {\n constructor(public templateRef: TemplateRef) {}\n}\n\n/**\n * A directive representing an individual tab.\n */\n@Directive({selector: 'ngb-tab'})\nexport class NgbTab implements AfterContentChecked {\n /**\n * The tab identifier.\n *\n * Must be unique for the entire document for proper accessibility support.\n */\n @Input() id = `ngb-tab-${nextId++}`;\n\n /**\n * The tab title.\n *\n * Use the [`NgbTabTitle`](#/components/tabset/api#NgbTabTitle) directive for non-string titles.\n */\n @Input() title: string;\n\n /**\n * If `true`, the current tab is disabled and can't be toggled.\n */\n @Input() disabled = false;\n\n titleTpl: NgbTabTitle | null;\n contentTpl: NgbTabContent | null;\n\n @ContentChildren(NgbTabTitle, {descendants: false}) titleTpls: QueryList;\n @ContentChildren(NgbTabContent, {descendants: false}) contentTpls: QueryList;\n\n ngAfterContentChecked() {\n // We are using @ContentChildren instead of @ContentChild as in the Angular version being used\n // only @ContentChildren allows us to specify the {descendants: false} option.\n // Without {descendants: false} we are hitting bugs described in:\n // https://github.com/ng-bootstrap/ng-bootstrap/issues/2240\n this.titleTpl = this.titleTpls.first;\n this.contentTpl = this.contentTpls.first;\n }\n}\n\n/**\n * The payload of the change event fired right before the tab change.\n */\nexport interface NgbTabChangeEvent {\n /**\n * The id of the currently active tab.\n */\n activeId: string;\n\n /**\n * The id of the newly selected tab.\n */\n nextId: string;\n\n /**\n * Calling this function will prevent tab switching.\n */\n preventDefault: () => void;\n}\n\n/**\n * A component that makes it easy to create tabbed interface.\n */\n@Component({\n selector: 'ngb-tabset',\n exportAs: 'ngbTabset',\n template: `\n \n
\n \n \n \n
\n
\n \n `\n})\nexport class NgbTabset implements AfterContentChecked {\n justifyClass: string;\n\n @ContentChildren(NgbTab) tabs: QueryList;\n\n /**\n * The identifier of the tab that should be opened **initially**.\n *\n * For subsequent tab switches use the `.select()` method and the `(tabChange)` event.\n */\n @Input() activeId: string;\n\n /**\n * If `true`, non-visible tabs content will be removed from DOM. Otherwise it will just be hidden.\n */\n @Input() destroyOnHide = true;\n\n /**\n * The horizontal alignment of the tabs with flexbox utilities.\n */\n @Input()\n set justify(className: 'start' | 'center' | 'end' | 'fill' | 'justified') {\n if (className === 'fill' || className === 'justified') {\n this.justifyClass = `nav-${className}`;\n } else {\n this.justifyClass = `justify-content-${className}`;\n }\n }\n\n /**\n * The orientation of the tabset.\n */\n @Input() orientation: 'horizontal' | 'vertical';\n\n /**\n * Type of navigation to be used for tabs.\n *\n * Currently Bootstrap supports only `\"tabs\"` and `\"pills\"`.\n *\n * Since `3.0.0` can also be an arbitrary string (ex. for custom themes).\n */\n @Input() type: 'tabs' | 'pills' | string;\n\n /**\n * A tab change event emitted right before the tab change happens.\n *\n * See [`NgbTabChangeEvent`](#/components/tabset/api#NgbTabChangeEvent) for payload details.\n */\n @Output() tabChange = new EventEmitter();\n\n constructor(config: NgbTabsetConfig) {\n this.type = config.type;\n this.justify = config.justify;\n this.orientation = config.orientation;\n }\n\n /**\n * Selects the tab with the given id and shows its associated content panel.\n *\n * Any other tab that was previously selected becomes unselected and its associated pane is removed from DOM or\n * hidden depending on the `destroyOnHide` value.\n */\n select(tabId: string) {\n let selectedTab = this._getTabById(tabId);\n if (selectedTab && !selectedTab.disabled && this.activeId !== selectedTab.id) {\n let defaultPrevented = false;\n\n this.tabChange.emit(\n {activeId: this.activeId, nextId: selectedTab.id, preventDefault: () => { defaultPrevented = true; }});\n\n if (!defaultPrevented) {\n this.activeId = selectedTab.id;\n }\n }\n }\n\n ngAfterContentChecked() {\n // auto-correct activeId that might have been set incorrectly as input\n let activeTab = this._getTabById(this.activeId);\n this.activeId = activeTab ? activeTab.id : (this.tabs.length ? this.tabs.first.id : null);\n }\n\n private _getTabById(id: string): NgbTab {\n let tabsWithId: NgbTab[] = this.tabs.filter(tab => tab.id === id);\n return tabsWithId.length ? tabsWithId[0] : null;\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\nimport {NgbTabset, NgbTab, NgbTabContent, NgbTabTitle} from './tabset';\n\nexport {NgbTabset, NgbTab, NgbTabContent, NgbTabTitle, NgbTabChangeEvent} from './tabset';\nexport {NgbTabsetConfig} from './tabset-config';\n\nconst NGB_TABSET_DIRECTIVES = [NgbTabset, NgbTab, NgbTabContent, NgbTabTitle];\n\n@NgModule({declarations: NGB_TABSET_DIRECTIVES, exports: NGB_TABSET_DIRECTIVES, imports: [CommonModule]})\nexport class NgbTabsetModule {\n}\n","import {isNumber, toInteger} from '../util/util';\n\nexport class NgbTime {\n hour: number;\n minute: number;\n second: number;\n\n constructor(hour?: number, minute?: number, second?: number) {\n this.hour = toInteger(hour);\n this.minute = toInteger(minute);\n this.second = toInteger(second);\n }\n\n changeHour(step = 1) { this.updateHour((isNaN(this.hour) ? 0 : this.hour) + step); }\n\n updateHour(hour: number) {\n if (isNumber(hour)) {\n this.hour = (hour < 0 ? 24 + hour : hour) % 24;\n } else {\n this.hour = NaN;\n }\n }\n\n changeMinute(step = 1) { this.updateMinute((isNaN(this.minute) ? 0 : this.minute) + step); }\n\n updateMinute(minute: number) {\n if (isNumber(minute)) {\n this.minute = minute % 60 < 0 ? 60 + minute % 60 : minute % 60;\n this.changeHour(Math.floor(minute / 60));\n } else {\n this.minute = NaN;\n }\n }\n\n changeSecond(step = 1) { this.updateSecond((isNaN(this.second) ? 0 : this.second) + step); }\n\n updateSecond(second: number) {\n if (isNumber(second)) {\n this.second = second < 0 ? 60 + second % 60 : second % 60;\n this.changeMinute(Math.floor(second / 60));\n } else {\n this.second = NaN;\n }\n }\n\n isValid(checkSecs = true) {\n return isNumber(this.hour) && isNumber(this.minute) && (checkSecs ? isNumber(this.second) : true);\n }\n\n toString() { return `${this.hour || 0}:${this.minute || 0}:${this.second || 0}`; }\n}\n","import {Injectable} from '@angular/core';\n\n/**\n * A configuration service for the [`NgbTimepicker`](#/components/timepicker/api#NgbTimepicker) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the timepickers used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbTimepickerConfig {\n meridian = false;\n spinners = true;\n seconds = false;\n hourStep = 1;\n minuteStep = 1;\n secondStep = 1;\n disabled = false;\n readonlyInputs = false;\n size: 'small' | 'medium' | 'large' = 'medium';\n}\n","import {Injectable} from '@angular/core';\nimport {NgbTimeStruct} from './ngb-time-struct';\nimport {isInteger} from '../util/util';\n\nexport function NGB_DATEPICKER_TIME_ADAPTER_FACTORY() {\n return new NgbTimeStructAdapter();\n}\n\n/**\n * An abstract service that does the conversion between the internal timepicker `NgbTimeStruct` model and\n * any provided user time model `T`, ex. a string, a native date, etc.\n *\n * The adapter is used **only** for conversion when binding timepicker to a form control,\n * ex. `[(ngModel)]=\"userTimeModel\"`. Here `userTimeModel` can be of any type.\n *\n * The default timepicker implementation assumes we use `NgbTimeStruct` as a user model.\n *\n * See the [custom time adapter demo](#/components/timepicker/examples#adapter) for an example.\n *\n * @since 2.2.0\n */\n@Injectable({providedIn: 'root', useFactory: NGB_DATEPICKER_TIME_ADAPTER_FACTORY})\nexport abstract class NgbTimeAdapter {\n /**\n * Converts a user-model time of type `T` to an `NgbTimeStruct` for internal use.\n */\n abstract fromModel(value: T): NgbTimeStruct;\n\n /**\n * Converts an internal `NgbTimeStruct` time to a user-model time of type `T`.\n */\n abstract toModel(time: NgbTimeStruct): T;\n}\n\n@Injectable()\nexport class NgbTimeStructAdapter extends NgbTimeAdapter {\n /**\n * Converts a NgbTimeStruct value into NgbTimeStruct value\n */\n fromModel(time: NgbTimeStruct): NgbTimeStruct {\n return (time && isInteger(time.hour) && isInteger(time.minute)) ?\n {hour: time.hour, minute: time.minute, second: isInteger(time.second) ? time.second : null} :\n null;\n }\n\n /**\n * Converts a NgbTimeStruct value into NgbTimeStruct value\n */\n toModel(time: NgbTimeStruct): NgbTimeStruct {\n return (time && isInteger(time.hour) && isInteger(time.minute)) ?\n {hour: time.hour, minute: time.minute, second: isInteger(time.second) ? time.second : null} :\n null;\n }\n}\n","import {Inject, Injectable, LOCALE_ID} from '@angular/core';\nimport {FormStyle, getLocaleDayPeriods, TranslationWidth} from '@angular/common';\n\nexport function NGB_TIMEPICKER_I18N_FACTORY(locale) {\n return new NgbTimepickerI18nDefault(locale);\n}\n\n/**\n * Type of the service supplying day periods (for example, 'AM' and 'PM') to NgbTimepicker component.\n * The default implementation of this service honors the Angular locale, and uses the registered locale data,\n * as explained in the Angular i18n guide.\n */\n@Injectable({providedIn: 'root', useFactory: NGB_TIMEPICKER_I18N_FACTORY, deps: [LOCALE_ID]})\nexport abstract class NgbTimepickerI18n {\n /**\n * Returns the name for the period before midday.\n */\n abstract getMorningPeriod(): string;\n\n /**\n * Returns the name for the period after midday.\n */\n abstract getAfternoonPeriod(): string;\n}\n\n@Injectable()\nexport class NgbTimepickerI18nDefault extends NgbTimepickerI18n {\n private _periods: [string, string];\n\n constructor(@Inject(LOCALE_ID) locale: string) {\n super();\n\n this._periods = getLocaleDayPeriods(locale, FormStyle.Standalone, TranslationWidth.Narrow);\n }\n\n getMorningPeriod(): string { return this._periods[0]; }\n\n getAfternoonPeriod(): string { return this._periods[1]; }\n}\n","import {\n ChangeDetectorRef,\n Component,\n forwardRef,\n Input,\n OnChanges,\n SimpleChanges,\n ViewEncapsulation\n} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\n\nimport {isInteger, isNumber, padNumber, toInteger} from '../util/util';\nimport {NgbTime} from './ngb-time';\nimport {NgbTimepickerConfig} from './timepicker-config';\nimport {NgbTimeAdapter} from './ngb-time-adapter';\nimport {NgbTimepickerI18n} from './timepicker-i18n';\n\nconst NGB_TIMEPICKER_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgbTimepicker),\n multi: true\n};\n\n/**\n * A directive that helps with wth picking hours, minutes and seconds.\n */\n@Component({\n selector: 'ngb-timepicker',\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./timepicker.scss'],\n template: `\n
\n
\n
\n \n \n \n
\n
:
\n
\n \n \n \n
\n
:
\n
\n \n \n \n
\n
\n
\n \n
\n
\n
\n `,\n providers: [NGB_TIMEPICKER_VALUE_ACCESSOR]\n})\nexport class NgbTimepicker implements ControlValueAccessor,\n OnChanges {\n disabled: boolean;\n model: NgbTime;\n\n private _hourStep: number;\n private _minuteStep: number;\n private _secondStep: number;\n\n /**\n * Whether to display 12H or 24H mode.\n */\n @Input() meridian: boolean;\n\n /**\n * If `true`, the spinners above and below inputs are visible.\n */\n @Input() spinners: boolean;\n\n /**\n * If `true`, it is possible to select seconds.\n */\n @Input() seconds: boolean;\n\n /**\n * The number of hours to add/subtract when clicking hour spinners.\n */\n @Input()\n set hourStep(step: number) {\n this._hourStep = isInteger(step) ? step : this._config.hourStep;\n }\n\n get hourStep(): number { return this._hourStep; }\n\n /**\n * The number of minutes to add/subtract when clicking minute spinners.\n */\n @Input()\n set minuteStep(step: number) {\n this._minuteStep = isInteger(step) ? step : this._config.minuteStep;\n }\n\n get minuteStep(): number { return this._minuteStep; }\n\n /**\n * The number of seconds to add/subtract when clicking second spinners.\n */\n @Input()\n set secondStep(step: number) {\n this._secondStep = isInteger(step) ? step : this._config.secondStep;\n }\n\n get secondStep(): number { return this._secondStep; }\n\n /**\n * If `true`, the timepicker is readonly and can't be changed.\n */\n @Input() readonlyInputs: boolean;\n\n /**\n * The size of inputs and buttons.\n */\n @Input() size: 'small' | 'medium' | 'large';\n\n constructor(\n private readonly _config: NgbTimepickerConfig, private _ngbTimeAdapter: NgbTimeAdapter,\n private _cd: ChangeDetectorRef, public i18n: NgbTimepickerI18n) {\n this.meridian = _config.meridian;\n this.spinners = _config.spinners;\n this.seconds = _config.seconds;\n this.hourStep = _config.hourStep;\n this.minuteStep = _config.minuteStep;\n this.secondStep = _config.secondStep;\n this.disabled = _config.disabled;\n this.readonlyInputs = _config.readonlyInputs;\n this.size = _config.size;\n }\n\n onChange = (_: any) => {};\n onTouched = () => {};\n\n writeValue(value) {\n const structValue = this._ngbTimeAdapter.fromModel(value);\n this.model = structValue ? new NgbTime(structValue.hour, structValue.minute, structValue.second) : new NgbTime();\n if (!this.seconds && (!structValue || !isNumber(structValue.second))) {\n this.model.second = 0;\n }\n this._cd.markForCheck();\n }\n\n registerOnChange(fn: (value: any) => any): void { this.onChange = fn; }\n\n registerOnTouched(fn: () => any): void { this.onTouched = fn; }\n\n setDisabledState(isDisabled: boolean) { this.disabled = isDisabled; }\n\n changeHour(step: number) {\n this.model.changeHour(step);\n this.propagateModelChange();\n }\n\n changeMinute(step: number) {\n this.model.changeMinute(step);\n this.propagateModelChange();\n }\n\n changeSecond(step: number) {\n this.model.changeSecond(step);\n this.propagateModelChange();\n }\n\n updateHour(newVal: string) {\n const isPM = this.model.hour >= 12;\n const enteredHour = toInteger(newVal);\n if (this.meridian && (isPM && enteredHour < 12 || !isPM && enteredHour === 12)) {\n this.model.updateHour(enteredHour + 12);\n } else {\n this.model.updateHour(enteredHour);\n }\n this.propagateModelChange();\n }\n\n updateMinute(newVal: string) {\n this.model.updateMinute(toInteger(newVal));\n this.propagateModelChange();\n }\n\n updateSecond(newVal: string) {\n this.model.updateSecond(toInteger(newVal));\n this.propagateModelChange();\n }\n\n toggleMeridian() {\n if (this.meridian) {\n this.changeHour(12);\n }\n }\n\n formatHour(value: number) {\n if (isNumber(value)) {\n if (this.meridian) {\n return padNumber(value % 12 === 0 ? 12 : value % 12);\n } else {\n return padNumber(value % 24);\n }\n } else {\n return padNumber(NaN);\n }\n }\n\n formatMinSec(value: number) { return padNumber(value); }\n\n get isSmallSize(): boolean { return this.size === 'small'; }\n\n get isLargeSize(): boolean { return this.size === 'large'; }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['seconds'] && !this.seconds && this.model && !isNumber(this.model.second)) {\n this.model.second = 0;\n this.propagateModelChange(false);\n }\n }\n\n private propagateModelChange(touched = true) {\n if (touched) {\n this.onTouched();\n }\n if (this.model.isValid(this.seconds)) {\n this.onChange(\n this._ngbTimeAdapter.toModel({hour: this.model.hour, minute: this.model.minute, second: this.model.second}));\n } else {\n this.onChange(this._ngbTimeAdapter.toModel(null));\n }\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\nimport {NgbTimepicker} from './timepicker';\n\nexport {NgbTimepicker} from './timepicker';\nexport {NgbTimepickerConfig} from './timepicker-config';\nexport {NgbTimeStruct} from './ngb-time-struct';\nexport {NgbTimeAdapter} from './ngb-time-adapter';\nexport {NgbTimepickerI18n} from './timepicker-i18n';\n\n@NgModule({declarations: [NgbTimepicker], exports: [NgbTimepicker], imports: [CommonModule]})\nexport class NgbTimepickerModule {\n}\n","import {Injectable} from '@angular/core';\n\n/**\n * Interface used to type all toast config options. See `NgbToastConfig`.\n *\n * @since 5.0.0\n */\nexport interface NgbToastOptions {\n /**\n * Specify if the toast component should emit the `hide()` output\n * after a certain `delay` in ms.\n */\n autohide?: boolean;\n\n /**\n * Delay in ms after which the `hide()` output should be emitted.\n */\n delay?: number;\n\n /**\n * Type of aria-live attribute to be used.\n *\n * Could be one of these 2 values (as string):\n * - `polite` (default)\n * - `alert`\n */\n ariaLive?: 'polite' | 'alert';\n}\n\n/**\n * Configuration service for the NgbToast component. You can inject this service, typically in your root component,\n * and customize the values of its properties in order to provide default values for all the toasts used in the\n * application.\n *\n * @since 5.0.0\n */\n@Injectable({providedIn: 'root'})\nexport class NgbToastConfig implements NgbToastOptions {\n autohide = true;\n delay = 500;\n ariaLive: 'polite' | 'alert' = 'polite';\n}\n","import {\n AfterContentInit,\n Attribute,\n Component,\n ContentChild,\n Directive,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n TemplateRef,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport {NgbToastConfig} from './toast-config';\n\n/**\n * This directive allows the usage of HTML markup or other directives\n * inside of the toast's header.\n *\n * @since 5.0.0\n */\n@Directive({selector: '[ngbToastHeader]'})\nexport class NgbToastHeader {\n}\n\n/**\n * Toasts provide feedback messages as notifications to the user.\n * Goal is to mimic the push notifications available both on mobile and desktop operating systems.\n *\n * @since 5.0.0\n */\n@Component({\n selector: 'ngb-toast',\n exportAs: 'ngbToast',\n encapsulation: ViewEncapsulation.None,\n host: {\n 'role': 'alert',\n '[attr.aria-live]': 'ariaLive',\n 'aria-atomic': 'true',\n '[class.toast]': 'true',\n '[class.show]': 'true',\n '[class.autohide]': 'autohide',\n },\n template: `\n \n {{header}}\n \n \n
\n \n \n
\n
\n
\n \n
\n `,\n styleUrls: ['./toast.scss']\n})\nexport class NgbToast implements AfterContentInit,\n OnChanges {\n private _timeoutID;\n\n /**\n * Delay after which the toast will hide (ms).\n * default: `500` (ms) (inherited from NgbToastConfig)\n */\n @Input() delay: number;\n\n /**\n * Auto hide the toast after a delay in ms.\n * default: `true` (inherited from NgbToastConfig)\n */\n @Input() autohide: boolean;\n\n /**\n * Text to be used as toast's header.\n * Ignored if a ContentChild template is specified at the same time.\n */\n @Input() header: string;\n\n /**\n * A template like `` can be\n * used in the projected content to allow markup usage.\n */\n @ContentChild(NgbToastHeader, {read: TemplateRef, static: true}) contentHeaderTpl: TemplateRef| null = null;\n\n /**\n * An event fired immediately when toast's `hide()` method has been called.\n * It can only occur in 2 different scenarios:\n * - `autohide` timeout fires\n * - user clicks on a closing cross (×)\n *\n * Additionally this output is purely informative. The toast won't disappear. It's up to the user to take care of\n * that.\n */\n @Output('hide') hideOutput = new EventEmitter();\n\n constructor(@Attribute('aria-live') public ariaLive: string, config: NgbToastConfig) {\n if (this.ariaLive == null) {\n this.ariaLive = config.ariaLive;\n }\n this.delay = config.delay;\n this.autohide = config.autohide;\n }\n\n ngAfterContentInit() { this._init(); }\n\n ngOnChanges(changes: SimpleChanges) {\n if ('autohide' in changes) {\n this._clearTimeout();\n this._init();\n }\n }\n\n hide() {\n this._clearTimeout();\n this.hideOutput.emit();\n }\n\n private _init() {\n if (this.autohide && !this._timeoutID) {\n this._timeoutID = setTimeout(() => this.hide(), this.delay);\n }\n }\n\n private _clearTimeout() {\n if (this._timeoutID) {\n clearTimeout(this._timeoutID);\n this._timeoutID = null;\n }\n }\n}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\n\nimport {NgbToast, NgbToastHeader} from './toast';\n\nexport {NgbToast, NgbToastHeader} from './toast';\nexport {NgbToastConfig, NgbToastOptions} from './toast-config';\n\n@NgModule({declarations: [NgbToast, NgbToastHeader], imports: [CommonModule], exports: [NgbToast, NgbToastHeader]})\nexport class NgbToastModule {\n}\n","import {Injectable} from '@angular/core';\nimport {PlacementArray} from '../util/positioning';\n\n/**\n * A configuration service for the [`NgbTooltip`](#/components/tooltip/api#NgbTooltip) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the tooltips used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbTooltipConfig {\n autoClose: boolean | 'inside' | 'outside' = true;\n placement: PlacementArray = 'auto';\n triggers = 'hover focus';\n container: string;\n disableTooltip = false;\n tooltipClass: string;\n openDelay = 0;\n closeDelay = 0;\n}\n","import {\n Component,\n Directive,\n Input,\n Output,\n EventEmitter,\n ChangeDetectionStrategy,\n OnInit,\n OnDestroy,\n Inject,\n Injector,\n Renderer2,\n ComponentRef,\n ElementRef,\n TemplateRef,\n ViewContainerRef,\n ComponentFactoryResolver,\n NgZone,\n ViewEncapsulation,\n ChangeDetectorRef,\n ApplicationRef\n} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\n\nimport {listenToTriggers} from '../util/triggers';\nimport {ngbAutoClose} from '../util/autoclose';\nimport {positionElements, PlacementArray} from '../util/positioning';\nimport {PopupService} from '../util/popup';\n\nimport {NgbTooltipConfig} from './tooltip-config';\n\nlet nextId = 0;\n\n@Component({\n selector: 'ngb-tooltip-window',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {'[class]': '\"tooltip show\" + (tooltipClass ? \" \" + tooltipClass : \"\")', 'role': 'tooltip', '[id]': 'id'},\n template: `
`,\n styleUrls: ['./tooltip.scss']\n})\nexport class NgbTooltipWindow {\n @Input() id: string;\n @Input() tooltipClass: string;\n}\n\n/**\n * A lightweight and extensible directive for fancy tooltip creation.\n */\n@Directive({selector: '[ngbTooltip]', exportAs: 'ngbTooltip'})\nexport class NgbTooltip implements OnInit, OnDestroy {\n /**\n * Indicates whether the tooltip should be closed on `Escape` key and inside/outside clicks:\n *\n * * `true` - closes on both outside and inside clicks as well as `Escape` presses\n * * `false` - disables the autoClose feature (NB: triggers still apply)\n * * `\"inside\"` - closes on inside clicks as well as Escape presses\n * * `\"outside\"` - closes on outside clicks (sometimes also achievable through triggers)\n * as well as `Escape` presses\n *\n * @since 3.0.0\n */\n @Input() autoClose: boolean | 'inside' | 'outside';\n\n /**\n * The preferred placement of the tooltip.\n *\n * Possible values are `\"top\"`, `\"top-left\"`, `\"top-right\"`, `\"bottom\"`, `\"bottom-left\"`,\n * `\"bottom-right\"`, `\"left\"`, `\"left-top\"`, `\"left-bottom\"`, `\"right\"`, `\"right-top\"`,\n * `\"right-bottom\"`\n *\n * Accepts an array of strings or a string with space separated possible values.\n *\n * The default order of preference is `\"auto\"` (same as the sequence above).\n *\n * Please see the [positioning overview](#/positioning) for more details.\n */\n @Input() placement: PlacementArray;\n\n /**\n * Specifies events that should trigger the tooltip.\n *\n * Supports a space separated list of event names.\n * For more details see the [triggers demo](#/components/tooltip/examples#triggers).\n */\n @Input() triggers: string;\n\n /**\n * A selector specifying the element the tooltip should be appended to.\n *\n * Currently only supports `\"body\"`.\n */\n @Input() container: string;\n\n /**\n * If `true`, tooltip is disabled and won't be displayed.\n *\n * @since 1.1.0\n */\n @Input() disableTooltip: boolean;\n\n /**\n * An optional class applied to the tooltip window element.\n *\n * @since 3.2.0\n */\n @Input() tooltipClass: string;\n\n /**\n * The opening delay in ms. Works only for \"non-manual\" opening triggers defined by the `triggers` input.\n *\n * @since 4.1.0\n */\n @Input() openDelay: number;\n\n /**\n * The closing delay in ms. Works only for \"non-manual\" opening triggers defined by the `triggers` input.\n *\n * @since 4.1.0\n */\n @Input() closeDelay: number;\n\n /**\n * An event emitted when the tooltip is shown. Contains no payload.\n */\n @Output() shown = new EventEmitter();\n /**\n * An event emitted when the popover is hidden. Contains no payload.\n */\n @Output() hidden = new EventEmitter();\n\n private _ngbTooltip: string | TemplateRef;\n private _ngbTooltipWindowId = `ngb-tooltip-${nextId++}`;\n private _popupService: PopupService;\n private _windowRef: ComponentRef;\n private _unregisterListenersFn;\n private _zoneSubscription: any;\n\n constructor(\n private _elementRef: ElementRef, private _renderer: Renderer2, injector: Injector,\n componentFactoryResolver: ComponentFactoryResolver, viewContainerRef: ViewContainerRef, config: NgbTooltipConfig,\n private _ngZone: NgZone, @Inject(DOCUMENT) private _document: any, private _changeDetector: ChangeDetectorRef,\n private _applicationRef: ApplicationRef) {\n this.autoClose = config.autoClose;\n this.placement = config.placement;\n this.triggers = config.triggers;\n this.container = config.container;\n this.disableTooltip = config.disableTooltip;\n this.tooltipClass = config.tooltipClass;\n this.openDelay = config.openDelay;\n this.closeDelay = config.closeDelay;\n this._popupService = new PopupService(\n NgbTooltipWindow, injector, viewContainerRef, _renderer, componentFactoryResolver, _applicationRef);\n\n this._zoneSubscription = _ngZone.onStable.subscribe(() => {\n if (this._windowRef) {\n positionElements(\n this._elementRef.nativeElement, this._windowRef.location.nativeElement, this.placement,\n this.container === 'body', 'bs-tooltip');\n }\n });\n }\n\n /**\n * The string content or a `TemplateRef` for the content to be displayed in the tooltip.\n *\n * If the content if falsy, the tooltip won't open.\n */\n @Input()\n set ngbTooltip(value: string | TemplateRef) {\n this._ngbTooltip = value;\n if (!value && this._windowRef) {\n this.close();\n }\n }\n\n get ngbTooltip() { return this._ngbTooltip; }\n\n /**\n * Opens the tooltip.\n *\n * This is considered to be a \"manual\" triggering.\n * The `context` is an optional value to be injected into the tooltip template when it is created.\n */\n open(context?: any) {\n if (!this._windowRef && this._ngbTooltip && !this.disableTooltip) {\n this._windowRef = this._popupService.open(this._ngbTooltip, context);\n this._windowRef.instance.tooltipClass = this.tooltipClass;\n this._windowRef.instance.id = this._ngbTooltipWindowId;\n\n this._renderer.setAttribute(this._elementRef.nativeElement, 'aria-describedby', this._ngbTooltipWindowId);\n\n if (this.container === 'body') {\n this._document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement);\n }\n\n // We need to detect changes, because we don't know where .open() might be called from.\n // Ex. opening tooltip from one of lifecycle hooks that run after the CD\n // (say from ngAfterViewInit) will result in 'ExpressionHasChanged' exception\n this._windowRef.changeDetectorRef.detectChanges();\n\n // We need to mark for check, because tooltip won't work inside the OnPush component.\n // Ex. when we use expression like `{{ tooltip.isOpen() : 'opened' : 'closed' }}`\n // inside the template of an OnPush component and we change the tooltip from\n // open -> closed, the expression in question won't be updated unless we explicitly\n // mark the parent component to be checked.\n this._windowRef.changeDetectorRef.markForCheck();\n\n ngbAutoClose(\n this._ngZone, this._document, this.autoClose, () => this.close(), this.hidden,\n [this._windowRef.location.nativeElement]);\n\n this.shown.emit();\n }\n }\n\n /**\n * Closes the tooltip.\n *\n * This is considered to be a \"manual\" triggering of the tooltip.\n */\n close(): void {\n if (this._windowRef != null) {\n this._renderer.removeAttribute(this._elementRef.nativeElement, 'aria-describedby');\n this._popupService.close();\n this._windowRef = null;\n this.hidden.emit();\n this._changeDetector.markForCheck();\n }\n }\n\n /**\n * Toggles the tooltip.\n *\n * This is considered to be a \"manual\" triggering of the tooltip.\n */\n toggle(): void {\n if (this._windowRef) {\n this.close();\n } else {\n this.open();\n }\n }\n\n /**\n * Returns `true`, if the popover is currently shown.\n */\n isOpen(): boolean { return this._windowRef != null; }\n\n ngOnInit() {\n this._unregisterListenersFn = listenToTriggers(\n this._renderer, this._elementRef.nativeElement, this.triggers, this.isOpen.bind(this), this.open.bind(this),\n this.close.bind(this), +this.openDelay, +this.closeDelay);\n }\n\n ngOnDestroy() {\n this.close();\n // This check is needed as it might happen that ngOnDestroy is called before ngOnInit\n // under certain conditions, see: https://github.com/ng-bootstrap/ng-bootstrap/issues/2199\n if (this._unregisterListenersFn) {\n this._unregisterListenersFn();\n }\n this._zoneSubscription.unsubscribe();\n }\n}\n","import {NgModule} from '@angular/core';\n\nimport {NgbTooltip, NgbTooltipWindow} from './tooltip';\n\nexport {NgbTooltipConfig} from './tooltip-config';\nexport {NgbTooltip} from './tooltip';\nexport {Placement} from '../util/positioning';\n\n@NgModule({declarations: [NgbTooltip, NgbTooltipWindow], exports: [NgbTooltip], entryComponents: [NgbTooltipWindow]})\nexport class NgbTooltipModule {\n}\n","import {Component, Input, OnChanges, ChangeDetectionStrategy, SimpleChanges, ViewEncapsulation} from '@angular/core';\nimport {regExpEscape, toString} from '../util/util';\n\n/**\n * A component that helps with text highlighting.\n *\n * If splits the `result` text into parts that contain the searched `term` and generates the HTML markup to simplify\n * highlighting:\n *\n * Ex. `result=\"Alaska\"` and `term=\"as\"` will produce `Alaska`.\n */\n@Component({\n selector: 'ngb-highlight',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `` +\n `{{part}}{{part}}` +\n ``, // template needs to be formatted in a certain way so we don't add empty text nodes\n styleUrls: ['./highlight.scss']\n})\nexport class NgbHighlight implements OnChanges {\n parts: string[];\n\n /**\n * The CSS class for `` elements wrapping the `term` inside the `result`.\n */\n @Input() highlightClass = 'ngb-highlight';\n\n /**\n * The text highlighting is added to.\n *\n * If the `term` is found inside this text, it will be highlighted.\n * If the `term` contains array then all the items from it will be highlighted inside the text.\n */\n @Input() result: string;\n\n /**\n * The term or array of terms to be highlighted.\n * Since version `v4.2.0` term could be a `string[]`\n */\n @Input() term: string | string[];\n\n ngOnChanges(changes: SimpleChanges) {\n const result = toString(this.result);\n\n const terms = Array.isArray(this.term) ? this.term : [this.term];\n const escapedTerms = terms.map(term => regExpEscape(toString(term))).filter(term => term);\n\n this.parts = escapedTerms.length ? result.split(new RegExp(`(${escapedTerms.join('|')})`, 'gmi')) : [result];\n }\n}\n","import {Component, Input, Output, EventEmitter, TemplateRef, OnInit} from '@angular/core';\n\nimport {toString} from '../util/util';\n\n/**\n * The context for the typeahead result template in case you want to override the default one.\n */\nexport interface ResultTemplateContext {\n /**\n * Your typeahead result item.\n */\n result: any;\n\n /**\n * Search term from the `` used to get current result.\n */\n term: string;\n}\n\n@Component({\n selector: 'ngb-typeahead-window',\n exportAs: 'ngbTypeaheadWindow',\n host: {'(mousedown)': '$event.preventDefault()', 'class': 'dropdown-menu show', 'role': 'listbox', '[id]': 'id'},\n template: `\n \n \n \n \n \n \n `\n})\nexport class NgbTypeaheadWindow implements OnInit {\n activeIdx = 0;\n\n /**\n * The id for the typeahead window. The id should be unique and the same\n * as the associated typeahead's id.\n */\n @Input() id: string;\n\n /**\n * Flag indicating if the first row should be active initially\n */\n @Input() focusFirst = true;\n\n /**\n * Typeahead match results to be displayed\n */\n @Input() results;\n\n /**\n * Search term used to get current results\n */\n @Input() term: string;\n\n /**\n * A function used to format a given result before display. This function should return a formatted string without any\n * HTML markup\n */\n @Input() formatter = toString;\n\n /**\n * A template to override a matching result default display\n */\n @Input() resultTemplate: TemplateRef;\n\n /**\n * Event raised when user selects a particular result row\n */\n @Output('select') selectEvent = new EventEmitter();\n\n @Output('activeChange') activeChangeEvent = new EventEmitter();\n\n hasActive() { return this.activeIdx > -1 && this.activeIdx < this.results.length; }\n\n getActive() { return this.results[this.activeIdx]; }\n\n markActive(activeIdx: number) {\n this.activeIdx = activeIdx;\n this._activeChanged();\n }\n\n next() {\n if (this.activeIdx === this.results.length - 1) {\n this.activeIdx = this.focusFirst ? (this.activeIdx + 1) % this.results.length : -1;\n } else {\n this.activeIdx++;\n }\n this._activeChanged();\n }\n\n prev() {\n if (this.activeIdx < 0) {\n this.activeIdx = this.results.length - 1;\n } else if (this.activeIdx === 0) {\n this.activeIdx = this.focusFirst ? this.results.length - 1 : -1;\n } else {\n this.activeIdx--;\n }\n this._activeChanged();\n }\n\n resetActive() {\n this.activeIdx = this.focusFirst ? 0 : -1;\n this._activeChanged();\n }\n\n select(item) { this.selectEvent.emit(item); }\n\n ngOnInit() { this.resetActive(); }\n\n private _activeChanged() {\n this.activeChangeEvent.emit(this.activeIdx >= 0 ? this.id + '-' + this.activeIdx : undefined);\n }\n}\n","import {Injectable, Inject, InjectionToken, OnDestroy} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\n\n\n\n// usefulness (and default value) of delay documented in Material's CDK\n// https://github.com/angular/material2/blob/6405da9b8e8532a7e5c854c920ee1815c275d734/src/cdk/a11y/live-announcer/live-announcer.ts#L50\nexport type ARIA_LIVE_DELAY_TYPE = number | null;\nexport const ARIA_LIVE_DELAY = new InjectionToken(\n 'live announcer delay', {providedIn: 'root', factory: ARIA_LIVE_DELAY_FACTORY});\nexport function ARIA_LIVE_DELAY_FACTORY(): number {\n return 100;\n}\n\n\nfunction getLiveElement(document: any, lazyCreate = false): HTMLElement | null {\n let element = document.body.querySelector('#ngb-live') as HTMLElement;\n\n if (element == null && lazyCreate) {\n element = document.createElement('div');\n\n element.setAttribute('id', 'ngb-live');\n element.setAttribute('aria-live', 'polite');\n element.setAttribute('aria-atomic', 'true');\n\n element.classList.add('sr-only');\n\n document.body.appendChild(element);\n }\n\n return element;\n}\n\n\n\n@Injectable({providedIn: 'root'})\nexport class Live implements OnDestroy {\n constructor(@Inject(DOCUMENT) private _document: any, @Inject(ARIA_LIVE_DELAY) private _delay: any) {}\n\n ngOnDestroy() {\n const element = getLiveElement(this._document);\n if (element) {\n element.parentElement.removeChild(element);\n }\n }\n\n say(message: string) {\n const element = getLiveElement(this._document, true);\n const delay = this._delay;\n\n element.textContent = '';\n const setText = () => element.textContent = message;\n if (delay === null) {\n setText();\n } else {\n setTimeout(setText, delay);\n }\n }\n}\n","import {Injectable} from '@angular/core';\nimport {PlacementArray} from '../util/positioning';\n\n/**\n * A configuration service for the [`NgbTypeahead`](#/components/typeahead/api#NgbTypeahead) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the typeaheads used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbTypeaheadConfig {\n container;\n editable = true;\n focusFirst = true;\n showHint = false;\n placement: PlacementArray = ['bottom-left', 'bottom-right', 'top-left', 'top-right'];\n}\n","import {\n ChangeDetectorRef,\n ComponentFactoryResolver,\n ComponentRef,\n Directive,\n ElementRef,\n EventEmitter,\n forwardRef,\n Inject,\n Injector,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Output,\n Renderer2,\n TemplateRef,\n ViewContainerRef,\n ApplicationRef\n} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {DOCUMENT} from '@angular/common';\nimport {BehaviorSubject, fromEvent, Observable, Subject, Subscription} from 'rxjs';\nimport {map, switchMap, tap} from 'rxjs/operators';\n\nimport {Live} from '../util/accessibility/live';\nimport {ngbAutoClose} from '../util/autoclose';\nimport {Key} from '../util/key';\nimport {PopupService} from '../util/popup';\nimport {PlacementArray, positionElements} from '../util/positioning';\nimport {isDefined, toString} from '../util/util';\n\nimport {NgbTypeaheadConfig} from './typeahead-config';\nimport {NgbTypeaheadWindow, ResultTemplateContext} from './typeahead-window';\n\n\nconst NGB_TYPEAHEAD_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgbTypeahead),\n multi: true\n};\n\n/**\n * An event emitted right before an item is selected from the result list.\n */\nexport interface NgbTypeaheadSelectItemEvent {\n /**\n * The item from the result list about to be selected.\n */\n item: any;\n\n /**\n * Calling this function will prevent item selection from happening.\n */\n preventDefault: () => void;\n}\n\nlet nextWindowId = 0;\n\n/**\n * A directive providing a simple way of creating powerful typeaheads from any text input.\n */\n@Directive({\n selector: 'input[ngbTypeahead]',\n exportAs: 'ngbTypeahead',\n host: {\n '(blur)': 'handleBlur()',\n '[class.open]': 'isPopupOpen()',\n '(keydown)': 'handleKeyDown($event)',\n '[autocomplete]': 'autocomplete',\n 'autocapitalize': 'off',\n 'autocorrect': 'off',\n 'role': 'combobox',\n 'aria-multiline': 'false',\n '[attr.aria-autocomplete]': 'showHint ? \"both\" : \"list\"',\n '[attr.aria-activedescendant]': 'activeDescendant',\n '[attr.aria-owns]': 'isPopupOpen() ? popupId : null',\n '[attr.aria-expanded]': 'isPopupOpen()'\n },\n providers: [NGB_TYPEAHEAD_VALUE_ACCESSOR]\n})\nexport class NgbTypeahead implements ControlValueAccessor,\n OnInit, OnDestroy {\n private _popupService: PopupService;\n private _subscription: Subscription;\n private _closed$ = new Subject();\n private _inputValueBackup: string;\n private _valueChanges: Observable;\n private _resubscribeTypeahead: BehaviorSubject;\n private _windowRef: ComponentRef;\n private _zoneSubscription: any;\n\n /**\n * The value for the `autocomplete` attribute for the `` element.\n *\n * Defaults to `\"off\"` to disable the native browser autocomplete, but you can override it if necessary.\n *\n * @since 2.1.0\n */\n @Input() autocomplete = 'off';\n\n /**\n * A selector specifying the element the typeahead popup will be appended to.\n *\n * Currently only supports `\"body\"`.\n */\n @Input() container: string;\n\n /**\n * If `true`, model values will not be restricted only to items selected from the popup.\n */\n @Input() editable: boolean;\n\n /**\n * If `true`, the first item in the result list will always stay focused while typing.\n */\n @Input() focusFirst: boolean;\n\n /**\n * The function that converts an item from the result list to a `string` to display in the `` field.\n *\n * It is called when the user selects something in the popup or the model value changes, so the input needs to\n * be updated.\n */\n @Input() inputFormatter: (item: any) => string;\n\n /**\n * The function that converts a stream of text values from the `` element to the stream of the array of items\n * to display in the typeahead popup.\n *\n * If the resulting observable emits a non-empty array - the popup will be shown. If it emits an empty array - the\n * popup will be closed.\n *\n * See the [basic example](#/components/typeahead/examples#basic) for more details.\n *\n * Note that the `this` argument is `undefined` so you need to explicitly bind it to a desired \"this\" target.\n */\n @Input() ngbTypeahead: (text: Observable) => Observable;\n\n /**\n * The function that converts an item from the result list to a `string` to display in the popup.\n *\n * Must be provided, if your `ngbTypeahead` returns something other than `Observable`.\n *\n * Alternatively for more complex markup in the popup you should use `resultTemplate`.\n */\n @Input() resultFormatter: (item: any) => string;\n\n /**\n * The template to override the way resulting items are displayed in the popup.\n *\n * See the [ResultTemplateContext](#/components/typeahead/api#ResultTemplateContext) for the template context.\n *\n * Also see the [template for results demo](#/components/typeahead/examples#template) for more details.\n */\n @Input() resultTemplate: TemplateRef;\n\n /**\n * If `true`, will show the hint in the `` when an item in the result list matches.\n */\n @Input() showHint: boolean;\n\n /**\n * The preferred placement of the typeahead.\n *\n * Possible values are `\"top\"`, `\"top-left\"`, `\"top-right\"`, `\"bottom\"`, `\"bottom-left\"`,\n * `\"bottom-right\"`, `\"left\"`, `\"left-top\"`, `\"left-bottom\"`, `\"right\"`, `\"right-top\"`,\n * `\"right-bottom\"`\n *\n * Accepts an array of strings or a string with space separated possible values.\n *\n * The default order of preference is `\"bottom-left bottom-right top-left top-right\"`\n *\n * Please see the [positioning overview](#/positioning) for more details.\n */\n @Input() placement: PlacementArray = 'bottom-left';\n\n /**\n * An event emitted right before an item is selected from the result list.\n *\n * Event payload is of type [`NgbTypeaheadSelectItemEvent`](#/components/typeahead/api#NgbTypeaheadSelectItemEvent).\n */\n @Output() selectItem = new EventEmitter();\n\n activeDescendant: string;\n popupId = `ngb-typeahead-${nextWindowId++}`;\n\n private _onTouched = () => {};\n private _onChange = (_: any) => {};\n\n constructor(\n private _elementRef: ElementRef, private _viewContainerRef: ViewContainerRef,\n private _renderer: Renderer2, private _injector: Injector, componentFactoryResolver: ComponentFactoryResolver,\n config: NgbTypeaheadConfig, ngZone: NgZone, private _live: Live, @Inject(DOCUMENT) private _document: any,\n private _ngZone: NgZone, private _changeDetector: ChangeDetectorRef, private _applicationRef: ApplicationRef) {\n this.container = config.container;\n this.editable = config.editable;\n this.focusFirst = config.focusFirst;\n this.showHint = config.showHint;\n this.placement = config.placement;\n\n this._valueChanges = fromEvent(_elementRef.nativeElement, 'input')\n .pipe(map($event => ($event.target as HTMLInputElement).value));\n\n this._resubscribeTypeahead = new BehaviorSubject(null);\n\n this._popupService = new PopupService(\n NgbTypeaheadWindow, _injector, _viewContainerRef, _renderer, componentFactoryResolver, _applicationRef);\n\n this._zoneSubscription = ngZone.onStable.subscribe(() => {\n if (this.isPopupOpen()) {\n positionElements(\n this._elementRef.nativeElement, this._windowRef.location.nativeElement, this.placement,\n this.container === 'body');\n }\n });\n }\n\n ngOnInit(): void {\n const inputValues$ = this._valueChanges.pipe(tap(value => {\n this._inputValueBackup = this.showHint ? value : null;\n if (this.editable) {\n this._onChange(value);\n }\n }));\n const results$ = inputValues$.pipe(this.ngbTypeahead);\n const processedResults$ = results$.pipe(tap(() => {\n if (!this.editable) {\n this._onChange(undefined);\n }\n }));\n const userInput$ = this._resubscribeTypeahead.pipe(switchMap(() => processedResults$));\n this._subscription = this._subscribeToUserInput(userInput$);\n }\n\n ngOnDestroy(): void {\n this._closePopup();\n this._unsubscribeFromUserInput();\n this._zoneSubscription.unsubscribe();\n }\n\n registerOnChange(fn: (value: any) => any): void { this._onChange = fn; }\n\n registerOnTouched(fn: () => any): void { this._onTouched = fn; }\n\n writeValue(value) {\n this._writeInputValue(this._formatItemForInput(value));\n if (this.showHint) {\n this._inputValueBackup = value;\n }\n }\n\n setDisabledState(isDisabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n\n /**\n * Dismisses typeahead popup window\n */\n dismissPopup() {\n if (this.isPopupOpen()) {\n this._resubscribeTypeahead.next(null);\n this._closePopup();\n if (this.showHint && this._inputValueBackup !== null) {\n this._writeInputValue(this._inputValueBackup);\n }\n this._changeDetector.markForCheck();\n }\n }\n\n /**\n * Returns true if the typeahead popup window is displayed\n */\n isPopupOpen() { return this._windowRef != null; }\n\n handleBlur() {\n this._resubscribeTypeahead.next(null);\n this._onTouched();\n }\n\n handleKeyDown(event: KeyboardEvent) {\n if (!this.isPopupOpen()) {\n return;\n }\n\n // tslint:disable-next-line:deprecation\n switch (event.which) {\n case Key.ArrowDown:\n event.preventDefault();\n this._windowRef.instance.next();\n this._showHint();\n break;\n case Key.ArrowUp:\n event.preventDefault();\n this._windowRef.instance.prev();\n this._showHint();\n break;\n case Key.Enter:\n case Key.Tab:\n const result = this._windowRef.instance.getActive();\n if (isDefined(result)) {\n event.preventDefault();\n event.stopPropagation();\n this._selectResult(result);\n }\n this._closePopup();\n break;\n }\n }\n\n private _openPopup() {\n if (!this.isPopupOpen()) {\n this._inputValueBackup = this._elementRef.nativeElement.value;\n this._windowRef = this._popupService.open();\n this._windowRef.instance.id = this.popupId;\n this._windowRef.instance.selectEvent.subscribe((result: any) => this._selectResultClosePopup(result));\n this._windowRef.instance.activeChangeEvent.subscribe((activeId: string) => this.activeDescendant = activeId);\n\n if (this.container === 'body') {\n window.document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement);\n }\n\n this._changeDetector.markForCheck();\n\n ngbAutoClose(\n this._ngZone, this._document, 'outside', () => this.dismissPopup(), this._closed$,\n [this._elementRef.nativeElement, this._windowRef.location.nativeElement]);\n }\n }\n\n private _closePopup() {\n this._closed$.next();\n this._popupService.close();\n this._windowRef = null;\n this.activeDescendant = undefined;\n }\n\n private _selectResult(result: any) {\n let defaultPrevented = false;\n this.selectItem.emit({item: result, preventDefault: () => { defaultPrevented = true; }});\n this._resubscribeTypeahead.next(null);\n\n if (!defaultPrevented) {\n this.writeValue(result);\n this._onChange(result);\n }\n }\n\n private _selectResultClosePopup(result: any) {\n this._selectResult(result);\n this._closePopup();\n }\n\n private _showHint() {\n if (this.showHint && this._windowRef.instance.hasActive() && this._inputValueBackup != null) {\n const userInputLowerCase = this._inputValueBackup.toLowerCase();\n const formattedVal = this._formatItemForInput(this._windowRef.instance.getActive());\n\n if (userInputLowerCase === formattedVal.substr(0, this._inputValueBackup.length).toLowerCase()) {\n this._writeInputValue(this._inputValueBackup + formattedVal.substr(this._inputValueBackup.length));\n this._elementRef.nativeElement['setSelectionRange'].apply(\n this._elementRef.nativeElement, [this._inputValueBackup.length, formattedVal.length]);\n } else {\n this._writeInputValue(formattedVal);\n }\n }\n }\n\n private _formatItemForInput(item: any): string {\n return item != null && this.inputFormatter ? this.inputFormatter(item) : toString(item);\n }\n\n private _writeInputValue(value: string): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', toString(value));\n }\n\n private _subscribeToUserInput(userInput$: Observable): Subscription {\n return userInput$.subscribe((results) => {\n if (!results || results.length === 0) {\n this._closePopup();\n } else {\n this._openPopup();\n this._windowRef.instance.focusFirst = this.focusFirst;\n this._windowRef.instance.results = results;\n this._windowRef.instance.term = this._elementRef.nativeElement.value;\n if (this.resultFormatter) {\n this._windowRef.instance.formatter = this.resultFormatter;\n }\n if (this.resultTemplate) {\n this._windowRef.instance.resultTemplate = this.resultTemplate;\n }\n this._windowRef.instance.resetActive();\n\n // The observable stream we are subscribing to might have async steps\n // and if a component containing typeahead is using the OnPush strategy\n // the change detection turn wouldn't be invoked automatically.\n this._windowRef.changeDetectorRef.detectChanges();\n\n this._showHint();\n }\n\n // live announcer\n const count = results ? results.length : 0;\n this._live.say(count === 0 ? 'No results available' : `${count} result${count === 1 ? '' : 's'} available`);\n });\n }\n\n private _unsubscribeFromUserInput() {\n if (this._subscription) {\n this._subscription.unsubscribe();\n }\n this._subscription = null;\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\nimport {NgbHighlight} from './highlight';\nimport {NgbTypeaheadWindow} from './typeahead-window';\nimport {NgbTypeahead} from './typeahead';\n\nexport {NgbHighlight} from './highlight';\nexport {NgbTypeaheadWindow} from './typeahead-window';\nexport {NgbTypeaheadConfig} from './typeahead-config';\nexport {NgbTypeahead, NgbTypeaheadSelectItemEvent} from './typeahead';\n\n@NgModule({\n declarations: [NgbTypeahead, NgbHighlight, NgbTypeaheadWindow],\n exports: [NgbTypeahead, NgbHighlight],\n imports: [CommonModule],\n entryComponents: [NgbTypeaheadWindow]\n})\nexport class NgbTypeaheadModule {\n}\n","import {NgModule} from '@angular/core';\n\nimport {SbCardModule} from './card/card.module';\nimport {NgbAccordionModule} from './accordion/accordion.module';\nimport {NgbAlertModule} from './alert/alert.module';\nimport {NgbButtonsModule} from './buttons/buttons.module';\nimport {NgbCarouselModule} from './carousel/carousel.module';\nimport {NgbCollapseModule} from './collapse/collapse.module';\nimport {NgbDatepickerModule} from './datepicker/datepicker.module';\nimport {NgbDropdownModule} from './dropdown/dropdown.module';\nimport {NgbModalModule} from './modal/modal.module';\nimport {NgbPaginationModule} from './pagination/pagination.module';\nimport {NgbPopoverModule} from './popover/popover.module';\nimport {NgbProgressbarModule} from './progressbar/progressbar.module';\nimport {NgbRatingModule} from './rating/rating.module';\nimport {NgbTabsetModule} from './tabset/tabset.module';\nimport {NgbTimepickerModule} from './timepicker/timepicker.module';\nimport {NgbToastModule} from './toast/toast.module';\nimport {NgbTooltipModule} from './tooltip/tooltip.module';\nimport {NgbTypeaheadModule} from './typeahead/typeahead.module';\n\n\n\nexport {\n NgbAccordion,\n NgbAccordionConfig,\n NgbAccordionModule,\n NgbPanel,\n NgbPanelChangeEvent,\n NgbPanelContent,\n NgbPanelHeader,\n NgbPanelHeaderContext,\n NgbPanelTitle,\n NgbPanelToggle\n} from './accordion/accordion.module';\nexport {SbCard, SbCardConfig, SbCardModule} from './card/card.module';\nexport {NgbAlert, NgbAlertConfig, NgbAlertModule} from './alert/alert.module';\nexport {NgbButtonLabel, NgbButtonsModule, NgbCheckBox, NgbRadio, NgbRadioGroup} from './buttons/buttons.module';\nexport {\n NgbCarousel,\n NgbCarouselConfig,\n NgbCarouselModule,\n NgbSlide,\n NgbSlideEvent,\n NgbSlideEventDirection,\n NgbSlideEventSource\n} from './carousel/carousel.module';\nexport {NgbCollapse, NgbCollapseModule} from './collapse/collapse.module';\nexport {\n NgbCalendar,\n NgbCalendarGregorian,\n NgbCalendarHebrew,\n NgbCalendarIslamicCivil,\n NgbCalendarIslamicUmalqura,\n NgbCalendarPersian,\n NgbDate,\n NgbDateAdapter,\n NgbDateNativeAdapter,\n NgbDateNativeUTCAdapter,\n NgbDateParserFormatter,\n NgbDatepicker,\n NgbDatepickerConfig,\n NgbDatepickerI18n,\n NgbDatepickerI18nHebrew,\n NgbDatepickerModule,\n NgbDatepickerNavigateEvent,\n NgbDateStruct,\n NgbInputDatepicker,\n NgbPeriod\n} from './datepicker/datepicker.module';\nexport {\n NgbDropdown,\n NgbDropdownAnchor,\n NgbDropdownConfig,\n NgbDropdownItem,\n NgbDropdownMenu,\n NgbDropdownModule,\n NgbDropdownToggle\n} from './dropdown/dropdown.module';\nexport {\n ModalDismissReasons,\n NgbActiveModal,\n NgbModal,\n NgbModalConfig,\n NgbModalModule,\n NgbModalOptions,\n NgbModalRef\n} from './modal/modal.module';\nexport {\n NgbPagination,\n NgbPaginationConfig,\n NgbPaginationEllipsis,\n NgbPaginationFirst,\n NgbPaginationLast,\n NgbPaginationModule,\n NgbPaginationNext,\n NgbPaginationNumber,\n NgbPaginationPrevious\n} from './pagination/pagination.module';\nexport {NgbPopover, NgbPopoverConfig, NgbPopoverModule} from './popover/popover.module';\nexport {NgbProgressbar, NgbProgressbarConfig, NgbProgressbarModule} from './progressbar/progressbar.module';\nexport {NgbRating, NgbRatingConfig, NgbRatingModule} from './rating/rating.module';\nexport {\n NgbTab,\n NgbTabChangeEvent,\n NgbTabContent,\n NgbTabset,\n NgbTabsetConfig,\n NgbTabsetModule,\n NgbTabTitle\n} from './tabset/tabset.module';\nexport {\n NgbTimeAdapter,\n NgbTimepickerI18n,\n NgbTimepicker,\n NgbTimepickerConfig,\n NgbTimepickerModule,\n NgbTimeStruct\n} from './timepicker/timepicker.module';\nexport {NgbToast, NgbToastConfig, NgbToastHeader, NgbToastModule} from './toast/toast.module';\nexport {NgbTooltip, NgbTooltipConfig, NgbTooltipModule} from './tooltip/tooltip.module';\nexport {\n NgbHighlight,\n NgbTypeahead,\n NgbTypeaheadConfig,\n NgbTypeaheadModule,\n NgbTypeaheadSelectItemEvent\n} from './typeahead/typeahead.module';\nexport {Placement} from './util/positioning';\n\n\nconst NGB_MODULES = [\n SbCardModule, NgbAccordionModule, NgbAlertModule, NgbButtonsModule, NgbCarouselModule, NgbCollapseModule, NgbDatepickerModule,\n NgbDropdownModule, NgbModalModule, NgbPaginationModule, NgbPopoverModule, NgbProgressbarModule, NgbRatingModule,\n NgbTabsetModule, NgbTimepickerModule, NgbToastModule, NgbTooltipModule, NgbTypeaheadModule\n];\n\n@NgModule({imports: NGB_MODULES, exports: NGB_MODULES})\nexport class NgbModule {\n}\n"],"names":["Injectable","EventEmitter","Component","ChangeDetectionStrategy","ViewEncapsulation","Renderer2","ElementRef","Input","Output","NgModule","CommonModule","Directive","TemplateRef","ContentChildren","Optional","Host","NG_VALUE_ACCESSOR","forwardRef","ChangeDetectorRef","nextId","Subject","BehaviorSubject","isPlatformBrowser","combineLatest","map","startWith","distinctUntilChanged","switchMap","timer","NEVER","takeUntil","Inject","PLATFORM_ID","NgZone","HostListener","tslib_1.__extends","LOCALE_ID","getLocaleDayNames","FormStyle","TranslationWidth","getLocaleMonthNames","formatDate","filter","take","fromEvent","merge","ViewChild","withLatestFrom","delay","race","tslib_1.__values","NGB_DATEPICKER_VALUE_ACCESSOR","NG_VALIDATORS","ViewContainerRef","ComponentFactoryResolver","DOCUMENT","mod","GREGORIAN_EPOCH","isGregorianLeapYear","fromGregorian","toGregorian","FormsModule","ContentChild","Injector","ApplicationRef","RendererFactory2","Observable","share","getLocaleDayPeriods","Attribute","InjectionToken","tap"],"mappings":"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E,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;QAE9E,cAAc;KACf;;;;;;IAED,SAAS,WAAW,CAAC,KAAW,EAAE,KAAW;;;YAErC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;;YACxE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;;YACxE,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;QACpC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC;KACnC;AAED;QACgDmC,8CAAuB;QADvE;;SAuEC;;;;;;;;;;;QAjEC,kDAAa;;;;;;QAAb,UAAc,KAAW;;gBACnB,IAAI,GAAG,CAAC;;gBAAE,MAAM,GAAG,CAAC;;gBAAE,KAAK,GAAG,IAAI;;gBAClC,QAAQ,GAAG,WAAW,CAAC,KAAK,EAAE,oBAAoB,CAAC;YACvD,IAAI,KAAK,CAAC,OAAO,EAAE,GAAG,oBAAoB,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,GAAG,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;;oBAC7G,IAAI,GAAG,IAAI;gBACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE;oBACpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;;4BACvB,SAAS,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;wBACxC,IAAI,QAAQ,IAAI,SAAS,EAAE;4BACzB,IAAI,GAAG,QAAQ,GAAG,CAAC,CAAC;4BACpB,IAAI,IAAI,GAAG,SAAS,EAAE;gCACpB,IAAI,GAAG,CAAC,CAAC;gCACT,CAAC,EAAE,CAAC;6BACL;4BACD,IAAI,CAAC,GAAG,EAAE,EAAE;gCACV,CAAC,GAAG,CAAC,CAAC;gCACN,IAAI,EAAE,CAAC;6BACR;4BACD,MAAM,GAAG,CAAC,CAAC;4BACX,KAAK,GAAG,IAAI,CAAC;4BACb,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;yBAC7C;wBACD,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;qBACjC;iBACF;aACF;iBAAM;gBACL,OAAO,iBAAM,aAAa,YAAC,KAAK,CAAC,CAAC;aACnC;SACF;;;;;;;;;QAID,gDAAW;;;;;QAAX,UAAY,KAAc;;gBAClB,KAAK,GAAG,KAAK,CAAC,IAAI;;gBAClB,MAAM,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC;;gBACxB,IAAI,GAAG,KAAK,CAAC,GAAG;;gBAClB,KAAK,GAAG,IAAI,IAAI,CAAC,oBAAoB,CAAC;;gBACtC,OAAO,GAAG,IAAI,GAAG,CAAC;YACtB,IAAI,KAAK,IAAI,WAAW,IAAI,KAAK,IAAI,SAAS,EAAE;gBAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE;oBAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;wBAC3B,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;qBACrC;iBACF;gBACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC/B,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;iBACvD;gBACD,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC;aACzD;iBAAM;gBACL,KAAK,GAAG,iBAAM,WAAW,YAAC,KAAK,CAAC,CAAC;aAClC;YACD,OAAO,KAAK,CAAC;SACd;;;;;;;;;;;;;;QAMD,oDAAe;;;;;;;;QAAf,UAAgB,MAAc,EAAE,KAAa;YAC3C,IAAI,KAAK,IAAI,WAAW,IAAI,KAAK,IAAI,SAAS,EAAE;;oBACxC,GAAG,GAAG,KAAK,GAAG,WAAW;gBAC/B,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;aAC5C;YACD,OAAO,iBAAM,eAAe,YAAC,MAAM,EAAE,KAAK,CAAC,CAAC;SAC7C;;oBAtEFnC,eAAU;;QAuEX,iCAAC;KAAA,CAtE+C,uBAAuB;;;;;;ICvJvE;;;;;;IAMA,SAAgB,WAAW,CAAC,UAAmB;;YACzC,GAAG,GAAG,cAAc,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC;;YACvE,IAAI,GAAG,iBAAiB,CAAC,GAAG,CAAC;QACjC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC;KACb;;;;;;;;IAOD,SAAgB,aAAa,CAAC,KAAW;;YACnC,GAAG,GAAG,iBAAiB,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;QACvF,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC;KAC5B;;;;;;IAED,SAAgB,aAAa,CAAC,IAAa,EAAE,SAAiB;QAC5D,IAAI,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC;QACvB,OAAO,IAAI,CAAC;KACb;;;;;;IAED,SAAgB,cAAc,CAAC,IAAa,EAAE,KAAa;QACzD,KAAK,GAAG,CAAC,KAAK,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QACrD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;QAC1D,OAAO,IAAI,CAAC;KACb;;;;;;IAED,SAAgB,YAAY,CAAC,IAAa,EAAE,GAAW;;YACjD,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC;QAClD,IAAI,GAAG,IAAI,CAAC,EAAE;YACZ,OAAO,GAAG,IAAI,CAAC,EAAE;gBACf,IAAI,GAAG,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBAC5C,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC/C,GAAG,IAAI,KAAK,CAAC;aACd;SACF;aAAM,IAAI,GAAG,GAAG,KAAK,EAAE;YACtB,OAAO,GAAG,GAAG,KAAK,EAAE;gBAClB,GAAG,IAAI,KAAK,CAAC;gBACb,IAAI,GAAG,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBAC5C,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;aAChD;SACF;QACD,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,OAAO,IAAI,CAAC;KACb;;;;;;IAED,SAASwD,KAAG,CAAC,CAAS,EAAE,CAAS;QAC/B,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;KAClC;;;;;;IAED,SAAS,GAAG,CAAC,CAAS,EAAE,CAAS;QAC/B,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;KAC1B;;;;;;;;;;;;;;;;;;IAeD,SAAS,MAAM,CAAC,UAAkB;;;YAE5B,MAAM,GACN,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;;YAC3G,YAAY,GAAG,MAAM,CAAC,MAAM;;YAC5B,KAAK,GAAG,UAAU,GAAG,GAAG;;YAC1B,KAAK,GAAG,CAAC,EAAE;;YACX,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC;QAElB,IAAI,UAAU,GAAG,EAAE,IAAI,UAAU,IAAI,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC,EAAE;YAC7D,MAAM,IAAI,KAAK,CAAC,sBAAsB,GAAG,UAAU,CAAC,CAAC;SACtD;;;YAGG,IAAI;QACR,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,IAAI,CAAC,EAAE;;gBAClC,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC;YACpB,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC;YACf,IAAI,UAAU,GAAG,EAAE,EAAE;gBACnB,MAAM;aACP;YACD,KAAK,GAAG,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,CAACA,KAAG,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1D,EAAE,GAAG,EAAE,CAAC;SACT;;YACG,CAAC,GAAG,UAAU,GAAG,EAAE;;;QAIvB,KAAK,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,CAACA,KAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACxD,IAAIA,KAAG,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE;YACzC,KAAK,IAAI,CAAC,CAAC;SACZ;;;YAGK,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG;;;YAG/D,KAAK,GAAG,EAAE,GAAG,KAAK,GAAG,KAAK;;QAGhC,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE;YAChB,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC;SACvC;;YACG,IAAI,GAAGA,KAAG,CAACA,KAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACrC,IAAI,IAAI,KAAK,CAAC,CAAC,EAAE;YACf,IAAI,GAAG,CAAC,CAAC;SACV;QAED,OAAO,EAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAC,CAAC;KAC9C;;;;;;;;;;;;;;;IAYD,SAAS,iBAAiB,CAAC,eAAuB;;YAC5C,CAAC,GAAG,CAAC,GAAG,eAAe,GAAG,SAAS;QACvC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,eAAe,GAAG,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;;YACtE,CAAC,GAAG,GAAG,CAACA,KAAG,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;;YAClC,IAAI,GAAG,GAAG,CAACA,KAAG,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC;;YAC9B,MAAM,GAAGA,KAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC;;YACjC,KAAK,GAAG,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC;QAExD,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;KAC1C;;;;;;;;;;;;;;IASD,SAAS,iBAAiB,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU;;YACvD,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAGA,KAAG,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,QAAQ;QACzG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,MAAM,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC;QACjE,OAAO,CAAC,CAAC;KACV;;;;;;;;;;;;;IAUD,SAAS,cAAc,CAAC,eAAuB;;YACzC,EAAE,GAAG,iBAAiB,CAAC,eAAe,CAAC,CAAC,WAAW,EAAE;;;YAErD,UAAU,GAAG,EAAE,GAAG,GAAG;;YAAE,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC;;YAAE,YAAY,GAAG,iBAAiB,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC;;YAAE,SAAS;;YAC1G,WAAW;;YAAE,YAAY;;QAG7B,YAAY,GAAG,eAAe,GAAG,YAAY,CAAC;QAC9C,IAAI,YAAY,IAAI,CAAC,EAAE;YACrB,IAAI,YAAY,IAAI,GAAG,EAAE;;gBAEvB,WAAW,GAAG,CAAC,GAAG,GAAG,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;gBACxC,SAAS,GAAGA,KAAG,CAAC,YAAY,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;gBACtC,OAAO,IAAI,OAAO,CAAC,UAAU,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;aACxD;iBAAM;;gBAEL,YAAY,IAAI,GAAG,CAAC;aACrB;SACF;aAAM;;YAEL,UAAU,IAAI,CAAC,CAAC;YAChB,YAAY,IAAI,GAAG,CAAC;YACpB,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE;gBAChB,YAAY,IAAI,CAAC,CAAC;aACnB;SACF;QACD,WAAW,GAAG,CAAC,GAAG,GAAG,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QACxC,SAAS,GAAGA,KAAG,CAAC,YAAY,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;QAEtC,OAAO,IAAI,OAAO,CAAC,UAAU,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;KACxD;;;;;;;;;;;;;;IASD,SAAS,cAAc,CAAC,KAAa,EAAE,MAAc,EAAE,IAAY;;YAC7D,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;QACrB,OAAO,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;KAC3G;;;;;;;IAKD,SAAS,eAAe,CAAC,KAAa,EAAE,IAAY;QAClD,IAAI,KAAK,IAAI,CAAC,EAAE;YACd,OAAO,EAAE,CAAC;SACX;QACD,IAAI,KAAK,IAAI,EAAE,EAAE;YACf,OAAO,EAAE,CAAC;SACX;QACD,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE;YAC3B,OAAO,EAAE,CAAC;SACX;QACD,OAAO,EAAE,CAAC;KACX;;;;;;;QC1NuCrB,sCAAW;QADnD;;SA0DC;;;;QAxDC,2CAAc;;;QAAd,cAAmB,OAAO,CAAC,CAAC,EAAE;;;;QAE9B,sCAAS;;;QAAT,cAAc,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE;;;;QAE/D,6CAAgB;;;QAAhB,cAAqB,OAAO,CAAC,CAAC,EAAE;;;;;;;QAEhC,oCAAO;;;;;;QAAP,UAAQ,IAAa,EAAE,MAAuB,EAAE,MAAU;YAAnC,uBAAA,EAAA,YAAuB;YAAE,uBAAA,EAAA,UAAU;YACxD,IAAI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YAEpD,QAAQ,MAAM;gBACZ,KAAK,GAAG;oBACN,IAAI,GAAG,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC;oBAC/C,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;oBACf,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;oBACb,OAAO,IAAI,CAAC;gBACd,KAAK,GAAG;oBACN,IAAI,GAAG,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;oBACjD,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;oBACb,OAAO,IAAI,CAAC;gBACd,KAAK,GAAG;oBACN,OAAO,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC;gBAC/C;oBACE,OAAO,IAAI,CAAC;aACf;SACF;;;;;;;QAED,oCAAO;;;;;;QAAP,UAAQ,IAAa,EAAE,MAAuB,EAAE,MAAU;YAAnC,uBAAA,EAAA,YAAuB;YAAE,uBAAA,EAAA,UAAU;YAAI,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC;SAAE;;;;;QAE3G,uCAAU;;;;QAAV,UAAW,IAAa;;gBAChB,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE;;YAEtC,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;SAC5B;;;;;;QAED,0CAAa;;;;;QAAb,UAAc,IAAe,EAAE,cAAsB;;YAEnD,IAAI,cAAc,KAAK,CAAC,EAAE;gBACxB,cAAc,GAAG,CAAC,CAAC;aACpB;;gBAEK,aAAa,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,cAAc,IAAI,CAAC;;gBAC5C,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC;;gBAE1B,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC;YAChC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;;;gBACxD,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE;;gBACvB,SAAS,GAAG,WAAW,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC3D,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,SAAS,CAAC,OAAO,EAAE,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;SAChF;;;;QAED,qCAAQ;;;QAAR,cAAsB,OAAO,aAAa,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE;;;;;QAEzD,oCAAO;;;;QAAP,UAAQ,IAAa;YACnB,OAAO,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;gBAC/E,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;SACzC;;oBAzDFnC,eAAU;;QA0DX,yBAAC;KAAA,CAzDuC,WAAW;;;;;;ICRnD;QAGM,cAAc,GAAG,IAAI;;QACrB,aAAa,GAAG,EAAE,GAAG,cAAc;;QACnC,sBAAsB,GAAG,EAAE,GAAG,cAAc,GAAG,GAAG;;QAClD,eAAe,GAAG,EAAE,GAAG,aAAa,GAAG,sBAAsB;;QAC7D,OAAO,GAAG,EAAE,GAAG,cAAc,GAAG,GAAG;;QACnC,wBAAwB,GAAG,OAAO;;QAClCyD,iBAAe,GAAG,SAAS;;;;;IAEjC,SAASC,qBAAmB,CAAC,IAAY;QACvC,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC;KAC/D;;;;;IAED,SAAS,sBAAsB,CAAC,IAAY;;YACtC,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,EAAE,CAAC;;YACtD,0BAA0B,GAAG,gBAAgB,GAAG,sBAAsB,GAAG,OAAO;;YAChF,SAAS,GAAG,gBAAgB,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,0BAA0B,GAAG,aAAa,CAAC;;YAC1F,SAAS,GAAG,0BAA0B,GAAG,aAAa;;YAEtD,SAAS,GAAG,SAAS,GAAG,CAAC;QAE7B,IAAI,SAAS,KAAK,CAAC,IAAI,SAAS,KAAK,CAAC,IAAI,SAAS,KAAK,CAAC,EAAE;YACzD,SAAS,EAAE,CAAC;YACZ,SAAS,GAAG,SAAS,GAAG,CAAC,CAAC;SAC3B;QACD,IAAI,SAAS,KAAK,CAAC,IAAI,SAAS,GAAG,EAAE,GAAG,cAAc,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;YACvF,SAAS,IAAI,CAAC,CAAC;SAChB;aAAM,IAAI,SAAS,KAAK,CAAC,IAAI,SAAS,GAAG,EAAE,GAAG,cAAc,GAAG,GAAG,IAAI,gBAAgB,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE;YACjG,SAAS,EAAE,CAAC;SACb;QACD,OAAO,SAAS,CAAC;KAClB;;;;;;IAED,SAAS,uBAAuB,CAAC,KAAa,EAAE,IAAY;;YACtD,IAAI,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QAC3D,IAAIA,qBAAmB,CAAC,IAAI,CAAC,EAAE;YAC7B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;SACX;QACD,OAAO,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;KACxB;;;;;IAED,SAAS,eAAe,CAAC,IAAY;QACnC,OAAO,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;KACzC;;;;;;;IAMD,SAAS,mBAAmB,CAAC,IAAY;QACvC,OAAO,sBAAsB,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;KACxE;;;;;IAED,SAAgB,gBAAgB,CAAC,IAAY;;YACvC,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE;QAC7B,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;KACjC;;;;;;;;;IAOD,SAAgB,oBAAoB,CAAC,KAAa,EAAE,IAAY;;YAC1D,UAAU,GAAG,sBAAsB,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,sBAAsB,CAAC,IAAI,CAAC;;YAC5E,QAAQ,GAAG,CAAC,UAAU,IAAI,GAAG,GAAG,UAAU,IAAI,UAAU,GAAG,EAAE,CAAC,IAAI,GAAG;;YACrE,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC;;YACjC,WAAW,GAAG,QAAQ,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;YACpD,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QAC7E,IAAI,QAAQ,GAAG,CAAC,EAAE;YAChB,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;SAClB;QACD,IAAI,QAAQ,GAAG,CAAC,EAAE;YAChB,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;SAClB;QACD,OAAO,WAAW,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;KAC/B;;;;;IAED,SAAgB,wBAAwB,CAAC,IAAa;;YAChD,WAAW,GAAG,CAAC;QACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;YACnC,WAAW,IAAI,oBAAoB,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;SACnD;QACD,OAAO,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC;KAC/B;;;;;;IAED,SAAgB,cAAc,CAAC,IAAa,EAAE,GAAW;;YACnD,KAAK,GAAG,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,KAAK,EAAE;YACV,GAAG,GAAG,CAAC,GAAG,CAAC;SACZ;QACD,OAAO,GAAG,GAAG,CAAC,EAAE;YACd,IAAI,KAAK,EAAE;gBACT,IAAI,GAAG,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE;oBACjD,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;oBACnD,IAAI,CAAC,IAAI,EAAE,CAAC;oBACZ,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;iBAChB;qBAAM;oBACL,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC;oBAClB,GAAG,GAAG,CAAC,CAAC;iBACT;aACF;iBAAM;gBACL,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE;oBACrB,IAAI,CAAC,IAAI,EAAE,CAAC;oBACZ,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC;oBAClB,IAAI,CAAC,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACzC;qBAAM;oBACL,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC;oBAClB,GAAG,GAAG,CAAC,CAAC;iBACT;aACF;SACF;QACD,OAAO,IAAI,CAAC;KACb;;;;;;IAED,SAAgB,YAAY,CAAC,IAAa,EAAE,GAAW;;YACjD,KAAK,GAAG,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,KAAK,EAAE;YACV,GAAG,GAAG,CAAC,GAAG,CAAC;SACZ;QACD,OAAO,GAAG,GAAG,CAAC,EAAE;YACd,IAAI,KAAK,EAAE;gBACT,IAAI,GAAG,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,wBAAwB,CAAC,IAAI,CAAC,EAAE;oBACzE,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,wBAAwB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAC3E,IAAI,CAAC,IAAI,EAAE,CAAC;oBACZ,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;oBACf,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;iBACd;qBAAM,IAAI,GAAG,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE;oBACvE,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;oBAClE,IAAI,CAAC,KAAK,EAAE,CAAC;oBACb,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;iBACd;qBAAM;oBACL,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC;oBAChB,GAAG,GAAG,CAAC,CAAC;iBACT;aACF;iBAAM;gBACL,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE;oBACnB,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;oBAChB,IAAI,CAAC,KAAK,EAAE,CAAC;oBACb,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,EAAE;wBACpB,IAAI,CAAC,IAAI,EAAE,CAAC;wBACZ,IAAI,CAAC,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;qBACzC;oBACD,IAAI,CAAC,GAAG,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;iBACxD;qBAAM;oBACL,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC;oBAChB,GAAG,GAAG,CAAC,CAAC;iBACT;aACF;SACF;QACD,OAAO,IAAI,CAAC;KACb;;;;;;;IAMD,SAAgBC,eAAa,CAAC,KAAW;;YACjC,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC;;YACtB,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;;YAAE,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE;;YAAE,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;;YAC7E,SAAS,GAAGF,iBAAe,GAAG,CAAC,GAAG,GAAG,IAAI,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;YACjF,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC;YAC7D,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,EAAE,IAAI,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAGC,qBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QACrH,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC;;YACpC,iBAAiB,GAAG,SAAS,GAAG,MAAM;;YACtC,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,GAAG,aAAa,GAAG,eAAe,CAAC;;YACrF,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,mBAAmB,GAAG,EAAE,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC;;YAC9D,kBAAkB,GAAG,sBAAsB,CAAC,KAAK,CAAC;;YAClD,SAAS,GAAG,iBAAiB,GAAG,kBAAkB;QACtD,OAAO,SAAS,GAAG,CAAC,EAAE;YACpB,KAAK,EAAE,CAAC;YACR,kBAAkB,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;YACnD,SAAS,GAAG,iBAAiB,GAAG,kBAAkB,CAAC;SACpD;;YACG,MAAM,GAAG,CAAC;;YACV,IAAI,GAAG,SAAS;QACpB,OAAO,IAAI,GAAG,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE;YACjD,IAAI,IAAI,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC5C,MAAM,EAAE,CAAC;SACV;QACD,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;KACzC;;;;;;;IAMD,SAAgBE,aAAW,CAAC,UAAmC;;YACvD,KAAK,GAAG,UAAU,CAAC,IAAI;;YACvB,MAAM,GAAG,UAAU,CAAC,KAAK;;YACzB,IAAI,GAAG,UAAU,CAAC,GAAG;;YACvB,IAAI,GAAG,sBAAsB,CAAC,KAAK,CAAC;QACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;YAC/B,IAAI,IAAI,oBAAoB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;SACxC;QACD,IAAI,IAAI,IAAI,CAAC;;YACT,QAAQ,GAAG,IAAI,GAAG,wBAAwB;;YAC1C,KAAK,GAAG,QAAQ,IAAI,CAAC;QACzB,IAAI,CAAC,KAAK,EAAE;YACV,QAAQ,GAAG,CAAC,QAAQ,CAAC;SACtB;;YACG,KAAK,GAAG,IAAI;;YACZ,MAAM,GAAG,CAAC;;YACV,IAAI,GAAG,CAAC;QACZ,OAAO,QAAQ,GAAG,CAAC,EAAE;YACnB,IAAI,KAAK,EAAE;gBACT,IAAI,QAAQ,KAAKF,qBAAmB,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE;oBACxD,QAAQ,IAAIA,qBAAmB,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;oBACnD,KAAK,EAAE,CAAC;iBACT;qBAAM,IAAI,QAAQ,IAAI,uBAAuB,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE;oBAC7D,QAAQ,IAAI,uBAAuB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;oBACnD,MAAM,EAAE,CAAC;iBACV;qBAAM;oBACL,IAAI,IAAI,QAAQ,CAAC;oBACjB,QAAQ,GAAG,CAAC,CAAC;iBACd;aACF;iBAAM;gBACL,IAAI,QAAQ,KAAKA,qBAAmB,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE;oBAC5D,QAAQ,IAAIA,qBAAmB,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;oBACvD,KAAK,EAAE,CAAC;iBACT;qBAAM;oBACL,IAAI,MAAM,GAAG,CAAC,EAAE;wBACd,MAAM,EAAE,CAAC;qBACV;yBAAM;wBACL,MAAM,GAAG,EAAE,CAAC;wBACZ,KAAK,EAAE,CAAC;qBACT;oBACD,IAAI,QAAQ,IAAI,uBAAuB,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE;wBACtD,QAAQ,IAAI,uBAAuB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;qBACpD;yBAAM;wBACL,IAAI,GAAG,uBAAuB,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC;wBAC7D,QAAQ,GAAG,CAAC,CAAC;qBACd;iBACF;aACF;SACF;QACD,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;KAC1C;;;;;IAED,SAAgB,cAAc,CAAC,QAAgB;QAC7C,IAAI,CAAC,QAAQ,EAAE;YACb,OAAO,EAAE,CAAC;SACX;;YACK,SAAS,GAAG,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;;YAC1G,WAAW,GAAG;YAClB,QAAQ,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;YACxG,cAAc,EAAE,cAAc,EAAE,cAAc;SAC/C;;YACK,WAAW,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;;YACtG,aAAa,GAAG;YACpB,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;YAC1G,oBAAoB;SACrB;;YACK,eAAe,GAAG;YACtB,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc;YAChG,oBAAoB,EAAE,oBAAoB;SAC3C;;YACK,MAAM,GAAG,QAAQ;;YAAE,QAAQ,GAAG,QAAQ;;YACxC,GAAG,GAAG,CAAC;;YACP,MAAM,GAAG,EAAE;;YACX,IAAI,GAAG,CAAC;QACZ,OAAO,QAAQ,GAAG,CAAC,EAAE;;gBACf,CAAC,GAAG,QAAQ,GAAG,EAAE;YACrB,IAAI,IAAI,KAAK,CAAC,EAAE;gBACd,GAAG,GAAG,CAAC,CAAC;aACT;iBAAM,IAAI,IAAI,KAAK,CAAC,EAAE;gBACrB,IAAI,CAAC,KAAK,CAAC,EAAE;oBACX,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;iBAChD;qBAAM;oBACL,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;iBAClC;aACF;iBAAM,IAAI,IAAI,KAAK,CAAC,EAAE;gBACrB,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;aAClC;iBAAM;gBACL,IAAI,CAAC,KAAK,CAAC,EAAE;oBACX,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;iBACjD;gBACD,MAAM;aACP;YACD,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;YACrC,IAAI,IAAI,KAAK,CAAC,IAAI,QAAQ,KAAK,CAAC,EAAE;gBAChC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;aAC9B;YACD,IAAI,EAAE,CAAC;SACR;QACD,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACnC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;YACvB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACrB;aAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YAC5B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;SAC/C;QACD,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KACxB;;;;;;;;;ACrRD;QACuCvB,qCAAW;QADlD;;SAiEC;;;;QA/DC,0CAAc;;;QAAd,cAAmB,OAAO,CAAC,CAAC,EAAE;;;;;QAE9B,qCAAS;;;;QAAT,UAAU,IAAa;YACrB,IAAI,IAAI,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAE;gBAClC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;aACpD;iBAAM;gBACL,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;aAChD;SACF;;;;QAED,4CAAgB;;;QAAhB,cAAqB,OAAO,CAAC,CAAC,EAAE;;;;;QAEhC,mCAAO;;;;QAAP,UAAQ,IAAa;;gBACf,CAAC,GAAG,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;YACjF,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,KAAK,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;YACjF,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YACjF,OAAO,CAAC,IAAI,CAAC,KAAK,CAACyB,aAAW,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;SACjD;;;;;;;QAED,mCAAO;;;;;;QAAP,UAAQ,IAAa,EAAE,MAAuB,EAAE,MAAU;YAAnC,uBAAA,EAAA,YAAuB;YAAE,uBAAA,EAAA,UAAU;YACxD,IAAI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YAEpD,QAAQ,MAAM;gBACZ,KAAK,GAAG;oBACN,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC;oBACpB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;oBACf,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;oBACb,OAAO,IAAI,CAAC;gBACd,KAAK,GAAG;oBACN,IAAI,GAAG,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;oBACpC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;oBACb,OAAO,IAAI,CAAC;gBACd,KAAK,GAAG;oBACN,OAAO,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBACpC;oBACE,OAAO,IAAI,CAAC;aACf;SACF;;;;;;;QAED,mCAAO;;;;;;QAAP,UAAQ,IAAa,EAAE,MAAuB,EAAE,MAAU;YAAnC,uBAAA,EAAA,YAAuB;YAAE,uBAAA,EAAA,UAAU;YAAI,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC;SAAE;;;;;QAE3G,sCAAU;;;;QAAV,UAAW,IAAa;;gBAChB,GAAG,GAAGA,aAAW,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE;;YAEtC,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;SAC5B;;;;;;QAED,yCAAa;;;;;QAAb,UAAc,IAAe,EAAE,cAAsB;;gBAC7C,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;YAClC,OAAO,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;SACtD;;;;QAED,oCAAQ;;;QAAR,cAAsB,OAAOD,eAAa,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE;;;;;;;;;QAKzD,uCAAW;;;;;QAAX,UAAY,IAAa,IAAa,OAAO,UAAU,CAACC,aAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;;;;;;;;;QAK7E,yCAAa;;;;;QAAb,UAAc,IAAa,IAAa,OAAOD,eAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;;oBAhEhF3D,eAAU;;QAiEX,wBAAC;KAAA,CAhEsC,WAAW;;;;;;;QCZ5C,QAAQ,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC;;QACrE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC;;QACpG,WAAW,GACb,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC;;;;AAK5G;QAC6CmC,2CAAiB;QAD9D;;SAmBC;;;;;;QAjBC,mDAAiB;;;;;QAAjB,UAAkB,KAAa,EAAE,IAAa,IAAY,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE;;;;;;QAEtG,kDAAgB;;;;;QAAhB,UAAiB,KAAa,EAAE,IAAa;YAC3C,OAAO,gBAAgB,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;SAC5E;;;;;QAED,qDAAmB;;;;QAAnB,UAAoB,OAAe,IAAY,OAAO,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE;;;;;QAE9E,iDAAe;;;;QAAf,UAAgB,IAAmB;YACjC,OAAU,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,SAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,SAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAG,CAAC;SACnH;;;;;QAED,gDAAc;;;;QAAd,UAAe,IAAmB,IAAY,OAAO,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE;;;;;QAEhF,iDAAe;;;;QAAf,UAAgB,UAAkB,IAAY,OAAO,cAAc,CAAC,UAAU,CAAC,CAAC,EAAE;;;;;QAElF,iDAAe;;;;QAAf,UAAgB,IAAY,IAAY,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE;;oBAlBvEnC,eAAU;;QAmBX,8BAAC;KAAA,CAlB4C,iBAAiB;;;;;;;;;;ACN9D;QAC0CmC,wCAAoB;QAD9D;;SA2BC;;;;;;;;;QAtBC,wCAAS;;;;;QAAT,UAAU,IAAU;YAClB,OAAO,CAAC,IAAI,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;SAC7F;;;;;;;;;QAKD,sCAAO;;;;;QAAP,UAAQ,IAAmB;YACzB,OAAO,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;gBACxB,IAAI,CAAC;SAC5F;;;;;;QAES,8CAAe;;;;;QAAzB,UAA0B,IAAU;YAClC,OAAO,EAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,EAAC,CAAC;SACpF;;;;;;QAES,4CAAa;;;;;QAAvB,UAAwB,IAAmB;;gBACnC,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;;YAEhE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9B,OAAO,MAAM,CAAC;SACf;;oBA1BFnC,eAAU;;QA2BX,2BAAC;KAAA,CA1ByC,cAAc;;;;;;;;;;;ACDxD;QAC6CmC,2CAAoB;QADjE;;SAYC;;;;;;QAVW,iDAAe;;;;;QAAzB,UAA0B,IAAU;YAClC,OAAO,EAAC,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,EAAC,CAAC;SAC7F;;;;;;QAES,+CAAa;;;;;QAAvB,UAAwB,IAAmB;;gBACnC,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;;YAEtE,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjC,OAAO,MAAM,CAAC;SACf;;oBAXFnC,eAAU;;QAYX,8BAAC;KAAA,CAX4C,oBAAoB;;;;;;ACVjE;QA+BA;SAUC;;oBAVAS,aAAQ,SAAC;wBACR,YAAY,EAAE;4BACZ,aAAa,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,6BAA6B,EAAE,oBAAoB;4BACnH,kBAAkB;yBACnB;wBACD,OAAO,EAAE,CAAC,aAAa,EAAE,kBAAkB,CAAC;wBAC5C,OAAO,EAAE,CAACC,mBAAY,EAAEmD,iBAAW,CAAC;wBACpC,eAAe,EAAE,CAAC,aAAa,CAAC;qBACjC;;QAED,0BAAC;KAVD;;;;;;IC/BA;;;;;;AASA;QAAA;YAEE,cAAS,GAAmC,IAAI,CAAC;YACjD,cAAS,GAAmB,CAAC,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;SAEtF;;oBALA7D,eAAU,SAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;gCAThC;KASA;;;;;;;QCoBA;SAEC;;oBAFAW,cAAS,SAAC,EAAC,QAAQ,EAAE,SAAS,EAAC;;QAEhC,gBAAC;KAFD,IAEC;;;;;;;AAQD;QAWE,yBAAmB,UAAmC;YAAnC,eAAU,GAAV,UAAU,CAAyB;YAT9C,cAAS,GAAG,KAAK,CAAC;SASgC;QAP1D,sBACI,qCAAQ;;;;YAIZ,cAA0B,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE;;;;;YALlD,UACa,KAAc;gBACzB,IAAI,CAAC,SAAS,GAAG,mBAAK,KAAK,OAAK,EAAE,IAAI,KAAK,KAAK,IAAI,CAAC;aACtD;;;WAAA;;oBAPFA,cAAS,SAAC,EAAC,QAAQ,EAAE,mBAAmB,EAAE,IAAI,EAAE,EAAC,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,UAAU,EAAC,EAAC;;;;oBAlC1GL,eAAU;;;+BAsCTC,UAAK;;QAQR,sBAAC;KAZD,IAYC;;;;AAKD;QAoBE,yBAA0D,QAAQ;YAAR,aAAQ,GAAR,QAAQ,CAAA;YALlE,cAAS,GAAc,QAAQ,CAAC;YAChC,WAAM,GAAG,KAAK,CAAC;SAIuD;;oBApBvEI,cAAS,SAAC;wBACT,QAAQ,EAAE,mBAAmB;wBAC7B,IAAI,EAAE;4BACJ,uBAAuB,EAAE,MAAM;4BAC/B,cAAc,EAAE,mBAAmB;4BACnC,oBAAoB,EAAE,WAAW;4BACjC,mBAAmB,EAAE,4BAA4B;4BACjD,qBAAqB,EAAE,4BAA4B;4BACnD,gBAAgB,EAAE,4BAA4B;4BAC9C,eAAe,EAAE,4BAA4B;4BAC7C,iBAAiB,EAAE,4BAA4B;4BAC/C,iBAAiB,EAAE,4BAA4B;yBAChD;qBACF;;;;oDAOcoB,WAAM,SAACd,eAAU;;;4BAAC,cAAM,OAAA,WAAW,GAAA,EAAC;;;gCAFhDJ,oBAAe,SAAC,eAAe;;QAGlC,sBAAC;KArBD,IAqBC;;;;;;;;;;AAWD;QAOE,2BAA0D,QAAQ,EAAU,WAAoC;YAAtD,aAAQ,GAAR,QAAQ,CAAA;YAAU,gBAAW,GAAX,WAAW,CAAyB;YAC9G,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,aAAa,CAAC;SAC3C;;;;QAED,4CAAgB;;;QAAhB,cAAqB,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE;;oBAX9DF,cAAS,SAAC;wBACT,QAAQ,EAAE,qBAAqB;wBAC/B,IAAI,EAAE,EAAC,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,EAAE,sBAAsB,EAAE,mBAAmB,EAAC;qBACzG;;;;oDAIcoB,WAAM,SAACd,eAAU;;;4BAAC,cAAM,OAAA,WAAW,GAAA,EAAC;oBA1FjDX,eAAU;;QA+FZ,wBAAC;KAZD,IAYC;;;;;;AAOD;QAcuC6B,qCAAiB;QACtD,2BAAmD,QAAQ,EAAE,UAAmC;mBAC9F,kBAAM,QAAQ,EAAE,UAAU,CAAC;SAC5B;;oBAjBFxB,cAAS,SAAC;wBACT,QAAQ,EAAE,qBAAqB;wBAC/B,IAAI,EAAE;4BACJ,OAAO,EAAE,iBAAiB;4BAC1B,eAAe,EAAE,MAAM;4BACvB,sBAAsB,EAAE,mBAAmB;4BAC3C,SAAS,EAAE,mBAAmB;4BAC9B,mBAAmB,EAAE,4BAA4B;4BACjD,qBAAqB,EAAE,4BAA4B;4BACnD,gBAAgB,EAAE,4BAA4B;4BAC9C,eAAe,EAAE,4BAA4B;yBAC9C;wBACD,SAAS,EAAE,CAAC,EAAC,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAEM,eAAU;;;gCAAC,cAAM,OAAA,iBAAiB,GAAA,EAAC,EAAC,CAAC;qBAC5F;;;;oDAEcc,WAAM,SAACd,eAAU;;;4BAAC,cAAM,OAAA,WAAW,GAAA,EAAC;oBArHjDX,eAAU;;QAwHZ,wBAAC;KAAA,CAJsC,iBAAiB,GAIvD;;;;AAKD;QAmEE,qBACY,eAAkC,EAAE,MAAyB,EAA4B,SAAc,EACvG,OAAe,EAAU,WAAoC,EAAU,SAAoB,EACvF,SAAoB;YAHpC,iBAWC;YAVW,oBAAe,GAAf,eAAe,CAAmB;YAAuD,cAAS,GAAT,SAAS,CAAK;YACvG,YAAO,GAAP,OAAO,CAAQ;YAAU,gBAAW,GAAX,WAAW,CAAyB;YAAU,cAAS,GAAT,SAAS,CAAW;YAnE/F,aAAQ,GAAG,IAAIc,YAAO,EAAQ,CAAC;;;;YAqBxB,UAAK,GAAG,KAAK,CAAC;;;;;;;;YA0CnB,eAAU,GAAG,IAAInB,iBAAY,EAAW,CAAC;YAMjD,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;YAClC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;YAClC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;YAElC,IAAI,CAAC,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;YAEhD,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS;;;YAAC,cAAQ,KAAI,CAAC,aAAa,EAAE,CAAC,EAAE,EAAC,CAAC;SACtF;;;;QAED,wCAAkB;;;QAAlB;YAAA,iBAOC;YANC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC0C,cAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;;;YAAC;gBAC5C,KAAI,CAAC,sBAAsB,EAAE,CAAC;gBAC9B,IAAI,KAAI,CAAC,KAAK,EAAE;oBACd,KAAI,CAAC,iBAAiB,EAAE,CAAC;iBAC1B;aACF,EAAC,CAAC;SACJ;;;;;QAED,iCAAW;;;;QAAX,UAAY,OAAsB;YAChC,IAAI,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,EAAE;gBACnC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aACtC;YAED,IAAI,OAAO,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,aAAa,EAAE;gBACzD,IAAI,CAAC,sBAAsB,EAAE,CAAC;aAC/B;SACF;;;;;;;;QAKD,4BAAM;;;;QAAN,cAAoB,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE;;;;;;;;QAKxC,0BAAI;;;;QAAJ;YACE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;gBACf,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;gBAClB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACrC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC3B,IAAI,CAAC,iBAAiB,EAAE,CAAC;aAC1B;SACF;;;;;QAEO,uCAAiB;;;;QAAzB;YAAA,iBAMC;;gBALO,MAAM,GAAG,IAAI,CAAC,OAAO;YAC3B,YAAY,CACR,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS;;;YAAE,cAAM,OAAA,KAAI,CAAC,KAAK,EAAE,GAAA,GAAE,IAAI,CAAC,QAAQ,EAC/E,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,GAAG,EAAE,EAAE,MAAM,GAAG,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,GAAG,EAAE,EAC9F,kCAAkC,CAAC,CAAC;SACzC;;;;;;;;QAKD,2BAAK;;;;QAAL;YACE,IAAI,IAAI,CAAC,KAAK,EAAE;gBACd,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;gBACnB,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvB,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACrB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC5B,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;aACrC;SACF;;;;;;;;QAKD,4BAAM;;;;QAAN;YACE,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;gBACjB,IAAI,CAAC,KAAK,EAAE,CAAC;aACd;iBAAM;gBACL,IAAI,CAAC,IAAI,EAAE,CAAC;aACb;SACF;;;;QAED,iCAAW;;;QAAX;YACE,IAAI,CAAC,eAAe,EAAE,CAAC;YAEvB,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACrB,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC;SACtC;;;;;QAED,+BAAS;;;;QAAT,UAAU,KAAoB;YAA9B,iBAuDC;;;gBArDO,GAAG,GAAG,KAAK,CAAC,KAAK;;gBACjB,YAAY,GAAG,IAAI,CAAC,gBAAgB,EAAE;;gBAExC,QAAQ,GAAG,CAAC,CAAC;;gBACb,gBAAgB,GAAG,KAAK;;gBACtB,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;YAExD,IAAI,CAAC,iBAAiB,IAAI,YAAY,CAAC,MAAM,EAAE;gBAC7C,YAAY,CAAC,OAAO;;;;;gBAAC,UAAC,WAAW,EAAE,KAAK;oBACtC,IAAI,WAAW,CAAC,QAAQ,oBAAC,KAAK,CAAC,MAAM,GAAgB,EAAE;wBACrD,gBAAgB,GAAG,IAAI,CAAC;qBACzB;oBACD,IAAI,WAAW,KAAK,KAAI,CAAC,SAAS,CAAC,aAAa,EAAE;wBAChD,QAAQ,GAAG,KAAK,CAAC;qBAClB;iBACF,EAAC,CAAC;aACJ;;YAGD,IAAI,GAAG,KAAK,GAAG,CAAC,KAAK,IAAI,GAAG,KAAK,GAAG,CAAC,KAAK,EAAE;gBAC1C,IAAI,gBAAgB,KAAK,IAAI,CAAC,SAAS,KAAK,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,EAAE;oBAChF,IAAI,CAAC,KAAK,EAAE,CAAC;iBACd;gBACD,OAAO;aACR;;YAGD,IAAI,iBAAiB,IAAI,gBAAgB,EAAE;gBACzC,IAAI,CAAC,IAAI,EAAE,CAAC;gBAEZ,IAAI,YAAY,CAAC,MAAM,EAAE;oBACvB,QAAQ,GAAG;wBACT,KAAK,GAAG,CAAC,SAAS;4BAChB,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,EAAE,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;4BAC3D,MAAM;wBACR,KAAK,GAAG,CAAC,OAAO;4BACd,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE;gCACvC,QAAQ,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;gCACnC,MAAM;6BACP;4BACD,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;4BACrC,MAAM;wBACR,KAAK,GAAG,CAAC,IAAI;4BACX,QAAQ,GAAG,CAAC,CAAC;4BACb,MAAM;wBACR,KAAK,GAAG,CAAC,GAAG;4BACV,QAAQ,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;4BACnC,MAAM;qBACT;oBACD,YAAY,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC;iBAChC;gBACD,KAAK,CAAC,cAAc,EAAE,CAAC;aACxB;SACF;;;;;QAEO,+BAAS;;;;QAAjB,cAA+B,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE;;;;;;QAE5F,wCAAkB;;;;;QAA1B,UAA2B,KAAoB;YAC7C,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,QAAQ,oBAAC,KAAK,CAAC,MAAM,GAAgB,CAAC;SAC9E;;;;;QAEO,sCAAgB;;;;QAAxB;;gBACQ,IAAI,GAAG,IAAI,CAAC,KAAK;YACvB,IAAI,IAAI,IAAI,IAAI,EAAE;gBAChB,OAAO,EAAE,CAAC;aACX;YACD,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM;;;;YAAC,UAAA,IAAI,IAAI,OAAA,CAAC,IAAI,CAAC,QAAQ,GAAA,EAAC,CAAC,GAAG;;;;YAAC,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,UAAU,CAAC,aAAa,GAAA,EAAC,CAAC;SACjG;;;;;QAEO,mCAAa;;;;QAArB;;gBACQ,IAAI,GAAG,IAAI,CAAC,KAAK;YACvB,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE;gBACzB,IAAI,CAAC,sBAAsB,CACvB,IAAI,CAAC,OAAO,KAAK,SAAS;oBACtB,gBAAgB,CACZ,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,EAC7F,IAAI,CAAC,SAAS,KAAK,MAAM,CAAC;oBAC9B,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;aAClD;SACF;;;;;;QAEO,wCAAkB;;;;;QAA1B,UAA2B,SAAyB;YAClD,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,sBAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAa,CAAC;SACvF;;;;;QAEO,qCAAe;;;;QAAvB;;gBACQ,QAAQ,GAAG,IAAI,CAAC,SAAS;;gBACzB,WAAW,GAAG,IAAI,CAAC,YAAY;YACrC,IAAI,WAAW,EAAE;;oBACT,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa;;oBAChD,mBAAmB,GAAG,WAAW,CAAC,aAAa;gBAErD,QAAQ,CAAC,WAAW,CAAC,eAAe,EAAE,mBAAmB,CAAC,CAAC;gBAC3D,QAAQ,CAAC,WAAW,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAC;gBACtD,QAAQ,CAAC,WAAW,CAAC,mBAAmB,EAAE,WAAW,CAAC,CAAC;aACxD;YACD,IAAI,IAAI,CAAC,cAAc,EAAE;gBACvB,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;gBAC/D,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;aAC5B;SACF;;;;;;QAEO,qCAAe;;;;;QAAvB,UAAwB,SAA+B;YAA/B,0BAAA,EAAA,gBAA+B;YACrD,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,SAAS,KAAK,MAAM,EAAE;;oBAClB,QAAQ,GAAG,IAAI,CAAC,SAAS;;oBACzB,mBAAmB,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa;;oBACrD,aAAa,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;;gBAGhG,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;gBACzD,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;gBAC7D,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;gBAEpD,QAAQ,CAAC,WAAW,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC;gBACzD,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;aAC1D;SACF;;;;;;QAEO,4CAAsB;;;;;QAA9B,UAA+B,SAAqB;;gBAC5C,IAAI,GAAG,IAAI,CAAC,KAAK;YACvB,IAAI,IAAI,EAAE;gBACR,IAAI,CAAC,SAAS,EAAE;oBACd,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;iBACrD;;oBAEK,QAAQ,GAAG,IAAI,CAAC,SAAS;;oBACzB,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa;;gBAGtD,QAAQ,CAAC,WAAW,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;gBAChD,QAAQ,CAAC,WAAW,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;gBAClD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,KAAK,QAAQ,GAAG,IAAI,GAAG,SAAS,CAAC;;;;;;oBAMxD,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,GAAG,UAAU;gBAC7E,QAAQ,CAAC,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;;oBAE5C,aAAa,GAAG,IAAI,CAAC,cAAc;gBACzC,IAAI,aAAa,EAAE;oBACjB,QAAQ,CAAC,WAAW,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;oBAC9C,QAAQ,CAAC,WAAW,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;oBAChD,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;iBACjD;aACF;SACF;;oBAjTFhC,cAAS,SAAC,EAAC,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,EAAC,cAAc,EAAE,UAAU,EAAC,EAAC;;;;oBAjIjGO,sBAAiB;oBA0BX,iBAAiB;oDA2KqDa,WAAM,SAACwB,eAAQ;oBA5L3FtB,WAAM;oBALN3B,eAAU;oBAUVD,cAAS;oBAyLkB,SAAS,uBAA/BS,aAAQ;;;4BAhEZgD,iBAAY,SAAC,eAAe,EAAE,EAAC,MAAM,EAAE,KAAK,EAAC;mCAC7CA,iBAAY,SAAC,eAAe,EAAE,EAAC,IAAI,EAAExD,eAAU,EAAE,MAAM,EAAE,KAAK,EAAC;8BAC/DwD,iBAAY,SAAC,iBAAiB,EAAE,EAAC,MAAM,EAAE,KAAK,EAAC;gCAU/CvD,UAAK;4BAKLA,UAAK,SAAC,MAAM;gCAeZA,UAAK;gCAQLA,UAAK;8BAULA,UAAK;iCASLC,WAAM;;QAiPT,kBAAC;KAlTD;;;;;;IClIA;QAaM,uBAAuB,GACzB,CAAC,WAAW,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe,EAAE,SAAS,CAAC;AAEpG;QAAA;SAEC;;oBAFAC,aAAQ,SAAC,EAAC,YAAY,EAAE,uBAAuB,EAAE,OAAO,EAAE,uBAAuB,EAAC;;QAEnF,wBAAC;KAFD;;;;;;IChBA;;;;;;;;AA+FA;QAAA;YAEE,aAAQ,GAAuB,IAAI,CAAC;YACpC,aAAQ,GAAG,IAAI,CAAC;SACjB;;oBAJAT,eAAU,SAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;6BA/FhC;KA+FA;;;;;;AC/FA;QAYE,oBAAmB,KAAY,EAAS,OAAiB,EAAS,YAAgC;YAA/E,UAAK,GAAL,KAAK,CAAO;YAAS,YAAO,GAAP,OAAO,CAAU;YAAS,iBAAY,GAAZ,YAAY,CAAoB;SAAI;QACxG,iBAAC;KAAA,IAAA;;;;IAED;;;;QAIE,sBACY,KAAU,EAAU,SAAmB,EAAU,iBAAmC,EACpF,SAAoB,EAAU,yBAAmD,EACjF,eAA+B;YAF/B,UAAK,GAAL,KAAK,CAAK;YAAU,cAAS,GAAT,SAAS,CAAU;YAAU,sBAAiB,GAAjB,iBAAiB,CAAkB;YACpF,cAAS,GAAT,SAAS,CAAW;YAAU,8BAAyB,GAAzB,yBAAyB,CAA0B;YACjF,oBAAe,GAAf,eAAe,CAAgB;SAAI;;;;;;QAE/C,2BAAI;;;;;QAAJ,UAAK,OAAmC,EAAE,OAAa;YACrD,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;gBACpB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACzD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,eAAe,CACpD,IAAI,CAAC,yBAAyB,CAAC,uBAAuB,CAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,EACxF,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;aAC7B;YAED,OAAO,IAAI,CAAC,UAAU,CAAC;SACxB;;;;QAED,4BAAK;;;QAAL;YACE,IAAI,IAAI,CAAC,UAAU,EAAE;gBACnB,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACxF,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;gBAEvB,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;oBAC5B,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;oBAC1D,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;oBACnC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;iBACzB;aACF;SACF;;;;;;;QAEO,qCAAc;;;;;;QAAtB,UAAuB,OAAkC,EAAE,OAAa;YACtE,IAAI,CAAC,OAAO,EAAE;gBACZ,OAAO,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;aAC3B;iBAAM,IAAI,OAAO,YAAYY,gBAAW,EAAE;;oBACnC,OAAO,GAAG,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC;gBACnD,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;gBACzC,OAAO,IAAI,UAAU,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;aACrD;iBAAM;gBACL,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,KAAG,OAAS,CAAC,CAAC,CAAC,CAAC,CAAC;aACpE;SACF;QACH,mBAAC;KAAA,IAAA;;;;;;IC3DD;QAIM,IAAI;;;IAAG,eAAQ,CAAA;;;;;;;AAerB;QAEE,mBAAsC,SAAc;YAAd,cAAS,GAAT,SAAS,CAAK;SAAI;;;;;;;;;;;;;;;QASxD,8BAAU;;;;;;;QAAV,cAAqC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE;;;;;;;;;;;;;QAOrG,+BAAW;;;;;;;QAAnB,UAAoB,KAAa;;gBACzB,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI;;gBAC1B,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY;;gBACxC,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,CAAC;YAChF,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,GAAM,aAAa,GAAG,KAAK,OAAI,CAAC;YAC3D;;;YAAO,cAAM,OAAA,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,cAAc,GAAA,EAAC;SAC3D;;;;;;;;;;;;QAOO,8BAAU;;;;;;QAAlB;;gBACQ,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,qBAAqB,EAAE;YACxD,OAAO,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC;SACnD;;;;;;;;;;;;QAOO,6BAAS;;;;;;QAAjB;;gBACQ,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC;YACpD,QAAQ,CAAC,SAAS,GAAG,yBAAyB,CAAC;;gBAEzC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI;YAChC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;;gBACrB,KAAK,GAAG,QAAQ,CAAC,qBAAqB,EAAE,CAAC,KAAK,GAAG,QAAQ,CAAC,WAAW;YAC3E,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAE3B,OAAO,KAAK,CAAC;SACd;;oBAnDFZ,eAAU,SAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;;oDAEjB+B,WAAM,SAACwB,eAAQ;;;wBArB9B;KAmBA;;;;;;ACnBA;QAEA;SAQC;;oBARArD,cAAS,SAAC;wBACT,QAAQ,EAAE,oBAAoB;wBAC9B,QAAQ,EAAE,EAAE;wBACZ,IAAI,EACA,EAAC,SAAS,EAAE,yEAAyE,EAAE,OAAO,EAAE,eAAe,EAAC;qBACrH;;;oCAEEK,UAAK;;QACR,uBAAC;KARD;;;;;;;;;;;;ACWA;;;;;;;QAAA;SAcC;;;;;;;;;;;;;QARC,8BAAK;;;;;;;QAAL,UAAM,MAAY,KAAU;;;;;;;;;;;;;QAO5B,gCAAO;;;;;;;QAAP,UAAQ,MAAY,KAAU;QAChC,qBAAC;KAAA,IAAA;;;;AAKD;;;;QAoBE,qBACY,cAA4C,EAAU,WAAuB,EAC7E,gBAAiD,EAAU,cAAyB;YAFhG,iBAUC;YATW,mBAAc,GAAd,cAAc,CAA8B;YAAU,gBAAW,GAAX,WAAW,CAAY;YAC7E,qBAAgB,GAAhB,gBAAgB,CAAiC;YAAU,mBAAc,GAAd,cAAc,CAAW;YAC9F,cAAc,CAAC,QAAQ,CAAC,YAAY,CAAC,SAAS;;;;YAAC,UAAC,MAAW,IAAO,KAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,EAAC,CAAC;YAE3F,IAAI,CAAC,MAAM,GAAG,IAAI,OAAO;;;;;YAAC,UAAC,OAAO,EAAE,MAAM;gBACxC,KAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;gBACxB,KAAI,CAAC,OAAO,GAAG,MAAM,CAAC;aACvB,EAAC,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI;;;YAAE,eAAQ,EAAC,CAAC;SAClC;QArBD,sBAAI,0CAAiB;;;;;;;;;;;;YAArB;gBACE,IAAI,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE;oBACjC,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,QAAQ,CAAC;iBAC/C;aACF;;;WAAA;;;;;;;;;;;;;QAwBD,2BAAK;;;;;;;QAAL,UAAM,MAAY;YAChB,IAAI,IAAI,CAAC,cAAc,EAAE;gBACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACtB,IAAI,CAAC,oBAAoB,EAAE,CAAC;aAC7B;SACF;;;;;;QAEO,8BAAQ;;;;;QAAhB,UAAiB,MAAY;YAC3B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACrB,IAAI,CAAC,oBAAoB,EAAE,CAAC;SAC7B;;;;;;;;;;;;;QAOD,6BAAO;;;;;;;QAAP,UAAQ,MAAY;YAApB,iBAmBC;YAlBC,IAAI,IAAI,CAAC,cAAc,EAAE;gBACvB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;oBACxB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;iBACvB;qBAAM;;wBACC,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE;oBACrC,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE;wBAC3B,OAAO,CAAC,IAAI;;;;wBACR,UAAA,MAAM;4BACJ,IAAI,MAAM,KAAK,KAAK,EAAE;gCACpB,KAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;6BACvB;yBACF;;;wBACD,eAAQ,EAAC,CAAC;qBACf;yBAAM,IAAI,OAAO,KAAK,KAAK,EAAE;wBAC5B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;qBACvB;iBACF;aACF;SACF;;;;;QAEO,0CAAoB;;;;QAA5B;;gBACQ,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,aAAa;YACjE,cAAc,CAAC,UAAU,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;YACtD,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;YAE9B,IAAI,IAAI,CAAC,gBAAgB,EAAE;;oBACnB,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,aAAa;gBACrE,gBAAgB,CAAC,UAAU,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;gBAC1D,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;aACjC;YAED,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;gBAChD,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;aACpC;YAED,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;YAC7B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;SACzB;QACH,kBAAC;KAAA;;;;;;;;QC7HC,iBAAc;QACd,MAAG;;;;;;;;;ACFL;QAmDE,wBAAsC,SAAc,EAAU,MAA+B;YAAvD,cAAS,GAAT,SAAS,CAAK;YAAU,WAAM,GAAN,MAAM,CAAyB;YATpF,aAAQ,GAAqB,IAAI,CAAC;YAElC,aAAQ,GAAG,IAAI,CAAC;YAKN,iBAAY,GAAG,IAAIN,iBAAY,EAAE,CAAC;SAE4C;;;;;QAEjG,sCAAa;;;;QAAb,UAAc,MAAM;YAClB,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,KAAK,MAAM,CAAC,MAAM,EAAE;gBACzE,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC;aAClD;SACF;;;;;QAED,+BAAM;;;;QAAN,UAAO,MAAM;YACX,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE;gBAC7C,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;aACvC;SACF;;;;;QAED,gCAAO;;;;QAAP,UAAQ,MAAM,IAAU,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE;;;;QAEzD,iCAAQ;;;QAAR,cAAa,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE;;;;QAEhE,wCAAe;;;QAAf;YACE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;;oBACzD,aAAa,sBAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC,gBAAgB,CAAC,EAAe;;oBACxF,cAAc,GAAG,4BAA4B,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;;oBAE3E,cAAc,GAAG,aAAa,IAAI,cAAc,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa;gBACnF,cAAc,CAAC,KAAK,EAAE,CAAC;aACxB;SACF;;;;QAED,oCAAW;;;QAAX;;gBACQ,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI;;gBAC1B,WAAW,GAAG,IAAI,CAAC,YAAY;;gBAEjC,cAAc;YAClB,IAAI,WAAW,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;gBACrE,cAAc,GAAG,WAAW,CAAC;aAC9B;iBAAM;gBACL,cAAc,GAAG,IAAI,CAAC;aACvB;YACD,cAAc,CAAC,KAAK,EAAE,CAAC;YACvB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;SAC1B;;oBA1EFC,cAAS,SAAC;wBACT,QAAQ,EAAE,kBAAkB;wBAC5B,IAAI,EAAE;4BACJ,SAAS,EAAE,oEAAoE;4BAC/E,MAAM,EAAE,QAAQ;4BAChB,UAAU,EAAE,IAAI;4BAChB,aAAa,EAAE,gBAAgB;4BAC/B,SAAS,EAAE,uBAAuB;4BAClC,mBAAmB,EAAE,MAAM;4BAC3B,wBAAwB,EAAE,gBAAgB;yBAC3C;wBACD,QAAQ,EAAE,uRAKP;wBACH,aAAa,EAAEE,sBAAiB,CAAC,IAAI;;qBAEtC;;;;oDAec2B,WAAM,SAACwB,eAAQ;oBA/C5BjD,eAAU;;;qCAqCTC,UAAK;+BACLA,UAAK;+BACLA,UAAK;+BACLA,UAAK;iCACLA,UAAK;2BACLA,UAAK;kCACLA,UAAK;mCAELC,WAAM,SAAC,SAAS;;QA2CnB,qBAAC;KA3ED;;;;;;ACjBA;QAgCE,uBACY,eAA+B,EAAU,SAAmB,EAA4B,SAAc,EACtG,UAAqB,EAAU,gBAAkC;YAF7E,iBAYC;YAXW,oBAAe,GAAf,eAAe,CAAgB;YAAU,cAAS,GAAT,SAAS,CAAU;YAA4B,cAAS,GAAT,SAAS,CAAK;YACtG,eAAU,GAAV,UAAU,CAAW;YAAU,qBAAgB,GAAhB,gBAAgB,CAAkB;YAVrE,gCAA2B,GAAG,IAAIY,YAAO,EAAE,CAAC;YAC5C,sBAAiB,GAAyB,IAAI,GAAG,EAAE,CAAC;YACpD,wBAAmB,GAAG,CAAC,eAAe,CAAC,CAAC;YACxC,eAAU,GAAkB,EAAE,CAAC;YAC/B,sBAAiB,GACrB,CAAC,gBAAgB,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;YACxF,iBAAY,GAAmC,EAAE,CAAC;;YAMxD,IAAI,CAAC,2BAA2B,CAAC,SAAS;;;YAAC;gBACzC,IAAI,KAAI,CAAC,YAAY,CAAC,MAAM,EAAE;;wBACtB,gBAAgB,GAAG,KAAI,CAAC,YAAY,CAAC,KAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;oBACxE,YAAY,CAAC,gBAAgB,CAAC,QAAQ,CAAC,aAAa,EAAE,KAAI,CAAC,2BAA2B,CAAC,CAAC;oBACxF,KAAI,CAAC,iBAAiB,EAAE,CAAC;oBACzB,KAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;iBAC9D;aACF,EAAC,CAAC;SACJ;;;;;;;;QAED,4BAAI;;;;;;;QAAJ,UAAK,SAAmC,EAAE,eAAyB,EAAE,OAAY,EAAE,OAAO;YAA1F,iBA0CC;;gBAzCO,WAAW,GACb,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI;;gBAClG,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC;;gBAE3D,yBAAyB,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE;;gBACxD,eAAe;;;YAAG;gBACtB,IAAI,CAAC,KAAI,CAAC,UAAU,CAAC,MAAM,EAAE;oBAC3B,QAAQ,CAAC,WAAW,CAAC,KAAI,CAAC,SAAS,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;oBACxD,KAAI,CAAC,iBAAiB,EAAE,CAAC;iBAC1B;aACF,CAAA;YAED,IAAI,CAAC,WAAW,EAAE;gBAChB,MAAM,IAAI,KAAK,CAAC,sCAAkC,OAAO,CAAC,SAAS,IAAI,MAAM,kCAA6B,CAAC,CAAC;aAC7G;;gBAEK,WAAW,GAAG,IAAI,cAAc,EAAE;;gBAClC,UAAU,GACZ,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,OAAO,CAAC,QAAQ,IAAI,eAAe,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC;;gBAElG,eAAe,GACf,OAAO,CAAC,QAAQ,KAAK,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,WAAW,CAAC,GAAG,IAAI;;gBAChF,aAAa,GAAiC,IAAI,CAAC,sBAAsB,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,CAAC;;gBAC7G,WAAW,GAAgB,IAAI,WAAW,CAAC,aAAa,EAAE,UAAU,EAAE,eAAe,EAAE,OAAO,CAAC,aAAa,CAAC;YAEjH,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;YACpC,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;YACxC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE,yBAAyB,CAAC,CAAC;YAC9E,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;YAC1D,WAAW,CAAC,KAAK;;;;YAAG,UAAC,MAAW,IAAO,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAA,CAAC;YACpE,WAAW,CAAC,OAAO;;;;YAAG,UAAC,MAAW,IAAO,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAA,CAAC;YAExE,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC1D,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;gBAChC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;aACtD;YAED,IAAI,eAAe,IAAI,eAAe,CAAC,QAAQ,EAAE;gBAC/C,IAAI,CAAC,qBAAqB,CAAC,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;aAC/D;YACD,OAAO,WAAW,CAAC;SACpB;;;;;QAED,kCAAU;;;;QAAV,UAAW,MAAY,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO;;;;QAAC,UAAA,WAAW,IAAI,OAAA,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,GAAA,EAAC,CAAC,EAAE;;;;QAEjG,qCAAa;;;QAAb,cAA2B,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE;;;;;;;QAEvD,uCAAe;;;;;;QAAvB,UAAwB,SAAmC,EAAE,WAAgB;;gBACvE,eAAe,GAAG,SAAS,CAAC,uBAAuB,CAAC,gBAAgB,CAAC;;gBACrE,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;YAC5D,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YAC1D,WAAW,CAAC,WAAW,CAAC,eAAe,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;YAChE,OAAO,eAAe,CAAC;SACxB;;;;;;;;QAEO,8CAAsB;;;;;;;QAA9B,UAA+B,SAAmC,EAAE,WAAgB,EAAE,UAAe;;gBAE/F,aAAa,GAAG,SAAS,CAAC,uBAAuB,CAAC,cAAc,CAAC;;gBACjE,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,KAAK,CAAC;YAC1E,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YACxD,WAAW,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;YAC9D,OAAO,aAAa,CAAC;SACtB;;;;;;;QAEO,2CAAmB;;;;;;QAA3B,UAA4B,cAA8B,EAAE,OAAe;YACzE,IAAI,CAAC,iBAAiB,CAAC,OAAO;;;;YAAC,UAAC,UAAkB;gBAChD,IAAI,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE;oBAClC,cAAc,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;iBAClD;aACF,EAAC,CAAC;SACJ;;;;;;;QAEO,6CAAqB;;;;;;QAA7B,UAA8B,gBAAkC,EAAE,OAAe;YAC/E,IAAI,CAAC,mBAAmB,CAAC,OAAO;;;;YAAC,UAAC,UAAkB;gBAClD,IAAI,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE;oBAClC,gBAAgB,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;iBACpD;aACF,EAAC,CAAC;SACJ;;;;;;;;;;QAEO,sCAAc;;;;;;;;;QAAtB,UACI,SAAmC,EAAE,eAAyB,EAAE,OAAY,EAAE,WAA2B,EACzG,OAAwB;YAC1B,IAAI,CAAC,OAAO,EAAE;gBACZ,OAAO,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;aAC3B;iBAAM,IAAI,OAAO,YAAYR,gBAAW,EAAE;gBACzC,OAAO,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;aAC1D;iBAAM,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE;gBAC5B,OAAO,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;aACxC;iBAAM;gBACL,OAAO,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;aAC7F;SACF;;;;;;;QAEO,8CAAsB;;;;;;QAA9B,UAA+B,OAAyB,EAAE,WAA2B;;gBAC7E,OAAO,GAAG;gBACd,SAAS,EAAE,WAAW;gBACtB,KAAK;;;;0BAAC,MAAM,IAAI,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE;gBAC5C,OAAO;;;;0BAAC,MAAM,IAAI,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE;aACjD;;gBACK,OAAO,GAAG,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC;YACnD,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACzC,OAAO,IAAI,UAAU,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;SACrD;;;;;;QAEO,yCAAiB;;;;;QAAzB,UAA0B,OAAe;;gBACjC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,KAAG,OAAS,CAAC;YAC7D,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;SACtC;;;;;;;;;;QAEO,4CAAoB;;;;;;;;;QAA5B,UACI,SAAmC,EAAE,eAAyB,EAAE,OAAY,EAAE,OAAuB,EACrG,OAAwB;;gBACpB,kBAAkB,GAAG,SAAS,CAAC,uBAAuB,CAAC,OAAO,CAAC;;gBAC/D,oBAAoB,GACtBmD,aAAQ,CAAC,MAAM,CAAC,EAAC,SAAS,EAAE,CAAC,EAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAC,CAAC,EAAE,MAAM,EAAE,eAAe,EAAC,CAAC;;gBACnG,YAAY,GAAG,kBAAkB,CAAC,MAAM,CAAC,oBAAoB,CAAC;;gBAC9D,iBAAiB,GAAG,YAAY,CAAC,QAAQ,CAAC,aAAa;YAC7D,IAAI,OAAO,CAAC,UAAU,EAAE;gBACtB,oBAAC,iBAAiB,IAAiB,SAAS,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;aAC/E;YACD,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;;;YAGvD,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,EAAE,YAAY,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;SACnF;;;;;;QAEO,sCAAc;;;;;QAAtB,UAAuB,OAAgB;YAAvC,iBAYC;;gBAXO,MAAM,GAAG,OAAO,CAAC,aAAa;YACpC,IAAI,MAAM,IAAI,OAAO,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;gBAC7C,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO;;;;gBAAC,UAAA,OAAO;oBACzC,IAAI,OAAO,KAAK,OAAO,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE;wBACxD,KAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC;wBACzE,OAAO,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;qBAC7C;iBACF,EAAC,CAAC;gBAEH,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;aAC7B;SACF;;;;;QAEO,yCAAiB;;;;QAAzB;YACE,IAAI,CAAC,iBAAiB,CAAC,OAAO;;;;;YAAC,UAAC,KAAK,EAAE,OAAO;gBAC5C,IAAI,KAAK,EAAE;oBACT,OAAO,CAAC,YAAY,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;iBAC5C;qBAAM;oBACL,OAAO,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;iBACxC;aACF,EAAC,CAAC;YACH,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;SAChC;;;;;;QAEO,yCAAiB;;;;;QAAzB,UAA0B,WAAwB;YAAlD,iBASC;;gBARO,kBAAkB;;;YAAG;;oBACnB,KAAK,GAAG,KAAI,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC;gBAClD,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;oBACd,KAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;iBAClC;aACF,CAAA;YACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAClC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC;SACjE;;;;;;QAEO,2CAAmB;;;;;QAA3B,UAA4B,aAA2C;YAAvE,iBAWC;YAVC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACtC,IAAI,CAAC,2BAA2B,CAAC,IAAI,EAAE,CAAC;YAExC,aAAa,CAAC,SAAS;;;YAAC;;oBAChB,KAAK,GAAG,KAAI,CAAC,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC;gBACtD,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;oBACd,KAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;oBACnC,KAAI,CAAC,2BAA2B,CAAC,IAAI,EAAE,CAAC;iBACzC;aACF,EAAC,CAAC;SACJ;;oBAvMF/D,eAAU,SAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;;oBApB9BgE,mBAAc;oBAKdD,aAAQ;oDA0BmEhC,WAAM,SAACwB,eAAQ;oBAlBpF,SAAS;oBAPfU,qBAAgB;;;4BARlB;KAsBA;;;;;;ICtBA;;;;;;AAYA;QAEE,kBACY,UAAoC,EAAU,SAAmB,EAAU,WAA0B,EACrG,OAAuB;YADvB,eAAU,GAAV,UAAU,CAA0B;YAAU,cAAS,GAAT,SAAS,CAAU;YAAU,gBAAW,GAAX,WAAW,CAAe;YACrG,YAAO,GAAP,OAAO,CAAgB;SAAI;;;;;;;;;;;;;;;;;;;;;;QAWvC,uBAAI;;;;;;;;;;;;QAAJ,UAAK,OAAY,EAAE,OAA6B;YAA7B,wBAAA,EAAA,YAA6B;;gBACxC,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC;YAChE,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;SACzF;;;;;;;;;;;;;QAOD,6BAAU;;;;;;;QAAV,UAAW,MAAY,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE;;;;;;;;;;;;QAOjE,gCAAa;;;;;;QAAb,cAA2B,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,EAAE;;oBAhCtEjE,eAAU,SAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;;oBAZFsD,6BAAwB;oBAAlCS,aAAQ;oBAIpB,aAAa;oBAFI,cAAc;;;uBAFvC;KAYA;;;;;;ACZA;QAWA;SAMC;;oBANAtD,aAAQ,SAAC;wBACR,YAAY,EAAE,CAAC,gBAAgB,EAAE,cAAc,CAAC;wBAChD,eAAe,EAAE,CAAC,gBAAgB,EAAE,cAAc,CAAC;wBACnD,SAAS,EAAE,CAAC,QAAQ,CAAC;qBACtB;;QAED,qBAAC;KAND;;;;;;ICXA;;;;;;AAQA;QAAA;YAEE,aAAQ,GAAG,KAAK,CAAC;YACjB,kBAAa,GAAG,KAAK,CAAC;YACtB,mBAAc,GAAG,IAAI,CAAC;YACtB,aAAQ,GAAG,IAAI,CAAC;YAChB,YAAO,GAAG,CAAC,CAAC;YACZ,aAAQ,GAAG,EAAE,CAAC;YACd,WAAM,GAAG,KAAK,CAAC;SAEhB;;oBAVAT,eAAU,SAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;kCARhC;KAQA;;;;;;;;;;;ACkDA;QAEE,+BAAmB,WAAkD;YAAlD,gBAAW,GAAX,WAAW,CAAuC;SAAI;;oBAF1EW,cAAS,SAAC,EAAC,QAAQ,EAAE,oCAAoC,EAAC;;;;oBAhDzDC,gBAAW;;QAmDb,4BAAC;KAHD,IAGC;;;;;;AAOD;QAEE,4BAAmB,WAAkD;YAAlD,gBAAW,GAAX,WAAW,CAAuC;SAAI;;oBAF1ED,cAAS,SAAC,EAAC,QAAQ,EAAE,iCAAiC,EAAC;;;;oBA1DtDC,gBAAW;;QA6Db,yBAAC;KAHD,IAGC;;;;;;AAOD;QAEE,2BAAmB,WAAkD;YAAlD,gBAAW,GAAX,WAAW,CAAuC;SAAI;;oBAF1ED,cAAS,SAAC,EAAC,QAAQ,EAAE,gCAAgC,EAAC;;;;oBApErDC,gBAAW;;QAuEb,wBAAC;KAHD,IAGC;;;;;;AAOD;QAEE,2BAAmB,WAAkD;YAAlD,gBAAW,GAAX,WAAW,CAAuC;SAAI;;oBAF1ED,cAAS,SAAC,EAAC,QAAQ,EAAE,gCAAgC,EAAC;;;;oBA9ErDC,gBAAW;;QAiFb,wBAAC;KAHD,IAGC;;;;;;AAOD;QAEE,6BAAmB,WAAoD;YAApD,gBAAW,GAAX,WAAW,CAAyC;SAAI;;oBAF5ED,cAAS,SAAC,EAAC,QAAQ,EAAE,kCAAkC,EAAC;;;;oBAxFvDC,gBAAW;;QA2Fb,0BAAC;KAHD,IAGC;;;;;;AAOD;QAEE,+BAAmB,WAAkD;YAAlD,gBAAW,GAAX,WAAW,CAAuC;SAAI;;oBAF1ED,cAAS,SAAC,EAAC,QAAQ,EAAE,oCAAoC,EAAC;;;;oBAlGzDC,gBAAW;;QAqGb,4BAAC;KAHD,IAGC;;;;AAKD;QA6IE,uBAAY,MAA2B;YA/EvC,cAAS,GAAG,CAAC,CAAC;YACd,UAAK,GAAa,EAAE,CAAC;;;;;;YAuDZ,SAAI,GAAG,CAAC,CAAC;;;;;;;;YAcR,eAAU,GAAG,IAAIX,iBAAY,CAAS,IAAI,CAAC,CAAC;YAUpD,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;YAChC,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;YAC1C,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;YAC5C,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;YAChC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;YAC9B,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;YAChC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YAC5B,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;SACzB;;;;QAED,mCAAW;;;QAAX,cAAyB,OAAO,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE;;;;QAEhD,+BAAO;;;QAAP,cAAqB,OAAO,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE;;;;QAEzD,oCAAY;;;QAAZ,cAA0B,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE;;;;QAEpE,wCAAgB;;;QAAhB,cAA8B,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE;;;;;QAE5E,kCAAU;;;;QAAV,UAAW,UAAkB,IAAU,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,EAAE;;;;;QAEvE,mCAAW;;;;QAAX,UAAY,OAAsB,IAAU,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE;;;;;QAE3E,kCAAU;;;;QAAV,UAAW,UAAU,IAAa,OAAO,UAAU,KAAK,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;QAKrD,sCAAc;;;;;;;QAAtB,UAAuB,KAAa,EAAE,GAAW;YAC/C,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,IAAI,KAAK,GAAG,CAAC,EAAE;oBACb,IAAI,KAAK,GAAG,CAAC,EAAE;wBACb,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;qBACxB;oBACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;iBACvB;gBACD,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE;oBACxB,IAAI,GAAG,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE;wBAC9B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;qBACrB;oBACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;iBACjC;aACF;SACF;;;;;;;;;;;;;;;;;;;QAUO,sCAAc;;;;;;;;;;QAAtB;;gBACM,KAAK,GAAG,CAAC;;gBACT,GAAG,GAAG,IAAI,CAAC,SAAS;;gBACpB,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;;gBACzC,WAAW,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU;YAEtE,IAAI,IAAI,CAAC,IAAI,IAAI,UAAU,EAAE;;gBAE3B,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;aACpB;iBAAM,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,GAAG,UAAU,EAAE;;gBAElD,KAAK,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC;aACvC;iBAAM;;gBAEL,KAAK,GAAG,IAAI,CAAC,IAAI,GAAG,UAAU,GAAG,CAAC,CAAC;gBACnC,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;aAC/B;YAED,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;SACrB;;;;;;;;;QAKO,wCAAgB;;;;;QAAxB;;gBACM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;;gBAC9C,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,OAAO;;gBAC3B,GAAG,GAAG,KAAK,GAAG,IAAI,CAAC,OAAO;YAE9B,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;SACrB;;;;;;QAEO,uCAAe;;;;;QAAvB,UAAwB,SAAS;;gBACzB,UAAU,GAAG,IAAI,CAAC,IAAI;YAC5B,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YAE1D,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE;gBAC7D,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACjC;SACF;;;;;;QAEO,oCAAY;;;;;QAApB,UAAqB,OAAe;;YAClC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;YAEhE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;gBAC7B,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;aACpB;;YAGD,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE;gBACxC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACpB;;YAGD,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;;YAG9B,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE;;oBACjD,KAAK,GAAG,CAAC;;oBACT,GAAG,GAAG,IAAI,CAAC,SAAS;;gBAGxB,IAAI,IAAI,CAAC,MAAM,EAAE;oBACf,qCAAoC,EAAnC,aAAK,EAAE,WAAG,CAA0B;iBACtC;qBAAM;oBACL,uCAAsC,EAArC,aAAK,EAAE,WAAG,CAA4B;iBACxC;gBAED,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;;gBAG1C,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;aACjC;SACF;;oBA5QFC,cAAS,SAAC;wBACT,QAAQ,EAAE,gBAAgB;wBAC1B,eAAe,EAAEC,4BAAuB,CAAC,MAAM;wBAC/C,IAAI,EAAE,EAAC,MAAM,EAAE,YAAY,EAAC;wBAC5B,QAAQ,EAAE,6rHAuDT;qBACF;;;;oBAnKO,mBAAmB;;;kCAwKxB2D,iBAAY,SAAC,qBAAqB,EAAE,EAAC,MAAM,EAAE,KAAK,EAAC;+BACnDA,iBAAY,SAAC,kBAAkB,EAAE,EAAC,MAAM,EAAE,KAAK,EAAC;8BAChDA,iBAAY,SAAC,iBAAiB,EAAE,EAAC,MAAM,EAAE,KAAK,EAAC;8BAC/CA,iBAAY,SAAC,iBAAiB,EAAE,EAAC,MAAM,EAAE,KAAK,EAAC;gCAC/CA,iBAAY,SAAC,mBAAmB,EAAE,EAAC,MAAM,EAAE,KAAK,EAAC;kCACjDA,iBAAY,SAAC,qBAAqB,EAAE,EAAC,MAAM,EAAE,KAAK,EAAC;+BAKnDvD,UAAK;oCAKLA,UAAK;qCAKLA,UAAK;+BAKLA,UAAK;6BAOLA,UAAK;qCASLA,UAAK;8BAKLA,UAAK;2BAOLA,UAAK;+BAKLA,UAAK;iCASLC,WAAM;2BAOND,UAAK;;QAkIR,oBAAC;KA7QD;;;;;;ICpHA;QAwBM,UAAU,GAAG;QACjB,aAAa,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,mBAAmB;QACnH,qBAAqB;KACtB;AAED;QAAA;SAEC;;oBAFAE,aAAQ,SAAC,EAAC,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAACC,mBAAY,CAAC,EAAC;;QAElF,0BAAC;KAFD;;;;;;IC7BA;QAIE,iBAAmB,IAAY,EAAS,KAAc;YAAnC,SAAI,GAAJ,IAAI,CAAQ;YAAS,UAAK,GAAL,KAAK,CAAS;YACpD,IAAI,CAAC,KAAK,EAAE;gBACV,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;aACnB;SACF;;;;QAED,0BAAQ;;;QAAR,cAAa,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,EAAE;QAC1E,cAAC;KAAA,IAAA;;QAEK,eAAe,GAAG;QACtB,OAAO,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC;QACrC,OAAO,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC;KACjC;;;;;;IAED,SAAgB,aAAa,CAAC,QAAgB,EAAE,OAAyB;QAAzB,wBAAA,EAAA,yBAAyB;;YACjE,eAAe,GAAG,CAAC,QAAQ,IAAI,EAAE,EAAE,IAAI,EAAE;QAE/C,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE;YAChC,OAAO,EAAE,CAAC;SACX;;YAEK,cAAc,GAAG,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG;;;;QAAC,UAAA,OAAO,IAAI,OAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAA,EAAC,CAAC,GAAG;;;;QAAC,UAAC,WAAW;;gBACjG,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,WAAW;YAClD,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;SACxC,EAAC;;YAEI,cAAc,GAAG,cAAc,CAAC,MAAM;;;;QAAC,UAAA,WAAW,IAAI,OAAA,WAAW,CAAC,QAAQ,EAAE,GAAA,EAAC;QAEnF,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7B,MAAM,0DAA0D,CAAC;SAClE;QAED,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;YAC5D,MAAM,0EAA0E,CAAC;SAClF;QAED,OAAO,cAAc,CAAC;KACvB;;;;;;;;IAED,SAAgB,eAAe,CAAC,QAAa,EAAE,aAAkB,EAAE,QAAmB,EAAE,UAAyB;QAC/G,OAAO,IAAIwD,eAAU;;;;QAAU,UAAA,UAAU;;gBACjC,SAAS,GAAG,EAAE;;gBACd,MAAM;;;YAAG,cAAM,OAAA,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAA,CAAA;;gBACpC,OAAO;;;YAAG,cAAM,OAAA,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAA,CAAA;;gBACtC,QAAQ;;;YAAG,cAAM,OAAA,UAAU,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC,GAAA,CAAA;YAErD,QAAQ,CAAC,OAAO;;;;YAAC,UAAC,OAAgB;gBAChC,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,KAAK,EAAE;oBAClC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;iBACxE;qBAAM;oBACL,SAAS,CAAC,IAAI,CACV,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,EACpD,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;iBAC7D;aACF,EAAC,CAAC;YAEH;;;YAAO,cAAQ,SAAS,CAAC,OAAO;;;;YAAC,UAAA,aAAa,IAAI,OAAA,aAAa,EAAE,GAAA,EAAC,CAAC,EAAE,EAAC;SACvE,EAAC,CAAC;KACJ;;QAEK,WAAW;;;;;IAAG,UAAI,IAAY,IAAK,OAAA,IAAI,GAAG,CAAC,GAAGlB,eAAK,CAAI,IAAI,CAAC;;;;IAAG,UAAC,CAAgB,IAAK,OAAA,CAAC,GAAA,CAAA,GAAA,CAAA;;;;;;;IAE5F,SAAgB,YAAY,CAAC,SAAiB,EAAE,UAAkB,EAAE,UAAyB;QAC3F;;;;QAAO,UAAC,MAA2B;;gBAC7B,OAAO,GAAG,IAAI;;gBACZ,cAAc,GAAG,MAAM,CAAC,IAAI,CAC9BxB,aAAG;;;;YAAC,UAAA,IAAI,IAAI,QAAC,EAAC,IAAI,MAAA,EAAC,IAAC,EAAC,EAAEkB,gBAAM;;;;YAAC,UAAA,KAAK;;oBAC3B,aAAa,GAAG,UAAU,EAAE;gBAClC,IAAI,aAAa,KAAK,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,aAAa,CAAC,EAAE;oBAChF,OAAO,GAAG,KAAK,CAAC;oBAChB,OAAO,IAAI,CAAC;iBACb;gBACD,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE;oBAC1C,OAAO,GAAG,IAAI,CAAC;iBAChB;gBACD,OAAO,KAAK,CAAC;aACd,EAAC,EACFyB,eAAK,EAAE,CAAC;;gBACN,YAAY,GAAG,cAAc,CAAC,IAAI,CAACzB,gBAAM;;;;YAAC,UAAA,KAAK,IAAI,OAAA,KAAK,CAAC,IAAI,GAAA,EAAC,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;;gBACvF,aAAa,GAAG,cAAc,CAAC,IAAI,CAACA,gBAAM;;;;YAAC,UAAA,KAAK,IAAI,OAAA,CAAC,KAAK,CAAC,IAAI,GAAA,EAAC,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;YAChG,OAAOG,UAAK,CAAC,YAAY,EAAE,aAAa,CAAC;iBACpC,IAAI,CACDH,gBAAM;;;;YAAC,UAAA,KAAK;gBACV,IAAI,KAAK,KAAK,OAAO,EAAE;oBACrB,OAAO,GAAG,IAAI,CAAC;oBACf,OAAO,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;iBACpC;gBACD,OAAO,KAAK,CAAC;aACd,EAAC,EACFlB,aAAG;;;;YAAC,UAAA,KAAK,IAAI,OAAA,KAAK,CAAC,IAAI,GAAA,EAAC,CAAC,CAAC;SACnC,EAAC;KACH;;;;;;;;;;;;IAED,SAAgB,gBAAgB,CAC5B,QAAa,EAAE,aAAkB,EAAE,QAAgB,EAAE,UAAyB,EAAE,MAAM,EAAE,OAAO,EAAE,SAAa,EAC9G,UAAc;QADmF,0BAAA,EAAA,aAAa;QAC9G,2BAAA,EAAA,cAAc;;YACV,cAAc,GAAG,aAAa,CAAC,QAAQ,CAAC;QAE9C,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC/D;;;YAAO,eAAQ,EAAC;SACjB;;YAEK,YAAY,GAAG,eAAe,CAAC,QAAQ,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,CAAC;aAC/D,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;aACrD,SAAS;;;;QAAC,UAAA,IAAI,IAAI,QAAC,IAAI,GAAG,MAAM,EAAE,GAAG,OAAO,EAAE,IAAC,EAAC;QAE1E;;;QAAO,cAAM,OAAA,YAAY,CAAC,WAAW,EAAE,GAAA,EAAC;KACzC;;;;;;IC/GD;;;;;;AASA;QAAA;YAEE,cAAS,GAAmC,IAAI,CAAC;YACjD,cAAS,GAAmB,MAAM,CAAC;YACnC,aAAQ,GAAG,OAAO,CAAC;YAEnB,mBAAc,GAAG,KAAK,CAAC;YAEvB,cAAS,GAAG,CAAC,CAAC;YACd,eAAU,GAAG,CAAC,CAAC;SAChB;;oBAVAxB,eAAU,SAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;+BAThC;KASA;;;;;;ICTA;QAiCImB,QAAM,GAAG,CAAC;AAEd;QAAA;SAqBC;;;;QADC,0CAAe;;;QAAf,cAAoB,OAAO,IAAI,CAAC,KAAK,YAAYP,gBAAW,CAAC,EAAE;;oBApBhEV,cAAS,SAAC;wBACT,QAAQ,EAAE,oBAAoB;wBAC9B,eAAe,EAAEC,4BAAuB,CAAC,MAAM;wBAC/C,aAAa,EAAEC,sBAAiB,CAAC,IAAI;wBACrC,IAAI,EAAE,EAAC,SAAS,EAAE,sDAAsD,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAC;wBAC1G,QAAQ,EAAE,2WAMkD;;qBAE7D;;;4BAEEG,UAAK;yBACLA,UAAK;mCACLA,UAAK;8BACLA,UAAK;;QAGR,uBAAC;KArBD,IAqBC;;;;AAKD;QAgHE,oBACY,WAAoC,EAAU,SAAoB,EAAE,QAAkB,EAC9F,wBAAkD,EAAE,gBAAkC,EAAE,MAAwB,EACxG,OAAe,EAA4B,SAAc,EAAU,eAAkC,EACrG,eAA+B;YAJ3C,iBAuBC;YAtBW,gBAAW,GAAX,WAAW,CAAyB;YAAU,cAAS,GAAT,SAAS,CAAW;YAElE,YAAO,GAAP,OAAO,CAAQ;YAA4B,cAAS,GAAT,SAAS,CAAK;YAAU,oBAAe,GAAf,eAAe,CAAmB;YACrG,oBAAe,GAAf,eAAe,CAAgB;;;;YA1BjC,UAAK,GAAG,IAAIN,iBAAY,EAAQ,CAAC;;;;YAKjC,WAAM,GAAG,IAAIA,iBAAY,EAAQ,CAAC;YAEpC,wBAAmB,GAAG,iBAAekB,QAAM,EAAI,CAAC;YAoBtD,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;YAClC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;YAClC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;YAChC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;YAClC,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;YAC5C,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;YACxC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;YAClC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;YACpC,IAAI,CAAC,aAAa,GAAG,IAAI,YAAY,CACjC,gBAAgB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,SAAS,EAAE,wBAAwB,EAAE,eAAe,CAAC,CAAC;YAExG,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS;;;YAAC;gBAClD,IAAI,KAAI,CAAC,UAAU,EAAE;oBACnB,gBAAgB,CACZ,KAAI,CAAC,WAAW,CAAC,aAAa,EAAE,KAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,aAAa,EAAE,KAAI,CAAC,SAAS,EACtF,KAAI,CAAC,SAAS,KAAK,MAAM,EAAE,YAAY,CAAC,CAAC;iBAC9C;aACF,EAAC,CAAC;SACJ;;;;;QAjCO,gCAAW;;;;QAAnB;YACE,IAAI,IAAI,CAAC,cAAc,EAAE;gBACvB,OAAO,IAAI,CAAC;aACb;YACD,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;gBAC1C,OAAO,IAAI,CAAC;aACb;YACD,OAAO,KAAK,CAAC;SACd;;;;;;;;;;;;;;;QAiCD,yBAAI;;;;;;;;QAAJ,UAAK,OAAa;YAAlB,iBA+BC;YA9BC,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;gBAC3C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;gBACpE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC;gBACnD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC;gBAC3C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;gBAC1D,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC;gBAEvD,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,kBAAkB,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;gBAE1G,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,EAAE;oBAC7B,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;iBAClG;;;;gBAKD,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;;;;;;gBAOlD,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;gBAEjD,YAAY,CACR,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS;;;gBAAE,cAAM,OAAA,KAAI,CAAC,KAAK,EAAE,GAAA,GAAE,IAAI,CAAC,MAAM,EAC7E,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;gBAC9C,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;aACnB;SACF;;;;;;;;;;;;QAOD,0BAAK;;;;;;QAAL;YACE,IAAI,IAAI,CAAC,UAAU,EAAE;gBACnB,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;gBACnF,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;gBAC3B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;gBACvB,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBACnB,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;aACrC;SACF;;;;;;;;;;;;QAOD,2BAAM;;;;;;QAAN;YACE,IAAI,IAAI,CAAC,UAAU,EAAE;gBACnB,IAAI,CAAC,KAAK,EAAE,CAAC;aACd;iBAAM;gBACL,IAAI,CAAC,IAAI,EAAE,CAAC;aACb;SACF;;;;;;;;QAKD,2BAAM;;;;QAAN,cAAoB,OAAO,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,EAAE;;;;QAErD,6BAAQ;;;QAAR;YACE,IAAI,CAAC,sBAAsB,GAAG,gBAAgB,CAC1C,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAC3G,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SAC/D;;;;;QAED,gCAAW;;;;QAAX,UAAY,OAAsB;;YAEhC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC,WAAW,EAAE,EAAE;gBACzG,IAAI,CAAC,KAAK,EAAE,CAAC;aACd;SACF;;;;QAED,gCAAW;;;QAAX;YACE,IAAI,CAAC,KAAK,EAAE,CAAC;;;YAGb,IAAI,IAAI,CAAC,sBAAsB,EAAE;gBAC/B,IAAI,CAAC,sBAAsB,EAAE,CAAC;aAC/B;YACD,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC;SACtC;;oBAtOFR,cAAS,SAAC,EAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY,EAAC;;;;oBA/C3DL,eAAU;oBAFVD,cAAS;oBADT0D,aAAQ;oBAMRT,6BAAwB;oBADxBD,qBAAgB;oBAeV,gBAAgB;oBAbtBpB,WAAM;oDA8JwBF,WAAM,SAACwB,eAAQ;oBA3J7CrC,sBAAiB;oBACjB8C,mBAAc;;;gCAoDbzD,UAAK;iCAOLA,UAAK;mCAOLA,UAAK;gCAeLA,UAAK;+BAQLA,UAAK;gCAOLA,UAAK;qCAOLA,UAAK;mCAOLA,UAAK;gCAOLA,UAAK;iCAOLA,UAAK;4BAKLC,WAAM;6BAKNA,WAAM;;QAwIT,iBAAC;KAvOD;;;;;;AC7DA;QASA;SAOC;;oBAPAC,aAAQ,SAAC;wBACR,YAAY,EAAE,CAAC,UAAU,EAAE,gBAAgB,CAAC;wBAC5C,OAAO,EAAE,CAAC,UAAU,CAAC;wBACrB,OAAO,EAAE,CAACC,mBAAY,CAAC;wBACvB,eAAe,EAAE,CAAC,gBAAgB,CAAC;qBACpC;;QAED,uBAAC;KAPD;;;;;;ICTA;;;;;;AAQA;QAAA;YAEE,QAAG,GAAG,GAAG,CAAC;YACV,aAAQ,GAAG,KAAK,CAAC;YACjB,YAAO,GAAG,KAAK,CAAC;YAEhB,cAAS,GAAG,KAAK,CAAC;SAEnB;;oBARAV,eAAU,SAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;mCARhC;KAQA;;;;;;ICRA;;;AAOA;QAyDE,wBAAY,MAA4B;;;;;;YAT/B,UAAK,GAAG,CAAC,CAAC;YAUjB,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;YACtB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;YAChC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;YAC9B,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;YACxB,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;YAClC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;SAC7B;;;;QAED,iCAAQ;;;QAAR,cAAa,OAAO,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE;;;;QAE5D,wCAAe;;;QAAf,cAAoB,OAAO,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE;;oBApE/DE,cAAS,SAAC;wBACT,QAAQ,EAAE,iBAAiB;wBAC3B,eAAe,EAAEC,4BAAuB,CAAC,MAAM;wBAC/C,QAAQ,EAAE,ogBAQT;qBACF;;;;oBAjBO,oBAAoB;;;0BAsBzBI,UAAK;+BAOLA,UAAK;8BAKLA,UAAK;gCAKLA,UAAK;2BAOLA,UAAK;4BAOLA,UAAK;6BAOLA,UAAK;;QAcR,qBAAC;KArED;;;;;;ACPA;QAQA;SAEC;;oBAFAE,aAAQ,SAAC,EAAC,YAAY,EAAE,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,CAACC,mBAAY,CAAC,EAAC;;QAE9F,2BAAC;KAFD;;;;;;ICRA;;;;;;AAQA;QAAA;YAEE,QAAG,GAAG,EAAE,CAAC;YACT,aAAQ,GAAG,KAAK,CAAC;YACjB,eAAU,GAAG,KAAK,CAAC;SACpB;;oBALAV,eAAU,SAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;8BARhC;KAQA;;;;;;ICRA;QAkCM,yBAAyB,GAAG;QAChC,OAAO,EAAEgB,uBAAiB;QAC1B,WAAW,EAAEC,eAAU;;;QAAC,cAAM,OAAA,SAAS,GAAA,EAAC;QACxC,KAAK,EAAE,IAAI;KACZ;;;;AAKD;QAuFE,mBAAY,MAAuB,EAAU,kBAAqC;YAArC,uBAAkB,GAAlB,kBAAkB,CAAmB;YAzDlF,aAAQ,GAA0B,EAAE,CAAC;YACrC,aAAQ,GAAG,KAAK,CAAC;;;;;;YAqCP,UAAK,GAAG,IAAIhB,iBAAY,EAAU,CAAC;;;;;;YAOnC,UAAK,GAAG,IAAIA,iBAAY,EAAU,CAAC;;;;;;YAOnC,eAAU,GAAG,IAAIA,iBAAY,CAAS,IAAI,CAAC,CAAC;YAEtD,aAAQ;;;;YAAG,UAAC,CAAM,KAAO,EAAC;YAC1B,cAAS;;;YAAG,eAAQ,EAAC;YAGnB,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;YACtB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;SACjC;;;;QAED,iCAAa;;;QAAb,cAAkB,OAAU,IAAI,CAAC,QAAQ,gBAAW,IAAI,CAAC,GAAK,CAAC,EAAE;;;;;QAEjE,yBAAK;;;;QAAL,UAAM,KAAa;YACjB,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;gBACpC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;aAC1B;YACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACxB;;;;QAED,8BAAU;;;QAAV,cAAe,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE;;;;;QAElC,+BAAW;;;;QAAX,UAAY,KAAa,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE;;;;;QAE/F,iCAAa;;;;QAAb,UAAc,KAAoB;;YAEhC,QAAQ,KAAK,CAAC,KAAK;gBACjB,KAAK,GAAG,CAAC,SAAS,CAAC;gBACnB,KAAK,GAAG,CAAC,SAAS;oBAChB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;oBAC3B,MAAM;gBACR,KAAK,GAAG,CAAC,OAAO,CAAC;gBACjB,KAAK,GAAG,CAAC,UAAU;oBACjB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;oBAC3B,MAAM;gBACR,KAAK,GAAG,CAAC,IAAI;oBACX,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBACf,MAAM;gBACR,KAAK,GAAG,CAAC,GAAG;oBACV,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACtB,MAAM;gBACR;oBACE,OAAO;aACV;;YAGD,KAAK,CAAC,cAAc,EAAE,CAAC;SACxB;;;;;QAED,+BAAW;;;;QAAX,UAAY,OAAsB;YAChC,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE;gBACnB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACxB;SACF;;;;QAED,4BAAQ;;;QAAR;YACE,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAC;;;;;YAAE,UAAC,CAAC,EAAE,CAAC,IAAK,QAAC,EAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAC,IAAC,EAAC,CAAC;YAChF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC9B;;;;;QAED,oCAAgB;;;;QAAhB,UAAiB,EAAuB,IAAU,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,EAAE;;;;;QAEvE,qCAAiB;;;;QAAjB,UAAkB,EAAa,IAAU,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,EAAE;;;;QAE/D,yBAAK;;;QAAL;YACE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC/B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC9B;;;;;QAED,oCAAgB;;;;QAAhB,UAAiB,UAAmB,IAAI,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,EAAE;;;;;;QAErE,0BAAM;;;;;QAAN,UAAO,KAAa,EAAE,cAAqB;YAArB,+BAAA,EAAA,qBAAqB;;gBACnC,OAAO,GAAG,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YACnD,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;gBAC7D,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;gBACpB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACjC;YACD,IAAI,cAAc,EAAE;gBAClB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACzB,IAAI,CAAC,SAAS,EAAE,CAAC;aAClB;YACD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC9B;;;;;QAED,8BAAU;;;;QAAV,UAAW,KAAK;YACd,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAC1B,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;SACxC;;;;;;QAEO,iCAAa;;;;;QAArB,UAAsB,KAAa;;gBAC3B,IAAI,GAAG,IAAI,CAAC,QAAQ,GAAG,KAAK;YAElC,IAAI,IAAI,IAAI,CAAC,EAAE;gBACb,OAAO,GAAG,CAAC;aACZ;YACD,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE;gBACxB,OAAO,QAAQ,CAAC,CAAC,IAAI,GAAG,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;aAC9C;YAED,OAAO,CAAC,CAAC;SACV;;;;;;QAEO,gCAAY;;;;;QAApB,UAAqB,SAAiB;YAAtC,iBAGC;YAFC,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;YAC1B,IAAI,CAAC,QAAQ,CAAC,OAAO;;;;;YAAC,UAAC,OAAO,EAAE,KAAK,IAAK,OAAA,OAAO,CAAC,IAAI,GAAG,KAAI,CAAC,aAAa,CAAC,KAAK,CAAC,GAAA,EAAC,CAAC;SACrF;;oBA1LFC,cAAS,SAAC;wBACT,QAAQ,EAAE,YAAY;wBACtB,eAAe,EAAEC,4BAAuB,CAAC,MAAM;wBAC/C,IAAI,EAAE;4BACJ,OAAO,EAAE,eAAe;4BACxB,UAAU,EAAE,GAAG;4BACf,MAAM,EAAE,QAAQ;4BAChB,eAAe,EAAE,GAAG;4BACpB,sBAAsB,EAAE,KAAK;4BAC7B,sBAAsB,EAAE,UAAU;4BAClC,uBAAuB,EAAE,iBAAiB;4BAC1C,sBAAsB,EAAE,wBAAwB;4BAChD,QAAQ,EAAE,cAAc;4BACxB,WAAW,EAAE,uBAAuB;4BACpC,cAAc,EAAE,SAAS;yBAC1B;wBACD,QAAQ,EAAE,4kBAST;wBACD,SAAS,EAAE,CAAC,yBAAyB,CAAC;qBACvC;;;;oBAxDO,eAAe;oBAFrBe,sBAAiB;;;0BAqEhBX,UAAK;2BAKLA,UAAK;+BAKLA,UAAK;iCAKLA,UAAK;mCAOLA,UAAK;8CACLuD,iBAAY,SAAClD,gBAAW,EAAE,EAAC,MAAM,EAAE,KAAK,EAAC;4BAOzCJ,WAAM;4BAONA,WAAM;iCAONA,WAAM;;QAyGT,gBAAC;KA3LD;;;;;;AC3CA;QAQA;SAEC;;oBAFAC,aAAQ,SAAC,EAAC,YAAY,EAAE,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAACC,mBAAY,CAAC,EAAC;;QAEpF,sBAAC;KAFD;;;;;;ICRA;;;;;;AAQA;QAAA;YAEE,YAAO,GAAsD,OAAO,CAAC;YACrE,gBAAW,GAA8B,YAAY,CAAC;YACtD,SAAI,GAAqB,MAAM,CAAC;SACjC;;oBALAV,eAAU,SAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;8BARhC;KAQA;;;;;;ICRA;QAaImB,QAAM,GAAG,CAAC;;;;;;AAOd;QAEE,qBAAmB,WAA6B;YAA7B,gBAAW,GAAX,WAAW,CAAkB;SAAI;;oBAFrDR,cAAS,SAAC,EAAC,QAAQ,EAAE,0BAA0B,EAAC;;;;oBAd/CC,gBAAW;;QAiBb,kBAAC;KAHD,IAGC;;;;AAKD;QAEE,uBAAmB,WAA6B;YAA7B,gBAAW,GAAX,WAAW,CAAkB;SAAI;;oBAFrDD,cAAS,SAAC,EAAC,QAAQ,EAAE,4BAA4B,EAAC;;;;oBAtBjDC,gBAAW;;QAyBb,oBAAC;KAHD,IAGC;;;;AAKD;QAAA;;;;;;YAOW,OAAE,GAAG,aAAWO,QAAM,EAAI,CAAC;;;;YAY3B,aAAQ,GAAG,KAAK,CAAC;SAgB3B;;;;QARC,sCAAqB;;;QAArB;;;;;YAKE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;YACrC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;SAC1C;;oBAlCFR,cAAS,SAAC,EAAC,QAAQ,EAAE,SAAS,EAAC;;;yBAO7BJ,UAAK;4BAOLA,UAAK;+BAKLA,UAAK;gCAKLM,oBAAe,SAAC,WAAW,EAAE,EAAC,WAAW,EAAE,KAAK,EAAC;kCACjDA,oBAAe,SAAC,aAAa,EAAE,EAAC,WAAW,EAAE,KAAK,EAAC;;QAUtD,aAAC;KAnCD,IAmCC;;;;AAyBD;QA6EE,mBAAY,MAAuB;;;;YAnC1B,kBAAa,GAAG,IAAI,CAAC;;;;;;YAiCpB,cAAS,GAAG,IAAIZ,iBAAY,EAAqB,CAAC;YAG1D,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;YACxB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;YAC9B,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;SACvC;QAlCD,sBACI,8BAAO;;;;;;;;;YADX,UACY,SAA4D;gBACtE,IAAI,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,WAAW,EAAE;oBACrD,IAAI,CAAC,YAAY,GAAG,SAAO,SAAW,CAAC;iBACxC;qBAAM;oBACL,IAAI,CAAC,YAAY,GAAG,qBAAmB,SAAW,CAAC;iBACpD;aACF;;;WAAA;;;;;;;;;;;;;;;QAmCD,0BAAM;;;;;;;;QAAN,UAAO,KAAa;;gBACd,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YACzC,IAAI,WAAW,IAAI,CAAC,WAAW,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,WAAW,CAAC,EAAE,EAAE;;oBACxE,kBAAgB,GAAG,KAAK;gBAE5B,IAAI,CAAC,SAAS,CAAC,IAAI,CACf,EAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,EAAE,cAAc;;;oBAAE,cAAQ,kBAAgB,GAAG,IAAI,CAAC,EAAE,CAAA,EAAC,CAAC,CAAC;gBAE3G,IAAI,CAAC,kBAAgB,EAAE;oBACrB,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,EAAE,CAAC;iBAChC;aACF;SACF;;;;QAED,yCAAqB;;;QAArB;;;gBAEM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC/C,IAAI,CAAC,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;SAC3F;;;;;;QAEO,+BAAW;;;;;QAAnB,UAAoB,EAAU;;gBACxB,UAAU,GAAa,IAAI,CAAC,IAAI,CAAC,MAAM;;;;YAAC,UAAA,GAAG,IAAI,OAAA,GAAG,CAAC,EAAE,KAAK,EAAE,GAAA,EAAC;YACjE,OAAO,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;SACjD;;oBAhHFC,cAAS,SAAC;wBACT,QAAQ,EAAE,YAAY;wBACtB,QAAQ,EAAE,WAAW;wBACrB,QAAQ,EAAE,quCAsBT;qBACF;;;;oBA/GO,eAAe;;;2BAmHpBW,oBAAe,SAAC,MAAM;+BAOtBN,UAAK;oCAKLA,UAAK;8BAKLA,UAAK;kCAYLA,UAAK;2BASLA,UAAK;gCAOLC,WAAM;;QAsCT,gBAAC;KAjHD;;;;;;IChGA;QAQM,qBAAqB,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,CAAC;AAE7E;QAAA;SAEC;;oBAFAC,aAAQ,SAAC,EAAC,YAAY,EAAE,qBAAqB,EAAE,OAAO,EAAE,qBAAqB,EAAE,OAAO,EAAE,CAACC,mBAAY,CAAC,EAAC;;QAExG,sBAAC;KAFD;;;;;;ICVA;QAOE,iBAAY,IAAa,EAAE,MAAe,EAAE,MAAe;YACzD,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;YAC5B,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;YAChC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;SACjC;;;;;QAED,4BAAU;;;;QAAV,UAAW,IAAQ;YAAR,qBAAA,EAAA,QAAQ;YAAI,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;SAAE;;;;;QAEpF,4BAAU;;;;QAAV,UAAW,IAAY;YACrB,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;gBAClB,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;aAChD;iBAAM;gBACL,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;aACjB;SACF;;;;;QAED,8BAAY;;;;QAAZ,UAAa,IAAQ;YAAR,qBAAA,EAAA,QAAQ;YAAI,IAAI,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC;SAAE;;;;;QAE5F,8BAAY;;;;QAAZ,UAAa,MAAc;YACzB,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE;gBACpB,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,MAAM,GAAG,EAAE,GAAG,MAAM,GAAG,EAAE,CAAC;gBAC/D,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC;aAC1C;iBAAM;gBACL,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;aACnB;SACF;;;;;QAED,8BAAY;;;;QAAZ,UAAa,IAAQ;YAAR,qBAAA,EAAA,QAAQ;YAAI,IAAI,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC;SAAE;;;;;QAE5F,8BAAY;;;;QAAZ,UAAa,MAAc;YACzB,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE;gBACpB,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,MAAM,GAAG,EAAE,GAAG,MAAM,GAAG,EAAE,CAAC;gBAC1D,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC;aAC5C;iBAAM;gBACL,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;aACnB;SACF;;;;;QAED,yBAAO;;;;QAAP,UAAQ,SAAgB;YAAhB,0BAAA,EAAA,gBAAgB;YACtB,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;SACnG;;;;QAED,0BAAQ;;;QAAR,cAAa,OAAO,CAAG,IAAI,CAAC,IAAI,IAAI,CAAC,WAAI,IAAI,CAAC,MAAM,IAAI,CAAC,WAAI,IAAI,CAAC,MAAM,IAAI,CAAC,CAAE,CAAC,EAAE;QACpF,cAAC;KAAA,IAAA;;;;;;IClDD;;;;;;AAQA;QAAA;YAEE,aAAQ,GAAG,KAAK,CAAC;YACjB,aAAQ,GAAG,IAAI,CAAC;YAChB,YAAO,GAAG,KAAK,CAAC;YAChB,aAAQ,GAAG,CAAC,CAAC;YACb,eAAU,GAAG,CAAC,CAAC;YACf,eAAU,GAAG,CAAC,CAAC;YACf,aAAQ,GAAG,KAAK,CAAC;YACjB,mBAAc,GAAG,KAAK,CAAC;YACvB,SAAI,GAAiC,QAAQ,CAAC;SAC/C;;oBAXAV,eAAU,SAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;kCARhC;KAQA;;;;;;;;;ICJA,SAAgB,mCAAmC;QACjD,OAAO,IAAI,oBAAoB,EAAE,CAAC;KACnC;;;;;;;;;;;;;;;;AAeD;QAAA;SAWC;;oBAXAA,eAAU,SAAC,EAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,mCAAmC,EAAC;;;6BArBjF;KAqBA,IAWC;;QAGyCmC,wCAA6B;QADvE;;SAmBC;;;;;;;;;QAdC,wCAAS;;;;;QAAT,UAAU,IAAmB;YAC3B,OAAO,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;gBAC1D,EAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,EAAC;gBAC3F,IAAI,CAAC;SACV;;;;;;;;;QAKD,sCAAO;;;;;QAAP,UAAQ,IAAmB;YACzB,OAAO,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;gBAC1D,EAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,EAAC;gBAC3F,IAAI,CAAC;SACV;;oBAlBFnC,eAAU;;QAmBX,2BAAC;KAAA,CAlByC,cAAc;;;;;;;;;;IChCxD,SAAgB,2BAA2B,CAAC,MAAM;QAChD,OAAO,IAAI,wBAAwB,CAAC,MAAM,CAAC,CAAC;KAC7C;;;;;;;AAOD;QAAA;SAWC;;oBAXAA,eAAU,SAAC,EAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,2BAA2B,EAAE,IAAI,EAAE,CAACoC,cAAS,CAAC,EAAC;;;gCAZ5F;KAYA,IAWC;;QAG6CD,4CAAiB;QAG7D,kCAA+B,MAAc;YAA7C,YACE,iBAAO,SAGR;YADC,KAAI,CAAC,QAAQ,GAAGiC,0BAAmB,CAAC,MAAM,EAAE9B,gBAAS,CAAC,UAAU,EAAEC,uBAAgB,CAAC,MAAM,CAAC,CAAC;;SAC5F;;;;QAED,mDAAgB;;;QAAhB,cAA6B,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;;;;QAEvD,qDAAkB;;;QAAlB,cAA+B,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;;oBAZ1DvC,eAAU;;;;iDAII+B,WAAM,SAACK,cAAS;;QAS/B,+BAAC;KAAA,CAZ6C,iBAAiB;;;;;;IC1B/D;QAiBM,6BAA6B,GAAG;QACpC,OAAO,EAAEpB,uBAAiB;QAC1B,WAAW,EAAEC,eAAU;;;QAAC,cAAM,OAAA,aAAa,GAAA,EAAC;QAC5C,KAAK,EAAE,IAAI;KACZ;;;;AAKD;QAmJE,uBACqB,OAA4B,EAAU,eAAoC,EACnF,GAAsB,EAAS,IAAuB;YAD7C,YAAO,GAAP,OAAO,CAAqB;YAAU,oBAAe,GAAf,eAAe,CAAqB;YACnF,QAAG,GAAH,GAAG,CAAmB;YAAS,SAAI,GAAJ,IAAI,CAAmB;YAYlE,aAAQ;;;;YAAG,UAAC,CAAM,KAAO,EAAC;YAC1B,cAAS;;;YAAG,eAAQ,EAAC;YAZnB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;YACjC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;YACjC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;YAC/B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;YACjC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;YACrC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;YACrC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;YACjC,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;YAC7C,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;SAC1B;QAjDD,sBACI,mCAAQ;;;;YAIZ,cAAyB,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE;;;;;;;;;YALjD,UACa,IAAY;gBACvB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;aACjE;;;WAAA;QAOD,sBACI,qCAAU;;;;YAId,cAA2B,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE;;;;;;;;;YALrD,UACe,IAAY;gBACzB,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;aACrE;;;WAAA;QAOD,sBACI,qCAAU;;;;YAId,cAA2B,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE;;;;;;;;;YALrD,UACe,IAAY;gBACzB,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;aACrE;;;WAAA;;;;;QA+BD,kCAAU;;;;QAAV,UAAW,KAAK;;gBACR,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,KAAK,CAAC;YACzD,IAAI,CAAC,KAAK,GAAG,WAAW,GAAG,IAAI,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI,OAAO,EAAE,CAAC;YACjH,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,WAAW,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE;gBACpE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;aACvB;YACD,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;SACzB;;;;;QAED,wCAAgB;;;;QAAhB,UAAiB,EAAuB,IAAU,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,EAAE;;;;;QAEvE,yCAAiB;;;;QAAjB,UAAkB,EAAa,IAAU,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,EAAE;;;;;QAE/D,wCAAgB;;;;QAAhB,UAAiB,UAAmB,IAAI,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,EAAE;;;;;QAErE,kCAAU;;;;QAAV,UAAW,IAAY;YACrB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAC5B,IAAI,CAAC,oBAAoB,EAAE,CAAC;SAC7B;;;;;QAED,oCAAY;;;;QAAZ,UAAa,IAAY;YACvB,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,CAAC,oBAAoB,EAAE,CAAC;SAC7B;;;;;QAED,oCAAY;;;;QAAZ,UAAa,IAAY;YACvB,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,CAAC,oBAAoB,EAAE,CAAC;SAC7B;;;;;QAED,kCAAU;;;;QAAV,UAAW,MAAc;;gBACjB,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE;;gBAC5B,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC;YACrC,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,WAAW,GAAG,EAAE,IAAI,CAAC,IAAI,IAAI,WAAW,KAAK,EAAE,CAAC,EAAE;gBAC9E,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC;aACzC;iBAAM;gBACL,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;aACpC;YACD,IAAI,CAAC,oBAAoB,EAAE,CAAC;SAC7B;;;;;QAED,oCAAY;;;;QAAZ,UAAa,MAAc;YACzB,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;YAC3C,IAAI,CAAC,oBAAoB,EAAE,CAAC;SAC7B;;;;;QAED,oCAAY;;;;QAAZ,UAAa,MAAc;YACzB,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;YAC3C,IAAI,CAAC,oBAAoB,EAAE,CAAC;SAC7B;;;;QAED,sCAAc;;;QAAd;YACE,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;aACrB;SACF;;;;;QAED,kCAAU;;;;QAAV,UAAW,KAAa;YACtB,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;gBACnB,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACjB,OAAO,SAAS,CAAC,KAAK,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC,CAAC;iBACtD;qBAAM;oBACL,OAAO,SAAS,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;iBAC9B;aACF;iBAAM;gBACL,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;aACvB;SACF;;;;;QAED,oCAAY;;;;QAAZ,UAAa,KAAa,IAAI,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE;QAExD,sBAAI,sCAAW;;;;YAAf,cAA6B,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,EAAE;;;WAAA;QAE5D,sBAAI,sCAAW;;;;YAAf,cAA6B,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,EAAE;;;WAAA;;;;;QAE5D,mCAAW;;;;QAAX,UAAY,OAAsB;YAChC,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;gBACrF,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;gBACtB,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;aAClC;SACF;;;;;;QAEO,4CAAoB;;;;;QAA5B,UAA6B,OAAc;YAAd,wBAAA,EAAA,cAAc;YACzC,IAAI,OAAO,EAAE;gBACX,IAAI,CAAC,SAAS,EAAE,CAAC;aAClB;YACD,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;gBACpC,IAAI,CAAC,QAAQ,CACT,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,EAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAC,CAAC,CAAC,CAAC;aAClH;iBAAM;gBACL,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;aACnD;SACF;;oBAhQFf,cAAS,SAAC;wBACT,QAAQ,EAAE,gBAAgB;wBAC1B,aAAa,EAAEE,sBAAiB,CAAC,IAAI;wBAErC,QAAQ,EAAE,+sLA4ET;wBACD,SAAS,EAAE,CAAC,6BAA6B,CAAC;;qBAC3C;;;;oBA/FO,mBAAmB;oBACnB,cAAc;oBAbpBc,sBAAiB;oBAcX,iBAAiB;;;+BA0GtBX,UAAK;+BAKLA,UAAK;8BAKLA,UAAK;+BAKLA,UAAK;iCAULA,UAAK;iCAULA,UAAK;qCAULA,UAAK;2BAKLA,UAAK;;QAgHR,oBAAC;KAjQD;;;;;;AC1BA;QAWA;SAEC;;oBAFAE,aAAQ,SAAC,EAAC,YAAY,EAAE,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,CAACC,mBAAY,CAAC,EAAC;;QAE5F,0BAAC;KAFD;;;;;;ICXA;;;;;;;AAoCA;QAAA;YAEE,aAAQ,GAAG,IAAI,CAAC;YAChB,UAAK,GAAG,GAAG,CAAC;YACZ,aAAQ,GAAuB,QAAQ,CAAC;SACzC;;oBALAV,eAAU,SAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;6BApChC;KAoCA;;;;;;ICpCA;;;;;;AAuBA;QAAA;SAEC;;oBAFAW,cAAS,SAAC,EAAC,QAAQ,EAAE,kBAAkB,EAAC;;QAEzC,qBAAC;KAFD,IAEC;;;;;;;AAQD;QAqEE,kBAA2C,QAAgB,EAAE,MAAsB;YAAxC,aAAQ,GAAR,QAAQ,CAAQ;;;;;YAbM,qBAAgB,GAA2B,IAAI,CAAC;;;;;;;;;;YAWjG,eAAU,GAAG,IAAIV,iBAAY,EAAQ,CAAC;YAGpD,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,EAAE;gBACzB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;aACjC;YACD,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;YAC1B,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;SACjC;;;;QAED,qCAAkB;;;QAAlB,cAAuB,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE;;;;;QAEtC,8BAAW;;;;QAAX,UAAY,OAAsB;YAChC,IAAI,UAAU,IAAI,OAAO,EAAE;gBACzB,IAAI,CAAC,aAAa,EAAE,CAAC;gBACrB,IAAI,CAAC,KAAK,EAAE,CAAC;aACd;SACF;;;;QAED,uBAAI;;;QAAJ;YACE,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;SACxB;;;;;QAEO,wBAAK;;;;QAAb;YAAA,iBAIC;YAHC,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;gBACrC,IAAI,CAAC,UAAU,GAAG,UAAU;;;gBAAC,cAAM,OAAA,KAAI,CAAC,IAAI,EAAE,GAAA,GAAE,IAAI,CAAC,KAAK,CAAC,CAAC;aAC7D;SACF;;;;;QAEO,gCAAa;;;;QAArB;YACE,IAAI,IAAI,CAAC,UAAU,EAAE;gBACnB,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC9B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;aACxB;SACF;;oBAtGFC,cAAS,SAAC;wBACT,QAAQ,EAAE,WAAW;wBACrB,QAAQ,EAAE,UAAU;wBACpB,aAAa,EAAEE,sBAAiB,CAAC,IAAI;wBACrC,IAAI,EAAE;4BACJ,MAAM,EAAE,OAAO;4BACf,kBAAkB,EAAE,UAAU;4BAC9B,aAAa,EAAE,MAAM;4BACrB,eAAe,EAAE,MAAM;4BACvB,cAAc,EAAE,MAAM;4BACtB,kBAAkB,EAAE,UAAU;yBAC/B;wBACD,QAAQ,EAAE,gmBAeT;;qBAEF;;;;iDAwCciE,cAAS,SAAC,WAAW;oBAvF5B,cAAc;;;4BAwDnB9D,UAAK;+BAMLA,UAAK;6BAMLA,UAAK;uCAMLuD,iBAAY,SAAC,cAAc,EAAE,EAAC,IAAI,EAAElD,gBAAW,EAAE,MAAM,EAAE,IAAI,EAAC;iCAW9DJ,WAAM,SAAC,MAAM;;QAoChB,eAAC;KAvGD;;;;;;ACjCA;QAQA;SAEC;;oBAFAC,aAAQ,SAAC,EAAC,YAAY,EAAE,CAAC,QAAQ,EAAE,cAAc,CAAC,EAAE,OAAO,EAAE,CAACC,mBAAY,CAAC,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,cAAc,CAAC,EAAC;;QAElH,qBAAC;KAFD;;;;;;ICRA;;;;;;AASA;QAAA;YAEE,cAAS,GAAmC,IAAI,CAAC;YACjD,cAAS,GAAmB,MAAM,CAAC;YACnC,aAAQ,GAAG,aAAa,CAAC;YAEzB,mBAAc,GAAG,KAAK,CAAC;YAEvB,cAAS,GAAG,CAAC,CAAC;YACd,eAAU,GAAG,CAAC,CAAC;SAChB;;oBAVAV,eAAU,SAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;+BAThC;KASA;;;;;;ICTA;QA+BImB,QAAM,GAAG,CAAC;AAEd;QAAA;SAWC;;oBAXAjB,cAAS,SAAC;wBACT,QAAQ,EAAE,oBAAoB;wBAC9B,eAAe,EAAEC,4BAAuB,CAAC,MAAM;wBAC/C,aAAa,EAAEC,sBAAiB,CAAC,IAAI;wBACrC,IAAI,EAAE,EAAC,SAAS,EAAE,2DAA2D,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAC;wBAC/G,QAAQ,EAAE,yFAAqF;;qBAEhG;;;yBAEEG,UAAK;mCACLA,UAAK;;QACR,uBAAC;KAXD,IAWC;;;;AAKD;QAyFE,oBACY,WAAoC,EAAU,SAAoB,EAAE,QAAkB,EAC9F,wBAAkD,EAAE,gBAAkC,EAAE,MAAwB,EACxG,OAAe,EAA4B,SAAc,EAAU,eAAkC,EACrG,eAA+B;YAJ3C,iBAuBC;YAtBW,gBAAW,GAAX,WAAW,CAAyB;YAAU,cAAS,GAAT,SAAS,CAAW;YAElE,YAAO,GAAP,OAAO,CAAQ;YAA4B,cAAS,GAAT,SAAS,CAAK;YAAU,oBAAe,GAAf,eAAe,CAAmB;YACrG,oBAAe,GAAf,eAAe,CAAgB;;;;YAjBjC,UAAK,GAAG,IAAIN,iBAAY,EAAE,CAAC;;;;YAI3B,WAAM,GAAG,IAAIA,iBAAY,EAAE,CAAC;YAG9B,wBAAmB,GAAG,iBAAekB,QAAM,EAAI,CAAC;YAWtD,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;YAClC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;YAClC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;YAChC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;YAClC,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;YAC5C,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;YACxC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;YAClC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;YACpC,IAAI,CAAC,aAAa,GAAG,IAAI,YAAY,CACjC,gBAAgB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,SAAS,EAAE,wBAAwB,EAAE,eAAe,CAAC,CAAC;YAExG,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS;;;YAAC;gBAClD,IAAI,KAAI,CAAC,UAAU,EAAE;oBACnB,gBAAgB,CACZ,KAAI,CAAC,WAAW,CAAC,aAAa,EAAE,KAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,aAAa,EAAE,KAAI,CAAC,SAAS,EACtF,KAAI,CAAC,SAAS,KAAK,MAAM,EAAE,YAAY,CAAC,CAAC;iBAC9C;aACF,EAAC,CAAC;SACJ;QAOD,sBACI,kCAAU;;;;YAOd,cAAmB,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE;;;;;;;;;;;;;YAR7C,UACe,KAAgC;gBAC7C,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;gBACzB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU,EAAE;oBAC7B,IAAI,CAAC,KAAK,EAAE,CAAC;iBACd;aACF;;;WAAA;;;;;;;;;;;;;;;QAUD,yBAAI;;;;;;;;QAAJ,UAAK,OAAa;YAAlB,iBA8BC;YA7BC,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;gBAChE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;gBACrE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;gBAC1D,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC;gBAEvD,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,kBAAkB,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;gBAE1G,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,EAAE;oBAC7B,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;iBAClG;;;;gBAKD,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;;;;;;gBAOlD,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;gBAEjD,YAAY,CACR,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS;;;gBAAE,cAAM,OAAA,KAAI,CAAC,KAAK,EAAE,GAAA,GAAE,IAAI,CAAC,MAAM,EAC7E,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;gBAE9C,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;aACnB;SACF;;;;;;;;;;;;QAOD,0BAAK;;;;;;QAAL;YACE,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE;gBAC3B,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;gBACnF,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;gBAC3B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;gBACvB,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBACnB,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;aACrC;SACF;;;;;;;;;;;;QAOD,2BAAM;;;;;;QAAN;YACE,IAAI,IAAI,CAAC,UAAU,EAAE;gBACnB,IAAI,CAAC,KAAK,EAAE,CAAC;aACd;iBAAM;gBACL,IAAI,CAAC,IAAI,EAAE,CAAC;aACb;SACF;;;;;;;;QAKD,2BAAM;;;;QAAN,cAAoB,OAAO,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,EAAE;;;;QAErD,6BAAQ;;;QAAR;YACE,IAAI,CAAC,sBAAsB,GAAG,gBAAgB,CAC1C,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAC3G,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SAC/D;;;;QAED,gCAAW;;;QAAX;YACE,IAAI,CAAC,KAAK,EAAE,CAAC;;;YAGb,IAAI,IAAI,CAAC,sBAAsB,EAAE;gBAC/B,IAAI,CAAC,sBAAsB,EAAE,CAAC;aAC/B;YACD,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC;SACtC;;oBAtNFR,cAAS,SAAC,EAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY,EAAC;;;;oBApC3DL,eAAU;oBAFVD,cAAS;oBADT0D,aAAQ;oBAMRT,6BAAwB;oBADxBD,qBAAgB;oBAcV,gBAAgB;oBAZtBpB,WAAM;oDA4HwBF,WAAM,SAACwB,eAAQ;oBA1H7CrC,sBAAiB;oBACjB8C,mBAAc;;;gCA0CbzD,UAAK;gCAeLA,UAAK;+BAQLA,UAAK;gCAOLA,UAAK;qCAOLA,UAAK;mCAOLA,UAAK;gCAOLA,UAAK;iCAOLA,UAAK;4BAKLC,WAAM;6BAINA,WAAM;iCAuCND,UAAK;;QAgGR,iBAAC;KAvND;;;;;;ACjDA;QAQA;SAEC;;oBAFAE,aAAQ,SAAC,EAAC,YAAY,EAAE,CAAC,UAAU,EAAE,gBAAgB,CAAC,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC,gBAAgB,CAAC,EAAC;;QAEpH,uBAAC;KAFD;;;;;;ICRA;;;;;;;;AAWA;QAAA;;;;YAeW,mBAAc,GAAG,eAAe,CAAC;SAwB3C;;;;;QARC,kCAAW;;;;QAAX,UAAY,OAAsB;;gBAC1B,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;;gBAE9B,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;;gBAC1D,YAAY,GAAG,KAAK,CAAC,GAAG;;;;YAAC,UAAA,IAAI,IAAI,OAAA,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAA,EAAC,CAAC,MAAM;;;;YAAC,UAAA,IAAI,IAAI,OAAA,IAAI,GAAA,EAAC;YAEzF,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,MAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,MAAG,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;SAC9G;;oBAtCFP,cAAS,SAAC;wBACT,QAAQ,EAAE,eAAe;wBACzB,eAAe,EAAEC,4BAAuB,CAAC,MAAM;wBAC/C,aAAa,EAAEC,sBAAiB,CAAC,IAAI;wBACrC,QAAQ,EAAE,oEAAgE;4BACtE,sHAAkH;4BAClH,gBAAgB;;qBAErB;;;qCAOEG,UAAK;6BAQLA,UAAK;2BAMLA,UAAK;;QAUR,mBAAC;KAvCD;;;;;;ACXA;QAmBA;YAqBE,cAAS,GAAG,CAAC,CAAC;;;;YAWL,eAAU,GAAG,IAAI,CAAC;;;;;YAgBlB,cAAS,GAAG,QAAQ,CAAC;;;;YAUZ,gBAAW,GAAG,IAAIN,iBAAY,EAAE,CAAC;YAE3B,sBAAiB,GAAG,IAAIA,iBAAY,EAAE,CAAC;SA2ChE;;;;QAzCC,sCAAS;;;QAAT,cAAc,OAAO,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;;;;QAEnF,sCAAS;;;QAAT,cAAc,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE;;;;;QAEpD,uCAAU;;;;QAAV,UAAW,SAAiB;YAC1B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAC3B,IAAI,CAAC,cAAc,EAAE,CAAC;SACvB;;;;QAED,iCAAI;;;QAAJ;YACE,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC9C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;aACpF;iBAAM;gBACL,IAAI,CAAC,SAAS,EAAE,CAAC;aAClB;YACD,IAAI,CAAC,cAAc,EAAE,CAAC;SACvB;;;;QAED,iCAAI;;;QAAJ;YACE,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE;gBACtB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;aAC1C;iBAAM,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE;gBAC/B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;aACjE;iBAAM;gBACL,IAAI,CAAC,SAAS,EAAE,CAAC;aAClB;YACD,IAAI,CAAC,cAAc,EAAE,CAAC;SACvB;;;;QAED,wCAAW;;;QAAX;YACE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1C,IAAI,CAAC,cAAc,EAAE,CAAC;SACvB;;;;;QAED,mCAAM;;;;QAAN,UAAO,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE;;;;QAE7C,qCAAQ;;;QAAR,cAAa,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE;;;;;QAE1B,2CAAc;;;;QAAtB;YACE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;SAC/F;;oBAtGFC,cAAS,SAAC;wBACT,QAAQ,EAAE,sBAAsB;wBAChC,QAAQ,EAAE,oBAAoB;wBAC9B,IAAI,EAAE,EAAC,aAAa,EAAE,yBAAyB,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAC;wBAChH,QAAQ,EAAE,gtBAcT;qBACF;;;yBAQEK,UAAK;iCAKLA,UAAK;8BAKLA,UAAK;2BAKLA,UAAK;gCAMLA,UAAK;qCAKLA,UAAK;kCAKLC,WAAM,SAAC,QAAQ;wCAEfA,WAAM,SAAC,cAAc;;QA2CxB,yBAAC;KAvGD;;;;;;ICnBA;AAQA,QAAa,eAAe,GAAG,IAAI8D,mBAAc,CAC7C,sBAAsB,EAAE,EAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,EAAC,CAAC;;;;IACnF,SAAgB,uBAAuB;QACrC,OAAO,GAAG,CAAC;KACZ;;;;;;IAGD,SAAS,cAAc,CAAC,QAAa,EAAE,UAAkB;QAAlB,2BAAA,EAAA,kBAAkB;;YACnD,OAAO,sBAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,EAAe;QAErE,IAAI,OAAO,IAAI,IAAI,IAAI,UAAU,EAAE;YACjC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAExC,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YACvC,OAAO,CAAC,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;YAC5C,OAAO,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;YAE5C,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAEjC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;SACpC;QAED,OAAO,OAAO,CAAC;KAChB;AAID;QAEE,cAAsC,SAAc,EAAmC,MAAW;YAA5D,cAAS,GAAT,SAAS,CAAK;YAAmC,WAAM,GAAN,MAAM,CAAK;SAAI;;;;QAEtG,0BAAW;;;QAAX;;gBACQ,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC;YAC9C,IAAI,OAAO,EAAE;gBACX,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;aAC5C;SACF;;;;;QAED,kBAAG;;;;QAAH,UAAI,OAAe;;gBACX,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC;;gBAC9C,KAAK,GAAG,IAAI,CAAC,MAAM;YAEzB,OAAO,CAAC,WAAW,GAAG,EAAE,CAAC;;gBACnB,OAAO;;;YAAG,cAAM,OAAA,OAAO,CAAC,WAAW,GAAG,OAAO,GAAA,CAAA;YACnD,IAAI,KAAK,KAAK,IAAI,EAAE;gBAClB,OAAO,EAAE,CAAC;aACX;iBAAM;gBACL,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;aAC5B;SACF;;oBAtBFtE,eAAU,SAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;;oDAEjB+B,WAAM,SAACwB,eAAQ;oDAA2BxB,WAAM,SAAC,eAAe;;;mBArC/E;KAmCA;;;;;;ICnCA;;;;;;AASA;QAAA;YAGE,aAAQ,GAAG,IAAI,CAAC;YAChB,eAAU,GAAG,IAAI,CAAC;YAClB,aAAQ,GAAG,KAAK,CAAC;YACjB,cAAS,GAAmB,CAAC,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;SACtF;;oBAPA/B,eAAU,SAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;iCAThC;KASA;;;;;;ICTA;QAoCM,4BAA4B,GAAG;QACnC,OAAO,EAAEgB,uBAAiB;QAC1B,WAAW,EAAEC,eAAU;;;QAAC,cAAM,OAAA,YAAY,GAAA,EAAC;QAC3C,KAAK,EAAE,IAAI;KACZ;;QAiBG,YAAY,GAAG,CAAC;;;;AAKpB;QAgIE,sBACY,WAAyC,EAAU,iBAAmC,EACtF,SAAoB,EAAU,SAAmB,EAAE,wBAAkD,EAC7G,MAA0B,EAAE,MAAc,EAAU,KAAW,EAA4B,SAAc,EACjG,OAAe,EAAU,eAAkC,EAAU,eAA+B;YAJhH,iBA0BC;YAzBW,gBAAW,GAAX,WAAW,CAA8B;YAAU,sBAAiB,GAAjB,iBAAiB,CAAkB;YACtF,cAAS,GAAT,SAAS,CAAW;YAAU,cAAS,GAAT,SAAS,CAAU;YACL,UAAK,GAAL,KAAK,CAAM;YAA4B,cAAS,GAAT,SAAS,CAAK;YACjG,YAAO,GAAP,OAAO,CAAQ;YAAU,oBAAe,GAAf,eAAe,CAAmB;YAAU,oBAAe,GAAf,eAAe,CAAgB;YA7GxG,aAAQ,GAAG,IAAIG,YAAO,EAAE,CAAC;;;;;;;;YAcxB,iBAAY,GAAG,KAAK,CAAC;;;;;;;;;;;;;;YA4ErB,cAAS,GAAmB,aAAa,CAAC;;;;;;YAOzC,eAAU,GAAG,IAAInB,iBAAY,EAA+B,CAAC;YAGvE,YAAO,GAAG,mBAAiB,YAAY,EAAI,CAAC;YAEpC,eAAU;;;YAAG,eAAQ,EAAC;YACtB,cAAS;;;;YAAG,UAAC,CAAM,KAAO,EAAC;YAOjC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;YAClC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;YAChC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;YACpC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;YAChC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;YAElC,IAAI,CAAC,aAAa,GAAG2C,cAAS,CAAQ,WAAW,CAAC,aAAa,EAAE,OAAO,CAAC;iBAC/C,IAAI,CAACpB,aAAG;;;;YAAC,UAAA,MAAM,IAAI,OAAA,oBAAC,MAAM,CAAC,MAAM,IAAsB,KAAK,GAAA,EAAC,CAAC,CAAC;YAEzF,IAAI,CAAC,qBAAqB,GAAG,IAAIH,oBAAe,CAAC,IAAI,CAAC,CAAC;YAEvD,IAAI,CAAC,aAAa,GAAG,IAAI,YAAY,CACjC,kBAAkB,EAAE,SAAS,EAAE,iBAAiB,EAAE,SAAS,EAAE,wBAAwB,EAAE,eAAe,CAAC,CAAC;YAE5G,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS;;;YAAC;gBACjD,IAAI,KAAI,CAAC,WAAW,EAAE,EAAE;oBACtB,gBAAgB,CACZ,KAAI,CAAC,WAAW,CAAC,aAAa,EAAE,KAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,aAAa,EAAE,KAAI,CAAC,SAAS,EACtF,KAAI,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC;iBAChC;aACF,EAAC,CAAC;SACJ;;;;QAED,+BAAQ;;;QAAR;YAAA,iBAeC;;gBAdO,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAACkD,aAAG;;;;YAAC,UAAA,KAAK;gBACpD,KAAI,CAAC,iBAAiB,GAAG,KAAI,CAAC,QAAQ,GAAG,KAAK,GAAG,IAAI,CAAC;gBACtD,IAAI,KAAI,CAAC,QAAQ,EAAE;oBACjB,KAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;iBACvB;aACF,EAAC,CAAC;;gBACG,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;;gBAC/C,iBAAiB,GAAG,QAAQ,CAAC,IAAI,CAACA,aAAG;;;YAAC;gBAC1C,IAAI,CAAC,KAAI,CAAC,QAAQ,EAAE;oBAClB,KAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;iBAC3B;aACF,EAAC,CAAC;;gBACG,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC5C,mBAAS;;;YAAC,cAAM,OAAA,iBAAiB,GAAA,EAAC,CAAC;YACtF,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;SAC7D;;;;QAED,kCAAW;;;QAAX;YACE,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,IAAI,CAAC,yBAAyB,EAAE,CAAC;YACjC,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC;SACtC;;;;;QAED,uCAAgB;;;;QAAhB,UAAiB,EAAuB,IAAU,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,EAAE;;;;;QAExE,wCAAiB;;;;QAAjB,UAAkB,EAAa,IAAU,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,EAAE;;;;;QAEhE,iCAAU;;;;QAAV,UAAW,KAAK;YACd,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;YACvD,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;aAChC;SACF;;;;;QAED,uCAAgB;;;;QAAhB,UAAiB,UAAmB;YAClC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;SACpF;;;;;;;;QAKD,mCAAY;;;;QAAZ;YACE,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;gBACtB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,iBAAiB,KAAK,IAAI,EAAE;oBACpD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;iBAC/C;gBACD,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;aACrC;SACF;;;;;;;;QAKD,kCAAW;;;;QAAX,cAAgB,OAAO,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,EAAE;;;;QAEjD,iCAAU;;;QAAV;YACE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,CAAC,UAAU,EAAE,CAAC;SACnB;;;;;QAED,oCAAa;;;;QAAb,UAAc,KAAoB;YAChC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;gBACvB,OAAO;aACR;;YAGD,QAAQ,KAAK,CAAC,KAAK;gBACjB,KAAK,GAAG,CAAC,SAAS;oBAChB,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;oBAChC,IAAI,CAAC,SAAS,EAAE,CAAC;oBACjB,MAAM;gBACR,KAAK,GAAG,CAAC,OAAO;oBACd,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;oBAChC,IAAI,CAAC,SAAS,EAAE,CAAC;oBACjB,MAAM;gBACR,KAAK,GAAG,CAAC,KAAK,CAAC;gBACf,KAAK,GAAG,CAAC,GAAG;;wBACJ,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,EAAE;oBACnD,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE;wBACrB,KAAK,CAAC,cAAc,EAAE,CAAC;wBACvB,KAAK,CAAC,eAAe,EAAE,CAAC;wBACxB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;qBAC5B;oBACD,IAAI,CAAC,WAAW,EAAE,CAAC;oBACnB,MAAM;aACT;SACF;;;;;QAEO,iCAAU;;;;QAAlB;YAAA,iBAkBC;YAjBC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;gBACvB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC;gBAC9D,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;gBAC5C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;gBAC3C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS;;;;gBAAC,UAAC,MAAW,IAAK,OAAA,KAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,GAAA,EAAC,CAAC;gBACtG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,iBAAiB,CAAC,SAAS;;;;gBAAC,UAAC,QAAgB,IAAK,OAAA,KAAI,CAAC,gBAAgB,GAAG,QAAQ,GAAA,EAAC,CAAC;gBAE7G,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,EAAE;oBAC7B,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;iBACnG;gBAED,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;gBAEpC,YAAY,CACR,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,SAAS;;;gBAAE,cAAM,OAAA,KAAI,CAAC,YAAY,EAAE,GAAA,GAAE,IAAI,CAAC,QAAQ,EACjF,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;aAC/E;SACF;;;;;QAEO,kCAAW;;;;QAAnB;YACE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACrB,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;YAC3B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACvB,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;SACnC;;;;;;QAEO,oCAAa;;;;;QAArB,UAAsB,MAAW;;gBAC3B,gBAAgB,GAAG,KAAK;YAC5B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,MAAM,EAAE,cAAc;;;gBAAE,cAAQ,gBAAgB,GAAG,IAAI,CAAC,EAAE,CAAA,EAAC,CAAC,CAAC;YACzF,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEtC,IAAI,CAAC,gBAAgB,EAAE;gBACrB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACxB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;aACxB;SACF;;;;;;QAEO,8CAAuB;;;;;QAA/B,UAAgC,MAAW;YACzC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAC3B,IAAI,CAAC,WAAW,EAAE,CAAC;SACpB;;;;;QAEO,gCAAS;;;;QAAjB;YACE,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,EAAE;;oBACrF,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE;;oBACzD,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;gBAEnF,IAAI,kBAAkB,KAAK,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE;oBAC9F,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,iBAAiB,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;oBACnG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC,KAAK,CACrD,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;iBAC3F;qBAAM;oBACL,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;iBACrC;aACF;SACF;;;;;;QAEO,0CAAmB;;;;;QAA3B,UAA4B,IAAS;YACnC,OAAO,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;SACzF;;;;;;QAEO,uCAAgB;;;;;QAAxB,UAAyB,KAAa;YACpC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;SACtF;;;;;;QAEO,4CAAqB;;;;;QAA7B,UAA8B,UAA6B;YAA3D,iBA6BC;YA5BC,OAAO,UAAU,CAAC,SAAS;;;;YAAC,UAAC,OAAO;gBAClC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;oBACpC,KAAI,CAAC,WAAW,EAAE,CAAC;iBACpB;qBAAM;oBACL,KAAI,CAAC,UAAU,EAAE,CAAC;oBAClB,KAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,GAAG,KAAI,CAAC,UAAU,CAAC;oBACtD,KAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC;oBAC3C,KAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,GAAG,KAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC;oBACrE,IAAI,KAAI,CAAC,eAAe,EAAE;wBACxB,KAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,GAAG,KAAI,CAAC,eAAe,CAAC;qBAC3D;oBACD,IAAI,KAAI,CAAC,cAAc,EAAE;wBACvB,KAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,cAAc,GAAG,KAAI,CAAC,cAAc,CAAC;qBAC/D;oBACD,KAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;;;;oBAKvC,KAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;oBAElD,KAAI,CAAC,SAAS,EAAE,CAAC;iBAClB;;;oBAGK,KAAK,GAAG,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC;gBAC1C,KAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,sBAAsB,GAAM,KAAK,gBAAU,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,gBAAY,CAAC,CAAC;aAC7G,EAAC,CAAC;SACJ;;;;;QAEO,gDAAyB;;;;QAAjC;YACE,IAAI,IAAI,CAAC,aAAa,EAAE;gBACtB,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;aAClC;YACD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;SAC3B;;oBA9VFhB,cAAS,SAAC;wBACT,QAAQ,EAAE,qBAAqB;wBAC/B,QAAQ,EAAE,cAAc;wBACxB,IAAI,EAAE;4BACJ,QAAQ,EAAE,cAAc;4BACxB,cAAc,EAAE,eAAe;4BAC/B,WAAW,EAAE,uBAAuB;4BACpC,gBAAgB,EAAE,cAAc;4BAChC,gBAAgB,EAAE,KAAK;4BACvB,aAAa,EAAE,KAAK;4BACpB,MAAM,EAAE,UAAU;4BAClB,gBAAgB,EAAE,OAAO;4BACzB,0BAA0B,EAAE,4BAA4B;4BACxD,8BAA8B,EAAE,kBAAkB;4BAClD,kBAAkB,EAAE,gCAAgC;4BACpD,sBAAsB,EAAE,eAAe;yBACxC;wBACD,SAAS,EAAE,CAAC,4BAA4B,CAAC;qBAC1C;;;;oBA3ECL,eAAU;oBAYV+C,qBAAgB;oBAFhBhD,cAAS;oBANT0D,aAAQ;oBAPRT,6BAAwB;oBA8BlB,kBAAkB;oBArBxBrB,WAAM;oBAcA,IAAI;oDAwK4DF,WAAM,SAACwB,eAAQ;oBAtLrFtB,WAAM;oBAVNf,sBAAiB;oBAiBjB8C,mBAAc;;;mCAiFbzD,UAAK;gCAOLA,UAAK;+BAKLA,UAAK;iCAKLA,UAAK;qCAQLA,UAAK;mCAaLA,UAAK;sCASLA,UAAK;qCASLA,UAAK;+BAKLA,UAAK;gCAeLA,UAAK;iCAOLC,WAAM;;QAuOT,mBAAC;KA/VD;;;;;;AC9DA;QAYA;SAOC;;oBAPAC,aAAQ,SAAC;wBACR,YAAY,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,kBAAkB,CAAC;wBAC9D,OAAO,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC;wBACrC,OAAO,EAAE,CAACC,mBAAY,CAAC;wBACvB,eAAe,EAAE,CAAC,kBAAkB,CAAC;qBACtC;;QAED,yBAAC;KAPD;;;;;;ICZA;QAmIM,WAAW,GAAG;QAClB,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,mBAAmB;QAC7H,iBAAiB,EAAE,cAAc,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,eAAe;QAC/G,eAAe,EAAE,mBAAmB,EAAE,cAAc,EAAE,gBAAgB,EAAE,kBAAkB;KAC3F;AAED;QAAA;SAEC;;oBAFAD,aAAQ,SAAC,EAAC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAC;;QAEtD,gBAAC;KAFD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"} \ No newline at end of file diff --git a/dist/sunbird-ui-components/bundles/sunbird-ui-components.umd.min.js b/dist/sunbird-ui-components/bundles/sunbird-ui-components.umd.min.js new file mode 100644 index 0000000..bedb1e8 --- /dev/null +++ b/dist/sunbird-ui-components/bundles/sunbird-ui-components.umd.min.js @@ -0,0 +1,2 @@ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("@angular/core"),require("@angular/common"),require("@angular/forms"),require("rxjs"),require("rxjs/operators")):"function"==typeof define&&define.amd?define("sb",["exports","@angular/core","@angular/common","@angular/forms","rxjs","rxjs/operators"],e):e((t=t||self).sb={},t.ng.core,t.ng.common,t.ng.forms,t.rxjs,t.rxjs.operators)}(this,function(t,e,n,o,i,r){"use strict";var a=function(t,e){return(a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)};function s(t,e){function n(){this.constructor=t}a(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}var p=function(){return(p=Object.assign||function(t){for(var e,n=1,o=arguments.length;n0)&&!(o=r.next()).done;)a.push(o.value)}catch(t){i={error:t}}finally{try{o&&!o.done&&(n=r.return)&&n.call(r)}finally{if(i)throw i.error}}return a}var c=function(){function t(){this.dismissible=!0,this.type="warning"}return t.decorators=[{type:e.Injectable,args:[{providedIn:"root"}]}],t.ngInjectableDef=e.ɵɵdefineInjectable({factory:function(){return new t},token:t,providedIn:"root"}),t}(),u=function(){function t(t,n,o){this._renderer=n,this._element=o,this.close=new e.EventEmitter,this.dismissible=t.dismissible,this.type=t.type}return t.prototype.closeHandler=function(){this.close.emit(null)},t.prototype.ngOnChanges=function(t){var e=t.type;e&&!e.firstChange&&(this._renderer.removeClass(this._element.nativeElement,"alert-"+e.previousValue),this._renderer.addClass(this._element.nativeElement,"alert-"+e.currentValue))},t.prototype.ngOnInit=function(){this._renderer.addClass(this._element.nativeElement,"alert-"+this.type)},t.decorators=[{type:e.Component,args:[{selector:"sb-card",changeDetection:e.ChangeDetectionStrategy.OnPush,encapsulation:e.ViewEncapsulation.None,host:{role:"alert",class:"alert","[class.alert-dismissible]":"dismissible"},template:'\n \n \n ',styles:["ngb-alert{display:block}"]}]}],t.ctorParameters=function(){return[{type:c},{type:e.Renderer2},{type:e.ElementRef}]},t.propDecorators={dismissible:[{type:e.Input}],type:[{type:e.Input}],close:[{type:e.Output}]},t}(),d=function(){function t(){}return t.decorators=[{type:e.NgModule,args:[{declarations:[u],exports:[u],imports:[n.CommonModule],entryComponents:[u]}]}],t}();function h(t){return parseInt(""+t,10)}function f(t){return null!=t?""+t:""}function g(t,e,n){return void 0===n&&(n=0),Math.max(Math.min(t,e),n)}function m(t){return"string"==typeof t}function y(t){return!isNaN(h(t))}function b(t){return"number"==typeof t&&isFinite(t)&&Math.floor(t)===t}function v(t){return null!=t}function _(t){return y(t)?("0"+t).slice(-2):""}function w(t,e){return t&&t.className&&t.className.split&&t.className.split(/\s+/).indexOf(e)>=0}"undefined"==typeof Element||Element.prototype.closest||(Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector),Element.prototype.closest=function(t){var e=this;if(!document.documentElement.contains(e))return null;do{if(e.matches(t))return e;e=e.parentElement||e.parentNode}while(null!==e&&1===e.nodeType);return null});var D=function(){function t(){this.closeOthers=!1}return t.decorators=[{type:e.Injectable,args:[{providedIn:"root"}]}],t.ngInjectableDef=e.ɵɵdefineInjectable({factory:function(){return new t},token:t,providedIn:"root"}),t}(),I=0,C=function(){function t(t){this.templateRef=t}return t.decorators=[{type:e.Directive,args:[{selector:"ng-template[ngbPanelHeader]"}]}],t.ctorParameters=function(){return[{type:e.TemplateRef}]},t}(),k=function(){function t(t){this.templateRef=t}return t.decorators=[{type:e.Directive,args:[{selector:"ng-template[ngbPanelTitle]"}]}],t.ctorParameters=function(){return[{type:e.TemplateRef}]},t}(),x=function(){function t(t){this.templateRef=t}return t.decorators=[{type:e.Directive,args:[{selector:"ng-template[ngbPanelContent]"}]}],t.ctorParameters=function(){return[{type:e.TemplateRef}]},t}(),R=function(){function t(){this.disabled=!1,this.id="ngb-panel-"+I++,this.isOpen=!1}return t.prototype.ngAfterContentChecked=function(){this.titleTpl=this.titleTpls.first,this.headerTpl=this.headerTpls.first,this.contentTpl=this.contentTpls.first},t.decorators=[{type:e.Directive,args:[{selector:"ngb-panel"}]}],t.propDecorators={disabled:[{type:e.Input}],id:[{type:e.Input}],title:[{type:e.Input}],type:[{type:e.Input}],titleTpls:[{type:e.ContentChildren,args:[k,{descendants:!1}]}],headerTpls:[{type:e.ContentChildren,args:[C,{descendants:!1}]}],contentTpls:[{type:e.ContentChildren,args:[x,{descendants:!1}]}]},t}(),E=function(){function t(t){this.activeIds=[],this.destroyOnHide=!0,this.panelChange=new e.EventEmitter,this.type=t.type,this.closeOtherPanels=t.closeOthers}return t.prototype.isExpanded=function(t){return this.activeIds.indexOf(t)>-1},t.prototype.expand=function(t){this._changeOpenState(this._findPanelById(t),!0)},t.prototype.expandAll=function(){var t=this;this.closeOtherPanels?0===this.activeIds.length&&this.panels.length&&this._changeOpenState(this.panels.first,!0):this.panels.forEach(function(e){return t._changeOpenState(e,!0)})},t.prototype.collapse=function(t){this._changeOpenState(this._findPanelById(t),!1)},t.prototype.collapseAll=function(){var t=this;this.panels.forEach(function(e){t._changeOpenState(e,!1)})},t.prototype.toggle=function(t){var e=this._findPanelById(t);e&&this._changeOpenState(e,!e.isOpen)},t.prototype.ngAfterContentChecked=function(){var t=this;m(this.activeIds)&&(this.activeIds=this.activeIds.split(/\s*,\s*/)),this.panels.forEach(function(e){return e.isOpen=!e.disabled&&t.activeIds.indexOf(e.id)>-1}),this.activeIds.length>1&&this.closeOtherPanels&&(this._closeOthers(this.activeIds[0]),this._updateActiveIds())},t.prototype._changeOpenState=function(t,e){if(t&&!t.disabled&&t.isOpen!==e){var n=!1;this.panelChange.emit({panelId:t.id,nextState:e,preventDefault:function(){n=!0}}),n||(t.isOpen=e,e&&this.closeOtherPanels&&this._closeOthers(t.id),this._updateActiveIds())}},t.prototype._closeOthers=function(t){this.panels.forEach(function(e){e.id!==t&&(e.isOpen=!1)})},t.prototype._findPanelById=function(t){return this.panels.find(function(e){return e.id===t})},t.prototype._updateActiveIds=function(){this.activeIds=this.panels.filter(function(t){return t.isOpen&&!t.disabled}).map(function(t){return t.id})},t.decorators=[{type:e.Component,args:[{selector:"ngb-accordion",exportAs:"ngbAccordion",host:{class:"accordion",role:"tablist","[attr.aria-multiselectable]":"!closeOtherPanels"},template:'\n \n \n \n \n
\n \n
\n
\n \n
\n
\n
\n
\n '}]}],t.ctorParameters=function(){return[{type:D}]},t.propDecorators={panels:[{type:e.ContentChildren,args:[R]}],activeIds:[{type:e.Input}],closeOtherPanels:[{type:e.Input,args:["closeOthers"]}],destroyOnHide:[{type:e.Input}],type:[{type:e.Input}],panelChange:[{type:e.Output}]},t}(),S=function(){function t(t,e){this.accordion=t,this.panel=e}return Object.defineProperty(t.prototype,"ngbPanelToggle",{set:function(t){t&&(this.panel=t)},enumerable:!0,configurable:!0}),t.decorators=[{type:e.Directive,args:[{selector:"button[ngbPanelToggle]",host:{type:"button","[disabled]":"panel.disabled","[class.collapsed]":"!panel.isOpen","[attr.aria-expanded]":"panel.isOpen","[attr.aria-controls]":"panel.id","(click)":"accordion.toggle(panel.id)"}}]}],t.ctorParameters=function(){return[{type:E},{type:R,decorators:[{type:e.Optional},{type:e.Host}]}]},t.propDecorators={ngbPanelToggle:[{type:e.Input}]},t}(),T=[E,R,k,x,C,S],O=function(){function t(){}return t.decorators=[{type:e.NgModule,args:[{declarations:T,exports:T,imports:[n.CommonModule]}]}],t}(),N=function(){function t(){this.dismissible=!0,this.type="warning"}return t.decorators=[{type:e.Injectable,args:[{providedIn:"root"}]}],t.ngInjectableDef=e.ɵɵdefineInjectable({factory:function(){return new t},token:t,providedIn:"root"}),t}(),M=function(){function t(t,n,o){this._renderer=n,this._element=o,this.close=new e.EventEmitter,this.dismissible=t.dismissible,this.type=t.type}return t.prototype.closeHandler=function(){this.close.emit(null)},t.prototype.ngOnChanges=function(t){var e=t.type;e&&!e.firstChange&&(this._renderer.removeClass(this._element.nativeElement,"alert-"+e.previousValue),this._renderer.addClass(this._element.nativeElement,"alert-"+e.currentValue))},t.prototype.ngOnInit=function(){this._renderer.addClass(this._element.nativeElement,"alert-"+this.type)},t.decorators=[{type:e.Component,args:[{selector:"ngb-alert",changeDetection:e.ChangeDetectionStrategy.OnPush,encapsulation:e.ViewEncapsulation.None,host:{role:"alert",class:"alert","[class.alert-dismissible]":"dismissible"},template:'\n \n \n ',styles:["ngb-alert{display:block}"]}]}],t.ctorParameters=function(){return[{type:N},{type:e.Renderer2},{type:e.ElementRef}]},t.propDecorators={dismissible:[{type:e.Input}],type:[{type:e.Input}],close:[{type:e.Output}]},t}(),P=function(){function t(){}return t.decorators=[{type:e.NgModule,args:[{declarations:[M],exports:[M],imports:[n.CommonModule],entryComponents:[M]}]}],t}(),j=function(){function t(){}return t.decorators=[{type:e.Directive,args:[{selector:"[ngbButtonLabel]",host:{"[class.btn]":"true","[class.active]":"active","[class.disabled]":"disabled","[class.focus]":"focused"}}]}],t}(),A={provide:o.NG_VALUE_ACCESSOR,useExisting:e.forwardRef(function(){return F}),multi:!0},F=function(){function t(t,e){this._label=t,this._cd=e,this.disabled=!1,this.valueChecked=!0,this.valueUnChecked=!1,this.onChange=function(t){},this.onTouched=function(){}}return Object.defineProperty(t.prototype,"focused",{set:function(t){this._label.focused=t,t||this.onTouched()},enumerable:!0,configurable:!0}),t.prototype.onInputChange=function(t){var e=t.target.checked?this.valueChecked:this.valueUnChecked;this.onChange(e),this.onTouched(),this.writeValue(e)},t.prototype.registerOnChange=function(t){this.onChange=t},t.prototype.registerOnTouched=function(t){this.onTouched=t},t.prototype.setDisabledState=function(t){this.disabled=t,this._label.disabled=t},t.prototype.writeValue=function(t){this.checked=t===this.valueChecked,this._label.active=this.checked,this._cd.markForCheck()},t.decorators=[{type:e.Directive,args:[{selector:"[ngbButton][type=checkbox]",host:{autocomplete:"off","[checked]":"checked","[disabled]":"disabled","(change)":"onInputChange($event)","(focus)":"focused = true","(blur)":"focused = false"},providers:[A]}]}],t.ctorParameters=function(){return[{type:j},{type:e.ChangeDetectorRef}]},t.propDecorators={disabled:[{type:e.Input}],valueChecked:[{type:e.Input}],valueUnChecked:[{type:e.Input}]},t}(),V={provide:o.NG_VALUE_ACCESSOR,useExisting:e.forwardRef(function(){return L}),multi:!0},H=0,L=function(){function t(){this._radios=new Set,this._value=null,this.name="ngb-radio-"+H++,this.onChange=function(t){},this.onTouched=function(){}}return Object.defineProperty(t.prototype,"disabled",{get:function(){return this._disabled},set:function(t){this.setDisabledState(t)},enumerable:!0,configurable:!0}),t.prototype.onRadioChange=function(t){this.writeValue(t.value),this.onChange(t.value)},t.prototype.onRadioValueUpdate=function(){this._updateRadiosValue()},t.prototype.register=function(t){this._radios.add(t)},t.prototype.registerOnChange=function(t){this.onChange=t},t.prototype.registerOnTouched=function(t){this.onTouched=t},t.prototype.setDisabledState=function(t){this._disabled=t,this._updateRadiosDisabled()},t.prototype.unregister=function(t){this._radios.delete(t)},t.prototype.writeValue=function(t){this._value=t,this._updateRadiosValue()},t.prototype._updateRadiosValue=function(){var t=this;this._radios.forEach(function(e){return e.updateValue(t._value)})},t.prototype._updateRadiosDisabled=function(){this._radios.forEach(function(t){return t.updateDisabled()})},t.decorators=[{type:e.Directive,args:[{selector:"[ngbRadioGroup]",host:{role:"radiogroup"},providers:[V]}]}],t.propDecorators={name:[{type:e.Input}]},t}(),W=function(){function t(t,e,n,o,i){this._group=t,this._label=e,this._renderer=n,this._element=o,this._cd=i,this._value=null,this._group.register(this),this.updateDisabled()}return Object.defineProperty(t.prototype,"value",{get:function(){return this._value},set:function(t){this._value=t;var e=t?t.toString():"";this._renderer.setProperty(this._element.nativeElement,"value",e),this._group.onRadioValueUpdate()},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"disabled",{get:function(){return this._group.disabled||this._disabled},set:function(t){this._disabled=!1!==t,this.updateDisabled()},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"focused",{set:function(t){this._label&&(this._label.focused=t),t||this._group.onTouched()},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"checked",{get:function(){return this._checked},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"nameAttr",{get:function(){return this.name||this._group.name},enumerable:!0,configurable:!0}),t.prototype.ngOnDestroy=function(){this._group.unregister(this)},t.prototype.onChange=function(){this._group.onRadioChange(this)},t.prototype.updateValue=function(t){this.value!==t&&this._cd.markForCheck(),this._checked=this.value===t,this._label.active=this._checked},t.prototype.updateDisabled=function(){this._label.disabled=this.disabled},t.decorators=[{type:e.Directive,args:[{selector:"[ngbButton][type=radio]",host:{"[checked]":"checked","[disabled]":"disabled","[name]":"nameAttr","(change)":"onChange()","(focus)":"focused = true","(blur)":"focused = false"}}]}],t.ctorParameters=function(){return[{type:L},{type:j},{type:e.Renderer2},{type:e.ElementRef},{type:e.ChangeDetectorRef}]},t.propDecorators={name:[{type:e.Input}],value:[{type:e.Input,args:["value"]}],disabled:[{type:e.Input,args:["disabled"]}]},t}(),$=[j,F,L,W],z=function(){function t(){}return t.decorators=[{type:e.NgModule,args:[{declarations:$,exports:$}]}],t}(),B=function(){function t(){this.interval=5e3,this.wrap=!0,this.keyboard=!0,this.pauseOnHover=!0,this.showNavigationArrows=!0,this.showNavigationIndicators=!0}return t.decorators=[{type:e.Injectable,args:[{providedIn:"root"}]}],t.ngInjectableDef=e.ɵɵdefineInjectable({factory:function(){return new t},token:t,providedIn:"root"}),t}(),U=0,K=function(){function t(t){this.tplRef=t,this.id="ngb-slide-"+U++}return t.decorators=[{type:e.Directive,args:[{selector:"ng-template[ngbSlide]"}]}],t.ctorParameters=function(){return[{type:e.TemplateRef}]},t.propDecorators={id:[{type:e.Input}]},t}(),q=function(){function t(t,n,o,r){this._platformId=n,this._ngZone=o,this._cd=r,this.NgbSlideEventSource=Z,this._destroy$=new i.Subject,this._interval$=new i.BehaviorSubject(0),this._mouseHover$=new i.BehaviorSubject(!1),this._pauseOnHover$=new i.BehaviorSubject(!1),this._pause$=new i.BehaviorSubject(!1),this._wrap$=new i.BehaviorSubject(!1),this.slide=new e.EventEmitter,this.interval=t.interval,this.wrap=t.wrap,this.keyboard=t.keyboard,this.pauseOnHover=t.pauseOnHover,this.showNavigationArrows=t.showNavigationArrows,this.showNavigationIndicators=t.showNavigationIndicators}return Object.defineProperty(t.prototype,"interval",{get:function(){return this._interval$.value},set:function(t){this._interval$.next(t)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"wrap",{get:function(){return this._wrap$.value},set:function(t){this._wrap$.next(t)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"pauseOnHover",{get:function(){return this._pauseOnHover$.value},set:function(t){this._pauseOnHover$.next(t)},enumerable:!0,configurable:!0}),t.prototype.mouseEnter=function(){this._mouseHover$.next(!0)},t.prototype.mouseLeave=function(){this._mouseHover$.next(!1)},t.prototype.ngAfterContentInit=function(){var t=this;n.isPlatformBrowser(this._platformId)&&this._ngZone.runOutsideAngular(function(){var e=i.combineLatest(t.slide.pipe(r.map(function(t){return t.current}),r.startWith(t.activeId)),t._wrap$,t.slides.changes.pipe(r.startWith(null))).pipe(r.map(function(e){var n=l(e,2),o=n[0],i=n[1],r=t.slides.toArray(),a=t._getSlideIdxById(o);return i?r.length>1:a0?i.timer(t,t):i.NEVER}),r.takeUntil(t._destroy$)).subscribe(function(){return t._ngZone.run(function(){return t.next(Z.TIMER)})})}),this.slides.changes.pipe(r.takeUntil(this._destroy$)).subscribe(function(){return t._cd.markForCheck()})},t.prototype.ngAfterContentChecked=function(){var t=this._getSlideById(this.activeId);this.activeId=t?t.id:this.slides.length?this.slides.first.id:null},t.prototype.ngOnDestroy=function(){this._destroy$.next()},t.prototype.select=function(t,e){this._cycleToSelected(t,this._getSlideEventDirection(this.activeId,t),e)},t.prototype.prev=function(t){this._cycleToSelected(this._getPrevSlide(this.activeId),G.RIGHT,t)},t.prototype.next=function(t){this._cycleToSelected(this._getNextSlide(this.activeId),G.LEFT,t)},t.prototype.pause=function(){this._pause$.next(!0)},t.prototype.cycle=function(){this._pause$.next(!1)},t.prototype._cycleToSelected=function(t,e,n){var o=this._getSlideById(t);o&&o.id!==this.activeId&&(this.slide.emit({prev:this.activeId,current:o.id,direction:e,paused:this._pause$.value,source:n}),this.activeId=o.id),this._cd.markForCheck()},t.prototype._getSlideEventDirection=function(t,e){return this._getSlideIdxById(t)>this._getSlideIdxById(e)?G.RIGHT:G.LEFT},t.prototype._getSlideById=function(t){return this.slides.find(function(e){return e.id===t})},t.prototype._getSlideIdxById=function(t){return this.slides.toArray().indexOf(this._getSlideById(t))},t.prototype._getNextSlide=function(t){var e=this.slides.toArray(),n=this._getSlideIdxById(t);return n===e.length-1?this.wrap?e[0].id:e[e.length-1].id:e[n+1].id},t.prototype._getPrevSlide=function(t){var e=this.slides.toArray(),n=this._getSlideIdxById(t);return 0===n?this.wrap?e[e.length-1].id:e[0].id:e[n-1].id},t.decorators=[{type:e.Component,args:[{selector:"ngb-carousel",exportAs:"ngbCarousel",changeDetection:e.ChangeDetectionStrategy.OnPush,host:{class:"carousel slide","[style.display]":'"block"',tabIndex:"0","(keydown.arrowLeft)":"keyboard && prev(NgbSlideEventSource.ARROW_LEFT)","(keydown.arrowRight)":"keyboard && next(NgbSlideEventSource.ARROW_RIGHT)"},template:'\n \n \n \n \n Previous\n \n \n \n Next\n \n '}]}],t.ctorParameters=function(){return[{type:B},{type:void 0,decorators:[{type:e.Inject,args:[e.PLATFORM_ID]}]},{type:e.NgZone},{type:e.ChangeDetectorRef}]},t.propDecorators={slides:[{type:e.ContentChildren,args:[K]}],activeId:[{type:e.Input}],interval:[{type:e.Input}],wrap:[{type:e.Input}],keyboard:[{type:e.Input}],pauseOnHover:[{type:e.Input}],showNavigationArrows:[{type:e.Input}],showNavigationIndicators:[{type:e.Input}],slide:[{type:e.Output}],mouseEnter:[{type:e.HostListener,args:["mouseenter"]}],mouseLeave:[{type:e.HostListener,args:["mouseleave"]}]},t}(),G={LEFT:"left",RIGHT:"right"},Z={TIMER:"timer",ARROW_LEFT:"arrowLeft",ARROW_RIGHT:"arrowRight",INDICATOR:"indicator"},Y=[q,K],X=function(){function t(){}return t.decorators=[{type:e.NgModule,args:[{declarations:Y,exports:Y,imports:[n.CommonModule]}]}],t}(),J=function(){function t(){this.collapsed=!1}return t.decorators=[{type:e.Directive,args:[{selector:"[ngbCollapse]",exportAs:"ngbCollapse",host:{"[class.collapse]":"true","[class.show]":"!collapsed"}}]}],t.propDecorators={collapsed:[{type:e.Input,args:["ngbCollapse"]}]},t}(),Q=function(){function t(){}return t.decorators=[{type:e.NgModule,args:[{declarations:[J],exports:[J]}]}],t}(),tt=function(){function t(t,e,n){this.year=b(t)?t:null,this.month=b(e)?e:null,this.day=b(n)?n:null}return t.from=function(e){return e instanceof t?e:e?new t(e.year,e.month,e.day):null},t.prototype.equals=function(t){return t&&this.year===t.year&&this.month===t.month&&this.day===t.day},t.prototype.before=function(t){return!!t&&(this.year===t.year?this.month===t.month?this.day!==t.day&&this.dayt.day:this.month>t.month:this.year>t.year)},t}();function et(t){return new tt(t.getFullYear(),t.getMonth()+1,t.getDate())}function nt(t){var e=new Date(t.year,t.month-1,t.day,12);return isNaN(e.getTime())||e.setFullYear(t.year),e}function ot(){return new rt}var it=function(){function t(){}return t.decorators=[{type:e.Injectable,args:[{providedIn:"root",useFactory:ot}]}],t.ngInjectableDef=e.ɵɵdefineInjectable({factory:ot,token:t,providedIn:"root"}),t}(),rt=function(t){function n(){return null!==t&&t.apply(this,arguments)||this}return s(n,t),n.prototype.getDaysPerWeek=function(){return 7},n.prototype.getMonths=function(){return[1,2,3,4,5,6,7,8,9,10,11,12]},n.prototype.getWeeksPerMonth=function(){return 6},n.prototype.getNext=function(t,e,n){void 0===e&&(e="d"),void 0===n&&(n=1);var o=nt(t);switch(e){case"y":return new tt(t.year+n,1,1);case"m":o=new Date(t.year,t.month+n-1,1,12);break;case"d":o.setDate(o.getDate()+n);break;default:return t}return et(o)},n.prototype.getPrev=function(t,e,n){return void 0===e&&(e="d"),void 0===n&&(n=1),this.getNext(t,e,-n)},n.prototype.getWeekday=function(t){var e=nt(t).getDay();return 0===e?7:e},n.prototype.getWeekNumber=function(t,e){7===e&&(e=0);var n=nt(t[(11-e)%7]);n.setDate(n.getDate()+4-(n.getDay()||7));var o=n.getTime();return n.setMonth(0),n.setDate(1),Math.floor(Math.round((o-n.getTime())/864e5)/7)+1},n.prototype.getToday=function(){return et(new Date)},n.prototype.isValid=function(t){if(!(t&&b(t.year)&&b(t.month)&&b(t.day)))return!1;if(0===t.year)return!1;var e=nt(t);return!isNaN(e.getTime())&&e.getFullYear()===t.year&&e.getMonth()+1===t.month&&e.getDate()===t.day},n.decorators=[{type:e.Injectable}],n}(it);function at(t,e){return!function(t,e){return!t&&!e||!!t&&!!e&&t.equals(e)}(t,e)}function st(t,e){return!(!t&&!e)&&(!t||!e||(t.year!==e.year||t.month!==e.month))}function pt(t,e,n){return t&&e&&t.before(e)?e:t&&n&&t.after(n)?n:t}function lt(t,e){var n=e.minDate,o=e.maxDate,i=e.disabled,r=e.markDisabled;return!(!v(t)||i||r&&r(t,{year:t.year,month:t.month})||n&&t.before(n)||o&&t.after(o))}function ct(t,e,n,o,i){var r=n.displayMonths,a=n.months,s=a.splice(0,a.length);return Array.from({length:r},function(n,o){var r=t.getNext(e,"m",o);if(a[o]=null,!i){var p=s.findIndex(function(t){return t.firstDate.equals(r)});-1!==p&&(a[o]=s.splice(p,1)[0])}return r}).forEach(function(e,i){null===a[i]&&(a[i]=function(t,e,n,o,i){void 0===i&&(i={});var r=n.dayTemplateData,a=n.minDate,s=n.maxDate,p=n.firstDayOfWeek,l=n.markDisabled,c=n.outsideDays,u=t.getToday();i.firstDate=null,i.lastDate=null,i.number=e.month,i.year=e.year,i.weeks=i.weeks||[],i.weekdays=i.weekdays||[],e=function(t,e,n){var o=t.getDaysPerWeek(),i=new tt(e.year,e.month,1),r=t.getWeekday(i)%o;return t.getPrev(i,"d",(o+r-n)%o)}(t,e,p);for(var d=0;d0}))},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"select$",{get:function(){return this._select$.pipe(r.filter(function(t){return null!==t}))},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"dayTemplateData",{set:function(t){this._state.dayTemplateData!==t&&this._nextState({dayTemplateData:t})},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"disabled",{set:function(t){this._state.disabled!==t&&this._nextState({disabled:t})},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"displayMonths",{set:function(t){b(t=h(t))&&t>0&&this._state.displayMonths!==t&&this._nextState({displayMonths:t})},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"firstDayOfWeek",{set:function(t){b(t=h(t))&&t>=0&&this._state.firstDayOfWeek!==t&&this._nextState({firstDayOfWeek:t})},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"focusVisible",{set:function(t){this._state.focusVisible===t||this._state.disabled||this._nextState({focusVisible:t})},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"maxDate",{set:function(t){var e=this.toValidDate(t,null);at(this._state.maxDate,e)&&this._nextState({maxDate:e})},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"markDisabled",{set:function(t){this._state.markDisabled!==t&&this._nextState({markDisabled:t})},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"minDate",{set:function(t){var e=this.toValidDate(t,null);at(this._state.minDate,e)&&this._nextState({minDate:e})},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"navigation",{set:function(t){this._state.navigation!==t&&this._nextState({navigation:t})},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"outsideDays",{set:function(t){this._state.outsideDays!==t&&this._nextState({outsideDays:t})},enumerable:!0,configurable:!0}),t.prototype.focus=function(t){!this._state.disabled&&this._calendar.isValid(t)&&at(this._state.focusDate,t)&&this._nextState({focusDate:t})},t.prototype.focusMove=function(t,e){this.focus(this._calendar.getNext(this._state.focusDate,t,e))},t.prototype.focusSelect=function(){lt(this._state.focusDate,this._state)&&this.select(this._state.focusDate,{emitEvent:!0})},t.prototype.open=function(t){var e=this.toValidDate(t,this._calendar.getToday());this._state.disabled||this._state.firstDate&&!st(this._state.firstDate,t)||this._nextState({firstDate:e})},t.prototype.select=function(t,e){void 0===e&&(e={});var n=this.toValidDate(t,null);this._state.disabled||(at(this._state.selectedDate,n)&&this._nextState({selectedDate:n}),e.emitEvent&<(n,this._state)&&this._select$.next(n))},t.prototype.toValidDate=function(t,e){var n=tt.from(t);return void 0===e&&(e=this._calendar.getToday()),this._calendar.isValid(n)?n:e},t.prototype._nextState=function(t){var e=this._updateState(t);this._patchContexts(e),this._state=e,this._model$.next(this._state)},t.prototype._patchContexts=function(t){var e=t.months,n=t.displayMonths,o=t.selectedDate,i=t.focusDate,r=t.focusVisible,a=t.disabled,s=t.outsideDays;t.months.forEach(function(t){t.weeks.forEach(function(p){p.days.forEach(function(p){i&&(p.context.focused=i.equals(p.date)&&r),p.tabindex=!a&&p.date.equals(i)&&i.month===t.number?0:-1,!0===a&&(p.context.disabled=!0),void 0!==o&&(p.context.selected=null!==o&&o.equals(p.date)),t.number!==p.date.month&&(p.hidden="hidden"===s||"collapsed"===s||n>1&&p.date.after(e[0].firstDate)&&p.date.before(e[n-1].lastDate))})})})},t.prototype._updateState=function(t){var e,n,o,i,r=Object.assign({},this._state,t),a=r.firstDate;if(("minDate"in t||"maxDate"in t)&&(!function(t,e){if(e&&t&&e.before(t))throw new Error("'maxDate' "+e+" should be greater than 'minDate' "+t)}(r.minDate,r.maxDate),r.focusDate=pt(r.focusDate,r.minDate,r.maxDate),r.firstDate=pt(r.firstDate,r.minDate,r.maxDate),a=r.focusDate),"disabled"in t&&(r.focusVisible=!1),"selectedDate"in t&&0===this._state.months.length&&(a=r.selectedDate),"focusVisible"in t)return r;if("focusDate"in t&&(r.focusDate=pt(r.focusDate,r.minDate,r.maxDate),a=r.focusDate,0!==r.months.length&&!r.focusDate.before(r.firstDate)&&!r.focusDate.after(r.lastDate)))return r;if("firstDate"in t&&(r.firstDate=pt(r.firstDate,r.minDate,r.maxDate),a=r.firstDate),a){var s="dayTemplateData"in t||"firstDayOfWeek"in t||"markDisabled"in t||"minDate"in t||"maxDate"in t||"disabled"in t||"outsideDays"in t,p=ct(this._calendar,a,r,this._i18n,s);r.months=p,r.firstDate=p.length>0?p[0].firstDate:void 0,r.lastDate=p.length>0?p[p.length-1].lastDate:void 0,"selectedDate"in t&&!lt(r.selectedDate,r)&&(r.selectedDate=null),"firstDate"in t&&(void 0===r.focusDate||r.focusDate.before(r.firstDate)||r.focusDate.after(r.lastDate))&&(r.focusDate=a);var l=!this._state.firstDate||this._state.firstDate.year!==r.firstDate.year,c=!this._state.firstDate||this._state.firstDate.month!==r.firstDate.month;"select"===r.navigation?(("minDate"in t||"maxDate"in t||0===r.selectBoxes.years.length||l)&&(r.selectBoxes.years=function(t,e,n){if(!t)return[];var o=e&&e.year||t.year-10,i=n&&n.year||t.year+10;return Array.from({length:i-o+1},function(t,e){return o+e})}(r.firstDate,r.minDate,r.maxDate)),("minDate"in t||"maxDate"in t||0===r.selectBoxes.months.length||l)&&(r.selectBoxes.months=function(t,e,n,o){if(!e)return[];var i=t.getMonths(e.year);if(n&&e.year===n.year){var r=i.findIndex(function(t){return t===n.month});i=i.slice(r)}if(o&&e.year===o.year){r=i.findIndex(function(t){return t===o.month});i=i.slice(0,r+1)}return i}(this._calendar,r.firstDate,r.minDate,r.maxDate))):r.selectBoxes={years:[],months:[]},"arrows"!==r.navigation&&"select"!==r.navigation||!(c||l||"minDate"in t||"maxDate"in t||"disabled"in t)||(r.prevDisabled=r.disabled||(e=this._calendar,n=r.firstDate,o=r.minDate,i=e.getPrev(n,"m"),o&&(i.year===o.year&&i.month\n
\n
\n \n\n
\n \n \n
\n\n
\n \n
\n
\n {{ i18n.getMonthFullName(month.number, month.year) }} {{ i18n.getYearNumerals(month.year) }}\n
\n \n \n
\n
\n
\n\n \n ',providers:[Dt,ft,mt],styles:["ngb-datepicker{border:1px solid #dfdfdf;border-radius:.25rem;display:inline-block}ngb-datepicker-month-view{pointer-events:auto}ngb-datepicker.dropdown-menu{padding:0}.ngb-dp-body{z-index:1050}.ngb-dp-header{border-bottom:0;border-radius:.25rem .25rem 0 0;padding-top:.25rem;background-color:#f8f9fa}.ngb-dp-months{display:-ms-flexbox;display:flex}.ngb-dp-month{pointer-events:none}.ngb-dp-month-name{font-size:larger;height:2rem;line-height:2rem;text-align:center;background-color:#f8f9fa}.ngb-dp-month+.ngb-dp-month .ngb-dp-month-name,.ngb-dp-month+.ngb-dp-month .ngb-dp-week{padding-left:1rem}.ngb-dp-month:last-child .ngb-dp-week{padding-right:.25rem}.ngb-dp-month:first-child .ngb-dp-week{padding-left:.25rem}.ngb-dp-month .ngb-dp-week:last-child{padding-bottom:.25rem}"]}]}],t.ctorParameters=function(){return[{type:mt},{type:ft},{type:it},{type:dt},{type:bt},{type:e.ChangeDetectorRef},{type:e.ElementRef},{type:_t},{type:e.NgZone}]},t.propDecorators={_monthsEl:[{type:e.ViewChild,args:["months",{static:!0}]}],dayTemplate:[{type:e.Input}],dayTemplateData:[{type:e.Input}],displayMonths:[{type:e.Input}],firstDayOfWeek:[{type:e.Input}],footerTemplate:[{type:e.Input}],markDisabled:[{type:e.Input}],maxDate:[{type:e.Input}],minDate:[{type:e.Input}],navigation:[{type:e.Input}],outsideDays:[{type:e.Input}],showWeekdays:[{type:e.Input}],showWeekNumbers:[{type:e.Input}],startDate:[{type:e.Input}],navigate:[{type:e.Output}],select:[{type:e.Output}]},t}(),Ct=function(){function t(t){this.i18n=t,this.select=new e.EventEmitter}return t.prototype.doSelect=function(t){t.context.disabled||t.hidden||this.select.emit(t.date)},t.decorators=[{type:e.Component,args:[{selector:"ngb-datepicker-month-view",host:{role:"grid"},encapsulation:e.ViewEncapsulation.None,template:'\n
\n
\n
\n {{ i18n.getWeekdayShortName(w) }}\n
\n
\n \n
\n
{{ i18n.getWeekNumerals(week.number) }}
\n
\n \n \n \n
\n
\n
\n ',styles:["ngb-datepicker-month-view{display:block}.ngb-dp-week-number,.ngb-dp-weekday{line-height:2rem;text-align:center;font-style:italic}.ngb-dp-weekday{color:#5bc0de;color:var(--info)}.ngb-dp-week{border-radius:.25rem;display:-ms-flexbox;display:flex}.ngb-dp-weekdays{border-bottom:1px solid rgba(0,0,0,.125);border-radius:0}.ngb-dp-day,.ngb-dp-week-number,.ngb-dp-weekday{width:2rem;height:2rem}.ngb-dp-day{cursor:pointer}.ngb-dp-day.disabled,.ngb-dp-day.hidden{cursor:default}"]}]}],t.ctorParameters=function(){return[{type:dt}]},t.propDecorators={dayTemplate:[{type:e.Input}],month:[{type:e.Input}],showWeekdays:[{type:e.Input}],showWeekNumbers:[{type:e.Input}],select:[{type:e.Output}]},t}(),kt=function(){function t(t){this.i18n=t,this.navigation=yt,this.months=[],this.navigate=new e.EventEmitter,this.select=new e.EventEmitter}return t.decorators=[{type:e.Component,args:[{selector:"ngb-datepicker-navigation",changeDetection:e.ChangeDetectionStrategy.OnPush,encapsulation:e.ViewEncapsulation.None,template:'\n
\n \n
\n \n \n\n \n
\n
\n {{ i18n.getMonthFullName(month.number, month.year) }} {{ i18n.getYearNumerals(month.year) }}\n
\n
\n
\n
\n \n
\n ',styles:["ngb-datepicker-navigation{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.ngb-dp-navigation-chevron{border-style:solid;border-width:.2em .2em 0 0;display:inline-block;width:.75em;height:.75em;margin-left:.25em;margin-right:.15em;-webkit-transform:rotate(-135deg);transform:rotate(-135deg)}.right .ngb-dp-navigation-chevron{-webkit-transform:rotate(45deg);transform:rotate(45deg);margin-left:.15em;margin-right:.25em}.ngb-dp-arrow{display:-ms-flexbox;display:flex;-ms-flex:1 1 auto;flex:1 1 auto;padding-right:0;padding-left:0;margin:0;width:2rem;height:2rem}.ngb-dp-arrow.right{-ms-flex-pack:end;justify-content:flex-end}.ngb-dp-arrow-btn{padding:0 .25rem;margin:0 .5rem;border:none;background-color:transparent;z-index:1}.ngb-dp-arrow-btn:focus{outline-width:1px;outline-style:auto}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.ngb-dp-arrow-btn:focus{outline-style:solid}}.ngb-dp-month-name{font-size:larger;height:2rem;line-height:2rem;text-align:center}.ngb-dp-navigation-select{display:-ms-flexbox;display:flex;-ms-flex:1 1 9rem;flex:1 1 9rem}"]}]}],t.ctorParameters=function(){return[{type:dt}]},t.propDecorators={date:[{type:e.Input}],disabled:[{type:e.Input}],months:[{type:e.Input}],showSelect:[{type:e.Input}],prevDisabled:[{type:e.Input}],nextDisabled:[{type:e.Input}],selectBoxes:[{type:e.Input}],navigate:[{type:e.Output}],select:[{type:e.Output}]},t}(),xt=function(t,e){return!!e&&e.some(function(e){return e.contains(t)})},Rt=function(t,e){return!e||null!=function(t,e){return e?t.closest(e):null}(t,e)},Et=!1;function St(t,e,n,o,a,s,p,c){n&&t.runOutsideAngular(function(){var u=i.fromEvent(e,"keydown").pipe(r.takeUntil(a),r.filter(function(t){return t.which===gt.Escape})),d=i.fromEvent(e,Et?"touchstart":"mousedown").pipe(r.map(function(t){var e=t.target;return!(t instanceof MouseEvent&&2===t.button||xt(e,p))&&("inside"===n?xt(e,s)&&Rt(e,c):"outside"===n?!xt(e,s):Rt(e,c)||!xt(e,s))}),r.takeUntil(a)),h=i.fromEvent(e,Et?"touchend":"mouseup").pipe(r.withLatestFrom(d),r.filter(function(t){var e=l(t,2);e[0];return e[1]}),r.delay(Et?16:0),r.takeUntil(a));i.race([u,h]).subscribe(function(){return t.run(o)})})}"undefined"!=typeof navigator&&(Et=!!navigator.userAgent&&/iPad|iPhone|iPod/.test(navigator.userAgent));var Tt=["a[href]","button:not([disabled])",'input:not([disabled]):not([type="hidden"])',"select:not([disabled])","textarea:not([disabled])","[contenteditable]",'[tabindex]:not([tabindex="-1"])'].join(", ");function Ot(t){var e=Array.from(t.querySelectorAll(Tt)).filter(function(t){return-1!==t.tabIndex});return[e[0],e[e.length-1]]}var Nt=function(t,e,n){void 0===n&&(n=!1);var o=i.fromEvent(t,"focusin").pipe(r.takeUntil(e),r.map(function(t){return t.target}));i.fromEvent(t,"keydown").pipe(r.takeUntil(e),r.filter(function(t){return t.which===gt.Tab}),r.withLatestFrom(o)).subscribe(function(e){var n=l(e,2),o=n[0],i=n[1],r=l(Ot(t),2),a=r[0],s=r[1];i!==a&&i!==t||!o.shiftKey||(s.focus(),o.preventDefault()),i!==s||o.shiftKey||(a.focus(),o.preventDefault())}),n&&i.fromEvent(t,"click").pipe(r.takeUntil(e),r.withLatestFrom(o),r.map(function(t){return t[1]})).subscribe(function(t){return t.focus()})},Mt=function(){function t(){}return t.prototype.getAllStyles=function(t){return window.getComputedStyle(t)},t.prototype.getStyle=function(t,e){return this.getAllStyles(t)[e]},t.prototype.isStaticPositioned=function(t){return"static"===(this.getStyle(t,"position")||"static")},t.prototype.offsetParent=function(t){for(var e=t.offsetParent||document.documentElement;e&&e!==document.documentElement&&this.isStaticPositioned(e);)e=e.offsetParent;return e||document.documentElement},t.prototype.position=function(t,e){var n;void 0===e&&(e=!0);var o={width:0,height:0,top:0,bottom:0,left:0,right:0};if("fixed"===this.getStyle(t,"position"))n={top:(n=t.getBoundingClientRect()).top,bottom:n.bottom,left:n.left,right:n.right,height:n.height,width:n.width};else{var i=this.offsetParent(t);n=this.offset(t,!1),i!==document.documentElement&&(o=this.offset(i,!1)),o.top+=i.clientTop,o.left+=i.clientLeft}return n.top-=o.top,n.bottom-=o.top,n.left-=o.left,n.right-=o.left,e&&(n.top=Math.round(n.top),n.bottom=Math.round(n.bottom),n.left=Math.round(n.left),n.right=Math.round(n.right)),n},t.prototype.offset=function(t,e){void 0===e&&(e=!0);var n=t.getBoundingClientRect(),o=window.pageYOffset-document.documentElement.clientTop,i=window.pageXOffset-document.documentElement.clientLeft,r={height:n.height||t.offsetHeight,width:n.width||t.offsetWidth,top:n.top+o,bottom:n.bottom+o,left:n.left+i,right:n.right+i};return e&&(r.height=Math.round(r.height),r.width=Math.round(r.width),r.top=Math.round(r.top),r.bottom=Math.round(r.bottom),r.left=Math.round(r.left),r.right=Math.round(r.right)),r},t.prototype.positionElements=function(t,e,n,o){var i=l(n.split("-"),2),r=i[0],a=void 0===r?"top":r,s=i[1],p=void 0===s?"center":s,c=o?this.offset(t,!1):this.position(t,!1),u=this.getAllStyles(e),d=parseFloat(u.marginTop),h=parseFloat(u.marginBottom),f=parseFloat(u.marginLeft),g=parseFloat(u.marginRight),m=0,y=0;switch(a){case"top":m=c.top-(e.offsetHeight+d+h);break;case"bottom":m=c.top+c.height;break;case"left":y=c.left-(e.offsetWidth+f+g);break;case"right":y=c.left+c.width}switch(p){case"top":m=c.top;break;case"bottom":m=c.top+c.height-e.offsetHeight;break;case"left":y=c.left;break;case"right":y=c.left+c.width-e.offsetWidth;break;case"center":"top"===a||"bottom"===a?y=c.left+c.width/2-e.offsetWidth/2:m=c.top+c.height/2-e.offsetHeight/2}e.style.transform="translate("+Math.round(y)+"px, "+Math.round(m)+"px)";var b=e.getBoundingClientRect(),v=document.documentElement,_=window.innerHeight||v.clientHeight,w=window.innerWidth||v.clientWidth;return b.left>=0&&b.top>=0&&b.right<=w&&b.bottom<=_},t}(),Pt=/\s+/,jt=new Mt;function At(t,e,n,o,i){var r,a,s=Array.isArray(n)?n:n.split(Pt),p=["top","bottom","left","right","top-left","top-right","bottom-left","bottom-right","left-top","left-bottom","right-top","right-bottom"],c=e.classList,u=function(t){var e=l(t.split("-"),2),n=e[0],o=e[1],r=[];return i&&(r.push(i+"-"+n),o&&r.push(i+"-"+n+"-"+o),r.forEach(function(t){c.add(t)})),r};i&&p.forEach(function(t){c.remove(i+"-"+t)});var d=s.findIndex(function(t){return"auto"===t});d>=0&&p.forEach(function(t){null==s.find(function(e){return-1!==e.search("^"+t)})&&s.splice(d++,1,t)});var h,f=e.style;f.position="absolute",f.top="0",f.left="0",f["will-change"]="transform";var g=!1;try{for(var m=function(t){var e="function"==typeof Symbol&&t[Symbol.iterator],n=0;return e?e.call(t):{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}}}(s),y=m.next();!y.done;y=m.next()){var b=u(h=y.value);if(jt.positionElements(t,e,h,o)){g=!0;break}i&&b.forEach(function(t){c.remove(t)})}}catch(t){r={error:t}}finally{try{y&&!y.done&&(a=m.return)&&a.call(m)}finally{if(r)throw r.error}}return g||(u(h=s[0]),jt.positionElements(t,e,h,o)),h}function Ft(){return new Ht}var Vt=function(){function t(){}return t.decorators=[{type:e.Injectable,args:[{providedIn:"root",useFactory:Ft}]}],t.ngInjectableDef=e.ɵɵdefineInjectable({factory:Ft,token:t,providedIn:"root"}),t}(),Ht=function(t){function n(){return null!==t&&t.apply(this,arguments)||this}return s(n,t),n.prototype.parse=function(t){if(t){var e=t.trim().split("-");if(1===e.length&&y(e[0]))return{year:h(e[0]),month:null,day:null};if(2===e.length&&y(e[0])&&y(e[1]))return{year:h(e[0]),month:h(e[1]),day:null};if(3===e.length&&y(e[0])&&y(e[1])&&y(e[2]))return{year:h(e[0]),month:h(e[1]),day:h(e[2])}}return null},n.prototype.format=function(t){return t?t.year+"-"+(y(t.month)?_(t.month):"")+"-"+(y(t.day)?_(t.day):""):""},n.decorators=[{type:e.Injectable}],n}(Vt),Lt={provide:o.NG_VALUE_ACCESSOR,useExisting:e.forwardRef(function(){return $t}),multi:!0},Wt={provide:o.NG_VALIDATORS,useExisting:e.forwardRef(function(){return $t}),multi:!0},$t=function(){function t(t,n,o,i,r,a,s,p,l,c,u){var d=this;this._parserFormatter=t,this._elRef=n,this._vcRef=o,this._renderer=i,this._cfr=r,this._ngZone=a,this._service=s,this._calendar=p,this._dateAdapter=l,this._document=c,this._changeDetector=u,this._cRef=null,this._disabled=!1,this.autoClose=!0,this.placement=["bottom-left","bottom-right","top-left","top-right"],this.dateSelect=new e.EventEmitter,this.navigate=new e.EventEmitter,this.closed=new e.EventEmitter,this._onChange=function(t){},this._onTouched=function(){},this._validatorChange=function(){},this._zoneSubscription=a.onStable.subscribe(function(){return d._updatePopupPosition()})}return Object.defineProperty(t.prototype,"disabled",{get:function(){return this._disabled},set:function(t){this._disabled=""===t||t&&"false"!==t,this.isOpen()&&this._cRef.instance.setDisabledState(this._disabled)},enumerable:!0,configurable:!0}),t.prototype.registerOnChange=function(t){this._onChange=t},t.prototype.registerOnTouched=function(t){this._onTouched=t},t.prototype.registerOnValidatorChange=function(t){this._validatorChange=t},t.prototype.setDisabledState=function(t){this.disabled=t},t.prototype.validate=function(t){var e=t.value;if(null==e)return null;var n=this._fromDateStruct(this._dateAdapter.fromModel(e));return this._calendar.isValid(n)?this.minDate&&n.before(tt.from(this.minDate))?{ngbDate:{requiredBefore:this.minDate}}:this.maxDate&&n.after(tt.from(this.maxDate))?{ngbDate:{requiredAfter:this.maxDate}}:void 0:{ngbDate:{invalid:t.value}}},t.prototype.writeValue=function(t){this._model=this._fromDateStruct(this._dateAdapter.fromModel(t)),this._writeModelValue(this._model)},t.prototype.manualDateChange=function(t,e){void 0===e&&(e=!1);var n=t!==this._inputValue;n&&(this._inputValue=t,this._model=this._fromDateStruct(this._parserFormatter.parse(t))),!n&&e||this._onChange(this._model?this._dateAdapter.toModel(this._model):""===t?null:t),e&&this._model&&this._writeModelValue(this._model)},t.prototype.isOpen=function(){return!!this._cRef},t.prototype.open=function(){var t=this;if(!this.isOpen()){var e=this._cfr.resolveComponentFactory(It);this._cRef=this._vcRef.createComponent(e),this._applyPopupStyling(this._cRef.location.nativeElement),this._applyDatepickerInputs(this._cRef.instance),this._subscribeForDatepickerOutputs(this._cRef.instance),this._cRef.instance.ngOnInit(),this._cRef.instance.writeValue(this._dateAdapter.toModel(this._model)),this._cRef.instance.registerOnChange(function(e){t.writeValue(e),t._onChange(e),t._onTouched()}),this._cRef.changeDetectorRef.detectChanges(),this._cRef.instance.setDisabledState(this.disabled),"body"===this.container&&window.document.querySelector(this.container).appendChild(this._cRef.location.nativeElement),Nt(this._cRef.location.nativeElement,this.closed,!0),this._cRef.instance.focus(),St(this._ngZone,this._document,this.autoClose,function(){return t.close()},this.closed,[],[this._elRef.nativeElement,this._cRef.location.nativeElement])}},t.prototype.close=function(){this.isOpen()&&(this._vcRef.remove(this._vcRef.indexOf(this._cRef.hostView)),this._cRef=null,this.closed.emit(),this._changeDetector.markForCheck())},t.prototype.toggle=function(){this.isOpen()?this.close():this.open()},t.prototype.navigateTo=function(t){this.isOpen()&&this._cRef.instance.navigateTo(t)},t.prototype.onBlur=function(){this._onTouched()},t.prototype.ngOnChanges=function(t){(t.minDate||t.maxDate)&&this._validatorChange()},t.prototype.ngOnDestroy=function(){this.close(),this._zoneSubscription.unsubscribe()},t.prototype._applyDatepickerInputs=function(t){var e=this;["dayTemplate","dayTemplateData","displayMonths","firstDayOfWeek","footerTemplate","markDisabled","minDate","maxDate","navigation","outsideDays","showNavigation","showWeekdays","showWeekNumbers"].forEach(function(n){void 0!==e[n]&&(t[n]=e[n])}),t.startDate=this.startDate||this._model},t.prototype._applyPopupStyling=function(t){this._renderer.addClass(t,"dropdown-menu"),this._renderer.addClass(t,"show"),"body"===this.container&&this._renderer.addClass(t,"ngb-dp-body")},t.prototype._subscribeForDatepickerOutputs=function(t){var e=this;t.navigate.subscribe(function(t){return e.navigate.emit(t)}),t.select.subscribe(function(t){e.dateSelect.emit(t),!0!==e.autoClose&&"inside"!==e.autoClose||e.close()})},t.prototype._writeModelValue=function(t){var e=this._parserFormatter.format(t);this._inputValue=e,this._renderer.setProperty(this._elRef.nativeElement,"value",e),this.isOpen()&&(this._cRef.instance.writeValue(this._dateAdapter.toModel(t)),this._onTouched())},t.prototype._fromDateStruct=function(t){var e=t?new tt(t.year,t.month,t.day):null;return this._calendar.isValid(e)?e:null},t.prototype._updatePopupPosition=function(){if(this._cRef){var t;if(t="string"==typeof this.positionTarget?window.document.querySelector(this.positionTarget):this.positionTarget instanceof HTMLElement?this.positionTarget:this._elRef.nativeElement,this.positionTarget&&!t)throw new Error("ngbDatepicker could not find element declared in [positionTarget] to position against.");At(t,this._cRef.location.nativeElement,this.placement,"body"===this.container)}},t.decorators=[{type:e.Directive,args:[{selector:"input[ngbDatepicker]",exportAs:"ngbDatepicker",host:{"(input)":"manualDateChange($event.target.value)","(change)":"manualDateChange($event.target.value, true)","(blur)":"onBlur()","[disabled]":"disabled"},providers:[Lt,Wt,ft]}]}],t.ctorParameters=function(){return[{type:Vt},{type:e.ElementRef},{type:e.ViewContainerRef},{type:e.Renderer2},{type:e.ComponentFactoryResolver},{type:e.NgZone},{type:ft},{type:it},{type:_t},{type:void 0,decorators:[{type:e.Inject,args:[n.DOCUMENT]}]},{type:e.ChangeDetectorRef}]},t.propDecorators={autoClose:[{type:e.Input}],dayTemplate:[{type:e.Input}],dayTemplateData:[{type:e.Input}],displayMonths:[{type:e.Input}],firstDayOfWeek:[{type:e.Input}],footerTemplate:[{type:e.Input}],markDisabled:[{type:e.Input}],minDate:[{type:e.Input}],maxDate:[{type:e.Input}],navigation:[{type:e.Input}],outsideDays:[{type:e.Input}],placement:[{type:e.Input}],showWeekdays:[{type:e.Input}],showWeekNumbers:[{type:e.Input}],startDate:[{type:e.Input}],container:[{type:e.Input}],positionTarget:[{type:e.Input}],dateSelect:[{type:e.Output}],navigate:[{type:e.Output}],closed:[{type:e.Output}],disabled:[{type:e.Input}]},t}(),zt=function(){function t(t){this.i18n=t}return t.prototype.isMuted=function(){return!this.selected&&(this.date.month!==this.currentMonth||this.disabled)},t.decorators=[{type:e.Component,args:[{selector:"[ngbDatepickerDayView]",changeDetection:e.ChangeDetectionStrategy.OnPush,encapsulation:e.ViewEncapsulation.None,host:{class:"btn-light","[class.bg-primary]":"selected","[class.text-white]":"selected","[class.text-muted]":"isMuted()","[class.outside]":"isMuted()","[class.active]":"focused"},template:"{{ i18n.getDayNumerals(date) }}",styles:["[ngbDatepickerDayView]{text-align:center;width:2rem;height:2rem;line-height:2rem;border-radius:.25rem;background:0 0}[ngbDatepickerDayView].outside{opacity:.5}"]}]}],t.ctorParameters=function(){return[{type:dt}]},t.propDecorators={currentMonth:[{type:e.Input}],date:[{type:e.Input}],disabled:[{type:e.Input}],focused:[{type:e.Input}],selected:[{type:e.Input}]},t}(),Bt=function(){function t(t){this.i18n=t,this.select=new e.EventEmitter}return t.prototype.changeMonth=function(t){this.select.emit(new tt(this.date.year,h(t),1))},t.prototype.changeYear=function(t){this.select.emit(new tt(h(t),this.date.month,1))},t.decorators=[{type:e.Component,args:[{selector:"ngb-datepicker-navigation-select",changeDetection:e.ChangeDetectionStrategy.OnPush,encapsulation:e.ViewEncapsulation.None,template:'\n \n \n \n \n \n ',styles:["ngb-datepicker-navigation-select>.custom-select{-ms-flex:1 1 auto;flex:1 1 auto;padding:0 .5rem;font-size:.875rem;height:1.85rem}"]}]}],t.ctorParameters=function(){return[{type:dt}]},t.propDecorators={date:[{type:e.Input}],disabled:[{type:e.Input}],months:[{type:e.Input}],years:[{type:e.Input}],select:[{type:e.Output}]},t}(),Ut=function(t){function n(){return null!==t&&t.apply(this,arguments)||this}return s(n,t),n.prototype.getDaysPerWeek=function(){return 7},n.prototype.getMonths=function(){return[1,2,3,4,5,6,7,8,9,10,11,12]},n.prototype.getWeeksPerMonth=function(){return 6},n.prototype.getNext=function(t,e,n){switch(void 0===e&&(e="d"),void 0===n&&(n=1),t=new tt(t.year,t.month,t.day),e){case"y":return(t=this._setYear(t,t.year+n)).month=1,t.day=1,t;case"m":return(t=this._setMonth(t,t.month+n)).day=1,t;case"d":return this._setDay(t,t.day+n);default:return t}},n.prototype.getPrev=function(t,e,n){return void 0===e&&(e="d"),void 0===n&&(n=1),this.getNext(t,e,-n)},n.prototype.getWeekday=function(t){var e=this.toGregorian(t).getDay();return 0===e?7:e},n.prototype.getWeekNumber=function(t,e){7===e&&(e=0);var n=t[(11-e)%7],o=this.toGregorian(n);o.setDate(o.getDate()+4-(o.getDay()||7));var i=o.getTime(),r=this.toGregorian(new tt(n.year,1,1));return Math.floor(Math.round((i-r.getTime())/864e5)/7)+1},n.prototype.getToday=function(){return this.fromGregorian(new Date)},n.prototype.isValid=function(t){return t&&y(t.year)&&y(t.month)&&y(t.day)&&!isNaN(this.toGregorian(t).getTime())},n.prototype._setDay=function(t,e){e=+e;var n=this.getDaysPerMonth(t.month,t.year);if(e<=0)for(;e<=0;)t=this._setMonth(t,t.month-1),e+=n=this.getDaysPerMonth(t.month,t.year);else if(e>n)for(;e>n;)e-=n,t=this._setMonth(t,t.month+1),n=this.getDaysPerMonth(t.month,t.year);return t.day=e,t},n.prototype._setMonth=function(t,e){return e=+e,t.year=t.year+Math.floor((e-1)/12),t.month=Math.floor(((e-1)%12+12)%12)+1,t},n.prototype._setYear=function(t,e){return t.year=+e,t},n.decorators=[{type:e.Injectable}],n}(it);function Kt(t){var e=t.getFullYear();return e%4==0&&e%100!=0||e%400==0}function qt(t,e){return t-e*Math.floor(t/e)}var Gt=function(t){function n(){return null!==t&&t.apply(this,arguments)||this}return s(n,t),n.prototype.fromGregorian=function(t){var e,n=t.getFullYear(),o=t.getMonth(),i=t.getDate(),r=1721424.5+365*(n-1)+Math.floor((n-1)/4)+-Math.floor((n-1)/100)+Math.floor((n-1)/400)+Math.floor((367*(o+1)-362)/12+(o+1<=2?0:Kt(t)?-1:-2)+i),a=(r=Math.floor(r)+.5)-1948439.5,s=Math.floor((30*a+10646)/10631),p=Math.ceil((a-29-(354*((e=s)-1)+Math.floor((3+11*e)/30)))/29.5);p=Math.min(p,11);var l=Math.ceil(a-function(t,e){return Math.ceil(29.5*e)+354*(t-1)+Math.floor((3+11*t)/30)}(s,p))+1;return new tt(s,p+1,l)},n.prototype.toGregorian=function(t){var e=t.year,n=t.month-1,o=t.day+Math.ceil(29.5*n)+354*(e-1)+Math.floor((3+11*e)/30)+1948439.5-1,i=Math.floor(o-.5)+.5,r=i-1721425.5,a=Math.floor(r/146097),s=qt(r,146097),p=Math.floor(s/36524),l=qt(s,36524),c=Math.floor(l/1461),u=qt(l,1461),d=Math.floor(u/365),h=400*a+100*p+4*c+d;4!==p&&4!==d&&h++;var f=i-(1721425.5+365*(h-1)+Math.floor((h-1)/4)-Math.floor((h-1)/100)+Math.floor((h-1)/400)),g=i<1721424.5+365*(h-1)+Math.floor((h-1)/4)-Math.floor((h-1)/100)+Math.floor((h-1)/400)+Math.floor(739/12+(Kt(new Date(h,3,1))?-1:-2)+1)?0:Kt(new Date(h,3,1))?1:2,m=Math.floor((12*(f+g)+373)/367),y=1721424.5+365*(h-1)+Math.floor((h-1)/4)-Math.floor((h-1)/100)+Math.floor((h-1)/400)+Math.floor((367*m-362)/12+(m<=2?0:Kt(new Date(h,m-1,1))?-1:-2)+1);return new Date(h,m-1,i-y+1)},n.prototype.getDaysPerMonth=function(t,e){e+=Math.floor(t/13);var n=29+(t=(t-1)%12+1)%2;return 12===t&&(14+11*e)%30<11&&n++,n},n.decorators=[{type:e.Injectable}],n}(Ut),Zt=new Date(1882,10,12),Yt=new Date(2174,10,25),Xt=864e5,Jt=["101010101010","110101010100","111011001001","011011010100","011011101010","001101101100","101010101101","010101010101","011010101001","011110010010","101110101001","010111010100","101011011010","010101011100","110100101101","011010010101","011101001010","101101010100","101101101010","010110101101","010010101110","101001001111","010100010111","011010001011","011010100101","101011010101","001011010110","100101011011","010010011101","101001001101","110100100110","110110010101","010110101100","100110110110","001010111010","101001011011","010100101011","101010010101","011011001010","101011101001","001011110100","100101110110","001010110110","100101010110","101011001010","101110100100","101111010010","010111011001","001011011100","100101101101","010101001101","101010100101","101101010010","101110100101","010110110100","100110110110","010101010111","001010010111","010101001011","011010100011","011101010010","101101100101","010101101010","101010101011","010100101011","110010010101","110101001010","110110100101","010111001010","101011010110","100101010111","010010101011","100101001011","101010100101","101101010010","101101101010","010101110101","001001110110","100010110111","010001011011","010101010101","010110101001","010110110100","100111011010","010011011101","001001101110","100100110110","101010101010","110101010100","110110110010","010111010101","001011011010","100101011011","010010101011","101001010101","101101001001","101101100100","101101110001","010110110100","101010110101","101001010101","110100100101","111010010010","111011001001","011011010100","101011101001","100101101011","010010101011","101010010011","110101001001","110110100100","110110110010","101010111001","010010111010","101001011011","010100101011","101010010101","101100101010","101101010101","010101011100","010010111101","001000111101","100100011101","101010010101","101101001010","101101011010","010101101101","001010110110","100100111011","010010011011","011001010101","011010101001","011101010100","101101101010","010101101100","101010101101","010101010101","101100101001","101110010010","101110101001","010111010100","101011011010","010101011010","101010101011","010110010101","011101001001","011101100100","101110101010","010110110101","001010110110","101001010110","111001001101","101100100101","101101010010","101101101010","010110101101","001010101110","100100101111","010010010111","011001001011","011010100101","011010101100","101011010110","010101011101","010010011101","101001001101","110100010110","110110010101","010110101010","010110110101","001011011010","100101011011","010010101101","010110010101","011011001010","011011100100","101011101010","010011110101","001010110110","100101010110","101010101010","101101010100","101111010010","010111011001","001011101010","100101101101","010010101101","101010010101","101101001010","101110100101","010110110010","100110110101","010011010110","101010010111","010101000111","011010010011","011101001001","101101010101","010101101010","101001101011","010100101011","101010001011","110101000110","110110100011","010111001010","101011010110","010011011011","001001101011","100101001011","101010100101","101101010010","101101101001","010101110101","000101110110","100010110111","001001011011","010100101011","010101100101","010110110100","100111011010","010011101101","000101101101","100010110110","101010100110","110101010010","110110101001","010111010100","101011011010","100101011011","010010101011","011001010011","011100101001","011101100010","101110101001","010110110010","101010110101","010101010101","101100100101","110110010010","111011001001","011011010010","101011101001","010101101011","010010101011","101001010101","110100101001","110101010100","110110101010","100110110101","010010111010","101000111011","010010011011","101001001101","101010101010","101011010101","001011011010","100101011101","010001011110","101000101110","110010011010","110101010101","011010110010","011010111001","010010111010","101001011101","010100101101","101010010101","101101010010","101110101000","101110110100","010110111001","001011011010","100101011010","101101001010","110110100100","111011010001","011011101000","101101101010","010101101101","010100110101","011010010101","110101001010","110110101000","110111010100","011011011010","010101011011","001010011101","011000101011","101100010101","101101001010","101110010101","010110101010","101010101110","100100101110","110010001111","010100100111","011010010101","011010101010","101011010110","010101011101","001010011101"];var Qt=function(t){function n(){return null!==t&&t.apply(this,arguments)||this}return s(n,t),n.prototype.fromGregorian=function(e){var n,o,i,r,a,s=1,p=(n=e,o=Zt,i=Date.UTC(n.getFullYear(),n.getMonth(),n.getDate()),r=Date.UTC(o.getFullYear(),o.getMonth(),o.getDate()),a=Math.abs(i-r),Math.round(a/Xt));if(!(e.getTime()-Zt.getTime()>=0&&e.getTime()-Yt.getTime()<=0))return t.prototype.fromGregorian.call(this,e);for(var l=1300,c=0;cd&&(s=1,u++),u>11&&(u=0,l++),new tt(l,u+1,s);p-=d}},n.prototype.toGregorian=function(e){var n=e.year,o=e.month-1,i=e.day,r=new Date(Zt),a=i-1;if(n>=1300&&n<=1600){for(var s=0;s=1300&&n<=1600?+Jt[n-1300][e-1]+29:t.prototype.getDaysPerMonth.call(this,e,n)},n.decorators=[{type:e.Injectable}],n}(Gt);function te(t){var e,n,o,i,r=ae((e=t.year,n=t.month,o=t.day,se((i=re(e)).gy,3,i.march)+31*(n-1)-ie(n,7)*(n-7)+o-1));return r.setHours(6,30,3,200),r}function ee(t){return function(t){var e,n,o,i=ae(t).getFullYear(),r=i-621,a=re(r),s=se(i,3,a.march);if((o=t-s)>=0){if(o<=185)return n=1+ie(o,31),e=oe(o,31)+1,new tt(r,n,e);o-=186}else r-=1,o+=179,1===a.leap&&(o+=1);return n=7+ie(o,30),e=oe(o,30)+1,new tt(r,n,e)}(se(t.getFullYear(),t.getMonth()+1,t.getDate()))}function ne(t,e){return e=+e,t.year=t.year+Math.floor((e-1)/12),t.month=Math.floor(((e-1)%12+12)%12)+1,t}function oe(t,e){return t-e*Math.floor(t/e)}function ie(t,e){return Math.trunc(t/e)}function re(t){var e,n=[-61,9,38,199,426,686,756,818,1111,1181,1210,1635,2060,2097,2192,2262,2324,2394,2456,3178],o=n.length,i=t+621,r=-14,a=n[0];if(t=n[o-1])throw new Error("Invalid Jalali year "+t);for(var s=1;sn)for(;e>n;)e-=n,n=pe((t=ne(t,t.month+1)).month,t.year);return t.day=e,t}(t,t.day+n);default:return t}},n.prototype.getPrev=function(t,e,n){return void 0===e&&(e="d"),void 0===n&&(n=1),this.getNext(t,e,-n)},n.prototype.getWeekday=function(t){var e=te(t).getDay();return 0===e?7:e},n.prototype.getWeekNumber=function(t,e){7===e&&(e=0);var n=t[(11-e)%7],o=te(n);o.setDate(o.getDate()+4-(o.getDay()||7));var i=o.getTime(),r=te(new tt(n.year,1,1));return Math.floor(Math.round((i-r.getTime())/864e5)/7)+1},n.prototype.getToday=function(){return ee(new Date)},n.prototype.isValid=function(t){return t&&b(t.year)&&b(t.month)&&b(t.day)&&!isNaN(te(t).getTime())},n.decorators=[{type:e.Injectable}],n}(it),ce=1080,ue=24*ce,de=12*ce+793,he=29*ue+de,fe=11*ce+204,ge=2092591,me=1721425.5;function ye(t){return t%4==0&&t%100!=0||t%400==0}function be(t){var e=Math.floor((235*t-234)/19),n=e*de+fe,o=29*e+Math.floor(n/ue),i=n%ue,r=o%7;return 2!==r&&4!==r&&6!==r||(r=++o%7),1===r&&i>15*ce+204&&!De(t)?o+=2:0===r&&i>21*ce+589&&De(t-1)&&o++,o}function ve(t,e){var n=[31,28,31,30,31,30,31,31,30,31,30,31];return ye(e)&&n[1]++,n[t-1]}function _e(t){return De(t)?13:12}function we(t){return be(t+1)-be(t)}function De(t){var e=(12*t+17)%19;return e>=(e<0?-7:12)}function Ie(t,e){var n=be(e+1)-be(e),o=(n<=380?n:n-30)-353,i=De(e)?[30,29,29,29,30,30,29,30,29,30,29,30,29]:[30,29,29,29,30,29,30,29,30,29,30,29];return o>0&&i[2]++,o>1&&i[1]++,i[t-1]}function Ce(t){for(var e=0,n=1;nIe(u,p);)d-=Ie(u,p),u++;return new tt(p,u,d)}function xe(t){for(var e=t.year,n=t.month,o=t.day,i=be(e),r=1;r=0;s||(a=-a);for(var p=1970,l=1,c=1;a>0;)s?a>=(ye(p)?366:365)?(a-=ye(p)?366:365,p++):a>=ve(l,p)?(a-=ve(l,p),l++):(c+=a,a=0):a>=(ye(p-1)?366:365)?(a-=ye(p-1)?366:365,p--):(l>1?l--:(l=12,p--),a>=ve(l,p)?a-=ve(l,p):(c=ve(l,p)-a+1,a=0));return new Date(p,l-1,c)}function Re(t){if(!t)return"";for(var e=["","א","ב","ג","ד","ה","ו","ז","ח","ט"],n=["י","יא","יב","יג","יד","טו","טז","יז","יח","יט"],o=["","","כ","ל","מ","נ","ס","ע","פ","צ"],i=["","ק","ר","ש","ת","תק","תר","תש","תת","תתק"],r=["","א","ב","בא","בב","ה","הא","הב","הבא","הבב"],a=0,s=[],p=0;t>0;){var l=t%10;if(0===p)a=l;else if(1===p)1!==l?s.unshift(o[l],e[a]):s.unshift(n[a]);else{if(2!==p){5!==l&&s.unshift(r[l],"׳"," ");break}s.unshift(i[l])}t=Math.floor(t/10),0===p&&0===t&&s.unshift(e[l]),p++}return 1===(s=s.join("").split("")).length?s.push("׳"):s.length>1&&s.splice(s.length-1,0,"״"),s.join("")}var Ee=function(t){function n(){return null!==t&&t.apply(this,arguments)||this}return s(n,t),n.prototype.getDaysPerWeek=function(){return 7},n.prototype.getMonths=function(t){return t&&De(t)?[1,2,3,4,5,6,7,8,9,10,11,12,13]:[1,2,3,4,5,6,7,8,9,10,11,12]},n.prototype.getWeeksPerMonth=function(){return 6},n.prototype.isValid=function(t){var e=t&&y(t.year)&&y(t.month)&&y(t.day);return(e=(e=e&&t.month>0&&t.month<=(De(t.year)?13:12))&&t.day>0&&t.day<=Ie(t.month,t.year))&&!isNaN(xe(t).getTime())},n.prototype.getNext=function(t,e,n){switch(void 0===e&&(e="d"),void 0===n&&(n=1),t=new tt(t.year,t.month,t.day),e){case"y":return t.year+=n,t.month=1,t.day=1,t;case"m":return(t=function(t,e){var n=e>=0;for(n||(e=-e);e>0;)n?e>_e(t.year)-t.month?(e-=_e(t.year)-t.month+1,t.year++,t.month=1):(t.month+=e,e=0):e>=t.month?(t.year--,e-=t.month,t.month=_e(t.year)):(t.month-=e,e=0);return t}(t,n)).day=1,t;case"d":return function(t,e){var n=e>=0;for(n||(e=-e);e>0;)n?e>we(t.year)-Ce(t)?(e-=we(t.year)-Ce(t)+1,t.year++,t.month=1,t.day=1):e>Ie(t.month,t.year)-t.day?(e-=Ie(t.month,t.year)-t.day+1,t.month++,t.day=1):(t.day+=e,e=0):e>=t.day?(e-=t.day,t.month--,0===t.month&&(t.year--,t.month=_e(t.year)),t.day=Ie(t.month,t.year)):(t.day-=e,e=0);return t}(t,n);default:return t}},n.prototype.getPrev=function(t,e,n){return void 0===e&&(e="d"),void 0===n&&(n=1),this.getNext(t,e,-n)},n.prototype.getWeekday=function(t){var e=xe(t).getDay();return 0===e?7:e},n.prototype.getWeekNumber=function(t,e){var n=t[t.length-1];return Math.ceil(Ce(n)/7)},n.prototype.getToday=function(){return ke(new Date)},n.prototype.toGregorian=function(t){return et(xe(t))},n.prototype.fromGregorian=function(t){return ke(nt(t))},n.decorators=[{type:e.Injectable}],n}(it),Se=["שני","שלישי","רביעי","חמישי","שישי","שבת","ראשון"],Te=["תשרי","חשון","כסלו","טבת","שבט","אדר","ניסן","אייר","סיון","תמוז","אב","אלול"],Oe=["תשרי","חשון","כסלו","טבת","שבט","אדר א׳","אדר ב׳","ניסן","אייר","סיון","תמוז","אב","אלול"],Ne=function(t){function n(){return null!==t&&t.apply(this,arguments)||this}return s(n,t),n.prototype.getMonthShortName=function(t,e){return this.getMonthFullName(t,e)},n.prototype.getMonthFullName=function(t,e){return De(e)?Oe[t-1]:Te[t-1]},n.prototype.getWeekdayShortName=function(t){return Se[t-1]},n.prototype.getDayAriaLabel=function(t){return Re(t.day)+" "+this.getMonthFullName(t.month,t.year)+" "+Re(t.year)},n.prototype.getDayNumerals=function(t){return Re(t.day)},n.prototype.getWeekNumerals=function(t){return Re(t)},n.prototype.getYearNumerals=function(t){return Re(t)},n.decorators=[{type:e.Injectable}],n}(dt),Me=function(t){function n(){return null!==t&&t.apply(this,arguments)||this}return s(n,t),n.prototype.fromModel=function(t){return t instanceof Date&&!isNaN(t.getTime())?this._fromNativeDate(t):null},n.prototype.toModel=function(t){return t&&b(t.year)&&b(t.month)&&b(t.day)?this._toNativeDate(t):null},n.prototype._fromNativeDate=function(t){return{year:t.getFullYear(),month:t.getMonth()+1,day:t.getDate()}},n.prototype._toNativeDate=function(t){var e=new Date(t.year,t.month-1,t.day,12);return e.setFullYear(t.year),e},n.decorators=[{type:e.Injectable}],n}(_t),Pe=function(t){function n(){return null!==t&&t.apply(this,arguments)||this}return s(n,t),n.prototype._fromNativeDate=function(t){return{year:t.getUTCFullYear(),month:t.getUTCMonth()+1,day:t.getUTCDate()}},n.prototype._toNativeDate=function(t){var e=new Date(Date.UTC(t.year,t.month-1,t.day));return e.setUTCFullYear(t.year),e},n.decorators=[{type:e.Injectable}],n}(Me),je=function(){function t(){}return t.decorators=[{type:e.NgModule,args:[{declarations:[It,Ct,kt,Bt,zt,$t],exports:[It,$t],imports:[n.CommonModule,o.FormsModule],entryComponents:[It]}]}],t}(),Ae=function(){function t(){this.autoClose=!0,this.placement=["bottom-left","bottom-right","top-left","top-right"]}return t.decorators=[{type:e.Injectable,args:[{providedIn:"root"}]}],t.ngInjectableDef=e.ɵɵdefineInjectable({factory:function(){return new t},token:t,providedIn:"root"}),t}(),Fe=function(){function t(){}return t.decorators=[{type:e.Directive,args:[{selector:".navbar"}]}],t}(),Ve=function(){function t(t){this.elementRef=t,this._disabled=!1}return Object.defineProperty(t.prototype,"disabled",{get:function(){return this._disabled},set:function(t){this._disabled=""===t||!0===t},enumerable:!0,configurable:!0}),t.decorators=[{type:e.Directive,args:[{selector:"[ngbDropdownItem]",host:{class:"dropdown-item","[class.disabled]":"disabled"}}]}],t.ctorParameters=function(){return[{type:e.ElementRef}]},t.propDecorators={disabled:[{type:e.Input}]},t}(),He=function(){function t(t){this.dropdown=t,this.placement="bottom",this.isOpen=!1}return t.decorators=[{type:e.Directive,args:[{selector:"[ngbDropdownMenu]",host:{"[class.dropdown-menu]":"true","[class.show]":"dropdown.isOpen()","[attr.x-placement]":"placement","(keydown.ArrowUp)":"dropdown.onKeyDown($event)","(keydown.ArrowDown)":"dropdown.onKeyDown($event)","(keydown.Home)":"dropdown.onKeyDown($event)","(keydown.End)":"dropdown.onKeyDown($event)","(keydown.Enter)":"dropdown.onKeyDown($event)","(keydown.Space)":"dropdown.onKeyDown($event)"}}]}],t.ctorParameters=function(){return[{type:void 0,decorators:[{type:e.Inject,args:[e.forwardRef(function(){return $e})]}]}]},t.propDecorators={menuItems:[{type:e.ContentChildren,args:[Ve]}]},t}(),Le=function(){function t(t,e){this.dropdown=t,this._elementRef=e,this.anchorEl=e.nativeElement}return t.prototype.getNativeElement=function(){return this._elementRef.nativeElement},t.decorators=[{type:e.Directive,args:[{selector:"[ngbDropdownAnchor]",host:{class:"dropdown-toggle","aria-haspopup":"true","[attr.aria-expanded]":"dropdown.isOpen()"}}]}],t.ctorParameters=function(){return[{type:void 0,decorators:[{type:e.Inject,args:[e.forwardRef(function(){return $e})]}]},{type:e.ElementRef}]},t}(),We=function(t){function n(e,n){return t.call(this,e,n)||this}return s(n,t),n.decorators=[{type:e.Directive,args:[{selector:"[ngbDropdownToggle]",host:{class:"dropdown-toggle","aria-haspopup":"true","[attr.aria-expanded]":"dropdown.isOpen()","(click)":"dropdown.toggle()","(keydown.ArrowUp)":"dropdown.onKeyDown($event)","(keydown.ArrowDown)":"dropdown.onKeyDown($event)","(keydown.Home)":"dropdown.onKeyDown($event)","(keydown.End)":"dropdown.onKeyDown($event)"},providers:[{provide:Le,useExisting:e.forwardRef(function(){return n})}]}]}],n.ctorParameters=function(){return[{type:void 0,decorators:[{type:e.Inject,args:[e.forwardRef(function(){return $e})]}]},{type:e.ElementRef}]},n}(Le),$e=function(){function t(t,n,o,r,a,s,p){var l=this;this._changeDetector=t,this._document=o,this._ngZone=r,this._elementRef=a,this._renderer=s,this._closed$=new i.Subject,this._open=!1,this.openChange=new e.EventEmitter,this.placement=n.placement,this.container=n.container,this.autoClose=n.autoClose,this.display=p?"static":"dynamic",this._zoneSubscription=r.onStable.subscribe(function(){l._positionMenu()})}return t.prototype.ngAfterContentInit=function(){var t=this;this._ngZone.onStable.pipe(r.take(1)).subscribe(function(){t._applyPlacementClasses(),t._open&&t._setCloseHandlers()})},t.prototype.ngOnChanges=function(t){t.container&&this._open&&this._applyContainer(this.container),t.placement&&!t.placement.isFirstChange&&this._applyPlacementClasses()},t.prototype.isOpen=function(){return this._open},t.prototype.open=function(){this._open||(this._open=!0,this._applyContainer(this.container),this.openChange.emit(!0),this._setCloseHandlers())},t.prototype._setCloseHandlers=function(){var t=this,e=this._anchor;St(this._ngZone,this._document,this.autoClose,function(){return t.close()},this._closed$,this._menu?[this._menuElement.nativeElement]:[],e?[e.getNativeElement()]:[],".dropdown-item,.dropdown-divider")},t.prototype.close=function(){this._open&&(this._open=!1,this._resetContainer(),this._closed$.next(),this.openChange.emit(!1),this._changeDetector.markForCheck())},t.prototype.toggle=function(){this.isOpen()?this.close():this.open()},t.prototype.ngOnDestroy=function(){this._resetContainer(),this._closed$.next(),this._zoneSubscription.unsubscribe()},t.prototype.onKeyDown=function(t){var e=this,n=t.which,o=this._getMenuElements(),i=-1,r=!1,a=this._isEventFromToggle(t);if(!a&&o.length&&o.forEach(function(n,o){n.contains(t.target)&&(r=!0),n===e._document.activeElement&&(i=o)}),n!==gt.Space&&n!==gt.Enter){if(a||r){if(this.open(),o.length){switch(n){case gt.ArrowDown:i=Math.min(i+1,o.length-1);break;case gt.ArrowUp:if(this._isDropup()&&-1===i){i=o.length-1;break}i=Math.max(i-1,0);break;case gt.Home:i=0;break;case gt.End:i=o.length-1}o[i].focus()}t.preventDefault()}}else!r||!0!==this.autoClose&&"inside"!==this.autoClose||this.close()},t.prototype._isDropup=function(){return this._elementRef.nativeElement.classList.contains("dropup")},t.prototype._isEventFromToggle=function(t){return this._anchor.getNativeElement().contains(t.target)},t.prototype._getMenuElements=function(){var t=this._menu;return null==t?[]:t.menuItems.filter(function(t){return!t.disabled}).map(function(t){return t.elementRef.nativeElement})},t.prototype._positionMenu=function(){var t=this._menu;this.isOpen()&&t&&this._applyPlacementClasses("dynamic"===this.display?At(this._anchor.anchorEl,this._bodyContainer||this._menuElement.nativeElement,this.placement,"body"===this.container):this._getFirstPlacement(this.placement))},t.prototype._getFirstPlacement=function(t){return Array.isArray(t)?t[0]:t.split(" ")[0]},t.prototype._resetContainer=function(){var t=this._renderer,e=this._menuElement;if(e){var n=this._elementRef.nativeElement,o=e.nativeElement;t.appendChild(n,o),t.removeStyle(o,"position"),t.removeStyle(o,"transform")}this._bodyContainer&&(t.removeChild(this._document.body,this._bodyContainer),this._bodyContainer=null)},t.prototype._applyContainer=function(t){if(void 0===t&&(t=null),this._resetContainer(),"body"===t){var e=this._renderer,n=this._menuElement.nativeElement,o=this._bodyContainer=this._bodyContainer||e.createElement("div");e.setStyle(o,"position","absolute"),e.setStyle(n,"position","static"),e.setStyle(o,"z-index","1050"),e.appendChild(o,n),e.appendChild(this._document.body,o)}},t.prototype._applyPlacementClasses=function(t){var e=this._menu;if(e){t||(t=this._getFirstPlacement(this.placement));var n=this._renderer,o=this._elementRef.nativeElement;n.removeClass(o,"dropup"),n.removeClass(o,"dropdown"),e.placement="static"===this.display?null:t;var i=-1!==t.search("^top")?"dropup":"dropdown";n.addClass(o,i);var r=this._bodyContainer;r&&(n.removeClass(r,"dropup"),n.removeClass(r,"dropdown"),n.addClass(r,i))}},t.decorators=[{type:e.Directive,args:[{selector:"[ngbDropdown]",exportAs:"ngbDropdown",host:{"[class.show]":"isOpen()"}}]}],t.ctorParameters=function(){return[{type:e.ChangeDetectorRef},{type:Ae},{type:void 0,decorators:[{type:e.Inject,args:[n.DOCUMENT]}]},{type:e.NgZone},{type:e.ElementRef},{type:e.Renderer2},{type:Fe,decorators:[{type:e.Optional}]}]},t.propDecorators={_menu:[{type:e.ContentChild,args:[He,{static:!1}]}],_menuElement:[{type:e.ContentChild,args:[He,{read:e.ElementRef,static:!1}]}],_anchor:[{type:e.ContentChild,args:[Le,{static:!1}]}],autoClose:[{type:e.Input}],_open:[{type:e.Input,args:["open"]}],placement:[{type:e.Input}],container:[{type:e.Input}],display:[{type:e.Input}],openChange:[{type:e.Output}]},t}(),ze=[$e,Le,We,He,Ve,Fe],Be=function(){function t(){}return t.decorators=[{type:e.NgModule,args:[{declarations:ze,exports:ze}]}],t}(),Ue=function(){function t(){this.backdrop=!0,this.keyboard=!0}return t.decorators=[{type:e.Injectable,args:[{providedIn:"root"}]}],t.ngInjectableDef=e.ɵɵdefineInjectable({factory:function(){return new t},token:t,providedIn:"root"}),t}(),Ke=function(t,e,n){this.nodes=t,this.viewRef=e,this.componentRef=n},qe=function(){function t(t,e,n,o,i,r){this._type=t,this._injector=e,this._viewContainerRef=n,this._renderer=o,this._componentFactoryResolver=i,this._applicationRef=r}return t.prototype.open=function(t,e){return this._windowRef||(this._contentRef=this._getContentRef(t,e),this._windowRef=this._viewContainerRef.createComponent(this._componentFactoryResolver.resolveComponentFactory(this._type),0,this._injector,this._contentRef.nodes)),this._windowRef},t.prototype.close=function(){this._windowRef&&(this._viewContainerRef.remove(this._viewContainerRef.indexOf(this._windowRef.hostView)),this._windowRef=null,this._contentRef.viewRef&&(this._applicationRef.detachView(this._contentRef.viewRef),this._contentRef.viewRef.destroy(),this._contentRef=null))},t.prototype._getContentRef=function(t,n){if(t){if(t instanceof e.TemplateRef){var o=t.createEmbeddedView(n);return this._applicationRef.attachView(o),new Ke([o.rootNodes],o)}return new Ke([[this._renderer.createText(""+t)]])}return new Ke([])},t}(),Ge=function(){},Ze=function(){function t(t){this._document=t}return t.prototype.compensate=function(){return this._isPresent()?this._adjustBody(this._getWidth()):Ge},t.prototype._adjustBody=function(t){var e=this._document.body,n=e.style.paddingRight,o=parseFloat(window.getComputedStyle(e)["padding-right"]);return e.style["padding-right"]=o+t+"px",function(){return e.style["padding-right"]=n}},t.prototype._isPresent=function(){var t=this._document.body.getBoundingClientRect();return t.left+t.right\n
\n \n ",encapsulation:e.ViewEncapsulation.None,styles:["ngb-modal-window .component-host-scrollable{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;overflow:hidden}"]}]}],t.ctorParameters=function(){return[{type:void 0,decorators:[{type:e.Inject,args:[n.DOCUMENT]}]},{type:e.ElementRef}]},t.propDecorators={ariaLabelledBy:[{type:e.Input}],backdrop:[{type:e.Input}],centered:[{type:e.Input}],keyboard:[{type:e.Input}],scrollable:[{type:e.Input}],size:[{type:e.Input}],windowClass:[{type:e.Input}],dismissEvent:[{type:e.Output,args:["dismiss"]}]},t}(),en=function(){function t(t,e,n,o,r){var a=this;this._applicationRef=t,this._injector=e,this._document=n,this._scrollBar=o,this._rendererFactory=r,this._activeWindowCmptHasChanged=new i.Subject,this._ariaHiddenValues=new Map,this._backdropAttributes=["backdropClass"],this._modalRefs=[],this._windowAttributes=["ariaLabelledBy","backdrop","centered","keyboard","scrollable","size","windowClass"],this._windowCmpts=[],this._activeWindowCmptHasChanged.subscribe(function(){if(a._windowCmpts.length){var t=a._windowCmpts[a._windowCmpts.length-1];Nt(t.location.nativeElement,a._activeWindowCmptHasChanged),a._revertAriaHidden(),a._setAriaHidden(t.location.nativeElement)}})}return t.prototype.open=function(t,e,n,o){var i=this,r=v(o.container)?this._document.querySelector(o.container):this._document.body,a=this._rendererFactory.createRenderer(null,null),s=this._scrollBar.compensate(),p=function(){i._modalRefs.length||(a.removeClass(i._document.body,"modal-open"),i._revertAriaHidden())};if(!r)throw new Error('The specified modal container "'+(o.container||"body")+'" was not found in the DOM.');var l=new Xe,c=this._getContentRef(t,o.injector||e,n,l,o),u=!1!==o.backdrop?this._attachBackdrop(t,r):null,d=this._attachWindowComponent(t,r,c),h=new Je(d,c,u,o.beforeDismiss);return this._registerModalRef(h),this._registerWindowCmpt(d),h.result.then(s,s),h.result.then(p,p),l.close=function(t){h.close(t)},l.dismiss=function(t){h.dismiss(t)},this._applyWindowOptions(d.instance,o),1===this._modalRefs.length&&a.addClass(this._document.body,"modal-open"),u&&u.instance&&this._applyBackdropOptions(u.instance,o),h},t.prototype.dismissAll=function(t){this._modalRefs.forEach(function(e){return e.dismiss(t)})},t.prototype.hasOpenModals=function(){return this._modalRefs.length>0},t.prototype._attachBackdrop=function(t,e){var n=t.resolveComponentFactory(Ye).create(this._injector);return this._applicationRef.attachView(n.hostView),e.appendChild(n.location.nativeElement),n},t.prototype._attachWindowComponent=function(t,e,n){var o=t.resolveComponentFactory(tn).create(this._injector,n.nodes);return this._applicationRef.attachView(o.hostView),e.appendChild(o.location.nativeElement),o},t.prototype._applyWindowOptions=function(t,e){this._windowAttributes.forEach(function(n){v(e[n])&&(t[n]=e[n])})},t.prototype._applyBackdropOptions=function(t,e){this._backdropAttributes.forEach(function(n){v(e[n])&&(t[n]=e[n])})},t.prototype._getContentRef=function(t,n,o,i,r){return o?o instanceof e.TemplateRef?this._createFromTemplateRef(o,i):m(o)?this._createFromString(o):this._createFromComponent(t,n,o,i,r):new Ke([])},t.prototype._createFromTemplateRef=function(t,e){var n={$implicit:e,close:function(t){e.close(t)},dismiss:function(t){e.dismiss(t)}},o=t.createEmbeddedView(n);return this._applicationRef.attachView(o),new Ke([o.rootNodes],o)},t.prototype._createFromString=function(t){var e=this._document.createTextNode(""+t);return new Ke([[e]])},t.prototype._createFromComponent=function(t,n,o,i,r){var a=t.resolveComponentFactory(o),s=e.Injector.create({providers:[{provide:Xe,useValue:i}],parent:n}),p=a.create(s),l=p.location.nativeElement;return r.scrollable&&l.classList.add("component-host-scrollable"),this._applicationRef.attachView(p.hostView),new Ke([[l]],p.hostView,p)},t.prototype._setAriaHidden=function(t){var e=this,n=t.parentElement;n&&t!==this._document.body&&(Array.from(n.children).forEach(function(n){n!==t&&"SCRIPT"!==n.nodeName&&(e._ariaHiddenValues.set(n,n.getAttribute("aria-hidden")),n.setAttribute("aria-hidden","true"))}),this._setAriaHidden(n))},t.prototype._revertAriaHidden=function(){this._ariaHiddenValues.forEach(function(t,e){t?e.setAttribute("aria-hidden",t):e.removeAttribute("aria-hidden")}),this._ariaHiddenValues.clear()},t.prototype._registerModalRef=function(t){var e=this,n=function(){var n=e._modalRefs.indexOf(t);n>-1&&e._modalRefs.splice(n,1)};this._modalRefs.push(t),t.result.then(n,n)},t.prototype._registerWindowCmpt=function(t){var e=this;this._windowCmpts.push(t),this._activeWindowCmptHasChanged.next(),t.onDestroy(function(){var n=e._windowCmpts.indexOf(t);n>-1&&(e._windowCmpts.splice(n,1),e._activeWindowCmptHasChanged.next())})},t.decorators=[{type:e.Injectable,args:[{providedIn:"root"}]}],t.ctorParameters=function(){return[{type:e.ApplicationRef},{type:e.Injector},{type:void 0,decorators:[{type:e.Inject,args:[n.DOCUMENT]}]},{type:Ze},{type:e.RendererFactory2}]},t.ngInjectableDef=e.ɵɵdefineInjectable({factory:function(){return new t(e.ɵɵinject(e.ApplicationRef),e.ɵɵinject(e.INJECTOR),e.ɵɵinject(n.DOCUMENT),e.ɵɵinject(Ze),e.ɵɵinject(e.RendererFactory2))},token:t,providedIn:"root"}),t}(),nn=function(){function t(t,e,n,o){this._moduleCFR=t,this._injector=e,this._modalStack=n,this._config=o}return t.prototype.open=function(t,e){void 0===e&&(e={});var n=Object.assign({},this._config,e);return this._modalStack.open(this._moduleCFR,this._injector,t,n)},t.prototype.dismissAll=function(t){this._modalStack.dismissAll(t)},t.prototype.hasOpenModals=function(){return this._modalStack.hasOpenModals()},t.decorators=[{type:e.Injectable,args:[{providedIn:"root"}]}],t.ctorParameters=function(){return[{type:e.ComponentFactoryResolver},{type:e.Injector},{type:en},{type:Ue}]},t.ngInjectableDef=e.ɵɵdefineInjectable({factory:function(){return new t(e.ɵɵinject(e.ComponentFactoryResolver),e.ɵɵinject(e.INJECTOR),e.ɵɵinject(en),e.ɵɵinject(Ue))},token:t,providedIn:"root"}),t}(),on=function(){function t(){}return t.decorators=[{type:e.NgModule,args:[{declarations:[Ye,tn],entryComponents:[Ye,tn],providers:[nn]}]}],t}(),rn=function(){function t(){this.disabled=!1,this.boundaryLinks=!1,this.directionLinks=!0,this.ellipses=!0,this.maxSize=0,this.pageSize=10,this.rotate=!1}return t.decorators=[{type:e.Injectable,args:[{providedIn:"root"}]}],t.ngInjectableDef=e.ɵɵdefineInjectable({factory:function(){return new t},token:t,providedIn:"root"}),t}(),an=function(){function t(t){this.templateRef=t}return t.decorators=[{type:e.Directive,args:[{selector:"ng-template[ngbPaginationEllipsis]"}]}],t.ctorParameters=function(){return[{type:e.TemplateRef}]},t}(),sn=function(){function t(t){this.templateRef=t}return t.decorators=[{type:e.Directive,args:[{selector:"ng-template[ngbPaginationFirst]"}]}],t.ctorParameters=function(){return[{type:e.TemplateRef}]},t}(),pn=function(){function t(t){this.templateRef=t}return t.decorators=[{type:e.Directive,args:[{selector:"ng-template[ngbPaginationLast]"}]}],t.ctorParameters=function(){return[{type:e.TemplateRef}]},t}(),ln=function(){function t(t){this.templateRef=t}return t.decorators=[{type:e.Directive,args:[{selector:"ng-template[ngbPaginationNext]"}]}],t.ctorParameters=function(){return[{type:e.TemplateRef}]},t}(),cn=function(){function t(t){this.templateRef=t}return t.decorators=[{type:e.Directive,args:[{selector:"ng-template[ngbPaginationNumber]"}]}],t.ctorParameters=function(){return[{type:e.TemplateRef}]},t}(),un=function(){function t(t){this.templateRef=t}return t.decorators=[{type:e.Directive,args:[{selector:"ng-template[ngbPaginationPrevious]"}]}],t.ctorParameters=function(){return[{type:e.TemplateRef}]},t}(),dn=function(){function t(t){this.pageCount=0,this.pages=[],this.page=1,this.pageChange=new e.EventEmitter(!0),this.disabled=t.disabled,this.boundaryLinks=t.boundaryLinks,this.directionLinks=t.directionLinks,this.ellipses=t.ellipses,this.maxSize=t.maxSize,this.pageSize=t.pageSize,this.rotate=t.rotate,this.size=t.size}return t.prototype.hasPrevious=function(){return this.page>1},t.prototype.hasNext=function(){return this.page0&&(t>1&&this.pages.unshift(-1),this.pages.unshift(1)),e0&&this.pageCount>this.maxSize){var i=0,r=this.pageCount;this.rotate?(i=(e=l(this._applyRotation(),2))[0],r=e[1]):(i=(n=l(this._applyPagination(),2))[0],r=n[1]),this.pages=this.pages.slice(i,r),this._applyEllipses(i,r)}},t.decorators=[{type:e.Component,args:[{selector:"ngb-pagination",changeDetection:e.ChangeDetectionStrategy.OnPush,host:{role:"navigation"},template:'\n \n \n \n \n ...\n \n {{ page }}\n (current)\n \n \n '}]}],t.ctorParameters=function(){return[{type:rn}]},t.propDecorators={tplEllipsis:[{type:e.ContentChild,args:[an,{static:!1}]}],tplFirst:[{type:e.ContentChild,args:[sn,{static:!1}]}],tplLast:[{type:e.ContentChild,args:[pn,{static:!1}]}],tplNext:[{type:e.ContentChild,args:[ln,{static:!1}]}],tplNumber:[{type:e.ContentChild,args:[cn,{static:!1}]}],tplPrevious:[{type:e.ContentChild,args:[un,{static:!1}]}],disabled:[{type:e.Input}],boundaryLinks:[{type:e.Input}],directionLinks:[{type:e.Input}],ellipses:[{type:e.Input}],rotate:[{type:e.Input}],collectionSize:[{type:e.Input}],maxSize:[{type:e.Input}],page:[{type:e.Input}],pageSize:[{type:e.Input}],pageChange:[{type:e.Output}],size:[{type:e.Input}]},t}(),hn=[dn,an,sn,pn,ln,cn,un],fn=function(){function t(){}return t.decorators=[{type:e.NgModule,args:[{declarations:hn,exports:hn,imports:[n.CommonModule]}]}],t}(),gn=function(){function t(t,e){this.open=t,this.close=e,e||(this.close=t)}return t.prototype.isManual=function(){return"manual"===this.open||"manual"===this.close},t}(),mn={hover:["mouseenter","mouseleave"],focus:["focusin","focusout"]};var yn=function(t){return t>0?r.delay(t):function(t){return t}};function bn(t,e,n,o,a,s,p,l){void 0===p&&(p=0),void 0===l&&(l=0);var c=function(t,e){void 0===e&&(e=mn);var n=(t||"").trim();if(0===n.length)return[];var o=n.split(/\s+/).map(function(t){return t.split(":")}).map(function(t){var n=e[t[0]]||t;return new gn(n[0],n[1])}),i=o.filter(function(t){return t.isManual()});if(i.length>1)throw"Triggers parse error: only one manual trigger is allowed";if(1===i.length&&o.length>1)throw"Triggers parse error: manual trigger can't be mixed with other triggers";return o}(n);if(1===c.length&&c[0].isManual())return function(){};var u=function(t,e,n,o){return new i.Observable(function(i){var r=[],a=function(){return i.next(!0)},s=function(){return i.next(!1)},p=function(){return i.next(!o())};return n.forEach(function(n){n.open===n.close?r.push(t.listen(e,n.open,p)):r.push(t.listen(e,n.open,a),t.listen(e,n.close,s))}),function(){r.forEach(function(t){return t()})}})}(t,e,c,o).pipe(function(t,e,n){return function(o){var a=null,s=o.pipe(r.map(function(t){return{open:t}}),r.filter(function(t){var e=n();return e===t.open||a&&a.open!==e?(a&&a.open!==t.open&&(a=null),!1):(a=t,!0)}),r.share()),p=s.pipe(r.filter(function(t){return t.open}),yn(t)),l=s.pipe(r.filter(function(t){return!t.open}),yn(e));return i.merge(p,l).pipe(r.filter(function(t){return t===a&&(a=null,t.open!==n())}),r.map(function(t){return t.open}))}}(p,l,o)).subscribe(function(t){return t?a():s()});return function(){return u.unsubscribe()}}var vn=function(){function t(){this.autoClose=!0,this.placement="auto",this.triggers="click",this.disablePopover=!1,this.openDelay=0,this.closeDelay=0}return t.decorators=[{type:e.Injectable,args:[{providedIn:"root"}]}],t.ngInjectableDef=e.ɵɵdefineInjectable({factory:function(){return new t},token:t,providedIn:"root"}),t}(),_n=0,wn=function(){function t(){}return t.prototype.isTitleTemplate=function(){return this.title instanceof e.TemplateRef},t.decorators=[{type:e.Component,args:[{selector:"ngb-popover-window",changeDetection:e.ChangeDetectionStrategy.OnPush,encapsulation:e.ViewEncapsulation.None,host:{"[class]":'"popover" + (popoverClass ? " " + popoverClass : "")',role:"tooltip","[id]":"id"},template:'\n
\n

\n {{title}}\n \n

\n
',styles:["ngb-popover-window.bs-popover-bottom>.arrow,ngb-popover-window.bs-popover-top>.arrow{left:50%;margin-left:-.5rem}ngb-popover-window.bs-popover-bottom-left>.arrow,ngb-popover-window.bs-popover-top-left>.arrow{left:2em}ngb-popover-window.bs-popover-bottom-right>.arrow,ngb-popover-window.bs-popover-top-right>.arrow{left:auto;right:2em}ngb-popover-window.bs-popover-left>.arrow,ngb-popover-window.bs-popover-right>.arrow{top:50%;margin-top:-.5rem}ngb-popover-window.bs-popover-left-top>.arrow,ngb-popover-window.bs-popover-right-top>.arrow{top:.7em}ngb-popover-window.bs-popover-left-bottom>.arrow,ngb-popover-window.bs-popover-right-bottom>.arrow{top:auto;bottom:.7em}"]}]}],t.propDecorators={title:[{type:e.Input}],id:[{type:e.Input}],popoverClass:[{type:e.Input}],context:[{type:e.Input}]},t}(),Dn=function(){function t(t,n,o,i,r,a,s,p,l,c){var u=this;this._elementRef=t,this._renderer=n,this._ngZone=s,this._document=p,this._changeDetector=l,this._applicationRef=c,this.shown=new e.EventEmitter,this.hidden=new e.EventEmitter,this._ngbPopoverWindowId="ngb-popover-"+_n++,this.autoClose=a.autoClose,this.placement=a.placement,this.triggers=a.triggers,this.container=a.container,this.disablePopover=a.disablePopover,this.popoverClass=a.popoverClass,this.openDelay=a.openDelay,this.closeDelay=a.closeDelay,this._popupService=new qe(wn,o,r,n,i,c),this._zoneSubscription=s.onStable.subscribe(function(){u._windowRef&&At(u._elementRef.nativeElement,u._windowRef.location.nativeElement,u.placement,"body"===u.container,"bs-popover")})}return t.prototype._isDisabled=function(){return!!this.disablePopover||!this.ngbPopover&&!this.popoverTitle},t.prototype.open=function(t){var e=this;this._windowRef||this._isDisabled()||(this._windowRef=this._popupService.open(this.ngbPopover,t),this._windowRef.instance.title=this.popoverTitle,this._windowRef.instance.context=t,this._windowRef.instance.popoverClass=this.popoverClass,this._windowRef.instance.id=this._ngbPopoverWindowId,this._renderer.setAttribute(this._elementRef.nativeElement,"aria-describedby",this._ngbPopoverWindowId),"body"===this.container&&this._document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement),this._windowRef.changeDetectorRef.detectChanges(),this._windowRef.changeDetectorRef.markForCheck(),St(this._ngZone,this._document,this.autoClose,function(){return e.close()},this.hidden,[this._windowRef.location.nativeElement]),this.shown.emit())},t.prototype.close=function(){this._windowRef&&(this._renderer.removeAttribute(this._elementRef.nativeElement,"aria-describedby"),this._popupService.close(),this._windowRef=null,this.hidden.emit(),this._changeDetector.markForCheck())},t.prototype.toggle=function(){this._windowRef?this.close():this.open()},t.prototype.isOpen=function(){return null!=this._windowRef},t.prototype.ngOnInit=function(){this._unregisterListenersFn=bn(this._renderer,this._elementRef.nativeElement,this.triggers,this.isOpen.bind(this),this.open.bind(this),this.close.bind(this),+this.openDelay,+this.closeDelay)},t.prototype.ngOnChanges=function(t){(t.ngbPopover||t.popoverTitle||t.disablePopover)&&this._isDisabled()&&this.close()},t.prototype.ngOnDestroy=function(){this.close(),this._unregisterListenersFn&&this._unregisterListenersFn(),this._zoneSubscription.unsubscribe()},t.decorators=[{type:e.Directive,args:[{selector:"[ngbPopover]",exportAs:"ngbPopover"}]}],t.ctorParameters=function(){return[{type:e.ElementRef},{type:e.Renderer2},{type:e.Injector},{type:e.ComponentFactoryResolver},{type:e.ViewContainerRef},{type:vn},{type:e.NgZone},{type:void 0,decorators:[{type:e.Inject,args:[n.DOCUMENT]}]},{type:e.ChangeDetectorRef},{type:e.ApplicationRef}]},t.propDecorators={autoClose:[{type:e.Input}],ngbPopover:[{type:e.Input}],popoverTitle:[{type:e.Input}],placement:[{type:e.Input}],triggers:[{type:e.Input}],container:[{type:e.Input}],disablePopover:[{type:e.Input}],popoverClass:[{type:e.Input}],openDelay:[{type:e.Input}],closeDelay:[{type:e.Input}],shown:[{type:e.Output}],hidden:[{type:e.Output}]},t}(),In=function(){function t(){}return t.decorators=[{type:e.NgModule,args:[{declarations:[Dn,wn],exports:[Dn],imports:[n.CommonModule],entryComponents:[wn]}]}],t}(),Cn=function(){function t(){this.max=100,this.animated=!1,this.striped=!1,this.showValue=!1}return t.decorators=[{type:e.Injectable,args:[{providedIn:"root"}]}],t.ngInjectableDef=e.ɵɵdefineInjectable({factory:function(){return new t},token:t,providedIn:"root"}),t}(),kn=function(){function t(t){this.value=0,this.max=t.max,this.animated=t.animated,this.striped=t.striped,this.type=t.type,this.showValue=t.showValue,this.height=t.height}return t.prototype.getValue=function(){return g(this.value,this.max)},t.prototype.getPercentValue=function(){return 100*this.getValue()/this.max},t.decorators=[{type:e.Component,args:[{selector:"ngb-progressbar",changeDetection:e.ChangeDetectionStrategy.OnPush,template:'\n
\n
\n {{getPercentValue()}}%\n
\n
\n '}]}],t.ctorParameters=function(){return[{type:Cn}]},t.propDecorators={max:[{type:e.Input}],animated:[{type:e.Input}],striped:[{type:e.Input}],showValue:[{type:e.Input}],type:[{type:e.Input}],value:[{type:e.Input}],height:[{type:e.Input}]},t}(),xn=function(){function t(){}return t.decorators=[{type:e.NgModule,args:[{declarations:[kn],exports:[kn],imports:[n.CommonModule]}]}],t}(),Rn=function(){function t(){this.max=10,this.readonly=!1,this.resettable=!1}return t.decorators=[{type:e.Injectable,args:[{providedIn:"root"}]}],t.ngInjectableDef=e.ɵɵdefineInjectable({factory:function(){return new t},token:t,providedIn:"root"}),t}(),En={provide:o.NG_VALUE_ACCESSOR,useExisting:e.forwardRef(function(){return Sn}),multi:!0},Sn=function(){function t(t,n){this._changeDetectorRef=n,this.contexts=[],this.disabled=!1,this.hover=new e.EventEmitter,this.leave=new e.EventEmitter,this.rateChange=new e.EventEmitter(!0),this.onChange=function(t){},this.onTouched=function(){},this.max=t.max,this.readonly=t.readonly}return t.prototype.ariaValueText=function(){return this.nextRate+" out of "+this.max},t.prototype.enter=function(t){this.readonly||this.disabled||this._updateState(t),this.hover.emit(t)},t.prototype.handleBlur=function(){this.onTouched()},t.prototype.handleClick=function(t){this.update(this.resettable&&this.rate===t?0:t)},t.prototype.handleKeyDown=function(t){switch(t.which){case gt.ArrowDown:case gt.ArrowLeft:this.update(this.rate-1);break;case gt.ArrowUp:case gt.ArrowRight:this.update(this.rate+1);break;case gt.Home:this.update(0);break;case gt.End:this.update(this.max);break;default:return}t.preventDefault()},t.prototype.ngOnChanges=function(t){t.rate&&this.update(this.rate)},t.prototype.ngOnInit=function(){this.contexts=Array.from({length:this.max},function(t,e){return{fill:0,index:e}}),this._updateState(this.rate)},t.prototype.registerOnChange=function(t){this.onChange=t},t.prototype.registerOnTouched=function(t){this.onTouched=t},t.prototype.reset=function(){this.leave.emit(this.nextRate),this._updateState(this.rate)},t.prototype.setDisabledState=function(t){this.disabled=t},t.prototype.update=function(t,e){void 0===e&&(e=!0);var n=g(t,this.max,0);this.readonly||this.disabled||this.rate===n||(this.rate=n,this.rateChange.emit(this.rate)),e&&(this.onChange(this.rate),this.onTouched()),this._updateState(this.rate)},t.prototype.writeValue=function(t){this.update(t,!1),this._changeDetectorRef.markForCheck()},t.prototype._getFillValue=function(t){var e=this.nextRate-t;return e>=1?100:e<1&&e>0?parseInt((100*e).toFixed(2),10):0},t.prototype._updateState=function(t){var e=this;this.nextRate=t,this.contexts.forEach(function(t,n){return t.fill=e._getFillValue(n)})},t.decorators=[{type:e.Component,args:[{selector:"ngb-rating",changeDetection:e.ChangeDetectionStrategy.OnPush,host:{class:"d-inline-flex",tabindex:"0",role:"slider","aria-valuemin":"0","[attr.aria-valuemax]":"max","[attr.aria-valuenow]":"nextRate","[attr.aria-valuetext]":"ariaValueText()","[attr.aria-disabled]":"readonly ? true : null","(blur)":"handleBlur()","(keydown)":"handleKeyDown($event)","(mouseleave)":"reset()"},template:'\n {{ fill === 100 ? \'★\' : \'☆\' }}\n \n ({{ index < nextRate ? \'*\' : \' \' }})\n \n \n \n \n \n ',providers:[En]}]}],t.ctorParameters=function(){return[{type:Rn},{type:e.ChangeDetectorRef}]},t.propDecorators={max:[{type:e.Input}],rate:[{type:e.Input}],readonly:[{type:e.Input}],resettable:[{type:e.Input}],starTemplate:[{type:e.Input}],starTemplateFromContent:[{type:e.ContentChild,args:[e.TemplateRef,{static:!1}]}],hover:[{type:e.Output}],leave:[{type:e.Output}],rateChange:[{type:e.Output}]},t}(),Tn=function(){function t(){}return t.decorators=[{type:e.NgModule,args:[{declarations:[Sn],exports:[Sn],imports:[n.CommonModule]}]}],t}(),On=function(){function t(){this.justify="start",this.orientation="horizontal",this.type="tabs"}return t.decorators=[{type:e.Injectable,args:[{providedIn:"root"}]}],t.ngInjectableDef=e.ɵɵdefineInjectable({factory:function(){return new t},token:t,providedIn:"root"}),t}(),Nn=0,Mn=function(){function t(t){this.templateRef=t}return t.decorators=[{type:e.Directive,args:[{selector:"ng-template[ngbTabTitle]"}]}],t.ctorParameters=function(){return[{type:e.TemplateRef}]},t}(),Pn=function(){function t(t){this.templateRef=t}return t.decorators=[{type:e.Directive,args:[{selector:"ng-template[ngbTabContent]"}]}],t.ctorParameters=function(){return[{type:e.TemplateRef}]},t}(),jn=function(){function t(){this.id="ngb-tab-"+Nn++,this.disabled=!1}return t.prototype.ngAfterContentChecked=function(){this.titleTpl=this.titleTpls.first,this.contentTpl=this.contentTpls.first},t.decorators=[{type:e.Directive,args:[{selector:"ngb-tab"}]}],t.propDecorators={id:[{type:e.Input}],title:[{type:e.Input}],disabled:[{type:e.Input}],titleTpls:[{type:e.ContentChildren,args:[Mn,{descendants:!1}]}],contentTpls:[{type:e.ContentChildren,args:[Pn,{descendants:!1}]}]},t}(),An=function(){function t(t){this.destroyOnHide=!0,this.tabChange=new e.EventEmitter,this.type=t.type,this.justify=t.justify,this.orientation=t.orientation}return Object.defineProperty(t.prototype,"justify",{set:function(t){this.justifyClass="fill"===t||"justified"===t?"nav-"+t:"justify-content-"+t},enumerable:!0,configurable:!0}),t.prototype.select=function(t){var e=this._getTabById(t);if(e&&!e.disabled&&this.activeId!==e.id){var n=!1;this.tabChange.emit({activeId:this.activeId,nextId:e.id,preventDefault:function(){n=!0}}),n||(this.activeId=e.id)}},t.prototype.ngAfterContentChecked=function(){var t=this._getTabById(this.activeId);this.activeId=t?t.id:this.tabs.length?this.tabs.first.id:null},t.prototype._getTabById=function(t){var e=this.tabs.filter(function(e){return e.id===t});return e.length?e[0]:null},t.decorators=[{type:e.Component,args:[{selector:"ngb-tabset",exportAs:"ngbTabset",template:'\n \n
\n \n \n \n
\n \n \n '}]}],t.ctorParameters=function(){return[{type:On}]},t.propDecorators={tabs:[{type:e.ContentChildren,args:[jn]}],activeId:[{type:e.Input}],destroyOnHide:[{type:e.Input}],justify:[{type:e.Input}],orientation:[{type:e.Input}],type:[{type:e.Input}],tabChange:[{type:e.Output}]},t}(),Fn=[An,jn,Pn,Mn],Vn=function(){function t(){}return t.decorators=[{type:e.NgModule,args:[{declarations:Fn,exports:Fn,imports:[n.CommonModule]}]}],t}(),Hn=function(){function t(t,e,n){this.hour=h(t),this.minute=h(e),this.second=h(n)}return t.prototype.changeHour=function(t){void 0===t&&(t=1),this.updateHour((isNaN(this.hour)?0:this.hour)+t)},t.prototype.updateHour=function(t){y(t)?this.hour=(t<0?24+t:t)%24:this.hour=NaN},t.prototype.changeMinute=function(t){void 0===t&&(t=1),this.updateMinute((isNaN(this.minute)?0:this.minute)+t)},t.prototype.updateMinute=function(t){y(t)?(this.minute=t%60<0?60+t%60:t%60,this.changeHour(Math.floor(t/60))):this.minute=NaN},t.prototype.changeSecond=function(t){void 0===t&&(t=1),this.updateSecond((isNaN(this.second)?0:this.second)+t)},t.prototype.updateSecond=function(t){y(t)?(this.second=t<0?60+t%60:t%60,this.changeMinute(Math.floor(t/60))):this.second=NaN},t.prototype.isValid=function(t){return void 0===t&&(t=!0),y(this.hour)&&y(this.minute)&&(!t||y(this.second))},t.prototype.toString=function(){return(this.hour||0)+":"+(this.minute||0)+":"+(this.second||0)},t}(),Ln=function(){function t(){this.meridian=!1,this.spinners=!0,this.seconds=!1,this.hourStep=1,this.minuteStep=1,this.secondStep=1,this.disabled=!1,this.readonlyInputs=!1,this.size="medium"}return t.decorators=[{type:e.Injectable,args:[{providedIn:"root"}]}],t.ngInjectableDef=e.ɵɵdefineInjectable({factory:function(){return new t},token:t,providedIn:"root"}),t}();function Wn(){return new zn}var $n=function(){function t(){}return t.decorators=[{type:e.Injectable,args:[{providedIn:"root",useFactory:Wn}]}],t.ngInjectableDef=e.ɵɵdefineInjectable({factory:Wn,token:t,providedIn:"root"}),t}(),zn=function(t){function n(){return null!==t&&t.apply(this,arguments)||this}return s(n,t),n.prototype.fromModel=function(t){return t&&b(t.hour)&&b(t.minute)?{hour:t.hour,minute:t.minute,second:b(t.second)?t.second:null}:null},n.prototype.toModel=function(t){return t&&b(t.hour)&&b(t.minute)?{hour:t.hour,minute:t.minute,second:b(t.second)?t.second:null}:null},n.decorators=[{type:e.Injectable}],n}($n);function Bn(t){return new Kn(t)}var Un=function(){function t(){}return t.decorators=[{type:e.Injectable,args:[{providedIn:"root",useFactory:Bn,deps:[e.LOCALE_ID]}]}],t.ngInjectableDef=e.ɵɵdefineInjectable({factory:function(){return Bn(e.ɵɵinject(e.LOCALE_ID))},token:t,providedIn:"root"}),t}(),Kn=function(t){function o(e){var o=t.call(this)||this;return o._periods=n.getLocaleDayPeriods(e,n.FormStyle.Standalone,n.TranslationWidth.Narrow),o}return s(o,t),o.prototype.getMorningPeriod=function(){return this._periods[0]},o.prototype.getAfternoonPeriod=function(){return this._periods[1]},o.decorators=[{type:e.Injectable}],o.ctorParameters=function(){return[{type:String,decorators:[{type:e.Inject,args:[e.LOCALE_ID]}]}]},o}(Un),qn={provide:o.NG_VALUE_ACCESSOR,useExisting:e.forwardRef(function(){return Gn}),multi:!0},Gn=function(){function t(t,e,n,o){this._config=t,this._ngbTimeAdapter=e,this._cd=n,this.i18n=o,this.onChange=function(t){},this.onTouched=function(){},this.meridian=t.meridian,this.spinners=t.spinners,this.seconds=t.seconds,this.hourStep=t.hourStep,this.minuteStep=t.minuteStep,this.secondStep=t.secondStep,this.disabled=t.disabled,this.readonlyInputs=t.readonlyInputs,this.size=t.size}return Object.defineProperty(t.prototype,"hourStep",{get:function(){return this._hourStep},set:function(t){this._hourStep=b(t)?t:this._config.hourStep},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"minuteStep",{get:function(){return this._minuteStep},set:function(t){this._minuteStep=b(t)?t:this._config.minuteStep},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"secondStep",{get:function(){return this._secondStep},set:function(t){this._secondStep=b(t)?t:this._config.secondStep},enumerable:!0,configurable:!0}),t.prototype.writeValue=function(t){var e=this._ngbTimeAdapter.fromModel(t);this.model=e?new Hn(e.hour,e.minute,e.second):new Hn,this.seconds||e&&y(e.second)||(this.model.second=0),this._cd.markForCheck()},t.prototype.registerOnChange=function(t){this.onChange=t},t.prototype.registerOnTouched=function(t){this.onTouched=t},t.prototype.setDisabledState=function(t){this.disabled=t},t.prototype.changeHour=function(t){this.model.changeHour(t),this.propagateModelChange()},t.prototype.changeMinute=function(t){this.model.changeMinute(t),this.propagateModelChange()},t.prototype.changeSecond=function(t){this.model.changeSecond(t),this.propagateModelChange()},t.prototype.updateHour=function(t){var e=this.model.hour>=12,n=h(t);this.meridian&&(e&&n<12||!e&&12===n)?this.model.updateHour(n+12):this.model.updateHour(n),this.propagateModelChange()},t.prototype.updateMinute=function(t){this.model.updateMinute(h(t)),this.propagateModelChange()},t.prototype.updateSecond=function(t){this.model.updateSecond(h(t)),this.propagateModelChange()},t.prototype.toggleMeridian=function(){this.meridian&&this.changeHour(12)},t.prototype.formatHour=function(t){return y(t)?this.meridian?_(t%12==0?12:t%12):_(t%24):_(NaN)},t.prototype.formatMinSec=function(t){return _(t)},Object.defineProperty(t.prototype,"isSmallSize",{get:function(){return"small"===this.size},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isLargeSize",{get:function(){return"large"===this.size},enumerable:!0,configurable:!0}),t.prototype.ngOnChanges=function(t){t.seconds&&!this.seconds&&this.model&&!y(this.model.second)&&(this.model.second=0,this.propagateModelChange(!1))},t.prototype.propagateModelChange=function(t){void 0===t&&(t=!0),t&&this.onTouched(),this.model.isValid(this.seconds)?this.onChange(this._ngbTimeAdapter.toModel({hour:this.model.hour,minute:this.model.minute,second:this.model.second})):this.onChange(this._ngbTimeAdapter.toModel(null))},t.decorators=[{type:e.Component,args:[{selector:"ngb-timepicker",encapsulation:e.ViewEncapsulation.None,template:'\n
\n
\n
\n \n \n \n
\n
:
\n
\n \n \n \n
\n
:
\n
\n \n \n \n
\n
\n
\n \n
\n
\n
\n ',providers:[qn],styles:['ngb-timepicker{font-size:1rem}.ngb-tp{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.ngb-tp-input-container{width:4em}.ngb-tp-chevron::before{border-style:solid;border-width:.29em .29em 0 0;content:"";display:inline-block;height:.69em;left:.05em;position:relative;top:.15em;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);vertical-align:middle;width:.69em}.ngb-tp-chevron.bottom:before{top:-.3em;-webkit-transform:rotate(135deg);transform:rotate(135deg)}.ngb-tp-input{text-align:center}.ngb-tp-hour,.ngb-tp-meridian,.ngb-tp-minute,.ngb-tp-second{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-align:center;align-items:center;-ms-flex-pack:distribute;justify-content:space-around}.ngb-tp-spacer{width:1em;text-align:center}']}]}],t.ctorParameters=function(){return[{type:Ln},{type:$n},{type:e.ChangeDetectorRef},{type:Un}]},t.propDecorators={meridian:[{type:e.Input}],spinners:[{type:e.Input}],seconds:[{type:e.Input}],hourStep:[{type:e.Input}],minuteStep:[{type:e.Input}],secondStep:[{type:e.Input}],readonlyInputs:[{type:e.Input}],size:[{type:e.Input}]},t}(),Zn=function(){function t(){}return t.decorators=[{type:e.NgModule,args:[{declarations:[Gn],exports:[Gn],imports:[n.CommonModule]}]}],t}(),Yn=function(){function t(){this.autohide=!0,this.delay=500,this.ariaLive="polite"}return t.decorators=[{type:e.Injectable,args:[{providedIn:"root"}]}],t.ngInjectableDef=e.ɵɵdefineInjectable({factory:function(){return new t},token:t,providedIn:"root"}),t}(),Xn=function(){function t(){}return t.decorators=[{type:e.Directive,args:[{selector:"[ngbToastHeader]"}]}],t}(),Jn=function(){function t(t,n){this.ariaLive=t,this.contentHeaderTpl=null,this.hideOutput=new e.EventEmitter,null==this.ariaLive&&(this.ariaLive=n.ariaLive),this.delay=n.delay,this.autohide=n.autohide}return t.prototype.ngAfterContentInit=function(){this._init()},t.prototype.ngOnChanges=function(t){"autohide"in t&&(this._clearTimeout(),this._init())},t.prototype.hide=function(){this._clearTimeout(),this.hideOutput.emit()},t.prototype._init=function(){var t=this;this.autohide&&!this._timeoutID&&(this._timeoutID=setTimeout(function(){return t.hide()},this.delay))},t.prototype._clearTimeout=function(){this._timeoutID&&(clearTimeout(this._timeoutID),this._timeoutID=null)},t.decorators=[{type:e.Component,args:[{selector:"ngb-toast",exportAs:"ngbToast",encapsulation:e.ViewEncapsulation.None,host:{role:"alert","[attr.aria-live]":"ariaLive","aria-atomic":"true","[class.toast]":"true","[class.show]":"true","[class.autohide]":"autohide"},template:'\n \n {{header}}\n \n \n
\n \n \n
\n
\n
\n \n
\n ',styles:[".ngb-toasts{position:fixed;top:0;right:0;margin:.5em;z-index:1200}ngb-toast .toast-header .close{margin-left:auto;margin-bottom:.25rem}"]}]}],t.ctorParameters=function(){return[{type:String,decorators:[{type:e.Attribute,args:["aria-live"]}]},{type:Yn}]},t.propDecorators={delay:[{type:e.Input}],autohide:[{type:e.Input}],header:[{type:e.Input}],contentHeaderTpl:[{type:e.ContentChild,args:[Xn,{read:e.TemplateRef,static:!0}]}],hideOutput:[{type:e.Output,args:["hide"]}]},t}(),Qn=function(){function t(){}return t.decorators=[{type:e.NgModule,args:[{declarations:[Jn,Xn],imports:[n.CommonModule],exports:[Jn,Xn]}]}],t}(),to=function(){function t(){this.autoClose=!0,this.placement="auto",this.triggers="hover focus",this.disableTooltip=!1,this.openDelay=0,this.closeDelay=0}return t.decorators=[{type:e.Injectable,args:[{providedIn:"root"}]}],t.ngInjectableDef=e.ɵɵdefineInjectable({factory:function(){return new t},token:t,providedIn:"root"}),t}(),eo=0,no=function(){function t(){}return t.decorators=[{type:e.Component,args:[{selector:"ngb-tooltip-window",changeDetection:e.ChangeDetectionStrategy.OnPush,encapsulation:e.ViewEncapsulation.None,host:{"[class]":'"tooltip show" + (tooltipClass ? " " + tooltipClass : "")',role:"tooltip","[id]":"id"},template:'
',styles:["ngb-tooltip-window.bs-tooltip-bottom .arrow,ngb-tooltip-window.bs-tooltip-top .arrow{left:calc(50% - .4rem)}ngb-tooltip-window.bs-tooltip-bottom-left .arrow,ngb-tooltip-window.bs-tooltip-top-left .arrow{left:1em}ngb-tooltip-window.bs-tooltip-bottom-right .arrow,ngb-tooltip-window.bs-tooltip-top-right .arrow{left:auto;right:.8rem}ngb-tooltip-window.bs-tooltip-left .arrow,ngb-tooltip-window.bs-tooltip-right .arrow{top:calc(50% - .4rem)}ngb-tooltip-window.bs-tooltip-left-top .arrow,ngb-tooltip-window.bs-tooltip-right-top .arrow{top:.4rem}ngb-tooltip-window.bs-tooltip-left-bottom .arrow,ngb-tooltip-window.bs-tooltip-right-bottom .arrow{top:auto;bottom:.4rem}"]}]}],t.propDecorators={id:[{type:e.Input}],tooltipClass:[{type:e.Input}]},t}(),oo=function(){function t(t,n,o,i,r,a,s,p,l,c){var u=this;this._elementRef=t,this._renderer=n,this._ngZone=s,this._document=p,this._changeDetector=l,this._applicationRef=c,this.shown=new e.EventEmitter,this.hidden=new e.EventEmitter,this._ngbTooltipWindowId="ngb-tooltip-"+eo++,this.autoClose=a.autoClose,this.placement=a.placement,this.triggers=a.triggers,this.container=a.container,this.disableTooltip=a.disableTooltip,this.tooltipClass=a.tooltipClass,this.openDelay=a.openDelay,this.closeDelay=a.closeDelay,this._popupService=new qe(no,o,r,n,i,c),this._zoneSubscription=s.onStable.subscribe(function(){u._windowRef&&At(u._elementRef.nativeElement,u._windowRef.location.nativeElement,u.placement,"body"===u.container,"bs-tooltip")})}return Object.defineProperty(t.prototype,"ngbTooltip",{get:function(){return this._ngbTooltip},set:function(t){this._ngbTooltip=t,!t&&this._windowRef&&this.close()},enumerable:!0,configurable:!0}),t.prototype.open=function(t){var e=this;this._windowRef||!this._ngbTooltip||this.disableTooltip||(this._windowRef=this._popupService.open(this._ngbTooltip,t),this._windowRef.instance.tooltipClass=this.tooltipClass,this._windowRef.instance.id=this._ngbTooltipWindowId,this._renderer.setAttribute(this._elementRef.nativeElement,"aria-describedby",this._ngbTooltipWindowId),"body"===this.container&&this._document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement),this._windowRef.changeDetectorRef.detectChanges(),this._windowRef.changeDetectorRef.markForCheck(),St(this._ngZone,this._document,this.autoClose,function(){return e.close()},this.hidden,[this._windowRef.location.nativeElement]),this.shown.emit())},t.prototype.close=function(){null!=this._windowRef&&(this._renderer.removeAttribute(this._elementRef.nativeElement,"aria-describedby"),this._popupService.close(),this._windowRef=null,this.hidden.emit(),this._changeDetector.markForCheck())},t.prototype.toggle=function(){this._windowRef?this.close():this.open()},t.prototype.isOpen=function(){return null!=this._windowRef},t.prototype.ngOnInit=function(){this._unregisterListenersFn=bn(this._renderer,this._elementRef.nativeElement,this.triggers,this.isOpen.bind(this),this.open.bind(this),this.close.bind(this),+this.openDelay,+this.closeDelay)},t.prototype.ngOnDestroy=function(){this.close(),this._unregisterListenersFn&&this._unregisterListenersFn(),this._zoneSubscription.unsubscribe()},t.decorators=[{type:e.Directive,args:[{selector:"[ngbTooltip]",exportAs:"ngbTooltip"}]}],t.ctorParameters=function(){return[{type:e.ElementRef},{type:e.Renderer2},{type:e.Injector},{type:e.ComponentFactoryResolver},{type:e.ViewContainerRef},{type:to},{type:e.NgZone},{type:void 0,decorators:[{type:e.Inject,args:[n.DOCUMENT]}]},{type:e.ChangeDetectorRef},{type:e.ApplicationRef}]},t.propDecorators={autoClose:[{type:e.Input}],placement:[{type:e.Input}],triggers:[{type:e.Input}],container:[{type:e.Input}],disableTooltip:[{type:e.Input}],tooltipClass:[{type:e.Input}],openDelay:[{type:e.Input}],closeDelay:[{type:e.Input}],shown:[{type:e.Output}],hidden:[{type:e.Output}],ngbTooltip:[{type:e.Input}]},t}(),io=function(){function t(){}return t.decorators=[{type:e.NgModule,args:[{declarations:[oo,no],exports:[oo],entryComponents:[no]}]}],t}(),ro=function(){function t(){this.highlightClass="ngb-highlight"}return t.prototype.ngOnChanges=function(t){var e=f(this.result),n=(Array.isArray(this.term)?this.term:[this.term]).map(function(t){return f(t).replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")}).filter(function(t){return t});this.parts=n.length?e.split(new RegExp("("+n.join("|")+")","gmi")):[e]},t.decorators=[{type:e.Component,args:[{selector:"ngb-highlight",changeDetection:e.ChangeDetectionStrategy.OnPush,encapsulation:e.ViewEncapsulation.None,template:'{{part}}{{part}}',styles:[".ngb-highlight{font-weight:700}"]}]}],t.propDecorators={highlightClass:[{type:e.Input}],result:[{type:e.Input}],term:[{type:e.Input}]},t}(),ao=function(){function t(){this.activeIdx=0,this.focusFirst=!0,this.formatter=f,this.selectEvent=new e.EventEmitter,this.activeChangeEvent=new e.EventEmitter}return t.prototype.hasActive=function(){return this.activeIdx>-1&&this.activeIdx=0?this.id+"-"+this.activeIdx:void 0)},t.decorators=[{type:e.Component,args:[{selector:"ngb-typeahead-window",exportAs:"ngbTypeaheadWindow",host:{"(mousedown)":"$event.preventDefault()",class:"dropdown-menu show",role:"listbox","[id]":"id"},template:'\n \n \n \n \n \n \n '}]}],t.propDecorators={id:[{type:e.Input}],focusFirst:[{type:e.Input}],results:[{type:e.Input}],term:[{type:e.Input}],formatter:[{type:e.Input}],resultTemplate:[{type:e.Input}],selectEvent:[{type:e.Output,args:["select"]}],activeChangeEvent:[{type:e.Output,args:["activeChange"]}]},t}(),so=new e.InjectionToken("live announcer delay",{providedIn:"root",factory:po});function po(){return 100}function lo(t,e){void 0===e&&(e=!1);var n=t.body.querySelector("#ngb-live");return null==n&&e&&((n=t.createElement("div")).setAttribute("id","ngb-live"),n.setAttribute("aria-live","polite"),n.setAttribute("aria-atomic","true"),n.classList.add("sr-only"),t.body.appendChild(n)),n}var co=function(){function t(t,e){this._document=t,this._delay=e}return t.prototype.ngOnDestroy=function(){var t=lo(this._document);t&&t.parentElement.removeChild(t)},t.prototype.say=function(t){var e=lo(this._document,!0),n=this._delay;e.textContent="";var o=function(){return e.textContent=t};null===n?o():setTimeout(o,n)},t.decorators=[{type:e.Injectable,args:[{providedIn:"root"}]}],t.ctorParameters=function(){return[{type:void 0,decorators:[{type:e.Inject,args:[n.DOCUMENT]}]},{type:void 0,decorators:[{type:e.Inject,args:[so]}]}]},t.ngInjectableDef=e.ɵɵdefineInjectable({factory:function(){return new t(e.ɵɵinject(n.DOCUMENT),e.ɵɵinject(so))},token:t,providedIn:"root"}),t}(),uo=function(){function t(){this.editable=!0,this.focusFirst=!0,this.showHint=!1,this.placement=["bottom-left","bottom-right","top-left","top-right"]}return t.decorators=[{type:e.Injectable,args:[{providedIn:"root"}]}],t.ngInjectableDef=e.ɵɵdefineInjectable({factory:function(){return new t},token:t,providedIn:"root"}),t}(),ho={provide:o.NG_VALUE_ACCESSOR,useExisting:e.forwardRef(function(){return go}),multi:!0},fo=0,go=function(){function t(t,n,o,a,s,p,l,c,u,d,h,f){var g=this;this._elementRef=t,this._viewContainerRef=n,this._renderer=o,this._injector=a,this._live=c,this._document=u,this._ngZone=d,this._changeDetector=h,this._applicationRef=f,this._closed$=new i.Subject,this.autocomplete="off",this.placement="bottom-left",this.selectItem=new e.EventEmitter,this.popupId="ngb-typeahead-"+fo++,this._onTouched=function(){},this._onChange=function(t){},this.container=p.container,this.editable=p.editable,this.focusFirst=p.focusFirst,this.showHint=p.showHint,this.placement=p.placement,this._valueChanges=i.fromEvent(t.nativeElement,"input").pipe(r.map(function(t){return t.target.value})),this._resubscribeTypeahead=new i.BehaviorSubject(null),this._popupService=new qe(ao,a,n,o,s,f),this._zoneSubscription=l.onStable.subscribe(function(){g.isPopupOpen()&&At(g._elementRef.nativeElement,g._windowRef.location.nativeElement,g.placement,"body"===g.container)})}return t.prototype.ngOnInit=function(){var t=this,e=this._valueChanges.pipe(r.tap(function(e){t._inputValueBackup=t.showHint?e:null,t.editable&&t._onChange(e)})).pipe(this.ngbTypeahead).pipe(r.tap(function(){t.editable||t._onChange(void 0)})),n=this._resubscribeTypeahead.pipe(r.switchMap(function(){return e}));this._subscription=this._subscribeToUserInput(n)},t.prototype.ngOnDestroy=function(){this._closePopup(),this._unsubscribeFromUserInput(),this._zoneSubscription.unsubscribe()},t.prototype.registerOnChange=function(t){this._onChange=t},t.prototype.registerOnTouched=function(t){this._onTouched=t},t.prototype.writeValue=function(t){this._writeInputValue(this._formatItemForInput(t)),this.showHint&&(this._inputValueBackup=t)},t.prototype.setDisabledState=function(t){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",t)},t.prototype.dismissPopup=function(){this.isPopupOpen()&&(this._resubscribeTypeahead.next(null),this._closePopup(),this.showHint&&null!==this._inputValueBackup&&this._writeInputValue(this._inputValueBackup),this._changeDetector.markForCheck())},t.prototype.isPopupOpen=function(){return null!=this._windowRef},t.prototype.handleBlur=function(){this._resubscribeTypeahead.next(null),this._onTouched()},t.prototype.handleKeyDown=function(t){if(this.isPopupOpen())switch(t.which){case gt.ArrowDown:t.preventDefault(),this._windowRef.instance.next(),this._showHint();break;case gt.ArrowUp:t.preventDefault(),this._windowRef.instance.prev(),this._showHint();break;case gt.Enter:case gt.Tab:var e=this._windowRef.instance.getActive();v(e)&&(t.preventDefault(),t.stopPropagation(),this._selectResult(e)),this._closePopup()}},t.prototype._openPopup=function(){var t=this;this.isPopupOpen()||(this._inputValueBackup=this._elementRef.nativeElement.value,this._windowRef=this._popupService.open(),this._windowRef.instance.id=this.popupId,this._windowRef.instance.selectEvent.subscribe(function(e){return t._selectResultClosePopup(e)}),this._windowRef.instance.activeChangeEvent.subscribe(function(e){return t.activeDescendant=e}),"body"===this.container&&window.document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement),this._changeDetector.markForCheck(),St(this._ngZone,this._document,"outside",function(){return t.dismissPopup()},this._closed$,[this._elementRef.nativeElement,this._windowRef.location.nativeElement]))},t.prototype._closePopup=function(){this._closed$.next(),this._popupService.close(),this._windowRef=null,this.activeDescendant=void 0},t.prototype._selectResult=function(t){var e=!1;this.selectItem.emit({item:t,preventDefault:function(){e=!0}}),this._resubscribeTypeahead.next(null),e||(this.writeValue(t),this._onChange(t))},t.prototype._selectResultClosePopup=function(t){this._selectResult(t),this._closePopup()},t.prototype._showHint=function(){if(this.showHint&&this._windowRef.instance.hasActive()&&null!=this._inputValueBackup){var t=this._inputValueBackup.toLowerCase(),e=this._formatItemForInput(this._windowRef.instance.getActive());t===e.substr(0,this._inputValueBackup.length).toLowerCase()?(this._writeInputValue(this._inputValueBackup+e.substr(this._inputValueBackup.length)),this._elementRef.nativeElement.setSelectionRange.apply(this._elementRef.nativeElement,[this._inputValueBackup.length,e.length])):this._writeInputValue(e)}},t.prototype._formatItemForInput=function(t){return null!=t&&this.inputFormatter?this.inputFormatter(t):f(t)},t.prototype._writeInputValue=function(t){this._renderer.setProperty(this._elementRef.nativeElement,"value",f(t))},t.prototype._subscribeToUserInput=function(t){var e=this;return t.subscribe(function(t){t&&0!==t.length?(e._openPopup(),e._windowRef.instance.focusFirst=e.focusFirst,e._windowRef.instance.results=t,e._windowRef.instance.term=e._elementRef.nativeElement.value,e.resultFormatter&&(e._windowRef.instance.formatter=e.resultFormatter),e.resultTemplate&&(e._windowRef.instance.resultTemplate=e.resultTemplate),e._windowRef.instance.resetActive(),e._windowRef.changeDetectorRef.detectChanges(),e._showHint()):e._closePopup();var n=t?t.length:0;e._live.say(0===n?"No results available":n+" result"+(1===n?"":"s")+" available")})},t.prototype._unsubscribeFromUserInput=function(){this._subscription&&this._subscription.unsubscribe(),this._subscription=null},t.decorators=[{type:e.Directive,args:[{selector:"input[ngbTypeahead]",exportAs:"ngbTypeahead",host:{"(blur)":"handleBlur()","[class.open]":"isPopupOpen()","(keydown)":"handleKeyDown($event)","[autocomplete]":"autocomplete",autocapitalize:"off",autocorrect:"off",role:"combobox","aria-multiline":"false","[attr.aria-autocomplete]":'showHint ? "both" : "list"',"[attr.aria-activedescendant]":"activeDescendant","[attr.aria-owns]":"isPopupOpen() ? popupId : null","[attr.aria-expanded]":"isPopupOpen()"},providers:[ho]}]}],t.ctorParameters=function(){return[{type:e.ElementRef},{type:e.ViewContainerRef},{type:e.Renderer2},{type:e.Injector},{type:e.ComponentFactoryResolver},{type:uo},{type:e.NgZone},{type:co},{type:void 0,decorators:[{type:e.Inject,args:[n.DOCUMENT]}]},{type:e.NgZone},{type:e.ChangeDetectorRef},{type:e.ApplicationRef}]},t.propDecorators={autocomplete:[{type:e.Input}],container:[{type:e.Input}],editable:[{type:e.Input}],focusFirst:[{type:e.Input}],inputFormatter:[{type:e.Input}],ngbTypeahead:[{type:e.Input}],resultFormatter:[{type:e.Input}],resultTemplate:[{type:e.Input}],showHint:[{type:e.Input}],placement:[{type:e.Input}],selectItem:[{type:e.Output}]},t}(),mo=function(){function t(){}return t.decorators=[{type:e.NgModule,args:[{declarations:[go,ro,ao],exports:[go,ro],imports:[n.CommonModule],entryComponents:[ao]}]}],t}(),yo=[d,O,P,z,X,Q,je,Be,on,fn,In,xn,Tn,Vn,Zn,Qn,io,mo],bo=function(){function t(){}return t.decorators=[{type:e.NgModule,args:[{imports:yo,exports:yo}]}],t}();t.ModalDismissReasons=Qe,t.NgbAccordion=E,t.NgbAccordionConfig=D,t.NgbAccordionModule=O,t.NgbActiveModal=Xe,t.NgbAlert=M,t.NgbAlertConfig=N,t.NgbAlertModule=P,t.NgbButtonLabel=j,t.NgbButtonsModule=z,t.NgbCalendar=it,t.NgbCalendarGregorian=rt,t.NgbCalendarHebrew=Ee,t.NgbCalendarIslamicCivil=Gt,t.NgbCalendarIslamicUmalqura=Qt,t.NgbCalendarPersian=le,t.NgbCarousel=q,t.NgbCarouselConfig=B,t.NgbCarouselModule=X,t.NgbCheckBox=F,t.NgbCollapse=J,t.NgbCollapseModule=Q,t.NgbDate=tt,t.NgbDateAdapter=_t,t.NgbDateNativeAdapter=Me,t.NgbDateNativeUTCAdapter=Pe,t.NgbDateParserFormatter=Vt,t.NgbDatepicker=It,t.NgbDatepickerConfig=bt,t.NgbDatepickerI18n=dt,t.NgbDatepickerI18nHebrew=Ne,t.NgbDatepickerModule=je,t.NgbDropdown=$e,t.NgbDropdownAnchor=Le,t.NgbDropdownConfig=Ae,t.NgbDropdownItem=Ve,t.NgbDropdownMenu=He,t.NgbDropdownModule=Be,t.NgbDropdownToggle=We,t.NgbHighlight=ro,t.NgbInputDatepicker=$t,t.NgbModal=nn,t.NgbModalConfig=Ue,t.NgbModalModule=on,t.NgbModalRef=Je,t.NgbModule=bo,t.NgbPagination=dn,t.NgbPaginationConfig=rn,t.NgbPaginationEllipsis=an,t.NgbPaginationFirst=sn,t.NgbPaginationLast=pn,t.NgbPaginationModule=fn,t.NgbPaginationNext=ln,t.NgbPaginationNumber=cn,t.NgbPaginationPrevious=un,t.NgbPanel=R,t.NgbPanelContent=x,t.NgbPanelHeader=C,t.NgbPanelTitle=k,t.NgbPanelToggle=S,t.NgbPopover=Dn,t.NgbPopoverConfig=vn,t.NgbPopoverModule=In,t.NgbProgressbar=kn,t.NgbProgressbarConfig=Cn,t.NgbProgressbarModule=xn,t.NgbRadio=W,t.NgbRadioGroup=L,t.NgbRating=Sn,t.NgbRatingConfig=Rn,t.NgbRatingModule=Tn,t.NgbSlide=K,t.NgbSlideEventDirection=G,t.NgbSlideEventSource=Z,t.NgbTab=jn,t.NgbTabContent=Pn,t.NgbTabTitle=Mn,t.NgbTabset=An,t.NgbTabsetConfig=On,t.NgbTabsetModule=Vn,t.NgbTimeAdapter=$n,t.NgbTimepicker=Gn,t.NgbTimepickerConfig=Ln,t.NgbTimepickerI18n=Un,t.NgbTimepickerModule=Zn,t.NgbToast=Jn,t.NgbToastConfig=Yn,t.NgbToastHeader=Xn,t.NgbToastModule=Qn,t.NgbTooltip=oo,t.NgbTooltipConfig=to,t.NgbTooltipModule=io,t.NgbTypeahead=go,t.NgbTypeaheadConfig=uo,t.NgbTypeaheadModule=mo,t.SbCard=u,t.SbCardConfig=c,t.SbCardModule=d,t.ɵa=Y,t.ɵb=ot,t.ɵba=so,t.ɵbb=po,t.ɵbc=co,t.ɵbd=Ut,t.ɵbe=Ke,t.ɵc=Ct,t.ɵd=zt,t.ɵe=kt,t.ɵf=Bt,t.ɵg=ut,t.ɵh=ht,t.ɵi=vt,t.ɵj=wt,t.ɵk=Ft,t.ɵl=Ht,t.ɵm=Fe,t.ɵn=wn,t.ɵo=Wn,t.ɵp=zn,t.ɵq=Bn,t.ɵr=Kn,t.ɵs=no,t.ɵt=ao,t.ɵu=ft,t.ɵv=mt,t.ɵw=Ye,t.ɵx=tn,t.ɵy=en,t.ɵz=Ze,Object.defineProperty(t,"__esModule",{value:!0})}); +//# sourceMappingURL=sunbird-ui-components.umd.min.js.map \ No newline at end of file diff --git a/dist/sunbird-ui-components/bundles/sunbird-ui-components.umd.min.js.map b/dist/sunbird-ui-components/bundles/sunbird-ui-components.umd.min.js.map new file mode 100644 index 0000000..ea60be2 --- /dev/null +++ b/dist/sunbird-ui-components/bundles/sunbird-ui-components.umd.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../../node_modules/tslib/tslib.es6.js","ng://@sunbird-ed/sunbird-ui-components/card/card-config.ts","ng://@sunbird-ed/sunbird-ui-components/card/card.ts","ng://@sunbird-ed/sunbird-ui-components/card/card.module.ts","ng://@sunbird-ed/sunbird-ui-components/util/util.ts","ng://@sunbird-ed/sunbird-ui-components/accordion/accordion-config.ts","ng://@sunbird-ed/sunbird-ui-components/accordion/accordion.ts","ng://@sunbird-ed/sunbird-ui-components/accordion/accordion.module.ts","ng://@sunbird-ed/sunbird-ui-components/alert/alert-config.ts","ng://@sunbird-ed/sunbird-ui-components/alert/alert.ts","ng://@sunbird-ed/sunbird-ui-components/alert/alert.module.ts","ng://@sunbird-ed/sunbird-ui-components/buttons/label.ts","ng://@sunbird-ed/sunbird-ui-components/buttons/checkbox.ts","ng://@sunbird-ed/sunbird-ui-components/buttons/radio.ts","ng://@sunbird-ed/sunbird-ui-components/buttons/buttons.module.ts","ng://@sunbird-ed/sunbird-ui-components/carousel/carousel-config.ts","ng://@sunbird-ed/sunbird-ui-components/carousel/carousel.ts","ng://@sunbird-ed/sunbird-ui-components/carousel/carousel.module.ts","ng://@sunbird-ed/sunbird-ui-components/collapse/collapse.ts","ng://@sunbird-ed/sunbird-ui-components/collapse/collapse.module.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/ngb-date.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/ngb-calendar.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker-tools.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker-i18n.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker-service.ts","ng://@sunbird-ed/sunbird-ui-components/util/key.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker-keymap-service.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker-view-model.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker-config.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/adapters/ngb-date-adapter.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker-month-view.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker-navigation.ts","ng://@sunbird-ed/sunbird-ui-components/util/autoclose.ts","ng://@sunbird-ed/sunbird-ui-components/util/focus-trap.ts","ng://@sunbird-ed/sunbird-ui-components/util/positioning.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/ngb-date-parser-formatter.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker-input.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker-day-view.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker-navigation-select.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/hijri/ngb-calendar-hijri.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/hijri/ngb-calendar-islamic-civil.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/hijri/ngb-calendar-islamic-umalqura.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/jalali/jalali.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/jalali/ngb-calendar-persian.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/hebrew/hebrew.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/hebrew/ngb-calendar-hebrew.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/hebrew/datepicker-i18n-hebrew.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/adapters/ngb-date-native-adapter.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/adapters/ngb-date-native-utc-adapter.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker.module.ts","ng://@sunbird-ed/sunbird-ui-components/dropdown/dropdown-config.ts","ng://@sunbird-ed/sunbird-ui-components/dropdown/dropdown.ts","ng://@sunbird-ed/sunbird-ui-components/dropdown/dropdown.module.ts","ng://@sunbird-ed/sunbird-ui-components/modal/modal-config.ts","ng://@sunbird-ed/sunbird-ui-components/util/popup.ts","ng://@sunbird-ed/sunbird-ui-components/util/scrollbar.ts","ng://@sunbird-ed/sunbird-ui-components/modal/modal-backdrop.ts","ng://@sunbird-ed/sunbird-ui-components/modal/modal-ref.ts","ng://@sunbird-ed/sunbird-ui-components/modal/modal-dismiss-reasons.ts","ng://@sunbird-ed/sunbird-ui-components/modal/modal-window.ts","ng://@sunbird-ed/sunbird-ui-components/modal/modal-stack.ts","ng://@sunbird-ed/sunbird-ui-components/modal/modal.ts","ng://@sunbird-ed/sunbird-ui-components/modal/modal.module.ts","ng://@sunbird-ed/sunbird-ui-components/pagination/pagination-config.ts","ng://@sunbird-ed/sunbird-ui-components/pagination/pagination.ts","ng://@sunbird-ed/sunbird-ui-components/pagination/pagination.module.ts","ng://@sunbird-ed/sunbird-ui-components/util/triggers.ts","ng://@sunbird-ed/sunbird-ui-components/popover/popover-config.ts","ng://@sunbird-ed/sunbird-ui-components/popover/popover.ts","ng://@sunbird-ed/sunbird-ui-components/popover/popover.module.ts","ng://@sunbird-ed/sunbird-ui-components/progressbar/progressbar-config.ts","ng://@sunbird-ed/sunbird-ui-components/progressbar/progressbar.ts","ng://@sunbird-ed/sunbird-ui-components/progressbar/progressbar.module.ts","ng://@sunbird-ed/sunbird-ui-components/rating/rating-config.ts","ng://@sunbird-ed/sunbird-ui-components/rating/rating.ts","ng://@sunbird-ed/sunbird-ui-components/rating/rating.module.ts","ng://@sunbird-ed/sunbird-ui-components/tabset/tabset-config.ts","ng://@sunbird-ed/sunbird-ui-components/tabset/tabset.ts","ng://@sunbird-ed/sunbird-ui-components/tabset/tabset.module.ts","ng://@sunbird-ed/sunbird-ui-components/timepicker/ngb-time.ts","ng://@sunbird-ed/sunbird-ui-components/timepicker/timepicker-config.ts","ng://@sunbird-ed/sunbird-ui-components/timepicker/ngb-time-adapter.ts","ng://@sunbird-ed/sunbird-ui-components/timepicker/timepicker-i18n.ts","ng://@sunbird-ed/sunbird-ui-components/timepicker/timepicker.ts","ng://@sunbird-ed/sunbird-ui-components/timepicker/timepicker.module.ts","ng://@sunbird-ed/sunbird-ui-components/toast/toast-config.ts","ng://@sunbird-ed/sunbird-ui-components/toast/toast.ts","ng://@sunbird-ed/sunbird-ui-components/toast/toast.module.ts","ng://@sunbird-ed/sunbird-ui-components/tooltip/tooltip-config.ts","ng://@sunbird-ed/sunbird-ui-components/tooltip/tooltip.ts","ng://@sunbird-ed/sunbird-ui-components/tooltip/tooltip.module.ts","ng://@sunbird-ed/sunbird-ui-components/typeahead/highlight.ts","ng://@sunbird-ed/sunbird-ui-components/typeahead/typeahead-window.ts","ng://@sunbird-ed/sunbird-ui-components/util/accessibility/live.ts","ng://@sunbird-ed/sunbird-ui-components/typeahead/typeahead-config.ts","ng://@sunbird-ed/sunbird-ui-components/typeahead/typeahead.ts","ng://@sunbird-ed/sunbird-ui-components/typeahead/typeahead.module.ts","ng://@sunbird-ed/sunbird-ui-components/index.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","this","constructor","prototype","create","__assign","assign","t","s","i","n","arguments","length","call","apply","__read","o","m","Symbol","iterator","r","e","ar","next","done","push","value","error","SbCardConfig","dismissible","type","Injectable","args","providedIn","SbCard","config","_renderer","_element","close","EventEmitter","closeHandler","emit","ngOnChanges","changes","typeChange","firstChange","removeClass","nativeElement","previousValue","addClass","currentValue","ngOnInit","Component","selector","changeDetection","ChangeDetectionStrategy","OnPush","encapsulation","ViewEncapsulation","None","host","role","class","[class.alert-dismissible]","template","Renderer2","ElementRef","Input","Output","SbCardModule","NgModule","declarations","exports","imports","CommonModule","entryComponents","toInteger","parseInt","toString","getValueInRange","max","min","Math","isString","isNumber","isNaN","isInteger","isFinite","floor","isDefined","padNumber","slice","hasClassName","element","className","split","indexOf","Element","closest","matches","msMatchesSelector","webkitMatchesSelector","el","document","documentElement","contains","parentElement","parentNode","nodeType","NgbAccordionConfig","closeOthers","nextId","NgbPanelHeader","templateRef","Directive","TemplateRef","NgbPanelTitle","NgbPanelContent","NgbPanel","disabled","id","isOpen","ngAfterContentChecked","titleTpl","titleTpls","first","headerTpl","headerTpls","contentTpl","contentTpls","ContentChildren","descendants","NgbAccordion","activeIds","destroyOnHide","panelChange","closeOtherPanels","isExpanded","panelId","expand","_changeOpenState","_findPanelById","expandAll","_this","panels","forEach","panel","collapse","collapseAll","toggle","_closeOthers","_updateActiveIds","nextState","defaultPrevented_1","preventDefault","find","filter","map","exportAs","[attr.aria-multiselectable]","NgbPanelToggle","accordion","defineProperty","[disabled]","[class.collapsed]","[attr.aria-expanded]","[attr.aria-controls]","(click)","decorators","Optional","Host","NGB_ACCORDION_DIRECTIVES","NgbAccordionModule","NgbAlertConfig","NgbAlert","NgbAlertModule","NgbButtonLabel","[class.btn]","[class.active]","[class.disabled]","[class.focus]","NGB_CHECKBOX_VALUE_ACCESSOR","provide","NG_VALUE_ACCESSOR","useExisting","forwardRef","NgbCheckBox","multi","_label","_cd","valueChecked","valueUnChecked","onChange","_","onTouched","isFocused","focused","onInputChange","$event","modelToPropagate","target","checked","writeValue","registerOnChange","fn","registerOnTouched","setDisabledState","isDisabled","active","markForCheck","autocomplete","[checked]","(change)","(focus)","(blur)","providers","ChangeDetectorRef","NGB_RADIO_VALUE_ACCESSOR","NgbRadioGroup","_radios","Set","_value","name","_disabled","onRadioChange","radio","onRadioValueUpdate","_updateRadiosValue","register","add","_updateRadiosDisabled","unregister","delete","updateValue","updateDisabled","NgbRadio","_group","stringValue","setProperty","_checked","ngOnDestroy","[name]","NGB_BUTTON_DIRECTIVES","NgbButtonsModule","NgbCarouselConfig","interval","wrap","keyboard","pauseOnHover","showNavigationArrows","showNavigationIndicators","NgbSlide","tplRef","NgbCarousel","_platformId","_ngZone","NgbSlideEventSource","_destroy$","Subject","_interval$","BehaviorSubject","_mouseHover$","_pauseOnHover$","_pause$","_wrap$","slide","mouseEnter","mouseLeave","ngAfterContentInit","isPlatformBrowser","runOutsideAngular","hasNextSlide$","combineLatest","pipe","slideEvent","current","startWith","activeId","slides","_a","_b","currentSlideId","slideArr","toArray","currentSlideIdx","_getSlideIdxById","distinctUntilChanged","pause","mouseHover","hasNextSlide","switchMap","timer","NEVER","takeUntil","subscribe","run","TIMER","activeSlide","_getSlideById","select","slideId","source","_cycleToSelected","_getSlideEventDirection","prev","_getPrevSlide","NgbSlideEventDirection","RIGHT","_getNextSlide","LEFT","cycle","slideIdx","direction","selectedSlide","paused","currentActiveSlideId","nextActiveSlideId","[style.display]","tabIndex","(keydown.arrowLeft)","(keydown.arrowRight)","Inject","PLATFORM_ID","NgZone","HostListener","ARROW_LEFT","ARROW_RIGHT","INDICATOR","NGB_CAROUSEL_DIRECTIVES","NgbCarouselModule","NgbCollapse","collapsed","[class.collapse]","[class.show]","NgbCollapseModule","NgbDate","year","month","day","from","date","equals","other","before","after","fromJSDate","jsDate","getFullYear","getMonth","getDate","toJSDate","Date","getTime","setFullYear","NGB_DATEPICKER_CALENDAR_FACTORY","NgbCalendarGregorian","NgbCalendar","useFactory","tslib_1.__extends","getDaysPerWeek","getMonths","getWeeksPerMonth","getNext","period","number","setDate","getPrev","getWeekday","getDay","getWeekNumber","week","firstDayOfWeek","time","setMonth","round","getToday","isValid","isChangedDate","dateComparator","isChangedMonth","checkDateInRange","minDate","maxDate","isDateSelectable","state","markDisabled","buildMonths","calendar","i18n","force","displayMonths","months","monthsToReuse","splice","firstDate","reusedIndex","findIndex","dayTemplateData","outsideDays","calendarToday","lastDate","weeks","weekdays","daysPerWeek","firstMonthDate","dayOfWeek","getFirstViewDate","weekObject","days","newDate","nextDate","ariaLabel","getDayAriaLabel","today","contextUserData","undefined","dayObject","context","$implicit","data","currentMonth","selected","tabindex","hidden","buildMonth","shift","NGB_DATEPICKER_18N_FACTORY","locale","NgbDatepickerI18nDefault","NgbDatepickerI18n","getDayNumerals","getWeekNumerals","weekNumber","getYearNumerals","deps","LOCALE_ID","_locale","_super","weekdaysStartingOnSunday","getLocaleDayNames","FormStyle","Standalone","TranslationWidth","Short","_weekdaysShort","index","_monthsShort","getLocaleMonthNames","Abbreviated","_monthsFull","Wide","getWeekdayShortName","weekday","getMonthShortName","getMonthFullName","formatDate","NgbDatepickerService","_calendar","_i18n","_model$","_select$","_state","focusVisible","navigation","prevDisabled","nextDisabled","selectBoxes","years","selectedDate","model","_nextState","toValidDate","focus","focusDate","focusMove","focusSelect","emitEvent","open","options","defaultValue","ngbDate","patch","newState","_updateState","_patchContexts","prevDate","startDate","Error","checkMinBeforeMax","forceRebuild","yearChanged","monthChanged","start","end","generateSelectBoxYears","generateSelectBoxMonths","nextMonthDisabled","Tab","Enter","Escape","Space","PageUp","PageDown","End","Home","ArrowLeft","ArrowUp","ArrowRight","ArrowDown","NgbDatepickerKeyMapService","_service","model$","_minDate","_maxDate","_firstViewDate","_lastViewDate","processKey","event","which","Key","shiftKey","stopPropagation","PREV","NEXT","NgbDatepickerConfig","showWeekdays","showWeekNumbers","NGB_DATEPICKER_DATE_ADAPTER_FACTORY","NgbDateStructAdapter","NgbDateAdapter","fromModel","toModel","NGB_DATEPICKER_VALUE_ACCESSOR","NgbDatepicker","_keyMapService","_elementRef","_ngbDateAdapter","_destroyed$","navigate","input","select$","oldDate","navigationPrevented","newSelectedDate","newFocusedDate","oldFocusedDate","_controlValue","onStable","asObservable","take","elementToFocus","querySelector","navigateTo","ngAfterViewInit","focusIns$","fromEvent","_monthsEl","focusOuts$","merge","relatedTarget","onDateSelect","onKeyDown","onNavigateDateSelect","onNavigateEvent","NavigationEvent","ViewChild","static","NgbDatepickerMonthView","doSelect","NgbDatepickerNavigation","isContainedIn","array","some","item","matchesSelectorIfAny","iOS","ngbAutoClose","zone","closed$","insideElements","ignoreElements","insideSelector","escapes$","mouseDowns$","MouseEvent","button","closeableClicks$","withLatestFrom","delay","race","navigator","userAgent","test","FOCUSABLE_ELEMENTS_SELECTOR","join","getFocusableBoundaryElements","list","querySelectorAll","ngbFocusTrap","stopFocusTrap$","refocusOnClick","lastFocusedElement$","tabEvent","focusedElement","_c","last","arr","lastFocusedElement","Positioning","getAllStyles","window","getComputedStyle","getStyle","prop","isStaticPositioned","offsetParent","offsetParentEl","position","elPosition","parentOffset","width","height","top","bottom","left","right","getBoundingClientRect","offset","clientTop","clientLeft","elBcr","viewportOffset","pageYOffset","pageXOffset","elOffset","offsetHeight","offsetWidth","positionElements","hostElement","targetElement","placement","appendToBody","placementPrimary","placementSecondary","hostElPosition","targetElStyles","marginTop","parseFloat","marginBottom","marginLeft","marginRight","topPosition","leftPosition","style","transform","targetElBCR","html","windowHeight","innerHeight","clientHeight","windowWidth","innerWidth","clientWidth","placementSeparator","positionService","baseClass","placementVals","isArray","allowedPlacements","classList","addClassesToTarget","targetPlacement","primary","secondary","classes","classname","placementToRemove","remove","hasAuto","val","obj","search","testPlacement","isInViewport","placementVals_1","tslib_1.__values","placementVals_1_1","addedClasses","NGB_DATEPICKER_PARSER_FORMATTER_FACTORY","NgbDateISOParserFormatter","NgbDateParserFormatter","parse","dateParts","trim","format","NgbInputDatepicker","NGB_DATEPICKER_VALIDATOR","NG_VALIDATORS","_parserFormatter","_elRef","_vcRef","_cfr","_dateAdapter","_document","_changeDetector","_cRef","autoClose","dateSelect","closed","_onChange","_onTouched","_validatorChange","_zoneSubscription","_updatePopupPosition","instance","registerOnValidatorChange","validate","c","_fromDateStruct","requiredBefore","requiredAfter","invalid","_model","_writeModelValue","manualDateChange","updateView","inputValueChanged","_inputValue","cf","resolveComponentFactory","createComponent","_applyPopupStyling","location","_applyDatepickerInputs","_subscribeForDatepickerOutputs","changeDetectorRef","detectChanges","container","appendChild","hostView","onBlur","unsubscribe","datepickerInstance","optionName","navigateEvent","positionTarget","HTMLElement","(input)","ViewContainerRef","ComponentFactoryResolver","DOCUMENT","NgbDatepickerDayView","isMuted","[class.bg-primary]","[class.text-white]","[class.text-muted]","[class.outside]","NgbDatepickerNavigationSelect","changeMonth","changeYear","NgbCalendarHijri","_setYear","_setMonth","_setDay","toGregorian","MuhDate","fromGregorian","mDays","getDaysPerMonth","isGregorianLeapYear","gDate","mod","a","NgbCalendarIslamicCivil","gYear","gMonth","gDay","julianDay","GREGORIAN_EPOCH","hYear","hMonth","ceil","hDay","getIslamicMonthStart","hDate","wjd","depoch","quadricent","dqc","cent","dcent","quad","dquad","yindex","yearday","leapadj","tjd2","GREGORIAN_FIRST_DATE","GREGORIAN_LAST_DATE","ONE_DAY","MONTH_LENGTH","NgbCalendarIslamicUmalqura","date1","date2","time1","time2","diff","daysDiff","UTC","abs","j","numOfDays","dayDiff","y","jalaliDate","jYear","jMonth","jDay","julianToGregorian","gregorianToJulian","jalCal","gy","march","div","setHours","gdate","julianDayNumber","jalaliDay","jalaliMonth","numberOfDays","jalaliYear","gregorianDay","leap","julianToJalali","setJalaliMonth","trunc","jump","breaks","breaksLength","leapJ","jp","jm","gm","gd","NgbCalendarPersian","yearValue","setJalaliYear","setJalaliDay","PARTS_PER_HOUR","PARTS_PER_DAY","PARTS_FRACTIONAL_MONTH","PARTS_PER_MONTH","BAHARAD","HEBREW_DAY_ON_JAN_1_1970","numberOfFirstDayInYear","monthsBeforeYear","fractionalMonthsBeforeYear","dayNumber","timeOfDay","isHebrewLeapYear","getDaysInGregorianMonth","getHebrewMonths","getDaysInHebrewYear","getDaysInHebrewMonth","yearLength","yearType","daysInMonth","getDayNumberInHebrewYear","numberOfDay","daysSinceHebEpoch","monthsSinceHebEpoch","firstDayOfThisYear","dayOfYear","hebrewDate","diffDays","hebrewNumerals","numerals","hArray0_9","hArray10_19","hArray20_90","hArray100_900","hArray1000_9000","mem","result","step","unshift","NgbCalendarHebrew","setHebrewMonth","setHebrewDay","WEEKDAYS","MONTHS","MONTHS_LEAP","NgbDatepickerI18nHebrew","NgbDateNativeAdapter","_fromNativeDate","_toNativeDate","NgbDateNativeUTCAdapter","getUTCFullYear","getUTCMonth","getUTCDate","setUTCFullYear","NgbDatepickerModule","FormsModule","NgbDropdownConfig","NgbNavbar","NgbDropdownItem","elementRef","NgbDropdownMenu","dropdown","[class.dropdown-menu]","[attr.x-placement]","(keydown.ArrowUp)","(keydown.ArrowDown)","(keydown.Home)","(keydown.End)","(keydown.Enter)","(keydown.Space)","NgbDropdown","NgbDropdownAnchor","anchorEl","getNativeElement","aria-haspopup","NgbDropdownToggle","ngbNavbar","_closed$","_open","openChange","display","_positionMenu","_applyPlacementClasses","_setCloseHandlers","_applyContainer","isFirstChange","anchor","_anchor","_menu","_menuElement","_resetContainer","key","itemElements","_getMenuElements","isEventFromItems","isEventFromToggle","_isEventFromToggle","itemElement","activeElement","_isDropup","menu","menuItems","_bodyContainer","_getFirstPlacement","renderer","menuElement","dropdownElement","dropdownMenuElement","removeStyle","removeChild","body","bodyContainer","createElement","setStyle","dropdownClass","ContentChild","read","NGB_DROPDOWN_DIRECTIVES","NgbDropdownModule","NgbModalConfig","backdrop","ContentRef","nodes","viewRef","componentRef","PopupService","_type","_injector","_viewContainerRef","_componentFactoryResolver","_applicationRef","content","_windowRef","_contentRef","_getContentRef","detachView","destroy","createEmbeddedView","attachView","rootNodes","createText","noop","ScrollBar","compensate","_isPresent","_adjustBody","_getWidth","userSetPadding","paddingRight","paddingAmount","rect","measurer","NgbModalBackdrop","[class]","NgbActiveModal","dismiss","reason","NgbModalRef","_windowCmptRef","_backdropCmptRef","_beforeDismiss","dismissEvent","Promise","resolve","reject","_resolve","_reject","then","_removeModalElements","_dismiss","windowNativeEl","backdropNativeEl","BACKDROP_CLICK","ESC","NgbModalWindow","backdropClick","ModalDismissReasons","escKey","defaultPrevented","_elWithFocus","autoFocusable","firstFocusable","elWithFocus","(keyup.esc)","[attr.aria-modal]","[attr.aria-labelledby]","NgbModalStack","_scrollBar","_rendererFactory","_activeWindowCmptHasChanged","_ariaHiddenValues","Map","_backdropAttributes","_modalRefs","_windowAttributes","_windowCmpts","activeWindowCmpt","_revertAriaHidden","_setAriaHidden","moduleCFR","contentInjector","containerEl","createRenderer","revertPaddingForScrollBar","removeBodyClass","activeModal","contentRef","injector","backdropCmptRef","_attachBackdrop","windowCmptRef","_attachWindowComponent","ngbModalRef","beforeDismiss","_registerModalRef","_registerWindowCmpt","_applyWindowOptions","_applyBackdropOptions","dismissAll","hasOpenModals","windowInstance","backdropInstance","_createFromTemplateRef","_createFromString","_createFromComponent","component","createTextNode","contentCmptFactory","modalContentInjector","Injector","useValue","parent","componentNativeEl","scrollable","children","sibling","nodeName","set","getAttribute","setAttribute","removeAttribute","clear","unregisterModalRef","ngbWindowCmpt","onDestroy","ApplicationRef","RendererFactory2","NgbModal","_moduleCFR","_modalStack","_config","combinedOptions","NgbModalModule","NgbPaginationConfig","boundaryLinks","directionLinks","ellipses","maxSize","pageSize","rotate","NgbPaginationEllipsis","NgbPaginationFirst","NgbPaginationLast","NgbPaginationNext","NgbPaginationNumber","NgbPaginationPrevious","NgbPagination","pageCount","pages","page","pageChange","size","hasPrevious","hasNext","previousDisabled","selectPage","pageNumber","_updatePages","isEllipsis","_applyEllipses","_applyRotation","leftOffset","rightOffset","_applyPagination","_setPageInRange","newPageNo","prevPageNo","collectionSize","newPage","DIRECTIVES","NgbPaginationModule","Trigger","isManual","DEFAULT_ALIASES","hover","delayOrNoop","listenToTriggers","triggers","isOpenedFn","openFn","closeFn","openDelay","closeDelay","parsedTriggers","aliases","trimmedTriggers","trigger","triggerPair","alias","manualTriggers","parseTriggers","subscription","Observable","subscriber","listeners","toggleFn","listen","unsubscribeFn","observeTriggers","input$","pending","filteredInput$","currentlyOpen","share","delayedOpen$","delayedClose$","triggerDelay","NgbPopoverConfig","disablePopover","NgbPopoverWindow","isTitleTemplate","title","[id]","NgbPopover","componentFactoryResolver","viewContainerRef","shown","_ngbPopoverWindowId","popoverClass","_popupService","_isDisabled","ngbPopover","popoverTitle","_unregisterListenersFn","bind","NgbPopoverModule","NgbProgressbarConfig","animated","striped","showValue","NgbProgressbar","getValue","getPercentValue","NgbProgressbarModule","NgbRatingConfig","readonly","resettable","NGB_RATING_VALUE_ACCESSOR","NgbRating","_changeDetectorRef","contexts","leave","rateChange","ariaValueText","nextRate","enter","handleBlur","handleClick","update","rate","handleKeyDown","v","k","fill","reset","internalChange","newRate","_getFillValue","toFixed","nextValue","aria-valuemin","[attr.aria-valuemax]","[attr.aria-valuenow]","[attr.aria-valuetext]","[attr.aria-disabled]","(keydown)","(mouseleave)","NgbRatingModule","NgbTabsetConfig","justify","orientation","NgbTabTitle","NgbTabContent","NgbTab","NgbTabset","tabChange","justifyClass","tabId","selectedTab","_getTabById","activeTab","tabs","tabsWithId","tab","NGB_TABSET_DIRECTIVES","NgbTabsetModule","NgbTime","hour","minute","second","changeHour","updateHour","NaN","changeMinute","updateMinute","changeSecond","updateSecond","checkSecs","NgbTimepickerConfig","meridian","spinners","seconds","hourStep","minuteStep","secondStep","readonlyInputs","NGB_DATEPICKER_TIME_ADAPTER_FACTORY","NgbTimeStructAdapter","NgbTimeAdapter","NGB_TIMEPICKER_I18N_FACTORY","NgbTimepickerI18nDefault","NgbTimepickerI18n","_periods","getLocaleDayPeriods","Narrow","getMorningPeriod","getAfternoonPeriod","NGB_TIMEPICKER_VALUE_ACCESSOR","NgbTimepicker","_ngbTimeAdapter","_hourStep","_minuteStep","_secondStep","structValue","propagateModelChange","newVal","isPM","enteredHour","toggleMeridian","formatHour","formatMinSec","touched","NgbTimepickerModule","NgbToastConfig","autohide","ariaLive","NgbToastHeader","NgbToast","contentHeaderTpl","hideOutput","_init","_clearTimeout","hide","_timeoutID","setTimeout","clearTimeout","[attr.aria-live]","aria-atomic","[class.toast]","[class.autohide]","Attribute","NgbToastModule","NgbTooltipConfig","disableTooltip","NgbTooltipWindow","NgbTooltip","_ngbTooltipWindowId","tooltipClass","_ngbTooltip","NgbTooltipModule","NgbHighlight","highlightClass","escapedTerms","term","replace","parts","RegExp","NgbTypeaheadWindow","activeIdx","focusFirst","formatter","selectEvent","activeChangeEvent","hasActive","results","getActive","markActive","_activeChanged","resetActive","(mousedown)","ARIA_LIVE_DELAY","InjectionToken","factory","ARIA_LIVE_DELAY_FACTORY","getLiveElement","lazyCreate","Live","_delay","say","message","textContent","setText","NgbTypeaheadConfig","editable","showHint","NGB_TYPEAHEAD_VALUE_ACCESSOR","NgbTypeahead","nextWindowId","ngZone","_live","selectItem","popupId","_valueChanges","_resubscribeTypeahead","isPopupOpen","processedResults$","tap","_inputValueBackup","ngbTypeahead","userInput$","_subscription","_subscribeToUserInput","_closePopup","_unsubscribeFromUserInput","_writeInputValue","_formatItemForInput","dismissPopup","_showHint","_selectResult","_openPopup","_selectResultClosePopup","activeDescendant","userInputLowerCase","toLowerCase","formattedVal","substr","inputFormatter","resultFormatter","resultTemplate","count","[class.open]","[autocomplete]","autocapitalize","autocorrect","aria-multiline","[attr.aria-autocomplete]","[attr.aria-activedescendant]","[attr.aria-owns]","NgbTypeaheadModule","NGB_MODULES","NgbModule"],"mappings":"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eAEhE,eAAgB,eAAgB,eAAgB,eAAgB,eAEhE,eAAgB,eAAgB,eAAgB,eAAgB,eAEhE,eAAgB,eAAgB,eAAgB,eAAgB,eAEhE,eAAgB,eAAgB,eAAgB,eAAgB,eAEhE,eAAgB,eAAgB,eAAgB,eAAgB,eAEhE,eAAgB,eAAgB,eAAgB,eAAgB,eAEhE,eAAgB,eAAgB,eAAgB,eAAgB,eAEhE,eAAgB,eAAgB,eAAgB,eAAgB,eAEhE,eAAgB,eAAgB,eAAgB,eAAgB,eAEhE,eAAgB,eAAgB,eAAgB,eAAgB,eAEhE,eAAgB,eAAgB,eAAgB,eAAgB,eAEhE,eAAgB,eAAgB,eAAgB,eAAgB,eAEhE,eAAgB,eAAgB,eAAgB,eAAgB,eAEhE,eAAgB,eAAgB,eAAgB,eAAgB,eAEhE,eAAgB,eAAgB,eAAgB,eAAgB,eAEhE,eAAgB,eAAgB,eAAgB,eAAgB,eAEhE,eAAgB,eAAgB,eAAgB,eAAgB,eAEhE,eAAgB,eAAgB,eAAgB,eAAgB,eAEhE,eAAgB,eAAgB,eAAgB,eAAgB,eAEhE,eAAgB,eAAgB,eAAgB,eAAgB,eAEhE,eAAgB,eAAgB,eAAgB,eAAgB,eAEhE,eAAgB,eAAgB,eAAgB,eAAgB,eAEhE,eAAgB,eAAgB,eAAgB,eAAgB,eAEhE,eAAgB,eAAgB,eAAgB,eAAgB,eAEhE,eAAgB,eAAgB,eAAgB,eAAgB,eAEhE,eAAgB,eAAgB,eAAgB,eAAgB,eAEhE,eAAgB,eAAgB,eAAgB,eAAgB,eAEhE,eAAgB,eAAgB,eAAgB,eAAgB,eAEhE,eAAgB,eAAgB,eAAgB,eAAgB,eAEhE,eAAgB,eAAgB,eAAgB,eAAgB,eAEhE,eAAgB,eAAgB,eAAgB,eAAgB,eAEhE,eAAgB,eAAgB,eAAgB,eAAgB,eAEhE,eAAgB,eAAgB,eAAgB,eAAgB,eAEhE,eAAgB,eAAgB,eAAgB,eAAgB,eAEhE,eAAgB,eAAgB,eAAgB,eAAgB,eAEhE,eAAgB,eAAgB,eAAgB,eAAgB,eAEhE,eAAgB,eAAgB,eAAgB,eAAgB,eAEhE,eAAgB,eAAgB,eAAgB,eAAgB,eAEhE,eAAgB,eAAgB,eAAgB,eAAgB,eAEhE,gBAWF,IAAAC,GAAA,SAAA5W,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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","import {Injectable} from '@angular/core';\n\n/**\n * A configuration service for the [SbCard](#/components/alert/api#SbCard) component.\n *\n * You can inject this service, typically in your root component, and customize its properties\n * to provide default values for all alerts used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class SbCardConfig {\n dismissible = true;\n type = 'warning';\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n ChangeDetectionStrategy,\n Renderer2,\n ElementRef,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewEncapsulation\n} from '@angular/core';\n\nimport {SbCardConfig} from './card-config';\n\n/**\n * Alert is a component to provide contextual feedback messages for user.\n *\n * It supports several alert types and can be dismissed.\n */\n@Component({\n selector: 'sb-card',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {'role': 'alert', 'class': 'alert', '[class.alert-dismissible]': 'dismissible'},\n template: `\n \n \n `,\n styleUrls: ['./card.scss']\n})\nexport class SbCard implements OnInit,\n OnChanges {\n /**\n * If `true`, alert can be dismissed by the user.\n *\n * The close button (×) will be displayed and you can be notified\n * of the event with the `(close)` output.\n */\n @Input() dismissible: boolean;\n /**\n * Type of the alert.\n *\n * Bootstrap provides styles for the following types: `'success'`, `'info'`, `'warning'`, `'danger'`, `'primary'`,\n * `'secondary'`, `'light'` and `'dark'`.\n */\n @Input() type: string;\n /**\n * An event emitted when the close button is clicked. It has no payload and only relevant for dismissible alerts.\n */\n @Output() close = new EventEmitter();\n\n constructor(config: SbCardConfig, private _renderer: Renderer2, private _element: ElementRef) {\n this.dismissible = config.dismissible;\n this.type = config.type;\n }\n\n closeHandler() { this.close.emit(null); }\n\n ngOnChanges(changes: SimpleChanges) {\n const typeChange = changes['type'];\n if (typeChange && !typeChange.firstChange) {\n this._renderer.removeClass(this._element.nativeElement, `alert-${typeChange.previousValue}`);\n this._renderer.addClass(this._element.nativeElement, `alert-${typeChange.currentValue}`);\n }\n }\n\n ngOnInit() { this._renderer.addClass(this._element.nativeElement, `alert-${this.type}`); }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\nimport {SbCard} from './card';\n\nexport {SbCard} from './card';\nexport {SbCardConfig} from './card-config';\n\n@NgModule({declarations: [SbCard], exports: [SbCard], imports: [CommonModule], entryComponents: [SbCard]})\nexport class SbCardModule {\n}\n","export function toInteger(value: any): number {\n return parseInt(`${value}`, 10);\n}\n\nexport function toString(value: any): string {\n return (value !== undefined && value !== null) ? `${value}` : '';\n}\n\nexport function getValueInRange(value: number, max: number, min = 0): number {\n return Math.max(Math.min(value, max), min);\n}\n\nexport function isString(value: any): value is string {\n return typeof value === 'string';\n}\n\nexport function isNumber(value: any): value is number {\n return !isNaN(toInteger(value));\n}\n\nexport function isInteger(value: any): value is number {\n return typeof value === 'number' && isFinite(value) && Math.floor(value) === value;\n}\n\nexport function isDefined(value: any): boolean {\n return value !== undefined && value !== null;\n}\n\nexport function padNumber(value: number) {\n if (isNumber(value)) {\n return `0${value}`.slice(-2);\n } else {\n return '';\n }\n}\n\nexport function regExpEscape(text) {\n return text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n}\n\nexport function hasClassName(element: any, className: string): boolean {\n return element && element.className && element.className.split &&\n element.className.split(/\\s+/).indexOf(className) >= 0;\n}\n\nif (typeof Element !== 'undefined' && !Element.prototype.closest) {\n // Polyfill for ie10+\n\n if (!Element.prototype.matches) {\n // IE uses the non-standard name: msMatchesSelector\n Element.prototype.matches = (Element.prototype as any).msMatchesSelector || Element.prototype.webkitMatchesSelector;\n }\n\n Element.prototype.closest = function(s: string) {\n let el = this;\n if (!document.documentElement.contains(el)) {\n return null;\n }\n do {\n if (el.matches(s)) {\n return el;\n }\n el = el.parentElement || el.parentNode;\n } while (el !== null && el.nodeType === 1);\n return null;\n };\n}\n\nexport function closest(element: HTMLElement, selector): HTMLElement {\n if (!selector) {\n return null;\n }\n\n return element.closest(selector);\n}\n","import {Injectable} from '@angular/core';\n\n/**\n * A configuration service for the [NgbAccordion](#/components/accordion/api#NgbAccordion) component.\n *\n * You can inject this service, typically in your root component, and customize its properties\n * to provide default values for all accordions used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbAccordionConfig {\n closeOthers = false;\n type: string;\n}\n","import {\n AfterContentChecked,\n Component,\n ContentChildren,\n Directive,\n EventEmitter,\n Host,\n Input,\n Optional,\n Output,\n QueryList,\n TemplateRef\n} from '@angular/core';\n\nimport {isString} from '../util/util';\n\nimport {NgbAccordionConfig} from './accordion-config';\n\nlet nextId = 0;\n\n/**\n * The context for the [NgbPanelHeader](#/components/accordion/api#NgbPanelHeader) template\n *\n * @since 4.1.0\n */\nexport interface NgbPanelHeaderContext {\n /**\n * `True` if current panel is opened\n */\n opened: boolean;\n}\n\n/**\n * A directive that wraps an accordion panel header with any HTML markup and a toggling button\n * marked with [`NgbPanelToggle`](#/components/accordion/api#NgbPanelToggle).\n * See the [header customization demo](#/components/accordion/examples#header) for more details.\n *\n * You can also use [`NgbPanelTitle`](#/components/accordion/api#NgbPanelTitle) to customize only the panel title.\n *\n * @since 4.1.0\n */\n@Directive({selector: 'ng-template[ngbPanelHeader]'})\nexport class NgbPanelHeader {\n constructor(public templateRef: TemplateRef) {}\n}\n\n/**\n * A directive that wraps only the panel title with HTML markup inside.\n *\n * You can also use [`NgbPanelHeader`](#/components/accordion/api#NgbPanelHeader) to customize the full panel header.\n */\n@Directive({selector: 'ng-template[ngbPanelTitle]'})\nexport class NgbPanelTitle {\n constructor(public templateRef: TemplateRef) {}\n}\n\n/**\n * A directive that wraps the accordion panel content.\n */\n@Directive({selector: 'ng-template[ngbPanelContent]'})\nexport class NgbPanelContent {\n constructor(public templateRef: TemplateRef) {}\n}\n\n/**\n * A directive that wraps an individual accordion panel with title and collapsible content.\n */\n@Directive({selector: 'ngb-panel'})\nexport class NgbPanel implements AfterContentChecked {\n /**\n * If `true`, the panel is disabled an can't be toggled.\n */\n @Input() disabled = false;\n\n /**\n * An optional id for the panel that must be unique on the page.\n *\n * If not provided, it will be auto-generated in the `ngb-panel-xxx` format.\n */\n @Input() id = `ngb-panel-${nextId++}`;\n\n isOpen = false;\n\n /**\n * The panel title.\n *\n * You can alternatively use [`NgbPanelTitle`](#/components/accordion/api#NgbPanelTitle) to set panel title.\n */\n @Input() title: string;\n\n /**\n * Type of the current panel.\n *\n * Bootstrap provides styles for the following types: `'success'`, `'info'`, `'warning'`, `'danger'`, `'primary'`,\n * `'secondary'`, `'light'` and `'dark'`.\n */\n @Input() type: string;\n\n titleTpl: NgbPanelTitle | null;\n headerTpl: NgbPanelHeader | null;\n contentTpl: NgbPanelContent | null;\n\n @ContentChildren(NgbPanelTitle, {descendants: false}) titleTpls: QueryList;\n @ContentChildren(NgbPanelHeader, {descendants: false}) headerTpls: QueryList;\n @ContentChildren(NgbPanelContent, {descendants: false}) contentTpls: QueryList;\n\n ngAfterContentChecked() {\n // We are using @ContentChildren instead of @ContentChild as in the Angular version being used\n // only @ContentChildren allows us to specify the {descendants: false} option.\n // Without {descendants: false} we are hitting bugs described in:\n // https://github.com/ng-bootstrap/ng-bootstrap/issues/2240\n this.titleTpl = this.titleTpls.first;\n this.headerTpl = this.headerTpls.first;\n this.contentTpl = this.contentTpls.first;\n }\n}\n\n/**\n * An event emitted right before toggling an accordion panel.\n */\nexport interface NgbPanelChangeEvent {\n /**\n * The id of the accordion panel that is being toggled.\n */\n panelId: string;\n\n /**\n * The next state of the panel.\n *\n * `true` if it will be opened, `false` if closed.\n */\n nextState: boolean;\n\n /**\n * Calling this function will prevent panel toggling.\n */\n preventDefault: () => void;\n}\n\n/**\n * Accordion is a collection of collapsible panels (bootstrap cards).\n *\n * It can ensure only one panel is opened at a time and allows to customize panel\n * headers.\n */\n@Component({\n selector: 'ngb-accordion',\n exportAs: 'ngbAccordion',\n host: {'class': 'accordion', 'role': 'tablist', '[attr.aria-multiselectable]': '!closeOtherPanels'},\n template: `\n \n \n \n \n
\n
\n \n
\n
\n
\n \n
\n
\n
\n
\n `\n})\nexport class NgbAccordion implements AfterContentChecked {\n @ContentChildren(NgbPanel) panels: QueryList;\n\n /**\n * An array or comma separated strings of panel ids that should be opened **initially**.\n *\n * For subsequent changes use methods like `expand()`, `collapse()`, etc. and\n * the `(panelChange)` event.\n */\n @Input() activeIds: string | string[] = [];\n\n /**\n * If `true`, only one panel could be opened at a time.\n *\n * Opening a new panel will close others.\n */\n @Input('closeOthers') closeOtherPanels: boolean;\n\n /**\n * If `true`, panel content will be detached from DOM and not simply hidden when the panel is collapsed.\n */\n @Input() destroyOnHide = true;\n\n /**\n * Type of panels.\n *\n * Bootstrap provides styles for the following types: `'success'`, `'info'`, `'warning'`, `'danger'`, `'primary'`,\n * `'secondary'`, `'light'` and `'dark'`.\n */\n @Input() type: string;\n\n /**\n * Event emitted right before the panel toggle happens.\n *\n * See [NgbPanelChangeEvent](#/components/accordion/api#NgbPanelChangeEvent) for payload details.\n */\n @Output() panelChange = new EventEmitter();\n\n constructor(config: NgbAccordionConfig) {\n this.type = config.type;\n this.closeOtherPanels = config.closeOthers;\n }\n\n /**\n * Checks if a panel with a given id is expanded.\n */\n isExpanded(panelId: string): boolean { return this.activeIds.indexOf(panelId) > -1; }\n\n /**\n * Expands a panel with a given id.\n *\n * Has no effect if the panel is already expanded or disabled.\n */\n expand(panelId: string): void { this._changeOpenState(this._findPanelById(panelId), true); }\n\n /**\n * Expands all panels, if `[closeOthers]` is `false`.\n *\n * If `[closeOthers]` is `true`, it will expand the first panel, unless there is already a panel opened.\n */\n expandAll(): void {\n if (this.closeOtherPanels) {\n if (this.activeIds.length === 0 && this.panels.length) {\n this._changeOpenState(this.panels.first, true);\n }\n } else {\n this.panels.forEach(panel => this._changeOpenState(panel, true));\n }\n }\n\n /**\n * Collapses a panel with the given id.\n *\n * Has no effect if the panel is already collapsed or disabled.\n */\n collapse(panelId: string) { this._changeOpenState(this._findPanelById(panelId), false); }\n\n /**\n * Collapses all opened panels.\n */\n collapseAll() {\n this.panels.forEach((panel) => { this._changeOpenState(panel, false); });\n }\n\n /**\n * Toggles a panel with the given id.\n *\n * Has no effect if the panel is disabled.\n */\n toggle(panelId: string) {\n const panel = this._findPanelById(panelId);\n if (panel) {\n this._changeOpenState(panel, !panel.isOpen);\n }\n }\n\n ngAfterContentChecked() {\n // active id updates\n if (isString(this.activeIds)) {\n this.activeIds = this.activeIds.split(/\\s*,\\s*/);\n }\n\n // update panels open states\n this.panels.forEach(panel => panel.isOpen = !panel.disabled && this.activeIds.indexOf(panel.id) > -1);\n\n // closeOthers updates\n if (this.activeIds.length > 1 && this.closeOtherPanels) {\n this._closeOthers(this.activeIds[0]);\n this._updateActiveIds();\n }\n }\n\n private _changeOpenState(panel: NgbPanel, nextState: boolean) {\n if (panel && !panel.disabled && panel.isOpen !== nextState) {\n let defaultPrevented = false;\n\n this.panelChange.emit(\n {panelId: panel.id, nextState: nextState, preventDefault: () => { defaultPrevented = true; }});\n\n if (!defaultPrevented) {\n panel.isOpen = nextState;\n\n if (nextState && this.closeOtherPanels) {\n this._closeOthers(panel.id);\n }\n this._updateActiveIds();\n }\n }\n }\n\n private _closeOthers(panelId: string) {\n this.panels.forEach(panel => {\n if (panel.id !== panelId) {\n panel.isOpen = false;\n }\n });\n }\n\n private _findPanelById(panelId: string): NgbPanel | null { return this.panels.find(p => p.id === panelId); }\n\n private _updateActiveIds() {\n this.activeIds = this.panels.filter(panel => panel.isOpen && !panel.disabled).map(panel => panel.id);\n }\n}\n\n/**\n * A directive to put on a button that toggles panel opening and closing.\n *\n * To be used inside the [`NgbPanelHeader`](#/components/accordion/api#NgbPanelHeader)\n *\n * @since 4.1.0\n */\n@Directive({\n selector: 'button[ngbPanelToggle]',\n host: {\n 'type': 'button',\n '[disabled]': 'panel.disabled',\n '[class.collapsed]': '!panel.isOpen',\n '[attr.aria-expanded]': 'panel.isOpen',\n '[attr.aria-controls]': 'panel.id',\n '(click)': 'accordion.toggle(panel.id)'\n }\n})\nexport class NgbPanelToggle {\n @Input()\n set ngbPanelToggle(panel: NgbPanel) {\n if (panel) {\n this.panel = panel;\n }\n }\n\n constructor(public accordion: NgbAccordion, @Optional() @Host() public panel: NgbPanel) {}\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\nimport {NgbAccordion, NgbPanel, NgbPanelTitle, NgbPanelContent, NgbPanelHeader, NgbPanelToggle} from './accordion';\n\nexport {\n NgbAccordion,\n NgbPanel,\n NgbPanelTitle,\n NgbPanelContent,\n NgbPanelChangeEvent,\n NgbPanelHeader,\n NgbPanelHeaderContext,\n NgbPanelToggle\n} from './accordion';\nexport {NgbAccordionConfig} from './accordion-config';\n\nconst NGB_ACCORDION_DIRECTIVES =\n [NgbAccordion, NgbPanel, NgbPanelTitle, NgbPanelContent, NgbPanelHeader, NgbPanelToggle];\n\n@NgModule({declarations: NGB_ACCORDION_DIRECTIVES, exports: NGB_ACCORDION_DIRECTIVES, imports: [CommonModule]})\nexport class NgbAccordionModule {\n}\n","import {Injectable} from '@angular/core';\n\n/**\n * A configuration service for the [NgbAlert](#/components/alert/api#NgbAlert) component.\n *\n * You can inject this service, typically in your root component, and customize its properties\n * to provide default values for all alerts used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbAlertConfig {\n dismissible = true;\n type = 'warning';\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n ChangeDetectionStrategy,\n Renderer2,\n ElementRef,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewEncapsulation\n} from '@angular/core';\n\nimport {NgbAlertConfig} from './alert-config';\n\n/**\n * Alert is a component to provide contextual feedback messages for user.\n *\n * It supports several alert types and can be dismissed.\n */\n@Component({\n selector: 'ngb-alert',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {'role': 'alert', 'class': 'alert', '[class.alert-dismissible]': 'dismissible'},\n template: `\n \n \n `,\n styleUrls: ['./alert.scss']\n})\nexport class NgbAlert implements OnInit,\n OnChanges {\n /**\n * If `true`, alert can be dismissed by the user.\n *\n * The close button (×) will be displayed and you can be notified\n * of the event with the `(close)` output.\n */\n @Input() dismissible: boolean;\n /**\n * Type of the alert.\n *\n * Bootstrap provides styles for the following types: `'success'`, `'info'`, `'warning'`, `'danger'`, `'primary'`,\n * `'secondary'`, `'light'` and `'dark'`.\n */\n @Input() type: string;\n /**\n * An event emitted when the close button is clicked. It has no payload and only relevant for dismissible alerts.\n */\n @Output() close = new EventEmitter();\n\n constructor(config: NgbAlertConfig, private _renderer: Renderer2, private _element: ElementRef) {\n this.dismissible = config.dismissible;\n this.type = config.type;\n }\n\n closeHandler() { this.close.emit(null); }\n\n ngOnChanges(changes: SimpleChanges) {\n const typeChange = changes['type'];\n if (typeChange && !typeChange.firstChange) {\n this._renderer.removeClass(this._element.nativeElement, `alert-${typeChange.previousValue}`);\n this._renderer.addClass(this._element.nativeElement, `alert-${typeChange.currentValue}`);\n }\n }\n\n ngOnInit() { this._renderer.addClass(this._element.nativeElement, `alert-${this.type}`); }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\nimport {NgbAlert} from './alert';\n\nexport {NgbAlert} from './alert';\nexport {NgbAlertConfig} from './alert-config';\n\n@NgModule({declarations: [NgbAlert], exports: [NgbAlert], imports: [CommonModule], entryComponents: [NgbAlert]})\nexport class NgbAlertModule {\n}\n","import {Directive} from '@angular/core';\n\n@Directive({\n selector: '[ngbButtonLabel]',\n host:\n {'[class.btn]': 'true', '[class.active]': 'active', '[class.disabled]': 'disabled', '[class.focus]': 'focused'}\n})\nexport class NgbButtonLabel {\n active: boolean;\n disabled: boolean;\n focused: boolean;\n}\n","import {ChangeDetectorRef, Directive, forwardRef, Input} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\n\nimport {NgbButtonLabel} from './label';\n\nconst NGB_CHECKBOX_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgbCheckBox),\n multi: true\n};\n\n\n/**\n * Allows to easily create Bootstrap-style checkbox buttons.\n *\n * Integrates with forms, so the value of a checked button is bound to the underlying form control\n * either in a reactive or template-driven way.\n */\n@Directive({\n selector: '[ngbButton][type=checkbox]',\n host: {\n 'autocomplete': 'off',\n '[checked]': 'checked',\n '[disabled]': 'disabled',\n '(change)': 'onInputChange($event)',\n '(focus)': 'focused = true',\n '(blur)': 'focused = false'\n },\n providers: [NGB_CHECKBOX_VALUE_ACCESSOR]\n})\nexport class NgbCheckBox implements ControlValueAccessor {\n checked;\n\n /**\n * If `true`, the checkbox button will be disabled\n */\n @Input() disabled = false;\n\n /**\n * The form control value when the checkbox is checked.\n */\n @Input() valueChecked = true;\n\n /**\n * The form control value when the checkbox is unchecked.\n */\n @Input() valueUnChecked = false;\n\n onChange = (_: any) => {};\n onTouched = () => {};\n\n set focused(isFocused: boolean) {\n this._label.focused = isFocused;\n if (!isFocused) {\n this.onTouched();\n }\n }\n\n constructor(private _label: NgbButtonLabel, private _cd: ChangeDetectorRef) {}\n\n onInputChange($event) {\n const modelToPropagate = $event.target.checked ? this.valueChecked : this.valueUnChecked;\n this.onChange(modelToPropagate);\n this.onTouched();\n this.writeValue(modelToPropagate);\n }\n\n registerOnChange(fn: (value: any) => any): void { this.onChange = fn; }\n\n registerOnTouched(fn: () => any): void { this.onTouched = fn; }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this._label.disabled = isDisabled;\n }\n\n writeValue(value) {\n this.checked = value === this.valueChecked;\n this._label.active = this.checked;\n\n // label won't be updated, if it is inside the OnPush component when [ngModel] changes\n this._cd.markForCheck();\n }\n}\n","import {ChangeDetectorRef, Directive, ElementRef, forwardRef, Input, OnDestroy, Renderer2} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\n\nimport {NgbButtonLabel} from './label';\n\nconst NGB_RADIO_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgbRadioGroup),\n multi: true\n};\n\nlet nextId = 0;\n\n/**\n * Allows to easily create Bootstrap-style radio buttons.\n *\n * Integrates with forms, so the value of a checked button is bound to the underlying form control\n * either in a reactive or template-driven way.\n */\n@Directive({selector: '[ngbRadioGroup]', host: {'role': 'radiogroup'}, providers: [NGB_RADIO_VALUE_ACCESSOR]})\nexport class NgbRadioGroup implements ControlValueAccessor {\n private _radios: Set = new Set();\n private _value = null;\n private _disabled: boolean;\n\n get disabled() { return this._disabled; }\n set disabled(isDisabled: boolean) { this.setDisabledState(isDisabled); }\n\n /**\n * Name of the radio group applied to radio input elements.\n *\n * Will be applied to all radio input elements inside the group,\n * unless [`NgbRadio`](#/components/buttons/api#NgbRadio)'s specify names themselves.\n *\n * If not provided, will be generated in the `ngb-radio-xx` format.\n */\n @Input() name = `ngb-radio-${nextId++}`;\n\n onChange = (_: any) => {};\n onTouched = () => {};\n\n onRadioChange(radio: NgbRadio) {\n this.writeValue(radio.value);\n this.onChange(radio.value);\n }\n\n onRadioValueUpdate() { this._updateRadiosValue(); }\n\n register(radio: NgbRadio) { this._radios.add(radio); }\n\n registerOnChange(fn: (value: any) => any): void { this.onChange = fn; }\n\n registerOnTouched(fn: () => any): void { this.onTouched = fn; }\n\n setDisabledState(isDisabled: boolean): void {\n this._disabled = isDisabled;\n this._updateRadiosDisabled();\n }\n\n unregister(radio: NgbRadio) { this._radios.delete(radio); }\n\n writeValue(value) {\n this._value = value;\n this._updateRadiosValue();\n }\n\n private _updateRadiosValue() { this._radios.forEach((radio) => radio.updateValue(this._value)); }\n private _updateRadiosDisabled() { this._radios.forEach((radio) => radio.updateDisabled()); }\n}\n\n\n/**\n * A directive that marks an input of type \"radio\" as a part of the\n * [`NgbRadioGroup`](#/components/buttons/api#NgbRadioGroup).\n */\n@Directive({\n selector: '[ngbButton][type=radio]',\n host: {\n '[checked]': 'checked',\n '[disabled]': 'disabled',\n '[name]': 'nameAttr',\n '(change)': 'onChange()',\n '(focus)': 'focused = true',\n '(blur)': 'focused = false'\n }\n})\nexport class NgbRadio implements OnDestroy {\n private _checked: boolean;\n private _disabled: boolean;\n private _value: any = null;\n\n /**\n * The value for the 'name' property of the input element.\n *\n * All inputs of the radio group should have the same name. If not specified,\n * the name of the enclosing group is used.\n */\n @Input() name: string;\n\n /**\n * The form control value when current radio button is checked.\n */\n @Input('value')\n set value(value: any) {\n this._value = value;\n const stringValue = value ? value.toString() : '';\n this._renderer.setProperty(this._element.nativeElement, 'value', stringValue);\n this._group.onRadioValueUpdate();\n }\n\n /**\n * If `true`, current radio button will be disabled.\n */\n @Input('disabled')\n set disabled(isDisabled: boolean) {\n this._disabled = isDisabled !== false;\n this.updateDisabled();\n }\n\n set focused(isFocused: boolean) {\n if (this._label) {\n this._label.focused = isFocused;\n }\n if (!isFocused) {\n this._group.onTouched();\n }\n }\n\n get checked() { return this._checked; }\n\n get disabled() { return this._group.disabled || this._disabled; }\n\n get value() { return this._value; }\n\n get nameAttr() { return this.name || this._group.name; }\n\n constructor(\n private _group: NgbRadioGroup, private _label: NgbButtonLabel, private _renderer: Renderer2,\n private _element: ElementRef, private _cd: ChangeDetectorRef) {\n this._group.register(this);\n this.updateDisabled();\n }\n\n ngOnDestroy() { this._group.unregister(this); }\n\n onChange() { this._group.onRadioChange(this); }\n\n updateValue(value) {\n // label won't be updated, if it is inside the OnPush component when [ngModel] changes\n if (this.value !== value) {\n this._cd.markForCheck();\n }\n\n this._checked = this.value === value;\n this._label.active = this._checked;\n }\n\n updateDisabled() { this._label.disabled = this.disabled; }\n}\n","import {NgModule} from '@angular/core';\nimport {NgbButtonLabel} from './label';\nimport {NgbCheckBox} from './checkbox';\nimport {NgbRadio, NgbRadioGroup} from './radio';\n\nexport {NgbButtonLabel} from './label';\nexport {NgbCheckBox} from './checkbox';\nexport {NgbRadio, NgbRadioGroup} from './radio';\n\n\nconst NGB_BUTTON_DIRECTIVES = [NgbButtonLabel, NgbCheckBox, NgbRadioGroup, NgbRadio];\n\n@NgModule({declarations: NGB_BUTTON_DIRECTIVES, exports: NGB_BUTTON_DIRECTIVES})\nexport class NgbButtonsModule {\n}\n","import {Injectable} from '@angular/core';\n\n/**\n * A configuration service for the [NgbCarousel](#/components/carousel/api#NgbCarousel) component.\n *\n * You can inject this service, typically in your root component, and customize its properties\n * to provide default values for all carousels used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbCarouselConfig {\n interval = 5000;\n wrap = true;\n keyboard = true;\n pauseOnHover = true;\n showNavigationArrows = true;\n showNavigationIndicators = true;\n}\n","import {\n AfterContentChecked,\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n Directive,\n EventEmitter,\n Inject,\n Input,\n NgZone,\n OnDestroy,\n Output,\n PLATFORM_ID,\n QueryList,\n TemplateRef,\n HostListener\n} from '@angular/core';\nimport {isPlatformBrowser} from '@angular/common';\n\nimport {NgbCarouselConfig} from './carousel-config';\n\nimport {Subject, timer, BehaviorSubject, combineLatest, NEVER} from 'rxjs';\nimport {startWith, map, switchMap, takeUntil, distinctUntilChanged} from 'rxjs/operators';\n\nlet nextId = 0;\n\n/**\n * A directive that wraps the individual carousel slide.\n */\n@Directive({selector: 'ng-template[ngbSlide]'})\nexport class NgbSlide {\n /**\n * Slide id that must be unique for the entire document.\n *\n * If not provided, will be generated in the `ngb-slide-xx` format.\n */\n @Input() id = `ngb-slide-${nextId++}`;\n constructor(public tplRef: TemplateRef) {}\n}\n\n/**\n * Carousel is a component to easily create and control slideshows.\n *\n * Allows to set intervals, change the way user interacts with the slides and provides a programmatic API.\n */\n@Component({\n selector: 'ngb-carousel',\n exportAs: 'ngbCarousel',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'carousel slide',\n '[style.display]': '\"block\"',\n 'tabIndex': '0',\n '(keydown.arrowLeft)': 'keyboard && prev(NgbSlideEventSource.ARROW_LEFT)',\n '(keydown.arrowRight)': 'keyboard && next(NgbSlideEventSource.ARROW_RIGHT)'\n },\n template: `\n
    \n
  1. \n
\n
\n
\n \n
\n
\n \n \n Previous\n \n \n \n Next\n \n `\n})\nexport class NgbCarousel implements AfterContentChecked,\n AfterContentInit, OnDestroy {\n @ContentChildren(NgbSlide) slides: QueryList;\n\n public NgbSlideEventSource = NgbSlideEventSource;\n\n private _destroy$ = new Subject();\n private _interval$ = new BehaviorSubject(0);\n private _mouseHover$ = new BehaviorSubject(false);\n private _pauseOnHover$ = new BehaviorSubject(false);\n private _pause$ = new BehaviorSubject(false);\n private _wrap$ = new BehaviorSubject(false);\n\n /**\n * The slide id that should be displayed **initially**.\n *\n * For subsequent interactions use methods `select()`, `next()`, etc. and the `(slide)` output.\n */\n @Input() activeId: string;\n\n /**\n * Time in milliseconds before the next slide is shown.\n */\n @Input()\n set interval(value: number) {\n this._interval$.next(value);\n }\n\n get interval() { return this._interval$.value; }\n\n /**\n * If `true`, will 'wrap' the carousel by switching from the last slide back to the first.\n */\n @Input()\n set wrap(value: boolean) {\n this._wrap$.next(value);\n }\n\n get wrap() { return this._wrap$.value; }\n\n /**\n * If `true`, allows to interact with carousel using keyboard 'arrow left' and 'arrow right'.\n */\n @Input() keyboard: boolean;\n\n /**\n * If `true`, will pause slide switching when mouse cursor hovers the slide.\n *\n * @since 2.2.0\n */\n @Input()\n set pauseOnHover(value: boolean) {\n this._pauseOnHover$.next(value);\n }\n\n get pauseOnHover() { return this._pauseOnHover$.value; }\n\n /**\n * If `true`, 'previous' and 'next' navigation arrows will be visible on the slide.\n *\n * @since 2.2.0\n */\n @Input() showNavigationArrows: boolean;\n\n /**\n * If `true`, navigation indicators at the bottom of the slide will be visible.\n *\n * @since 2.2.0\n */\n @Input() showNavigationIndicators: boolean;\n\n /**\n * An event emitted right after the slide transition is completed.\n *\n * See [`NgbSlideEvent`](#/components/carousel/api#NgbSlideEvent) for payload details.\n */\n @Output() slide = new EventEmitter();\n\n constructor(\n config: NgbCarouselConfig, @Inject(PLATFORM_ID) private _platformId, private _ngZone: NgZone,\n private _cd: ChangeDetectorRef) {\n this.interval = config.interval;\n this.wrap = config.wrap;\n this.keyboard = config.keyboard;\n this.pauseOnHover = config.pauseOnHover;\n this.showNavigationArrows = config.showNavigationArrows;\n this.showNavigationIndicators = config.showNavigationIndicators;\n }\n\n @HostListener('mouseenter')\n mouseEnter() {\n this._mouseHover$.next(true);\n }\n\n @HostListener('mouseleave')\n mouseLeave() {\n this._mouseHover$.next(false);\n }\n\n ngAfterContentInit() {\n // setInterval() doesn't play well with SSR and protractor,\n // so we should run it in the browser and outside Angular\n if (isPlatformBrowser(this._platformId)) {\n this._ngZone.runOutsideAngular(() => {\n const hasNextSlide$ = combineLatest(\n this.slide.pipe(map(slideEvent => slideEvent.current), startWith(this.activeId)),\n this._wrap$, this.slides.changes.pipe(startWith(null)))\n .pipe(\n map(([currentSlideId, wrap]) => {\n const slideArr = this.slides.toArray();\n const currentSlideIdx = this._getSlideIdxById(currentSlideId);\n return wrap ? slideArr.length > 1 : currentSlideIdx < slideArr.length - 1;\n }),\n distinctUntilChanged());\n combineLatest(this._pause$, this._pauseOnHover$, this._mouseHover$, this._interval$, hasNextSlide$)\n .pipe(\n map(([pause, pauseOnHover, mouseHover, interval, hasNextSlide]) =>\n ((pause || (pauseOnHover && mouseHover) || !hasNextSlide) ? 0 : interval)),\n\n distinctUntilChanged(), switchMap(interval => interval > 0 ? timer(interval, interval) : NEVER),\n takeUntil(this._destroy$))\n .subscribe(() => this._ngZone.run(() => this.next(NgbSlideEventSource.TIMER)));\n });\n }\n\n this.slides.changes.pipe(takeUntil(this._destroy$)).subscribe(() => this._cd.markForCheck());\n }\n\n ngAfterContentChecked() {\n let activeSlide = this._getSlideById(this.activeId);\n this.activeId = activeSlide ? activeSlide.id : (this.slides.length ? this.slides.first.id : null);\n }\n\n ngOnDestroy() { this._destroy$.next(); }\n\n /**\n * Navigates to a slide with the specified identifier.\n */\n select(slideId: string, source?: NgbSlideEventSource) {\n this._cycleToSelected(slideId, this._getSlideEventDirection(this.activeId, slideId), source);\n }\n\n /**\n * Navigates to the previous slide.\n */\n prev(source?: NgbSlideEventSource) {\n this._cycleToSelected(this._getPrevSlide(this.activeId), NgbSlideEventDirection.RIGHT, source);\n }\n\n /**\n * Navigates to the next slide.\n */\n next(source?: NgbSlideEventSource) {\n this._cycleToSelected(this._getNextSlide(this.activeId), NgbSlideEventDirection.LEFT, source);\n }\n\n /**\n * Pauses cycling through the slides.\n */\n pause() { this._pause$.next(true); }\n\n /**\n * Restarts cycling through the slides from left to right.\n */\n cycle() { this._pause$.next(false); }\n\n private _cycleToSelected(slideIdx: string, direction: NgbSlideEventDirection, source?: NgbSlideEventSource) {\n let selectedSlide = this._getSlideById(slideIdx);\n if (selectedSlide && selectedSlide.id !== this.activeId) {\n this.slide.emit(\n {prev: this.activeId, current: selectedSlide.id, direction: direction, paused: this._pause$.value, source});\n this.activeId = selectedSlide.id;\n }\n\n // we get here after the interval fires or any external API call like next(), prev() or select()\n this._cd.markForCheck();\n }\n\n private _getSlideEventDirection(currentActiveSlideId: string, nextActiveSlideId: string): NgbSlideEventDirection {\n const currentActiveSlideIdx = this._getSlideIdxById(currentActiveSlideId);\n const nextActiveSlideIdx = this._getSlideIdxById(nextActiveSlideId);\n\n return currentActiveSlideIdx > nextActiveSlideIdx ? NgbSlideEventDirection.RIGHT : NgbSlideEventDirection.LEFT;\n }\n\n private _getSlideById(slideId: string): NgbSlide { return this.slides.find(slide => slide.id === slideId); }\n\n private _getSlideIdxById(slideId: string): number {\n return this.slides.toArray().indexOf(this._getSlideById(slideId));\n }\n\n private _getNextSlide(currentSlideId: string): string {\n const slideArr = this.slides.toArray();\n const currentSlideIdx = this._getSlideIdxById(currentSlideId);\n const isLastSlide = currentSlideIdx === slideArr.length - 1;\n\n return isLastSlide ? (this.wrap ? slideArr[0].id : slideArr[slideArr.length - 1].id) :\n slideArr[currentSlideIdx + 1].id;\n }\n\n private _getPrevSlide(currentSlideId: string): string {\n const slideArr = this.slides.toArray();\n const currentSlideIdx = this._getSlideIdxById(currentSlideId);\n const isFirstSlide = currentSlideIdx === 0;\n\n return isFirstSlide ? (this.wrap ? slideArr[slideArr.length - 1].id : slideArr[0].id) :\n slideArr[currentSlideIdx - 1].id;\n }\n}\n\n/**\n * A slide change event emitted right after the slide transition is completed.\n */\nexport interface NgbSlideEvent {\n /**\n * The previous slide id.\n */\n prev: string;\n\n /**\n * The current slide id.\n */\n current: string;\n\n /**\n * The slide event direction.\n *\n * Possible values are `'left' | 'right'`.\n */\n direction: NgbSlideEventDirection;\n\n /**\n * Whether the pause() method was called (and no cycle() call was done afterwards).\n *\n * @since 5.1.0\n */\n paused: boolean;\n\n /**\n * Source triggering the slide change event.\n *\n * Possible values are `'timer' | 'arrowLeft' | 'arrowRight' | 'indicator'`\n *\n * @since 5.1.0\n */\n source?: NgbSlideEventSource;\n}\n\n/**\n * Defines the carousel slide transition direction.\n */\nexport enum NgbSlideEventDirection {\n LEFT = 'left',\n RIGHT = 'right'\n}\n\nexport enum NgbSlideEventSource {\n TIMER = 'timer',\n ARROW_LEFT = 'arrowLeft',\n ARROW_RIGHT = 'arrowRight',\n INDICATOR = 'indicator'\n}\n\nexport const NGB_CAROUSEL_DIRECTIVES = [NgbCarousel, NgbSlide];\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\nimport {NGB_CAROUSEL_DIRECTIVES} from './carousel';\n\nexport {NgbCarousel, NgbSlide, NgbSlideEvent, NgbSlideEventDirection, NgbSlideEventSource} from './carousel';\nexport {NgbCarouselConfig} from './carousel-config';\n\n@NgModule({declarations: NGB_CAROUSEL_DIRECTIVES, exports: NGB_CAROUSEL_DIRECTIVES, imports: [CommonModule]})\nexport class NgbCarouselModule {\n}\n","import {Directive, Input} from '@angular/core';\n\n/**\n * A directive to provide a simple way of hiding and showing elements on the page.\n */\n@Directive({\n selector: '[ngbCollapse]',\n exportAs: 'ngbCollapse',\n host: {'[class.collapse]': 'true', '[class.show]': '!collapsed'}\n})\nexport class NgbCollapse {\n /**\n * If `true`, will collapse the element or show it otherwise.\n */\n @Input('ngbCollapse') collapsed = false;\n}\n","import {NgModule} from '@angular/core';\nimport {NgbCollapse} from './collapse';\n\nexport {NgbCollapse} from './collapse';\n\n@NgModule({declarations: [NgbCollapse], exports: [NgbCollapse]})\nexport class NgbCollapseModule {\n}\n","import {NgbDateStruct} from './ngb-date-struct';\nimport {isInteger} from '../util/util';\n\n/**\n * A simple class that represents a date that datepicker also uses internally.\n *\n * It is the implementation of the `NgbDateStruct` interface that adds some convenience methods,\n * like `.equals()`, `.before()`, etc.\n *\n * All datepicker APIs consume `NgbDateStruct`, but return `NgbDate`.\n *\n * In many cases it is simpler to manipulate these objects together with\n * [`NgbCalendar`](#/components/datepicker/api#NgbCalendar) than native JS Dates.\n *\n * See the [date format overview](#/components/datepicker/overview#date-model) for more details.\n *\n * @since 3.0.0\n */\nexport class NgbDate implements NgbDateStruct {\n /**\n * The year, for example 2016\n */\n year: number;\n\n /**\n * The month, for example 1=Jan ... 12=Dec as in ISO 8601\n */\n month: number;\n\n /**\n * The day of month, starting with 1\n */\n day: number;\n\n /**\n * A **static method** that creates a new date object from the `NgbDateStruct`,\n *\n * ex. `NgbDate.from({year: 2000, month: 5, day: 1})`.\n *\n * If the `date` is already of `NgbDate` type, the method will return the same object.\n */\n static from(date: NgbDateStruct): NgbDate {\n if (date instanceof NgbDate) {\n return date;\n }\n return date ? new NgbDate(date.year, date.month, date.day) : null;\n }\n\n constructor(year: number, month: number, day: number) {\n this.year = isInteger(year) ? year : null;\n this.month = isInteger(month) ? month : null;\n this.day = isInteger(day) ? day : null;\n }\n\n /**\n * Checks if the current date is equal to another date.\n */\n equals(other: NgbDateStruct): boolean {\n return other && this.year === other.year && this.month === other.month && this.day === other.day;\n }\n\n /**\n * Checks if the current date is before another date.\n */\n before(other: NgbDateStruct): boolean {\n if (!other) {\n return false;\n }\n\n if (this.year === other.year) {\n if (this.month === other.month) {\n return this.day === other.day ? false : this.day < other.day;\n } else {\n return this.month < other.month;\n }\n } else {\n return this.year < other.year;\n }\n }\n\n /**\n * Checks if the current date is after another date.\n */\n after(other: NgbDateStruct): boolean {\n if (!other) {\n return false;\n }\n if (this.year === other.year) {\n if (this.month === other.month) {\n return this.day === other.day ? false : this.day > other.day;\n } else {\n return this.month > other.month;\n }\n } else {\n return this.year > other.year;\n }\n }\n}\n","import {NgbDate} from './ngb-date';\nimport {Injectable} from '@angular/core';\nimport {isInteger} from '../util/util';\n\nexport function fromJSDate(jsDate: Date) {\n return new NgbDate(jsDate.getFullYear(), jsDate.getMonth() + 1, jsDate.getDate());\n}\nexport function toJSDate(date: NgbDate) {\n const jsDate = new Date(date.year, date.month - 1, date.day, 12);\n // this is done avoid 30 -> 1930 conversion\n if (!isNaN(jsDate.getTime())) {\n jsDate.setFullYear(date.year);\n }\n return jsDate;\n}\n\nexport type NgbPeriod = 'y' | 'm' | 'd';\n\nexport function NGB_DATEPICKER_CALENDAR_FACTORY() {\n return new NgbCalendarGregorian();\n}\n\n/**\n * A service that represents the calendar used by the datepicker.\n *\n * The default implementation uses the Gregorian calendar. You can inject it in your own\n * implementations if necessary to simplify `NgbDate` calculations.\n */\n@Injectable({providedIn: 'root', useFactory: NGB_DATEPICKER_CALENDAR_FACTORY})\nexport abstract class NgbCalendar {\n /**\n * Returns the number of days per week.\n */\n abstract getDaysPerWeek(): number;\n\n /**\n * Returns an array of months per year.\n *\n * With default calendar we use ISO 8601 and return [1, 2, ..., 12];\n */\n abstract getMonths(year?: number): number[];\n\n /**\n * Returns the number of weeks per month.\n */\n abstract getWeeksPerMonth(): number;\n\n /**\n * Returns the weekday number for a given day.\n *\n * With the default calendar we use ISO 8601: 'weekday' is 1=Mon ... 7=Sun\n */\n abstract getWeekday(date: NgbDate): number;\n\n /**\n * Adds a number of years, months or days to a given date.\n *\n * * `period` can be `y`, `m` or `d` and defaults to day.\n * * `number` defaults to 1.\n *\n * Always returns a new date.\n */\n abstract getNext(date: NgbDate, period?: NgbPeriod, number?: number): NgbDate;\n\n /**\n * Subtracts a number of years, months or days from a given date.\n *\n * * `period` can be `y`, `m` or `d` and defaults to day.\n * * `number` defaults to 1.\n *\n * Always returns a new date.\n */\n abstract getPrev(date: NgbDate, period?: NgbPeriod, number?: number): NgbDate;\n\n /**\n * Returns the week number for a given week.\n */\n abstract getWeekNumber(week: NgbDate[], firstDayOfWeek: number): number;\n\n /**\n * Returns the today's date.\n */\n abstract getToday(): NgbDate;\n\n /**\n * Checks if a date is valid in the current calendar.\n */\n abstract isValid(date: NgbDate): boolean;\n}\n\n@Injectable()\nexport class NgbCalendarGregorian extends NgbCalendar {\n getDaysPerWeek() { return 7; }\n\n getMonths() { return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; }\n\n getWeeksPerMonth() { return 6; }\n\n getNext(date: NgbDate, period: NgbPeriod = 'd', number = 1) {\n let jsDate = toJSDate(date);\n\n switch (period) {\n case 'y':\n return new NgbDate(date.year + number, 1, 1);\n case 'm':\n jsDate = new Date(date.year, date.month + number - 1, 1, 12);\n break;\n case 'd':\n jsDate.setDate(jsDate.getDate() + number);\n break;\n default:\n return date;\n }\n\n return fromJSDate(jsDate);\n }\n\n getPrev(date: NgbDate, period: NgbPeriod = 'd', number = 1) { return this.getNext(date, period, -number); }\n\n getWeekday(date: NgbDate) {\n let jsDate = toJSDate(date);\n let day = jsDate.getDay();\n // in JS Date Sun=0, in ISO 8601 Sun=7\n return day === 0 ? 7 : day;\n }\n\n getWeekNumber(week: NgbDate[], firstDayOfWeek: number) {\n // in JS Date Sun=0, in ISO 8601 Sun=7\n if (firstDayOfWeek === 7) {\n firstDayOfWeek = 0;\n }\n\n const thursdayIndex = (4 + 7 - firstDayOfWeek) % 7;\n let date = week[thursdayIndex];\n\n const jsDate = toJSDate(date);\n jsDate.setDate(jsDate.getDate() + 4 - (jsDate.getDay() || 7)); // Thursday\n const time = jsDate.getTime();\n jsDate.setMonth(0); // Compare with Jan 1\n jsDate.setDate(1);\n return Math.floor(Math.round((time - jsDate.getTime()) / 86400000) / 7) + 1;\n }\n\n getToday(): NgbDate { return fromJSDate(new Date()); }\n\n isValid(date: NgbDate): boolean {\n if (!date || !isInteger(date.year) || !isInteger(date.month) || !isInteger(date.day)) {\n return false;\n }\n\n // year 0 doesn't exist in Gregorian calendar\n if (date.year === 0) {\n return false;\n }\n\n const jsDate = toJSDate(date);\n\n return !isNaN(jsDate.getTime()) && jsDate.getFullYear() === date.year && jsDate.getMonth() + 1 === date.month &&\n jsDate.getDate() === date.day;\n }\n}\n","import {NgbDate} from './ngb-date';\nimport {DatepickerViewModel, DayViewModel, MonthViewModel} from './datepicker-view-model';\nimport {NgbCalendar} from './ngb-calendar';\nimport {isDefined} from '../util/util';\nimport {NgbDatepickerI18n} from './datepicker-i18n';\n\nexport function isChangedDate(prev: NgbDate, next: NgbDate) {\n return !dateComparator(prev, next);\n}\n\nexport function isChangedMonth(prev: NgbDate, next: NgbDate) {\n return !prev && !next ? false : !prev || !next ? true : prev.year !== next.year || prev.month !== next.month;\n}\n\nexport function dateComparator(prev: NgbDate, next: NgbDate) {\n return (!prev && !next) || (!!prev && !!next && prev.equals(next));\n}\n\nexport function checkMinBeforeMax(minDate: NgbDate, maxDate: NgbDate) {\n if (maxDate && minDate && maxDate.before(minDate)) {\n throw new Error(`'maxDate' ${maxDate} should be greater than 'minDate' ${minDate}`);\n }\n}\n\nexport function checkDateInRange(date: NgbDate, minDate: NgbDate, maxDate: NgbDate): NgbDate {\n if (date && minDate && date.before(minDate)) {\n return minDate;\n }\n if (date && maxDate && date.after(maxDate)) {\n return maxDate;\n }\n\n return date;\n}\n\nexport function isDateSelectable(date: NgbDate, state: DatepickerViewModel) {\n const {minDate, maxDate, disabled, markDisabled} = state;\n // clang-format off\n return !(\n !isDefined(date) ||\n disabled ||\n (markDisabled && markDisabled(date, {year: date.year, month: date.month})) ||\n (minDate && date.before(minDate)) ||\n (maxDate && date.after(maxDate))\n );\n // clang-format on\n}\n\nexport function generateSelectBoxMonths(calendar: NgbCalendar, date: NgbDate, minDate: NgbDate, maxDate: NgbDate) {\n if (!date) {\n return [];\n }\n\n let months = calendar.getMonths(date.year);\n\n if (minDate && date.year === minDate.year) {\n const index = months.findIndex(month => month === minDate.month);\n months = months.slice(index);\n }\n\n if (maxDate && date.year === maxDate.year) {\n const index = months.findIndex(month => month === maxDate.month);\n months = months.slice(0, index + 1);\n }\n\n return months;\n}\n\nexport function generateSelectBoxYears(date: NgbDate, minDate: NgbDate, maxDate: NgbDate) {\n if (!date) {\n return [];\n }\n\n const start = minDate && minDate.year || date.year - 10;\n const end = maxDate && maxDate.year || date.year + 10;\n\n return Array.from({length: end - start + 1}, (e, i) => start + i);\n}\n\nexport function nextMonthDisabled(calendar: NgbCalendar, date: NgbDate, maxDate: NgbDate) {\n return maxDate && calendar.getNext(date, 'm').after(maxDate);\n}\n\nexport function prevMonthDisabled(calendar: NgbCalendar, date: NgbDate, minDate: NgbDate) {\n const prevDate = calendar.getPrev(date, 'm');\n return minDate && (prevDate.year === minDate.year && prevDate.month < minDate.month ||\n prevDate.year < minDate.year && minDate.month === 1);\n}\n\nexport function buildMonths(\n calendar: NgbCalendar, date: NgbDate, state: DatepickerViewModel, i18n: NgbDatepickerI18n,\n force: boolean): MonthViewModel[] {\n const {displayMonths, months} = state;\n // move old months to a temporary array\n const monthsToReuse = months.splice(0, months.length);\n\n // generate new first dates, nullify or reuse months\n const firstDates = Array.from({length: displayMonths}, (_, i) => {\n const firstDate = calendar.getNext(date, 'm', i);\n months[i] = null;\n\n if (!force) {\n const reusedIndex = monthsToReuse.findIndex(month => month.firstDate.equals(firstDate));\n // move reused month back to months\n if (reusedIndex !== -1) {\n months[i] = monthsToReuse.splice(reusedIndex, 1)[0];\n }\n }\n\n return firstDate;\n });\n\n // rebuild nullified months\n firstDates.forEach((firstDate, i) => {\n if (months[i] === null) {\n months[i] = buildMonth(calendar, firstDate, state, i18n, monthsToReuse.shift() || {} as MonthViewModel);\n }\n });\n\n return months;\n}\n\nexport function buildMonth(\n calendar: NgbCalendar, date: NgbDate, state: DatepickerViewModel, i18n: NgbDatepickerI18n,\n month: MonthViewModel = {} as MonthViewModel): MonthViewModel {\n const {dayTemplateData, minDate, maxDate, firstDayOfWeek, markDisabled, outsideDays} = state;\n const calendarToday = calendar.getToday();\n\n month.firstDate = null;\n month.lastDate = null;\n month.number = date.month;\n month.year = date.year;\n month.weeks = month.weeks || [];\n month.weekdays = month.weekdays || [];\n\n date = getFirstViewDate(calendar, date, firstDayOfWeek);\n\n // month has weeks\n for (let week = 0; week < calendar.getWeeksPerMonth(); week++) {\n let weekObject = month.weeks[week];\n if (!weekObject) {\n weekObject = month.weeks[week] = {number: 0, days: [], collapsed: true};\n }\n const days = weekObject.days;\n\n // week has days\n for (let day = 0; day < calendar.getDaysPerWeek(); day++) {\n if (week === 0) {\n month.weekdays[day] = calendar.getWeekday(date);\n }\n\n const newDate = new NgbDate(date.year, date.month, date.day);\n const nextDate = calendar.getNext(newDate);\n\n const ariaLabel = i18n.getDayAriaLabel(newDate);\n\n // marking date as disabled\n let disabled = !!((minDate && newDate.before(minDate)) || (maxDate && newDate.after(maxDate)));\n if (!disabled && markDisabled) {\n disabled = markDisabled(newDate, {month: month.number, year: month.year});\n }\n\n // today\n let today = newDate.equals(calendarToday);\n\n // adding user-provided data to the context\n let contextUserData =\n dayTemplateData ? dayTemplateData(newDate, {month: month.number, year: month.year}) : undefined;\n\n // saving first date of the month\n if (month.firstDate === null && newDate.month === month.number) {\n month.firstDate = newDate;\n }\n\n // saving last date of the month\n if (newDate.month === month.number && nextDate.month !== month.number) {\n month.lastDate = newDate;\n }\n\n let dayObject = days[day];\n if (!dayObject) {\n dayObject = days[day] = {} as DayViewModel;\n }\n dayObject.date = newDate;\n dayObject.context = Object.assign(dayObject.context || {}, {\n $implicit: newDate,\n date: newDate,\n data: contextUserData,\n currentMonth: month.number, disabled,\n focused: false,\n selected: false, today\n });\n dayObject.tabindex = -1;\n dayObject.ariaLabel = ariaLabel;\n dayObject.hidden = false;\n\n date = nextDate;\n }\n\n weekObject.number = calendar.getWeekNumber(days.map(day => day.date), firstDayOfWeek);\n\n // marking week as collapsed\n weekObject.collapsed = outsideDays === 'collapsed' && days[0].date.month !== month.number &&\n days[days.length - 1].date.month !== month.number;\n }\n\n return month;\n}\n\nexport function getFirstViewDate(calendar: NgbCalendar, date: NgbDate, firstDayOfWeek: number): NgbDate {\n const daysPerWeek = calendar.getDaysPerWeek();\n const firstMonthDate = new NgbDate(date.year, date.month, 1);\n const dayOfWeek = calendar.getWeekday(firstMonthDate) % daysPerWeek;\n return calendar.getPrev(firstMonthDate, 'd', (daysPerWeek + dayOfWeek - firstDayOfWeek) % daysPerWeek);\n}\n","import {Inject, Injectable, LOCALE_ID} from '@angular/core';\nimport {FormStyle, getLocaleDayNames, getLocaleMonthNames, TranslationWidth, formatDate} from '@angular/common';\nimport {NgbDateStruct} from './ngb-date-struct';\n\nexport function NGB_DATEPICKER_18N_FACTORY(locale) {\n return new NgbDatepickerI18nDefault(locale);\n}\n\n/**\n * A service supplying i18n data to the datepicker component.\n *\n * The default implementation of this service uses the Angular locale and registered locale data for\n * weekdays and month names (as explained in the Angular i18n guide).\n *\n * It also provides a way to i18n data that depends on calendar calculations, like aria labels, day, week and year\n * numerals. For other static labels the datepicker uses the default Angular i18n.\n *\n * See the [i18n demo](#/components/datepicker/examples#i18n) and\n * [Hebrew calendar demo](#/components/datepicker/calendars#hebrew) on how to extend this class and define\n * a custom provider for i18n.\n */\n@Injectable({providedIn: 'root', useFactory: NGB_DATEPICKER_18N_FACTORY, deps: [LOCALE_ID]})\nexport abstract class NgbDatepickerI18n {\n /**\n * Returns the short weekday name to display in the heading of the month view.\n *\n * With default calendar we use ISO 8601: 'weekday' is 1=Mon ... 7=Sun.\n */\n abstract getWeekdayShortName(weekday: number): string;\n\n /**\n * Returns the short month name to display in the date picker navigation.\n *\n * With default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec.\n */\n abstract getMonthShortName(month: number, year?: number): string;\n\n /**\n * Returns the full month name to display in the date picker navigation.\n *\n * With default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec.\n */\n abstract getMonthFullName(month: number, year?: number): string;\n\n /**\n * Returns the value of the `aria-label` attribute for a specific date.\n *\n * @since 2.0.0\n */\n abstract getDayAriaLabel(date: NgbDateStruct): string;\n\n /**\n * Returns the textual representation of a day that is rendered in a day cell.\n *\n * @since 3.0.0\n */\n getDayNumerals(date: NgbDateStruct): string { return `${date.day}`; }\n\n /**\n * Returns the textual representation of a week number rendered by datepicker.\n *\n * @since 3.0.0\n */\n getWeekNumerals(weekNumber: number): string { return `${weekNumber}`; }\n\n /**\n * Returns the textual representation of a year that is rendered in the datepicker year select box.\n *\n * @since 3.0.0\n */\n getYearNumerals(year: number): string { return `${year}`; }\n}\n\n@Injectable()\nexport class NgbDatepickerI18nDefault extends NgbDatepickerI18n {\n private _weekdaysShort: Array;\n private _monthsShort: Array;\n private _monthsFull: Array;\n\n constructor(@Inject(LOCALE_ID) private _locale: string) {\n super();\n\n const weekdaysStartingOnSunday = getLocaleDayNames(_locale, FormStyle.Standalone, TranslationWidth.Short);\n this._weekdaysShort = weekdaysStartingOnSunday.map((day, index) => weekdaysStartingOnSunday[(index + 1) % 7]);\n\n this._monthsShort = getLocaleMonthNames(_locale, FormStyle.Standalone, TranslationWidth.Abbreviated);\n this._monthsFull = getLocaleMonthNames(_locale, FormStyle.Standalone, TranslationWidth.Wide);\n }\n\n getWeekdayShortName(weekday: number): string { return this._weekdaysShort[weekday - 1]; }\n\n getMonthShortName(month: number): string { return this._monthsShort[month - 1]; }\n\n getMonthFullName(month: number): string { return this._monthsFull[month - 1]; }\n\n getDayAriaLabel(date: NgbDateStruct): string {\n const jsDate = new Date(date.year, date.month - 1, date.day);\n return formatDate(jsDate, 'fullDate', this._locale);\n }\n}\n","import {NgbCalendar, NgbPeriod} from './ngb-calendar';\nimport {NgbDate} from './ngb-date';\nimport {NgbDateStruct} from './ngb-date-struct';\nimport {DatepickerViewModel, NgbDayTemplateData, NgbMarkDisabled} from './datepicker-view-model';\nimport {Injectable} from '@angular/core';\nimport {isInteger, toInteger} from '../util/util';\nimport {Observable, Subject} from 'rxjs';\nimport {\n buildMonths,\n checkDateInRange,\n checkMinBeforeMax,\n isChangedDate,\n isChangedMonth,\n isDateSelectable,\n generateSelectBoxYears,\n generateSelectBoxMonths,\n prevMonthDisabled,\n nextMonthDisabled\n} from './datepicker-tools';\n\nimport {filter} from 'rxjs/operators';\nimport {NgbDatepickerI18n} from './datepicker-i18n';\n\n@Injectable()\nexport class NgbDatepickerService {\n private _model$ = new Subject();\n\n private _select$ = new Subject();\n\n private _state: DatepickerViewModel = {\n disabled: false,\n displayMonths: 1,\n firstDayOfWeek: 1,\n focusVisible: false,\n months: [],\n navigation: 'select',\n outsideDays: 'visible',\n prevDisabled: false,\n nextDisabled: false,\n selectBoxes: {years: [], months: []},\n selectedDate: null\n };\n\n get model$(): Observable { return this._model$.pipe(filter(model => model.months.length > 0)); }\n\n get select$(): Observable { return this._select$.pipe(filter(date => date !== null)); }\n\n set dayTemplateData(dayTemplateData: NgbDayTemplateData) {\n if (this._state.dayTemplateData !== dayTemplateData) {\n this._nextState({dayTemplateData});\n }\n }\n\n set disabled(disabled: boolean) {\n if (this._state.disabled !== disabled) {\n this._nextState({disabled});\n }\n }\n\n set displayMonths(displayMonths: number) {\n displayMonths = toInteger(displayMonths);\n if (isInteger(displayMonths) && displayMonths > 0 && this._state.displayMonths !== displayMonths) {\n this._nextState({displayMonths});\n }\n }\n\n set firstDayOfWeek(firstDayOfWeek: number) {\n firstDayOfWeek = toInteger(firstDayOfWeek);\n if (isInteger(firstDayOfWeek) && firstDayOfWeek >= 0 && this._state.firstDayOfWeek !== firstDayOfWeek) {\n this._nextState({firstDayOfWeek});\n }\n }\n\n set focusVisible(focusVisible: boolean) {\n if (this._state.focusVisible !== focusVisible && !this._state.disabled) {\n this._nextState({focusVisible});\n }\n }\n\n set maxDate(date: NgbDate) {\n const maxDate = this.toValidDate(date, null);\n if (isChangedDate(this._state.maxDate, maxDate)) {\n this._nextState({maxDate});\n }\n }\n\n set markDisabled(markDisabled: NgbMarkDisabled) {\n if (this._state.markDisabled !== markDisabled) {\n this._nextState({markDisabled});\n }\n }\n\n set minDate(date: NgbDate) {\n const minDate = this.toValidDate(date, null);\n if (isChangedDate(this._state.minDate, minDate)) {\n this._nextState({minDate});\n }\n }\n\n set navigation(navigation: 'select' | 'arrows' | 'none') {\n if (this._state.navigation !== navigation) {\n this._nextState({navigation});\n }\n }\n\n set outsideDays(outsideDays: 'visible' | 'collapsed' | 'hidden') {\n if (this._state.outsideDays !== outsideDays) {\n this._nextState({outsideDays});\n }\n }\n\n constructor(private _calendar: NgbCalendar, private _i18n: NgbDatepickerI18n) {}\n\n focus(date: NgbDate) {\n if (!this._state.disabled && this._calendar.isValid(date) && isChangedDate(this._state.focusDate, date)) {\n this._nextState({focusDate: date});\n }\n }\n\n focusMove(period?: NgbPeriod, number?: number) {\n this.focus(this._calendar.getNext(this._state.focusDate, period, number));\n }\n\n focusSelect() {\n if (isDateSelectable(this._state.focusDate, this._state)) {\n this.select(this._state.focusDate, {emitEvent: true});\n }\n }\n\n open(date: NgbDate) {\n const firstDate = this.toValidDate(date, this._calendar.getToday());\n if (!this._state.disabled && (!this._state.firstDate || isChangedMonth(this._state.firstDate, date))) {\n this._nextState({firstDate});\n }\n }\n\n select(date: NgbDate, options: {emitEvent?: boolean} = {}) {\n const selectedDate = this.toValidDate(date, null);\n if (!this._state.disabled) {\n if (isChangedDate(this._state.selectedDate, selectedDate)) {\n this._nextState({selectedDate});\n }\n\n if (options.emitEvent && isDateSelectable(selectedDate, this._state)) {\n this._select$.next(selectedDate);\n }\n }\n }\n\n toValidDate(date: NgbDateStruct, defaultValue?: NgbDate): NgbDate {\n const ngbDate = NgbDate.from(date);\n if (defaultValue === undefined) {\n defaultValue = this._calendar.getToday();\n }\n return this._calendar.isValid(ngbDate) ? ngbDate : defaultValue;\n }\n\n private _nextState(patch: Partial) {\n const newState = this._updateState(patch);\n this._patchContexts(newState);\n this._state = newState;\n this._model$.next(this._state);\n }\n\n private _patchContexts(state: DatepickerViewModel) {\n const {months, displayMonths, selectedDate, focusDate, focusVisible, disabled, outsideDays} = state;\n state.months.forEach(month => {\n month.weeks.forEach(week => {\n week.days.forEach(day => {\n\n // patch focus flag\n if (focusDate) {\n day.context.focused = focusDate.equals(day.date) && focusVisible;\n }\n\n // calculating tabindex\n day.tabindex = !disabled && day.date.equals(focusDate) && focusDate.month === month.number ? 0 : -1;\n\n // override context disabled\n if (disabled === true) {\n day.context.disabled = true;\n }\n\n // patch selection flag\n if (selectedDate !== undefined) {\n day.context.selected = selectedDate !== null && selectedDate.equals(day.date);\n }\n\n // visibility\n if (month.number !== day.date.month) {\n day.hidden = outsideDays === 'hidden' || outsideDays === 'collapsed' ||\n (displayMonths > 1 && day.date.after(months[0].firstDate) &&\n day.date.before(months[displayMonths - 1].lastDate));\n }\n });\n });\n });\n }\n\n private _updateState(patch: Partial): DatepickerViewModel {\n // patching fields\n const state = Object.assign({}, this._state, patch);\n\n let startDate = state.firstDate;\n\n // min/max dates changed\n if ('minDate' in patch || 'maxDate' in patch) {\n checkMinBeforeMax(state.minDate, state.maxDate);\n state.focusDate = checkDateInRange(state.focusDate, state.minDate, state.maxDate);\n state.firstDate = checkDateInRange(state.firstDate, state.minDate, state.maxDate);\n startDate = state.focusDate;\n }\n\n // disabled\n if ('disabled' in patch) {\n state.focusVisible = false;\n }\n\n // initial rebuild via 'select()'\n if ('selectedDate' in patch && this._state.months.length === 0) {\n startDate = state.selectedDate;\n }\n\n // terminate early if only focus visibility was changed\n if ('focusVisible' in patch) {\n return state;\n }\n\n // focus date changed\n if ('focusDate' in patch) {\n state.focusDate = checkDateInRange(state.focusDate, state.minDate, state.maxDate);\n startDate = state.focusDate;\n\n // nothing to rebuild if only focus changed and it is still visible\n if (state.months.length !== 0 && !state.focusDate.before(state.firstDate) &&\n !state.focusDate.after(state.lastDate)) {\n return state;\n }\n }\n\n // first date changed\n if ('firstDate' in patch) {\n state.firstDate = checkDateInRange(state.firstDate, state.minDate, state.maxDate);\n startDate = state.firstDate;\n }\n\n // rebuilding months\n if (startDate) {\n const forceRebuild = 'dayTemplateData' in patch || 'firstDayOfWeek' in patch || 'markDisabled' in patch ||\n 'minDate' in patch || 'maxDate' in patch || 'disabled' in patch || 'outsideDays' in patch;\n\n const months = buildMonths(this._calendar, startDate, state, this._i18n, forceRebuild);\n\n // updating months and boundary dates\n state.months = months;\n state.firstDate = months.length > 0 ? months[0].firstDate : undefined;\n state.lastDate = months.length > 0 ? months[months.length - 1].lastDate : undefined;\n\n // reset selected date if 'markDisabled' returns true\n if ('selectedDate' in patch && !isDateSelectable(state.selectedDate, state)) {\n state.selectedDate = null;\n }\n\n // adjusting focus after months were built\n if ('firstDate' in patch) {\n if (state.focusDate === undefined || state.focusDate.before(state.firstDate) ||\n state.focusDate.after(state.lastDate)) {\n state.focusDate = startDate;\n }\n }\n\n // adjusting months/years for the select box navigation\n const yearChanged = !this._state.firstDate || this._state.firstDate.year !== state.firstDate.year;\n const monthChanged = !this._state.firstDate || this._state.firstDate.month !== state.firstDate.month;\n if (state.navigation === 'select') {\n // years -> boundaries (min/max were changed)\n if ('minDate' in patch || 'maxDate' in patch || state.selectBoxes.years.length === 0 || yearChanged) {\n state.selectBoxes.years = generateSelectBoxYears(state.firstDate, state.minDate, state.maxDate);\n }\n\n // months -> when current year or boundaries change\n if ('minDate' in patch || 'maxDate' in patch || state.selectBoxes.months.length === 0 || yearChanged) {\n state.selectBoxes.months =\n generateSelectBoxMonths(this._calendar, state.firstDate, state.minDate, state.maxDate);\n }\n } else {\n state.selectBoxes = {years: [], months: []};\n }\n\n // updating navigation arrows -> boundaries change (min/max) or month/year changes\n if ((state.navigation === 'arrows' || state.navigation === 'select') &&\n (monthChanged || yearChanged || 'minDate' in patch || 'maxDate' in patch || 'disabled' in patch)) {\n state.prevDisabled = state.disabled || prevMonthDisabled(this._calendar, state.firstDate, state.minDate);\n state.nextDisabled = state.disabled || nextMonthDisabled(this._calendar, state.lastDate, state.maxDate);\n }\n }\n\n return state;\n }\n}\n","export enum Key {\n Tab = 9,\n Enter = 13,\n Escape = 27,\n Space = 32,\n PageUp = 33,\n PageDown = 34,\n End = 35,\n Home = 36,\n ArrowLeft = 37,\n ArrowUp = 38,\n ArrowRight = 39,\n ArrowDown = 40\n}\n","import {Injectable} from '@angular/core';\nimport {NgbDatepickerService} from './datepicker-service';\nimport {NgbCalendar} from './ngb-calendar';\nimport {Key} from '../util/key';\nimport {NgbDate} from './ngb-date';\n\n@Injectable()\nexport class NgbDatepickerKeyMapService {\n private _minDate: NgbDate;\n private _maxDate: NgbDate;\n private _firstViewDate: NgbDate;\n private _lastViewDate: NgbDate;\n\n constructor(private _service: NgbDatepickerService, private _calendar: NgbCalendar) {\n _service.model$.subscribe(model => {\n this._minDate = model.minDate;\n this._maxDate = model.maxDate;\n this._firstViewDate = model.firstDate;\n this._lastViewDate = model.lastDate;\n });\n }\n\n processKey(event: KeyboardEvent) {\n // tslint:disable-next-line:deprecation\n switch (event.which) {\n case Key.PageUp:\n this._service.focusMove(event.shiftKey ? 'y' : 'm', -1);\n break;\n case Key.PageDown:\n this._service.focusMove(event.shiftKey ? 'y' : 'm', 1);\n break;\n case Key.End:\n this._service.focus(event.shiftKey ? this._maxDate : this._lastViewDate);\n break;\n case Key.Home:\n this._service.focus(event.shiftKey ? this._minDate : this._firstViewDate);\n break;\n case Key.ArrowLeft:\n this._service.focusMove('d', -1);\n break;\n case Key.ArrowUp:\n this._service.focusMove('d', -this._calendar.getDaysPerWeek());\n break;\n case Key.ArrowRight:\n this._service.focusMove('d', 1);\n break;\n case Key.ArrowDown:\n this._service.focusMove('d', this._calendar.getDaysPerWeek());\n break;\n case Key.Enter:\n case Key.Space:\n this._service.focusSelect();\n break;\n default:\n return;\n }\n\n // note 'return' in default case\n event.preventDefault();\n event.stopPropagation();\n }\n}\n","import {NgbDate} from './ngb-date';\nimport {NgbDateStruct} from './ngb-date-struct';\nimport {DayTemplateContext} from './datepicker-day-template-context';\n\nexport type NgbMarkDisabled = (date: NgbDateStruct, current: {year: number, month: number}) => boolean;\nexport type NgbDayTemplateData = (date: NgbDateStruct, current: {year: number, month: number}) => any;\n\nexport type DayViewModel = {\n date: NgbDate,\n context: DayTemplateContext,\n tabindex: number,\n ariaLabel: string,\n hidden: boolean\n};\n\nexport type WeekViewModel = {\n number: number,\n days: DayViewModel[],\n collapsed: boolean\n};\n\nexport type MonthViewModel = {\n firstDate: NgbDate,\n lastDate: NgbDate,\n number: number,\n year: number,\n weeks: WeekViewModel[],\n weekdays: number[]\n};\n\n// clang-format off\nexport type DatepickerViewModel = {\n dayTemplateData?: NgbDayTemplateData,\n disabled: boolean,\n displayMonths: number,\n firstDate?: NgbDate,\n firstDayOfWeek: number,\n focusDate?: NgbDate,\n focusVisible: boolean,\n lastDate?: NgbDate,\n markDisabled?: NgbMarkDisabled,\n maxDate?: NgbDate,\n minDate?: NgbDate,\n months: MonthViewModel[],\n navigation: 'select' | 'arrows' | 'none',\n outsideDays: 'visible' | 'collapsed' | 'hidden',\n prevDisabled: boolean,\n nextDisabled: boolean,\n selectBoxes: {\n years: number[],\n months: number[]\n },\n selectedDate: NgbDate\n};\n// clang-format on\n\nexport enum NavigationEvent {\n PREV,\n NEXT\n}\n","import {Injectable, TemplateRef} from '@angular/core';\nimport {DayTemplateContext} from './datepicker-day-template-context';\nimport {NgbDateStruct} from './ngb-date-struct';\n\n/**\n * A configuration service for the [`NgbDatepicker`](#/components/datepicker/api#NgbDatepicker) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the datepickers used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbDatepickerConfig {\n dayTemplate: TemplateRef;\n dayTemplateData: (date: NgbDateStruct, current: {year: number, month: number}) => any;\n footerTemplate: TemplateRef;\n displayMonths = 1;\n firstDayOfWeek = 1;\n markDisabled: (date: NgbDateStruct, current: {year: number, month: number}) => boolean;\n minDate: NgbDateStruct;\n maxDate: NgbDateStruct;\n navigation: 'select' | 'arrows' | 'none' = 'select';\n outsideDays: 'visible' | 'collapsed' | 'hidden' = 'visible';\n showWeekdays = true;\n showWeekNumbers = false;\n startDate: {year: number, month: number};\n}\n","import {Injectable} from '@angular/core';\nimport {NgbDateStruct} from '../ngb-date-struct';\nimport {isInteger} from '../../util/util';\n\nexport function NGB_DATEPICKER_DATE_ADAPTER_FACTORY() {\n return new NgbDateStructAdapter();\n}\n\n/**\n * An abstract service that does the conversion between the internal datepicker `NgbDateStruct` model and\n * any provided user date model `D`, ex. a string, a native date, etc.\n *\n * The adapter is used **only** for conversion when binding datepicker to a form control,\n * ex. `[(ngModel)]=\"userDateModel\"`. Here `userDateModel` can be of any type.\n *\n * The default datepicker implementation assumes we use `NgbDateStruct` as a user model.\n *\n * See the [date format overview](#/components/datepicker/overview#date-model) for more details\n * and the [custom adapter demo](#/components/datepicker/examples#adapter) for an example.\n */\n@Injectable({providedIn: 'root', useFactory: NGB_DATEPICKER_DATE_ADAPTER_FACTORY})\nexport abstract class NgbDateAdapter {\n /**\n * Converts a user-model date of type `D` to an `NgbDateStruct` for internal use.\n */\n abstract fromModel(value: D): NgbDateStruct;\n\n /**\n * Converts an internal `NgbDateStruct` date to a user-model date of type `D`.\n */\n abstract toModel(date: NgbDateStruct): D;\n}\n\n@Injectable()\nexport class NgbDateStructAdapter extends NgbDateAdapter {\n /**\n * Converts a NgbDateStruct value into NgbDateStruct value\n */\n fromModel(date: NgbDateStruct): NgbDateStruct {\n return (date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day)) ?\n {year: date.year, month: date.month, day: date.day} :\n null;\n }\n\n /**\n * Converts a NgbDateStruct value into NgbDateStruct value\n */\n toModel(date: NgbDateStruct): NgbDateStruct {\n return (date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day)) ?\n {year: date.year, month: date.month, day: date.day} :\n null;\n }\n}\n","import {fromEvent, merge, Subject} from 'rxjs';\nimport {filter, take, takeUntil} from 'rxjs/operators';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {NgbCalendar} from './ngb-calendar';\nimport {NgbDate} from './ngb-date';\nimport {NgbDatepickerService} from './datepicker-service';\nimport {NgbDatepickerKeyMapService} from './datepicker-keymap-service';\nimport {DatepickerViewModel, NavigationEvent} from './datepicker-view-model';\nimport {DayTemplateContext} from './datepicker-day-template-context';\nimport {NgbDatepickerConfig} from './datepicker-config';\nimport {NgbDateAdapter} from './adapters/ngb-date-adapter';\nimport {NgbDateStruct} from './ngb-date-struct';\nimport {NgbDatepickerI18n} from './datepicker-i18n';\nimport {isChangedDate, isChangedMonth} from './datepicker-tools';\nimport {hasClassName} from '../util/util';\n\nconst NGB_DATEPICKER_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgbDatepicker),\n multi: true\n};\n\n/**\n * An event emitted right before the navigation happens and the month displayed by the datepicker changes.\n */\nexport interface NgbDatepickerNavigateEvent {\n /**\n * The currently displayed month.\n */\n current: {year: number, month: number};\n\n /**\n * The month we're navigating to.\n */\n next: {year: number, month: number};\n\n /**\n * Calling this function will prevent navigation from happening.\n *\n * @since 4.1.0\n */\n preventDefault: () => void;\n}\n\n/**\n * A highly configurable component that helps you with selecting calendar dates.\n *\n * `NgbDatepicker` is meant to be displayed inline on a page or put inside a popup.\n */\n@Component({\n exportAs: 'ngbDatepicker',\n selector: 'ngb-datepicker',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./datepicker.scss'],\n template: `\n \n
\n
\n
\n\n
\n \n \n
\n\n
\n \n
\n
1 && navigation === 'select')\"\n class=\"ngb-dp-month-name\">\n {{ i18n.getMonthFullName(month.number, month.year) }} {{ i18n.getYearNumerals(month.year) }}\n
\n \n \n
\n
\n
\n\n \n `,\n providers: [NGB_DATEPICKER_VALUE_ACCESSOR, NgbDatepickerService, NgbDatepickerKeyMapService]\n})\nexport class NgbDatepicker implements OnDestroy,\n OnChanges, OnInit, AfterViewInit, ControlValueAccessor {\n model: DatepickerViewModel;\n\n @ViewChild('months', {static: true}) private _monthsEl: ElementRef;\n private _controlValue: NgbDate;\n private _destroyed$ = new Subject();\n\n /**\n * The reference to a custom template for the day.\n *\n * Allows to completely override the way a day 'cell' in the calendar is displayed.\n *\n * See [`DayTemplateContext`](#/components/datepicker/api#DayTemplateContext) for the data you get inside.\n */\n @Input() dayTemplate: TemplateRef;\n\n /**\n * The callback to pass any arbitrary data to the template cell via the\n * [`DayTemplateContext`](#/components/datepicker/api#DayTemplateContext)'s `data` parameter.\n *\n * `current` is the month that is currently displayed by the datepicker.\n *\n * @since 3.3.0\n */\n @Input() dayTemplateData: (date: NgbDate, current: {year: number, month: number}) => any;\n\n /**\n * The number of months to display.\n */\n @Input() displayMonths: number;\n\n /**\n * The first day of the week.\n *\n * With default calendar we use ISO 8601: 'weekday' is 1=Mon ... 7=Sun.\n */\n @Input() firstDayOfWeek: number;\n\n /**\n * The reference to the custom template for the datepicker footer.\n *\n * @since 3.3.0\n */\n @Input() footerTemplate: TemplateRef;\n\n /**\n * The callback to mark some dates as disabled.\n *\n * It is called for each new date when navigating to a different month.\n *\n * `current` is the month that is currently displayed by the datepicker.\n */\n @Input() markDisabled: (date: NgbDate, current: {year: number, month: number}) => boolean;\n\n /**\n * The latest date that can be displayed or selected.\n *\n * If not provided, 'year' select box will display 10 years after the current month.\n */\n @Input() maxDate: NgbDateStruct;\n\n /**\n * The earliest date that can be displayed or selected.\n *\n * If not provided, 'year' select box will display 10 years before the current month.\n */\n @Input() minDate: NgbDateStruct;\n\n /**\n * Navigation type.\n *\n * * `\"select\"` - select boxes for month and navigation arrows\n * * `\"arrows\"` - only navigation arrows\n * * `\"none\"` - no navigation visible at all\n */\n @Input() navigation: 'select' | 'arrows' | 'none';\n\n /**\n * The way of displaying days that don't belong to the current month.\n *\n * * `\"visible\"` - days are visible\n * * `\"hidden\"` - days are hidden, white space preserved\n * * `\"collapsed\"` - days are collapsed, so the datepicker height might change between months\n *\n * For the 2+ months view, days in between months are never shown.\n */\n @Input() outsideDays: 'visible' | 'collapsed' | 'hidden';\n\n /**\n * If `true`, weekdays will be displayed.\n */\n @Input() showWeekdays: boolean;\n\n /**\n * If `true`, week numbers will be displayed.\n */\n @Input() showWeekNumbers: boolean;\n\n /**\n * The date to open calendar with.\n *\n * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec.\n * If nothing or invalid date is provided, calendar will open with current month.\n *\n * You could use `navigateTo(date)` method as an alternative.\n */\n @Input() startDate: {year: number, month: number, day?: number};\n\n /**\n * An event emitted right before the navigation happens and displayed month changes.\n *\n * See [`NgbDatepickerNavigateEvent`](#/components/datepicker/api#NgbDatepickerNavigateEvent) for the payload info.\n */\n @Output() navigate = new EventEmitter();\n\n /**\n * An event emitted when user selects a date using keyboard or mouse.\n *\n * The payload of the event is currently selected `NgbDate`.\n */\n @Output() select = new EventEmitter();\n\n onChange = (_: any) => {};\n onTouched = () => {};\n\n constructor(\n private _keyMapService: NgbDatepickerKeyMapService, public _service: NgbDatepickerService,\n private _calendar: NgbCalendar, public i18n: NgbDatepickerI18n, config: NgbDatepickerConfig,\n private _cd: ChangeDetectorRef, private _elementRef: ElementRef,\n private _ngbDateAdapter: NgbDateAdapter, private _ngZone: NgZone) {\n ['dayTemplate', 'dayTemplateData', 'displayMonths', 'firstDayOfWeek', 'footerTemplate', 'markDisabled', 'minDate',\n 'maxDate', 'navigation', 'outsideDays', 'showWeekdays', 'showWeekNumbers', 'startDate']\n .forEach(input => this[input] = config[input]);\n\n _service.select$.pipe(takeUntil(this._destroyed$)).subscribe(date => { this.select.emit(date); });\n\n _service.model$.pipe(takeUntil(this._destroyed$)).subscribe(model => {\n const newDate = model.firstDate;\n const oldDate = this.model ? this.model.firstDate : null;\n\n let navigationPrevented = false;\n // emitting navigation event if the first month changes\n if (!newDate.equals(oldDate)) {\n this.navigate.emit({\n current: oldDate ? {year: oldDate.year, month: oldDate.month} : null,\n next: {year: newDate.year, month: newDate.month},\n preventDefault: () => navigationPrevented = true\n });\n\n // can't prevent the very first navigation\n if (navigationPrevented && oldDate !== null) {\n this._service.open(oldDate);\n return;\n }\n }\n\n const newSelectedDate = model.selectedDate;\n const newFocusedDate = model.focusDate;\n const oldFocusedDate = this.model ? this.model.focusDate : null;\n\n this.model = model;\n\n // handling selection change\n if (isChangedDate(newSelectedDate, this._controlValue)) {\n this._controlValue = newSelectedDate;\n this.onTouched();\n this.onChange(this._ngbDateAdapter.toModel(newSelectedDate));\n }\n\n // handling focus change\n if (isChangedDate(newFocusedDate, oldFocusedDate) && oldFocusedDate && model.focusVisible) {\n this.focus();\n }\n\n _cd.markForCheck();\n });\n }\n\n focus() {\n this._ngZone.onStable.asObservable().pipe(take(1)).subscribe(() => {\n const elementToFocus =\n this._elementRef.nativeElement.querySelector('div.ngb-dp-day[tabindex=\"0\"]');\n if (elementToFocus) {\n elementToFocus.focus();\n }\n });\n }\n\n /**\n * Navigates to the provided date.\n *\n * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec.\n * If nothing or invalid date provided calendar will open current month.\n *\n * Use the `[startDate]` input as an alternative.\n */\n navigateTo(date?: {year: number, month: number, day?: number}) {\n this._service.open(NgbDate.from(date ? date.day ? date as NgbDateStruct : {...date, day: 1} : null));\n }\n\n ngAfterViewInit() {\n this._ngZone.runOutsideAngular(() => {\n const focusIns$ = fromEvent(this._monthsEl.nativeElement, 'focusin');\n const focusOuts$ = fromEvent(this._monthsEl.nativeElement, 'focusout');\n\n // we're changing 'focusVisible' only when entering or leaving months view\n // and ignoring all focus events where both 'target' and 'related' target are day cells\n merge(focusIns$, focusOuts$)\n .pipe(\n filter(\n ({target, relatedTarget}) =>\n !(hasClassName(target, 'ngb-dp-day') && hasClassName(relatedTarget, 'ngb-dp-day'))),\n takeUntil(this._destroyed$))\n .subscribe(({type}) => this._ngZone.run(() => this._service.focusVisible = type === 'focusin'));\n });\n }\n\n ngOnDestroy() { this._destroyed$.next(); }\n\n ngOnInit() {\n if (this.model === undefined) {\n ['dayTemplateData', 'displayMonths', 'markDisabled', 'firstDayOfWeek', 'navigation', 'minDate', 'maxDate',\n 'outsideDays']\n .forEach(input => this._service[input] = this[input]);\n this.navigateTo(this.startDate);\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n ['dayTemplateData', 'displayMonths', 'markDisabled', 'firstDayOfWeek', 'navigation', 'minDate', 'maxDate',\n 'outsideDays']\n .filter(input => input in changes)\n .forEach(input => this._service[input] = this[input]);\n\n if ('startDate' in changes) {\n const {currentValue, previousValue} = changes.startDate;\n if (isChangedMonth(previousValue, currentValue)) {\n this.navigateTo(this.startDate);\n }\n }\n }\n\n onDateSelect(date: NgbDate) {\n this._service.focus(date);\n this._service.select(date, {emitEvent: true});\n }\n\n onKeyDown(event: KeyboardEvent) { this._keyMapService.processKey(event); }\n\n onNavigateDateSelect(date: NgbDate) { this._service.open(date); }\n\n onNavigateEvent(event: NavigationEvent) {\n switch (event) {\n case NavigationEvent.PREV:\n this._service.open(this._calendar.getPrev(this.model.firstDate, 'm', 1));\n break;\n case NavigationEvent.NEXT:\n this._service.open(this._calendar.getNext(this.model.firstDate, 'm', 1));\n break;\n }\n }\n\n registerOnChange(fn: (value: any) => any): void { this.onChange = fn; }\n\n registerOnTouched(fn: () => any): void { this.onTouched = fn; }\n\n setDisabledState(isDisabled: boolean) { this._service.disabled = isDisabled; }\n\n writeValue(value) {\n this._controlValue = NgbDate.from(this._ngbDateAdapter.fromModel(value));\n this._service.select(this._controlValue);\n }\n}\n","import {Component, Input, TemplateRef, Output, EventEmitter, ViewEncapsulation} from '@angular/core';\nimport {MonthViewModel, DayViewModel} from './datepicker-view-model';\nimport {NgbDate} from './ngb-date';\nimport {NgbDatepickerI18n} from './datepicker-i18n';\nimport {DayTemplateContext} from './datepicker-day-template-context';\n\n@Component({\n selector: 'ngb-datepicker-month-view',\n host: {'role': 'grid'},\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./datepicker-month-view.scss'],\n template: `\n
\n
\n
\n {{ i18n.getWeekdayShortName(w) }}\n
\n
\n \n
\n
{{ i18n.getWeekNumerals(week.number) }}
\n
\n \n \n \n
\n
\n
\n `\n})\nexport class NgbDatepickerMonthView {\n @Input() dayTemplate: TemplateRef;\n @Input() month: MonthViewModel;\n @Input() showWeekdays;\n @Input() showWeekNumbers;\n\n @Output() select = new EventEmitter();\n\n constructor(public i18n: NgbDatepickerI18n) {}\n\n doSelect(day: DayViewModel) {\n if (!day.context.disabled && !day.hidden) {\n this.select.emit(day.date);\n }\n }\n}\n","import {Component, Input, Output, EventEmitter, ChangeDetectionStrategy, ViewEncapsulation} from '@angular/core';\nimport {NavigationEvent, MonthViewModel} from './datepicker-view-model';\nimport {NgbDate} from './ngb-date';\nimport {NgbDatepickerI18n} from './datepicker-i18n';\n\n@Component({\n selector: 'ngb-datepicker-navigation',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./datepicker-navigation.scss'],\n template: `\n
\n \n
\n \n \n\n \n
0\">
\n
\n {{ i18n.getMonthFullName(month.number, month.year) }} {{ i18n.getYearNumerals(month.year) }}\n
\n
\n
\n
\n \n
\n `\n})\nexport class NgbDatepickerNavigation {\n navigation = NavigationEvent;\n\n @Input() date: NgbDate;\n @Input() disabled: boolean;\n @Input() months: MonthViewModel[] = [];\n @Input() showSelect: boolean;\n @Input() prevDisabled: boolean;\n @Input() nextDisabled: boolean;\n @Input() selectBoxes: {years: number[], months: number[]};\n\n @Output() navigate = new EventEmitter();\n @Output() select = new EventEmitter();\n\n constructor(public i18n: NgbDatepickerI18n) {}\n}\n","import {NgZone} from '@angular/core';\nimport {fromEvent, Observable, race} from 'rxjs';\nimport {delay, filter, map, takeUntil, withLatestFrom} from 'rxjs/operators';\nimport {Key} from './key';\nimport {closest} from './util';\n\nconst isContainedIn = (element: HTMLElement, array?: HTMLElement[]) =>\n array ? array.some(item => item.contains(element)) : false;\n\nconst matchesSelectorIfAny = (element: HTMLElement, selector?: string) =>\n !selector || closest(element, selector) != null;\n\n// we'll have to use 'touch' events instead of 'mouse' events on iOS and add a more significant delay\n// to avoid re-opening when handling (click) on a toggling element\n// TODO: use proper Angular platform detection when NgbAutoClose becomes a service and we can inject PLATFORM_ID\nlet iOS = false;\nif (typeof navigator !== 'undefined') {\n iOS = !!navigator.userAgent && /iPad|iPhone|iPod/.test(navigator.userAgent);\n}\n\nexport function ngbAutoClose(\n zone: NgZone, document: any, type: boolean | 'inside' | 'outside', close: () => void, closed$: Observable,\n insideElements: HTMLElement[], ignoreElements?: HTMLElement[], insideSelector?: string) {\n // closing on ESC and outside clicks\n if (type) {\n zone.runOutsideAngular(() => {\n\n const shouldCloseOnClick = (event: MouseEvent | TouchEvent) => {\n const element = event.target as HTMLElement;\n if ((event instanceof MouseEvent && event.button === 2) || isContainedIn(element, ignoreElements)) {\n return false;\n }\n if (type === 'inside') {\n return isContainedIn(element, insideElements) && matchesSelectorIfAny(element, insideSelector);\n } else if (type === 'outside') {\n return !isContainedIn(element, insideElements);\n } else /* if (type === true) */ {\n return matchesSelectorIfAny(element, insideSelector) || !isContainedIn(element, insideElements);\n }\n };\n\n const escapes$ = fromEvent(document, 'keydown')\n .pipe(\n takeUntil(closed$),\n // tslint:disable-next-line:deprecation\n filter(e => e.which === Key.Escape));\n\n\n // we have to pre-calculate 'shouldCloseOnClick' on 'mousedown/touchstart',\n // because on 'mouseup/touchend' DOM nodes might be detached\n const mouseDowns$ = fromEvent(document, iOS ? 'touchstart' : 'mousedown')\n .pipe(map(shouldCloseOnClick), takeUntil(closed$));\n\n const closeableClicks$ = fromEvent(document, iOS ? 'touchend' : 'mouseup')\n .pipe(\n withLatestFrom(mouseDowns$), filter(([_, shouldClose]) => shouldClose),\n delay(iOS ? 16 : 0), takeUntil(closed$)) as Observable;\n\n\n race([escapes$, closeableClicks$]).subscribe(() => zone.run(close));\n });\n }\n}\n","import {fromEvent, Observable} from 'rxjs';\nimport {filter, map, takeUntil, withLatestFrom} from 'rxjs/operators';\n\nimport {Key} from '../util/key';\n\n\nconst FOCUSABLE_ELEMENTS_SELECTOR = [\n 'a[href]', 'button:not([disabled])', 'input:not([disabled]):not([type=\"hidden\"])', 'select:not([disabled])',\n 'textarea:not([disabled])', '[contenteditable]', '[tabindex]:not([tabindex=\"-1\"])'\n].join(', ');\n\n/**\n * Returns first and last focusable elements inside of a given element based on specific CSS selector\n */\nexport function getFocusableBoundaryElements(element: HTMLElement): HTMLElement[] {\n const list: HTMLElement[] =\n Array.from(element.querySelectorAll(FOCUSABLE_ELEMENTS_SELECTOR) as NodeListOf)\n .filter(el => el.tabIndex !== -1);\n return [list[0], list[list.length - 1]];\n}\n\n/**\n * Function that enforces browser focus to be trapped inside a DOM element.\n *\n * Works only for clicks inside the element and navigation with 'Tab', ignoring clicks outside of the element\n *\n * @param element The element around which focus will be trapped inside\n * @param stopFocusTrap$ The observable stream. When completed the focus trap will clean up listeners\n * and free internal resources\n * @param refocusOnClick Put the focus back to the last focused element whenever a click occurs on element (default to\n * false)\n */\nexport const ngbFocusTrap = (element: HTMLElement, stopFocusTrap$: Observable, refocusOnClick = false) => {\n // last focused element\n const lastFocusedElement$ =\n fromEvent(element, 'focusin').pipe(takeUntil(stopFocusTrap$), map(e => e.target));\n\n // 'tab' / 'shift+tab' stream\n fromEvent(element, 'keydown')\n .pipe(\n takeUntil(stopFocusTrap$),\n // tslint:disable:deprecation\n filter(e => e.which === Key.Tab),\n // tslint:enable:deprecation\n withLatestFrom(lastFocusedElement$))\n .subscribe(([tabEvent, focusedElement]) => {\n const[first, last] = getFocusableBoundaryElements(element);\n\n if ((focusedElement === first || focusedElement === element) && tabEvent.shiftKey) {\n last.focus();\n tabEvent.preventDefault();\n }\n\n if (focusedElement === last && !tabEvent.shiftKey) {\n first.focus();\n tabEvent.preventDefault();\n }\n });\n\n // inside click\n if (refocusOnClick) {\n fromEvent(element, 'click')\n .pipe(takeUntil(stopFocusTrap$), withLatestFrom(lastFocusedElement$), map(arr => arr[1] as HTMLElement))\n .subscribe(lastFocusedElement => lastFocusedElement.focus());\n }\n};\n","// previous version:\n// https://github.com/angular-ui/bootstrap/blob/07c31d0731f7cb068a1932b8e01d2312b796b4ec/src/position/position.js\nexport class Positioning {\n private getAllStyles(element: HTMLElement) { return window.getComputedStyle(element); }\n\n private getStyle(element: HTMLElement, prop: string): string { return this.getAllStyles(element)[prop]; }\n\n private isStaticPositioned(element: HTMLElement): boolean {\n return (this.getStyle(element, 'position') || 'static') === 'static';\n }\n\n private offsetParent(element: HTMLElement): HTMLElement {\n let offsetParentEl = element.offsetParent || document.documentElement;\n\n while (offsetParentEl && offsetParentEl !== document.documentElement && this.isStaticPositioned(offsetParentEl)) {\n offsetParentEl = offsetParentEl.offsetParent;\n }\n\n return offsetParentEl || document.documentElement;\n }\n\n position(element: HTMLElement, round = true): ClientRect {\n let elPosition: ClientRect;\n let parentOffset: ClientRect = {width: 0, height: 0, top: 0, bottom: 0, left: 0, right: 0};\n\n if (this.getStyle(element, 'position') === 'fixed') {\n elPosition = element.getBoundingClientRect();\n elPosition = {\n top: elPosition.top,\n bottom: elPosition.bottom,\n left: elPosition.left,\n right: elPosition.right,\n height: elPosition.height,\n width: elPosition.width\n };\n } else {\n const offsetParentEl = this.offsetParent(element);\n\n elPosition = this.offset(element, false);\n\n if (offsetParentEl !== document.documentElement) {\n parentOffset = this.offset(offsetParentEl, false);\n }\n\n parentOffset.top += offsetParentEl.clientTop;\n parentOffset.left += offsetParentEl.clientLeft;\n }\n\n elPosition.top -= parentOffset.top;\n elPosition.bottom -= parentOffset.top;\n elPosition.left -= parentOffset.left;\n elPosition.right -= parentOffset.left;\n\n if (round) {\n elPosition.top = Math.round(elPosition.top);\n elPosition.bottom = Math.round(elPosition.bottom);\n elPosition.left = Math.round(elPosition.left);\n elPosition.right = Math.round(elPosition.right);\n }\n\n return elPosition;\n }\n\n offset(element: HTMLElement, round = true): ClientRect {\n const elBcr = element.getBoundingClientRect();\n const viewportOffset = {\n top: window.pageYOffset - document.documentElement.clientTop,\n left: window.pageXOffset - document.documentElement.clientLeft\n };\n\n let elOffset = {\n height: elBcr.height || element.offsetHeight,\n width: elBcr.width || element.offsetWidth,\n top: elBcr.top + viewportOffset.top,\n bottom: elBcr.bottom + viewportOffset.top,\n left: elBcr.left + viewportOffset.left,\n right: elBcr.right + viewportOffset.left\n };\n\n if (round) {\n elOffset.height = Math.round(elOffset.height);\n elOffset.width = Math.round(elOffset.width);\n elOffset.top = Math.round(elOffset.top);\n elOffset.bottom = Math.round(elOffset.bottom);\n elOffset.left = Math.round(elOffset.left);\n elOffset.right = Math.round(elOffset.right);\n }\n\n return elOffset;\n }\n\n /*\n Return false if the element to position is outside the viewport\n */\n positionElements(hostElement: HTMLElement, targetElement: HTMLElement, placement: string, appendToBody?: boolean):\n boolean {\n const[placementPrimary = 'top', placementSecondary = 'center'] = placement.split('-');\n\n const hostElPosition = appendToBody ? this.offset(hostElement, false) : this.position(hostElement, false);\n const targetElStyles = this.getAllStyles(targetElement);\n\n const marginTop = parseFloat(targetElStyles.marginTop);\n const marginBottom = parseFloat(targetElStyles.marginBottom);\n const marginLeft = parseFloat(targetElStyles.marginLeft);\n const marginRight = parseFloat(targetElStyles.marginRight);\n\n let topPosition = 0;\n let leftPosition = 0;\n\n switch (placementPrimary) {\n case 'top':\n topPosition = (hostElPosition.top - (targetElement.offsetHeight + marginTop + marginBottom));\n break;\n case 'bottom':\n topPosition = (hostElPosition.top + hostElPosition.height);\n break;\n case 'left':\n leftPosition = (hostElPosition.left - (targetElement.offsetWidth + marginLeft + marginRight));\n break;\n case 'right':\n leftPosition = (hostElPosition.left + hostElPosition.width);\n break;\n }\n\n switch (placementSecondary) {\n case 'top':\n topPosition = hostElPosition.top;\n break;\n case 'bottom':\n topPosition = hostElPosition.top + hostElPosition.height - targetElement.offsetHeight;\n break;\n case 'left':\n leftPosition = hostElPosition.left;\n break;\n case 'right':\n leftPosition = hostElPosition.left + hostElPosition.width - targetElement.offsetWidth;\n break;\n case 'center':\n if (placementPrimary === 'top' || placementPrimary === 'bottom') {\n leftPosition = (hostElPosition.left + hostElPosition.width / 2 - targetElement.offsetWidth / 2);\n } else {\n topPosition = (hostElPosition.top + hostElPosition.height / 2 - targetElement.offsetHeight / 2);\n }\n break;\n }\n\n /// The translate3d/gpu acceleration render a blurry text on chrome, the next line is commented until a browser fix\n // targetElement.style.transform = `translate3d(${Math.round(leftPosition)}px, ${Math.floor(topPosition)}px, 0px)`;\n targetElement.style.transform = `translate(${Math.round(leftPosition)}px, ${Math.round(topPosition)}px)`;\n\n // Check if the targetElement is inside the viewport\n const targetElBCR = targetElement.getBoundingClientRect();\n const html = document.documentElement;\n const windowHeight = window.innerHeight || html.clientHeight;\n const windowWidth = window.innerWidth || html.clientWidth;\n\n return targetElBCR.left >= 0 && targetElBCR.top >= 0 && targetElBCR.right <= windowWidth &&\n targetElBCR.bottom <= windowHeight;\n }\n}\n\nconst placementSeparator = /\\s+/;\nconst positionService = new Positioning();\n\n/*\n * Accept the placement array and applies the appropriate placement dependent on the viewport.\n * Returns the applied placement.\n * In case of auto placement, placements are selected in order\n * 'top', 'bottom', 'left', 'right',\n * 'top-left', 'top-right',\n * 'bottom-left', 'bottom-right',\n * 'left-top', 'left-bottom',\n * 'right-top', 'right-bottom'.\n * */\nexport function positionElements(\n hostElement: HTMLElement, targetElement: HTMLElement, placement: string | Placement | PlacementArray,\n appendToBody?: boolean, baseClass?: string): Placement {\n let placementVals: Array =\n Array.isArray(placement) ? placement : placement.split(placementSeparator) as Array;\n\n const allowedPlacements = [\n 'top', 'bottom', 'left', 'right', 'top-left', 'top-right', 'bottom-left', 'bottom-right', 'left-top', 'left-bottom',\n 'right-top', 'right-bottom'\n ];\n\n const classList = targetElement.classList;\n const addClassesToTarget = (targetPlacement: Placement): Array => {\n const[primary, secondary] = targetPlacement.split('-');\n const classes = [];\n if (baseClass) {\n classes.push(`${baseClass}-${primary}`);\n if (secondary) {\n classes.push(`${baseClass}-${primary}-${secondary}`);\n }\n\n classes.forEach((classname) => { classList.add(classname); });\n }\n return classes;\n };\n\n // Remove old placement classes to avoid issues\n if (baseClass) {\n allowedPlacements.forEach((placementToRemove) => { classList.remove(`${baseClass}-${placementToRemove}`); });\n }\n\n // replace auto placement with other placements\n let hasAuto = placementVals.findIndex(val => val === 'auto');\n if (hasAuto >= 0) {\n allowedPlacements.forEach(function(obj) {\n if (placementVals.find(val => val.search('^' + obj) !== -1) == null) {\n placementVals.splice(hasAuto++, 1, obj as Placement);\n }\n });\n }\n\n // coordinates where to position\n\n // Required for transform:\n const style = targetElement.style;\n style.position = 'absolute';\n style.top = '0';\n style.left = '0';\n style['will-change'] = 'transform';\n\n let testPlacement: Placement;\n let isInViewport = false;\n for (testPlacement of placementVals) {\n let addedClasses = addClassesToTarget(testPlacement);\n\n if (positionService.positionElements(hostElement, targetElement, testPlacement, appendToBody)) {\n isInViewport = true;\n break;\n }\n\n // Remove the baseClasses for further calculation\n if (baseClass) {\n addedClasses.forEach((classname) => { classList.remove(classname); });\n }\n }\n\n if (!isInViewport) {\n // If nothing match, the first placement is the default one\n testPlacement = placementVals[0];\n addClassesToTarget(testPlacement);\n positionService.positionElements(hostElement, targetElement, testPlacement, appendToBody);\n }\n\n return testPlacement;\n}\n\nexport type Placement = 'auto' | 'top' | 'bottom' | 'left' | 'right' | 'top-left' | 'top-right' | 'bottom-left' |\n 'bottom-right' | 'left-top' | 'left-bottom' | 'right-top' | 'right-bottom';\n\nexport type PlacementArray = Placement | Array| string;\n","import {padNumber, toInteger, isNumber} from '../util/util';\nimport {NgbDateStruct} from './ngb-date-struct';\nimport {Injectable} from '@angular/core';\n\nexport function NGB_DATEPICKER_PARSER_FORMATTER_FACTORY() {\n return new NgbDateISOParserFormatter();\n}\n\n/**\n * An abstract service for parsing and formatting dates for the\n * [`NgbInputDatepicker`](#/components/datepicker/api#NgbInputDatepicker) directive.\n * Converts between the internal `NgbDateStruct` model presentation and a `string` that is displayed in the\n * input element.\n *\n * When user types something in the input this service attempts to parse it into a `NgbDateStruct` object.\n * And vice versa, when users selects a date in the calendar with the mouse, it must be displayed as a `string`\n * in the input.\n *\n * Default implementation uses the ISO 8601 format, but you can provide another implementation via DI\n * to use an alternative string format or a custom parsing logic.\n *\n * See the [date format overview](#/components/datepicker/overview#date-model) for more details.\n */\n@Injectable({providedIn: 'root', useFactory: NGB_DATEPICKER_PARSER_FORMATTER_FACTORY})\nexport abstract class NgbDateParserFormatter {\n /**\n * Parses the given `string` to an `NgbDateStruct`.\n *\n * Implementations should try their best to provide a result, even\n * partial. They must return `null` if the value can't be parsed.\n */\n abstract parse(value: string): NgbDateStruct;\n\n /**\n * Formats the given `NgbDateStruct` to a `string`.\n *\n * Implementations should return an empty string if the given date is `null`,\n * and try their best to provide a partial result if the given date is incomplete or invalid.\n */\n abstract format(date: NgbDateStruct): string;\n}\n\n@Injectable()\nexport class NgbDateISOParserFormatter extends NgbDateParserFormatter {\n parse(value: string): NgbDateStruct {\n if (value) {\n const dateParts = value.trim().split('-');\n if (dateParts.length === 1 && isNumber(dateParts[0])) {\n return {year: toInteger(dateParts[0]), month: null, day: null};\n } else if (dateParts.length === 2 && isNumber(dateParts[0]) && isNumber(dateParts[1])) {\n return {year: toInteger(dateParts[0]), month: toInteger(dateParts[1]), day: null};\n } else if (dateParts.length === 3 && isNumber(dateParts[0]) && isNumber(dateParts[1]) && isNumber(dateParts[2])) {\n return {year: toInteger(dateParts[0]), month: toInteger(dateParts[1]), day: toInteger(dateParts[2])};\n }\n }\n return null;\n }\n\n format(date: NgbDateStruct): string {\n return date ?\n `${date.year}-${isNumber(date.month) ? padNumber(date.month) : ''}-${isNumber(date.day) ? padNumber(date.day) : ''}` :\n '';\n }\n}\n","import {\n ChangeDetectorRef,\n ComponentFactoryResolver,\n ComponentRef,\n Directive,\n ElementRef,\n EventEmitter,\n forwardRef,\n Inject,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n Output,\n Renderer2,\n SimpleChanges,\n TemplateRef,\n ViewContainerRef\n} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\nimport {AbstractControl, ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validator} from '@angular/forms';\n\nimport {ngbAutoClose} from '../util/autoclose';\nimport {ngbFocusTrap} from '../util/focus-trap';\nimport {PlacementArray, positionElements} from '../util/positioning';\n\nimport {NgbDateAdapter} from './adapters/ngb-date-adapter';\nimport {NgbDatepicker, NgbDatepickerNavigateEvent} from './datepicker';\nimport {DayTemplateContext} from './datepicker-day-template-context';\nimport {NgbDatepickerService} from './datepicker-service';\nimport {NgbCalendar} from './ngb-calendar';\nimport {NgbDate} from './ngb-date';\nimport {NgbDateParserFormatter} from './ngb-date-parser-formatter';\nimport {NgbDateStruct} from './ngb-date-struct';\n\nconst NGB_DATEPICKER_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgbInputDatepicker),\n multi: true\n};\n\nconst NGB_DATEPICKER_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => NgbInputDatepicker),\n multi: true\n};\n\n/**\n * A directive that allows to stick a datepicker popup to an input field.\n *\n * Manages interaction with the input field itself, does value formatting and provides forms integration.\n */\n@Directive({\n selector: 'input[ngbDatepicker]',\n exportAs: 'ngbDatepicker',\n host: {\n '(input)': 'manualDateChange($event.target.value)',\n '(change)': 'manualDateChange($event.target.value, true)',\n '(blur)': 'onBlur()',\n '[disabled]': 'disabled'\n },\n providers: [NGB_DATEPICKER_VALUE_ACCESSOR, NGB_DATEPICKER_VALIDATOR, NgbDatepickerService]\n})\nexport class NgbInputDatepicker implements OnChanges,\n OnDestroy, ControlValueAccessor, Validator {\n private _cRef: ComponentRef = null;\n private _disabled = false;\n private _model: NgbDate;\n private _inputValue: string;\n private _zoneSubscription: any;\n\n /**\n * Indicates whether the datepicker popup should be closed automatically after date selection / outside click or not.\n *\n * * `true` - the popup will close on both date selection and outside click.\n * * `false` - the popup can only be closed manually via `close()` or `toggle()` methods.\n * * `\"inside\"` - the popup will close on date selection, but not outside clicks.\n * * `\"outside\"` - the popup will close only on the outside click and not on date selection/inside clicks.\n *\n * @since 3.0.0\n */\n @Input() autoClose: boolean | 'inside' | 'outside' = true;\n\n /**\n * The reference to a custom template for the day.\n *\n * Allows to completely override the way a day 'cell' in the calendar is displayed.\n *\n * See [`DayTemplateContext`](#/components/datepicker/api#DayTemplateContext) for the data you get inside.\n */\n @Input() dayTemplate: TemplateRef;\n\n /**\n * The callback to pass any arbitrary data to the template cell via the\n * [`DayTemplateContext`](#/components/datepicker/api#DayTemplateContext)'s `data` parameter.\n *\n * `current` is the month that is currently displayed by the datepicker.\n *\n * @since 3.3.0\n */\n @Input() dayTemplateData: (date: NgbDate, current: {year: number, month: number}) => any;\n\n /**\n * The number of months to display.\n */\n @Input() displayMonths: number;\n\n /**\n * The first day of the week.\n *\n * With default calendar we use ISO 8601: 'weekday' is 1=Mon ... 7=Sun.\n */\n @Input() firstDayOfWeek: number;\n\n /**\n * The reference to the custom template for the datepicker footer.\n *\n * @since 3.3.0\n */\n @Input() footerTemplate: TemplateRef;\n\n /**\n * The callback to mark some dates as disabled.\n *\n * It is called for each new date when navigating to a different month.\n *\n * `current` is the month that is currently displayed by the datepicker.\n */\n @Input() markDisabled: (date: NgbDate, current: {year: number, month: number}) => boolean;\n\n /**\n * The earliest date that can be displayed or selected. Also used for form validation.\n *\n * If not provided, 'year' select box will display 10 years before the current month.\n */\n @Input() minDate: NgbDateStruct;\n\n /**\n * The latest date that can be displayed or selected. Also used for form validation.\n *\n * If not provided, 'year' select box will display 10 years after the current month.\n */\n @Input() maxDate: NgbDateStruct;\n\n /**\n * Navigation type.\n *\n * * `\"select\"` - select boxes for month and navigation arrows\n * * `\"arrows\"` - only navigation arrows\n * * `\"none\"` - no navigation visible at all\n */\n @Input() navigation: 'select' | 'arrows' | 'none';\n\n /**\n * The way of displaying days that don't belong to the current month.\n *\n * * `\"visible\"` - days are visible\n * * `\"hidden\"` - days are hidden, white space preserved\n * * `\"collapsed\"` - days are collapsed, so the datepicker height might change between months\n *\n * For the 2+ months view, days in between months are never shown.\n */\n @Input() outsideDays: 'visible' | 'collapsed' | 'hidden';\n\n /**\n * The preferred placement of the datepicker popup.\n *\n * Possible values are `\"top\"`, `\"top-left\"`, `\"top-right\"`, `\"bottom\"`, `\"bottom-left\"`,\n * `\"bottom-right\"`, `\"left\"`, `\"left-top\"`, `\"left-bottom\"`, `\"right\"`, `\"right-top\"`,\n * `\"right-bottom\"`\n *\n * Accepts an array of strings or a string with space separated possible values.\n *\n * The default order of preference is `\"bottom-left bottom-right top-left top-right\"`\n *\n * Please see the [positioning overview](#/positioning) for more details.\n */\n @Input() placement: PlacementArray = ['bottom-left', 'bottom-right', 'top-left', 'top-right'];\n\n /**\n * If `true`, weekdays will be displayed.\n */\n @Input() showWeekdays: boolean;\n\n /**\n * If `true`, week numbers will be displayed.\n */\n @Input() showWeekNumbers: boolean;\n\n /**\n * The date to open calendar with.\n *\n * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec.\n * If nothing or invalid date is provided, calendar will open with current month.\n *\n * You could use `navigateTo(date)` method as an alternative.\n */\n @Input() startDate: {year: number, month: number, day?: number};\n\n /**\n * A selector specifying the element the datepicker popup should be appended to.\n *\n * Currently only supports `\"body\"`.\n */\n @Input() container: string;\n\n /**\n * A css selector or html element specifying the element the datepicker popup should be positioned against.\n *\n * By default the input is used as a target.\n *\n * @since 4.2.0\n */\n @Input() positionTarget: string | HTMLElement;\n\n /**\n * An event emitted when user selects a date using keyboard or mouse.\n *\n * The payload of the event is currently selected `NgbDate`.\n *\n * @since 1.1.1\n */\n @Output() dateSelect = new EventEmitter();\n\n /**\n * Event emitted right after the navigation happens and displayed month changes.\n *\n * See [`NgbDatepickerNavigateEvent`](#/components/datepicker/api#NgbDatepickerNavigateEvent) for the payload info.\n */\n @Output() navigate = new EventEmitter();\n\n /**\n * An event fired after closing datepicker window.\n *\n * @since 4.2.0\n */\n @Output() closed = new EventEmitter();\n\n @Input()\n get disabled() {\n return this._disabled;\n }\n set disabled(value: any) {\n this._disabled = value === '' || (value && value !== 'false');\n\n if (this.isOpen()) {\n this._cRef.instance.setDisabledState(this._disabled);\n }\n }\n\n private _onChange = (_: any) => {};\n private _onTouched = () => {};\n private _validatorChange = () => {};\n\n\n constructor(\n private _parserFormatter: NgbDateParserFormatter, private _elRef: ElementRef,\n private _vcRef: ViewContainerRef, private _renderer: Renderer2, private _cfr: ComponentFactoryResolver,\n private _ngZone: NgZone, private _service: NgbDatepickerService, private _calendar: NgbCalendar,\n private _dateAdapter: NgbDateAdapter, @Inject(DOCUMENT) private _document: any,\n private _changeDetector: ChangeDetectorRef) {\n this._zoneSubscription = _ngZone.onStable.subscribe(() => this._updatePopupPosition());\n }\n\n registerOnChange(fn: (value: any) => any): void { this._onChange = fn; }\n\n registerOnTouched(fn: () => any): void { this._onTouched = fn; }\n\n registerOnValidatorChange(fn: () => void): void { this._validatorChange = fn; }\n\n setDisabledState(isDisabled: boolean): void { this.disabled = isDisabled; }\n\n validate(c: AbstractControl): {[key: string]: any} {\n const value = c.value;\n\n if (value === null || value === undefined) {\n return null;\n }\n\n const ngbDate = this._fromDateStruct(this._dateAdapter.fromModel(value));\n\n if (!this._calendar.isValid(ngbDate)) {\n return {'ngbDate': {invalid: c.value}};\n }\n\n if (this.minDate && ngbDate.before(NgbDate.from(this.minDate))) {\n return {'ngbDate': {requiredBefore: this.minDate}};\n }\n\n if (this.maxDate && ngbDate.after(NgbDate.from(this.maxDate))) {\n return {'ngbDate': {requiredAfter: this.maxDate}};\n }\n }\n\n writeValue(value) {\n this._model = this._fromDateStruct(this._dateAdapter.fromModel(value));\n this._writeModelValue(this._model);\n }\n\n manualDateChange(value: string, updateView = false) {\n const inputValueChanged = value !== this._inputValue;\n if (inputValueChanged) {\n this._inputValue = value;\n this._model = this._fromDateStruct(this._parserFormatter.parse(value));\n }\n if (inputValueChanged || !updateView) {\n this._onChange(this._model ? this._dateAdapter.toModel(this._model) : (value === '' ? null : value));\n }\n if (updateView && this._model) {\n this._writeModelValue(this._model);\n }\n }\n\n isOpen() { return !!this._cRef; }\n\n /**\n * Opens the datepicker popup.\n *\n * If the related form control contains a valid date, the corresponding month will be opened.\n */\n open() {\n if (!this.isOpen()) {\n const cf = this._cfr.resolveComponentFactory(NgbDatepicker);\n this._cRef = this._vcRef.createComponent(cf);\n\n this._applyPopupStyling(this._cRef.location.nativeElement);\n this._applyDatepickerInputs(this._cRef.instance);\n this._subscribeForDatepickerOutputs(this._cRef.instance);\n this._cRef.instance.ngOnInit();\n this._cRef.instance.writeValue(this._dateAdapter.toModel(this._model));\n\n // date selection event handling\n this._cRef.instance.registerOnChange((selectedDate) => {\n this.writeValue(selectedDate);\n this._onChange(selectedDate);\n this._onTouched();\n });\n\n this._cRef.changeDetectorRef.detectChanges();\n\n this._cRef.instance.setDisabledState(this.disabled);\n\n if (this.container === 'body') {\n window.document.querySelector(this.container).appendChild(this._cRef.location.nativeElement);\n }\n\n // focus handling\n ngbFocusTrap(this._cRef.location.nativeElement, this.closed, true);\n this._cRef.instance.focus();\n\n ngbAutoClose(\n this._ngZone, this._document, this.autoClose, () => this.close(), this.closed, [],\n [this._elRef.nativeElement, this._cRef.location.nativeElement]);\n }\n }\n\n /**\n * Closes the datepicker popup.\n */\n close() {\n if (this.isOpen()) {\n this._vcRef.remove(this._vcRef.indexOf(this._cRef.hostView));\n this._cRef = null;\n this.closed.emit();\n this._changeDetector.markForCheck();\n }\n }\n\n /**\n * Toggles the datepicker popup.\n */\n toggle() {\n if (this.isOpen()) {\n this.close();\n } else {\n this.open();\n }\n }\n\n /**\n * Navigates to the provided date.\n *\n * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec.\n * If nothing or invalid date provided calendar will open current month.\n *\n * Use the `[startDate]` input as an alternative.\n */\n navigateTo(date?: {year: number, month: number, day?: number}) {\n if (this.isOpen()) {\n this._cRef.instance.navigateTo(date);\n }\n }\n\n onBlur() { this._onTouched(); }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['minDate'] || changes['maxDate']) {\n this._validatorChange();\n }\n }\n\n ngOnDestroy() {\n this.close();\n this._zoneSubscription.unsubscribe();\n }\n\n private _applyDatepickerInputs(datepickerInstance: NgbDatepicker): void {\n ['dayTemplate', 'dayTemplateData', 'displayMonths', 'firstDayOfWeek', 'footerTemplate', 'markDisabled', 'minDate',\n 'maxDate', 'navigation', 'outsideDays', 'showNavigation', 'showWeekdays', 'showWeekNumbers']\n .forEach((optionName: string) => {\n if (this[optionName] !== undefined) {\n datepickerInstance[optionName] = this[optionName];\n }\n });\n datepickerInstance.startDate = this.startDate || this._model;\n }\n\n private _applyPopupStyling(nativeElement: any) {\n this._renderer.addClass(nativeElement, 'dropdown-menu');\n this._renderer.addClass(nativeElement, 'show');\n\n if (this.container === 'body') {\n this._renderer.addClass(nativeElement, 'ngb-dp-body');\n }\n }\n\n private _subscribeForDatepickerOutputs(datepickerInstance: NgbDatepicker) {\n datepickerInstance.navigate.subscribe(navigateEvent => this.navigate.emit(navigateEvent));\n datepickerInstance.select.subscribe(date => {\n this.dateSelect.emit(date);\n if (this.autoClose === true || this.autoClose === 'inside') {\n this.close();\n }\n });\n }\n\n private _writeModelValue(model: NgbDate) {\n const value = this._parserFormatter.format(model);\n this._inputValue = value;\n this._renderer.setProperty(this._elRef.nativeElement, 'value', value);\n if (this.isOpen()) {\n this._cRef.instance.writeValue(this._dateAdapter.toModel(model));\n this._onTouched();\n }\n }\n\n private _fromDateStruct(date: NgbDateStruct): NgbDate {\n const ngbDate = date ? new NgbDate(date.year, date.month, date.day) : null;\n return this._calendar.isValid(ngbDate) ? ngbDate : null;\n }\n\n private _updatePopupPosition() {\n if (!this._cRef) {\n return;\n }\n\n let hostElement: HTMLElement;\n if (typeof this.positionTarget === 'string') {\n hostElement = window.document.querySelector(this.positionTarget);\n } else if (this.positionTarget instanceof HTMLElement) {\n hostElement = this.positionTarget;\n } else {\n hostElement = this._elRef.nativeElement;\n }\n\n if (this.positionTarget && !hostElement) {\n throw new Error('ngbDatepicker could not find element declared in [positionTarget] to position against.');\n }\n\n positionElements(hostElement, this._cRef.location.nativeElement, this.placement, this.container === 'body');\n }\n}\n","import {ChangeDetectionStrategy, Component, Input, ViewEncapsulation} from '@angular/core';\nimport {NgbDate} from './ngb-date';\nimport {NgbDatepickerI18n} from './datepicker-i18n';\n\n@Component({\n selector: '[ngbDatepickerDayView]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./datepicker-day-view.scss'],\n host: {\n 'class': 'btn-light',\n '[class.bg-primary]': 'selected',\n '[class.text-white]': 'selected',\n '[class.text-muted]': 'isMuted()',\n '[class.outside]': 'isMuted()',\n '[class.active]': 'focused'\n },\n template: `{{ i18n.getDayNumerals(date) }}`\n})\nexport class NgbDatepickerDayView {\n @Input() currentMonth: number;\n @Input() date: NgbDate;\n @Input() disabled: boolean;\n @Input() focused: boolean;\n @Input() selected: boolean;\n\n constructor(public i18n: NgbDatepickerI18n) {}\n\n isMuted() { return !this.selected && (this.date.month !== this.currentMonth || this.disabled); }\n}\n","import {Component, Input, Output, EventEmitter, ChangeDetectionStrategy, ViewEncapsulation} from '@angular/core';\nimport {NgbDate} from './ngb-date';\nimport {toInteger} from '../util/util';\nimport {NgbDatepickerI18n} from './datepicker-i18n';\n\n@Component({\n selector: 'ngb-datepicker-navigation-select',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./datepicker-navigation-select.scss'],\n template: `\n \n \n \n \n \n `\n})\nexport class NgbDatepickerNavigationSelect {\n @Input() date: NgbDate;\n @Input() disabled: boolean;\n @Input() months: number[];\n @Input() years: number[];\n\n @Output() select = new EventEmitter();\n\n constructor(public i18n: NgbDatepickerI18n) {}\n\n changeMonth(month: string) { this.select.emit(new NgbDate(this.date.year, toInteger(month), 1)); }\n\n changeYear(year: string) { this.select.emit(new NgbDate(toInteger(year), this.date.month, 1)); }\n}\n","import {NgbDate} from '../ngb-date';\nimport {NgbPeriod, NgbCalendar} from '../ngb-calendar';\nimport {Injectable} from '@angular/core';\nimport {isNumber} from '../../util/util';\n\n@Injectable()\nexport abstract class NgbCalendarHijri extends NgbCalendar {\n /**\n * Returns the number of days in a specific Hijri month.\n * `month` is 1 for Muharram, 2 for Safar, etc.\n * `year` is any Hijri year.\n */\n abstract getDaysPerMonth(month: number, year: number): number;\n\n /**\n * Returns the equivalent Hijri date value for a give input Gregorian date.\n * `gDate` is s JS Date to be converted to Hijri.\n */\n abstract fromGregorian(gDate: Date): NgbDate;\n\n /**\n * Converts the current Hijri date to Gregorian.\n */\n abstract toGregorian(hDate: NgbDate): Date;\n\n getDaysPerWeek() { return 7; }\n\n getMonths() { return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; }\n\n getWeeksPerMonth() { return 6; }\n\n getNext(date: NgbDate, period: NgbPeriod = 'd', number = 1) {\n date = new NgbDate(date.year, date.month, date.day);\n\n switch (period) {\n case 'y':\n date = this._setYear(date, date.year + number);\n date.month = 1;\n date.day = 1;\n return date;\n case 'm':\n date = this._setMonth(date, date.month + number);\n date.day = 1;\n return date;\n case 'd':\n return this._setDay(date, date.day + number);\n default:\n return date;\n }\n }\n\n getPrev(date: NgbDate, period: NgbPeriod = 'd', number = 1) { return this.getNext(date, period, -number); }\n\n getWeekday(date: NgbDate) {\n const day = this.toGregorian(date).getDay();\n // in JS Date Sun=0, in ISO 8601 Sun=7\n return day === 0 ? 7 : day;\n }\n\n getWeekNumber(week: NgbDate[], firstDayOfWeek: number) {\n // in JS Date Sun=0, in ISO 8601 Sun=7\n if (firstDayOfWeek === 7) {\n firstDayOfWeek = 0;\n }\n\n const thursdayIndex = (4 + 7 - firstDayOfWeek) % 7;\n const date = week[thursdayIndex];\n\n const jsDate = this.toGregorian(date);\n jsDate.setDate(jsDate.getDate() + 4 - (jsDate.getDay() || 7)); // Thursday\n const time = jsDate.getTime();\n const MuhDate = this.toGregorian(new NgbDate(date.year, 1, 1)); // Compare with Muharram 1\n return Math.floor(Math.round((time - MuhDate.getTime()) / 86400000) / 7) + 1;\n }\n\n getToday(): NgbDate { return this.fromGregorian(new Date()); }\n\n\n isValid(date: NgbDate): boolean {\n return date && isNumber(date.year) && isNumber(date.month) && isNumber(date.day) &&\n !isNaN(this.toGregorian(date).getTime());\n }\n\n private _setDay(date: NgbDate, day: number): NgbDate {\n day = +day;\n let mDays = this.getDaysPerMonth(date.month, date.year);\n if (day <= 0) {\n while (day <= 0) {\n date = this._setMonth(date, date.month - 1);\n mDays = this.getDaysPerMonth(date.month, date.year);\n day += mDays;\n }\n } else if (day > mDays) {\n while (day > mDays) {\n day -= mDays;\n date = this._setMonth(date, date.month + 1);\n mDays = this.getDaysPerMonth(date.month, date.year);\n }\n }\n date.day = day;\n return date;\n }\n\n private _setMonth(date: NgbDate, month: number): NgbDate {\n month = +month;\n date.year = date.year + Math.floor((month - 1) / 12);\n date.month = Math.floor(((month - 1) % 12 + 12) % 12) + 1;\n return date;\n }\n\n private _setYear(date: NgbDate, year: number): NgbDate {\n date.year = +year;\n return date;\n }\n}\n","import {NgbCalendarHijri} from './ngb-calendar-hijri';\nimport {NgbDate} from '../ngb-date';\nimport {Injectable} from '@angular/core';\n\n/**\n * Checks if islamic year is a leap year\n */\nfunction isIslamicLeapYear(hYear: number): boolean {\n return (14 + 11 * hYear) % 30 < 11;\n}\n\n/**\n * Checks if gregorian years is a leap year\n */\nfunction isGregorianLeapYear(gDate: Date): boolean {\n const year = gDate.getFullYear();\n return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;\n}\n\n/**\n * Returns the start of Hijri Month.\n * `hMonth` is 0 for Muharram, 1 for Safar, etc.\n * `hYear` is any Hijri hYear.\n */\nfunction getIslamicMonthStart(hYear: number, hMonth: number): number {\n return Math.ceil(29.5 * hMonth) + (hYear - 1) * 354 + Math.floor((3 + 11 * hYear) / 30.0);\n}\n\n/**\n * Returns the start of Hijri year.\n * `year` is any Hijri year.\n */\nfunction getIslamicYearStart(year: number): number {\n return (year - 1) * 354 + Math.floor((3 + 11 * year) / 30.0);\n}\n\nfunction mod(a: number, b: number): number {\n return a - b * Math.floor(a / b);\n}\n\n/**\n * The civil calendar is one type of Hijri calendars used in islamic countries.\n * Uses a fixed cycle of alternating 29- and 30-day months,\n * with a leap day added to the last month of 11 out of every 30 years.\n * http://cldr.unicode.org/development/development-process/design-proposals/islamic-calendar-types\n * All the calculations here are based on the equations from \"Calendrical Calculations\" By Edward M. Reingold, Nachum\n * Dershowitz.\n */\n\nconst GREGORIAN_EPOCH = 1721425.5;\nconst ISLAMIC_EPOCH = 1948439.5;\n\n@Injectable()\nexport class NgbCalendarIslamicCivil extends NgbCalendarHijri {\n /**\n * Returns the equivalent islamic(civil) date value for a give input Gregorian date.\n * `gDate` is a JS Date to be converted to Hijri.\n */\n fromGregorian(gDate: Date): NgbDate {\n const gYear = gDate.getFullYear(), gMonth = gDate.getMonth(), gDay = gDate.getDate();\n\n let julianDay = GREGORIAN_EPOCH - 1 + 365 * (gYear - 1) + Math.floor((gYear - 1) / 4) +\n -Math.floor((gYear - 1) / 100) + Math.floor((gYear - 1) / 400) +\n Math.floor(\n (367 * (gMonth + 1) - 362) / 12 + (gMonth + 1 <= 2 ? 0 : isGregorianLeapYear(gDate) ? -1 : -2) + gDay);\n julianDay = Math.floor(julianDay) + 0.5;\n\n const days = julianDay - ISLAMIC_EPOCH;\n const hYear = Math.floor((30 * days + 10646) / 10631.0);\n let hMonth = Math.ceil((days - 29 - getIslamicYearStart(hYear)) / 29.5);\n hMonth = Math.min(hMonth, 11);\n const hDay = Math.ceil(days - getIslamicMonthStart(hYear, hMonth)) + 1;\n return new NgbDate(hYear, hMonth + 1, hDay);\n }\n\n /**\n * Returns the equivalent JS date value for a give input islamic(civil) date.\n * `hDate` is an islamic(civil) date to be converted to Gregorian.\n */\n toGregorian(hDate: NgbDate): Date {\n const hYear = hDate.year;\n const hMonth = hDate.month - 1;\n const hDay = hDate.day;\n const julianDay =\n hDay + Math.ceil(29.5 * hMonth) + (hYear - 1) * 354 + Math.floor((3 + 11 * hYear) / 30) + ISLAMIC_EPOCH - 1;\n\n const wjd = Math.floor(julianDay - 0.5) + 0.5, depoch = wjd - GREGORIAN_EPOCH,\n quadricent = Math.floor(depoch / 146097), dqc = mod(depoch, 146097), cent = Math.floor(dqc / 36524),\n dcent = mod(dqc, 36524), quad = Math.floor(dcent / 1461), dquad = mod(dcent, 1461),\n yindex = Math.floor(dquad / 365);\n let year = quadricent * 400 + cent * 100 + quad * 4 + yindex;\n if (!(cent === 4 || yindex === 4)) {\n year++;\n }\n\n const gYearStart = GREGORIAN_EPOCH + 365 * (year - 1) + Math.floor((year - 1) / 4) - Math.floor((year - 1) / 100) +\n Math.floor((year - 1) / 400);\n\n const yearday = wjd - gYearStart;\n\n const tjd = GREGORIAN_EPOCH - 1 + 365 * (year - 1) + Math.floor((year - 1) / 4) - Math.floor((year - 1) / 100) +\n Math.floor((year - 1) / 400) + Math.floor(739 / 12 + (isGregorianLeapYear(new Date(year, 3, 1)) ? -1 : -2) + 1);\n\n const leapadj = wjd < tjd ? 0 : isGregorianLeapYear(new Date(year, 3, 1)) ? 1 : 2;\n\n const month = Math.floor(((yearday + leapadj) * 12 + 373) / 367);\n const tjd2 = GREGORIAN_EPOCH - 1 + 365 * (year - 1) + Math.floor((year - 1) / 4) - Math.floor((year - 1) / 100) +\n Math.floor((year - 1) / 400) +\n Math.floor(\n (367 * month - 362) / 12 + (month <= 2 ? 0 : isGregorianLeapYear(new Date(year, month - 1, 1)) ? -1 : -2) +\n 1);\n\n const day = wjd - tjd2 + 1;\n\n return new Date(year, month - 1, day);\n }\n\n /**\n * Returns the number of days in a specific Hijri month.\n * `month` is 1 for Muharram, 2 for Safar, etc.\n * `year` is any Hijri year.\n */\n getDaysPerMonth(month: number, year: number): number {\n year = year + Math.floor(month / 13);\n month = ((month - 1) % 12) + 1;\n let length = 29 + month % 2;\n if (month === 12 && isIslamicLeapYear(year)) {\n length++;\n }\n return length;\n }\n}\n","import {NgbCalendarIslamicCivil} from './ngb-calendar-islamic-civil';\nimport {NgbDate} from '../ngb-date';\nimport {Injectable} from '@angular/core';\n\n/**\n * Umalqura calendar is one type of Hijri calendars used in islamic countries.\n * This Calendar is used by Saudi Arabia for administrative purpose.\n * Unlike tabular calendars, the algorithm involves astronomical calculation, but it's still deterministic.\n * http://cldr.unicode.org/development/development-process/design-proposals/islamic-calendar-types\n */\n\nconst GREGORIAN_FIRST_DATE = new Date(1882, 10, 12);\nconst GREGORIAN_LAST_DATE = new Date(2174, 10, 25);\nconst HIJRI_BEGIN = 1300;\nconst HIJRI_END = 1600;\nconst ONE_DAY = 1000 * 60 * 60 * 24;\n\nconst MONTH_LENGTH = [\n // 1300-1304\n '101010101010', '110101010100', '111011001001', '011011010100', '011011101010',\n // 1305-1309\n '001101101100', '101010101101', '010101010101', '011010101001', '011110010010',\n // 1310-1314\n '101110101001', '010111010100', '101011011010', '010101011100', '110100101101',\n // 1315-1319\n '011010010101', '011101001010', '101101010100', '101101101010', '010110101101',\n // 1320-1324\n '010010101110', '101001001111', '010100010111', '011010001011', '011010100101',\n // 1325-1329\n '101011010101', '001011010110', '100101011011', '010010011101', '101001001101',\n // 1330-1334\n '110100100110', '110110010101', '010110101100', '100110110110', '001010111010',\n // 1335-1339\n '101001011011', '010100101011', '101010010101', '011011001010', '101011101001',\n // 1340-1344\n '001011110100', '100101110110', '001010110110', '100101010110', '101011001010',\n // 1345-1349\n '101110100100', '101111010010', '010111011001', '001011011100', '100101101101',\n // 1350-1354\n '010101001101', '101010100101', '101101010010', '101110100101', '010110110100',\n // 1355-1359\n '100110110110', '010101010111', '001010010111', '010101001011', '011010100011',\n // 1360-1364\n '011101010010', '101101100101', '010101101010', '101010101011', '010100101011',\n // 1365-1369\n '110010010101', '110101001010', '110110100101', '010111001010', '101011010110',\n // 1370-1374\n '100101010111', '010010101011', '100101001011', '101010100101', '101101010010',\n // 1375-1379\n '101101101010', '010101110101', '001001110110', '100010110111', '010001011011',\n // 1380-1384\n '010101010101', '010110101001', '010110110100', '100111011010', '010011011101',\n // 1385-1389\n '001001101110', '100100110110', '101010101010', '110101010100', '110110110010',\n // 1390-1394\n '010111010101', '001011011010', '100101011011', '010010101011', '101001010101',\n // 1395-1399\n '101101001001', '101101100100', '101101110001', '010110110100', '101010110101',\n // 1400-1404\n '101001010101', '110100100101', '111010010010', '111011001001', '011011010100',\n // 1405-1409\n '101011101001', '100101101011', '010010101011', '101010010011', '110101001001',\n // 1410-1414\n '110110100100', '110110110010', '101010111001', '010010111010', '101001011011',\n // 1415-1419\n '010100101011', '101010010101', '101100101010', '101101010101', '010101011100',\n // 1420-1424\n '010010111101', '001000111101', '100100011101', '101010010101', '101101001010',\n // 1425-1429\n '101101011010', '010101101101', '001010110110', '100100111011', '010010011011',\n // 1430-1434\n '011001010101', '011010101001', '011101010100', '101101101010', '010101101100',\n // 1435-1439\n '101010101101', '010101010101', '101100101001', '101110010010', '101110101001',\n // 1440-1444\n '010111010100', '101011011010', '010101011010', '101010101011', '010110010101',\n // 1445-1449\n '011101001001', '011101100100', '101110101010', '010110110101', '001010110110',\n // 1450-1454\n '101001010110', '111001001101', '101100100101', '101101010010', '101101101010',\n // 1455-1459\n '010110101101', '001010101110', '100100101111', '010010010111', '011001001011',\n // 1460-1464\n '011010100101', '011010101100', '101011010110', '010101011101', '010010011101',\n // 1465-1469\n '101001001101', '110100010110', '110110010101', '010110101010', '010110110101',\n // 1470-1474\n '001011011010', '100101011011', '010010101101', '010110010101', '011011001010',\n // 1475-1479\n '011011100100', '101011101010', '010011110101', '001010110110', '100101010110',\n // 1480-1484\n '101010101010', '101101010100', '101111010010', '010111011001', '001011101010',\n // 1485-1489\n '100101101101', '010010101101', '101010010101', '101101001010', '101110100101',\n // 1490-1494\n '010110110010', '100110110101', '010011010110', '101010010111', '010101000111',\n // 1495-1499\n '011010010011', '011101001001', '101101010101', '010101101010', '101001101011',\n // 1500-1504\n '010100101011', '101010001011', '110101000110', '110110100011', '010111001010',\n // 1505-1509\n '101011010110', '010011011011', '001001101011', '100101001011', '101010100101',\n // 1510-1514\n '101101010010', '101101101001', '010101110101', '000101110110', '100010110111',\n // 1515-1519\n '001001011011', '010100101011', '010101100101', '010110110100', '100111011010',\n // 1520-1524\n '010011101101', '000101101101', '100010110110', '101010100110', '110101010010',\n // 1525-1529\n '110110101001', '010111010100', '101011011010', '100101011011', '010010101011',\n // 1530-1534\n '011001010011', '011100101001', '011101100010', '101110101001', '010110110010',\n // 1535-1539\n '101010110101', '010101010101', '101100100101', '110110010010', '111011001001',\n // 1540-1544\n '011011010010', '101011101001', '010101101011', '010010101011', '101001010101',\n // 1545-1549\n '110100101001', '110101010100', '110110101010', '100110110101', '010010111010',\n // 1550-1554\n '101000111011', '010010011011', '101001001101', '101010101010', '101011010101',\n // 1555-1559\n '001011011010', '100101011101', '010001011110', '101000101110', '110010011010',\n // 1560-1564\n '110101010101', '011010110010', '011010111001', '010010111010', '101001011101',\n // 1565-1569\n '010100101101', '101010010101', '101101010010', '101110101000', '101110110100',\n // 1570-1574\n '010110111001', '001011011010', '100101011010', '101101001010', '110110100100',\n // 1575-1579\n '111011010001', '011011101000', '101101101010', '010101101101', '010100110101',\n // 1580-1584\n '011010010101', '110101001010', '110110101000', '110111010100', '011011011010',\n // 1585-1589\n '010101011011', '001010011101', '011000101011', '101100010101', '101101001010',\n // 1590-1594\n '101110010101', '010110101010', '101010101110', '100100101110', '110010001111',\n // 1595-1599\n '010100100111', '011010010101', '011010101010', '101011010110', '010101011101',\n // 1600\n '001010011101'\n];\n\nfunction getDaysDiff(date1: Date, date2: Date): number {\n // Ignores the time part in date1 and date2:\n const time1 = Date.UTC(date1.getFullYear(), date1.getMonth(), date1.getDate());\n const time2 = Date.UTC(date2.getFullYear(), date2.getMonth(), date2.getDate());\n const diff = Math.abs(time1 - time2);\n return Math.round(diff / ONE_DAY);\n}\n\n@Injectable()\nexport class NgbCalendarIslamicUmalqura extends NgbCalendarIslamicCivil {\n /**\n * Returns the equivalent islamic(Umalqura) date value for a give input Gregorian date.\n * `gdate` is s JS Date to be converted to Hijri.\n */\n fromGregorian(gDate: Date): NgbDate {\n let hDay = 1, hMonth = 0, hYear = 1300;\n let daysDiff = getDaysDiff(gDate, GREGORIAN_FIRST_DATE);\n if (gDate.getTime() - GREGORIAN_FIRST_DATE.getTime() >= 0 && gDate.getTime() - GREGORIAN_LAST_DATE.getTime() <= 0) {\n let year = 1300;\n for (let i = 0; i < MONTH_LENGTH.length; i++, year++) {\n for (let j = 0; j < 12; j++) {\n let numOfDays = +MONTH_LENGTH[i][j] + 29;\n if (daysDiff <= numOfDays) {\n hDay = daysDiff + 1;\n if (hDay > numOfDays) {\n hDay = 1;\n j++;\n }\n if (j > 11) {\n j = 0;\n year++;\n }\n hMonth = j;\n hYear = year;\n return new NgbDate(hYear, hMonth + 1, hDay);\n }\n daysDiff = daysDiff - numOfDays;\n }\n }\n } else {\n return super.fromGregorian(gDate);\n }\n }\n /**\n * Converts the current Hijri date to Gregorian.\n */\n toGregorian(hDate: NgbDate): Date {\n const hYear = hDate.year;\n const hMonth = hDate.month - 1;\n const hDay = hDate.day;\n let gDate = new Date(GREGORIAN_FIRST_DATE);\n let dayDiff = hDay - 1;\n if (hYear >= HIJRI_BEGIN && hYear <= HIJRI_END) {\n for (let y = 0; y < hYear - HIJRI_BEGIN; y++) {\n for (let m = 0; m < 12; m++) {\n dayDiff += +MONTH_LENGTH[y][m] + 29;\n }\n }\n for (let m = 0; m < hMonth; m++) {\n dayDiff += +MONTH_LENGTH[hYear - HIJRI_BEGIN][m] + 29;\n }\n gDate.setDate(GREGORIAN_FIRST_DATE.getDate() + dayDiff);\n } else {\n gDate = super.toGregorian(hDate);\n }\n return gDate;\n }\n /**\n * Returns the number of days in a specific Hijri hMonth.\n * `hMonth` is 1 for Muharram, 2 for Safar, etc.\n * `hYear` is any Hijri hYear.\n */\n getDaysPerMonth(hMonth: number, hYear: number): number {\n if (hYear >= HIJRI_BEGIN && hYear <= HIJRI_END) {\n const pos = hYear - HIJRI_BEGIN;\n return +MONTH_LENGTH[pos][hMonth - 1] + 29;\n }\n return super.getDaysPerMonth(hMonth, hYear);\n }\n}\n","import {NgbDate} from '../ngb-date';\n\n/**\n * Returns the equivalent JS date value for a give input Jalali date.\n * `jalaliDate` is an Jalali date to be converted to Gregorian.\n */\nexport function toGregorian(jalaliDate: NgbDate): Date {\n let jdn = jalaliToJulian(jalaliDate.year, jalaliDate.month, jalaliDate.day);\n let date = julianToGregorian(jdn);\n date.setHours(6, 30, 3, 200);\n return date;\n}\n\n/**\n * Returns the equivalent jalali date value for a give input Gregorian date.\n * `gdate` is a JS Date to be converted to jalali.\n * utc to local\n */\nexport function fromGregorian(gdate: Date): NgbDate {\n let g2d = gregorianToJulian(gdate.getFullYear(), gdate.getMonth() + 1, gdate.getDate());\n return julianToJalali(g2d);\n}\n\nexport function setJalaliYear(date: NgbDate, yearValue: number): NgbDate {\n date.year = +yearValue;\n return date;\n}\n\nexport function setJalaliMonth(date: NgbDate, month: number): NgbDate {\n month = +month;\n date.year = date.year + Math.floor((month - 1) / 12);\n date.month = Math.floor(((month - 1) % 12 + 12) % 12) + 1;\n return date;\n}\n\nexport function setJalaliDay(date: NgbDate, day: number): NgbDate {\n let mDays = getDaysPerMonth(date.month, date.year);\n if (day <= 0) {\n while (day <= 0) {\n date = setJalaliMonth(date, date.month - 1);\n mDays = getDaysPerMonth(date.month, date.year);\n day += mDays;\n }\n } else if (day > mDays) {\n while (day > mDays) {\n day -= mDays;\n date = setJalaliMonth(date, date.month + 1);\n mDays = getDaysPerMonth(date.month, date.year);\n }\n }\n date.day = day;\n return date;\n}\n\nfunction mod(a: number, b: number): number {\n return a - b * Math.floor(a / b);\n}\n\nfunction div(a: number, b: number) {\n return Math.trunc(a / b);\n}\n\n/*\n This function determines if the Jalali (Persian) year is\n leap (366-day long) or is the common year (365 days), and\n finds the day in March (Gregorian calendar) of the first\n day of the Jalali year (jalaliYear).\n @param jalaliYear Jalali calendar year (-61 to 3177)\n @return\n leap: number of years since the last leap year (0 to 4)\n gYear: Gregorian year of the beginning of Jalali year\n march: the March day of Farvardin the 1st (1st day of jalaliYear)\n @see: http://www.astro.uni.torun.pl/~kb/Papers/EMP/PersianC-EMP.htm\n @see: http://www.fourmilab.ch/documents/calendar/\n */\nfunction jalCal(jalaliYear: number) {\n // Jalali years starting the 33-year rule.\n let breaks =\n [-61, 9, 38, 199, 426, 686, 756, 818, 1111, 1181, 1210, 1635, 2060, 2097, 2192, 2262, 2324, 2394, 2456, 3178];\n const breaksLength = breaks.length;\n const gYear = jalaliYear + 621;\n let leapJ = -14;\n let jp = breaks[0];\n\n if (jalaliYear < jp || jalaliYear >= breaks[breaksLength - 1]) {\n throw new Error('Invalid Jalali year ' + jalaliYear);\n }\n\n // Find the limiting years for the Jalali year jalaliYear.\n let jump;\n for (let i = 1; i < breaksLength; i += 1) {\n const jm = breaks[i];\n jump = jm - jp;\n if (jalaliYear < jm) {\n break;\n }\n leapJ = leapJ + div(jump, 33) * 8 + div(mod(jump, 33), 4);\n jp = jm;\n }\n let n = jalaliYear - jp;\n\n // Find the number of leap years from AD 621 to the beginning\n // of the current Jalali year in the Persian calendar.\n leapJ = leapJ + div(n, 33) * 8 + div(mod(n, 33) + 3, 4);\n if (mod(jump, 33) === 4 && jump - n === 4) {\n leapJ += 1;\n }\n\n // And the same in the Gregorian calendar (until the year gYear).\n const leapG = div(gYear, 4) - div((div(gYear, 100) + 1) * 3, 4) - 150;\n\n // Determine the Gregorian date of Farvardin the 1st.\n const march = 20 + leapJ - leapG;\n\n // Find how many years have passed since the last leap year.\n if (jump - n < 6) {\n n = n - jump + div(jump + 4, 33) * 33;\n }\n let leap = mod(mod(n + 1, 33) - 1, 4);\n if (leap === -1) {\n leap = 4;\n }\n\n return {leap: leap, gy: gYear, march: march};\n}\n\n/*\n Calculates Gregorian and Julian calendar dates from the Julian Day number\n (jdn) for the period since jdn=-34839655 (i.e. the year -100100 of both\n calendars) to some millions years ahead of the present.\n @param jdn Julian Day number\n @return\n gYear: Calendar year (years BC numbered 0, -1, -2, ...)\n gMonth: Calendar month (1 to 12)\n gDay: Calendar day of the month M (1 to 28/29/30/31)\n */\nfunction julianToGregorian(julianDayNumber: number) {\n let j = 4 * julianDayNumber + 139361631;\n j = j + div(div(4 * julianDayNumber + 183187720, 146097) * 3, 4) * 4 - 3908;\n const i = div(mod(j, 1461), 4) * 5 + 308;\n const gDay = div(mod(i, 153), 5) + 1;\n const gMonth = mod(div(i, 153), 12) + 1;\n const gYear = div(j, 1461) - 100100 + div(8 - gMonth, 6);\n\n return new Date(gYear, gMonth - 1, gDay);\n}\n\n/*\n Converts a date of the Jalali calendar to the Julian Day number.\n @param jy Jalali year (1 to 3100)\n @param jm Jalali month (1 to 12)\n @param jd Jalali day (1 to 29/31)\n @return Julian Day number\n */\nfunction gregorianToJulian(gy: number, gm: number, gd: number) {\n let d = div((gy + div(gm - 8, 6) + 100100) * 1461, 4) + div(153 * mod(gm + 9, 12) + 2, 5) + gd - 34840408;\n d = d - div(div(gy + 100100 + div(gm - 8, 6), 100) * 3, 4) + 752;\n return d;\n}\n\n/*\n Converts the Julian Day number to a date in the Jalali calendar.\n @param julianDayNumber Julian Day number\n @return\n jalaliYear: Jalali year (1 to 3100)\n jalaliMonth: Jalali month (1 to 12)\n jalaliDay: Jalali day (1 to 29/31)\n */\nfunction julianToJalali(julianDayNumber: number) {\n let gy = julianToGregorian(julianDayNumber).getFullYear() // Calculate Gregorian year (gy).\n ,\n jalaliYear = gy - 621, r = jalCal(jalaliYear), gregorianDay = gregorianToJulian(gy, 3, r.march), jalaliDay,\n jalaliMonth, numberOfDays;\n\n // Find number of days that passed since 1 Farvardin.\n numberOfDays = julianDayNumber - gregorianDay;\n if (numberOfDays >= 0) {\n if (numberOfDays <= 185) {\n // The first 6 months.\n jalaliMonth = 1 + div(numberOfDays, 31);\n jalaliDay = mod(numberOfDays, 31) + 1;\n return new NgbDate(jalaliYear, jalaliMonth, jalaliDay);\n } else {\n // The remaining months.\n numberOfDays -= 186;\n }\n } else {\n // Previous Jalali year.\n jalaliYear -= 1;\n numberOfDays += 179;\n if (r.leap === 1) {\n numberOfDays += 1;\n }\n }\n jalaliMonth = 7 + div(numberOfDays, 30);\n jalaliDay = mod(numberOfDays, 30) + 1;\n\n return new NgbDate(jalaliYear, jalaliMonth, jalaliDay);\n}\n\n/*\n Converts a date of the Jalali calendar to the Julian Day number.\n @param jYear Jalali year (1 to 3100)\n @param jMonth Jalali month (1 to 12)\n @param jDay Jalali day (1 to 29/31)\n @return Julian Day number\n */\nfunction jalaliToJulian(jYear: number, jMonth: number, jDay: number) {\n let r = jalCal(jYear);\n return gregorianToJulian(r.gy, 3, r.march) + (jMonth - 1) * 31 - div(jMonth, 7) * (jMonth - 7) + jDay - 1;\n}\n\n/**\n * Returns the number of days in a specific jalali month.\n */\nfunction getDaysPerMonth(month: number, year: number): number {\n if (month <= 6) {\n return 31;\n }\n if (month <= 11) {\n return 30;\n }\n if (jalCal(year).leap === 0) {\n return 30;\n }\n return 29;\n}\n","import {Injectable} from '@angular/core';\nimport {NgbDate} from '../ngb-date';\nimport {NgbCalendar, NgbPeriod} from '../ngb-calendar';\nimport {isInteger} from '../../util/util';\n\nimport {fromGregorian, setJalaliDay, setJalaliMonth, setJalaliYear, toGregorian} from './jalali';\n\n@Injectable()\nexport class NgbCalendarPersian extends NgbCalendar {\n getDaysPerWeek() { return 7; }\n\n getMonths() { return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; }\n\n getWeeksPerMonth() { return 6; }\n\n getNext(date: NgbDate, period: NgbPeriod = 'd', number = 1) {\n date = new NgbDate(date.year, date.month, date.day);\n\n switch (period) {\n case 'y':\n date = setJalaliYear(date, date.year + number);\n date.month = 1;\n date.day = 1;\n return date;\n case 'm':\n date = setJalaliMonth(date, date.month + number);\n date.day = 1;\n return date;\n case 'd':\n return setJalaliDay(date, date.day + number);\n default:\n return date;\n }\n }\n\n getPrev(date: NgbDate, period: NgbPeriod = 'd', number = 1) { return this.getNext(date, period, -number); }\n\n getWeekday(date: NgbDate) {\n const day = toGregorian(date).getDay();\n // in JS Date Sun=0, in ISO 8601 Sun=7\n return day === 0 ? 7 : day;\n }\n\n getWeekNumber(week: NgbDate[], firstDayOfWeek: number) {\n // in JS Date Sun=0, in ISO 8601 Sun=7\n if (firstDayOfWeek === 7) {\n firstDayOfWeek = 0;\n }\n\n const thursdayIndex = (4 + 7 - firstDayOfWeek) % 7;\n const date = week[thursdayIndex];\n\n const jsDate = toGregorian(date);\n jsDate.setDate(jsDate.getDate() + 4 - (jsDate.getDay() || 7)); // Thursday\n const time = jsDate.getTime();\n const startDate = toGregorian(new NgbDate(date.year, 1, 1));\n return Math.floor(Math.round((time - startDate.getTime()) / 86400000) / 7) + 1;\n }\n\n getToday(): NgbDate { return fromGregorian(new Date()); }\n\n isValid(date: NgbDate): boolean {\n return date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day) &&\n !isNaN(toGregorian(date).getTime());\n }\n}\n","import {NgbDate} from '../ngb-date';\nimport {NgbDateStruct} from '../ngb-date-struct';\n\nconst PARTS_PER_HOUR = 1080;\nconst PARTS_PER_DAY = 24 * PARTS_PER_HOUR;\nconst PARTS_FRACTIONAL_MONTH = 12 * PARTS_PER_HOUR + 793;\nconst PARTS_PER_MONTH = 29 * PARTS_PER_DAY + PARTS_FRACTIONAL_MONTH;\nconst BAHARAD = 11 * PARTS_PER_HOUR + 204;\nconst HEBREW_DAY_ON_JAN_1_1970 = 2092591;\nconst GREGORIAN_EPOCH = 1721425.5;\n\nfunction isGregorianLeapYear(year: number): boolean {\n return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;\n}\n\nfunction numberOfFirstDayInYear(year: number): number {\n let monthsBeforeYear = Math.floor((235 * year - 234) / 19);\n let fractionalMonthsBeforeYear = monthsBeforeYear * PARTS_FRACTIONAL_MONTH + BAHARAD;\n let dayNumber = monthsBeforeYear * 29 + Math.floor(fractionalMonthsBeforeYear / PARTS_PER_DAY);\n let timeOfDay = fractionalMonthsBeforeYear % PARTS_PER_DAY;\n\n let dayOfWeek = dayNumber % 7; // 0 == Monday\n\n if (dayOfWeek === 2 || dayOfWeek === 4 || dayOfWeek === 6) {\n dayNumber++;\n dayOfWeek = dayNumber % 7;\n }\n if (dayOfWeek === 1 && timeOfDay > 15 * PARTS_PER_HOUR + 204 && !isHebrewLeapYear(year)) {\n dayNumber += 2;\n } else if (dayOfWeek === 0 && timeOfDay > 21 * PARTS_PER_HOUR + 589 && isHebrewLeapYear(year - 1)) {\n dayNumber++;\n }\n return dayNumber;\n}\n\nfunction getDaysInGregorianMonth(month: number, year: number): number {\n let days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n if (isGregorianLeapYear(year)) {\n days[1]++;\n }\n return days[month - 1];\n}\n\nfunction getHebrewMonths(year: number): number {\n return isHebrewLeapYear(year) ? 13 : 12;\n}\n\n/**\n * Returns the number of days in a specific Hebrew year.\n * `year` is any Hebrew year.\n */\nfunction getDaysInHebrewYear(year: number): number {\n return numberOfFirstDayInYear(year + 1) - numberOfFirstDayInYear(year);\n}\n\nexport function isHebrewLeapYear(year: number): boolean {\n let b = (year * 12 + 17) % 19;\n return b >= ((b < 0) ? -7 : 12);\n}\n\n/**\n * Returns the number of days in a specific Hebrew month.\n * `month` is 1 for Nisan, 2 for Iyar etc. Note: Hebrew leap year contains 13 months.\n * `year` is any Hebrew year.\n */\nexport function getDaysInHebrewMonth(month: number, year: number): number {\n let yearLength = numberOfFirstDayInYear(year + 1) - numberOfFirstDayInYear(year);\n let yearType = (yearLength <= 380 ? yearLength : (yearLength - 30)) - 353;\n let leapYear = isHebrewLeapYear(year);\n let daysInMonth = leapYear ? [30, 29, 29, 29, 30, 30, 29, 30, 29, 30, 29, 30, 29] :\n [30, 29, 29, 29, 30, 29, 30, 29, 30, 29, 30, 29];\n if (yearType > 0) {\n daysInMonth[2]++; // Kislev gets an extra day in normal or complete years.\n }\n if (yearType > 1) {\n daysInMonth[1]++; // Heshvan gets an extra day in complete years only.\n }\n return daysInMonth[month - 1];\n}\n\nexport function getDayNumberInHebrewYear(date: NgbDate): number {\n let numberOfDay = 0;\n for (let i = 1; i < date.month; i++) {\n numberOfDay += getDaysInHebrewMonth(i, date.year);\n }\n return numberOfDay + date.day;\n}\n\nexport function setHebrewMonth(date: NgbDate, val: number): NgbDate {\n let after = val >= 0;\n if (!after) {\n val = -val;\n }\n while (val > 0) {\n if (after) {\n if (val > getHebrewMonths(date.year) - date.month) {\n val -= getHebrewMonths(date.year) - date.month + 1;\n date.year++;\n date.month = 1;\n } else {\n date.month += val;\n val = 0;\n }\n } else {\n if (val >= date.month) {\n date.year--;\n val -= date.month;\n date.month = getHebrewMonths(date.year);\n } else {\n date.month -= val;\n val = 0;\n }\n }\n }\n return date;\n}\n\nexport function setHebrewDay(date: NgbDate, val: number): NgbDate {\n let after = val >= 0;\n if (!after) {\n val = -val;\n }\n while (val > 0) {\n if (after) {\n if (val > getDaysInHebrewYear(date.year) - getDayNumberInHebrewYear(date)) {\n val -= getDaysInHebrewYear(date.year) - getDayNumberInHebrewYear(date) + 1;\n date.year++;\n date.month = 1;\n date.day = 1;\n } else if (val > getDaysInHebrewMonth(date.month, date.year) - date.day) {\n val -= getDaysInHebrewMonth(date.month, date.year) - date.day + 1;\n date.month++;\n date.day = 1;\n } else {\n date.day += val;\n val = 0;\n }\n } else {\n if (val >= date.day) {\n val -= date.day;\n date.month--;\n if (date.month === 0) {\n date.year--;\n date.month = getHebrewMonths(date.year);\n }\n date.day = getDaysInHebrewMonth(date.month, date.year);\n } else {\n date.day -= val;\n val = 0;\n }\n }\n }\n return date;\n}\n\n/**\n * Returns the equivalent Hebrew date value for a give input Gregorian date.\n * `gdate` is a JS Date to be converted to Hebrew date.\n */\nexport function fromGregorian(gdate: Date): NgbDate {\n const date = new Date(gdate);\n const gYear = date.getFullYear(), gMonth = date.getMonth(), gDay = date.getDate();\n let julianDay = GREGORIAN_EPOCH - 1 + 365 * (gYear - 1) + Math.floor((gYear - 1) / 4) -\n Math.floor((gYear - 1) / 100) + Math.floor((gYear - 1) / 400) +\n Math.floor((367 * (gMonth + 1) - 362) / 12 + (gMonth + 1 <= 2 ? 0 : isGregorianLeapYear(gYear) ? -1 : -2) + gDay);\n julianDay = Math.floor(julianDay + 0.5);\n let daysSinceHebEpoch = julianDay - 347997;\n let monthsSinceHebEpoch = Math.floor(daysSinceHebEpoch * PARTS_PER_DAY / PARTS_PER_MONTH);\n let hYear = Math.floor((monthsSinceHebEpoch * 19 + 234) / 235) + 1;\n let firstDayOfThisYear = numberOfFirstDayInYear(hYear);\n let dayOfYear = daysSinceHebEpoch - firstDayOfThisYear;\n while (dayOfYear < 1) {\n hYear--;\n firstDayOfThisYear = numberOfFirstDayInYear(hYear);\n dayOfYear = daysSinceHebEpoch - firstDayOfThisYear;\n }\n let hMonth = 1;\n let hDay = dayOfYear;\n while (hDay > getDaysInHebrewMonth(hMonth, hYear)) {\n hDay -= getDaysInHebrewMonth(hMonth, hYear);\n hMonth++;\n }\n return new NgbDate(hYear, hMonth, hDay);\n}\n\n/**\n * Returns the equivalent JS date value for a given Hebrew date.\n * `hebrewDate` is an Hebrew date to be converted to Gregorian.\n */\nexport function toGregorian(hebrewDate: NgbDateStruct | NgbDate): Date {\n const hYear = hebrewDate.year;\n const hMonth = hebrewDate.month;\n const hDay = hebrewDate.day;\n let days = numberOfFirstDayInYear(hYear);\n for (let i = 1; i < hMonth; i++) {\n days += getDaysInHebrewMonth(i, hYear);\n }\n days += hDay;\n let diffDays = days - HEBREW_DAY_ON_JAN_1_1970;\n let after = diffDays >= 0;\n if (!after) {\n diffDays = -diffDays;\n }\n let gYear = 1970;\n let gMonth = 1;\n let gDay = 1;\n while (diffDays > 0) {\n if (after) {\n if (diffDays >= (isGregorianLeapYear(gYear) ? 366 : 365)) {\n diffDays -= isGregorianLeapYear(gYear) ? 366 : 365;\n gYear++;\n } else if (diffDays >= getDaysInGregorianMonth(gMonth, gYear)) {\n diffDays -= getDaysInGregorianMonth(gMonth, gYear);\n gMonth++;\n } else {\n gDay += diffDays;\n diffDays = 0;\n }\n } else {\n if (diffDays >= (isGregorianLeapYear(gYear - 1) ? 366 : 365)) {\n diffDays -= isGregorianLeapYear(gYear - 1) ? 366 : 365;\n gYear--;\n } else {\n if (gMonth > 1) {\n gMonth--;\n } else {\n gMonth = 12;\n gYear--;\n }\n if (diffDays >= getDaysInGregorianMonth(gMonth, gYear)) {\n diffDays -= getDaysInGregorianMonth(gMonth, gYear);\n } else {\n gDay = getDaysInGregorianMonth(gMonth, gYear) - diffDays + 1;\n diffDays = 0;\n }\n }\n }\n }\n return new Date(gYear, gMonth - 1, gDay);\n}\n\nexport function hebrewNumerals(numerals: number): string {\n if (!numerals) {\n return '';\n }\n const hArray0_9 = ['', '\\u05d0', '\\u05d1', '\\u05d2', '\\u05d3', '\\u05d4', '\\u05d5', '\\u05d6', '\\u05d7', '\\u05d8'];\n const hArray10_19 = [\n '\\u05d9', '\\u05d9\\u05d0', '\\u05d9\\u05d1', '\\u05d9\\u05d2', '\\u05d9\\u05d3', '\\u05d8\\u05d5', '\\u05d8\\u05d6',\n '\\u05d9\\u05d6', '\\u05d9\\u05d7', '\\u05d9\\u05d8'\n ];\n const hArray20_90 = ['', '', '\\u05db', '\\u05dc', '\\u05de', '\\u05e0', '\\u05e1', '\\u05e2', '\\u05e4', '\\u05e6'];\n const hArray100_900 = [\n '', '\\u05e7', '\\u05e8', '\\u05e9', '\\u05ea', '\\u05ea\\u05e7', '\\u05ea\\u05e8', '\\u05ea\\u05e9', '\\u05ea\\u05ea',\n '\\u05ea\\u05ea\\u05e7'\n ];\n const hArray1000_9000 = [\n '', '\\u05d0', '\\u05d1', '\\u05d1\\u05d0', '\\u05d1\\u05d1', '\\u05d4', '\\u05d4\\u05d0', '\\u05d4\\u05d1',\n '\\u05d4\\u05d1\\u05d0', '\\u05d4\\u05d1\\u05d1'\n ];\n const geresh = '\\u05f3', gershaim = '\\u05f4';\n let mem = 0;\n let result = [];\n let step = 0;\n while (numerals > 0) {\n let m = numerals % 10;\n if (step === 0) {\n mem = m;\n } else if (step === 1) {\n if (m !== 1) {\n result.unshift(hArray20_90[m], hArray0_9[mem]);\n } else {\n result.unshift(hArray10_19[mem]);\n }\n } else if (step === 2) {\n result.unshift(hArray100_900[m]);\n } else {\n if (m !== 5) {\n result.unshift(hArray1000_9000[m], geresh, ' ');\n }\n break;\n }\n numerals = Math.floor(numerals / 10);\n if (step === 0 && numerals === 0) {\n result.unshift(hArray0_9[m]);\n }\n step++;\n }\n result = result.join('').split('');\n if (result.length === 1) {\n result.push(geresh);\n } else if (result.length > 1) {\n result.splice(result.length - 1, 0, gershaim);\n }\n return result.join('');\n}\n","import {NgbDate} from '../ngb-date';\nimport {fromJSDate, NgbCalendar, NgbPeriod, toJSDate} from '../ngb-calendar';\nimport {Injectable} from '@angular/core';\nimport {isNumber} from '../../util/util';\nimport {\n fromGregorian,\n getDayNumberInHebrewYear,\n getDaysInHebrewMonth,\n isHebrewLeapYear,\n toGregorian,\n setHebrewDay,\n setHebrewMonth\n} from './hebrew';\n\n/**\n * @since 3.2.0\n */\n@Injectable()\nexport class NgbCalendarHebrew extends NgbCalendar {\n getDaysPerWeek() { return 7; }\n\n getMonths(year?: number) {\n if (year && isHebrewLeapYear(year)) {\n return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13];\n } else {\n return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];\n }\n }\n\n getWeeksPerMonth() { return 6; }\n\n isValid(date: NgbDate): boolean {\n let b = date && isNumber(date.year) && isNumber(date.month) && isNumber(date.day);\n b = b && date.month > 0 && date.month <= (isHebrewLeapYear(date.year) ? 13 : 12);\n b = b && date.day > 0 && date.day <= getDaysInHebrewMonth(date.month, date.year);\n return b && !isNaN(toGregorian(date).getTime());\n }\n\n getNext(date: NgbDate, period: NgbPeriod = 'd', number = 1) {\n date = new NgbDate(date.year, date.month, date.day);\n\n switch (period) {\n case 'y':\n date.year += number;\n date.month = 1;\n date.day = 1;\n return date;\n case 'm':\n date = setHebrewMonth(date, number);\n date.day = 1;\n return date;\n case 'd':\n return setHebrewDay(date, number);\n default:\n return date;\n }\n }\n\n getPrev(date: NgbDate, period: NgbPeriod = 'd', number = 1) { return this.getNext(date, period, -number); }\n\n getWeekday(date: NgbDate) {\n const day = toGregorian(date).getDay();\n // in JS Date Sun=0, in ISO 8601 Sun=7\n return day === 0 ? 7 : day;\n }\n\n getWeekNumber(week: NgbDate[], firstDayOfWeek: number) {\n const date = week[week.length - 1];\n return Math.ceil(getDayNumberInHebrewYear(date) / 7);\n }\n\n getToday(): NgbDate { return fromGregorian(new Date()); }\n\n /**\n * @since 3.4.0\n */\n toGregorian(date: NgbDate): NgbDate { return fromJSDate(toGregorian(date)); }\n\n /**\n * @since 3.4.0\n */\n fromGregorian(date: NgbDate): NgbDate { return fromGregorian(toJSDate(date)); }\n}\n","import {NgbDatepickerI18n} from '../datepicker-i18n';\nimport {NgbDateStruct} from '../../index';\nimport {hebrewNumerals, isHebrewLeapYear} from './hebrew';\nimport {Injectable} from '@angular/core';\n\n\nconst WEEKDAYS = ['שני', 'שלישי', 'רביעי', 'חמישי', 'שישי', 'שבת', 'ראשון'];\nconst MONTHS = ['תשרי', 'חשון', 'כסלו', 'טבת', 'שבט', 'אדר', 'ניסן', 'אייר', 'סיון', 'תמוז', 'אב', 'אלול'];\nconst MONTHS_LEAP =\n ['תשרי', 'חשון', 'כסלו', 'טבת', 'שבט', 'אדר א׳', 'אדר ב׳', 'ניסן', 'אייר', 'סיון', 'תמוז', 'אב', 'אלול'];\n\n/**\n * @since 3.2.0\n */\n@Injectable()\nexport class NgbDatepickerI18nHebrew extends NgbDatepickerI18n {\n getMonthShortName(month: number, year?: number): string { return this.getMonthFullName(month, year); }\n\n getMonthFullName(month: number, year?: number): string {\n return isHebrewLeapYear(year) ? MONTHS_LEAP[month - 1] : MONTHS[month - 1];\n }\n\n getWeekdayShortName(weekday: number): string { return WEEKDAYS[weekday - 1]; }\n\n getDayAriaLabel(date: NgbDateStruct): string {\n return `${hebrewNumerals(date.day)} ${this.getMonthFullName(date.month, date.year)} ${hebrewNumerals(date.year)}`;\n }\n\n getDayNumerals(date: NgbDateStruct): string { return hebrewNumerals(date.day); }\n\n getWeekNumerals(weekNumber: number): string { return hebrewNumerals(weekNumber); }\n\n getYearNumerals(year: number): string { return hebrewNumerals(year); }\n}\n","import {Injectable} from '@angular/core';\nimport {NgbDateAdapter} from './ngb-date-adapter';\nimport {NgbDateStruct} from '../ngb-date-struct';\nimport {isInteger} from '../../util/util';\n\n/**\n * [`NgbDateAdapter`](#/components/datepicker/api#NgbDateAdapter) implementation that uses\n * native javascript dates as a user date model.\n */\n@Injectable()\nexport class NgbDateNativeAdapter extends NgbDateAdapter {\n /**\n * Converts a native `Date` to a `NgbDateStruct`.\n */\n fromModel(date: Date): NgbDateStruct {\n return (date instanceof Date && !isNaN(date.getTime())) ? this._fromNativeDate(date) : null;\n }\n\n /**\n * Converts a `NgbDateStruct` to a native `Date`.\n */\n toModel(date: NgbDateStruct): Date {\n return date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day) ? this._toNativeDate(date) :\n null;\n }\n\n protected _fromNativeDate(date: Date): NgbDateStruct {\n return {year: date.getFullYear(), month: date.getMonth() + 1, day: date.getDate()};\n }\n\n protected _toNativeDate(date: NgbDateStruct): Date {\n const jsDate = new Date(date.year, date.month - 1, date.day, 12);\n // avoid 30 -> 1930 conversion\n jsDate.setFullYear(date.year);\n return jsDate;\n }\n}\n","import {Injectable} from '@angular/core';\nimport {NgbDateStruct} from '../ngb-date-struct';\nimport {NgbDateNativeAdapter} from './ngb-date-native-adapter';\n\n/**\n * Same as [`NgbDateNativeAdapter`](#/components/datepicker/api#NgbDateNativeAdapter), but with UTC dates.\n *\n * @since 3.2.0\n */\n@Injectable()\nexport class NgbDateNativeUTCAdapter extends NgbDateNativeAdapter {\n protected _fromNativeDate(date: Date): NgbDateStruct {\n return {year: date.getUTCFullYear(), month: date.getUTCMonth() + 1, day: date.getUTCDate()};\n }\n\n protected _toNativeDate(date: NgbDateStruct): Date {\n const jsDate = new Date(Date.UTC(date.year, date.month - 1, date.day));\n // avoid 30 -> 1930 conversion\n jsDate.setUTCFullYear(date.year);\n return jsDate;\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FormsModule} from '@angular/forms';\nimport {NgbDatepicker} from './datepicker';\nimport {NgbDatepickerMonthView} from './datepicker-month-view';\nimport {NgbDatepickerNavigation} from './datepicker-navigation';\nimport {NgbInputDatepicker} from './datepicker-input';\nimport {NgbDatepickerDayView} from './datepicker-day-view';\nimport {NgbDatepickerNavigationSelect} from './datepicker-navigation-select';\n\nexport {NgbDatepicker, NgbDatepickerNavigateEvent} from './datepicker';\nexport {NgbInputDatepicker} from './datepicker-input';\nexport {NgbCalendar, NgbPeriod, NgbCalendarGregorian} from './ngb-calendar';\nexport {NgbCalendarIslamicCivil} from './hijri/ngb-calendar-islamic-civil';\nexport {NgbCalendarIslamicUmalqura} from './hijri/ngb-calendar-islamic-umalqura';\nexport {NgbCalendarPersian} from './jalali/ngb-calendar-persian';\nexport {NgbCalendarHebrew} from './hebrew/ngb-calendar-hebrew';\nexport {NgbDatepickerI18nHebrew} from './hebrew/datepicker-i18n-hebrew';\nexport {NgbDatepickerMonthView} from './datepicker-month-view';\nexport {NgbDatepickerDayView} from './datepicker-day-view';\nexport {NgbDatepickerNavigation} from './datepicker-navigation';\nexport {NgbDatepickerNavigationSelect} from './datepicker-navigation-select';\nexport {NgbDatepickerConfig} from './datepicker-config';\nexport {NgbDatepickerI18n} from './datepicker-i18n';\nexport {NgbDateStruct} from './ngb-date-struct';\nexport {NgbDate} from './ngb-date';\nexport {NgbDateAdapter} from './adapters/ngb-date-adapter';\nexport {NgbDateNativeAdapter} from './adapters/ngb-date-native-adapter';\nexport {NgbDateNativeUTCAdapter} from './adapters/ngb-date-native-utc-adapter';\nexport {NgbDateParserFormatter} from './ngb-date-parser-formatter';\n\n@NgModule({\n declarations: [\n NgbDatepicker, NgbDatepickerMonthView, NgbDatepickerNavigation, NgbDatepickerNavigationSelect, NgbDatepickerDayView,\n NgbInputDatepicker\n ],\n exports: [NgbDatepicker, NgbInputDatepicker],\n imports: [CommonModule, FormsModule],\n entryComponents: [NgbDatepicker]\n})\nexport class NgbDatepickerModule {\n}\n","import {Injectable} from '@angular/core';\nimport {PlacementArray} from '../util/positioning';\n\n/**\n * A configuration service for the [`NgbDropdown`](#/components/dropdown/api#NgbDropdown) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the dropdowns used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbDropdownConfig {\n autoClose: boolean | 'outside' | 'inside' = true;\n placement: PlacementArray = ['bottom-left', 'bottom-right', 'top-left', 'top-right'];\n container: null | 'body';\n}\n","import {\n ChangeDetectorRef,\n ContentChild,\n ContentChildren,\n Directive,\n ElementRef,\n EventEmitter,\n forwardRef,\n Inject,\n Input,\n NgZone,\n AfterContentInit,\n OnDestroy,\n Output,\n QueryList,\n Renderer2,\n SimpleChanges,\n Optional\n} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\nimport {Subject, Subscription} from 'rxjs';\nimport {take} from 'rxjs/operators';\n\nimport {Placement, PlacementArray, positionElements} from '../util/positioning';\nimport {ngbAutoClose} from '../util/autoclose';\nimport {Key} from '../util/key';\n\nimport {NgbDropdownConfig} from './dropdown-config';\n\n@Directive({selector: '.navbar'})\nexport class NgbNavbar {\n}\n\n/**\n * A directive you should put put on a dropdown item to enable keyboard navigation.\n * Arrow keys will move focus between items marked with this directive.\n *\n * @since 4.1.0\n */\n@Directive({selector: '[ngbDropdownItem]', host: {'class': 'dropdown-item', '[class.disabled]': 'disabled'}})\nexport class NgbDropdownItem {\n private _disabled = false;\n\n @Input()\n set disabled(value: boolean) {\n this._disabled = value === '' || value === true; // accept an empty attribute as true\n }\n\n get disabled(): boolean { return this._disabled; }\n\n constructor(public elementRef: ElementRef) {}\n}\n\n/**\n * A directive that wraps dropdown menu content and dropdown items.\n */\n@Directive({\n selector: '[ngbDropdownMenu]',\n host: {\n '[class.dropdown-menu]': 'true',\n '[class.show]': 'dropdown.isOpen()',\n '[attr.x-placement]': 'placement',\n '(keydown.ArrowUp)': 'dropdown.onKeyDown($event)',\n '(keydown.ArrowDown)': 'dropdown.onKeyDown($event)',\n '(keydown.Home)': 'dropdown.onKeyDown($event)',\n '(keydown.End)': 'dropdown.onKeyDown($event)',\n '(keydown.Enter)': 'dropdown.onKeyDown($event)',\n '(keydown.Space)': 'dropdown.onKeyDown($event)'\n }\n})\nexport class NgbDropdownMenu {\n placement: Placement = 'bottom';\n isOpen = false;\n\n @ContentChildren(NgbDropdownItem) menuItems: QueryList;\n\n constructor(@Inject(forwardRef(() => NgbDropdown)) public dropdown) {}\n}\n\n/**\n * A directive to mark an element to which dropdown menu will be anchored.\n *\n * This is a simple version of the `NgbDropdownToggle` directive.\n * It plays the same role, but doesn't listen to click events to toggle dropdown menu thus enabling support\n * for events other than click.\n *\n * @since 1.1.0\n */\n@Directive({\n selector: '[ngbDropdownAnchor]',\n host: {'class': 'dropdown-toggle', 'aria-haspopup': 'true', '[attr.aria-expanded]': 'dropdown.isOpen()'}\n})\nexport class NgbDropdownAnchor {\n anchorEl;\n\n constructor(@Inject(forwardRef(() => NgbDropdown)) public dropdown, private _elementRef: ElementRef) {\n this.anchorEl = _elementRef.nativeElement;\n }\n\n getNativeElement() { return this._elementRef.nativeElement; }\n}\n\n/**\n * A directive to mark an element that will toggle dropdown via the `click` event.\n *\n * You can also use `NgbDropdownAnchor` as an alternative.\n */\n@Directive({\n selector: '[ngbDropdownToggle]',\n host: {\n 'class': 'dropdown-toggle',\n 'aria-haspopup': 'true',\n '[attr.aria-expanded]': 'dropdown.isOpen()',\n '(click)': 'dropdown.toggle()',\n '(keydown.ArrowUp)': 'dropdown.onKeyDown($event)',\n '(keydown.ArrowDown)': 'dropdown.onKeyDown($event)',\n '(keydown.Home)': 'dropdown.onKeyDown($event)',\n '(keydown.End)': 'dropdown.onKeyDown($event)'\n },\n providers: [{provide: NgbDropdownAnchor, useExisting: forwardRef(() => NgbDropdownToggle)}]\n})\nexport class NgbDropdownToggle extends NgbDropdownAnchor {\n constructor(@Inject(forwardRef(() => NgbDropdown)) dropdown, elementRef: ElementRef) {\n super(dropdown, elementRef);\n }\n}\n\n/**\n * A directive that provides contextual overlays for displaying lists of links and more.\n */\n@Directive({selector: '[ngbDropdown]', exportAs: 'ngbDropdown', host: {'[class.show]': 'isOpen()'}})\nexport class NgbDropdown implements AfterContentInit, OnDestroy {\n private _closed$ = new Subject();\n private _zoneSubscription: Subscription;\n private _bodyContainer: HTMLElement;\n\n @ContentChild(NgbDropdownMenu, {static: false}) private _menu: NgbDropdownMenu;\n @ContentChild(NgbDropdownMenu, {read: ElementRef, static: false}) private _menuElement: ElementRef;\n @ContentChild(NgbDropdownAnchor, {static: false}) private _anchor: NgbDropdownAnchor;\n\n /**\n * Indicates whether the dropdown should be closed when clicking one of dropdown items or pressing ESC.\n *\n * * `true` - the dropdown will close on both outside and inside (menu) clicks.\n * * `false` - the dropdown can only be closed manually via `close()` or `toggle()` methods.\n * * `\"inside\"` - the dropdown will close on inside menu clicks, but not outside clicks.\n * * `\"outside\"` - the dropdown will close only on the outside clicks and not on menu clicks.\n */\n @Input() autoClose: boolean | 'outside' | 'inside';\n\n /**\n * Defines whether or not the dropdown menu is opened initially.\n */\n @Input('open') _open = false;\n\n /**\n * The preferred placement of the dropdown.\n *\n * Possible values are `\"top\"`, `\"top-left\"`, `\"top-right\"`, `\"bottom\"`, `\"bottom-left\"`,\n * `\"bottom-right\"`, `\"left\"`, `\"left-top\"`, `\"left-bottom\"`, `\"right\"`, `\"right-top\"`,\n * `\"right-bottom\"`\n *\n * Accepts an array of strings or a string with space separated possible values.\n *\n * The default order of preference is `\"bottom-left bottom-right top-left top-right\"`\n *\n * Please see the [positioning overview](#/positioning) for more details.\n */\n @Input() placement: PlacementArray;\n\n /**\n * A selector specifying the element the dropdown should be appended to.\n * Currently only supports \"body\".\n *\n * @since 4.1.0\n */\n @Input() container: null | 'body';\n\n /**\n * Enable or disable the dynamic positioning. The default value is dynamic unless the dropdown is used\n * inside a Bootstrap navbar. If you need custom placement for a dropdown in a navbar, set it to\n * dynamic explicitly. See the [positioning of dropdown](#/positioning#dropdown)\n * and the [navbar demo](/#/components/dropdown/examples#navbar) for more details.\n *\n * @since 4.2.0\n */\n @Input() display: 'dynamic' | 'static';\n\n /**\n * An event fired when the dropdown is opened or closed.\n *\n * The event payload is a `boolean`:\n * * `true` - the dropdown was opened\n * * `false` - the dropdown was closed\n */\n @Output() openChange = new EventEmitter();\n\n constructor(\n private _changeDetector: ChangeDetectorRef, config: NgbDropdownConfig, @Inject(DOCUMENT) private _document: any,\n private _ngZone: NgZone, private _elementRef: ElementRef, private _renderer: Renderer2,\n @Optional() ngbNavbar: NgbNavbar) {\n this.placement = config.placement;\n this.container = config.container;\n this.autoClose = config.autoClose;\n\n this.display = ngbNavbar ? 'static' : 'dynamic';\n\n this._zoneSubscription = _ngZone.onStable.subscribe(() => { this._positionMenu(); });\n }\n\n ngAfterContentInit() {\n this._ngZone.onStable.pipe(take(1)).subscribe(() => {\n this._applyPlacementClasses();\n if (this._open) {\n this._setCloseHandlers();\n }\n });\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.container && this._open) {\n this._applyContainer(this.container);\n }\n\n if (changes.placement && !changes.placement.isFirstChange) {\n this._applyPlacementClasses();\n }\n }\n\n /**\n * Checks if the dropdown menu is open.\n */\n isOpen(): boolean { return this._open; }\n\n /**\n * Opens the dropdown menu.\n */\n open(): void {\n if (!this._open) {\n this._open = true;\n this._applyContainer(this.container);\n this.openChange.emit(true);\n this._setCloseHandlers();\n }\n }\n\n private _setCloseHandlers() {\n const anchor = this._anchor;\n ngbAutoClose(\n this._ngZone, this._document, this.autoClose, () => this.close(), this._closed$,\n this._menu ? [this._menuElement.nativeElement] : [], anchor ? [anchor.getNativeElement()] : [],\n '.dropdown-item,.dropdown-divider');\n }\n\n /**\n * Closes the dropdown menu.\n */\n close(): void {\n if (this._open) {\n this._open = false;\n this._resetContainer();\n this._closed$.next();\n this.openChange.emit(false);\n this._changeDetector.markForCheck();\n }\n }\n\n /**\n * Toggles the dropdown menu.\n */\n toggle(): void {\n if (this.isOpen()) {\n this.close();\n } else {\n this.open();\n }\n }\n\n ngOnDestroy() {\n this._resetContainer();\n\n this._closed$.next();\n this._zoneSubscription.unsubscribe();\n }\n\n onKeyDown(event: KeyboardEvent) {\n // tslint:disable-next-line:deprecation\n const key = event.which;\n const itemElements = this._getMenuElements();\n\n let position = -1;\n let isEventFromItems = false;\n const isEventFromToggle = this._isEventFromToggle(event);\n\n if (!isEventFromToggle && itemElements.length) {\n itemElements.forEach((itemElement, index) => {\n if (itemElement.contains(event.target as HTMLElement)) {\n isEventFromItems = true;\n }\n if (itemElement === this._document.activeElement) {\n position = index;\n }\n });\n }\n\n // closing on Enter / Space\n if (key === Key.Space || key === Key.Enter) {\n if (isEventFromItems && (this.autoClose === true || this.autoClose === 'inside')) {\n this.close();\n }\n return;\n }\n\n // opening / navigating\n if (isEventFromToggle || isEventFromItems) {\n this.open();\n\n if (itemElements.length) {\n switch (key) {\n case Key.ArrowDown:\n position = Math.min(position + 1, itemElements.length - 1);\n break;\n case Key.ArrowUp:\n if (this._isDropup() && position === -1) {\n position = itemElements.length - 1;\n break;\n }\n position = Math.max(position - 1, 0);\n break;\n case Key.Home:\n position = 0;\n break;\n case Key.End:\n position = itemElements.length - 1;\n break;\n }\n itemElements[position].focus();\n }\n event.preventDefault();\n }\n }\n\n private _isDropup(): boolean { return this._elementRef.nativeElement.classList.contains('dropup'); }\n\n private _isEventFromToggle(event: KeyboardEvent) {\n return this._anchor.getNativeElement().contains(event.target as HTMLElement);\n }\n\n private _getMenuElements(): HTMLElement[] {\n const menu = this._menu;\n if (menu == null) {\n return [];\n }\n return menu.menuItems.filter(item => !item.disabled).map(item => item.elementRef.nativeElement);\n }\n\n private _positionMenu() {\n const menu = this._menu;\n if (this.isOpen() && menu) {\n this._applyPlacementClasses(\n this.display === 'dynamic' ?\n positionElements(\n this._anchor.anchorEl, this._bodyContainer || this._menuElement.nativeElement, this.placement,\n this.container === 'body') :\n this._getFirstPlacement(this.placement));\n }\n }\n\n private _getFirstPlacement(placement: PlacementArray): Placement {\n return Array.isArray(placement) ? placement[0] : placement.split(' ')[0] as Placement;\n }\n\n private _resetContainer() {\n const renderer = this._renderer;\n const menuElement = this._menuElement;\n if (menuElement) {\n const dropdownElement = this._elementRef.nativeElement;\n const dropdownMenuElement = menuElement.nativeElement;\n\n renderer.appendChild(dropdownElement, dropdownMenuElement);\n renderer.removeStyle(dropdownMenuElement, 'position');\n renderer.removeStyle(dropdownMenuElement, 'transform');\n }\n if (this._bodyContainer) {\n renderer.removeChild(this._document.body, this._bodyContainer);\n this._bodyContainer = null;\n }\n }\n\n private _applyContainer(container: null | 'body' = null) {\n this._resetContainer();\n if (container === 'body') {\n const renderer = this._renderer;\n const dropdownMenuElement = this._menuElement.nativeElement;\n const bodyContainer = this._bodyContainer = this._bodyContainer || renderer.createElement('div');\n\n // Override some styles to have the positionning working\n renderer.setStyle(bodyContainer, 'position', 'absolute');\n renderer.setStyle(dropdownMenuElement, 'position', 'static');\n renderer.setStyle(bodyContainer, 'z-index', '1050');\n\n renderer.appendChild(bodyContainer, dropdownMenuElement);\n renderer.appendChild(this._document.body, bodyContainer);\n }\n }\n\n private _applyPlacementClasses(placement?: Placement) {\n const menu = this._menu;\n if (menu) {\n if (!placement) {\n placement = this._getFirstPlacement(this.placement);\n }\n\n const renderer = this._renderer;\n const dropdownElement = this._elementRef.nativeElement;\n\n // remove the current placement classes\n renderer.removeClass(dropdownElement, 'dropup');\n renderer.removeClass(dropdownElement, 'dropdown');\n menu.placement = this.display === 'static' ? null : placement;\n\n /*\n * apply the new placement\n * in case of top use up-arrow or down-arrow otherwise\n */\n const dropdownClass = placement.search('^top') !== -1 ? 'dropup' : 'dropdown';\n renderer.addClass(dropdownElement, dropdownClass);\n\n const bodyContainer = this._bodyContainer;\n if (bodyContainer) {\n renderer.removeClass(bodyContainer, 'dropup');\n renderer.removeClass(bodyContainer, 'dropdown');\n renderer.addClass(bodyContainer, dropdownClass);\n }\n }\n }\n}\n","import {NgModule} from '@angular/core';\nimport {\n NgbDropdown,\n NgbDropdownAnchor,\n NgbDropdownToggle,\n NgbDropdownMenu,\n NgbDropdownItem,\n NgbNavbar\n} from './dropdown';\n\nexport {NgbDropdown, NgbDropdownAnchor, NgbDropdownToggle, NgbDropdownMenu, NgbDropdownItem} from './dropdown';\nexport {NgbDropdownConfig} from './dropdown-config';\n\nconst NGB_DROPDOWN_DIRECTIVES =\n [NgbDropdown, NgbDropdownAnchor, NgbDropdownToggle, NgbDropdownMenu, NgbDropdownItem, NgbNavbar];\n\n@NgModule({declarations: NGB_DROPDOWN_DIRECTIVES, exports: NGB_DROPDOWN_DIRECTIVES})\nexport class NgbDropdownModule {\n}\n","import {Injectable, Injector} from '@angular/core';\n\n/**\n * Options available when opening new modal windows with `NgbModal.open()` method.\n */\nexport interface NgbModalOptions {\n /**\n * `aria-labelledby` attribute value to set on the modal window.\n *\n * @since 2.2.0\n */\n ariaLabelledBy?: string;\n\n /**\n * If `true`, the backdrop element will be created for a given modal.\n *\n * Alternatively, specify `'static'` for a backdrop which doesn't close the modal on click.\n *\n * Default value is `true`.\n */\n backdrop?: boolean | 'static';\n\n /**\n * Callback right before the modal will be dismissed.\n *\n * If this function returns:\n * * `false`\n * * a promise resolved with `false`\n * * a promise that is rejected\n *\n * then the modal won't be dismissed.\n */\n beforeDismiss?: () => boolean | Promise;\n\n /**\n * If `true`, the modal will be centered vertically.\n *\n * Default value is `false`.\n *\n * @since 1.1.0\n */\n centered?: boolean;\n\n /**\n * A selector specifying the element all new modal windows should be appended to.\n *\n * If not specified, will be `body`.\n */\n container?: string;\n\n /**\n * The `Injector` to use for modal content.\n */\n injector?: Injector;\n\n /**\n * If `true`, the modal will be closed when `Escape` key is pressed\n *\n * Default value is `true`.\n */\n keyboard?: boolean;\n\n /**\n * Scrollable modal content (false by default).\n *\n * @since 5.0.0\n */\n scrollable?: boolean;\n\n /**\n * Size of a new modal window.\n */\n size?: 'sm' | 'lg' | 'xl';\n\n /**\n * A custom class to append to the modal window.\n */\n windowClass?: string;\n\n /**\n * A custom class to append to the modal backdrop.\n *\n * @since 1.1.0\n */\n backdropClass?: string;\n}\n\n/**\n * A configuration service for the [`NgbModal`](#/components/modal/api#NgbModal) service.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all modals used in the application.\n*\n* @since 3.1.0\n*/\n@Injectable({providedIn: 'root'})\nexport class NgbModalConfig implements NgbModalOptions {\n backdrop: boolean | 'static' = true;\n keyboard = true;\n}\n","import {\n Injector,\n TemplateRef,\n ViewRef,\n ViewContainerRef,\n Renderer2,\n ComponentRef,\n ComponentFactoryResolver,\n ApplicationRef\n} from '@angular/core';\n\nexport class ContentRef {\n constructor(public nodes: any[], public viewRef?: ViewRef, public componentRef?: ComponentRef) {}\n}\n\nexport class PopupService {\n private _windowRef: ComponentRef;\n private _contentRef: ContentRef;\n\n constructor(\n private _type: any, private _injector: Injector, private _viewContainerRef: ViewContainerRef,\n private _renderer: Renderer2, private _componentFactoryResolver: ComponentFactoryResolver,\n private _applicationRef: ApplicationRef) {}\n\n open(content?: string | TemplateRef, context?: any): ComponentRef {\n if (!this._windowRef) {\n this._contentRef = this._getContentRef(content, context);\n this._windowRef = this._viewContainerRef.createComponent(\n this._componentFactoryResolver.resolveComponentFactory(this._type), 0, this._injector,\n this._contentRef.nodes);\n }\n\n return this._windowRef;\n }\n\n close() {\n if (this._windowRef) {\n this._viewContainerRef.remove(this._viewContainerRef.indexOf(this._windowRef.hostView));\n this._windowRef = null;\n\n if (this._contentRef.viewRef) {\n this._applicationRef.detachView(this._contentRef.viewRef);\n this._contentRef.viewRef.destroy();\n this._contentRef = null;\n }\n }\n }\n\n private _getContentRef(content: string | TemplateRef, context?: any): ContentRef {\n if (!content) {\n return new ContentRef([]);\n } else if (content instanceof TemplateRef) {\n const viewRef = content.createEmbeddedView(context);\n this._applicationRef.attachView(viewRef);\n return new ContentRef([viewRef.rootNodes], viewRef);\n } else {\n return new ContentRef([[this._renderer.createText(`${content}`)]]);\n }\n }\n}\n","import {Injectable, Inject} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\n\n\nconst noop = () => {};\n\n\n\n/** Type for the callback used to revert the scrollbar compensation. */\nexport type CompensationReverter = () => void;\n\n\n\n/**\n * Utility to handle the scrollbar.\n *\n * It allows to compensate the lack of a vertical scrollbar by adding an\n * equivalent padding on the right of the body, and to remove this compensation.\n */\n@Injectable({providedIn: 'root'})\nexport class ScrollBar {\n constructor(@Inject(DOCUMENT) private _document: any) {}\n\n /**\n * Detects if a scrollbar is present and if yes, already compensates for its\n * removal by adding an equivalent padding on the right of the body.\n *\n * @return a callback used to revert the compensation (noop if there was none,\n * otherwise a function removing the padding)\n */\n compensate(): CompensationReverter { return !this._isPresent() ? noop : this._adjustBody(this._getWidth()); }\n\n /**\n * Adds a padding of the given width on the right of the body.\n *\n * @return a callback used to revert the padding to its previous value\n */\n private _adjustBody(width: number): CompensationReverter {\n const body = this._document.body;\n const userSetPadding = body.style.paddingRight;\n const paddingAmount = parseFloat(window.getComputedStyle(body)['padding-right']);\n body.style['padding-right'] = `${paddingAmount + width}px`;\n return () => body.style['padding-right'] = userSetPadding;\n }\n\n /**\n * Tells whether a scrollbar is currently present on the body.\n *\n * @return true if scrollbar is present, false otherwise\n */\n private _isPresent(): boolean {\n const rect = this._document.body.getBoundingClientRect();\n return rect.left + rect.right < window.innerWidth;\n }\n\n /**\n * Calculates and returns the width of a scrollbar.\n *\n * @return the width of a scrollbar on this page\n */\n private _getWidth(): number {\n const measurer = this._document.createElement('div');\n measurer.className = 'modal-scrollbar-measure';\n\n const body = this._document.body;\n body.appendChild(measurer);\n const width = measurer.getBoundingClientRect().width - measurer.clientWidth;\n body.removeChild(measurer);\n\n return width;\n }\n}\n","import {Component, Input} from '@angular/core';\n\n@Component({\n selector: 'ngb-modal-backdrop',\n template: '',\n host:\n {'[class]': '\"modal-backdrop fade show\" + (backdropClass ? \" \" + backdropClass : \"\")', 'style': 'z-index: 1050'}\n})\nexport class NgbModalBackdrop {\n @Input() backdropClass: string;\n}\n","import {ComponentRef} from '@angular/core';\n\nimport {NgbModalBackdrop} from './modal-backdrop';\nimport {NgbModalWindow} from './modal-window';\n\nimport {ContentRef} from '../util/popup';\n\n/**\n * A reference to the currently opened (active) modal.\n *\n * Instances of this class can be injected into your component passed as modal content.\n * So you can `.close()` or `.dismiss()` the modal window from your component.\n */\nexport class NgbActiveModal {\n /**\n * Closes the modal with an optional `result` value.\n *\n * The `NgbMobalRef.result` promise will be resolved with the provided value.\n */\n close(result?: any): void {}\n\n /**\n * Dismisses the modal with an optional `reason` value.\n *\n * The `NgbModalRef.result` promise will be rejected with the provided value.\n */\n dismiss(reason?: any): void {}\n}\n\n/**\n * A reference to the newly opened modal returned by the `NgbModal.open()` method.\n */\nexport class NgbModalRef {\n private _resolve: (result?: any) => void;\n private _reject: (reason?: any) => void;\n\n /**\n * The instance of a component used for the modal content.\n *\n * When a `TemplateRef` is used as the content, will return `undefined`.\n */\n get componentInstance(): any {\n if (this._contentRef.componentRef) {\n return this._contentRef.componentRef.instance;\n }\n }\n\n /**\n * The promise that is resolved when the modal is closed and rejected when the modal is dismissed.\n */\n result: Promise;\n\n constructor(\n private _windowCmptRef: ComponentRef, private _contentRef: ContentRef,\n private _backdropCmptRef?: ComponentRef, private _beforeDismiss?: Function) {\n _windowCmptRef.instance.dismissEvent.subscribe((reason: any) => { this.dismiss(reason); });\n\n this.result = new Promise((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n this.result.then(null, () => {});\n }\n\n /**\n * Closes the modal with an optional `result` value.\n *\n * The `NgbMobalRef.result` promise will be resolved with the provided value.\n */\n close(result?: any): void {\n if (this._windowCmptRef) {\n this._resolve(result);\n this._removeModalElements();\n }\n }\n\n private _dismiss(reason?: any) {\n this._reject(reason);\n this._removeModalElements();\n }\n\n /**\n * Dismisses the modal with an optional `reason` value.\n *\n * The `NgbModalRef.result` promise will be rejected with the provided value.\n */\n dismiss(reason?: any): void {\n if (this._windowCmptRef) {\n if (!this._beforeDismiss) {\n this._dismiss(reason);\n } else {\n const dismiss = this._beforeDismiss();\n if (dismiss && dismiss.then) {\n dismiss.then(\n result => {\n if (result !== false) {\n this._dismiss(reason);\n }\n },\n () => {});\n } else if (dismiss !== false) {\n this._dismiss(reason);\n }\n }\n }\n }\n\n private _removeModalElements() {\n const windowNativeEl = this._windowCmptRef.location.nativeElement;\n windowNativeEl.parentNode.removeChild(windowNativeEl);\n this._windowCmptRef.destroy();\n\n if (this._backdropCmptRef) {\n const backdropNativeEl = this._backdropCmptRef.location.nativeElement;\n backdropNativeEl.parentNode.removeChild(backdropNativeEl);\n this._backdropCmptRef.destroy();\n }\n\n if (this._contentRef && this._contentRef.viewRef) {\n this._contentRef.viewRef.destroy();\n }\n\n this._windowCmptRef = null;\n this._backdropCmptRef = null;\n this._contentRef = null;\n }\n}\n","export enum ModalDismissReasons {\n BACKDROP_CLICK,\n ESC\n}\n","import {DOCUMENT} from '@angular/common';\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport {getFocusableBoundaryElements} from '../util/focus-trap';\nimport {ModalDismissReasons} from './modal-dismiss-reasons';\n\n@Component({\n selector: 'ngb-modal-window',\n host: {\n '[class]': '\"modal fade show d-block\" + (windowClass ? \" \" + windowClass : \"\")',\n 'role': 'dialog',\n 'tabindex': '-1',\n '(keyup.esc)': 'escKey($event)',\n '(click)': 'backdropClick($event)',\n '[attr.aria-modal]': 'true',\n '[attr.aria-labelledby]': 'ariaLabelledBy',\n },\n template: `\n
\n
\n
\n `,\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./modal.scss']\n})\nexport class NgbModalWindow implements OnInit,\n AfterViewInit, OnDestroy {\n private _elWithFocus: Element; // element that is focused prior to modal opening\n\n @Input() ariaLabelledBy: string;\n @Input() backdrop: boolean | string = true;\n @Input() centered: string;\n @Input() keyboard = true;\n @Input() scrollable: string;\n @Input() size: string;\n @Input() windowClass: string;\n\n @Output('dismiss') dismissEvent = new EventEmitter();\n\n constructor(@Inject(DOCUMENT) private _document: any, private _elRef: ElementRef) {}\n\n backdropClick($event): void {\n if (this.backdrop === true && this._elRef.nativeElement === $event.target) {\n this.dismiss(ModalDismissReasons.BACKDROP_CLICK);\n }\n }\n\n escKey($event): void {\n if (this.keyboard && !$event.defaultPrevented) {\n this.dismiss(ModalDismissReasons.ESC);\n }\n }\n\n dismiss(reason): void { this.dismissEvent.emit(reason); }\n\n ngOnInit() { this._elWithFocus = this._document.activeElement; }\n\n ngAfterViewInit() {\n if (!this._elRef.nativeElement.contains(document.activeElement)) {\n const autoFocusable = this._elRef.nativeElement.querySelector(`[ngbAutofocus]`) as HTMLElement;\n const firstFocusable = getFocusableBoundaryElements(this._elRef.nativeElement)[0];\n\n const elementToFocus = autoFocusable || firstFocusable || this._elRef.nativeElement;\n elementToFocus.focus();\n }\n }\n\n ngOnDestroy() {\n const body = this._document.body;\n const elWithFocus = this._elWithFocus;\n\n let elementToFocus;\n if (elWithFocus && elWithFocus['focus'] && body.contains(elWithFocus)) {\n elementToFocus = elWithFocus;\n } else {\n elementToFocus = body;\n }\n elementToFocus.focus();\n this._elWithFocus = null;\n }\n}\n","import {DOCUMENT} from '@angular/common';\nimport {\n ApplicationRef,\n ComponentFactoryResolver,\n ComponentRef,\n Inject,\n Injectable,\n Injector,\n RendererFactory2,\n TemplateRef,\n} from '@angular/core';\nimport {Subject} from 'rxjs';\n\nimport {ngbFocusTrap} from '../util/focus-trap';\nimport {ContentRef} from '../util/popup';\nimport {ScrollBar} from '../util/scrollbar';\nimport {isDefined, isString} from '../util/util';\nimport {NgbModalBackdrop} from './modal-backdrop';\nimport {NgbModalOptions} from './modal-config';\nimport {NgbActiveModal, NgbModalRef} from './modal-ref';\nimport {NgbModalWindow} from './modal-window';\n\n@Injectable({providedIn: 'root'})\nexport class NgbModalStack {\n private _activeWindowCmptHasChanged = new Subject();\n private _ariaHiddenValues: Map = new Map();\n private _backdropAttributes = ['backdropClass'];\n private _modalRefs: NgbModalRef[] = [];\n private _windowAttributes =\n ['ariaLabelledBy', 'backdrop', 'centered', 'keyboard', 'scrollable', 'size', 'windowClass'];\n private _windowCmpts: ComponentRef[] = [];\n\n constructor(\n private _applicationRef: ApplicationRef, private _injector: Injector, @Inject(DOCUMENT) private _document: any,\n private _scrollBar: ScrollBar, private _rendererFactory: RendererFactory2) {\n // Trap focus on active WindowCmpt\n this._activeWindowCmptHasChanged.subscribe(() => {\n if (this._windowCmpts.length) {\n const activeWindowCmpt = this._windowCmpts[this._windowCmpts.length - 1];\n ngbFocusTrap(activeWindowCmpt.location.nativeElement, this._activeWindowCmptHasChanged);\n this._revertAriaHidden();\n this._setAriaHidden(activeWindowCmpt.location.nativeElement);\n }\n });\n }\n\n open(moduleCFR: ComponentFactoryResolver, contentInjector: Injector, content: any, options): NgbModalRef {\n const containerEl =\n isDefined(options.container) ? this._document.querySelector(options.container) : this._document.body;\n const renderer = this._rendererFactory.createRenderer(null, null);\n\n const revertPaddingForScrollBar = this._scrollBar.compensate();\n const removeBodyClass = () => {\n if (!this._modalRefs.length) {\n renderer.removeClass(this._document.body, 'modal-open');\n this._revertAriaHidden();\n }\n };\n\n if (!containerEl) {\n throw new Error(`The specified modal container \"${options.container || 'body'}\" was not found in the DOM.`);\n }\n\n const activeModal = new NgbActiveModal();\n const contentRef =\n this._getContentRef(moduleCFR, options.injector || contentInjector, content, activeModal, options);\n\n let backdropCmptRef: ComponentRef =\n options.backdrop !== false ? this._attachBackdrop(moduleCFR, containerEl) : null;\n let windowCmptRef: ComponentRef = this._attachWindowComponent(moduleCFR, containerEl, contentRef);\n let ngbModalRef: NgbModalRef = new NgbModalRef(windowCmptRef, contentRef, backdropCmptRef, options.beforeDismiss);\n\n this._registerModalRef(ngbModalRef);\n this._registerWindowCmpt(windowCmptRef);\n ngbModalRef.result.then(revertPaddingForScrollBar, revertPaddingForScrollBar);\n ngbModalRef.result.then(removeBodyClass, removeBodyClass);\n activeModal.close = (result: any) => { ngbModalRef.close(result); };\n activeModal.dismiss = (reason: any) => { ngbModalRef.dismiss(reason); };\n\n this._applyWindowOptions(windowCmptRef.instance, options);\n if (this._modalRefs.length === 1) {\n renderer.addClass(this._document.body, 'modal-open');\n }\n\n if (backdropCmptRef && backdropCmptRef.instance) {\n this._applyBackdropOptions(backdropCmptRef.instance, options);\n }\n return ngbModalRef;\n }\n\n dismissAll(reason?: any) { this._modalRefs.forEach(ngbModalRef => ngbModalRef.dismiss(reason)); }\n\n hasOpenModals(): boolean { return this._modalRefs.length > 0; }\n\n private _attachBackdrop(moduleCFR: ComponentFactoryResolver, containerEl: any): ComponentRef {\n let backdropFactory = moduleCFR.resolveComponentFactory(NgbModalBackdrop);\n let backdropCmptRef = backdropFactory.create(this._injector);\n this._applicationRef.attachView(backdropCmptRef.hostView);\n containerEl.appendChild(backdropCmptRef.location.nativeElement);\n return backdropCmptRef;\n }\n\n private _attachWindowComponent(moduleCFR: ComponentFactoryResolver, containerEl: any, contentRef: any):\n ComponentRef {\n let windowFactory = moduleCFR.resolveComponentFactory(NgbModalWindow);\n let windowCmptRef = windowFactory.create(this._injector, contentRef.nodes);\n this._applicationRef.attachView(windowCmptRef.hostView);\n containerEl.appendChild(windowCmptRef.location.nativeElement);\n return windowCmptRef;\n }\n\n private _applyWindowOptions(windowInstance: NgbModalWindow, options: Object): void {\n this._windowAttributes.forEach((optionName: string) => {\n if (isDefined(options[optionName])) {\n windowInstance[optionName] = options[optionName];\n }\n });\n }\n\n private _applyBackdropOptions(backdropInstance: NgbModalBackdrop, options: Object): void {\n this._backdropAttributes.forEach((optionName: string) => {\n if (isDefined(options[optionName])) {\n backdropInstance[optionName] = options[optionName];\n }\n });\n }\n\n private _getContentRef(\n moduleCFR: ComponentFactoryResolver, contentInjector: Injector, content: any, activeModal: NgbActiveModal,\n options: NgbModalOptions): ContentRef {\n if (!content) {\n return new ContentRef([]);\n } else if (content instanceof TemplateRef) {\n return this._createFromTemplateRef(content, activeModal);\n } else if (isString(content)) {\n return this._createFromString(content);\n } else {\n return this._createFromComponent(moduleCFR, contentInjector, content, activeModal, options);\n }\n }\n\n private _createFromTemplateRef(content: TemplateRef, activeModal: NgbActiveModal): ContentRef {\n const context = {\n $implicit: activeModal,\n close(result) { activeModal.close(result); },\n dismiss(reason) { activeModal.dismiss(reason); }\n };\n const viewRef = content.createEmbeddedView(context);\n this._applicationRef.attachView(viewRef);\n return new ContentRef([viewRef.rootNodes], viewRef);\n }\n\n private _createFromString(content: string): ContentRef {\n const component = this._document.createTextNode(`${content}`);\n return new ContentRef([[component]]);\n }\n\n private _createFromComponent(\n moduleCFR: ComponentFactoryResolver, contentInjector: Injector, content: any, context: NgbActiveModal,\n options: NgbModalOptions): ContentRef {\n const contentCmptFactory = moduleCFR.resolveComponentFactory(content);\n const modalContentInjector =\n Injector.create({providers: [{provide: NgbActiveModal, useValue: context}], parent: contentInjector});\n const componentRef = contentCmptFactory.create(modalContentInjector);\n const componentNativeEl = componentRef.location.nativeElement;\n if (options.scrollable) {\n (componentNativeEl as HTMLElement).classList.add('component-host-scrollable');\n }\n this._applicationRef.attachView(componentRef.hostView);\n // FIXME: we should here get rid of the component nativeElement\n // and use `[Array.from(componentNativeEl.childNodes)]` instead and remove the above CSS class.\n return new ContentRef([[componentNativeEl]], componentRef.hostView, componentRef);\n }\n\n private _setAriaHidden(element: Element) {\n const parent = element.parentElement;\n if (parent && element !== this._document.body) {\n Array.from(parent.children).forEach(sibling => {\n if (sibling !== element && sibling.nodeName !== 'SCRIPT') {\n this._ariaHiddenValues.set(sibling, sibling.getAttribute('aria-hidden'));\n sibling.setAttribute('aria-hidden', 'true');\n }\n });\n\n this._setAriaHidden(parent);\n }\n }\n\n private _revertAriaHidden() {\n this._ariaHiddenValues.forEach((value, element) => {\n if (value) {\n element.setAttribute('aria-hidden', value);\n } else {\n element.removeAttribute('aria-hidden');\n }\n });\n this._ariaHiddenValues.clear();\n }\n\n private _registerModalRef(ngbModalRef: NgbModalRef) {\n const unregisterModalRef = () => {\n const index = this._modalRefs.indexOf(ngbModalRef);\n if (index > -1) {\n this._modalRefs.splice(index, 1);\n }\n };\n this._modalRefs.push(ngbModalRef);\n ngbModalRef.result.then(unregisterModalRef, unregisterModalRef);\n }\n\n private _registerWindowCmpt(ngbWindowCmpt: ComponentRef) {\n this._windowCmpts.push(ngbWindowCmpt);\n this._activeWindowCmptHasChanged.next();\n\n ngbWindowCmpt.onDestroy(() => {\n const index = this._windowCmpts.indexOf(ngbWindowCmpt);\n if (index > -1) {\n this._windowCmpts.splice(index, 1);\n this._activeWindowCmptHasChanged.next();\n }\n });\n }\n}\n","import {Injectable, Injector, ComponentFactoryResolver} from '@angular/core';\n\nimport {NgbModalOptions, NgbModalConfig} from './modal-config';\nimport {NgbModalRef} from './modal-ref';\nimport {NgbModalStack} from './modal-stack';\n\n/**\n * A service for opening modal windows.\n *\n * Creating a modal is straightforward: create a component or a template and pass it as an argument to\n * the `.open()` method.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbModal {\n constructor(\n private _moduleCFR: ComponentFactoryResolver, private _injector: Injector, private _modalStack: NgbModalStack,\n private _config: NgbModalConfig) {}\n\n /**\n * Opens a new modal window with the specified content and supplied options.\n *\n * Content can be provided as a `TemplateRef` or a component type. If you pass a component type as content,\n * then instances of those components can be injected with an instance of the `NgbActiveModal` class. You can then\n * use `NgbActiveModal` methods to close / dismiss modals from \"inside\" of your component.\n *\n * Also see the [`NgbModalOptions`](#/components/modal/api#NgbModalOptions) for the list of supported options.\n */\n open(content: any, options: NgbModalOptions = {}): NgbModalRef {\n const combinedOptions = Object.assign({}, this._config, options);\n return this._modalStack.open(this._moduleCFR, this._injector, content, combinedOptions);\n }\n\n /**\n * Dismisses all currently displayed modal windows with the supplied reason.\n *\n * @since 3.1.0\n */\n dismissAll(reason?: any) { this._modalStack.dismissAll(reason); }\n\n /**\n * Indicates if there are currently any open modal windows in the application.\n *\n * @since 3.3.0\n */\n hasOpenModals(): boolean { return this._modalStack.hasOpenModals(); }\n}\n","import {NgModule} from '@angular/core';\n\nimport {NgbModal} from './modal';\nimport {NgbModalBackdrop} from './modal-backdrop';\nimport {NgbModalWindow} from './modal-window';\n\nexport {NgbModal} from './modal';\nexport {NgbModalConfig, NgbModalOptions} from './modal-config';\nexport {NgbModalRef, NgbActiveModal} from './modal-ref';\nexport {ModalDismissReasons} from './modal-dismiss-reasons';\n\n@NgModule({\n declarations: [NgbModalBackdrop, NgbModalWindow],\n entryComponents: [NgbModalBackdrop, NgbModalWindow],\n providers: [NgbModal]\n})\nexport class NgbModalModule {\n}\n","import {Injectable} from '@angular/core';\n\n/**\n * A configuration service for the [`NgbPagination`](#/components/pagination/api#NgbPagination) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the paginations used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbPaginationConfig {\n disabled = false;\n boundaryLinks = false;\n directionLinks = true;\n ellipses = true;\n maxSize = 0;\n pageSize = 10;\n rotate = false;\n size: 'sm' | 'lg';\n}\n","import {\n Component,\n ContentChild,\n Directive,\n EventEmitter,\n Input,\n Output,\n OnChanges,\n ChangeDetectionStrategy,\n SimpleChanges,\n TemplateRef\n} from '@angular/core';\nimport {getValueInRange, isNumber} from '../util/util';\nimport {NgbPaginationConfig} from './pagination-config';\n\n/**\n * A context for the\n * * `NgbPaginationFirst`\n * * `NgbPaginationPrevious`\n * * `NgbPaginationNext`\n * * `NgbPaginationLast`\n * * `NgbPaginationEllipsis`\n *\n * link templates in case you want to override one.\n *\n * @since 4.1.0\n */\nexport interface NgbPaginationLinkContext {\n /**\n * The currently selected page number\n */\n currentPage: number;\n\n /**\n * If `true`, the current link is disabled\n */\n disabled: boolean;\n}\n\n/**\n * A context for the `NgbPaginationNumber` link template in case you want to override one.\n *\n * Extends `NgbPaginationLinkContext`.\n *\n * @since 4.1.0\n */\nexport interface NgbPaginationNumberContext extends NgbPaginationLinkContext {\n /**\n * The page number, displayed by the current page link.\n */\n $implicit: number;\n}\n\n/**\n * A directive to match the 'ellipsis' link template\n *\n * @since 4.1.0\n */\n@Directive({selector: 'ng-template[ngbPaginationEllipsis]'})\nexport class NgbPaginationEllipsis {\n constructor(public templateRef: TemplateRef) {}\n}\n\n/**\n * A directive to match the 'first' link template\n *\n * @since 4.1.0\n */\n@Directive({selector: 'ng-template[ngbPaginationFirst]'})\nexport class NgbPaginationFirst {\n constructor(public templateRef: TemplateRef) {}\n}\n\n/**\n * A directive to match the 'last' link template\n *\n * @since 4.1.0\n */\n@Directive({selector: 'ng-template[ngbPaginationLast]'})\nexport class NgbPaginationLast {\n constructor(public templateRef: TemplateRef) {}\n}\n\n/**\n * A directive to match the 'next' link template\n *\n * @since 4.1.0\n */\n@Directive({selector: 'ng-template[ngbPaginationNext]'})\nexport class NgbPaginationNext {\n constructor(public templateRef: TemplateRef) {}\n}\n\n/**\n * A directive to match the page 'number' link template\n *\n * @since 4.1.0\n */\n@Directive({selector: 'ng-template[ngbPaginationNumber]'})\nexport class NgbPaginationNumber {\n constructor(public templateRef: TemplateRef) {}\n}\n\n/**\n * A directive to match the 'previous' link template\n *\n * @since 4.1.0\n */\n@Directive({selector: 'ng-template[ngbPaginationPrevious]'})\nexport class NgbPaginationPrevious {\n constructor(public templateRef: TemplateRef) {}\n}\n\n/**\n * A component that displays page numbers and allows to customize them in several ways.\n */\n@Component({\n selector: 'ngb-pagination',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {'role': 'navigation'},\n template: `\n ««\n «\n »\n »»\n ...\n \n {{ page }}\n (current)\n \n \n `\n})\nexport class NgbPagination implements OnChanges {\n pageCount = 0;\n pages: number[] = [];\n\n @ContentChild(NgbPaginationEllipsis, {static: false}) tplEllipsis: NgbPaginationEllipsis;\n @ContentChild(NgbPaginationFirst, {static: false}) tplFirst: NgbPaginationFirst;\n @ContentChild(NgbPaginationLast, {static: false}) tplLast: NgbPaginationLast;\n @ContentChild(NgbPaginationNext, {static: false}) tplNext: NgbPaginationNext;\n @ContentChild(NgbPaginationNumber, {static: false}) tplNumber: NgbPaginationNumber;\n @ContentChild(NgbPaginationPrevious, {static: false}) tplPrevious: NgbPaginationPrevious;\n\n /**\n * If `true`, pagination links will be disabled.\n */\n @Input() disabled: boolean;\n\n /**\n * If `true`, the \"First\" and \"Last\" page links are shown.\n */\n @Input() boundaryLinks: boolean;\n\n /**\n * If `true`, the \"Next\" and \"Previous\" page links are shown.\n */\n @Input() directionLinks: boolean;\n\n /**\n * If `true`, the ellipsis symbols and first/last page numbers will be shown when `maxSize` > number of pages.\n */\n @Input() ellipses: boolean;\n\n /**\n * Whether to rotate pages when `maxSize` > number of pages.\n *\n * The current page always stays in the middle if `true`.\n */\n @Input() rotate: boolean;\n\n /**\n * The number of items in your paginated collection.\n *\n * Note, that this is not the number of pages. Page numbers are calculated dynamically based on\n * `collectionSize` and `pageSize`. Ex. if you have 100 items in your collection and displaying 20 items per page,\n * you'll end up with 5 pages.\n */\n @Input() collectionSize: number;\n\n /**\n * The maximum number of pages to display.\n */\n @Input() maxSize: number;\n\n /**\n * The current page.\n *\n * Page numbers start with `1`.\n */\n @Input() page = 1;\n\n /**\n * The number of items per page.\n */\n @Input() pageSize: number;\n\n /**\n * An event fired when the page is changed. Will fire only if collection size is set and all values are valid.\n *\n * Event payload is the number of the newly selected page.\n *\n * Page numbers start with `1`.\n */\n @Output() pageChange = new EventEmitter(true);\n\n /**\n * The pagination display size.\n *\n * Bootstrap currently supports small and large sizes.\n */\n @Input() size: 'sm' | 'lg';\n\n constructor(config: NgbPaginationConfig) {\n this.disabled = config.disabled;\n this.boundaryLinks = config.boundaryLinks;\n this.directionLinks = config.directionLinks;\n this.ellipses = config.ellipses;\n this.maxSize = config.maxSize;\n this.pageSize = config.pageSize;\n this.rotate = config.rotate;\n this.size = config.size;\n }\n\n hasPrevious(): boolean { return this.page > 1; }\n\n hasNext(): boolean { return this.page < this.pageCount; }\n\n nextDisabled(): boolean { return !this.hasNext() || this.disabled; }\n\n previousDisabled(): boolean { return !this.hasPrevious() || this.disabled; }\n\n selectPage(pageNumber: number): void { this._updatePages(pageNumber); }\n\n ngOnChanges(changes: SimpleChanges): void { this._updatePages(this.page); }\n\n isEllipsis(pageNumber): boolean { return pageNumber === -1; }\n\n /**\n * Appends ellipses and first/last page number to the displayed pages\n */\n private _applyEllipses(start: number, end: number) {\n if (this.ellipses) {\n if (start > 0) {\n if (start > 1) {\n this.pages.unshift(-1);\n }\n this.pages.unshift(1);\n }\n if (end < this.pageCount) {\n if (end < (this.pageCount - 1)) {\n this.pages.push(-1);\n }\n this.pages.push(this.pageCount);\n }\n }\n }\n\n /**\n * Rotates page numbers based on maxSize items visible.\n * Currently selected page stays in the middle:\n *\n * Ex. for selected page = 6:\n * [5,*6*,7] for maxSize = 3\n * [4,5,*6*,7] for maxSize = 4\n */\n private _applyRotation(): [number, number] {\n let start = 0;\n let end = this.pageCount;\n let leftOffset = Math.floor(this.maxSize / 2);\n let rightOffset = this.maxSize % 2 === 0 ? leftOffset - 1 : leftOffset;\n\n if (this.page <= leftOffset) {\n // very beginning, no rotation -> [0..maxSize]\n end = this.maxSize;\n } else if (this.pageCount - this.page < leftOffset) {\n // very end, no rotation -> [len-maxSize..len]\n start = this.pageCount - this.maxSize;\n } else {\n // rotate\n start = this.page - leftOffset - 1;\n end = this.page + rightOffset;\n }\n\n return [start, end];\n }\n\n /**\n * Paginates page numbers based on maxSize items per page.\n */\n private _applyPagination(): [number, number] {\n let page = Math.ceil(this.page / this.maxSize) - 1;\n let start = page * this.maxSize;\n let end = start + this.maxSize;\n\n return [start, end];\n }\n\n private _setPageInRange(newPageNo) {\n const prevPageNo = this.page;\n this.page = getValueInRange(newPageNo, this.pageCount, 1);\n\n if (this.page !== prevPageNo && isNumber(this.collectionSize)) {\n this.pageChange.emit(this.page);\n }\n }\n\n private _updatePages(newPage: number) {\n this.pageCount = Math.ceil(this.collectionSize / this.pageSize);\n\n if (!isNumber(this.pageCount)) {\n this.pageCount = 0;\n }\n\n // fill-in model needed to render pages\n this.pages.length = 0;\n for (let i = 1; i <= this.pageCount; i++) {\n this.pages.push(i);\n }\n\n // set page within 1..max range\n this._setPageInRange(newPage);\n\n // apply maxSize if necessary\n if (this.maxSize > 0 && this.pageCount > this.maxSize) {\n let start = 0;\n let end = this.pageCount;\n\n // either paginating or rotating page numbers\n if (this.rotate) {\n [start, end] = this._applyRotation();\n } else {\n [start, end] = this._applyPagination();\n }\n\n this.pages = this.pages.slice(start, end);\n\n // adding ellipses\n this._applyEllipses(start, end);\n }\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\nimport {\n NgbPagination,\n NgbPaginationEllipsis,\n NgbPaginationFirst,\n NgbPaginationLast,\n NgbPaginationNext,\n NgbPaginationNumber,\n NgbPaginationPrevious\n} from './pagination';\n\nexport {\n NgbPagination,\n NgbPaginationEllipsis,\n NgbPaginationFirst,\n NgbPaginationLast,\n NgbPaginationNext,\n NgbPaginationNumber,\n NgbPaginationPrevious\n} from './pagination';\nexport {NgbPaginationConfig} from './pagination-config';\n\nconst DIRECTIVES = [\n NgbPagination, NgbPaginationEllipsis, NgbPaginationFirst, NgbPaginationLast, NgbPaginationNext, NgbPaginationNumber,\n NgbPaginationPrevious\n];\n\n@NgModule({declarations: DIRECTIVES, exports: DIRECTIVES, imports: [CommonModule]})\nexport class NgbPaginationModule {\n}\n","import {Observable, merge} from 'rxjs';\nimport {share, filter, delay, map} from 'rxjs/operators';\n\nexport class Trigger {\n constructor(public open: string, public close?: string) {\n if (!close) {\n this.close = open;\n }\n }\n\n isManual() { return this.open === 'manual' || this.close === 'manual'; }\n}\n\nconst DEFAULT_ALIASES = {\n 'hover': ['mouseenter', 'mouseleave'],\n 'focus': ['focusin', 'focusout'],\n};\n\nexport function parseTriggers(triggers: string, aliases = DEFAULT_ALIASES): Trigger[] {\n const trimmedTriggers = (triggers || '').trim();\n\n if (trimmedTriggers.length === 0) {\n return [];\n }\n\n const parsedTriggers = trimmedTriggers.split(/\\s+/).map(trigger => trigger.split(':')).map((triggerPair) => {\n let alias = aliases[triggerPair[0]] || triggerPair;\n return new Trigger(alias[0], alias[1]);\n });\n\n const manualTriggers = parsedTriggers.filter(triggerPair => triggerPair.isManual());\n\n if (manualTriggers.length > 1) {\n throw 'Triggers parse error: only one manual trigger is allowed';\n }\n\n if (manualTriggers.length === 1 && parsedTriggers.length > 1) {\n throw 'Triggers parse error: manual trigger can\\'t be mixed with other triggers';\n }\n\n return parsedTriggers;\n}\n\nexport function observeTriggers(renderer: any, nativeElement: any, triggers: Trigger[], isOpenedFn: () => boolean) {\n return new Observable(subscriber => {\n const listeners = [];\n const openFn = () => subscriber.next(true);\n const closeFn = () => subscriber.next(false);\n const toggleFn = () => subscriber.next(!isOpenedFn());\n\n triggers.forEach((trigger: Trigger) => {\n if (trigger.open === trigger.close) {\n listeners.push(renderer.listen(nativeElement, trigger.open, toggleFn));\n } else {\n listeners.push(\n renderer.listen(nativeElement, trigger.open, openFn),\n renderer.listen(nativeElement, trigger.close, closeFn));\n }\n });\n\n return () => { listeners.forEach(unsubscribeFn => unsubscribeFn()); };\n });\n}\n\nconst delayOrNoop = (time: number) => time > 0 ? delay(time) : (a: Observable) => a;\n\nexport function triggerDelay(openDelay: number, closeDelay: number, isOpenedFn: () => boolean) {\n return (input$: Observable) => {\n let pending = null;\n const filteredInput$ = input$.pipe(\n map(open => ({open})), filter(event => {\n const currentlyOpen = isOpenedFn();\n if (currentlyOpen !== event.open && (!pending || pending.open === currentlyOpen)) {\n pending = event;\n return true;\n }\n if (pending && pending.open !== event.open) {\n pending = null;\n }\n return false;\n }),\n share());\n const delayedOpen$ = filteredInput$.pipe(filter(event => event.open), delayOrNoop(openDelay));\n const delayedClose$ = filteredInput$.pipe(filter(event => !event.open), delayOrNoop(closeDelay));\n return merge(delayedOpen$, delayedClose$)\n .pipe(\n filter(event => {\n if (event === pending) {\n pending = null;\n return event.open !== isOpenedFn();\n }\n return false;\n }),\n map(event => event.open));\n };\n}\n\nexport function listenToTriggers(\n renderer: any, nativeElement: any, triggers: string, isOpenedFn: () => boolean, openFn, closeFn, openDelay = 0,\n closeDelay = 0) {\n const parsedTriggers = parseTriggers(triggers);\n\n if (parsedTriggers.length === 1 && parsedTriggers[0].isManual()) {\n return () => {};\n }\n\n const subscription = observeTriggers(renderer, nativeElement, parsedTriggers, isOpenedFn)\n .pipe(triggerDelay(openDelay, closeDelay, isOpenedFn))\n .subscribe(open => (open ? openFn() : closeFn()));\n\n return () => subscription.unsubscribe();\n}\n","import {Injectable} from '@angular/core';\nimport {PlacementArray} from '../util/positioning';\n\n/**\n * A configuration service for the [`NgbPopover`](#/components/popover/api#NgbPopover) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the popovers used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbPopoverConfig {\n autoClose: boolean | 'inside' | 'outside' = true;\n placement: PlacementArray = 'auto';\n triggers = 'click';\n container: string;\n disablePopover = false;\n popoverClass: string;\n openDelay = 0;\n closeDelay = 0;\n}\n","import {\n Component,\n Directive,\n Input,\n Output,\n EventEmitter,\n ChangeDetectionStrategy,\n OnInit,\n OnDestroy,\n OnChanges,\n Inject,\n Injector,\n Renderer2,\n ComponentRef,\n ElementRef,\n TemplateRef,\n ViewContainerRef,\n ComponentFactoryResolver,\n NgZone,\n SimpleChanges,\n ViewEncapsulation,\n ChangeDetectorRef,\n ApplicationRef\n} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\n\nimport {listenToTriggers} from '../util/triggers';\nimport {ngbAutoClose} from '../util/autoclose';\nimport {positionElements, PlacementArray} from '../util/positioning';\nimport {PopupService} from '../util/popup';\n\nimport {NgbPopoverConfig} from './popover-config';\n\nlet nextId = 0;\n\n@Component({\n selector: 'ngb-popover-window',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {'[class]': '\"popover\" + (popoverClass ? \" \" + popoverClass : \"\")', 'role': 'tooltip', '[id]': 'id'},\n template: `\n
\n

\n {{title}}\n \n

\n
`,\n styleUrls: ['./popover.scss']\n})\nexport class NgbPopoverWindow {\n @Input() title: undefined | string | TemplateRef;\n @Input() id: string;\n @Input() popoverClass: string;\n @Input() context: any;\n\n isTitleTemplate() { return this.title instanceof TemplateRef; }\n}\n\n/**\n * A lightweight and extensible directive for fancy popover creation.\n */\n@Directive({selector: '[ngbPopover]', exportAs: 'ngbPopover'})\nexport class NgbPopover implements OnInit, OnDestroy, OnChanges {\n /**\n * Indicates whether the popover should be closed on `Escape` key and inside/outside clicks:\n *\n * * `true` - closes on both outside and inside clicks as well as `Escape` presses\n * * `false` - disables the autoClose feature (NB: triggers still apply)\n * * `\"inside\"` - closes on inside clicks as well as Escape presses\n * * `\"outside\"` - closes on outside clicks (sometimes also achievable through triggers)\n * as well as `Escape` presses\n *\n * @since 3.0.0\n */\n @Input() autoClose: boolean | 'inside' | 'outside';\n\n /**\n * The string content or a `TemplateRef` for the content to be displayed in the popover.\n *\n * If the title and the content are empty, the popover won't open.\n */\n @Input() ngbPopover: string | TemplateRef;\n\n /**\n * The title of the popover.\n *\n * If the title and the content are empty, the popover won't open.\n */\n @Input() popoverTitle: string | TemplateRef;\n\n /**\n * The preferred placement of the popover.\n *\n * Possible values are `\"top\"`, `\"top-left\"`, `\"top-right\"`, `\"bottom\"`, `\"bottom-left\"`,\n * `\"bottom-right\"`, `\"left\"`, `\"left-top\"`, `\"left-bottom\"`, `\"right\"`, `\"right-top\"`,\n * `\"right-bottom\"`\n *\n * Accepts an array of strings or a string with space separated possible values.\n *\n * The default order of preference is `\"auto\"` (same as the sequence above).\n *\n * Please see the [positioning overview](#/positioning) for more details.\n */\n @Input() placement: PlacementArray;\n\n /**\n * Specifies events that should trigger the tooltip.\n *\n * Supports a space separated list of event names.\n * For more details see the [triggers demo](#/components/popover/examples#triggers).\n */\n @Input() triggers: string;\n\n /**\n * A selector specifying the element the popover should be appended to.\n *\n * Currently only supports `body`.\n */\n @Input() container: string;\n\n /**\n * If `true`, popover is disabled and won't be displayed.\n *\n * @since 1.1.0\n */\n @Input() disablePopover: boolean;\n\n /**\n * An optional class applied to the popover window element.\n *\n * @since 2.2.0\n */\n @Input() popoverClass: string;\n\n /**\n * The opening delay in ms. Works only for \"non-manual\" opening triggers defined by the `triggers` input.\n *\n * @since 4.1.0\n */\n @Input() openDelay: number;\n\n /**\n * The closing delay in ms. Works only for \"non-manual\" opening triggers defined by the `triggers` input.\n *\n * @since 4.1.0\n */\n @Input() closeDelay: number;\n\n /**\n * An event emitted when the popover is shown. Contains no payload.\n */\n @Output() shown = new EventEmitter();\n\n /**\n * An event emitted when the popover is hidden. Contains no payload.\n */\n @Output() hidden = new EventEmitter();\n\n private _ngbPopoverWindowId = `ngb-popover-${nextId++}`;\n private _popupService: PopupService;\n private _windowRef: ComponentRef;\n private _unregisterListenersFn;\n private _zoneSubscription: any;\n private _isDisabled(): boolean {\n if (this.disablePopover) {\n return true;\n }\n if (!this.ngbPopover && !this.popoverTitle) {\n return true;\n }\n return false;\n }\n\n constructor(\n private _elementRef: ElementRef, private _renderer: Renderer2, injector: Injector,\n componentFactoryResolver: ComponentFactoryResolver, viewContainerRef: ViewContainerRef, config: NgbPopoverConfig,\n private _ngZone: NgZone, @Inject(DOCUMENT) private _document: any, private _changeDetector: ChangeDetectorRef,\n private _applicationRef: ApplicationRef) {\n this.autoClose = config.autoClose;\n this.placement = config.placement;\n this.triggers = config.triggers;\n this.container = config.container;\n this.disablePopover = config.disablePopover;\n this.popoverClass = config.popoverClass;\n this.openDelay = config.openDelay;\n this.closeDelay = config.closeDelay;\n this._popupService = new PopupService(\n NgbPopoverWindow, injector, viewContainerRef, _renderer, componentFactoryResolver, _applicationRef);\n\n this._zoneSubscription = _ngZone.onStable.subscribe(() => {\n if (this._windowRef) {\n positionElements(\n this._elementRef.nativeElement, this._windowRef.location.nativeElement, this.placement,\n this.container === 'body', 'bs-popover');\n }\n });\n }\n\n /**\n * Opens the popover.\n *\n * This is considered to be a \"manual\" triggering.\n * The `context` is an optional value to be injected into the popover template when it is created.\n */\n open(context?: any) {\n if (!this._windowRef && !this._isDisabled()) {\n this._windowRef = this._popupService.open(this.ngbPopover, context);\n this._windowRef.instance.title = this.popoverTitle;\n this._windowRef.instance.context = context;\n this._windowRef.instance.popoverClass = this.popoverClass;\n this._windowRef.instance.id = this._ngbPopoverWindowId;\n\n this._renderer.setAttribute(this._elementRef.nativeElement, 'aria-describedby', this._ngbPopoverWindowId);\n\n if (this.container === 'body') {\n this._document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement);\n }\n\n // We need to detect changes, because we don't know where .open() might be called from.\n // Ex. opening popover from one of lifecycle hooks that run after the CD\n // (say from ngAfterViewInit) will result in 'ExpressionHasChanged' exception\n this._windowRef.changeDetectorRef.detectChanges();\n\n // We need to mark for check, because popover won't work inside the OnPush component.\n // Ex. when we use expression like `{{ popover.isOpen() : 'opened' : 'closed' }}`\n // inside the template of an OnPush component and we change the popover from\n // open -> closed, the expression in question won't be updated unless we explicitly\n // mark the parent component to be checked.\n this._windowRef.changeDetectorRef.markForCheck();\n\n ngbAutoClose(\n this._ngZone, this._document, this.autoClose, () => this.close(), this.hidden,\n [this._windowRef.location.nativeElement]);\n this.shown.emit();\n }\n }\n\n /**\n * Closes the popover.\n *\n * This is considered to be a \"manual\" triggering of the popover.\n */\n close(): void {\n if (this._windowRef) {\n this._renderer.removeAttribute(this._elementRef.nativeElement, 'aria-describedby');\n this._popupService.close();\n this._windowRef = null;\n this.hidden.emit();\n this._changeDetector.markForCheck();\n }\n }\n\n /**\n * Toggles the popover.\n *\n * This is considered to be a \"manual\" triggering of the popover.\n */\n toggle(): void {\n if (this._windowRef) {\n this.close();\n } else {\n this.open();\n }\n }\n\n /**\n * Returns `true`, if the popover is currently shown.\n */\n isOpen(): boolean { return this._windowRef != null; }\n\n ngOnInit() {\n this._unregisterListenersFn = listenToTriggers(\n this._renderer, this._elementRef.nativeElement, this.triggers, this.isOpen.bind(this), this.open.bind(this),\n this.close.bind(this), +this.openDelay, +this.closeDelay);\n }\n\n ngOnChanges(changes: SimpleChanges) {\n // close popover if title and content become empty, or disablePopover set to true\n if ((changes['ngbPopover'] || changes['popoverTitle'] || changes['disablePopover']) && this._isDisabled()) {\n this.close();\n }\n }\n\n ngOnDestroy() {\n this.close();\n // This check is needed as it might happen that ngOnDestroy is called before ngOnInit\n // under certain conditions, see: https://github.com/ng-bootstrap/ng-bootstrap/issues/2199\n if (this._unregisterListenersFn) {\n this._unregisterListenersFn();\n }\n this._zoneSubscription.unsubscribe();\n }\n}\n","import {NgModule} from '@angular/core';\n\nimport {NgbPopover, NgbPopoverWindow} from './popover';\nimport {CommonModule} from '@angular/common';\n\nexport {NgbPopover} from './popover';\nexport {NgbPopoverConfig} from './popover-config';\nexport {Placement} from '../util/positioning';\n\n@NgModule({\n declarations: [NgbPopover, NgbPopoverWindow],\n exports: [NgbPopover],\n imports: [CommonModule],\n entryComponents: [NgbPopoverWindow]\n})\nexport class NgbPopoverModule {\n}\n","import {Injectable} from '@angular/core';\n\n/**\n * A configuration service for the [`NgbProgressbar`](#/components/progressbar/api#NgbProgressbar) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the progress bars used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbProgressbarConfig {\n max = 100;\n animated = false;\n striped = false;\n type: string;\n showValue = false;\n height: string;\n}\n","import {Component, Input, ChangeDetectionStrategy} from '@angular/core';\nimport {getValueInRange} from '../util/util';\nimport {NgbProgressbarConfig} from './progressbar-config';\n\n/**\n * A directive that provides feedback on the progress of a workflow or an action.\n */\n@Component({\n selector: 'ngb-progressbar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n
\n
\n {{getPercentValue()}}%\n
\n
\n `\n})\nexport class NgbProgressbar {\n /**\n * The maximal value to be displayed in the progressbar.\n */\n @Input() max: number;\n\n /**\n * If `true`, the stripes on the progressbar are animated.\n *\n * Takes effect only for browsers supporting CSS3 animations, and if `striped` is `true`.\n */\n @Input() animated: boolean;\n\n /**\n * If `true`, the progress bars will be displayed as striped.\n */\n @Input() striped: boolean;\n\n /**\n * If `true`, the current percentage will be shown in the `xx%` format.\n */\n @Input() showValue: boolean;\n\n /**\n * The type of the progress bar.\n *\n * Currently Bootstrap supports `\"success\"`, `\"info\"`, `\"warning\"` or `\"danger\"`.\n */\n @Input() type: string;\n\n /**\n * The current value for the progress bar.\n *\n * Should be in the `[0, max]` range.\n */\n @Input() value = 0;\n\n /**\n * THe height of the progress bar.\n *\n * Accepts any valid CSS height values, ex. `\"2rem\"`\n */\n @Input() height: string;\n\n constructor(config: NgbProgressbarConfig) {\n this.max = config.max;\n this.animated = config.animated;\n this.striped = config.striped;\n this.type = config.type;\n this.showValue = config.showValue;\n this.height = config.height;\n }\n\n getValue() { return getValueInRange(this.value, this.max); }\n\n getPercentValue() { return 100 * this.getValue() / this.max; }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\nimport {NgbProgressbar} from './progressbar';\n\nexport {NgbProgressbar} from './progressbar';\nexport {NgbProgressbarConfig} from './progressbar-config';\n\n@NgModule({declarations: [NgbProgressbar], exports: [NgbProgressbar], imports: [CommonModule]})\nexport class NgbProgressbarModule {\n}\n","import {Injectable} from '@angular/core';\n\n/**\n * A configuration service for the [`NgbRating`](#/components/rating/api#NgbRating) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the ratings used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbRatingConfig {\n max = 10;\n readonly = false;\n resettable = false;\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n Input,\n Output,\n EventEmitter,\n OnInit,\n TemplateRef,\n OnChanges,\n SimpleChanges,\n ContentChild,\n forwardRef,\n ChangeDetectorRef\n} from '@angular/core';\nimport {NgbRatingConfig} from './rating-config';\nimport {getValueInRange} from '../util/util';\nimport {Key} from '../util/key';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\n\n/**\n * The context for the custom star display template defined in the `starTemplate`.\n */\nexport interface StarTemplateContext {\n /**\n * The star fill percentage, an integer in the `[0, 100]` range.\n */\n fill: number;\n\n /**\n * Index of the star, starts with `0`.\n */\n index: number;\n}\n\nconst NGB_RATING_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgbRating),\n multi: true\n};\n\n/**\n * A directive that helps visualising and interacting with a star rating bar.\n */\n@Component({\n selector: 'ngb-rating',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'd-inline-flex',\n 'tabindex': '0',\n 'role': 'slider',\n 'aria-valuemin': '0',\n '[attr.aria-valuemax]': 'max',\n '[attr.aria-valuenow]': 'nextRate',\n '[attr.aria-valuetext]': 'ariaValueText()',\n '[attr.aria-disabled]': 'readonly ? true : null',\n '(blur)': 'handleBlur()',\n '(keydown)': 'handleKeyDown($event)',\n '(mouseleave)': 'reset()'\n },\n template: `\n {{ fill === 100 ? '★' : '☆' }}\n \n ({{ index < nextRate ? '*' : ' ' }})\n \n \n \n \n \n `,\n providers: [NGB_RATING_VALUE_ACCESSOR]\n})\nexport class NgbRating implements ControlValueAccessor,\n OnInit, OnChanges {\n contexts: StarTemplateContext[] = [];\n disabled = false;\n nextRate: number;\n\n\n /**\n * The maximal rating that can be given.\n */\n @Input() max: number;\n\n /**\n * The current rating. Could be a decimal value like `3.75`.\n */\n @Input() rate: number;\n\n /**\n * If `true`, the rating can't be changed.\n */\n @Input() readonly: boolean;\n\n /**\n * If `true`, the rating can be reset to `0` by mouse clicking currently set rating.\n */\n @Input() resettable: boolean;\n\n /**\n * The template to override the way each star is displayed.\n *\n * Alternatively put an `` as the only child of your `` element\n */\n @Input() starTemplate: TemplateRef;\n @ContentChild(TemplateRef, {static: false}) starTemplateFromContent: TemplateRef;\n\n /**\n * An event emitted when the user is hovering over a given rating.\n *\n * Event payload equals to the rating being hovered over.\n */\n @Output() hover = new EventEmitter();\n\n /**\n * An event emitted when the user stops hovering over a given rating.\n *\n * Event payload equals to the rating of the last item being hovered over.\n */\n @Output() leave = new EventEmitter();\n\n /**\n * An event emitted when the user selects a new rating.\n *\n * Event payload equals to the newly selected rating.\n */\n @Output() rateChange = new EventEmitter(true);\n\n onChange = (_: any) => {};\n onTouched = () => {};\n\n constructor(config: NgbRatingConfig, private _changeDetectorRef: ChangeDetectorRef) {\n this.max = config.max;\n this.readonly = config.readonly;\n }\n\n ariaValueText() { return `${this.nextRate} out of ${this.max}`; }\n\n enter(value: number): void {\n if (!this.readonly && !this.disabled) {\n this._updateState(value);\n }\n this.hover.emit(value);\n }\n\n handleBlur() { this.onTouched(); }\n\n handleClick(value: number) { this.update(this.resettable && this.rate === value ? 0 : value); }\n\n handleKeyDown(event: KeyboardEvent) {\n // tslint:disable-next-line:deprecation\n switch (event.which) {\n case Key.ArrowDown:\n case Key.ArrowLeft:\n this.update(this.rate - 1);\n break;\n case Key.ArrowUp:\n case Key.ArrowRight:\n this.update(this.rate + 1);\n break;\n case Key.Home:\n this.update(0);\n break;\n case Key.End:\n this.update(this.max);\n break;\n default:\n return;\n }\n\n // note 'return' in default case\n event.preventDefault();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['rate']) {\n this.update(this.rate);\n }\n }\n\n ngOnInit(): void {\n this.contexts = Array.from({length: this.max}, (v, k) => ({fill: 0, index: k}));\n this._updateState(this.rate);\n }\n\n registerOnChange(fn: (value: any) => any): void { this.onChange = fn; }\n\n registerOnTouched(fn: () => any): void { this.onTouched = fn; }\n\n reset(): void {\n this.leave.emit(this.nextRate);\n this._updateState(this.rate);\n }\n\n setDisabledState(isDisabled: boolean) { this.disabled = isDisabled; }\n\n update(value: number, internalChange = true): void {\n const newRate = getValueInRange(value, this.max, 0);\n if (!this.readonly && !this.disabled && this.rate !== newRate) {\n this.rate = newRate;\n this.rateChange.emit(this.rate);\n }\n if (internalChange) {\n this.onChange(this.rate);\n this.onTouched();\n }\n this._updateState(this.rate);\n }\n\n writeValue(value) {\n this.update(value, false);\n this._changeDetectorRef.markForCheck();\n }\n\n private _getFillValue(index: number): number {\n const diff = this.nextRate - index;\n\n if (diff >= 1) {\n return 100;\n }\n if (diff < 1 && diff > 0) {\n return parseInt((diff * 100).toFixed(2), 10);\n }\n\n return 0;\n }\n\n private _updateState(nextValue: number) {\n this.nextRate = nextValue;\n this.contexts.forEach((context, index) => context.fill = this._getFillValue(index));\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\nimport {NgbRating} from './rating';\n\nexport {NgbRating} from './rating';\nexport {NgbRatingConfig} from './rating-config';\n\n@NgModule({declarations: [NgbRating], exports: [NgbRating], imports: [CommonModule]})\nexport class NgbRatingModule {\n}\n","import {Injectable} from '@angular/core';\n\n/**\n * A configuration service for the [`NgbTabset`](#/components/tabset/api#NgbTabset) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the tabsets used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbTabsetConfig {\n justify: 'start' | 'center' | 'end' | 'fill' | 'justified' = 'start';\n orientation: 'horizontal' | 'vertical' = 'horizontal';\n type: 'tabs' | 'pills' = 'tabs';\n}\n","import {\n Component,\n Input,\n ContentChildren,\n QueryList,\n Directive,\n TemplateRef,\n AfterContentChecked,\n Output,\n EventEmitter\n} from '@angular/core';\nimport {NgbTabsetConfig} from './tabset-config';\n\nlet nextId = 0;\n\n/**\n * A directive to wrap tab titles that need to contain HTML markup or other directives.\n *\n * Alternatively you could use the `NgbTab.title` input for string titles.\n */\n@Directive({selector: 'ng-template[ngbTabTitle]'})\nexport class NgbTabTitle {\n constructor(public templateRef: TemplateRef) {}\n}\n\n/**\n * A directive to wrap content to be displayed in a tab.\n */\n@Directive({selector: 'ng-template[ngbTabContent]'})\nexport class NgbTabContent {\n constructor(public templateRef: TemplateRef) {}\n}\n\n/**\n * A directive representing an individual tab.\n */\n@Directive({selector: 'ngb-tab'})\nexport class NgbTab implements AfterContentChecked {\n /**\n * The tab identifier.\n *\n * Must be unique for the entire document for proper accessibility support.\n */\n @Input() id = `ngb-tab-${nextId++}`;\n\n /**\n * The tab title.\n *\n * Use the [`NgbTabTitle`](#/components/tabset/api#NgbTabTitle) directive for non-string titles.\n */\n @Input() title: string;\n\n /**\n * If `true`, the current tab is disabled and can't be toggled.\n */\n @Input() disabled = false;\n\n titleTpl: NgbTabTitle | null;\n contentTpl: NgbTabContent | null;\n\n @ContentChildren(NgbTabTitle, {descendants: false}) titleTpls: QueryList;\n @ContentChildren(NgbTabContent, {descendants: false}) contentTpls: QueryList;\n\n ngAfterContentChecked() {\n // We are using @ContentChildren instead of @ContentChild as in the Angular version being used\n // only @ContentChildren allows us to specify the {descendants: false} option.\n // Without {descendants: false} we are hitting bugs described in:\n // https://github.com/ng-bootstrap/ng-bootstrap/issues/2240\n this.titleTpl = this.titleTpls.first;\n this.contentTpl = this.contentTpls.first;\n }\n}\n\n/**\n * The payload of the change event fired right before the tab change.\n */\nexport interface NgbTabChangeEvent {\n /**\n * The id of the currently active tab.\n */\n activeId: string;\n\n /**\n * The id of the newly selected tab.\n */\n nextId: string;\n\n /**\n * Calling this function will prevent tab switching.\n */\n preventDefault: () => void;\n}\n\n/**\n * A component that makes it easy to create tabbed interface.\n */\n@Component({\n selector: 'ngb-tabset',\n exportAs: 'ngbTabset',\n template: `\n \n
\n \n \n \n
\n
\n \n `\n})\nexport class NgbTabset implements AfterContentChecked {\n justifyClass: string;\n\n @ContentChildren(NgbTab) tabs: QueryList;\n\n /**\n * The identifier of the tab that should be opened **initially**.\n *\n * For subsequent tab switches use the `.select()` method and the `(tabChange)` event.\n */\n @Input() activeId: string;\n\n /**\n * If `true`, non-visible tabs content will be removed from DOM. Otherwise it will just be hidden.\n */\n @Input() destroyOnHide = true;\n\n /**\n * The horizontal alignment of the tabs with flexbox utilities.\n */\n @Input()\n set justify(className: 'start' | 'center' | 'end' | 'fill' | 'justified') {\n if (className === 'fill' || className === 'justified') {\n this.justifyClass = `nav-${className}`;\n } else {\n this.justifyClass = `justify-content-${className}`;\n }\n }\n\n /**\n * The orientation of the tabset.\n */\n @Input() orientation: 'horizontal' | 'vertical';\n\n /**\n * Type of navigation to be used for tabs.\n *\n * Currently Bootstrap supports only `\"tabs\"` and `\"pills\"`.\n *\n * Since `3.0.0` can also be an arbitrary string (ex. for custom themes).\n */\n @Input() type: 'tabs' | 'pills' | string;\n\n /**\n * A tab change event emitted right before the tab change happens.\n *\n * See [`NgbTabChangeEvent`](#/components/tabset/api#NgbTabChangeEvent) for payload details.\n */\n @Output() tabChange = new EventEmitter();\n\n constructor(config: NgbTabsetConfig) {\n this.type = config.type;\n this.justify = config.justify;\n this.orientation = config.orientation;\n }\n\n /**\n * Selects the tab with the given id and shows its associated content panel.\n *\n * Any other tab that was previously selected becomes unselected and its associated pane is removed from DOM or\n * hidden depending on the `destroyOnHide` value.\n */\n select(tabId: string) {\n let selectedTab = this._getTabById(tabId);\n if (selectedTab && !selectedTab.disabled && this.activeId !== selectedTab.id) {\n let defaultPrevented = false;\n\n this.tabChange.emit(\n {activeId: this.activeId, nextId: selectedTab.id, preventDefault: () => { defaultPrevented = true; }});\n\n if (!defaultPrevented) {\n this.activeId = selectedTab.id;\n }\n }\n }\n\n ngAfterContentChecked() {\n // auto-correct activeId that might have been set incorrectly as input\n let activeTab = this._getTabById(this.activeId);\n this.activeId = activeTab ? activeTab.id : (this.tabs.length ? this.tabs.first.id : null);\n }\n\n private _getTabById(id: string): NgbTab {\n let tabsWithId: NgbTab[] = this.tabs.filter(tab => tab.id === id);\n return tabsWithId.length ? tabsWithId[0] : null;\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\nimport {NgbTabset, NgbTab, NgbTabContent, NgbTabTitle} from './tabset';\n\nexport {NgbTabset, NgbTab, NgbTabContent, NgbTabTitle, NgbTabChangeEvent} from './tabset';\nexport {NgbTabsetConfig} from './tabset-config';\n\nconst NGB_TABSET_DIRECTIVES = [NgbTabset, NgbTab, NgbTabContent, NgbTabTitle];\n\n@NgModule({declarations: NGB_TABSET_DIRECTIVES, exports: NGB_TABSET_DIRECTIVES, imports: [CommonModule]})\nexport class NgbTabsetModule {\n}\n","import {isNumber, toInteger} from '../util/util';\n\nexport class NgbTime {\n hour: number;\n minute: number;\n second: number;\n\n constructor(hour?: number, minute?: number, second?: number) {\n this.hour = toInteger(hour);\n this.minute = toInteger(minute);\n this.second = toInteger(second);\n }\n\n changeHour(step = 1) { this.updateHour((isNaN(this.hour) ? 0 : this.hour) + step); }\n\n updateHour(hour: number) {\n if (isNumber(hour)) {\n this.hour = (hour < 0 ? 24 + hour : hour) % 24;\n } else {\n this.hour = NaN;\n }\n }\n\n changeMinute(step = 1) { this.updateMinute((isNaN(this.minute) ? 0 : this.minute) + step); }\n\n updateMinute(minute: number) {\n if (isNumber(minute)) {\n this.minute = minute % 60 < 0 ? 60 + minute % 60 : minute % 60;\n this.changeHour(Math.floor(minute / 60));\n } else {\n this.minute = NaN;\n }\n }\n\n changeSecond(step = 1) { this.updateSecond((isNaN(this.second) ? 0 : this.second) + step); }\n\n updateSecond(second: number) {\n if (isNumber(second)) {\n this.second = second < 0 ? 60 + second % 60 : second % 60;\n this.changeMinute(Math.floor(second / 60));\n } else {\n this.second = NaN;\n }\n }\n\n isValid(checkSecs = true) {\n return isNumber(this.hour) && isNumber(this.minute) && (checkSecs ? isNumber(this.second) : true);\n }\n\n toString() { return `${this.hour || 0}:${this.minute || 0}:${this.second || 0}`; }\n}\n","import {Injectable} from '@angular/core';\n\n/**\n * A configuration service for the [`NgbTimepicker`](#/components/timepicker/api#NgbTimepicker) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the timepickers used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbTimepickerConfig {\n meridian = false;\n spinners = true;\n seconds = false;\n hourStep = 1;\n minuteStep = 1;\n secondStep = 1;\n disabled = false;\n readonlyInputs = false;\n size: 'small' | 'medium' | 'large' = 'medium';\n}\n","import {Injectable} from '@angular/core';\nimport {NgbTimeStruct} from './ngb-time-struct';\nimport {isInteger} from '../util/util';\n\nexport function NGB_DATEPICKER_TIME_ADAPTER_FACTORY() {\n return new NgbTimeStructAdapter();\n}\n\n/**\n * An abstract service that does the conversion between the internal timepicker `NgbTimeStruct` model and\n * any provided user time model `T`, ex. a string, a native date, etc.\n *\n * The adapter is used **only** for conversion when binding timepicker to a form control,\n * ex. `[(ngModel)]=\"userTimeModel\"`. Here `userTimeModel` can be of any type.\n *\n * The default timepicker implementation assumes we use `NgbTimeStruct` as a user model.\n *\n * See the [custom time adapter demo](#/components/timepicker/examples#adapter) for an example.\n *\n * @since 2.2.0\n */\n@Injectable({providedIn: 'root', useFactory: NGB_DATEPICKER_TIME_ADAPTER_FACTORY})\nexport abstract class NgbTimeAdapter {\n /**\n * Converts a user-model time of type `T` to an `NgbTimeStruct` for internal use.\n */\n abstract fromModel(value: T): NgbTimeStruct;\n\n /**\n * Converts an internal `NgbTimeStruct` time to a user-model time of type `T`.\n */\n abstract toModel(time: NgbTimeStruct): T;\n}\n\n@Injectable()\nexport class NgbTimeStructAdapter extends NgbTimeAdapter {\n /**\n * Converts a NgbTimeStruct value into NgbTimeStruct value\n */\n fromModel(time: NgbTimeStruct): NgbTimeStruct {\n return (time && isInteger(time.hour) && isInteger(time.minute)) ?\n {hour: time.hour, minute: time.minute, second: isInteger(time.second) ? time.second : null} :\n null;\n }\n\n /**\n * Converts a NgbTimeStruct value into NgbTimeStruct value\n */\n toModel(time: NgbTimeStruct): NgbTimeStruct {\n return (time && isInteger(time.hour) && isInteger(time.minute)) ?\n {hour: time.hour, minute: time.minute, second: isInteger(time.second) ? time.second : null} :\n null;\n }\n}\n","import {Inject, Injectable, LOCALE_ID} from '@angular/core';\nimport {FormStyle, getLocaleDayPeriods, TranslationWidth} from '@angular/common';\n\nexport function NGB_TIMEPICKER_I18N_FACTORY(locale) {\n return new NgbTimepickerI18nDefault(locale);\n}\n\n/**\n * Type of the service supplying day periods (for example, 'AM' and 'PM') to NgbTimepicker component.\n * The default implementation of this service honors the Angular locale, and uses the registered locale data,\n * as explained in the Angular i18n guide.\n */\n@Injectable({providedIn: 'root', useFactory: NGB_TIMEPICKER_I18N_FACTORY, deps: [LOCALE_ID]})\nexport abstract class NgbTimepickerI18n {\n /**\n * Returns the name for the period before midday.\n */\n abstract getMorningPeriod(): string;\n\n /**\n * Returns the name for the period after midday.\n */\n abstract getAfternoonPeriod(): string;\n}\n\n@Injectable()\nexport class NgbTimepickerI18nDefault extends NgbTimepickerI18n {\n private _periods: [string, string];\n\n constructor(@Inject(LOCALE_ID) locale: string) {\n super();\n\n this._periods = getLocaleDayPeriods(locale, FormStyle.Standalone, TranslationWidth.Narrow);\n }\n\n getMorningPeriod(): string { return this._periods[0]; }\n\n getAfternoonPeriod(): string { return this._periods[1]; }\n}\n","import {\n ChangeDetectorRef,\n Component,\n forwardRef,\n Input,\n OnChanges,\n SimpleChanges,\n ViewEncapsulation\n} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\n\nimport {isInteger, isNumber, padNumber, toInteger} from '../util/util';\nimport {NgbTime} from './ngb-time';\nimport {NgbTimepickerConfig} from './timepicker-config';\nimport {NgbTimeAdapter} from './ngb-time-adapter';\nimport {NgbTimepickerI18n} from './timepicker-i18n';\n\nconst NGB_TIMEPICKER_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgbTimepicker),\n multi: true\n};\n\n/**\n * A directive that helps with wth picking hours, minutes and seconds.\n */\n@Component({\n selector: 'ngb-timepicker',\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./timepicker.scss'],\n template: `\n
\n
\n
\n \n \n \n
\n
:
\n
\n \n \n \n
\n
:
\n
\n \n \n \n
\n
\n
\n \n
\n
\n
\n `,\n providers: [NGB_TIMEPICKER_VALUE_ACCESSOR]\n})\nexport class NgbTimepicker implements ControlValueAccessor,\n OnChanges {\n disabled: boolean;\n model: NgbTime;\n\n private _hourStep: number;\n private _minuteStep: number;\n private _secondStep: number;\n\n /**\n * Whether to display 12H or 24H mode.\n */\n @Input() meridian: boolean;\n\n /**\n * If `true`, the spinners above and below inputs are visible.\n */\n @Input() spinners: boolean;\n\n /**\n * If `true`, it is possible to select seconds.\n */\n @Input() seconds: boolean;\n\n /**\n * The number of hours to add/subtract when clicking hour spinners.\n */\n @Input()\n set hourStep(step: number) {\n this._hourStep = isInteger(step) ? step : this._config.hourStep;\n }\n\n get hourStep(): number { return this._hourStep; }\n\n /**\n * The number of minutes to add/subtract when clicking minute spinners.\n */\n @Input()\n set minuteStep(step: number) {\n this._minuteStep = isInteger(step) ? step : this._config.minuteStep;\n }\n\n get minuteStep(): number { return this._minuteStep; }\n\n /**\n * The number of seconds to add/subtract when clicking second spinners.\n */\n @Input()\n set secondStep(step: number) {\n this._secondStep = isInteger(step) ? step : this._config.secondStep;\n }\n\n get secondStep(): number { return this._secondStep; }\n\n /**\n * If `true`, the timepicker is readonly and can't be changed.\n */\n @Input() readonlyInputs: boolean;\n\n /**\n * The size of inputs and buttons.\n */\n @Input() size: 'small' | 'medium' | 'large';\n\n constructor(\n private readonly _config: NgbTimepickerConfig, private _ngbTimeAdapter: NgbTimeAdapter,\n private _cd: ChangeDetectorRef, public i18n: NgbTimepickerI18n) {\n this.meridian = _config.meridian;\n this.spinners = _config.spinners;\n this.seconds = _config.seconds;\n this.hourStep = _config.hourStep;\n this.minuteStep = _config.minuteStep;\n this.secondStep = _config.secondStep;\n this.disabled = _config.disabled;\n this.readonlyInputs = _config.readonlyInputs;\n this.size = _config.size;\n }\n\n onChange = (_: any) => {};\n onTouched = () => {};\n\n writeValue(value) {\n const structValue = this._ngbTimeAdapter.fromModel(value);\n this.model = structValue ? new NgbTime(structValue.hour, structValue.minute, structValue.second) : new NgbTime();\n if (!this.seconds && (!structValue || !isNumber(structValue.second))) {\n this.model.second = 0;\n }\n this._cd.markForCheck();\n }\n\n registerOnChange(fn: (value: any) => any): void { this.onChange = fn; }\n\n registerOnTouched(fn: () => any): void { this.onTouched = fn; }\n\n setDisabledState(isDisabled: boolean) { this.disabled = isDisabled; }\n\n changeHour(step: number) {\n this.model.changeHour(step);\n this.propagateModelChange();\n }\n\n changeMinute(step: number) {\n this.model.changeMinute(step);\n this.propagateModelChange();\n }\n\n changeSecond(step: number) {\n this.model.changeSecond(step);\n this.propagateModelChange();\n }\n\n updateHour(newVal: string) {\n const isPM = this.model.hour >= 12;\n const enteredHour = toInteger(newVal);\n if (this.meridian && (isPM && enteredHour < 12 || !isPM && enteredHour === 12)) {\n this.model.updateHour(enteredHour + 12);\n } else {\n this.model.updateHour(enteredHour);\n }\n this.propagateModelChange();\n }\n\n updateMinute(newVal: string) {\n this.model.updateMinute(toInteger(newVal));\n this.propagateModelChange();\n }\n\n updateSecond(newVal: string) {\n this.model.updateSecond(toInteger(newVal));\n this.propagateModelChange();\n }\n\n toggleMeridian() {\n if (this.meridian) {\n this.changeHour(12);\n }\n }\n\n formatHour(value: number) {\n if (isNumber(value)) {\n if (this.meridian) {\n return padNumber(value % 12 === 0 ? 12 : value % 12);\n } else {\n return padNumber(value % 24);\n }\n } else {\n return padNumber(NaN);\n }\n }\n\n formatMinSec(value: number) { return padNumber(value); }\n\n get isSmallSize(): boolean { return this.size === 'small'; }\n\n get isLargeSize(): boolean { return this.size === 'large'; }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['seconds'] && !this.seconds && this.model && !isNumber(this.model.second)) {\n this.model.second = 0;\n this.propagateModelChange(false);\n }\n }\n\n private propagateModelChange(touched = true) {\n if (touched) {\n this.onTouched();\n }\n if (this.model.isValid(this.seconds)) {\n this.onChange(\n this._ngbTimeAdapter.toModel({hour: this.model.hour, minute: this.model.minute, second: this.model.second}));\n } else {\n this.onChange(this._ngbTimeAdapter.toModel(null));\n }\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\nimport {NgbTimepicker} from './timepicker';\n\nexport {NgbTimepicker} from './timepicker';\nexport {NgbTimepickerConfig} from './timepicker-config';\nexport {NgbTimeStruct} from './ngb-time-struct';\nexport {NgbTimeAdapter} from './ngb-time-adapter';\nexport {NgbTimepickerI18n} from './timepicker-i18n';\n\n@NgModule({declarations: [NgbTimepicker], exports: [NgbTimepicker], imports: [CommonModule]})\nexport class NgbTimepickerModule {\n}\n","import {Injectable} from '@angular/core';\n\n/**\n * Interface used to type all toast config options. See `NgbToastConfig`.\n *\n * @since 5.0.0\n */\nexport interface NgbToastOptions {\n /**\n * Specify if the toast component should emit the `hide()` output\n * after a certain `delay` in ms.\n */\n autohide?: boolean;\n\n /**\n * Delay in ms after which the `hide()` output should be emitted.\n */\n delay?: number;\n\n /**\n * Type of aria-live attribute to be used.\n *\n * Could be one of these 2 values (as string):\n * - `polite` (default)\n * - `alert`\n */\n ariaLive?: 'polite' | 'alert';\n}\n\n/**\n * Configuration service for the NgbToast component. You can inject this service, typically in your root component,\n * and customize the values of its properties in order to provide default values for all the toasts used in the\n * application.\n *\n * @since 5.0.0\n */\n@Injectable({providedIn: 'root'})\nexport class NgbToastConfig implements NgbToastOptions {\n autohide = true;\n delay = 500;\n ariaLive: 'polite' | 'alert' = 'polite';\n}\n","import {\n AfterContentInit,\n Attribute,\n Component,\n ContentChild,\n Directive,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n TemplateRef,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport {NgbToastConfig} from './toast-config';\n\n/**\n * This directive allows the usage of HTML markup or other directives\n * inside of the toast's header.\n *\n * @since 5.0.0\n */\n@Directive({selector: '[ngbToastHeader]'})\nexport class NgbToastHeader {\n}\n\n/**\n * Toasts provide feedback messages as notifications to the user.\n * Goal is to mimic the push notifications available both on mobile and desktop operating systems.\n *\n * @since 5.0.0\n */\n@Component({\n selector: 'ngb-toast',\n exportAs: 'ngbToast',\n encapsulation: ViewEncapsulation.None,\n host: {\n 'role': 'alert',\n '[attr.aria-live]': 'ariaLive',\n 'aria-atomic': 'true',\n '[class.toast]': 'true',\n '[class.show]': 'true',\n '[class.autohide]': 'autohide',\n },\n template: `\n \n {{header}}\n \n \n
\n \n \n
\n
\n
\n \n
\n `,\n styleUrls: ['./toast.scss']\n})\nexport class NgbToast implements AfterContentInit,\n OnChanges {\n private _timeoutID;\n\n /**\n * Delay after which the toast will hide (ms).\n * default: `500` (ms) (inherited from NgbToastConfig)\n */\n @Input() delay: number;\n\n /**\n * Auto hide the toast after a delay in ms.\n * default: `true` (inherited from NgbToastConfig)\n */\n @Input() autohide: boolean;\n\n /**\n * Text to be used as toast's header.\n * Ignored if a ContentChild template is specified at the same time.\n */\n @Input() header: string;\n\n /**\n * A template like `` can be\n * used in the projected content to allow markup usage.\n */\n @ContentChild(NgbToastHeader, {read: TemplateRef, static: true}) contentHeaderTpl: TemplateRef| null = null;\n\n /**\n * An event fired immediately when toast's `hide()` method has been called.\n * It can only occur in 2 different scenarios:\n * - `autohide` timeout fires\n * - user clicks on a closing cross (×)\n *\n * Additionally this output is purely informative. The toast won't disappear. It's up to the user to take care of\n * that.\n */\n @Output('hide') hideOutput = new EventEmitter();\n\n constructor(@Attribute('aria-live') public ariaLive: string, config: NgbToastConfig) {\n if (this.ariaLive == null) {\n this.ariaLive = config.ariaLive;\n }\n this.delay = config.delay;\n this.autohide = config.autohide;\n }\n\n ngAfterContentInit() { this._init(); }\n\n ngOnChanges(changes: SimpleChanges) {\n if ('autohide' in changes) {\n this._clearTimeout();\n this._init();\n }\n }\n\n hide() {\n this._clearTimeout();\n this.hideOutput.emit();\n }\n\n private _init() {\n if (this.autohide && !this._timeoutID) {\n this._timeoutID = setTimeout(() => this.hide(), this.delay);\n }\n }\n\n private _clearTimeout() {\n if (this._timeoutID) {\n clearTimeout(this._timeoutID);\n this._timeoutID = null;\n }\n }\n}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\n\nimport {NgbToast, NgbToastHeader} from './toast';\n\nexport {NgbToast, NgbToastHeader} from './toast';\nexport {NgbToastConfig, NgbToastOptions} from './toast-config';\n\n@NgModule({declarations: [NgbToast, NgbToastHeader], imports: [CommonModule], exports: [NgbToast, NgbToastHeader]})\nexport class NgbToastModule {\n}\n","import {Injectable} from '@angular/core';\nimport {PlacementArray} from '../util/positioning';\n\n/**\n * A configuration service for the [`NgbTooltip`](#/components/tooltip/api#NgbTooltip) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the tooltips used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbTooltipConfig {\n autoClose: boolean | 'inside' | 'outside' = true;\n placement: PlacementArray = 'auto';\n triggers = 'hover focus';\n container: string;\n disableTooltip = false;\n tooltipClass: string;\n openDelay = 0;\n closeDelay = 0;\n}\n","import {\n Component,\n Directive,\n Input,\n Output,\n EventEmitter,\n ChangeDetectionStrategy,\n OnInit,\n OnDestroy,\n Inject,\n Injector,\n Renderer2,\n ComponentRef,\n ElementRef,\n TemplateRef,\n ViewContainerRef,\n ComponentFactoryResolver,\n NgZone,\n ViewEncapsulation,\n ChangeDetectorRef,\n ApplicationRef\n} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\n\nimport {listenToTriggers} from '../util/triggers';\nimport {ngbAutoClose} from '../util/autoclose';\nimport {positionElements, PlacementArray} from '../util/positioning';\nimport {PopupService} from '../util/popup';\n\nimport {NgbTooltipConfig} from './tooltip-config';\n\nlet nextId = 0;\n\n@Component({\n selector: 'ngb-tooltip-window',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {'[class]': '\"tooltip show\" + (tooltipClass ? \" \" + tooltipClass : \"\")', 'role': 'tooltip', '[id]': 'id'},\n template: `
`,\n styleUrls: ['./tooltip.scss']\n})\nexport class NgbTooltipWindow {\n @Input() id: string;\n @Input() tooltipClass: string;\n}\n\n/**\n * A lightweight and extensible directive for fancy tooltip creation.\n */\n@Directive({selector: '[ngbTooltip]', exportAs: 'ngbTooltip'})\nexport class NgbTooltip implements OnInit, OnDestroy {\n /**\n * Indicates whether the tooltip should be closed on `Escape` key and inside/outside clicks:\n *\n * * `true` - closes on both outside and inside clicks as well as `Escape` presses\n * * `false` - disables the autoClose feature (NB: triggers still apply)\n * * `\"inside\"` - closes on inside clicks as well as Escape presses\n * * `\"outside\"` - closes on outside clicks (sometimes also achievable through triggers)\n * as well as `Escape` presses\n *\n * @since 3.0.0\n */\n @Input() autoClose: boolean | 'inside' | 'outside';\n\n /**\n * The preferred placement of the tooltip.\n *\n * Possible values are `\"top\"`, `\"top-left\"`, `\"top-right\"`, `\"bottom\"`, `\"bottom-left\"`,\n * `\"bottom-right\"`, `\"left\"`, `\"left-top\"`, `\"left-bottom\"`, `\"right\"`, `\"right-top\"`,\n * `\"right-bottom\"`\n *\n * Accepts an array of strings or a string with space separated possible values.\n *\n * The default order of preference is `\"auto\"` (same as the sequence above).\n *\n * Please see the [positioning overview](#/positioning) for more details.\n */\n @Input() placement: PlacementArray;\n\n /**\n * Specifies events that should trigger the tooltip.\n *\n * Supports a space separated list of event names.\n * For more details see the [triggers demo](#/components/tooltip/examples#triggers).\n */\n @Input() triggers: string;\n\n /**\n * A selector specifying the element the tooltip should be appended to.\n *\n * Currently only supports `\"body\"`.\n */\n @Input() container: string;\n\n /**\n * If `true`, tooltip is disabled and won't be displayed.\n *\n * @since 1.1.0\n */\n @Input() disableTooltip: boolean;\n\n /**\n * An optional class applied to the tooltip window element.\n *\n * @since 3.2.0\n */\n @Input() tooltipClass: string;\n\n /**\n * The opening delay in ms. Works only for \"non-manual\" opening triggers defined by the `triggers` input.\n *\n * @since 4.1.0\n */\n @Input() openDelay: number;\n\n /**\n * The closing delay in ms. Works only for \"non-manual\" opening triggers defined by the `triggers` input.\n *\n * @since 4.1.0\n */\n @Input() closeDelay: number;\n\n /**\n * An event emitted when the tooltip is shown. Contains no payload.\n */\n @Output() shown = new EventEmitter();\n /**\n * An event emitted when the popover is hidden. Contains no payload.\n */\n @Output() hidden = new EventEmitter();\n\n private _ngbTooltip: string | TemplateRef;\n private _ngbTooltipWindowId = `ngb-tooltip-${nextId++}`;\n private _popupService: PopupService;\n private _windowRef: ComponentRef;\n private _unregisterListenersFn;\n private _zoneSubscription: any;\n\n constructor(\n private _elementRef: ElementRef, private _renderer: Renderer2, injector: Injector,\n componentFactoryResolver: ComponentFactoryResolver, viewContainerRef: ViewContainerRef, config: NgbTooltipConfig,\n private _ngZone: NgZone, @Inject(DOCUMENT) private _document: any, private _changeDetector: ChangeDetectorRef,\n private _applicationRef: ApplicationRef) {\n this.autoClose = config.autoClose;\n this.placement = config.placement;\n this.triggers = config.triggers;\n this.container = config.container;\n this.disableTooltip = config.disableTooltip;\n this.tooltipClass = config.tooltipClass;\n this.openDelay = config.openDelay;\n this.closeDelay = config.closeDelay;\n this._popupService = new PopupService(\n NgbTooltipWindow, injector, viewContainerRef, _renderer, componentFactoryResolver, _applicationRef);\n\n this._zoneSubscription = _ngZone.onStable.subscribe(() => {\n if (this._windowRef) {\n positionElements(\n this._elementRef.nativeElement, this._windowRef.location.nativeElement, this.placement,\n this.container === 'body', 'bs-tooltip');\n }\n });\n }\n\n /**\n * The string content or a `TemplateRef` for the content to be displayed in the tooltip.\n *\n * If the content if falsy, the tooltip won't open.\n */\n @Input()\n set ngbTooltip(value: string | TemplateRef) {\n this._ngbTooltip = value;\n if (!value && this._windowRef) {\n this.close();\n }\n }\n\n get ngbTooltip() { return this._ngbTooltip; }\n\n /**\n * Opens the tooltip.\n *\n * This is considered to be a \"manual\" triggering.\n * The `context` is an optional value to be injected into the tooltip template when it is created.\n */\n open(context?: any) {\n if (!this._windowRef && this._ngbTooltip && !this.disableTooltip) {\n this._windowRef = this._popupService.open(this._ngbTooltip, context);\n this._windowRef.instance.tooltipClass = this.tooltipClass;\n this._windowRef.instance.id = this._ngbTooltipWindowId;\n\n this._renderer.setAttribute(this._elementRef.nativeElement, 'aria-describedby', this._ngbTooltipWindowId);\n\n if (this.container === 'body') {\n this._document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement);\n }\n\n // We need to detect changes, because we don't know where .open() might be called from.\n // Ex. opening tooltip from one of lifecycle hooks that run after the CD\n // (say from ngAfterViewInit) will result in 'ExpressionHasChanged' exception\n this._windowRef.changeDetectorRef.detectChanges();\n\n // We need to mark for check, because tooltip won't work inside the OnPush component.\n // Ex. when we use expression like `{{ tooltip.isOpen() : 'opened' : 'closed' }}`\n // inside the template of an OnPush component and we change the tooltip from\n // open -> closed, the expression in question won't be updated unless we explicitly\n // mark the parent component to be checked.\n this._windowRef.changeDetectorRef.markForCheck();\n\n ngbAutoClose(\n this._ngZone, this._document, this.autoClose, () => this.close(), this.hidden,\n [this._windowRef.location.nativeElement]);\n\n this.shown.emit();\n }\n }\n\n /**\n * Closes the tooltip.\n *\n * This is considered to be a \"manual\" triggering of the tooltip.\n */\n close(): void {\n if (this._windowRef != null) {\n this._renderer.removeAttribute(this._elementRef.nativeElement, 'aria-describedby');\n this._popupService.close();\n this._windowRef = null;\n this.hidden.emit();\n this._changeDetector.markForCheck();\n }\n }\n\n /**\n * Toggles the tooltip.\n *\n * This is considered to be a \"manual\" triggering of the tooltip.\n */\n toggle(): void {\n if (this._windowRef) {\n this.close();\n } else {\n this.open();\n }\n }\n\n /**\n * Returns `true`, if the popover is currently shown.\n */\n isOpen(): boolean { return this._windowRef != null; }\n\n ngOnInit() {\n this._unregisterListenersFn = listenToTriggers(\n this._renderer, this._elementRef.nativeElement, this.triggers, this.isOpen.bind(this), this.open.bind(this),\n this.close.bind(this), +this.openDelay, +this.closeDelay);\n }\n\n ngOnDestroy() {\n this.close();\n // This check is needed as it might happen that ngOnDestroy is called before ngOnInit\n // under certain conditions, see: https://github.com/ng-bootstrap/ng-bootstrap/issues/2199\n if (this._unregisterListenersFn) {\n this._unregisterListenersFn();\n }\n this._zoneSubscription.unsubscribe();\n }\n}\n","import {NgModule} from '@angular/core';\n\nimport {NgbTooltip, NgbTooltipWindow} from './tooltip';\n\nexport {NgbTooltipConfig} from './tooltip-config';\nexport {NgbTooltip} from './tooltip';\nexport {Placement} from '../util/positioning';\n\n@NgModule({declarations: [NgbTooltip, NgbTooltipWindow], exports: [NgbTooltip], entryComponents: [NgbTooltipWindow]})\nexport class NgbTooltipModule {\n}\n","import {Component, Input, OnChanges, ChangeDetectionStrategy, SimpleChanges, ViewEncapsulation} from '@angular/core';\nimport {regExpEscape, toString} from '../util/util';\n\n/**\n * A component that helps with text highlighting.\n *\n * If splits the `result` text into parts that contain the searched `term` and generates the HTML markup to simplify\n * highlighting:\n *\n * Ex. `result=\"Alaska\"` and `term=\"as\"` will produce `Alaska`.\n */\n@Component({\n selector: 'ngb-highlight',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `` +\n `{{part}}{{part}}` +\n ``, // template needs to be formatted in a certain way so we don't add empty text nodes\n styleUrls: ['./highlight.scss']\n})\nexport class NgbHighlight implements OnChanges {\n parts: string[];\n\n /**\n * The CSS class for `` elements wrapping the `term` inside the `result`.\n */\n @Input() highlightClass = 'ngb-highlight';\n\n /**\n * The text highlighting is added to.\n *\n * If the `term` is found inside this text, it will be highlighted.\n * If the `term` contains array then all the items from it will be highlighted inside the text.\n */\n @Input() result: string;\n\n /**\n * The term or array of terms to be highlighted.\n * Since version `v4.2.0` term could be a `string[]`\n */\n @Input() term: string | string[];\n\n ngOnChanges(changes: SimpleChanges) {\n const result = toString(this.result);\n\n const terms = Array.isArray(this.term) ? this.term : [this.term];\n const escapedTerms = terms.map(term => regExpEscape(toString(term))).filter(term => term);\n\n this.parts = escapedTerms.length ? result.split(new RegExp(`(${escapedTerms.join('|')})`, 'gmi')) : [result];\n }\n}\n","import {Component, Input, Output, EventEmitter, TemplateRef, OnInit} from '@angular/core';\n\nimport {toString} from '../util/util';\n\n/**\n * The context for the typeahead result template in case you want to override the default one.\n */\nexport interface ResultTemplateContext {\n /**\n * Your typeahead result item.\n */\n result: any;\n\n /**\n * Search term from the `` used to get current result.\n */\n term: string;\n}\n\n@Component({\n selector: 'ngb-typeahead-window',\n exportAs: 'ngbTypeaheadWindow',\n host: {'(mousedown)': '$event.preventDefault()', 'class': 'dropdown-menu show', 'role': 'listbox', '[id]': 'id'},\n template: `\n \n \n \n \n \n \n `\n})\nexport class NgbTypeaheadWindow implements OnInit {\n activeIdx = 0;\n\n /**\n * The id for the typeahead window. The id should be unique and the same\n * as the associated typeahead's id.\n */\n @Input() id: string;\n\n /**\n * Flag indicating if the first row should be active initially\n */\n @Input() focusFirst = true;\n\n /**\n * Typeahead match results to be displayed\n */\n @Input() results;\n\n /**\n * Search term used to get current results\n */\n @Input() term: string;\n\n /**\n * A function used to format a given result before display. This function should return a formatted string without any\n * HTML markup\n */\n @Input() formatter = toString;\n\n /**\n * A template to override a matching result default display\n */\n @Input() resultTemplate: TemplateRef;\n\n /**\n * Event raised when user selects a particular result row\n */\n @Output('select') selectEvent = new EventEmitter();\n\n @Output('activeChange') activeChangeEvent = new EventEmitter();\n\n hasActive() { return this.activeIdx > -1 && this.activeIdx < this.results.length; }\n\n getActive() { return this.results[this.activeIdx]; }\n\n markActive(activeIdx: number) {\n this.activeIdx = activeIdx;\n this._activeChanged();\n }\n\n next() {\n if (this.activeIdx === this.results.length - 1) {\n this.activeIdx = this.focusFirst ? (this.activeIdx + 1) % this.results.length : -1;\n } else {\n this.activeIdx++;\n }\n this._activeChanged();\n }\n\n prev() {\n if (this.activeIdx < 0) {\n this.activeIdx = this.results.length - 1;\n } else if (this.activeIdx === 0) {\n this.activeIdx = this.focusFirst ? this.results.length - 1 : -1;\n } else {\n this.activeIdx--;\n }\n this._activeChanged();\n }\n\n resetActive() {\n this.activeIdx = this.focusFirst ? 0 : -1;\n this._activeChanged();\n }\n\n select(item) { this.selectEvent.emit(item); }\n\n ngOnInit() { this.resetActive(); }\n\n private _activeChanged() {\n this.activeChangeEvent.emit(this.activeIdx >= 0 ? this.id + '-' + this.activeIdx : undefined);\n }\n}\n","import {Injectable, Inject, InjectionToken, OnDestroy} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\n\n\n\n// usefulness (and default value) of delay documented in Material's CDK\n// https://github.com/angular/material2/blob/6405da9b8e8532a7e5c854c920ee1815c275d734/src/cdk/a11y/live-announcer/live-announcer.ts#L50\nexport type ARIA_LIVE_DELAY_TYPE = number | null;\nexport const ARIA_LIVE_DELAY = new InjectionToken(\n 'live announcer delay', {providedIn: 'root', factory: ARIA_LIVE_DELAY_FACTORY});\nexport function ARIA_LIVE_DELAY_FACTORY(): number {\n return 100;\n}\n\n\nfunction getLiveElement(document: any, lazyCreate = false): HTMLElement | null {\n let element = document.body.querySelector('#ngb-live') as HTMLElement;\n\n if (element == null && lazyCreate) {\n element = document.createElement('div');\n\n element.setAttribute('id', 'ngb-live');\n element.setAttribute('aria-live', 'polite');\n element.setAttribute('aria-atomic', 'true');\n\n element.classList.add('sr-only');\n\n document.body.appendChild(element);\n }\n\n return element;\n}\n\n\n\n@Injectable({providedIn: 'root'})\nexport class Live implements OnDestroy {\n constructor(@Inject(DOCUMENT) private _document: any, @Inject(ARIA_LIVE_DELAY) private _delay: any) {}\n\n ngOnDestroy() {\n const element = getLiveElement(this._document);\n if (element) {\n element.parentElement.removeChild(element);\n }\n }\n\n say(message: string) {\n const element = getLiveElement(this._document, true);\n const delay = this._delay;\n\n element.textContent = '';\n const setText = () => element.textContent = message;\n if (delay === null) {\n setText();\n } else {\n setTimeout(setText, delay);\n }\n }\n}\n","import {Injectable} from '@angular/core';\nimport {PlacementArray} from '../util/positioning';\n\n/**\n * A configuration service for the [`NgbTypeahead`](#/components/typeahead/api#NgbTypeahead) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the typeaheads used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbTypeaheadConfig {\n container;\n editable = true;\n focusFirst = true;\n showHint = false;\n placement: PlacementArray = ['bottom-left', 'bottom-right', 'top-left', 'top-right'];\n}\n","import {\n ChangeDetectorRef,\n ComponentFactoryResolver,\n ComponentRef,\n Directive,\n ElementRef,\n EventEmitter,\n forwardRef,\n Inject,\n Injector,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Output,\n Renderer2,\n TemplateRef,\n ViewContainerRef,\n ApplicationRef\n} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {DOCUMENT} from '@angular/common';\nimport {BehaviorSubject, fromEvent, Observable, Subject, Subscription} from 'rxjs';\nimport {map, switchMap, tap} from 'rxjs/operators';\n\nimport {Live} from '../util/accessibility/live';\nimport {ngbAutoClose} from '../util/autoclose';\nimport {Key} from '../util/key';\nimport {PopupService} from '../util/popup';\nimport {PlacementArray, positionElements} from '../util/positioning';\nimport {isDefined, toString} from '../util/util';\n\nimport {NgbTypeaheadConfig} from './typeahead-config';\nimport {NgbTypeaheadWindow, ResultTemplateContext} from './typeahead-window';\n\n\nconst NGB_TYPEAHEAD_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgbTypeahead),\n multi: true\n};\n\n/**\n * An event emitted right before an item is selected from the result list.\n */\nexport interface NgbTypeaheadSelectItemEvent {\n /**\n * The item from the result list about to be selected.\n */\n item: any;\n\n /**\n * Calling this function will prevent item selection from happening.\n */\n preventDefault: () => void;\n}\n\nlet nextWindowId = 0;\n\n/**\n * A directive providing a simple way of creating powerful typeaheads from any text input.\n */\n@Directive({\n selector: 'input[ngbTypeahead]',\n exportAs: 'ngbTypeahead',\n host: {\n '(blur)': 'handleBlur()',\n '[class.open]': 'isPopupOpen()',\n '(keydown)': 'handleKeyDown($event)',\n '[autocomplete]': 'autocomplete',\n 'autocapitalize': 'off',\n 'autocorrect': 'off',\n 'role': 'combobox',\n 'aria-multiline': 'false',\n '[attr.aria-autocomplete]': 'showHint ? \"both\" : \"list\"',\n '[attr.aria-activedescendant]': 'activeDescendant',\n '[attr.aria-owns]': 'isPopupOpen() ? popupId : null',\n '[attr.aria-expanded]': 'isPopupOpen()'\n },\n providers: [NGB_TYPEAHEAD_VALUE_ACCESSOR]\n})\nexport class NgbTypeahead implements ControlValueAccessor,\n OnInit, OnDestroy {\n private _popupService: PopupService;\n private _subscription: Subscription;\n private _closed$ = new Subject();\n private _inputValueBackup: string;\n private _valueChanges: Observable;\n private _resubscribeTypeahead: BehaviorSubject;\n private _windowRef: ComponentRef;\n private _zoneSubscription: any;\n\n /**\n * The value for the `autocomplete` attribute for the `` element.\n *\n * Defaults to `\"off\"` to disable the native browser autocomplete, but you can override it if necessary.\n *\n * @since 2.1.0\n */\n @Input() autocomplete = 'off';\n\n /**\n * A selector specifying the element the typeahead popup will be appended to.\n *\n * Currently only supports `\"body\"`.\n */\n @Input() container: string;\n\n /**\n * If `true`, model values will not be restricted only to items selected from the popup.\n */\n @Input() editable: boolean;\n\n /**\n * If `true`, the first item in the result list will always stay focused while typing.\n */\n @Input() focusFirst: boolean;\n\n /**\n * The function that converts an item from the result list to a `string` to display in the `` field.\n *\n * It is called when the user selects something in the popup or the model value changes, so the input needs to\n * be updated.\n */\n @Input() inputFormatter: (item: any) => string;\n\n /**\n * The function that converts a stream of text values from the `` element to the stream of the array of items\n * to display in the typeahead popup.\n *\n * If the resulting observable emits a non-empty array - the popup will be shown. If it emits an empty array - the\n * popup will be closed.\n *\n * See the [basic example](#/components/typeahead/examples#basic) for more details.\n *\n * Note that the `this` argument is `undefined` so you need to explicitly bind it to a desired \"this\" target.\n */\n @Input() ngbTypeahead: (text: Observable) => Observable;\n\n /**\n * The function that converts an item from the result list to a `string` to display in the popup.\n *\n * Must be provided, if your `ngbTypeahead` returns something other than `Observable`.\n *\n * Alternatively for more complex markup in the popup you should use `resultTemplate`.\n */\n @Input() resultFormatter: (item: any) => string;\n\n /**\n * The template to override the way resulting items are displayed in the popup.\n *\n * See the [ResultTemplateContext](#/components/typeahead/api#ResultTemplateContext) for the template context.\n *\n * Also see the [template for results demo](#/components/typeahead/examples#template) for more details.\n */\n @Input() resultTemplate: TemplateRef;\n\n /**\n * If `true`, will show the hint in the `` when an item in the result list matches.\n */\n @Input() showHint: boolean;\n\n /**\n * The preferred placement of the typeahead.\n *\n * Possible values are `\"top\"`, `\"top-left\"`, `\"top-right\"`, `\"bottom\"`, `\"bottom-left\"`,\n * `\"bottom-right\"`, `\"left\"`, `\"left-top\"`, `\"left-bottom\"`, `\"right\"`, `\"right-top\"`,\n * `\"right-bottom\"`\n *\n * Accepts an array of strings or a string with space separated possible values.\n *\n * The default order of preference is `\"bottom-left bottom-right top-left top-right\"`\n *\n * Please see the [positioning overview](#/positioning) for more details.\n */\n @Input() placement: PlacementArray = 'bottom-left';\n\n /**\n * An event emitted right before an item is selected from the result list.\n *\n * Event payload is of type [`NgbTypeaheadSelectItemEvent`](#/components/typeahead/api#NgbTypeaheadSelectItemEvent).\n */\n @Output() selectItem = new EventEmitter();\n\n activeDescendant: string;\n popupId = `ngb-typeahead-${nextWindowId++}`;\n\n private _onTouched = () => {};\n private _onChange = (_: any) => {};\n\n constructor(\n private _elementRef: ElementRef, private _viewContainerRef: ViewContainerRef,\n private _renderer: Renderer2, private _injector: Injector, componentFactoryResolver: ComponentFactoryResolver,\n config: NgbTypeaheadConfig, ngZone: NgZone, private _live: Live, @Inject(DOCUMENT) private _document: any,\n private _ngZone: NgZone, private _changeDetector: ChangeDetectorRef, private _applicationRef: ApplicationRef) {\n this.container = config.container;\n this.editable = config.editable;\n this.focusFirst = config.focusFirst;\n this.showHint = config.showHint;\n this.placement = config.placement;\n\n this._valueChanges = fromEvent(_elementRef.nativeElement, 'input')\n .pipe(map($event => ($event.target as HTMLInputElement).value));\n\n this._resubscribeTypeahead = new BehaviorSubject(null);\n\n this._popupService = new PopupService(\n NgbTypeaheadWindow, _injector, _viewContainerRef, _renderer, componentFactoryResolver, _applicationRef);\n\n this._zoneSubscription = ngZone.onStable.subscribe(() => {\n if (this.isPopupOpen()) {\n positionElements(\n this._elementRef.nativeElement, this._windowRef.location.nativeElement, this.placement,\n this.container === 'body');\n }\n });\n }\n\n ngOnInit(): void {\n const inputValues$ = this._valueChanges.pipe(tap(value => {\n this._inputValueBackup = this.showHint ? value : null;\n if (this.editable) {\n this._onChange(value);\n }\n }));\n const results$ = inputValues$.pipe(this.ngbTypeahead);\n const processedResults$ = results$.pipe(tap(() => {\n if (!this.editable) {\n this._onChange(undefined);\n }\n }));\n const userInput$ = this._resubscribeTypeahead.pipe(switchMap(() => processedResults$));\n this._subscription = this._subscribeToUserInput(userInput$);\n }\n\n ngOnDestroy(): void {\n this._closePopup();\n this._unsubscribeFromUserInput();\n this._zoneSubscription.unsubscribe();\n }\n\n registerOnChange(fn: (value: any) => any): void { this._onChange = fn; }\n\n registerOnTouched(fn: () => any): void { this._onTouched = fn; }\n\n writeValue(value) {\n this._writeInputValue(this._formatItemForInput(value));\n if (this.showHint) {\n this._inputValueBackup = value;\n }\n }\n\n setDisabledState(isDisabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n\n /**\n * Dismisses typeahead popup window\n */\n dismissPopup() {\n if (this.isPopupOpen()) {\n this._resubscribeTypeahead.next(null);\n this._closePopup();\n if (this.showHint && this._inputValueBackup !== null) {\n this._writeInputValue(this._inputValueBackup);\n }\n this._changeDetector.markForCheck();\n }\n }\n\n /**\n * Returns true if the typeahead popup window is displayed\n */\n isPopupOpen() { return this._windowRef != null; }\n\n handleBlur() {\n this._resubscribeTypeahead.next(null);\n this._onTouched();\n }\n\n handleKeyDown(event: KeyboardEvent) {\n if (!this.isPopupOpen()) {\n return;\n }\n\n // tslint:disable-next-line:deprecation\n switch (event.which) {\n case Key.ArrowDown:\n event.preventDefault();\n this._windowRef.instance.next();\n this._showHint();\n break;\n case Key.ArrowUp:\n event.preventDefault();\n this._windowRef.instance.prev();\n this._showHint();\n break;\n case Key.Enter:\n case Key.Tab:\n const result = this._windowRef.instance.getActive();\n if (isDefined(result)) {\n event.preventDefault();\n event.stopPropagation();\n this._selectResult(result);\n }\n this._closePopup();\n break;\n }\n }\n\n private _openPopup() {\n if (!this.isPopupOpen()) {\n this._inputValueBackup = this._elementRef.nativeElement.value;\n this._windowRef = this._popupService.open();\n this._windowRef.instance.id = this.popupId;\n this._windowRef.instance.selectEvent.subscribe((result: any) => this._selectResultClosePopup(result));\n this._windowRef.instance.activeChangeEvent.subscribe((activeId: string) => this.activeDescendant = activeId);\n\n if (this.container === 'body') {\n window.document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement);\n }\n\n this._changeDetector.markForCheck();\n\n ngbAutoClose(\n this._ngZone, this._document, 'outside', () => this.dismissPopup(), this._closed$,\n [this._elementRef.nativeElement, this._windowRef.location.nativeElement]);\n }\n }\n\n private _closePopup() {\n this._closed$.next();\n this._popupService.close();\n this._windowRef = null;\n this.activeDescendant = undefined;\n }\n\n private _selectResult(result: any) {\n let defaultPrevented = false;\n this.selectItem.emit({item: result, preventDefault: () => { defaultPrevented = true; }});\n this._resubscribeTypeahead.next(null);\n\n if (!defaultPrevented) {\n this.writeValue(result);\n this._onChange(result);\n }\n }\n\n private _selectResultClosePopup(result: any) {\n this._selectResult(result);\n this._closePopup();\n }\n\n private _showHint() {\n if (this.showHint && this._windowRef.instance.hasActive() && this._inputValueBackup != null) {\n const userInputLowerCase = this._inputValueBackup.toLowerCase();\n const formattedVal = this._formatItemForInput(this._windowRef.instance.getActive());\n\n if (userInputLowerCase === formattedVal.substr(0, this._inputValueBackup.length).toLowerCase()) {\n this._writeInputValue(this._inputValueBackup + formattedVal.substr(this._inputValueBackup.length));\n this._elementRef.nativeElement['setSelectionRange'].apply(\n this._elementRef.nativeElement, [this._inputValueBackup.length, formattedVal.length]);\n } else {\n this._writeInputValue(formattedVal);\n }\n }\n }\n\n private _formatItemForInput(item: any): string {\n return item != null && this.inputFormatter ? this.inputFormatter(item) : toString(item);\n }\n\n private _writeInputValue(value: string): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', toString(value));\n }\n\n private _subscribeToUserInput(userInput$: Observable): Subscription {\n return userInput$.subscribe((results) => {\n if (!results || results.length === 0) {\n this._closePopup();\n } else {\n this._openPopup();\n this._windowRef.instance.focusFirst = this.focusFirst;\n this._windowRef.instance.results = results;\n this._windowRef.instance.term = this._elementRef.nativeElement.value;\n if (this.resultFormatter) {\n this._windowRef.instance.formatter = this.resultFormatter;\n }\n if (this.resultTemplate) {\n this._windowRef.instance.resultTemplate = this.resultTemplate;\n }\n this._windowRef.instance.resetActive();\n\n // The observable stream we are subscribing to might have async steps\n // and if a component containing typeahead is using the OnPush strategy\n // the change detection turn wouldn't be invoked automatically.\n this._windowRef.changeDetectorRef.detectChanges();\n\n this._showHint();\n }\n\n // live announcer\n const count = results ? results.length : 0;\n this._live.say(count === 0 ? 'No results available' : `${count} result${count === 1 ? '' : 's'} available`);\n });\n }\n\n private _unsubscribeFromUserInput() {\n if (this._subscription) {\n this._subscription.unsubscribe();\n }\n this._subscription = null;\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\nimport {NgbHighlight} from './highlight';\nimport {NgbTypeaheadWindow} from './typeahead-window';\nimport {NgbTypeahead} from './typeahead';\n\nexport {NgbHighlight} from './highlight';\nexport {NgbTypeaheadWindow} from './typeahead-window';\nexport {NgbTypeaheadConfig} from './typeahead-config';\nexport {NgbTypeahead, NgbTypeaheadSelectItemEvent} from './typeahead';\n\n@NgModule({\n declarations: [NgbTypeahead, NgbHighlight, NgbTypeaheadWindow],\n exports: [NgbTypeahead, NgbHighlight],\n imports: [CommonModule],\n entryComponents: [NgbTypeaheadWindow]\n})\nexport class NgbTypeaheadModule {\n}\n","import {NgModule} from '@angular/core';\n\nimport {SbCardModule} from './card/card.module';\nimport {NgbAccordionModule} from './accordion/accordion.module';\nimport {NgbAlertModule} from './alert/alert.module';\nimport {NgbButtonsModule} from './buttons/buttons.module';\nimport {NgbCarouselModule} from './carousel/carousel.module';\nimport {NgbCollapseModule} from './collapse/collapse.module';\nimport {NgbDatepickerModule} from './datepicker/datepicker.module';\nimport {NgbDropdownModule} from './dropdown/dropdown.module';\nimport {NgbModalModule} from './modal/modal.module';\nimport {NgbPaginationModule} from './pagination/pagination.module';\nimport {NgbPopoverModule} from './popover/popover.module';\nimport {NgbProgressbarModule} from './progressbar/progressbar.module';\nimport {NgbRatingModule} from './rating/rating.module';\nimport {NgbTabsetModule} from './tabset/tabset.module';\nimport {NgbTimepickerModule} from './timepicker/timepicker.module';\nimport {NgbToastModule} from './toast/toast.module';\nimport {NgbTooltipModule} from './tooltip/tooltip.module';\nimport {NgbTypeaheadModule} from './typeahead/typeahead.module';\n\n\n\nexport {\n NgbAccordion,\n NgbAccordionConfig,\n NgbAccordionModule,\n NgbPanel,\n NgbPanelChangeEvent,\n NgbPanelContent,\n NgbPanelHeader,\n NgbPanelHeaderContext,\n NgbPanelTitle,\n NgbPanelToggle\n} from './accordion/accordion.module';\nexport {SbCard, SbCardConfig, SbCardModule} from './card/card.module';\nexport {NgbAlert, NgbAlertConfig, NgbAlertModule} from './alert/alert.module';\nexport {NgbButtonLabel, NgbButtonsModule, NgbCheckBox, NgbRadio, NgbRadioGroup} from './buttons/buttons.module';\nexport {\n NgbCarousel,\n NgbCarouselConfig,\n NgbCarouselModule,\n NgbSlide,\n NgbSlideEvent,\n NgbSlideEventDirection,\n NgbSlideEventSource\n} from './carousel/carousel.module';\nexport {NgbCollapse, NgbCollapseModule} from './collapse/collapse.module';\nexport {\n NgbCalendar,\n NgbCalendarGregorian,\n NgbCalendarHebrew,\n NgbCalendarIslamicCivil,\n NgbCalendarIslamicUmalqura,\n NgbCalendarPersian,\n NgbDate,\n NgbDateAdapter,\n NgbDateNativeAdapter,\n NgbDateNativeUTCAdapter,\n NgbDateParserFormatter,\n NgbDatepicker,\n NgbDatepickerConfig,\n NgbDatepickerI18n,\n NgbDatepickerI18nHebrew,\n NgbDatepickerModule,\n NgbDatepickerNavigateEvent,\n NgbDateStruct,\n NgbInputDatepicker,\n NgbPeriod\n} from './datepicker/datepicker.module';\nexport {\n NgbDropdown,\n NgbDropdownAnchor,\n NgbDropdownConfig,\n NgbDropdownItem,\n NgbDropdownMenu,\n NgbDropdownModule,\n NgbDropdownToggle\n} from './dropdown/dropdown.module';\nexport {\n ModalDismissReasons,\n NgbActiveModal,\n NgbModal,\n NgbModalConfig,\n NgbModalModule,\n NgbModalOptions,\n NgbModalRef\n} from './modal/modal.module';\nexport {\n NgbPagination,\n NgbPaginationConfig,\n NgbPaginationEllipsis,\n NgbPaginationFirst,\n NgbPaginationLast,\n NgbPaginationModule,\n NgbPaginationNext,\n NgbPaginationNumber,\n NgbPaginationPrevious\n} from './pagination/pagination.module';\nexport {NgbPopover, NgbPopoverConfig, NgbPopoverModule} from './popover/popover.module';\nexport {NgbProgressbar, NgbProgressbarConfig, NgbProgressbarModule} from './progressbar/progressbar.module';\nexport {NgbRating, NgbRatingConfig, NgbRatingModule} from './rating/rating.module';\nexport {\n NgbTab,\n NgbTabChangeEvent,\n NgbTabContent,\n NgbTabset,\n NgbTabsetConfig,\n NgbTabsetModule,\n NgbTabTitle\n} from './tabset/tabset.module';\nexport {\n NgbTimeAdapter,\n NgbTimepickerI18n,\n NgbTimepicker,\n NgbTimepickerConfig,\n NgbTimepickerModule,\n NgbTimeStruct\n} from './timepicker/timepicker.module';\nexport {NgbToast, NgbToastConfig, NgbToastHeader, NgbToastModule} from './toast/toast.module';\nexport {NgbTooltip, NgbTooltipConfig, NgbTooltipModule} from './tooltip/tooltip.module';\nexport {\n NgbHighlight,\n NgbTypeahead,\n NgbTypeaheadConfig,\n NgbTypeaheadModule,\n NgbTypeaheadSelectItemEvent\n} from './typeahead/typeahead.module';\nexport {Placement} from './util/positioning';\n\n\nconst NGB_MODULES = [\n SbCardModule, NgbAccordionModule, NgbAlertModule, NgbButtonsModule, NgbCarouselModule, NgbCollapseModule, NgbDatepickerModule,\n NgbDropdownModule, NgbModalModule, NgbPaginationModule, NgbPopoverModule, NgbProgressbarModule, NgbRatingModule,\n NgbTabsetModule, NgbTimepickerModule, NgbToastModule, NgbTooltipModule, NgbTypeaheadModule\n];\n\n@NgModule({imports: NGB_MODULES, exports: NGB_MODULES})\nexport class NgbModule {\n}\n"]} \ No newline at end of file diff --git a/dist/sunbird-ui-components/buttons/buttons.module.d.ts b/dist/sunbird-ui-components/buttons/buttons.module.d.ts new file mode 100644 index 0000000..6de93d4 --- /dev/null +++ b/dist/sunbird-ui-components/buttons/buttons.module.d.ts @@ -0,0 +1,5 @@ +export { NgbButtonLabel } from './label'; +export { NgbCheckBox } from './checkbox'; +export { NgbRadio, NgbRadioGroup } from './radio'; +export declare class NgbButtonsModule { +} diff --git a/dist/sunbird-ui-components/buttons/checkbox.d.ts b/dist/sunbird-ui-components/buttons/checkbox.d.ts new file mode 100644 index 0000000..d789f96 --- /dev/null +++ b/dist/sunbird-ui-components/buttons/checkbox.d.ts @@ -0,0 +1,35 @@ +import { ChangeDetectorRef } from '@angular/core'; +import { ControlValueAccessor } from '@angular/forms'; +import { NgbButtonLabel } from './label'; +/** + * Allows to easily create Bootstrap-style checkbox buttons. + * + * Integrates with forms, so the value of a checked button is bound to the underlying form control + * either in a reactive or template-driven way. + */ +export declare class NgbCheckBox implements ControlValueAccessor { + private _label; + private _cd; + checked: any; + /** + * If `true`, the checkbox button will be disabled + */ + disabled: boolean; + /** + * The form control value when the checkbox is checked. + */ + valueChecked: boolean; + /** + * The form control value when the checkbox is unchecked. + */ + valueUnChecked: boolean; + onChange: (_: any) => void; + onTouched: () => void; + focused: boolean; + constructor(_label: NgbButtonLabel, _cd: ChangeDetectorRef); + onInputChange($event: any): void; + registerOnChange(fn: (value: any) => any): void; + registerOnTouched(fn: () => any): void; + setDisabledState(isDisabled: boolean): void; + writeValue(value: any): void; +} diff --git a/dist/sunbird-ui-components/buttons/label.d.ts b/dist/sunbird-ui-components/buttons/label.d.ts new file mode 100644 index 0000000..3491486 --- /dev/null +++ b/dist/sunbird-ui-components/buttons/label.d.ts @@ -0,0 +1,5 @@ +export declare class NgbButtonLabel { + active: boolean; + disabled: boolean; + focused: boolean; +} diff --git a/dist/sunbird-ui-components/buttons/radio.d.ts b/dist/sunbird-ui-components/buttons/radio.d.ts new file mode 100644 index 0000000..cb6b467 --- /dev/null +++ b/dist/sunbird-ui-components/buttons/radio.d.ts @@ -0,0 +1,73 @@ +import { ChangeDetectorRef, ElementRef, OnDestroy, Renderer2 } from '@angular/core'; +import { ControlValueAccessor } from '@angular/forms'; +import { NgbButtonLabel } from './label'; +/** + * Allows to easily create Bootstrap-style radio buttons. + * + * Integrates with forms, so the value of a checked button is bound to the underlying form control + * either in a reactive or template-driven way. + */ +export declare class NgbRadioGroup implements ControlValueAccessor { + private _radios; + private _value; + private _disabled; + disabled: boolean; + /** + * Name of the radio group applied to radio input elements. + * + * Will be applied to all radio input elements inside the group, + * unless [`NgbRadio`](#/components/buttons/api#NgbRadio)'s specify names themselves. + * + * If not provided, will be generated in the `ngb-radio-xx` format. + */ + name: string; + onChange: (_: any) => void; + onTouched: () => void; + onRadioChange(radio: NgbRadio): void; + onRadioValueUpdate(): void; + register(radio: NgbRadio): void; + registerOnChange(fn: (value: any) => any): void; + registerOnTouched(fn: () => any): void; + setDisabledState(isDisabled: boolean): void; + unregister(radio: NgbRadio): void; + writeValue(value: any): void; + private _updateRadiosValue; + private _updateRadiosDisabled; +} +/** + * A directive that marks an input of type "radio" as a part of the + * [`NgbRadioGroup`](#/components/buttons/api#NgbRadioGroup). + */ +export declare class NgbRadio implements OnDestroy { + private _group; + private _label; + private _renderer; + private _element; + private _cd; + private _checked; + private _disabled; + private _value; + /** + * The value for the 'name' property of the input element. + * + * All inputs of the radio group should have the same name. If not specified, + * the name of the enclosing group is used. + */ + name: string; + /** + * The form control value when current radio button is checked. + */ + value: any; + /** + * If `true`, current radio button will be disabled. + */ + disabled: boolean; + focused: boolean; + readonly checked: boolean; + readonly nameAttr: string; + constructor(_group: NgbRadioGroup, _label: NgbButtonLabel, _renderer: Renderer2, _element: ElementRef, _cd: ChangeDetectorRef); + ngOnDestroy(): void; + onChange(): void; + updateValue(value: any): void; + updateDisabled(): void; +} diff --git a/dist/sunbird-ui-components/card/card-config.d.ts b/dist/sunbird-ui-components/card/card-config.d.ts new file mode 100644 index 0000000..63559c9 --- /dev/null +++ b/dist/sunbird-ui-components/card/card-config.d.ts @@ -0,0 +1,10 @@ +/** + * A configuration service for the [SbCard](#/components/alert/api#SbCard) component. + * + * You can inject this service, typically in your root component, and customize its properties + * to provide default values for all alerts used in the application. + */ +export declare class SbCardConfig { + dismissible: boolean; + type: string; +} diff --git a/dist/sunbird-ui-components/card/card.d.ts b/dist/sunbird-ui-components/card/card.d.ts new file mode 100644 index 0000000..7f30cf9 --- /dev/null +++ b/dist/sunbird-ui-components/card/card.d.ts @@ -0,0 +1,33 @@ +import { EventEmitter, Renderer2, ElementRef, OnChanges, OnInit, SimpleChanges } from '@angular/core'; +import { SbCardConfig } from './card-config'; +/** + * Alert is a component to provide contextual feedback messages for user. + * + * It supports several alert types and can be dismissed. + */ +export declare class SbCard implements OnInit, OnChanges { + private _renderer; + private _element; + /** + * If `true`, alert can be dismissed by the user. + * + * The close button (×) will be displayed and you can be notified + * of the event with the `(close)` output. + */ + dismissible: boolean; + /** + * Type of the alert. + * + * Bootstrap provides styles for the following types: `'success'`, `'info'`, `'warning'`, `'danger'`, `'primary'`, + * `'secondary'`, `'light'` and `'dark'`. + */ + type: string; + /** + * An event emitted when the close button is clicked. It has no payload and only relevant for dismissible alerts. + */ + close: EventEmitter; + constructor(config: SbCardConfig, _renderer: Renderer2, _element: ElementRef); + closeHandler(): void; + ngOnChanges(changes: SimpleChanges): void; + ngOnInit(): void; +} diff --git a/dist/sunbird-ui-components/card/card.module.d.ts b/dist/sunbird-ui-components/card/card.module.d.ts new file mode 100644 index 0000000..c83bc55 --- /dev/null +++ b/dist/sunbird-ui-components/card/card.module.d.ts @@ -0,0 +1,4 @@ +export { SbCard } from './card'; +export { SbCardConfig } from './card-config'; +export declare class SbCardModule { +} diff --git a/dist/sunbird-ui-components/carousel/carousel-config.d.ts b/dist/sunbird-ui-components/carousel/carousel-config.d.ts new file mode 100644 index 0000000..04e81c4 --- /dev/null +++ b/dist/sunbird-ui-components/carousel/carousel-config.d.ts @@ -0,0 +1,14 @@ +/** + * A configuration service for the [NgbCarousel](#/components/carousel/api#NgbCarousel) component. + * + * You can inject this service, typically in your root component, and customize its properties + * to provide default values for all carousels used in the application. + */ +export declare class NgbCarouselConfig { + interval: number; + wrap: boolean; + keyboard: boolean; + pauseOnHover: boolean; + showNavigationArrows: boolean; + showNavigationIndicators: boolean; +} diff --git a/dist/sunbird-ui-components/carousel/carousel.d.ts b/dist/sunbird-ui-components/carousel/carousel.d.ts new file mode 100644 index 0000000..6dddbf2 --- /dev/null +++ b/dist/sunbird-ui-components/carousel/carousel.d.ts @@ -0,0 +1,154 @@ +import { AfterContentChecked, AfterContentInit, ChangeDetectorRef, EventEmitter, NgZone, OnDestroy, QueryList, TemplateRef } from '@angular/core'; +import { NgbCarouselConfig } from './carousel-config'; +/** + * A directive that wraps the individual carousel slide. + */ +export declare class NgbSlide { + tplRef: TemplateRef; + /** + * Slide id that must be unique for the entire document. + * + * If not provided, will be generated in the `ngb-slide-xx` format. + */ + id: string; + constructor(tplRef: TemplateRef); +} +/** + * Carousel is a component to easily create and control slideshows. + * + * Allows to set intervals, change the way user interacts with the slides and provides a programmatic API. + */ +export declare class NgbCarousel implements AfterContentChecked, AfterContentInit, OnDestroy { + private _platformId; + private _ngZone; + private _cd; + slides: QueryList; + NgbSlideEventSource: typeof NgbSlideEventSource; + private _destroy$; + private _interval$; + private _mouseHover$; + private _pauseOnHover$; + private _pause$; + private _wrap$; + /** + * The slide id that should be displayed **initially**. + * + * For subsequent interactions use methods `select()`, `next()`, etc. and the `(slide)` output. + */ + activeId: string; + /** + * Time in milliseconds before the next slide is shown. + */ + interval: number; + /** + * If `true`, will 'wrap' the carousel by switching from the last slide back to the first. + */ + wrap: boolean; + /** + * If `true`, allows to interact with carousel using keyboard 'arrow left' and 'arrow right'. + */ + keyboard: boolean; + /** + * If `true`, will pause slide switching when mouse cursor hovers the slide. + * + * @since 2.2.0 + */ + pauseOnHover: boolean; + /** + * If `true`, 'previous' and 'next' navigation arrows will be visible on the slide. + * + * @since 2.2.0 + */ + showNavigationArrows: boolean; + /** + * If `true`, navigation indicators at the bottom of the slide will be visible. + * + * @since 2.2.0 + */ + showNavigationIndicators: boolean; + /** + * An event emitted right after the slide transition is completed. + * + * See [`NgbSlideEvent`](#/components/carousel/api#NgbSlideEvent) for payload details. + */ + slide: EventEmitter; + constructor(config: NgbCarouselConfig, _platformId: any, _ngZone: NgZone, _cd: ChangeDetectorRef); + mouseEnter(): void; + mouseLeave(): void; + ngAfterContentInit(): void; + ngAfterContentChecked(): void; + ngOnDestroy(): void; + /** + * Navigates to a slide with the specified identifier. + */ + select(slideId: string, source?: NgbSlideEventSource): void; + /** + * Navigates to the previous slide. + */ + prev(source?: NgbSlideEventSource): void; + /** + * Navigates to the next slide. + */ + next(source?: NgbSlideEventSource): void; + /** + * Pauses cycling through the slides. + */ + pause(): void; + /** + * Restarts cycling through the slides from left to right. + */ + cycle(): void; + private _cycleToSelected; + private _getSlideEventDirection; + private _getSlideById; + private _getSlideIdxById; + private _getNextSlide; + private _getPrevSlide; +} +/** + * A slide change event emitted right after the slide transition is completed. + */ +export interface NgbSlideEvent { + /** + * The previous slide id. + */ + prev: string; + /** + * The current slide id. + */ + current: string; + /** + * The slide event direction. + * + * Possible values are `'left' | 'right'`. + */ + direction: NgbSlideEventDirection; + /** + * Whether the pause() method was called (and no cycle() call was done afterwards). + * + * @since 5.1.0 + */ + paused: boolean; + /** + * Source triggering the slide change event. + * + * Possible values are `'timer' | 'arrowLeft' | 'arrowRight' | 'indicator'` + * + * @since 5.1.0 + */ + source?: NgbSlideEventSource; +} +/** + * Defines the carousel slide transition direction. + */ +export declare enum NgbSlideEventDirection { + LEFT, + RIGHT +} +export declare enum NgbSlideEventSource { + TIMER = "timer", + ARROW_LEFT = "arrowLeft", + ARROW_RIGHT = "arrowRight", + INDICATOR = "indicator" +} +export declare const NGB_CAROUSEL_DIRECTIVES: (typeof NgbSlide | typeof NgbCarousel)[]; diff --git a/dist/sunbird-ui-components/carousel/carousel.module.d.ts b/dist/sunbird-ui-components/carousel/carousel.module.d.ts new file mode 100644 index 0000000..595a80c --- /dev/null +++ b/dist/sunbird-ui-components/carousel/carousel.module.d.ts @@ -0,0 +1,4 @@ +export { NgbCarousel, NgbSlide, NgbSlideEvent, NgbSlideEventDirection, NgbSlideEventSource } from './carousel'; +export { NgbCarouselConfig } from './carousel-config'; +export declare class NgbCarouselModule { +} diff --git a/dist/sunbird-ui-components/collapse/collapse.d.ts b/dist/sunbird-ui-components/collapse/collapse.d.ts new file mode 100644 index 0000000..3dff910 --- /dev/null +++ b/dist/sunbird-ui-components/collapse/collapse.d.ts @@ -0,0 +1,9 @@ +/** + * A directive to provide a simple way of hiding and showing elements on the page. + */ +export declare class NgbCollapse { + /** + * If `true`, will collapse the element or show it otherwise. + */ + collapsed: boolean; +} diff --git a/dist/sunbird-ui-components/collapse/collapse.module.d.ts b/dist/sunbird-ui-components/collapse/collapse.module.d.ts new file mode 100644 index 0000000..d40fbd5 --- /dev/null +++ b/dist/sunbird-ui-components/collapse/collapse.module.d.ts @@ -0,0 +1,3 @@ +export { NgbCollapse } from './collapse'; +export declare class NgbCollapseModule { +} diff --git a/dist/sunbird-ui-components/datepicker/adapters/ngb-date-adapter.d.ts b/dist/sunbird-ui-components/datepicker/adapters/ngb-date-adapter.d.ts new file mode 100644 index 0000000..57439a8 --- /dev/null +++ b/dist/sunbird-ui-components/datepicker/adapters/ngb-date-adapter.d.ts @@ -0,0 +1,34 @@ +import { NgbDateStruct } from '../ngb-date-struct'; +export declare function NGB_DATEPICKER_DATE_ADAPTER_FACTORY(): NgbDateStructAdapter; +/** + * An abstract service that does the conversion between the internal datepicker `NgbDateStruct` model and + * any provided user date model `D`, ex. a string, a native date, etc. + * + * The adapter is used **only** for conversion when binding datepicker to a form control, + * ex. `[(ngModel)]="userDateModel"`. Here `userDateModel` can be of any type. + * + * The default datepicker implementation assumes we use `NgbDateStruct` as a user model. + * + * See the [date format overview](#/components/datepicker/overview#date-model) for more details + * and the [custom adapter demo](#/components/datepicker/examples#adapter) for an example. + */ +export declare abstract class NgbDateAdapter { + /** + * Converts a user-model date of type `D` to an `NgbDateStruct` for internal use. + */ + abstract fromModel(value: D): NgbDateStruct; + /** + * Converts an internal `NgbDateStruct` date to a user-model date of type `D`. + */ + abstract toModel(date: NgbDateStruct): D; +} +export declare class NgbDateStructAdapter extends NgbDateAdapter { + /** + * Converts a NgbDateStruct value into NgbDateStruct value + */ + fromModel(date: NgbDateStruct): NgbDateStruct; + /** + * Converts a NgbDateStruct value into NgbDateStruct value + */ + toModel(date: NgbDateStruct): NgbDateStruct; +} diff --git a/dist/sunbird-ui-components/datepicker/adapters/ngb-date-native-adapter.d.ts b/dist/sunbird-ui-components/datepicker/adapters/ngb-date-native-adapter.d.ts new file mode 100644 index 0000000..0ba1b80 --- /dev/null +++ b/dist/sunbird-ui-components/datepicker/adapters/ngb-date-native-adapter.d.ts @@ -0,0 +1,18 @@ +import { NgbDateAdapter } from './ngb-date-adapter'; +import { NgbDateStruct } from '../ngb-date-struct'; +/** + * [`NgbDateAdapter`](#/components/datepicker/api#NgbDateAdapter) implementation that uses + * native javascript dates as a user date model. + */ +export declare class NgbDateNativeAdapter extends NgbDateAdapter { + /** + * Converts a native `Date` to a `NgbDateStruct`. + */ + fromModel(date: Date): NgbDateStruct; + /** + * Converts a `NgbDateStruct` to a native `Date`. + */ + toModel(date: NgbDateStruct): Date; + protected _fromNativeDate(date: Date): NgbDateStruct; + protected _toNativeDate(date: NgbDateStruct): Date; +} diff --git a/dist/sunbird-ui-components/datepicker/adapters/ngb-date-native-utc-adapter.d.ts b/dist/sunbird-ui-components/datepicker/adapters/ngb-date-native-utc-adapter.d.ts new file mode 100644 index 0000000..9c5b365 --- /dev/null +++ b/dist/sunbird-ui-components/datepicker/adapters/ngb-date-native-utc-adapter.d.ts @@ -0,0 +1,11 @@ +import { NgbDateStruct } from '../ngb-date-struct'; +import { NgbDateNativeAdapter } from './ngb-date-native-adapter'; +/** + * Same as [`NgbDateNativeAdapter`](#/components/datepicker/api#NgbDateNativeAdapter), but with UTC dates. + * + * @since 3.2.0 + */ +export declare class NgbDateNativeUTCAdapter extends NgbDateNativeAdapter { + protected _fromNativeDate(date: Date): NgbDateStruct; + protected _toNativeDate(date: NgbDateStruct): Date; +} diff --git a/dist/sunbird-ui-components/datepicker/datepicker-config.d.ts b/dist/sunbird-ui-components/datepicker/datepicker-config.d.ts new file mode 100644 index 0000000..55f7f55 --- /dev/null +++ b/dist/sunbird-ui-components/datepicker/datepicker-config.d.ts @@ -0,0 +1,33 @@ +import { TemplateRef } from '@angular/core'; +import { DayTemplateContext } from './datepicker-day-template-context'; +import { NgbDateStruct } from './ngb-date-struct'; +/** + * A configuration service for the [`NgbDatepicker`](#/components/datepicker/api#NgbDatepicker) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the datepickers used in the application. + */ +export declare class NgbDatepickerConfig { + dayTemplate: TemplateRef; + dayTemplateData: (date: NgbDateStruct, current: { + year: number; + month: number; + }) => any; + footerTemplate: TemplateRef; + displayMonths: number; + firstDayOfWeek: number; + markDisabled: (date: NgbDateStruct, current: { + year: number; + month: number; + }) => boolean; + minDate: NgbDateStruct; + maxDate: NgbDateStruct; + navigation: 'select' | 'arrows' | 'none'; + outsideDays: 'visible' | 'collapsed' | 'hidden'; + showWeekdays: boolean; + showWeekNumbers: boolean; + startDate: { + year: number; + month: number; + }; +} diff --git a/dist/sunbird-ui-components/datepicker/datepicker-day-template-context.d.ts b/dist/sunbird-ui-components/datepicker/datepicker-day-template-context.d.ts new file mode 100644 index 0000000..28aaa98 --- /dev/null +++ b/dist/sunbird-ui-components/datepicker/datepicker-day-template-context.d.ts @@ -0,0 +1,48 @@ +import { NgbDate } from './ngb-date'; +/** + * The context for the datepicker 'day' template. + * + * You can override the way dates are displayed in the datepicker via the `[dayTemplate]` input. + */ +export interface DayTemplateContext { + /** + * The date that corresponds to the template. Same as the `date` parameter. + * + * Can be used for convenience as a default template key, ex. `let-d`. + * + * @since 3.3.0 + */ + $implicit: NgbDate; + /** + * The month currently displayed by the datepicker. + */ + currentMonth: number; + /** + * Any data you pass using the `[dayTemplateData]` input in the datepicker. + * + * @since 3.3.0 + */ + data?: any; + /** + * The date that corresponds to the template. + */ + date: NgbDate; + /** + * `True` if the current date is disabled. + */ + disabled: boolean; + /** + * `True` if the current date is focused. + */ + focused: boolean; + /** + * `True` if the current date is selected. + */ + selected: boolean; + /** + * `True` if the current date is today (equal to `NgbCalendar.getToday()`). + * + * @since 4.1.0 + */ + today: boolean; +} diff --git a/dist/sunbird-ui-components/datepicker/datepicker-day-view.d.ts b/dist/sunbird-ui-components/datepicker/datepicker-day-view.d.ts new file mode 100644 index 0000000..a112eb4 --- /dev/null +++ b/dist/sunbird-ui-components/datepicker/datepicker-day-view.d.ts @@ -0,0 +1,12 @@ +import { NgbDate } from './ngb-date'; +import { NgbDatepickerI18n } from './datepicker-i18n'; +export declare class NgbDatepickerDayView { + i18n: NgbDatepickerI18n; + currentMonth: number; + date: NgbDate; + disabled: boolean; + focused: boolean; + selected: boolean; + constructor(i18n: NgbDatepickerI18n); + isMuted(): boolean; +} diff --git a/dist/sunbird-ui-components/datepicker/datepicker-i18n.d.ts b/dist/sunbird-ui-components/datepicker/datepicker-i18n.d.ts new file mode 100644 index 0000000..d84653f --- /dev/null +++ b/dist/sunbird-ui-components/datepicker/datepicker-i18n.d.ts @@ -0,0 +1,70 @@ +import { NgbDateStruct } from './ngb-date-struct'; +export declare function NGB_DATEPICKER_18N_FACTORY(locale: any): NgbDatepickerI18nDefault; +/** + * A service supplying i18n data to the datepicker component. + * + * The default implementation of this service uses the Angular locale and registered locale data for + * weekdays and month names (as explained in the Angular i18n guide). + * + * It also provides a way to i18n data that depends on calendar calculations, like aria labels, day, week and year + * numerals. For other static labels the datepicker uses the default Angular i18n. + * + * See the [i18n demo](#/components/datepicker/examples#i18n) and + * [Hebrew calendar demo](#/components/datepicker/calendars#hebrew) on how to extend this class and define + * a custom provider for i18n. + */ +export declare abstract class NgbDatepickerI18n { + /** + * Returns the short weekday name to display in the heading of the month view. + * + * With default calendar we use ISO 8601: 'weekday' is 1=Mon ... 7=Sun. + */ + abstract getWeekdayShortName(weekday: number): string; + /** + * Returns the short month name to display in the date picker navigation. + * + * With default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec. + */ + abstract getMonthShortName(month: number, year?: number): string; + /** + * Returns the full month name to display in the date picker navigation. + * + * With default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec. + */ + abstract getMonthFullName(month: number, year?: number): string; + /** + * Returns the value of the `aria-label` attribute for a specific date. + * + * @since 2.0.0 + */ + abstract getDayAriaLabel(date: NgbDateStruct): string; + /** + * Returns the textual representation of a day that is rendered in a day cell. + * + * @since 3.0.0 + */ + getDayNumerals(date: NgbDateStruct): string; + /** + * Returns the textual representation of a week number rendered by datepicker. + * + * @since 3.0.0 + */ + getWeekNumerals(weekNumber: number): string; + /** + * Returns the textual representation of a year that is rendered in the datepicker year select box. + * + * @since 3.0.0 + */ + getYearNumerals(year: number): string; +} +export declare class NgbDatepickerI18nDefault extends NgbDatepickerI18n { + private _locale; + private _weekdaysShort; + private _monthsShort; + private _monthsFull; + constructor(_locale: string); + getWeekdayShortName(weekday: number): string; + getMonthShortName(month: number): string; + getMonthFullName(month: number): string; + getDayAriaLabel(date: NgbDateStruct): string; +} diff --git a/dist/sunbird-ui-components/datepicker/datepicker-input.d.ts b/dist/sunbird-ui-components/datepicker/datepicker-input.d.ts new file mode 100644 index 0000000..4406949 --- /dev/null +++ b/dist/sunbird-ui-components/datepicker/datepicker-input.d.ts @@ -0,0 +1,242 @@ +import { ChangeDetectorRef, ComponentFactoryResolver, ElementRef, EventEmitter, NgZone, OnChanges, OnDestroy, Renderer2, SimpleChanges, TemplateRef, ViewContainerRef } from '@angular/core'; +import { AbstractControl, ControlValueAccessor, Validator } from '@angular/forms'; +import { PlacementArray } from '../util/positioning'; +import { NgbDateAdapter } from './adapters/ngb-date-adapter'; +import { NgbDatepickerNavigateEvent } from './datepicker'; +import { DayTemplateContext } from './datepicker-day-template-context'; +import { NgbDatepickerService } from './datepicker-service'; +import { NgbCalendar } from './ngb-calendar'; +import { NgbDate } from './ngb-date'; +import { NgbDateParserFormatter } from './ngb-date-parser-formatter'; +import { NgbDateStruct } from './ngb-date-struct'; +/** + * A directive that allows to stick a datepicker popup to an input field. + * + * Manages interaction with the input field itself, does value formatting and provides forms integration. + */ +export declare class NgbInputDatepicker implements OnChanges, OnDestroy, ControlValueAccessor, Validator { + private _parserFormatter; + private _elRef; + private _vcRef; + private _renderer; + private _cfr; + private _ngZone; + private _service; + private _calendar; + private _dateAdapter; + private _document; + private _changeDetector; + private _cRef; + private _disabled; + private _model; + private _inputValue; + private _zoneSubscription; + /** + * Indicates whether the datepicker popup should be closed automatically after date selection / outside click or not. + * + * * `true` - the popup will close on both date selection and outside click. + * * `false` - the popup can only be closed manually via `close()` or `toggle()` methods. + * * `"inside"` - the popup will close on date selection, but not outside clicks. + * * `"outside"` - the popup will close only on the outside click and not on date selection/inside clicks. + * + * @since 3.0.0 + */ + autoClose: boolean | 'inside' | 'outside'; + /** + * The reference to a custom template for the day. + * + * Allows to completely override the way a day 'cell' in the calendar is displayed. + * + * See [`DayTemplateContext`](#/components/datepicker/api#DayTemplateContext) for the data you get inside. + */ + dayTemplate: TemplateRef; + /** + * The callback to pass any arbitrary data to the template cell via the + * [`DayTemplateContext`](#/components/datepicker/api#DayTemplateContext)'s `data` parameter. + * + * `current` is the month that is currently displayed by the datepicker. + * + * @since 3.3.0 + */ + dayTemplateData: (date: NgbDate, current: { + year: number; + month: number; + }) => any; + /** + * The number of months to display. + */ + displayMonths: number; + /** + * The first day of the week. + * + * With default calendar we use ISO 8601: 'weekday' is 1=Mon ... 7=Sun. + */ + firstDayOfWeek: number; + /** + * The reference to the custom template for the datepicker footer. + * + * @since 3.3.0 + */ + footerTemplate: TemplateRef; + /** + * The callback to mark some dates as disabled. + * + * It is called for each new date when navigating to a different month. + * + * `current` is the month that is currently displayed by the datepicker. + */ + markDisabled: (date: NgbDate, current: { + year: number; + month: number; + }) => boolean; + /** + * The earliest date that can be displayed or selected. Also used for form validation. + * + * If not provided, 'year' select box will display 10 years before the current month. + */ + minDate: NgbDateStruct; + /** + * The latest date that can be displayed or selected. Also used for form validation. + * + * If not provided, 'year' select box will display 10 years after the current month. + */ + maxDate: NgbDateStruct; + /** + * Navigation type. + * + * * `"select"` - select boxes for month and navigation arrows + * * `"arrows"` - only navigation arrows + * * `"none"` - no navigation visible at all + */ + navigation: 'select' | 'arrows' | 'none'; + /** + * The way of displaying days that don't belong to the current month. + * + * * `"visible"` - days are visible + * * `"hidden"` - days are hidden, white space preserved + * * `"collapsed"` - days are collapsed, so the datepicker height might change between months + * + * For the 2+ months view, days in between months are never shown. + */ + outsideDays: 'visible' | 'collapsed' | 'hidden'; + /** + * The preferred placement of the datepicker popup. + * + * Possible values are `"top"`, `"top-left"`, `"top-right"`, `"bottom"`, `"bottom-left"`, + * `"bottom-right"`, `"left"`, `"left-top"`, `"left-bottom"`, `"right"`, `"right-top"`, + * `"right-bottom"` + * + * Accepts an array of strings or a string with space separated possible values. + * + * The default order of preference is `"bottom-left bottom-right top-left top-right"` + * + * Please see the [positioning overview](#/positioning) for more details. + */ + placement: PlacementArray; + /** + * If `true`, weekdays will be displayed. + */ + showWeekdays: boolean; + /** + * If `true`, week numbers will be displayed. + */ + showWeekNumbers: boolean; + /** + * The date to open calendar with. + * + * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec. + * If nothing or invalid date is provided, calendar will open with current month. + * + * You could use `navigateTo(date)` method as an alternative. + */ + startDate: { + year: number; + month: number; + day?: number; + }; + /** + * A selector specifying the element the datepicker popup should be appended to. + * + * Currently only supports `"body"`. + */ + container: string; + /** + * A css selector or html element specifying the element the datepicker popup should be positioned against. + * + * By default the input is used as a target. + * + * @since 4.2.0 + */ + positionTarget: string | HTMLElement; + /** + * An event emitted when user selects a date using keyboard or mouse. + * + * The payload of the event is currently selected `NgbDate`. + * + * @since 1.1.1 + */ + dateSelect: EventEmitter; + /** + * Event emitted right after the navigation happens and displayed month changes. + * + * See [`NgbDatepickerNavigateEvent`](#/components/datepicker/api#NgbDatepickerNavigateEvent) for the payload info. + */ + navigate: EventEmitter; + /** + * An event fired after closing datepicker window. + * + * @since 4.2.0 + */ + closed: EventEmitter; + disabled: any; + private _onChange; + private _onTouched; + private _validatorChange; + constructor(_parserFormatter: NgbDateParserFormatter, _elRef: ElementRef, _vcRef: ViewContainerRef, _renderer: Renderer2, _cfr: ComponentFactoryResolver, _ngZone: NgZone, _service: NgbDatepickerService, _calendar: NgbCalendar, _dateAdapter: NgbDateAdapter, _document: any, _changeDetector: ChangeDetectorRef); + registerOnChange(fn: (value: any) => any): void; + registerOnTouched(fn: () => any): void; + registerOnValidatorChange(fn: () => void): void; + setDisabledState(isDisabled: boolean): void; + validate(c: AbstractControl): { + [key: string]: any; + }; + writeValue(value: any): void; + manualDateChange(value: string, updateView?: boolean): void; + isOpen(): boolean; + /** + * Opens the datepicker popup. + * + * If the related form control contains a valid date, the corresponding month will be opened. + */ + open(): void; + /** + * Closes the datepicker popup. + */ + close(): void; + /** + * Toggles the datepicker popup. + */ + toggle(): void; + /** + * Navigates to the provided date. + * + * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec. + * If nothing or invalid date provided calendar will open current month. + * + * Use the `[startDate]` input as an alternative. + */ + navigateTo(date?: { + year: number; + month: number; + day?: number; + }): void; + onBlur(): void; + ngOnChanges(changes: SimpleChanges): void; + ngOnDestroy(): void; + private _applyDatepickerInputs; + private _applyPopupStyling; + private _subscribeForDatepickerOutputs; + private _writeModelValue; + private _fromDateStruct; + private _updatePopupPosition; +} diff --git a/dist/sunbird-ui-components/datepicker/datepicker-keymap-service.d.ts b/dist/sunbird-ui-components/datepicker/datepicker-keymap-service.d.ts new file mode 100644 index 0000000..dd52c60 --- /dev/null +++ b/dist/sunbird-ui-components/datepicker/datepicker-keymap-service.d.ts @@ -0,0 +1,12 @@ +import { NgbDatepickerService } from './datepicker-service'; +import { NgbCalendar } from './ngb-calendar'; +export declare class NgbDatepickerKeyMapService { + private _service; + private _calendar; + private _minDate; + private _maxDate; + private _firstViewDate; + private _lastViewDate; + constructor(_service: NgbDatepickerService, _calendar: NgbCalendar); + processKey(event: KeyboardEvent): void; +} diff --git a/dist/sunbird-ui-components/datepicker/datepicker-month-view.d.ts b/dist/sunbird-ui-components/datepicker/datepicker-month-view.d.ts new file mode 100644 index 0000000..65c5fea --- /dev/null +++ b/dist/sunbird-ui-components/datepicker/datepicker-month-view.d.ts @@ -0,0 +1,15 @@ +import { TemplateRef, EventEmitter } from '@angular/core'; +import { MonthViewModel, DayViewModel } from './datepicker-view-model'; +import { NgbDate } from './ngb-date'; +import { NgbDatepickerI18n } from './datepicker-i18n'; +import { DayTemplateContext } from './datepicker-day-template-context'; +export declare class NgbDatepickerMonthView { + i18n: NgbDatepickerI18n; + dayTemplate: TemplateRef; + month: MonthViewModel; + showWeekdays: any; + showWeekNumbers: any; + select: EventEmitter; + constructor(i18n: NgbDatepickerI18n); + doSelect(day: DayViewModel): void; +} diff --git a/dist/sunbird-ui-components/datepicker/datepicker-navigation-select.d.ts b/dist/sunbird-ui-components/datepicker/datepicker-navigation-select.d.ts new file mode 100644 index 0000000..62499e3 --- /dev/null +++ b/dist/sunbird-ui-components/datepicker/datepicker-navigation-select.d.ts @@ -0,0 +1,14 @@ +import { EventEmitter } from '@angular/core'; +import { NgbDate } from './ngb-date'; +import { NgbDatepickerI18n } from './datepicker-i18n'; +export declare class NgbDatepickerNavigationSelect { + i18n: NgbDatepickerI18n; + date: NgbDate; + disabled: boolean; + months: number[]; + years: number[]; + select: EventEmitter; + constructor(i18n: NgbDatepickerI18n); + changeMonth(month: string): void; + changeYear(year: string): void; +} diff --git a/dist/sunbird-ui-components/datepicker/datepicker-navigation.d.ts b/dist/sunbird-ui-components/datepicker/datepicker-navigation.d.ts new file mode 100644 index 0000000..85e6760 --- /dev/null +++ b/dist/sunbird-ui-components/datepicker/datepicker-navigation.d.ts @@ -0,0 +1,21 @@ +import { EventEmitter } from '@angular/core'; +import { NavigationEvent, MonthViewModel } from './datepicker-view-model'; +import { NgbDate } from './ngb-date'; +import { NgbDatepickerI18n } from './datepicker-i18n'; +export declare class NgbDatepickerNavigation { + i18n: NgbDatepickerI18n; + navigation: typeof NavigationEvent; + date: NgbDate; + disabled: boolean; + months: MonthViewModel[]; + showSelect: boolean; + prevDisabled: boolean; + nextDisabled: boolean; + selectBoxes: { + years: number[]; + months: number[]; + }; + navigate: EventEmitter; + select: EventEmitter; + constructor(i18n: NgbDatepickerI18n); +} diff --git a/dist/sunbird-ui-components/datepicker/datepicker-service.d.ts b/dist/sunbird-ui-components/datepicker/datepicker-service.d.ts new file mode 100644 index 0000000..74921de --- /dev/null +++ b/dist/sunbird-ui-components/datepicker/datepicker-service.d.ts @@ -0,0 +1,37 @@ +import { NgbCalendar, NgbPeriod } from './ngb-calendar'; +import { NgbDate } from './ngb-date'; +import { NgbDateStruct } from './ngb-date-struct'; +import { DatepickerViewModel, NgbDayTemplateData, NgbMarkDisabled } from './datepicker-view-model'; +import { Observable } from 'rxjs'; +import { NgbDatepickerI18n } from './datepicker-i18n'; +export declare class NgbDatepickerService { + private _calendar; + private _i18n; + private _model$; + private _select$; + private _state; + readonly model$: Observable; + readonly select$: Observable; + dayTemplateData: NgbDayTemplateData; + disabled: boolean; + displayMonths: number; + firstDayOfWeek: number; + focusVisible: boolean; + maxDate: NgbDate; + markDisabled: NgbMarkDisabled; + minDate: NgbDate; + navigation: 'select' | 'arrows' | 'none'; + outsideDays: 'visible' | 'collapsed' | 'hidden'; + constructor(_calendar: NgbCalendar, _i18n: NgbDatepickerI18n); + focus(date: NgbDate): void; + focusMove(period?: NgbPeriod, number?: number): void; + focusSelect(): void; + open(date: NgbDate): void; + select(date: NgbDate, options?: { + emitEvent?: boolean; + }): void; + toValidDate(date: NgbDateStruct, defaultValue?: NgbDate): NgbDate; + private _nextState; + private _patchContexts; + private _updateState; +} diff --git a/dist/sunbird-ui-components/datepicker/datepicker-tools.d.ts b/dist/sunbird-ui-components/datepicker/datepicker-tools.d.ts new file mode 100644 index 0000000..bd62182 --- /dev/null +++ b/dist/sunbird-ui-components/datepicker/datepicker-tools.d.ts @@ -0,0 +1,17 @@ +import { NgbDate } from './ngb-date'; +import { DatepickerViewModel, MonthViewModel } from './datepicker-view-model'; +import { NgbCalendar } from './ngb-calendar'; +import { NgbDatepickerI18n } from './datepicker-i18n'; +export declare function isChangedDate(prev: NgbDate, next: NgbDate): boolean; +export declare function isChangedMonth(prev: NgbDate, next: NgbDate): boolean; +export declare function dateComparator(prev: NgbDate, next: NgbDate): boolean; +export declare function checkMinBeforeMax(minDate: NgbDate, maxDate: NgbDate): void; +export declare function checkDateInRange(date: NgbDate, minDate: NgbDate, maxDate: NgbDate): NgbDate; +export declare function isDateSelectable(date: NgbDate, state: DatepickerViewModel): boolean; +export declare function generateSelectBoxMonths(calendar: NgbCalendar, date: NgbDate, minDate: NgbDate, maxDate: NgbDate): number[]; +export declare function generateSelectBoxYears(date: NgbDate, minDate: NgbDate, maxDate: NgbDate): number[]; +export declare function nextMonthDisabled(calendar: NgbCalendar, date: NgbDate, maxDate: NgbDate): boolean; +export declare function prevMonthDisabled(calendar: NgbCalendar, date: NgbDate, minDate: NgbDate): boolean; +export declare function buildMonths(calendar: NgbCalendar, date: NgbDate, state: DatepickerViewModel, i18n: NgbDatepickerI18n, force: boolean): MonthViewModel[]; +export declare function buildMonth(calendar: NgbCalendar, date: NgbDate, state: DatepickerViewModel, i18n: NgbDatepickerI18n, month?: MonthViewModel): MonthViewModel; +export declare function getFirstViewDate(calendar: NgbCalendar, date: NgbDate, firstDayOfWeek: number): NgbDate; diff --git a/dist/sunbird-ui-components/datepicker/datepicker-view-model.d.ts b/dist/sunbird-ui-components/datepicker/datepicker-view-model.d.ts new file mode 100644 index 0000000..4dc5833 --- /dev/null +++ b/dist/sunbird-ui-components/datepicker/datepicker-view-model.d.ts @@ -0,0 +1,58 @@ +import { NgbDate } from './ngb-date'; +import { NgbDateStruct } from './ngb-date-struct'; +import { DayTemplateContext } from './datepicker-day-template-context'; +export declare type NgbMarkDisabled = (date: NgbDateStruct, current: { + year: number; + month: number; +}) => boolean; +export declare type NgbDayTemplateData = (date: NgbDateStruct, current: { + year: number; + month: number; +}) => any; +export declare type DayViewModel = { + date: NgbDate; + context: DayTemplateContext; + tabindex: number; + ariaLabel: string; + hidden: boolean; +}; +export declare type WeekViewModel = { + number: number; + days: DayViewModel[]; + collapsed: boolean; +}; +export declare type MonthViewModel = { + firstDate: NgbDate; + lastDate: NgbDate; + number: number; + year: number; + weeks: WeekViewModel[]; + weekdays: number[]; +}; +export declare type DatepickerViewModel = { + dayTemplateData?: NgbDayTemplateData; + disabled: boolean; + displayMonths: number; + firstDate?: NgbDate; + firstDayOfWeek: number; + focusDate?: NgbDate; + focusVisible: boolean; + lastDate?: NgbDate; + markDisabled?: NgbMarkDisabled; + maxDate?: NgbDate; + minDate?: NgbDate; + months: MonthViewModel[]; + navigation: 'select' | 'arrows' | 'none'; + outsideDays: 'visible' | 'collapsed' | 'hidden'; + prevDisabled: boolean; + nextDisabled: boolean; + selectBoxes: { + years: number[]; + months: number[]; + }; + selectedDate: NgbDate; +}; +export declare enum NavigationEvent { + PREV = 0, + NEXT = 1 +} diff --git a/dist/sunbird-ui-components/datepicker/datepicker.d.ts b/dist/sunbird-ui-components/datepicker/datepicker.d.ts new file mode 100644 index 0000000..32b70f8 --- /dev/null +++ b/dist/sunbird-ui-components/datepicker/datepicker.d.ts @@ -0,0 +1,195 @@ +import { AfterViewInit, ChangeDetectorRef, ElementRef, EventEmitter, NgZone, OnChanges, OnDestroy, OnInit, SimpleChanges, TemplateRef } from '@angular/core'; +import { ControlValueAccessor } from '@angular/forms'; +import { NgbCalendar } from './ngb-calendar'; +import { NgbDate } from './ngb-date'; +import { NgbDatepickerService } from './datepicker-service'; +import { NgbDatepickerKeyMapService } from './datepicker-keymap-service'; +import { DatepickerViewModel, NavigationEvent } from './datepicker-view-model'; +import { DayTemplateContext } from './datepicker-day-template-context'; +import { NgbDatepickerConfig } from './datepicker-config'; +import { NgbDateAdapter } from './adapters/ngb-date-adapter'; +import { NgbDateStruct } from './ngb-date-struct'; +import { NgbDatepickerI18n } from './datepicker-i18n'; +/** + * An event emitted right before the navigation happens and the month displayed by the datepicker changes. + */ +export interface NgbDatepickerNavigateEvent { + /** + * The currently displayed month. + */ + current: { + year: number; + month: number; + }; + /** + * The month we're navigating to. + */ + next: { + year: number; + month: number; + }; + /** + * Calling this function will prevent navigation from happening. + * + * @since 4.1.0 + */ + preventDefault: () => void; +} +/** + * A highly configurable component that helps you with selecting calendar dates. + * + * `NgbDatepicker` is meant to be displayed inline on a page or put inside a popup. + */ +export declare class NgbDatepicker implements OnDestroy, OnChanges, OnInit, AfterViewInit, ControlValueAccessor { + private _keyMapService; + _service: NgbDatepickerService; + private _calendar; + i18n: NgbDatepickerI18n; + private _cd; + private _elementRef; + private _ngbDateAdapter; + private _ngZone; + model: DatepickerViewModel; + private _monthsEl; + private _controlValue; + private _destroyed$; + /** + * The reference to a custom template for the day. + * + * Allows to completely override the way a day 'cell' in the calendar is displayed. + * + * See [`DayTemplateContext`](#/components/datepicker/api#DayTemplateContext) for the data you get inside. + */ + dayTemplate: TemplateRef; + /** + * The callback to pass any arbitrary data to the template cell via the + * [`DayTemplateContext`](#/components/datepicker/api#DayTemplateContext)'s `data` parameter. + * + * `current` is the month that is currently displayed by the datepicker. + * + * @since 3.3.0 + */ + dayTemplateData: (date: NgbDate, current: { + year: number; + month: number; + }) => any; + /** + * The number of months to display. + */ + displayMonths: number; + /** + * The first day of the week. + * + * With default calendar we use ISO 8601: 'weekday' is 1=Mon ... 7=Sun. + */ + firstDayOfWeek: number; + /** + * The reference to the custom template for the datepicker footer. + * + * @since 3.3.0 + */ + footerTemplate: TemplateRef; + /** + * The callback to mark some dates as disabled. + * + * It is called for each new date when navigating to a different month. + * + * `current` is the month that is currently displayed by the datepicker. + */ + markDisabled: (date: NgbDate, current: { + year: number; + month: number; + }) => boolean; + /** + * The latest date that can be displayed or selected. + * + * If not provided, 'year' select box will display 10 years after the current month. + */ + maxDate: NgbDateStruct; + /** + * The earliest date that can be displayed or selected. + * + * If not provided, 'year' select box will display 10 years before the current month. + */ + minDate: NgbDateStruct; + /** + * Navigation type. + * + * * `"select"` - select boxes for month and navigation arrows + * * `"arrows"` - only navigation arrows + * * `"none"` - no navigation visible at all + */ + navigation: 'select' | 'arrows' | 'none'; + /** + * The way of displaying days that don't belong to the current month. + * + * * `"visible"` - days are visible + * * `"hidden"` - days are hidden, white space preserved + * * `"collapsed"` - days are collapsed, so the datepicker height might change between months + * + * For the 2+ months view, days in between months are never shown. + */ + outsideDays: 'visible' | 'collapsed' | 'hidden'; + /** + * If `true`, weekdays will be displayed. + */ + showWeekdays: boolean; + /** + * If `true`, week numbers will be displayed. + */ + showWeekNumbers: boolean; + /** + * The date to open calendar with. + * + * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec. + * If nothing or invalid date is provided, calendar will open with current month. + * + * You could use `navigateTo(date)` method as an alternative. + */ + startDate: { + year: number; + month: number; + day?: number; + }; + /** + * An event emitted right before the navigation happens and displayed month changes. + * + * See [`NgbDatepickerNavigateEvent`](#/components/datepicker/api#NgbDatepickerNavigateEvent) for the payload info. + */ + navigate: EventEmitter; + /** + * An event emitted when user selects a date using keyboard or mouse. + * + * The payload of the event is currently selected `NgbDate`. + */ + select: EventEmitter; + onChange: (_: any) => void; + onTouched: () => void; + constructor(_keyMapService: NgbDatepickerKeyMapService, _service: NgbDatepickerService, _calendar: NgbCalendar, i18n: NgbDatepickerI18n, config: NgbDatepickerConfig, _cd: ChangeDetectorRef, _elementRef: ElementRef, _ngbDateAdapter: NgbDateAdapter, _ngZone: NgZone); + focus(): void; + /** + * Navigates to the provided date. + * + * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec. + * If nothing or invalid date provided calendar will open current month. + * + * Use the `[startDate]` input as an alternative. + */ + navigateTo(date?: { + year: number; + month: number; + day?: number; + }): void; + ngAfterViewInit(): void; + ngOnDestroy(): void; + ngOnInit(): void; + ngOnChanges(changes: SimpleChanges): void; + onDateSelect(date: NgbDate): void; + onKeyDown(event: KeyboardEvent): void; + onNavigateDateSelect(date: NgbDate): void; + onNavigateEvent(event: NavigationEvent): void; + registerOnChange(fn: (value: any) => any): void; + registerOnTouched(fn: () => any): void; + setDisabledState(isDisabled: boolean): void; + writeValue(value: any): void; +} diff --git a/dist/sunbird-ui-components/datepicker/datepicker.module.d.ts b/dist/sunbird-ui-components/datepicker/datepicker.module.d.ts new file mode 100644 index 0000000..15f0582 --- /dev/null +++ b/dist/sunbird-ui-components/datepicker/datepicker.module.d.ts @@ -0,0 +1,22 @@ +export { NgbDatepicker, NgbDatepickerNavigateEvent } from './datepicker'; +export { NgbInputDatepicker } from './datepicker-input'; +export { NgbCalendar, NgbPeriod, NgbCalendarGregorian } from './ngb-calendar'; +export { NgbCalendarIslamicCivil } from './hijri/ngb-calendar-islamic-civil'; +export { NgbCalendarIslamicUmalqura } from './hijri/ngb-calendar-islamic-umalqura'; +export { NgbCalendarPersian } from './jalali/ngb-calendar-persian'; +export { NgbCalendarHebrew } from './hebrew/ngb-calendar-hebrew'; +export { NgbDatepickerI18nHebrew } from './hebrew/datepicker-i18n-hebrew'; +export { NgbDatepickerMonthView } from './datepicker-month-view'; +export { NgbDatepickerDayView } from './datepicker-day-view'; +export { NgbDatepickerNavigation } from './datepicker-navigation'; +export { NgbDatepickerNavigationSelect } from './datepicker-navigation-select'; +export { NgbDatepickerConfig } from './datepicker-config'; +export { NgbDatepickerI18n } from './datepicker-i18n'; +export { NgbDateStruct } from './ngb-date-struct'; +export { NgbDate } from './ngb-date'; +export { NgbDateAdapter } from './adapters/ngb-date-adapter'; +export { NgbDateNativeAdapter } from './adapters/ngb-date-native-adapter'; +export { NgbDateNativeUTCAdapter } from './adapters/ngb-date-native-utc-adapter'; +export { NgbDateParserFormatter } from './ngb-date-parser-formatter'; +export declare class NgbDatepickerModule { +} diff --git a/dist/sunbird-ui-components/datepicker/hebrew/datepicker-i18n-hebrew.d.ts b/dist/sunbird-ui-components/datepicker/hebrew/datepicker-i18n-hebrew.d.ts new file mode 100644 index 0000000..94d9e66 --- /dev/null +++ b/dist/sunbird-ui-components/datepicker/hebrew/datepicker-i18n-hebrew.d.ts @@ -0,0 +1,14 @@ +import { NgbDatepickerI18n } from '../datepicker-i18n'; +import { NgbDateStruct } from '../../index'; +/** + * @since 3.2.0 + */ +export declare class NgbDatepickerI18nHebrew extends NgbDatepickerI18n { + getMonthShortName(month: number, year?: number): string; + getMonthFullName(month: number, year?: number): string; + getWeekdayShortName(weekday: number): string; + getDayAriaLabel(date: NgbDateStruct): string; + getDayNumerals(date: NgbDateStruct): string; + getWeekNumerals(weekNumber: number): string; + getYearNumerals(year: number): string; +} diff --git a/dist/sunbird-ui-components/datepicker/hebrew/hebrew.d.ts b/dist/sunbird-ui-components/datepicker/hebrew/hebrew.d.ts new file mode 100644 index 0000000..6d15a24 --- /dev/null +++ b/dist/sunbird-ui-components/datepicker/hebrew/hebrew.d.ts @@ -0,0 +1,23 @@ +import { NgbDate } from '../ngb-date'; +import { NgbDateStruct } from '../ngb-date-struct'; +export declare function isHebrewLeapYear(year: number): boolean; +/** + * Returns the number of days in a specific Hebrew month. + * `month` is 1 for Nisan, 2 for Iyar etc. Note: Hebrew leap year contains 13 months. + * `year` is any Hebrew year. + */ +export declare function getDaysInHebrewMonth(month: number, year: number): number; +export declare function getDayNumberInHebrewYear(date: NgbDate): number; +export declare function setHebrewMonth(date: NgbDate, val: number): NgbDate; +export declare function setHebrewDay(date: NgbDate, val: number): NgbDate; +/** + * Returns the equivalent Hebrew date value for a give input Gregorian date. + * `gdate` is a JS Date to be converted to Hebrew date. + */ +export declare function fromGregorian(gdate: Date): NgbDate; +/** + * Returns the equivalent JS date value for a given Hebrew date. + * `hebrewDate` is an Hebrew date to be converted to Gregorian. + */ +export declare function toGregorian(hebrewDate: NgbDateStruct | NgbDate): Date; +export declare function hebrewNumerals(numerals: number): string; diff --git a/dist/sunbird-ui-components/datepicker/hebrew/ngb-calendar-hebrew.d.ts b/dist/sunbird-ui-components/datepicker/hebrew/ngb-calendar-hebrew.d.ts new file mode 100644 index 0000000..dfaff38 --- /dev/null +++ b/dist/sunbird-ui-components/datepicker/hebrew/ngb-calendar-hebrew.d.ts @@ -0,0 +1,24 @@ +import { NgbDate } from '../ngb-date'; +import { NgbCalendar, NgbPeriod } from '../ngb-calendar'; +/** + * @since 3.2.0 + */ +export declare class NgbCalendarHebrew extends NgbCalendar { + getDaysPerWeek(): number; + getMonths(year?: number): number[]; + getWeeksPerMonth(): number; + isValid(date: NgbDate): boolean; + getNext(date: NgbDate, period?: NgbPeriod, number?: number): NgbDate; + getPrev(date: NgbDate, period?: NgbPeriod, number?: number): NgbDate; + getWeekday(date: NgbDate): number; + getWeekNumber(week: NgbDate[], firstDayOfWeek: number): number; + getToday(): NgbDate; + /** + * @since 3.4.0 + */ + toGregorian(date: NgbDate): NgbDate; + /** + * @since 3.4.0 + */ + fromGregorian(date: NgbDate): NgbDate; +} diff --git a/dist/sunbird-ui-components/datepicker/hijri/ngb-calendar-hijri.d.ts b/dist/sunbird-ui-components/datepicker/hijri/ngb-calendar-hijri.d.ts new file mode 100644 index 0000000..ca424ce --- /dev/null +++ b/dist/sunbird-ui-components/datepicker/hijri/ngb-calendar-hijri.d.ts @@ -0,0 +1,31 @@ +import { NgbDate } from '../ngb-date'; +import { NgbPeriod, NgbCalendar } from '../ngb-calendar'; +export declare abstract class NgbCalendarHijri extends NgbCalendar { + /** + * Returns the number of days in a specific Hijri month. + * `month` is 1 for Muharram, 2 for Safar, etc. + * `year` is any Hijri year. + */ + abstract getDaysPerMonth(month: number, year: number): number; + /** + * Returns the equivalent Hijri date value for a give input Gregorian date. + * `gDate` is s JS Date to be converted to Hijri. + */ + abstract fromGregorian(gDate: Date): NgbDate; + /** + * Converts the current Hijri date to Gregorian. + */ + abstract toGregorian(hDate: NgbDate): Date; + getDaysPerWeek(): number; + getMonths(): number[]; + getWeeksPerMonth(): number; + getNext(date: NgbDate, period?: NgbPeriod, number?: number): NgbDate; + getPrev(date: NgbDate, period?: NgbPeriod, number?: number): NgbDate; + getWeekday(date: NgbDate): number; + getWeekNumber(week: NgbDate[], firstDayOfWeek: number): number; + getToday(): NgbDate; + isValid(date: NgbDate): boolean; + private _setDay; + private _setMonth; + private _setYear; +} diff --git a/dist/sunbird-ui-components/datepicker/hijri/ngb-calendar-islamic-civil.d.ts b/dist/sunbird-ui-components/datepicker/hijri/ngb-calendar-islamic-civil.d.ts new file mode 100644 index 0000000..fd54da8 --- /dev/null +++ b/dist/sunbird-ui-components/datepicker/hijri/ngb-calendar-islamic-civil.d.ts @@ -0,0 +1,20 @@ +import { NgbCalendarHijri } from './ngb-calendar-hijri'; +import { NgbDate } from '../ngb-date'; +export declare class NgbCalendarIslamicCivil extends NgbCalendarHijri { + /** + * Returns the equivalent islamic(civil) date value for a give input Gregorian date. + * `gDate` is a JS Date to be converted to Hijri. + */ + fromGregorian(gDate: Date): NgbDate; + /** + * Returns the equivalent JS date value for a give input islamic(civil) date. + * `hDate` is an islamic(civil) date to be converted to Gregorian. + */ + toGregorian(hDate: NgbDate): Date; + /** + * Returns the number of days in a specific Hijri month. + * `month` is 1 for Muharram, 2 for Safar, etc. + * `year` is any Hijri year. + */ + getDaysPerMonth(month: number, year: number): number; +} diff --git a/dist/sunbird-ui-components/datepicker/hijri/ngb-calendar-islamic-umalqura.d.ts b/dist/sunbird-ui-components/datepicker/hijri/ngb-calendar-islamic-umalqura.d.ts new file mode 100644 index 0000000..77d29bf --- /dev/null +++ b/dist/sunbird-ui-components/datepicker/hijri/ngb-calendar-islamic-umalqura.d.ts @@ -0,0 +1,19 @@ +import { NgbCalendarIslamicCivil } from './ngb-calendar-islamic-civil'; +import { NgbDate } from '../ngb-date'; +export declare class NgbCalendarIslamicUmalqura extends NgbCalendarIslamicCivil { + /** + * Returns the equivalent islamic(Umalqura) date value for a give input Gregorian date. + * `gdate` is s JS Date to be converted to Hijri. + */ + fromGregorian(gDate: Date): NgbDate; + /** + * Converts the current Hijri date to Gregorian. + */ + toGregorian(hDate: NgbDate): Date; + /** + * Returns the number of days in a specific Hijri hMonth. + * `hMonth` is 1 for Muharram, 2 for Safar, etc. + * `hYear` is any Hijri hYear. + */ + getDaysPerMonth(hMonth: number, hYear: number): number; +} diff --git a/dist/sunbird-ui-components/datepicker/jalali/jalali.d.ts b/dist/sunbird-ui-components/datepicker/jalali/jalali.d.ts new file mode 100644 index 0000000..65e9146 --- /dev/null +++ b/dist/sunbird-ui-components/datepicker/jalali/jalali.d.ts @@ -0,0 +1,15 @@ +import { NgbDate } from '../ngb-date'; +/** + * Returns the equivalent JS date value for a give input Jalali date. + * `jalaliDate` is an Jalali date to be converted to Gregorian. + */ +export declare function toGregorian(jalaliDate: NgbDate): Date; +/** + * Returns the equivalent jalali date value for a give input Gregorian date. + * `gdate` is a JS Date to be converted to jalali. + * utc to local + */ +export declare function fromGregorian(gdate: Date): NgbDate; +export declare function setJalaliYear(date: NgbDate, yearValue: number): NgbDate; +export declare function setJalaliMonth(date: NgbDate, month: number): NgbDate; +export declare function setJalaliDay(date: NgbDate, day: number): NgbDate; diff --git a/dist/sunbird-ui-components/datepicker/jalali/ngb-calendar-persian.d.ts b/dist/sunbird-ui-components/datepicker/jalali/ngb-calendar-persian.d.ts new file mode 100644 index 0000000..8f2af12 --- /dev/null +++ b/dist/sunbird-ui-components/datepicker/jalali/ngb-calendar-persian.d.ts @@ -0,0 +1,13 @@ +import { NgbDate } from '../ngb-date'; +import { NgbCalendar, NgbPeriod } from '../ngb-calendar'; +export declare class NgbCalendarPersian extends NgbCalendar { + getDaysPerWeek(): number; + getMonths(): number[]; + getWeeksPerMonth(): number; + getNext(date: NgbDate, period?: NgbPeriod, number?: number): NgbDate; + getPrev(date: NgbDate, period?: NgbPeriod, number?: number): NgbDate; + getWeekday(date: NgbDate): number; + getWeekNumber(week: NgbDate[], firstDayOfWeek: number): number; + getToday(): NgbDate; + isValid(date: NgbDate): boolean; +} diff --git a/dist/sunbird-ui-components/datepicker/ngb-calendar.d.ts b/dist/sunbird-ui-components/datepicker/ngb-calendar.d.ts new file mode 100644 index 0000000..c61b330 --- /dev/null +++ b/dist/sunbird-ui-components/datepicker/ngb-calendar.d.ts @@ -0,0 +1,74 @@ +import { NgbDate } from './ngb-date'; +export declare function fromJSDate(jsDate: Date): NgbDate; +export declare function toJSDate(date: NgbDate): Date; +export declare type NgbPeriod = 'y' | 'm' | 'd'; +export declare function NGB_DATEPICKER_CALENDAR_FACTORY(): NgbCalendarGregorian; +/** + * A service that represents the calendar used by the datepicker. + * + * The default implementation uses the Gregorian calendar. You can inject it in your own + * implementations if necessary to simplify `NgbDate` calculations. + */ +export declare abstract class NgbCalendar { + /** + * Returns the number of days per week. + */ + abstract getDaysPerWeek(): number; + /** + * Returns an array of months per year. + * + * With default calendar we use ISO 8601 and return [1, 2, ..., 12]; + */ + abstract getMonths(year?: number): number[]; + /** + * Returns the number of weeks per month. + */ + abstract getWeeksPerMonth(): number; + /** + * Returns the weekday number for a given day. + * + * With the default calendar we use ISO 8601: 'weekday' is 1=Mon ... 7=Sun + */ + abstract getWeekday(date: NgbDate): number; + /** + * Adds a number of years, months or days to a given date. + * + * * `period` can be `y`, `m` or `d` and defaults to day. + * * `number` defaults to 1. + * + * Always returns a new date. + */ + abstract getNext(date: NgbDate, period?: NgbPeriod, number?: number): NgbDate; + /** + * Subtracts a number of years, months or days from a given date. + * + * * `period` can be `y`, `m` or `d` and defaults to day. + * * `number` defaults to 1. + * + * Always returns a new date. + */ + abstract getPrev(date: NgbDate, period?: NgbPeriod, number?: number): NgbDate; + /** + * Returns the week number for a given week. + */ + abstract getWeekNumber(week: NgbDate[], firstDayOfWeek: number): number; + /** + * Returns the today's date. + */ + abstract getToday(): NgbDate; + /** + * Checks if a date is valid in the current calendar. + */ + abstract isValid(date: NgbDate): boolean; +} +export declare class NgbCalendarGregorian extends NgbCalendar { + getDaysPerWeek(): number; + getMonths(): number[]; + getWeeksPerMonth(): number; + getNext(date: NgbDate, period?: NgbPeriod, number?: number): NgbDate; + getPrev(date: NgbDate, period?: NgbPeriod, number?: number): NgbDate; + getWeekday(date: NgbDate): number; + getWeekNumber(week: NgbDate[], firstDayOfWeek: number): number; + getToday(): NgbDate; + isValid(date: NgbDate): boolean; +} diff --git a/dist/sunbird-ui-components/datepicker/ngb-date-parser-formatter.d.ts b/dist/sunbird-ui-components/datepicker/ngb-date-parser-formatter.d.ts new file mode 100644 index 0000000..7a89325 --- /dev/null +++ b/dist/sunbird-ui-components/datepicker/ngb-date-parser-formatter.d.ts @@ -0,0 +1,37 @@ +import { NgbDateStruct } from './ngb-date-struct'; +export declare function NGB_DATEPICKER_PARSER_FORMATTER_FACTORY(): NgbDateISOParserFormatter; +/** + * An abstract service for parsing and formatting dates for the + * [`NgbInputDatepicker`](#/components/datepicker/api#NgbInputDatepicker) directive. + * Converts between the internal `NgbDateStruct` model presentation and a `string` that is displayed in the + * input element. + * + * When user types something in the input this service attempts to parse it into a `NgbDateStruct` object. + * And vice versa, when users selects a date in the calendar with the mouse, it must be displayed as a `string` + * in the input. + * + * Default implementation uses the ISO 8601 format, but you can provide another implementation via DI + * to use an alternative string format or a custom parsing logic. + * + * See the [date format overview](#/components/datepicker/overview#date-model) for more details. + */ +export declare abstract class NgbDateParserFormatter { + /** + * Parses the given `string` to an `NgbDateStruct`. + * + * Implementations should try their best to provide a result, even + * partial. They must return `null` if the value can't be parsed. + */ + abstract parse(value: string): NgbDateStruct; + /** + * Formats the given `NgbDateStruct` to a `string`. + * + * Implementations should return an empty string if the given date is `null`, + * and try their best to provide a partial result if the given date is incomplete or invalid. + */ + abstract format(date: NgbDateStruct): string; +} +export declare class NgbDateISOParserFormatter extends NgbDateParserFormatter { + parse(value: string): NgbDateStruct; + format(date: NgbDateStruct): string; +} diff --git a/dist/sunbird-ui-components/datepicker/ngb-date-struct.d.ts b/dist/sunbird-ui-components/datepicker/ngb-date-struct.d.ts new file mode 100644 index 0000000..2daed55 --- /dev/null +++ b/dist/sunbird-ui-components/datepicker/ngb-date-struct.d.ts @@ -0,0 +1,21 @@ +/** + * An interface of the date model used by the datepicker. + * + * All datepicker APIs consume `NgbDateStruct`, but return `NgbDate`. + * + * See the [date format overview](#/components/datepicker/overview#date-model) for more details. + */ +export interface NgbDateStruct { + /** + * The year, for example 2016 + */ + year: number; + /** + * The month, for example 1=Jan ... 12=Dec + */ + month: number; + /** + * The day of month, starting at 1 + */ + day: number; +} diff --git a/dist/sunbird-ui-components/datepicker/ngb-date.d.ts b/dist/sunbird-ui-components/datepicker/ngb-date.d.ts new file mode 100644 index 0000000..6fe9c4d --- /dev/null +++ b/dist/sunbird-ui-components/datepicker/ngb-date.d.ts @@ -0,0 +1,51 @@ +import { NgbDateStruct } from './ngb-date-struct'; +/** + * A simple class that represents a date that datepicker also uses internally. + * + * It is the implementation of the `NgbDateStruct` interface that adds some convenience methods, + * like `.equals()`, `.before()`, etc. + * + * All datepicker APIs consume `NgbDateStruct`, but return `NgbDate`. + * + * In many cases it is simpler to manipulate these objects together with + * [`NgbCalendar`](#/components/datepicker/api#NgbCalendar) than native JS Dates. + * + * See the [date format overview](#/components/datepicker/overview#date-model) for more details. + * + * @since 3.0.0 + */ +export declare class NgbDate implements NgbDateStruct { + /** + * The year, for example 2016 + */ + year: number; + /** + * The month, for example 1=Jan ... 12=Dec as in ISO 8601 + */ + month: number; + /** + * The day of month, starting with 1 + */ + day: number; + /** + * A **static method** that creates a new date object from the `NgbDateStruct`, + * + * ex. `NgbDate.from({year: 2000, month: 5, day: 1})`. + * + * If the `date` is already of `NgbDate` type, the method will return the same object. + */ + static from(date: NgbDateStruct): NgbDate; + constructor(year: number, month: number, day: number); + /** + * Checks if the current date is equal to another date. + */ + equals(other: NgbDateStruct): boolean; + /** + * Checks if the current date is before another date. + */ + before(other: NgbDateStruct): boolean; + /** + * Checks if the current date is after another date. + */ + after(other: NgbDateStruct): boolean; +} diff --git a/dist/sunbird-ui-components/dropdown/dropdown-config.d.ts b/dist/sunbird-ui-components/dropdown/dropdown-config.d.ts new file mode 100644 index 0000000..58ed7c7 --- /dev/null +++ b/dist/sunbird-ui-components/dropdown/dropdown-config.d.ts @@ -0,0 +1,12 @@ +import { PlacementArray } from '../util/positioning'; +/** + * A configuration service for the [`NgbDropdown`](#/components/dropdown/api#NgbDropdown) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the dropdowns used in the application. + */ +export declare class NgbDropdownConfig { + autoClose: boolean | 'outside' | 'inside'; + placement: PlacementArray; + container: null | 'body'; +} diff --git a/dist/sunbird-ui-components/dropdown/dropdown.d.ts b/dist/sunbird-ui-components/dropdown/dropdown.d.ts new file mode 100644 index 0000000..d1ff4e8 --- /dev/null +++ b/dist/sunbird-ui-components/dropdown/dropdown.d.ts @@ -0,0 +1,148 @@ +import { ChangeDetectorRef, ElementRef, EventEmitter, NgZone, AfterContentInit, OnDestroy, QueryList, Renderer2, SimpleChanges } from '@angular/core'; +import { Placement, PlacementArray } from '../util/positioning'; +import { NgbDropdownConfig } from './dropdown-config'; +export declare class NgbNavbar { +} +/** + * A directive you should put put on a dropdown item to enable keyboard navigation. + * Arrow keys will move focus between items marked with this directive. + * + * @since 4.1.0 + */ +export declare class NgbDropdownItem { + elementRef: ElementRef; + private _disabled; + disabled: boolean; + constructor(elementRef: ElementRef); +} +/** + * A directive that wraps dropdown menu content and dropdown items. + */ +export declare class NgbDropdownMenu { + dropdown: any; + placement: Placement; + isOpen: boolean; + menuItems: QueryList; + constructor(dropdown: any); +} +/** + * A directive to mark an element to which dropdown menu will be anchored. + * + * This is a simple version of the `NgbDropdownToggle` directive. + * It plays the same role, but doesn't listen to click events to toggle dropdown menu thus enabling support + * for events other than click. + * + * @since 1.1.0 + */ +export declare class NgbDropdownAnchor { + dropdown: any; + private _elementRef; + anchorEl: any; + constructor(dropdown: any, _elementRef: ElementRef); + getNativeElement(): HTMLElement; +} +/** + * A directive to mark an element that will toggle dropdown via the `click` event. + * + * You can also use `NgbDropdownAnchor` as an alternative. + */ +export declare class NgbDropdownToggle extends NgbDropdownAnchor { + constructor(dropdown: any, elementRef: ElementRef); +} +/** + * A directive that provides contextual overlays for displaying lists of links and more. + */ +export declare class NgbDropdown implements AfterContentInit, OnDestroy { + private _changeDetector; + private _document; + private _ngZone; + private _elementRef; + private _renderer; + private _closed$; + private _zoneSubscription; + private _bodyContainer; + private _menu; + private _menuElement; + private _anchor; + /** + * Indicates whether the dropdown should be closed when clicking one of dropdown items or pressing ESC. + * + * * `true` - the dropdown will close on both outside and inside (menu) clicks. + * * `false` - the dropdown can only be closed manually via `close()` or `toggle()` methods. + * * `"inside"` - the dropdown will close on inside menu clicks, but not outside clicks. + * * `"outside"` - the dropdown will close only on the outside clicks and not on menu clicks. + */ + autoClose: boolean | 'outside' | 'inside'; + /** + * Defines whether or not the dropdown menu is opened initially. + */ + _open: boolean; + /** + * The preferred placement of the dropdown. + * + * Possible values are `"top"`, `"top-left"`, `"top-right"`, `"bottom"`, `"bottom-left"`, + * `"bottom-right"`, `"left"`, `"left-top"`, `"left-bottom"`, `"right"`, `"right-top"`, + * `"right-bottom"` + * + * Accepts an array of strings or a string with space separated possible values. + * + * The default order of preference is `"bottom-left bottom-right top-left top-right"` + * + * Please see the [positioning overview](#/positioning) for more details. + */ + placement: PlacementArray; + /** + * A selector specifying the element the dropdown should be appended to. + * Currently only supports "body". + * + * @since 4.1.0 + */ + container: null | 'body'; + /** + * Enable or disable the dynamic positioning. The default value is dynamic unless the dropdown is used + * inside a Bootstrap navbar. If you need custom placement for a dropdown in a navbar, set it to + * dynamic explicitly. See the [positioning of dropdown](#/positioning#dropdown) + * and the [navbar demo](/#/components/dropdown/examples#navbar) for more details. + * + * @since 4.2.0 + */ + display: 'dynamic' | 'static'; + /** + * An event fired when the dropdown is opened or closed. + * + * The event payload is a `boolean`: + * * `true` - the dropdown was opened + * * `false` - the dropdown was closed + */ + openChange: EventEmitter; + constructor(_changeDetector: ChangeDetectorRef, config: NgbDropdownConfig, _document: any, _ngZone: NgZone, _elementRef: ElementRef, _renderer: Renderer2, ngbNavbar: NgbNavbar); + ngAfterContentInit(): void; + ngOnChanges(changes: SimpleChanges): void; + /** + * Checks if the dropdown menu is open. + */ + isOpen(): boolean; + /** + * Opens the dropdown menu. + */ + open(): void; + private _setCloseHandlers; + /** + * Closes the dropdown menu. + */ + close(): void; + /** + * Toggles the dropdown menu. + */ + toggle(): void; + ngOnDestroy(): void; + onKeyDown(event: KeyboardEvent): void; + private _isDropup; + private _isEventFromToggle; + private _getMenuElements; + private _positionMenu; + private _getFirstPlacement; + private _resetContainer; + private _applyContainer; + private _applyPlacementClasses; +} diff --git a/dist/sunbird-ui-components/dropdown/dropdown.module.d.ts b/dist/sunbird-ui-components/dropdown/dropdown.module.d.ts new file mode 100644 index 0000000..2d45c2e --- /dev/null +++ b/dist/sunbird-ui-components/dropdown/dropdown.module.d.ts @@ -0,0 +1,4 @@ +export { NgbDropdown, NgbDropdownAnchor, NgbDropdownToggle, NgbDropdownMenu, NgbDropdownItem } from './dropdown'; +export { NgbDropdownConfig } from './dropdown-config'; +export declare class NgbDropdownModule { +} diff --git a/dist/sunbird-ui-components/esm2015/accordion/accordion-config.js b/dist/sunbird-ui-components/esm2015/accordion/accordion-config.js new file mode 100644 index 0000000..ff671ce --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/accordion/accordion-config.js @@ -0,0 +1,28 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Injectable } from '@angular/core'; +import * as i0 from "@angular/core"; +/** + * A configuration service for the [NgbAccordion](#/components/accordion/api#NgbAccordion) component. + * + * You can inject this service, typically in your root component, and customize its properties + * to provide default values for all accordions used in the application. + */ +export class NgbAccordionConfig { + constructor() { + this.closeOthers = false; + } +} +NgbAccordionConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } +]; +/** @nocollapse */ NgbAccordionConfig.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function NgbAccordionConfig_Factory() { return new NgbAccordionConfig(); }, token: NgbAccordionConfig, providedIn: "root" }); +if (false) { + /** @type {?} */ + NgbAccordionConfig.prototype.closeOthers; + /** @type {?} */ + NgbAccordionConfig.prototype.type; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3JkaW9uLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImFjY29yZGlvbi9hY2NvcmRpb24tY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQVN6QyxNQUFNLE9BQU8sa0JBQWtCO0lBRC9CO1FBRUUsZ0JBQVcsR0FBRyxLQUFLLENBQUM7S0FFckI7OztZQUpBLFVBQVUsU0FBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUM7Ozs7O0lBRTlCLHlDQUFvQjs7SUFDcEIsa0NBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIEEgY29uZmlndXJhdGlvbiBzZXJ2aWNlIGZvciB0aGUgW05nYkFjY29yZGlvbl0oIy9jb21wb25lbnRzL2FjY29yZGlvbi9hcGkjTmdiQWNjb3JkaW9uKSBjb21wb25lbnQuXG4gKlxuICogWW91IGNhbiBpbmplY3QgdGhpcyBzZXJ2aWNlLCB0eXBpY2FsbHkgaW4geW91ciByb290IGNvbXBvbmVudCwgYW5kIGN1c3RvbWl6ZSBpdHMgcHJvcGVydGllc1xuICogdG8gcHJvdmlkZSBkZWZhdWx0IHZhbHVlcyBmb3IgYWxsIGFjY29yZGlvbnMgdXNlZCBpbiB0aGUgYXBwbGljYXRpb24uXG4gKi9cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIE5nYkFjY29yZGlvbkNvbmZpZyB7XG4gIGNsb3NlT3RoZXJzID0gZmFsc2U7XG4gIHR5cGU6IHN0cmluZztcbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/accordion/accordion.js b/dist/sunbird-ui-components/esm2015/accordion/accordion.js new file mode 100644 index 0000000..6a01ecb --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/accordion/accordion.js @@ -0,0 +1,522 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Component, ContentChildren, Directive, EventEmitter, Host, Input, Optional, Output, QueryList, TemplateRef } from '@angular/core'; +import { isString } from '../util/util'; +import { NgbAccordionConfig } from './accordion-config'; +/** @type {?} */ +let nextId = 0; +/** + * The context for the [NgbPanelHeader](#/components/accordion/api#NgbPanelHeader) template + * + * \@since 4.1.0 + * @record + */ +export function NgbPanelHeaderContext() { } +if (false) { + /** + * `True` if current panel is opened + * @type {?} + */ + NgbPanelHeaderContext.prototype.opened; +} +/** + * A directive that wraps an accordion panel header with any HTML markup and a toggling button + * marked with [`NgbPanelToggle`](#/components/accordion/api#NgbPanelToggle). + * See the [header customization demo](#/components/accordion/examples#header) for more details. + * + * You can also use [`NgbPanelTitle`](#/components/accordion/api#NgbPanelTitle) to customize only the panel title. + * + * \@since 4.1.0 + */ +export class NgbPanelHeader { + /** + * @param {?} templateRef + */ + constructor(templateRef) { + this.templateRef = templateRef; + } +} +NgbPanelHeader.decorators = [ + { type: Directive, args: [{ selector: 'ng-template[ngbPanelHeader]' },] } +]; +/** @nocollapse */ +NgbPanelHeader.ctorParameters = () => [ + { type: TemplateRef } +]; +if (false) { + /** @type {?} */ + NgbPanelHeader.prototype.templateRef; +} +/** + * A directive that wraps only the panel title with HTML markup inside. + * + * You can also use [`NgbPanelHeader`](#/components/accordion/api#NgbPanelHeader) to customize the full panel header. + */ +export class NgbPanelTitle { + /** + * @param {?} templateRef + */ + constructor(templateRef) { + this.templateRef = templateRef; + } +} +NgbPanelTitle.decorators = [ + { type: Directive, args: [{ selector: 'ng-template[ngbPanelTitle]' },] } +]; +/** @nocollapse */ +NgbPanelTitle.ctorParameters = () => [ + { type: TemplateRef } +]; +if (false) { + /** @type {?} */ + NgbPanelTitle.prototype.templateRef; +} +/** + * A directive that wraps the accordion panel content. + */ +export class NgbPanelContent { + /** + * @param {?} templateRef + */ + constructor(templateRef) { + this.templateRef = templateRef; + } +} +NgbPanelContent.decorators = [ + { type: Directive, args: [{ selector: 'ng-template[ngbPanelContent]' },] } +]; +/** @nocollapse */ +NgbPanelContent.ctorParameters = () => [ + { type: TemplateRef } +]; +if (false) { + /** @type {?} */ + NgbPanelContent.prototype.templateRef; +} +/** + * A directive that wraps an individual accordion panel with title and collapsible content. + */ +export class NgbPanel { + constructor() { + /** + * If `true`, the panel is disabled an can't be toggled. + */ + this.disabled = false; + /** + * An optional id for the panel that must be unique on the page. + * + * If not provided, it will be auto-generated in the `ngb-panel-xxx` format. + */ + this.id = `ngb-panel-${nextId++}`; + this.isOpen = false; + } + /** + * @return {?} + */ + ngAfterContentChecked() { + // We are using @ContentChildren instead of @ContentChild as in the Angular version being used + // only @ContentChildren allows us to specify the {descendants: false} option. + // Without {descendants: false} we are hitting bugs described in: + // https://github.com/ng-bootstrap/ng-bootstrap/issues/2240 + this.titleTpl = this.titleTpls.first; + this.headerTpl = this.headerTpls.first; + this.contentTpl = this.contentTpls.first; + } +} +NgbPanel.decorators = [ + { type: Directive, args: [{ selector: 'ngb-panel' },] } +]; +NgbPanel.propDecorators = { + disabled: [{ type: Input }], + id: [{ type: Input }], + title: [{ type: Input }], + type: [{ type: Input }], + titleTpls: [{ type: ContentChildren, args: [NgbPanelTitle, { descendants: false },] }], + headerTpls: [{ type: ContentChildren, args: [NgbPanelHeader, { descendants: false },] }], + contentTpls: [{ type: ContentChildren, args: [NgbPanelContent, { descendants: false },] }] +}; +if (false) { + /** + * If `true`, the panel is disabled an can't be toggled. + * @type {?} + */ + NgbPanel.prototype.disabled; + /** + * An optional id for the panel that must be unique on the page. + * + * If not provided, it will be auto-generated in the `ngb-panel-xxx` format. + * @type {?} + */ + NgbPanel.prototype.id; + /** @type {?} */ + NgbPanel.prototype.isOpen; + /** + * The panel title. + * + * You can alternatively use [`NgbPanelTitle`](#/components/accordion/api#NgbPanelTitle) to set panel title. + * @type {?} + */ + NgbPanel.prototype.title; + /** + * Type of the current panel. + * + * Bootstrap provides styles for the following types: `'success'`, `'info'`, `'warning'`, `'danger'`, `'primary'`, + * `'secondary'`, `'light'` and `'dark'`. + * @type {?} + */ + NgbPanel.prototype.type; + /** @type {?} */ + NgbPanel.prototype.titleTpl; + /** @type {?} */ + NgbPanel.prototype.headerTpl; + /** @type {?} */ + NgbPanel.prototype.contentTpl; + /** @type {?} */ + NgbPanel.prototype.titleTpls; + /** @type {?} */ + NgbPanel.prototype.headerTpls; + /** @type {?} */ + NgbPanel.prototype.contentTpls; +} +/** + * An event emitted right before toggling an accordion panel. + * @record + */ +export function NgbPanelChangeEvent() { } +if (false) { + /** + * The id of the accordion panel that is being toggled. + * @type {?} + */ + NgbPanelChangeEvent.prototype.panelId; + /** + * The next state of the panel. + * + * `true` if it will be opened, `false` if closed. + * @type {?} + */ + NgbPanelChangeEvent.prototype.nextState; + /** + * Calling this function will prevent panel toggling. + * @type {?} + */ + NgbPanelChangeEvent.prototype.preventDefault; +} +/** + * Accordion is a collection of collapsible panels (bootstrap cards). + * + * It can ensure only one panel is opened at a time and allows to customize panel + * headers. + */ +export class NgbAccordion { + /** + * @param {?} config + */ + constructor(config) { + /** + * An array or comma separated strings of panel ids that should be opened **initially**. + * + * For subsequent changes use methods like `expand()`, `collapse()`, etc. and + * the `(panelChange)` event. + */ + this.activeIds = []; + /** + * If `true`, panel content will be detached from DOM and not simply hidden when the panel is collapsed. + */ + this.destroyOnHide = true; + /** + * Event emitted right before the panel toggle happens. + * + * See [NgbPanelChangeEvent](#/components/accordion/api#NgbPanelChangeEvent) for payload details. + */ + this.panelChange = new EventEmitter(); + this.type = config.type; + this.closeOtherPanels = config.closeOthers; + } + /** + * Checks if a panel with a given id is expanded. + * @param {?} panelId + * @return {?} + */ + isExpanded(panelId) { return this.activeIds.indexOf(panelId) > -1; } + /** + * Expands a panel with a given id. + * + * Has no effect if the panel is already expanded or disabled. + * @param {?} panelId + * @return {?} + */ + expand(panelId) { this._changeOpenState(this._findPanelById(panelId), true); } + /** + * Expands all panels, if `[closeOthers]` is `false`. + * + * If `[closeOthers]` is `true`, it will expand the first panel, unless there is already a panel opened. + * @return {?} + */ + expandAll() { + if (this.closeOtherPanels) { + if (this.activeIds.length === 0 && this.panels.length) { + this._changeOpenState(this.panels.first, true); + } + } + else { + this.panels.forEach((/** + * @param {?} panel + * @return {?} + */ + panel => this._changeOpenState(panel, true))); + } + } + /** + * Collapses a panel with the given id. + * + * Has no effect if the panel is already collapsed or disabled. + * @param {?} panelId + * @return {?} + */ + collapse(panelId) { this._changeOpenState(this._findPanelById(panelId), false); } + /** + * Collapses all opened panels. + * @return {?} + */ + collapseAll() { + this.panels.forEach((/** + * @param {?} panel + * @return {?} + */ + (panel) => { this._changeOpenState(panel, false); })); + } + /** + * Toggles a panel with the given id. + * + * Has no effect if the panel is disabled. + * @param {?} panelId + * @return {?} + */ + toggle(panelId) { + /** @type {?} */ + const panel = this._findPanelById(panelId); + if (panel) { + this._changeOpenState(panel, !panel.isOpen); + } + } + /** + * @return {?} + */ + ngAfterContentChecked() { + // active id updates + if (isString(this.activeIds)) { + this.activeIds = this.activeIds.split(/\s*,\s*/); + } + // update panels open states + this.panels.forEach((/** + * @param {?} panel + * @return {?} + */ + panel => panel.isOpen = !panel.disabled && this.activeIds.indexOf(panel.id) > -1)); + // closeOthers updates + if (this.activeIds.length > 1 && this.closeOtherPanels) { + this._closeOthers(this.activeIds[0]); + this._updateActiveIds(); + } + } + /** + * @private + * @param {?} panel + * @param {?} nextState + * @return {?} + */ + _changeOpenState(panel, nextState) { + if (panel && !panel.disabled && panel.isOpen !== nextState) { + /** @type {?} */ + let defaultPrevented = false; + this.panelChange.emit({ panelId: panel.id, nextState: nextState, preventDefault: (/** + * @return {?} + */ + () => { defaultPrevented = true; }) }); + if (!defaultPrevented) { + panel.isOpen = nextState; + if (nextState && this.closeOtherPanels) { + this._closeOthers(panel.id); + } + this._updateActiveIds(); + } + } + } + /** + * @private + * @param {?} panelId + * @return {?} + */ + _closeOthers(panelId) { + this.panels.forEach((/** + * @param {?} panel + * @return {?} + */ + panel => { + if (panel.id !== panelId) { + panel.isOpen = false; + } + })); + } + /** + * @private + * @param {?} panelId + * @return {?} + */ + _findPanelById(panelId) { return this.panels.find((/** + * @param {?} p + * @return {?} + */ + p => p.id === panelId)); } + /** + * @private + * @return {?} + */ + _updateActiveIds() { + this.activeIds = this.panels.filter((/** + * @param {?} panel + * @return {?} + */ + panel => panel.isOpen && !panel.disabled)).map((/** + * @param {?} panel + * @return {?} + */ + panel => panel.id)); + } +} +NgbAccordion.decorators = [ + { type: Component, args: [{ + selector: 'ngb-accordion', + exportAs: 'ngbAccordion', + host: { 'class': 'accordion', 'role': 'tablist', '[attr.aria-multiselectable]': '!closeOtherPanels' }, + template: ` + + + + +
+ +
+
+ +
+
+
+
+ ` + }] } +]; +/** @nocollapse */ +NgbAccordion.ctorParameters = () => [ + { type: NgbAccordionConfig } +]; +NgbAccordion.propDecorators = { + panels: [{ type: ContentChildren, args: [NgbPanel,] }], + activeIds: [{ type: Input }], + closeOtherPanels: [{ type: Input, args: ['closeOthers',] }], + destroyOnHide: [{ type: Input }], + type: [{ type: Input }], + panelChange: [{ type: Output }] +}; +if (false) { + /** @type {?} */ + NgbAccordion.prototype.panels; + /** + * An array or comma separated strings of panel ids that should be opened **initially**. + * + * For subsequent changes use methods like `expand()`, `collapse()`, etc. and + * the `(panelChange)` event. + * @type {?} + */ + NgbAccordion.prototype.activeIds; + /** + * If `true`, only one panel could be opened at a time. + * + * Opening a new panel will close others. + * @type {?} + */ + NgbAccordion.prototype.closeOtherPanels; + /** + * If `true`, panel content will be detached from DOM and not simply hidden when the panel is collapsed. + * @type {?} + */ + NgbAccordion.prototype.destroyOnHide; + /** + * Type of panels. + * + * Bootstrap provides styles for the following types: `'success'`, `'info'`, `'warning'`, `'danger'`, `'primary'`, + * `'secondary'`, `'light'` and `'dark'`. + * @type {?} + */ + NgbAccordion.prototype.type; + /** + * Event emitted right before the panel toggle happens. + * + * See [NgbPanelChangeEvent](#/components/accordion/api#NgbPanelChangeEvent) for payload details. + * @type {?} + */ + NgbAccordion.prototype.panelChange; +} +/** + * A directive to put on a button that toggles panel opening and closing. + * + * To be used inside the [`NgbPanelHeader`](#/components/accordion/api#NgbPanelHeader) + * + * \@since 4.1.0 + */ +export class NgbPanelToggle { + /** + * @param {?} accordion + * @param {?} panel + */ + constructor(accordion, panel) { + this.accordion = accordion; + this.panel = panel; + } + /** + * @param {?} panel + * @return {?} + */ + set ngbPanelToggle(panel) { + if (panel) { + this.panel = panel; + } + } +} +NgbPanelToggle.decorators = [ + { type: Directive, args: [{ + selector: 'button[ngbPanelToggle]', + host: { + 'type': 'button', + '[disabled]': 'panel.disabled', + '[class.collapsed]': '!panel.isOpen', + '[attr.aria-expanded]': 'panel.isOpen', + '[attr.aria-controls]': 'panel.id', + '(click)': 'accordion.toggle(panel.id)' + } + },] } +]; +/** @nocollapse */ +NgbPanelToggle.ctorParameters = () => [ + { type: NgbAccordion }, + { type: NgbPanel, decorators: [{ type: Optional }, { type: Host }] } +]; +NgbPanelToggle.propDecorators = { + ngbPanelToggle: [{ type: Input }] +}; +if (false) { + /** @type {?} */ + NgbPanelToggle.prototype.accordion; + /** @type {?} */ + NgbPanelToggle.prototype.panel; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3JkaW9uLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiYWNjb3JkaW9uL2FjY29yZGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxlQUFlLEVBQ2YsU0FBUyxFQUNULFlBQVksRUFDWixJQUFJLEVBQ0osS0FBSyxFQUNMLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNULFdBQVcsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRXRDLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLG9CQUFvQixDQUFDOztJQUVsRCxNQUFNLEdBQUcsQ0FBQzs7Ozs7OztBQU9kLDJDQUtDOzs7Ozs7SUFEQyx1Q0FBZ0I7Ozs7Ozs7Ozs7O0FBYWxCLE1BQU0sT0FBTyxjQUFjOzs7O0lBQ3pCLFlBQW1CLFdBQTZCO1FBQTdCLGdCQUFXLEdBQVgsV0FBVyxDQUFrQjtJQUFHLENBQUM7OztZQUZyRCxTQUFTLFNBQUMsRUFBQyxRQUFRLEVBQUUsNkJBQTZCLEVBQUM7Ozs7WUE5QmxELFdBQVc7Ozs7SUFnQ0MscUNBQW9DOzs7Ozs7O0FBU2xELE1BQU0sT0FBTyxhQUFhOzs7O0lBQ3hCLFlBQW1CLFdBQTZCO1FBQTdCLGdCQUFXLEdBQVgsV0FBVyxDQUFrQjtJQUFHLENBQUM7OztZQUZyRCxTQUFTLFNBQUMsRUFBQyxRQUFRLEVBQUUsNEJBQTRCLEVBQUM7Ozs7WUF4Q2pELFdBQVc7Ozs7SUEwQ0Msb0NBQW9DOzs7OztBQU9sRCxNQUFNLE9BQU8sZUFBZTs7OztJQUMxQixZQUFtQixXQUE2QjtRQUE3QixnQkFBVyxHQUFYLFdBQVcsQ0FBa0I7SUFBRyxDQUFDOzs7WUFGckQsU0FBUyxTQUFDLEVBQUMsUUFBUSxFQUFFLDhCQUE4QixFQUFDOzs7O1lBaERuRCxXQUFXOzs7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RSxRQUFRO29CQUNoQixZQUFZLEVBQUUsZ0JBQWdCO29CQUM5QixtQkFBbUIsRUFBRSxlQUFlO29CQUNwQyxzQkFBc0IsRUFBRSxjQUFjO29CQUN0QyxzQkFBc0IsRUFBRSxVQUFVO29CQUNsQyxTQUFTLEVBQUUsNEJBQTRCO2lCQUN4QzthQUNGOzs7O1lBUytCLFlBQVk7WUFBb0MsUUFBUSx1QkFBekMsUUFBUSxZQUFJLElBQUk7Ozs2QkFQNUQsS0FBSzs7OztJQU9NLG1DQUE4Qjs7SUFBRSwrQkFBMEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRDaGVja2VkLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRGlyZWN0aXZlLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3QsXG4gIElucHV0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFRlbXBsYXRlUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge2lzU3RyaW5nfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuXG5pbXBvcnQge05nYkFjY29yZGlvbkNvbmZpZ30gZnJvbSAnLi9hY2NvcmRpb24tY29uZmlnJztcblxubGV0IG5leHRJZCA9IDA7XG5cbi8qKlxuICogVGhlIGNvbnRleHQgZm9yIHRoZSBbTmdiUGFuZWxIZWFkZXJdKCMvY29tcG9uZW50cy9hY2NvcmRpb24vYXBpI05nYlBhbmVsSGVhZGVyKSB0ZW1wbGF0ZVxuICpcbiAqIEBzaW5jZSA0LjEuMFxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5nYlBhbmVsSGVhZGVyQ29udGV4dCB7XG4gIC8qKlxuICAgKiBgVHJ1ZWAgaWYgY3VycmVudCBwYW5lbCBpcyBvcGVuZWRcbiAgICovXG4gIG9wZW5lZDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBBIGRpcmVjdGl2ZSB0aGF0IHdyYXBzIGFuIGFjY29yZGlvbiBwYW5lbCBoZWFkZXIgd2l0aCBhbnkgSFRNTCBtYXJrdXAgYW5kIGEgdG9nZ2xpbmcgYnV0dG9uXG4gKiBtYXJrZWQgd2l0aCBbYE5nYlBhbmVsVG9nZ2xlYF0oIy9jb21wb25lbnRzL2FjY29yZGlvbi9hcGkjTmdiUGFuZWxUb2dnbGUpLlxuICogU2VlIHRoZSBbaGVhZGVyIGN1c3RvbWl6YXRpb24gZGVtb10oIy9jb21wb25lbnRzL2FjY29yZGlvbi9leGFtcGxlcyNoZWFkZXIpIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogWW91IGNhbiBhbHNvIHVzZSBbYE5nYlBhbmVsVGl0bGVgXSgjL2NvbXBvbmVudHMvYWNjb3JkaW9uL2FwaSNOZ2JQYW5lbFRpdGxlKSB0byBjdXN0b21pemUgb25seSB0aGUgcGFuZWwgdGl0bGUuXG4gKlxuICogQHNpbmNlIDQuMS4wXG4gKi9cbkBEaXJlY3RpdmUoe3NlbGVjdG9yOiAnbmctdGVtcGxhdGVbbmdiUGFuZWxIZWFkZXJdJ30pXG5leHBvcnQgY2xhc3MgTmdiUGFuZWxIZWFkZXIge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4pIHt9XG59XG5cbi8qKlxuICogQSBkaXJlY3RpdmUgdGhhdCB3cmFwcyBvbmx5IHRoZSBwYW5lbCB0aXRsZSB3aXRoIEhUTUwgbWFya3VwIGluc2lkZS5cbiAqXG4gKiBZb3UgY2FuIGFsc28gdXNlIFtgTmdiUGFuZWxIZWFkZXJgXSgjL2NvbXBvbmVudHMvYWNjb3JkaW9uL2FwaSNOZ2JQYW5lbEhlYWRlcikgdG8gY3VzdG9taXplIHRoZSBmdWxsIHBhbmVsIGhlYWRlci5cbiAqL1xuQERpcmVjdGl2ZSh7c2VsZWN0b3I6ICduZy10ZW1wbGF0ZVtuZ2JQYW5lbFRpdGxlXSd9KVxuZXhwb3J0IGNsYXNzIE5nYlBhbmVsVGl0bGUge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4pIHt9XG59XG5cbi8qKlxuICogQSBkaXJlY3RpdmUgdGhhdCB3cmFwcyB0aGUgYWNjb3JkaW9uIHBhbmVsIGNvbnRlbnQuXG4gKi9cbkBEaXJlY3RpdmUoe3NlbGVjdG9yOiAnbmctdGVtcGxhdGVbbmdiUGFuZWxDb250ZW50XSd9KVxuZXhwb3J0IGNsYXNzIE5nYlBhbmVsQ29udGVudCB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55Pikge31cbn1cblxuLyoqXG4gKiBBIGRpcmVjdGl2ZSB0aGF0IHdyYXBzIGFuIGluZGl2aWR1YWwgYWNjb3JkaW9uIHBhbmVsIHdpdGggdGl0bGUgYW5kIGNvbGxhcHNpYmxlIGNvbnRlbnQuXG4gKi9cbkBEaXJlY3RpdmUoe3NlbGVjdG9yOiAnbmdiLXBhbmVsJ30pXG5leHBvcnQgY2xhc3MgTmdiUGFuZWwgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRDaGVja2VkIHtcbiAgLyoqXG4gICAqICBJZiBgdHJ1ZWAsIHRoZSBwYW5lbCBpcyBkaXNhYmxlZCBhbiBjYW4ndCBiZSB0b2dnbGVkLlxuICAgKi9cbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogIEFuIG9wdGlvbmFsIGlkIGZvciB0aGUgcGFuZWwgdGhhdCBtdXN0IGJlIHVuaXF1ZSBvbiB0aGUgcGFnZS5cbiAgICpcbiAgICogIElmIG5vdCBwcm92aWRlZCwgaXQgd2lsbCBiZSBhdXRvLWdlbmVyYXRlZCBpbiB0aGUgYG5nYi1wYW5lbC14eHhgIGZvcm1hdC5cbiAgICovXG4gIEBJbnB1dCgpIGlkID0gYG5nYi1wYW5lbC0ke25leHRJZCsrfWA7XG5cbiAgaXNPcGVuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqICBUaGUgcGFuZWwgdGl0bGUuXG4gICAqXG4gICAqICBZb3UgY2FuIGFsdGVybmF0aXZlbHkgdXNlIFtgTmdiUGFuZWxUaXRsZWBdKCMvY29tcG9uZW50cy9hY2NvcmRpb24vYXBpI05nYlBhbmVsVGl0bGUpIHRvIHNldCBwYW5lbCB0aXRsZS5cbiAgICovXG4gIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFR5cGUgb2YgdGhlIGN1cnJlbnQgcGFuZWwuXG4gICAqXG4gICAqIEJvb3RzdHJhcCBwcm92aWRlcyBzdHlsZXMgZm9yIHRoZSBmb2xsb3dpbmcgdHlwZXM6IGAnc3VjY2VzcydgLCBgJ2luZm8nYCwgYCd3YXJuaW5nJ2AsIGAnZGFuZ2VyJ2AsIGAncHJpbWFyeSdgLFxuICAgKiBgJ3NlY29uZGFyeSdgLCBgJ2xpZ2h0J2AgYW5kIGAnZGFyaydgLlxuICAgKi9cbiAgQElucHV0KCkgdHlwZTogc3RyaW5nO1xuXG4gIHRpdGxlVHBsOiBOZ2JQYW5lbFRpdGxlIHwgbnVsbDtcbiAgaGVhZGVyVHBsOiBOZ2JQYW5lbEhlYWRlciB8IG51bGw7XG4gIGNvbnRlbnRUcGw6IE5nYlBhbmVsQ29udGVudCB8IG51bGw7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihOZ2JQYW5lbFRpdGxlLCB7ZGVzY2VuZGFudHM6IGZhbHNlfSkgdGl0bGVUcGxzOiBRdWVyeUxpc3Q8TmdiUGFuZWxUaXRsZT47XG4gIEBDb250ZW50Q2hpbGRyZW4oTmdiUGFuZWxIZWFkZXIsIHtkZXNjZW5kYW50czogZmFsc2V9KSBoZWFkZXJUcGxzOiBRdWVyeUxpc3Q8TmdiUGFuZWxIZWFkZXI+O1xuICBAQ29udGVudENoaWxkcmVuKE5nYlBhbmVsQ29udGVudCwge2Rlc2NlbmRhbnRzOiBmYWxzZX0pIGNvbnRlbnRUcGxzOiBRdWVyeUxpc3Q8TmdiUGFuZWxDb250ZW50PjtcblxuICBuZ0FmdGVyQ29udGVudENoZWNrZWQoKSB7XG4gICAgLy8gV2UgYXJlIHVzaW5nIEBDb250ZW50Q2hpbGRyZW4gaW5zdGVhZCBvZiBAQ29udGVudENoaWxkIGFzIGluIHRoZSBBbmd1bGFyIHZlcnNpb24gYmVpbmcgdXNlZFxuICAgIC8vIG9ubHkgQENvbnRlbnRDaGlsZHJlbiBhbGxvd3MgdXMgdG8gc3BlY2lmeSB0aGUge2Rlc2NlbmRhbnRzOiBmYWxzZX0gb3B0aW9uLlxuICAgIC8vIFdpdGhvdXQge2Rlc2NlbmRhbnRzOiBmYWxzZX0gd2UgYXJlIGhpdHRpbmcgYnVncyBkZXNjcmliZWQgaW46XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAvaXNzdWVzLzIyNDBcbiAgICB0aGlzLnRpdGxlVHBsID0gdGhpcy50aXRsZVRwbHMuZmlyc3Q7XG4gICAgdGhpcy5oZWFkZXJUcGwgPSB0aGlzLmhlYWRlclRwbHMuZmlyc3Q7XG4gICAgdGhpcy5jb250ZW50VHBsID0gdGhpcy5jb250ZW50VHBscy5maXJzdDtcbiAgfVxufVxuXG4vKipcbiAqIEFuIGV2ZW50IGVtaXR0ZWQgcmlnaHQgYmVmb3JlIHRvZ2dsaW5nIGFuIGFjY29yZGlvbiBwYW5lbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZ2JQYW5lbENoYW5nZUV2ZW50IHtcbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgYWNjb3JkaW9uIHBhbmVsIHRoYXQgaXMgYmVpbmcgdG9nZ2xlZC5cbiAgICovXG4gIHBhbmVsSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5leHQgc3RhdGUgb2YgdGhlIHBhbmVsLlxuICAgKlxuICAgKiBgdHJ1ZWAgaWYgaXQgd2lsbCBiZSBvcGVuZWQsIGBmYWxzZWAgaWYgY2xvc2VkLlxuICAgKi9cbiAgbmV4dFN0YXRlOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBwcmV2ZW50IHBhbmVsIHRvZ2dsaW5nLlxuICAgKi9cbiAgcHJldmVudERlZmF1bHQ6ICgpID0+IHZvaWQ7XG59XG5cbi8qKlxuICogQWNjb3JkaW9uIGlzIGEgY29sbGVjdGlvbiBvZiBjb2xsYXBzaWJsZSBwYW5lbHMgKGJvb3RzdHJhcCBjYXJkcykuXG4gKlxuICogSXQgY2FuIGVuc3VyZSBvbmx5IG9uZSBwYW5lbCBpcyBvcGVuZWQgYXQgYSB0aW1lIGFuZCBhbGxvd3MgdG8gY3VzdG9taXplIHBhbmVsXG4gKiBoZWFkZXJzLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ2ItYWNjb3JkaW9uJyxcbiAgZXhwb3J0QXM6ICduZ2JBY2NvcmRpb24nLFxuICBob3N0OiB7J2NsYXNzJzogJ2FjY29yZGlvbicsICdyb2xlJzogJ3RhYmxpc3QnLCAnW2F0dHIuYXJpYS1tdWx0aXNlbGVjdGFibGVdJzogJyFjbG9zZU90aGVyUGFuZWxzJ30sXG4gIHRlbXBsYXRlOiBgXG4gICAgPG5nLXRlbXBsYXRlICN0IG5nYlBhbmVsSGVhZGVyIGxldC1wYW5lbD5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWxpbmtcIiBbbmdiUGFuZWxUb2dnbGVdPVwicGFuZWxcIj5cbiAgICAgICAge3twYW5lbC50aXRsZX19PG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInBhbmVsLnRpdGxlVHBsPy50ZW1wbGF0ZVJlZlwiPjwvbmctdGVtcGxhdGU+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSBuZ0ZvciBsZXQtcGFuZWwgW25nRm9yT2ZdPVwicGFuZWxzXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxuICAgICAgICA8ZGl2IHJvbGU9XCJ0YWJcIiBpZD1cInt7cGFuZWwuaWR9fS1oZWFkZXJcIiBbY2xhc3NdPVwiJ2NhcmQtaGVhZGVyICcgKyAocGFuZWwudHlwZSA/ICdiZy0nK3BhbmVsLnR5cGU6IHR5cGUgPyAnYmctJyt0eXBlIDogJycpXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInBhbmVsLmhlYWRlclRwbD8udGVtcGxhdGVSZWYgfHwgdFwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7JGltcGxpY2l0OiBwYW5lbCwgb3BlbmVkOiBwYW5lbC5pc09wZW59XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgaWQ9XCJ7e3BhbmVsLmlkfX1cIiByb2xlPVwidGFicGFuZWxcIiBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwicGFuZWwuaWQgKyAnLWhlYWRlcidcIlxuICAgICAgICAgICAgIGNsYXNzPVwiY29sbGFwc2VcIiBbY2xhc3Muc2hvd109XCJwYW5lbC5pc09wZW5cIiAqbmdJZj1cIiFkZXN0cm95T25IaWRlIHx8IHBhbmVsLmlzT3BlblwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJwYW5lbC5jb250ZW50VHBsPy50ZW1wbGF0ZVJlZlwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgYFxufSlcbmV4cG9ydCBjbGFzcyBOZ2JBY2NvcmRpb24gaW1wbGVtZW50cyBBZnRlckNvbnRlbnRDaGVja2VkIHtcbiAgQENvbnRlbnRDaGlsZHJlbihOZ2JQYW5lbCkgcGFuZWxzOiBRdWVyeUxpc3Q8TmdiUGFuZWw+O1xuXG4gIC8qKlxuICAgKiBBbiBhcnJheSBvciBjb21tYSBzZXBhcmF0ZWQgc3RyaW5ncyBvZiBwYW5lbCBpZHMgdGhhdCBzaG91bGQgYmUgb3BlbmVkICoqaW5pdGlhbGx5KiouXG4gICAqXG4gICAqIEZvciBzdWJzZXF1ZW50IGNoYW5nZXMgdXNlIG1ldGhvZHMgbGlrZSBgZXhwYW5kKClgLCBgY29sbGFwc2UoKWAsIGV0Yy4gYW5kXG4gICAqIHRoZSBgKHBhbmVsQ2hhbmdlKWAgZXZlbnQuXG4gICAqL1xuICBASW5wdXQoKSBhY3RpdmVJZHM6IHN0cmluZyB8IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqICBJZiBgdHJ1ZWAsIG9ubHkgb25lIHBhbmVsIGNvdWxkIGJlIG9wZW5lZCBhdCBhIHRpbWUuXG4gICAqXG4gICAqICBPcGVuaW5nIGEgbmV3IHBhbmVsIHdpbGwgY2xvc2Ugb3RoZXJzLlxuICAgKi9cbiAgQElucHV0KCdjbG9zZU90aGVycycpIGNsb3NlT3RoZXJQYW5lbHM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgcGFuZWwgY29udGVudCB3aWxsIGJlIGRldGFjaGVkIGZyb20gRE9NIGFuZCBub3Qgc2ltcGx5IGhpZGRlbiB3aGVuIHRoZSBwYW5lbCBpcyBjb2xsYXBzZWQuXG4gICAqL1xuICBASW5wdXQoKSBkZXN0cm95T25IaWRlID0gdHJ1ZTtcblxuICAvKipcbiAgICogVHlwZSBvZiBwYW5lbHMuXG4gICAqXG4gICAqIEJvb3RzdHJhcCBwcm92aWRlcyBzdHlsZXMgZm9yIHRoZSBmb2xsb3dpbmcgdHlwZXM6IGAnc3VjY2VzcydgLCBgJ2luZm8nYCwgYCd3YXJuaW5nJ2AsIGAnZGFuZ2VyJ2AsIGAncHJpbWFyeSdgLFxuICAgKiBgJ3NlY29uZGFyeSdgLCBgJ2xpZ2h0J2AgYW5kIGAnZGFyaydgLlxuICAgKi9cbiAgQElucHV0KCkgdHlwZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFdmVudCBlbWl0dGVkIHJpZ2h0IGJlZm9yZSB0aGUgcGFuZWwgdG9nZ2xlIGhhcHBlbnMuXG4gICAqXG4gICAqIFNlZSBbTmdiUGFuZWxDaGFuZ2VFdmVudF0oIy9jb21wb25lbnRzL2FjY29yZGlvbi9hcGkjTmdiUGFuZWxDaGFuZ2VFdmVudCkgZm9yIHBheWxvYWQgZGV0YWlscy5cbiAgICovXG4gIEBPdXRwdXQoKSBwYW5lbENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8TmdiUGFuZWxDaGFuZ2VFdmVudD4oKTtcblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IE5nYkFjY29yZGlvbkNvbmZpZykge1xuICAgIHRoaXMudHlwZSA9IGNvbmZpZy50eXBlO1xuICAgIHRoaXMuY2xvc2VPdGhlclBhbmVscyA9IGNvbmZpZy5jbG9zZU90aGVycztcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSBwYW5lbCB3aXRoIGEgZ2l2ZW4gaWQgaXMgZXhwYW5kZWQuXG4gICAqL1xuICBpc0V4cGFuZGVkKHBhbmVsSWQ6IHN0cmluZyk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5hY3RpdmVJZHMuaW5kZXhPZihwYW5lbElkKSA+IC0xOyB9XG5cbiAgLyoqXG4gICAqIEV4cGFuZHMgYSBwYW5lbCB3aXRoIGEgZ2l2ZW4gaWQuXG4gICAqXG4gICAqIEhhcyBubyBlZmZlY3QgaWYgdGhlIHBhbmVsIGlzIGFscmVhZHkgZXhwYW5kZWQgb3IgZGlzYWJsZWQuXG4gICAqL1xuICBleHBhbmQocGFuZWxJZDogc3RyaW5nKTogdm9pZCB7IHRoaXMuX2NoYW5nZU9wZW5TdGF0ZSh0aGlzLl9maW5kUGFuZWxCeUlkKHBhbmVsSWQpLCB0cnVlKTsgfVxuXG4gIC8qKlxuICAgKiBFeHBhbmRzIGFsbCBwYW5lbHMsIGlmIGBbY2xvc2VPdGhlcnNdYCBpcyBgZmFsc2VgLlxuICAgKlxuICAgKiBJZiBgW2Nsb3NlT3RoZXJzXWAgaXMgYHRydWVgLCBpdCB3aWxsIGV4cGFuZCB0aGUgZmlyc3QgcGFuZWwsIHVubGVzcyB0aGVyZSBpcyBhbHJlYWR5IGEgcGFuZWwgb3BlbmVkLlxuICAgKi9cbiAgZXhwYW5kQWxsKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNsb3NlT3RoZXJQYW5lbHMpIHtcbiAgICAgIGlmICh0aGlzLmFjdGl2ZUlkcy5sZW5ndGggPT09IDAgJiYgdGhpcy5wYW5lbHMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuX2NoYW5nZU9wZW5TdGF0ZSh0aGlzLnBhbmVscy5maXJzdCwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFuZWxzLmZvckVhY2gocGFuZWwgPT4gdGhpcy5fY2hhbmdlT3BlblN0YXRlKHBhbmVsLCB0cnVlKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbGxhcHNlcyBhIHBhbmVsIHdpdGggdGhlIGdpdmVuIGlkLlxuICAgKlxuICAgKiBIYXMgbm8gZWZmZWN0IGlmIHRoZSBwYW5lbCBpcyBhbHJlYWR5IGNvbGxhcHNlZCBvciBkaXNhYmxlZC5cbiAgICovXG4gIGNvbGxhcHNlKHBhbmVsSWQ6IHN0cmluZykgeyB0aGlzLl9jaGFuZ2VPcGVuU3RhdGUodGhpcy5fZmluZFBhbmVsQnlJZChwYW5lbElkKSwgZmFsc2UpOyB9XG5cbiAgLyoqXG4gICAqIENvbGxhcHNlcyBhbGwgb3BlbmVkIHBhbmVscy5cbiAgICovXG4gIGNvbGxhcHNlQWxsKCkge1xuICAgIHRoaXMucGFuZWxzLmZvckVhY2goKHBhbmVsKSA9PiB7IHRoaXMuX2NoYW5nZU9wZW5TdGF0ZShwYW5lbCwgZmFsc2UpOyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIGEgcGFuZWwgd2l0aCB0aGUgZ2l2ZW4gaWQuXG4gICAqXG4gICAqIEhhcyBubyBlZmZlY3QgaWYgdGhlIHBhbmVsIGlzIGRpc2FibGVkLlxuICAgKi9cbiAgdG9nZ2xlKHBhbmVsSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IHBhbmVsID0gdGhpcy5fZmluZFBhbmVsQnlJZChwYW5lbElkKTtcbiAgICBpZiAocGFuZWwpIHtcbiAgICAgIHRoaXMuX2NoYW5nZU9wZW5TdGF0ZShwYW5lbCwgIXBhbmVsLmlzT3Blbik7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCkge1xuICAgIC8vIGFjdGl2ZSBpZCB1cGRhdGVzXG4gICAgaWYgKGlzU3RyaW5nKHRoaXMuYWN0aXZlSWRzKSkge1xuICAgICAgdGhpcy5hY3RpdmVJZHMgPSB0aGlzLmFjdGl2ZUlkcy5zcGxpdCgvXFxzKixcXHMqLyk7XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIHBhbmVscyBvcGVuIHN0YXRlc1xuICAgIHRoaXMucGFuZWxzLmZvckVhY2gocGFuZWwgPT4gcGFuZWwuaXNPcGVuID0gIXBhbmVsLmRpc2FibGVkICYmIHRoaXMuYWN0aXZlSWRzLmluZGV4T2YocGFuZWwuaWQpID4gLTEpO1xuXG4gICAgLy8gY2xvc2VPdGhlcnMgdXBkYXRlc1xuICAgIGlmICh0aGlzLmFjdGl2ZUlkcy5sZW5ndGggPiAxICYmIHRoaXMuY2xvc2VPdGhlclBhbmVscykge1xuICAgICAgdGhpcy5fY2xvc2VPdGhlcnModGhpcy5hY3RpdmVJZHNbMF0pO1xuICAgICAgdGhpcy5fdXBkYXRlQWN0aXZlSWRzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfY2hhbmdlT3BlblN0YXRlKHBhbmVsOiBOZ2JQYW5lbCwgbmV4dFN0YXRlOiBib29sZWFuKSB7XG4gICAgaWYgKHBhbmVsICYmICFwYW5lbC5kaXNhYmxlZCAmJiBwYW5lbC5pc09wZW4gIT09IG5leHRTdGF0ZSkge1xuICAgICAgbGV0IGRlZmF1bHRQcmV2ZW50ZWQgPSBmYWxzZTtcblxuICAgICAgdGhpcy5wYW5lbENoYW5nZS5lbWl0KFxuICAgICAgICAgIHtwYW5lbElkOiBwYW5lbC5pZCwgbmV4dFN0YXRlOiBuZXh0U3RhdGUsIHByZXZlbnREZWZhdWx0OiAoKSA9PiB7IGRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlOyB9fSk7XG5cbiAgICAgIGlmICghZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICBwYW5lbC5pc09wZW4gPSBuZXh0U3RhdGU7XG5cbiAgICAgICAgaWYgKG5leHRTdGF0ZSAmJiB0aGlzLmNsb3NlT3RoZXJQYW5lbHMpIHtcbiAgICAgICAgICB0aGlzLl9jbG9zZU90aGVycyhwYW5lbC5pZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdXBkYXRlQWN0aXZlSWRzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfY2xvc2VPdGhlcnMocGFuZWxJZDogc3RyaW5nKSB7XG4gICAgdGhpcy5wYW5lbHMuZm9yRWFjaChwYW5lbCA9PiB7XG4gICAgICBpZiAocGFuZWwuaWQgIT09IHBhbmVsSWQpIHtcbiAgICAgICAgcGFuZWwuaXNPcGVuID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9maW5kUGFuZWxCeUlkKHBhbmVsSWQ6IHN0cmluZyk6IE5nYlBhbmVsIHwgbnVsbCB7IHJldHVybiB0aGlzLnBhbmVscy5maW5kKHAgPT4gcC5pZCA9PT0gcGFuZWxJZCk7IH1cblxuICBwcml2YXRlIF91cGRhdGVBY3RpdmVJZHMoKSB7XG4gICAgdGhpcy5hY3RpdmVJZHMgPSB0aGlzLnBhbmVscy5maWx0ZXIocGFuZWwgPT4gcGFuZWwuaXNPcGVuICYmICFwYW5lbC5kaXNhYmxlZCkubWFwKHBhbmVsID0+IHBhbmVsLmlkKTtcbiAgfVxufVxuXG4vKipcbiAqIEEgZGlyZWN0aXZlIHRvIHB1dCBvbiBhIGJ1dHRvbiB0aGF0IHRvZ2dsZXMgcGFuZWwgb3BlbmluZyBhbmQgY2xvc2luZy5cbiAqXG4gKiBUbyBiZSB1c2VkIGluc2lkZSB0aGUgW2BOZ2JQYW5lbEhlYWRlcmBdKCMvY29tcG9uZW50cy9hY2NvcmRpb24vYXBpI05nYlBhbmVsSGVhZGVyKVxuICpcbiAqIEBzaW5jZSA0LjEuMFxuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdidXR0b25bbmdiUGFuZWxUb2dnbGVdJyxcbiAgaG9zdDoge1xuICAgICd0eXBlJzogJ2J1dHRvbicsXG4gICAgJ1tkaXNhYmxlZF0nOiAncGFuZWwuZGlzYWJsZWQnLFxuICAgICdbY2xhc3MuY29sbGFwc2VkXSc6ICchcGFuZWwuaXNPcGVuJyxcbiAgICAnW2F0dHIuYXJpYS1leHBhbmRlZF0nOiAncGFuZWwuaXNPcGVuJyxcbiAgICAnW2F0dHIuYXJpYS1jb250cm9sc10nOiAncGFuZWwuaWQnLFxuICAgICcoY2xpY2spJzogJ2FjY29yZGlvbi50b2dnbGUocGFuZWwuaWQpJ1xuICB9XG59KVxuZXhwb3J0IGNsYXNzIE5nYlBhbmVsVG9nZ2xlIHtcbiAgQElucHV0KClcbiAgc2V0IG5nYlBhbmVsVG9nZ2xlKHBhbmVsOiBOZ2JQYW5lbCkge1xuICAgIGlmIChwYW5lbCkge1xuICAgICAgdGhpcy5wYW5lbCA9IHBhbmVsO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBhY2NvcmRpb246IE5nYkFjY29yZGlvbiwgQE9wdGlvbmFsKCkgQEhvc3QoKSBwdWJsaWMgcGFuZWw6IE5nYlBhbmVsKSB7fVxufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/accordion/accordion.module.js b/dist/sunbird-ui-components/esm2015/accordion/accordion.module.js new file mode 100644 index 0000000..88a1412 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/accordion/accordion.module.js @@ -0,0 +1,17 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { NgbAccordion, NgbPanel, NgbPanelTitle, NgbPanelContent, NgbPanelHeader, NgbPanelToggle } from './accordion'; +export { NgbAccordion, NgbPanel, NgbPanelTitle, NgbPanelContent, NgbPanelHeader, NgbPanelToggle } from './accordion'; +export { NgbAccordionConfig } from './accordion-config'; +/** @type {?} */ +const NGB_ACCORDION_DIRECTIVES = [NgbAccordion, NgbPanel, NgbPanelTitle, NgbPanelContent, NgbPanelHeader, NgbPanelToggle]; +export class NgbAccordionModule { +} +NgbAccordionModule.decorators = [ + { type: NgModule, args: [{ declarations: NGB_ACCORDION_DIRECTIVES, exports: NGB_ACCORDION_DIRECTIVES, imports: [CommonModule] },] } +]; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3JkaW9uLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImFjY29yZGlvbi9hY2NvcmRpb24ubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUU3QyxPQUFPLEVBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFbkgsT0FBTyxFQUNMLFlBQVksRUFDWixRQUFRLEVBQ1IsYUFBYSxFQUNiLGVBQWUsRUFFZixjQUFjLEVBRWQsY0FBYyxFQUNmLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLG9CQUFvQixDQUFDOztNQUVoRCx3QkFBd0IsR0FDMUIsQ0FBQyxZQUFZLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGNBQWMsQ0FBQztBQUc1RixNQUFNLE9BQU8sa0JBQWtCOzs7WUFEOUIsUUFBUSxTQUFDLEVBQUMsWUFBWSxFQUFFLHdCQUF3QixFQUFFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmltcG9ydCB7TmdiQWNjb3JkaW9uLCBOZ2JQYW5lbCwgTmdiUGFuZWxUaXRsZSwgTmdiUGFuZWxDb250ZW50LCBOZ2JQYW5lbEhlYWRlciwgTmdiUGFuZWxUb2dnbGV9IGZyb20gJy4vYWNjb3JkaW9uJztcblxuZXhwb3J0IHtcbiAgTmdiQWNjb3JkaW9uLFxuICBOZ2JQYW5lbCxcbiAgTmdiUGFuZWxUaXRsZSxcbiAgTmdiUGFuZWxDb250ZW50LFxuICBOZ2JQYW5lbENoYW5nZUV2ZW50LFxuICBOZ2JQYW5lbEhlYWRlcixcbiAgTmdiUGFuZWxIZWFkZXJDb250ZXh0LFxuICBOZ2JQYW5lbFRvZ2dsZVxufSBmcm9tICcuL2FjY29yZGlvbic7XG5leHBvcnQge05nYkFjY29yZGlvbkNvbmZpZ30gZnJvbSAnLi9hY2NvcmRpb24tY29uZmlnJztcblxuY29uc3QgTkdCX0FDQ09SRElPTl9ESVJFQ1RJVkVTID1cbiAgICBbTmdiQWNjb3JkaW9uLCBOZ2JQYW5lbCwgTmdiUGFuZWxUaXRsZSwgTmdiUGFuZWxDb250ZW50LCBOZ2JQYW5lbEhlYWRlciwgTmdiUGFuZWxUb2dnbGVdO1xuXG5ATmdNb2R1bGUoe2RlY2xhcmF0aW9uczogTkdCX0FDQ09SRElPTl9ESVJFQ1RJVkVTLCBleHBvcnRzOiBOR0JfQUNDT1JESU9OX0RJUkVDVElWRVMsIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdfSlcbmV4cG9ydCBjbGFzcyBOZ2JBY2NvcmRpb25Nb2R1bGUge1xufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/alert/alert-config.js b/dist/sunbird-ui-components/esm2015/alert/alert-config.js new file mode 100644 index 0000000..a32282f --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/alert/alert-config.js @@ -0,0 +1,29 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Injectable } from '@angular/core'; +import * as i0 from "@angular/core"; +/** + * A configuration service for the [NgbAlert](#/components/alert/api#NgbAlert) component. + * + * You can inject this service, typically in your root component, and customize its properties + * to provide default values for all alerts used in the application. + */ +export class NgbAlertConfig { + constructor() { + this.dismissible = true; + this.type = 'warning'; + } +} +NgbAlertConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } +]; +/** @nocollapse */ NgbAlertConfig.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function NgbAlertConfig_Factory() { return new NgbAlertConfig(); }, token: NgbAlertConfig, providedIn: "root" }); +if (false) { + /** @type {?} */ + NgbAlertConfig.prototype.dismissible; + /** @type {?} */ + NgbAlertConfig.prototype.type; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQtY29uZmlnLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiYWxlcnQvYWxlcnQtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQVN6QyxNQUFNLE9BQU8sY0FBYztJQUQzQjtRQUVFLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ25CLFNBQUksR0FBRyxTQUFTLENBQUM7S0FDbEI7OztZQUpBLFVBQVUsU0FBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUM7Ozs7O0lBRTlCLHFDQUFtQjs7SUFDbkIsOEJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBBIGNvbmZpZ3VyYXRpb24gc2VydmljZSBmb3IgdGhlIFtOZ2JBbGVydF0oIy9jb21wb25lbnRzL2FsZXJ0L2FwaSNOZ2JBbGVydCkgY29tcG9uZW50LlxuICpcbiAqIFlvdSBjYW4gaW5qZWN0IHRoaXMgc2VydmljZSwgdHlwaWNhbGx5IGluIHlvdXIgcm9vdCBjb21wb25lbnQsIGFuZCBjdXN0b21pemUgaXRzIHByb3BlcnRpZXNcbiAqIHRvIHByb3ZpZGUgZGVmYXVsdCB2YWx1ZXMgZm9yIGFsbCBhbGVydHMgdXNlZCBpbiB0aGUgYXBwbGljYXRpb24uXG4gKi9cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIE5nYkFsZXJ0Q29uZmlnIHtcbiAgZGlzbWlzc2libGUgPSB0cnVlO1xuICB0eXBlID0gJ3dhcm5pbmcnO1xufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/alert/alert.js b/dist/sunbird-ui-components/esm2015/alert/alert.js new file mode 100644 index 0000000..a7f0c49 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/alert/alert.js @@ -0,0 +1,109 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, Renderer2, ElementRef, ViewEncapsulation } from '@angular/core'; +import { NgbAlertConfig } from './alert-config'; +/** + * Alert is a component to provide contextual feedback messages for user. + * + * It supports several alert types and can be dismissed. + */ +export class NgbAlert { + /** + * @param {?} config + * @param {?} _renderer + * @param {?} _element + */ + constructor(config, _renderer, _element) { + this._renderer = _renderer; + this._element = _element; + /** + * An event emitted when the close button is clicked. It has no payload and only relevant for dismissible alerts. + */ + this.close = new EventEmitter(); + this.dismissible = config.dismissible; + this.type = config.type; + } + /** + * @return {?} + */ + closeHandler() { this.close.emit(null); } + /** + * @param {?} changes + * @return {?} + */ + ngOnChanges(changes) { + /** @type {?} */ + const typeChange = changes['type']; + if (typeChange && !typeChange.firstChange) { + this._renderer.removeClass(this._element.nativeElement, `alert-${typeChange.previousValue}`); + this._renderer.addClass(this._element.nativeElement, `alert-${typeChange.currentValue}`); + } + } + /** + * @return {?} + */ + ngOnInit() { this._renderer.addClass(this._element.nativeElement, `alert-${this.type}`); } +} +NgbAlert.decorators = [ + { type: Component, args: [{ + selector: 'ngb-alert', + changeDetection: ChangeDetectionStrategy.OnPush, + encapsulation: ViewEncapsulation.None, + host: { 'role': 'alert', 'class': 'alert', '[class.alert-dismissible]': 'dismissible' }, + template: ` + + + `, + styles: ["ngb-alert{display:block}"] + }] } +]; +/** @nocollapse */ +NgbAlert.ctorParameters = () => [ + { type: NgbAlertConfig }, + { type: Renderer2 }, + { type: ElementRef } +]; +NgbAlert.propDecorators = { + dismissible: [{ type: Input }], + type: [{ type: Input }], + close: [{ type: Output }] +}; +if (false) { + /** + * If `true`, alert can be dismissed by the user. + * + * The close button (×) will be displayed and you can be notified + * of the event with the `(close)` output. + * @type {?} + */ + NgbAlert.prototype.dismissible; + /** + * Type of the alert. + * + * Bootstrap provides styles for the following types: `'success'`, `'info'`, `'warning'`, `'danger'`, `'primary'`, + * `'secondary'`, `'light'` and `'dark'`. + * @type {?} + */ + NgbAlert.prototype.type; + /** + * An event emitted when the close button is clicked. It has no payload and only relevant for dismissible alerts. + * @type {?} + */ + NgbAlert.prototype.close; + /** + * @type {?} + * @private + */ + NgbAlert.prototype._renderer; + /** + * @type {?} + * @private + */ + NgbAlert.prototype._element; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJhbGVydC9hbGVydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFJVixpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7QUFxQjlDLE1BQU0sT0FBTyxRQUFROzs7Ozs7SUFxQm5CLFlBQVksTUFBc0IsRUFBVSxTQUFvQixFQUFVLFFBQW9CO1FBQWxELGNBQVMsR0FBVCxTQUFTLENBQVc7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFZOzs7O1FBRnBGLFVBQUssR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBR3pDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUN0QyxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDMUIsQ0FBQzs7OztJQUVELFlBQVksS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Ozs7O0lBRXpDLFdBQVcsQ0FBQyxPQUFzQjs7Y0FDMUIsVUFBVSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDbEMsSUFBSSxVQUFVLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFO1lBQ3pDLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLFNBQVMsVUFBVSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7WUFDN0YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsU0FBUyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztTQUMxRjtJQUNILENBQUM7Ozs7SUFFRCxRQUFRLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsU0FBUyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7OztZQWxEM0YsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxXQUFXO2dCQUNyQixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtnQkFDL0MsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7Z0JBQ3JDLElBQUksRUFBRSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxhQUFhLEVBQUM7Z0JBQ3JGLFFBQVEsRUFBRTs7Ozs7O0tBTVA7O2FBRUo7Ozs7WUFwQk8sY0FBYztZQVJwQixTQUFTO1lBQ1QsVUFBVTs7OzBCQW9DVCxLQUFLO21CQU9MLEtBQUs7b0JBSUwsTUFBTTs7Ozs7Ozs7OztJQVhQLCtCQUE4Qjs7Ozs7Ozs7SUFPOUIsd0JBQXNCOzs7OztJQUl0Qix5QkFBMkM7Ozs7O0lBRVAsNkJBQTRCOzs7OztJQUFFLDRCQUE0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgUmVuZGVyZXIyLFxuICBFbGVtZW50UmVmLFxuICBPbkNoYW5nZXMsXG4gIE9uSW5pdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7TmdiQWxlcnRDb25maWd9IGZyb20gJy4vYWxlcnQtY29uZmlnJztcblxuLyoqXG4gKiBBbGVydCBpcyBhIGNvbXBvbmVudCB0byBwcm92aWRlIGNvbnRleHR1YWwgZmVlZGJhY2sgbWVzc2FnZXMgZm9yIHVzZXIuXG4gKlxuICogSXQgc3VwcG9ydHMgc2V2ZXJhbCBhbGVydCB0eXBlcyBhbmQgY2FuIGJlIGRpc21pc3NlZC5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmdiLWFsZXJ0JyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGhvc3Q6IHsncm9sZSc6ICdhbGVydCcsICdjbGFzcyc6ICdhbGVydCcsICdbY2xhc3MuYWxlcnQtZGlzbWlzc2libGVdJzogJ2Rpc21pc3NpYmxlJ30sXG4gIHRlbXBsYXRlOiBgXG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDxidXR0b24gKm5nSWY9XCJkaXNtaXNzaWJsZVwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsb3NlXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgaTE4bi1hcmlhLWxhYmVsPVwiQEBuZ2IuYWxlcnQuY2xvc2VcIlxuICAgICAgKGNsaWNrKT1cImNsb3NlSGFuZGxlcigpXCI+XG4gICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICAgIGAsXG4gIHN0eWxlVXJsczogWycuL2FsZXJ0LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBOZ2JBbGVydCBpbXBsZW1lbnRzIE9uSW5pdCxcbiAgICBPbkNoYW5nZXMge1xuICAvKipcbiAgICogSWYgYHRydWVgLCBhbGVydCBjYW4gYmUgZGlzbWlzc2VkIGJ5IHRoZSB1c2VyLlxuICAgKlxuICAgKiBUaGUgY2xvc2UgYnV0dG9uICjDlykgd2lsbCBiZSBkaXNwbGF5ZWQgYW5kIHlvdSBjYW4gYmUgbm90aWZpZWRcbiAgICogb2YgdGhlIGV2ZW50IHdpdGggdGhlIGAoY2xvc2UpYCBvdXRwdXQuXG4gICAqL1xuICBASW5wdXQoKSBkaXNtaXNzaWJsZTogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFR5cGUgb2YgdGhlIGFsZXJ0LlxuICAgKlxuICAgKiBCb290c3RyYXAgcHJvdmlkZXMgc3R5bGVzIGZvciB0aGUgZm9sbG93aW5nIHR5cGVzOiBgJ3N1Y2Nlc3MnYCwgYCdpbmZvJ2AsIGAnd2FybmluZydgLCBgJ2RhbmdlcidgLCBgJ3ByaW1hcnknYCxcbiAgICogYCdzZWNvbmRhcnknYCwgYCdsaWdodCdgIGFuZCBgJ2RhcmsnYC5cbiAgICovXG4gIEBJbnB1dCgpIHR5cGU6IHN0cmluZztcbiAgLyoqXG4gICAqIEFuIGV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgY2xvc2UgYnV0dG9uIGlzIGNsaWNrZWQuIEl0IGhhcyBubyBwYXlsb2FkIGFuZCBvbmx5IHJlbGV2YW50IGZvciBkaXNtaXNzaWJsZSBhbGVydHMuXG4gICAqL1xuICBAT3V0cHV0KCkgY2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBOZ2JBbGVydENvbmZpZywgcHJpdmF0ZSBfcmVuZGVyZXI6IFJlbmRlcmVyMiwgcHJpdmF0ZSBfZWxlbWVudDogRWxlbWVudFJlZikge1xuICAgIHRoaXMuZGlzbWlzc2libGUgPSBjb25maWcuZGlzbWlzc2libGU7XG4gICAgdGhpcy50eXBlID0gY29uZmlnLnR5cGU7XG4gIH1cblxuICBjbG9zZUhhbmRsZXIoKSB7IHRoaXMuY2xvc2UuZW1pdChudWxsKTsgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBjb25zdCB0eXBlQ2hhbmdlID0gY2hhbmdlc1sndHlwZSddO1xuICAgIGlmICh0eXBlQ2hhbmdlICYmICF0eXBlQ2hhbmdlLmZpcnN0Q2hhbmdlKSB7XG4gICAgICB0aGlzLl9yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIGBhbGVydC0ke3R5cGVDaGFuZ2UucHJldmlvdXNWYWx1ZX1gKTtcbiAgICAgIHRoaXMuX3JlbmRlcmVyLmFkZENsYXNzKHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCwgYGFsZXJ0LSR7dHlwZUNoYW5nZS5jdXJyZW50VmFsdWV9YCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7IHRoaXMuX3JlbmRlcmVyLmFkZENsYXNzKHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCwgYGFsZXJ0LSR7dGhpcy50eXBlfWApOyB9XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/alert/alert.module.js b/dist/sunbird-ui-components/esm2015/alert/alert.module.js new file mode 100644 index 0000000..aac9212 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/alert/alert.module.js @@ -0,0 +1,15 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { NgbAlert } from './alert'; +export { NgbAlert } from './alert'; +export { NgbAlertConfig } from './alert-config'; +export class NgbAlertModule { +} +NgbAlertModule.decorators = [ + { type: NgModule, args: [{ declarations: [NgbAlert], exports: [NgbAlert], imports: [CommonModule], entryComponents: [NgbAlert] },] } +]; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQubW9kdWxlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiYWxlcnQvYWxlcnQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUU3QyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRWpDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDakMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRzlDLE1BQU0sT0FBTyxjQUFjOzs7WUFEMUIsUUFBUSxTQUFDLEVBQUMsWUFBWSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge05nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQge05nYkFsZXJ0fSBmcm9tICcuL2FsZXJ0JztcblxuZXhwb3J0IHtOZ2JBbGVydH0gZnJvbSAnLi9hbGVydCc7XG5leHBvcnQge05nYkFsZXJ0Q29uZmlnfSBmcm9tICcuL2FsZXJ0LWNvbmZpZyc7XG5cbkBOZ01vZHVsZSh7ZGVjbGFyYXRpb25zOiBbTmdiQWxlcnRdLCBleHBvcnRzOiBbTmdiQWxlcnRdLCBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSwgZW50cnlDb21wb25lbnRzOiBbTmdiQWxlcnRdfSlcbmV4cG9ydCBjbGFzcyBOZ2JBbGVydE1vZHVsZSB7XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/buttons/buttons.module.js b/dist/sunbird-ui-components/esm2015/buttons/buttons.module.js new file mode 100644 index 0000000..564803f --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/buttons/buttons.module.js @@ -0,0 +1,19 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgModule } from '@angular/core'; +import { NgbButtonLabel } from './label'; +import { NgbCheckBox } from './checkbox'; +import { NgbRadio, NgbRadioGroup } from './radio'; +export { NgbButtonLabel } from './label'; +export { NgbCheckBox } from './checkbox'; +export { NgbRadio, NgbRadioGroup } from './radio'; +/** @type {?} */ +const NGB_BUTTON_DIRECTIVES = [NgbButtonLabel, NgbCheckBox, NgbRadioGroup, NgbRadio]; +export class NgbButtonsModule { +} +NgbButtonsModule.decorators = [ + { type: NgModule, args: [{ declarations: NGB_BUTTON_DIRECTIVES, exports: NGB_BUTTON_DIRECTIVES },] } +]; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9ucy5tb2R1bGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJidXR0b25zL2J1dHRvbnMubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDdkMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUN2QyxPQUFPLEVBQUMsUUFBUSxFQUFFLGFBQWEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUVoRCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDdkMsT0FBTyxFQUFDLFFBQVEsRUFBRSxhQUFhLEVBQUMsTUFBTSxTQUFTLENBQUM7O01BRzFDLHFCQUFxQixHQUFHLENBQUMsY0FBYyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsUUFBUSxDQUFDO0FBR3BGLE1BQU0sT0FBTyxnQkFBZ0I7OztZQUQ1QixRQUFRLFNBQUMsRUFBQyxZQUFZLEVBQUUscUJBQXFCLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge05nYkJ1dHRvbkxhYmVsfSBmcm9tICcuL2xhYmVsJztcbmltcG9ydCB7TmdiQ2hlY2tCb3h9IGZyb20gJy4vY2hlY2tib3gnO1xuaW1wb3J0IHtOZ2JSYWRpbywgTmdiUmFkaW9Hcm91cH0gZnJvbSAnLi9yYWRpbyc7XG5cbmV4cG9ydCB7TmdiQnV0dG9uTGFiZWx9IGZyb20gJy4vbGFiZWwnO1xuZXhwb3J0IHtOZ2JDaGVja0JveH0gZnJvbSAnLi9jaGVja2JveCc7XG5leHBvcnQge05nYlJhZGlvLCBOZ2JSYWRpb0dyb3VwfSBmcm9tICcuL3JhZGlvJztcblxuXG5jb25zdCBOR0JfQlVUVE9OX0RJUkVDVElWRVMgPSBbTmdiQnV0dG9uTGFiZWwsIE5nYkNoZWNrQm94LCBOZ2JSYWRpb0dyb3VwLCBOZ2JSYWRpb107XG5cbkBOZ01vZHVsZSh7ZGVjbGFyYXRpb25zOiBOR0JfQlVUVE9OX0RJUkVDVElWRVMsIGV4cG9ydHM6IE5HQl9CVVRUT05fRElSRUNUSVZFU30pXG5leHBvcnQgY2xhc3MgTmdiQnV0dG9uc01vZHVsZSB7XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/buttons/checkbox.js b/dist/sunbird-ui-components/esm2015/buttons/checkbox.js new file mode 100644 index 0000000..437dafa --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/buttons/checkbox.js @@ -0,0 +1,160 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { ChangeDetectorRef, Directive, forwardRef, Input } from '@angular/core'; +import { NG_VALUE_ACCESSOR } from '@angular/forms'; +import { NgbButtonLabel } from './label'; +/** @type {?} */ +const NGB_CHECKBOX_VALUE_ACCESSOR = { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef((/** + * @return {?} + */ + () => NgbCheckBox)), + multi: true +}; +/** + * Allows to easily create Bootstrap-style checkbox buttons. + * + * Integrates with forms, so the value of a checked button is bound to the underlying form control + * either in a reactive or template-driven way. + */ +export class NgbCheckBox { + /** + * @param {?} _label + * @param {?} _cd + */ + constructor(_label, _cd) { + this._label = _label; + this._cd = _cd; + /** + * If `true`, the checkbox button will be disabled + */ + this.disabled = false; + /** + * The form control value when the checkbox is checked. + */ + this.valueChecked = true; + /** + * The form control value when the checkbox is unchecked. + */ + this.valueUnChecked = false; + this.onChange = (/** + * @param {?} _ + * @return {?} + */ + (_) => { }); + this.onTouched = (/** + * @return {?} + */ + () => { }); + } + /** + * @param {?} isFocused + * @return {?} + */ + set focused(isFocused) { + this._label.focused = isFocused; + if (!isFocused) { + this.onTouched(); + } + } + /** + * @param {?} $event + * @return {?} + */ + onInputChange($event) { + /** @type {?} */ + const modelToPropagate = $event.target.checked ? this.valueChecked : this.valueUnChecked; + this.onChange(modelToPropagate); + this.onTouched(); + this.writeValue(modelToPropagate); + } + /** + * @param {?} fn + * @return {?} + */ + registerOnChange(fn) { this.onChange = fn; } + /** + * @param {?} fn + * @return {?} + */ + registerOnTouched(fn) { this.onTouched = fn; } + /** + * @param {?} isDisabled + * @return {?} + */ + setDisabledState(isDisabled) { + this.disabled = isDisabled; + this._label.disabled = isDisabled; + } + /** + * @param {?} value + * @return {?} + */ + writeValue(value) { + this.checked = value === this.valueChecked; + this._label.active = this.checked; + // label won't be updated, if it is inside the OnPush component when [ngModel] changes + this._cd.markForCheck(); + } +} +NgbCheckBox.decorators = [ + { type: Directive, args: [{ + selector: '[ngbButton][type=checkbox]', + host: { + 'autocomplete': 'off', + '[checked]': 'checked', + '[disabled]': 'disabled', + '(change)': 'onInputChange($event)', + '(focus)': 'focused = true', + '(blur)': 'focused = false' + }, + providers: [NGB_CHECKBOX_VALUE_ACCESSOR] + },] } +]; +/** @nocollapse */ +NgbCheckBox.ctorParameters = () => [ + { type: NgbButtonLabel }, + { type: ChangeDetectorRef } +]; +NgbCheckBox.propDecorators = { + disabled: [{ type: Input }], + valueChecked: [{ type: Input }], + valueUnChecked: [{ type: Input }] +}; +if (false) { + /** @type {?} */ + NgbCheckBox.prototype.checked; + /** + * If `true`, the checkbox button will be disabled + * @type {?} + */ + NgbCheckBox.prototype.disabled; + /** + * The form control value when the checkbox is checked. + * @type {?} + */ + NgbCheckBox.prototype.valueChecked; + /** + * The form control value when the checkbox is unchecked. + * @type {?} + */ + NgbCheckBox.prototype.valueUnChecked; + /** @type {?} */ + NgbCheckBox.prototype.onChange; + /** @type {?} */ + NgbCheckBox.prototype.onTouched; + /** + * @type {?} + * @private + */ + NgbCheckBox.prototype._label; + /** + * @type {?} + * @private + */ + NgbCheckBox.prototype._cd; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3guanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJidXR0b25zL2NoZWNrYm94LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDOUUsT0FBTyxFQUF1QixpQkFBaUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXZFLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxTQUFTLENBQUM7O01BRWpDLDJCQUEyQixHQUFHO0lBQ2xDLE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVU7OztJQUFDLEdBQUcsRUFBRSxDQUFDLFdBQVcsRUFBQztJQUMxQyxLQUFLLEVBQUUsSUFBSTtDQUNaOzs7Ozs7O0FBcUJELE1BQU0sT0FBTyxXQUFXOzs7OztJQTRCdEIsWUFBb0IsTUFBc0IsRUFBVSxHQUFzQjtRQUF0RCxXQUFNLEdBQU4sTUFBTSxDQUFnQjtRQUFVLFFBQUcsR0FBSCxHQUFHLENBQW1COzs7O1FBdEJqRSxhQUFRLEdBQUcsS0FBSyxDQUFDOzs7O1FBS2pCLGlCQUFZLEdBQUcsSUFBSSxDQUFDOzs7O1FBS3BCLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBRWhDLGFBQVE7Ozs7UUFBRyxDQUFDLENBQU0sRUFBRSxFQUFFLEdBQUUsQ0FBQyxFQUFDO1FBQzFCLGNBQVM7OztRQUFHLEdBQUcsRUFBRSxHQUFFLENBQUMsRUFBQztJQVN3RCxDQUFDOzs7OztJQVA5RSxJQUFJLE9BQU8sQ0FBQyxTQUFrQjtRQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUM7UUFDaEMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNkLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUNsQjtJQUNILENBQUM7Ozs7O0lBSUQsYUFBYSxDQUFDLE1BQU07O2NBQ1osZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjO1FBQ3hGLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7Ozs7O0lBRUQsZ0JBQWdCLENBQUMsRUFBdUIsSUFBVSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7Ozs7O0lBRXZFLGlCQUFpQixDQUFDLEVBQWEsSUFBVSxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7Ozs7O0lBRS9ELGdCQUFnQixDQUFDLFVBQW1CO1FBQ2xDLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO1FBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztJQUNwQyxDQUFDOzs7OztJQUVELFVBQVUsQ0FBQyxLQUFLO1FBQ2QsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQztRQUMzQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBRWxDLHNGQUFzRjtRQUN0RixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7OztZQWhFRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLDRCQUE0QjtnQkFDdEMsSUFBSSxFQUFFO29CQUNKLGNBQWMsRUFBRSxLQUFLO29CQUNyQixXQUFXLEVBQUUsU0FBUztvQkFDdEIsWUFBWSxFQUFFLFVBQVU7b0JBQ3hCLFVBQVUsRUFBRSx1QkFBdUI7b0JBQ25DLFNBQVMsRUFBRSxnQkFBZ0I7b0JBQzNCLFFBQVEsRUFBRSxpQkFBaUI7aUJBQzVCO2dCQUNELFNBQVMsRUFBRSxDQUFDLDJCQUEyQixDQUFDO2FBQ3pDOzs7O1lBMUJPLGNBQWM7WUFIZCxpQkFBaUI7Ozt1QkFvQ3RCLEtBQUs7MkJBS0wsS0FBSzs2QkFLTCxLQUFLOzs7O0lBZk4sOEJBQVE7Ozs7O0lBS1IsK0JBQTBCOzs7OztJQUsxQixtQ0FBNkI7Ozs7O0lBSzdCLHFDQUFnQzs7SUFFaEMsK0JBQTBCOztJQUMxQixnQ0FBcUI7Ozs7O0lBU1QsNkJBQThCOzs7OztJQUFFLDBCQUE4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2hhbmdlRGV0ZWN0b3JSZWYsIERpcmVjdGl2ZSwgZm9yd2FyZFJlZiwgSW5wdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1J9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHtOZ2JCdXR0b25MYWJlbH0gZnJvbSAnLi9sYWJlbCc7XG5cbmNvbnN0IE5HQl9DSEVDS0JPWF9WQUxVRV9BQ0NFU1NPUiA9IHtcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE5nYkNoZWNrQm94KSxcbiAgbXVsdGk6IHRydWVcbn07XG5cblxuLyoqXG4gKiBBbGxvd3MgdG8gZWFzaWx5IGNyZWF0ZSBCb290c3RyYXAtc3R5bGUgY2hlY2tib3ggYnV0dG9ucy5cbiAqXG4gKiBJbnRlZ3JhdGVzIHdpdGggZm9ybXMsIHNvIHRoZSB2YWx1ZSBvZiBhIGNoZWNrZWQgYnV0dG9uIGlzIGJvdW5kIHRvIHRoZSB1bmRlcmx5aW5nIGZvcm0gY29udHJvbFxuICogZWl0aGVyIGluIGEgcmVhY3RpdmUgb3IgdGVtcGxhdGUtZHJpdmVuIHdheS5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW25nYkJ1dHRvbl1bdHlwZT1jaGVja2JveF0nLFxuICBob3N0OiB7XG4gICAgJ2F1dG9jb21wbGV0ZSc6ICdvZmYnLFxuICAgICdbY2hlY2tlZF0nOiAnY2hlY2tlZCcsXG4gICAgJ1tkaXNhYmxlZF0nOiAnZGlzYWJsZWQnLFxuICAgICcoY2hhbmdlKSc6ICdvbklucHV0Q2hhbmdlKCRldmVudCknLFxuICAgICcoZm9jdXMpJzogJ2ZvY3VzZWQgPSB0cnVlJyxcbiAgICAnKGJsdXIpJzogJ2ZvY3VzZWQgPSBmYWxzZSdcbiAgfSxcbiAgcHJvdmlkZXJzOiBbTkdCX0NIRUNLQk9YX1ZBTFVFX0FDQ0VTU09SXVxufSlcbmV4cG9ydCBjbGFzcyBOZ2JDaGVja0JveCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgY2hlY2tlZDtcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY2hlY2tib3ggYnV0dG9uIHdpbGwgYmUgZGlzYWJsZWRcbiAgICovXG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFRoZSBmb3JtIGNvbnRyb2wgdmFsdWUgd2hlbiB0aGUgY2hlY2tib3ggaXMgY2hlY2tlZC5cbiAgICovXG4gIEBJbnB1dCgpIHZhbHVlQ2hlY2tlZCA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFRoZSBmb3JtIGNvbnRyb2wgdmFsdWUgd2hlbiB0aGUgY2hlY2tib3ggaXMgdW5jaGVja2VkLlxuICAgKi9cbiAgQElucHV0KCkgdmFsdWVVbkNoZWNrZWQgPSBmYWxzZTtcblxuICBvbkNoYW5nZSA9IChfOiBhbnkpID0+IHt9O1xuICBvblRvdWNoZWQgPSAoKSA9PiB7fTtcblxuICBzZXQgZm9jdXNlZChpc0ZvY3VzZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9sYWJlbC5mb2N1c2VkID0gaXNGb2N1c2VkO1xuICAgIGlmICghaXNGb2N1c2VkKSB7XG4gICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2xhYmVsOiBOZ2JCdXR0b25MYWJlbCwgcHJpdmF0ZSBfY2Q6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIG9uSW5wdXRDaGFuZ2UoJGV2ZW50KSB7XG4gICAgY29uc3QgbW9kZWxUb1Byb3BhZ2F0ZSA9ICRldmVudC50YXJnZXQuY2hlY2tlZCA/IHRoaXMudmFsdWVDaGVja2VkIDogdGhpcy52YWx1ZVVuQ2hlY2tlZDtcbiAgICB0aGlzLm9uQ2hhbmdlKG1vZGVsVG9Qcm9wYWdhdGUpO1xuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgdGhpcy53cml0ZVZhbHVlKG1vZGVsVG9Qcm9wYWdhdGUpO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBhbnkpID0+IGFueSk6IHZvaWQgeyB0aGlzLm9uQ2hhbmdlID0gZm47IH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gYW55KTogdm9pZCB7IHRoaXMub25Ub3VjaGVkID0gZm47IH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB0aGlzLl9sYWJlbC5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlKSB7XG4gICAgdGhpcy5jaGVja2VkID0gdmFsdWUgPT09IHRoaXMudmFsdWVDaGVja2VkO1xuICAgIHRoaXMuX2xhYmVsLmFjdGl2ZSA9IHRoaXMuY2hlY2tlZDtcblxuICAgIC8vIGxhYmVsIHdvbid0IGJlIHVwZGF0ZWQsIGlmIGl0IGlzIGluc2lkZSB0aGUgT25QdXNoIGNvbXBvbmVudCB3aGVuIFtuZ01vZGVsXSBjaGFuZ2VzXG4gICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/buttons/label.js b/dist/sunbird-ui-components/esm2015/buttons/label.js new file mode 100644 index 0000000..0cdb69b --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/buttons/label.js @@ -0,0 +1,22 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Directive } from '@angular/core'; +export class NgbButtonLabel { +} +NgbButtonLabel.decorators = [ + { type: Directive, args: [{ + selector: '[ngbButtonLabel]', + host: { '[class.btn]': 'true', '[class.active]': 'active', '[class.disabled]': 'disabled', '[class.focus]': 'focused' } + },] } +]; +if (false) { + /** @type {?} */ + NgbButtonLabel.prototype.active; + /** @type {?} */ + NgbButtonLabel.prototype.disabled; + /** @type {?} */ + NgbButtonLabel.prototype.focused; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFiZWwuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJidXR0b25zL2xhYmVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBT3hDLE1BQU0sT0FBTyxjQUFjOzs7WUFMMUIsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxrQkFBa0I7Z0JBQzVCLElBQUksRUFDQSxFQUFDLGFBQWEsRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFDO2FBQ3BIOzs7O0lBRUMsZ0NBQWdCOztJQUNoQixrQ0FBa0I7O0lBQ2xCLGlDQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGlyZWN0aXZlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW25nYkJ1dHRvbkxhYmVsXScsXG4gIGhvc3Q6XG4gICAgICB7J1tjbGFzcy5idG5dJzogJ3RydWUnLCAnW2NsYXNzLmFjdGl2ZV0nOiAnYWN0aXZlJywgJ1tjbGFzcy5kaXNhYmxlZF0nOiAnZGlzYWJsZWQnLCAnW2NsYXNzLmZvY3VzXSc6ICdmb2N1c2VkJ31cbn0pXG5leHBvcnQgY2xhc3MgTmdiQnV0dG9uTGFiZWwge1xuICBhY3RpdmU6IGJvb2xlYW47XG4gIGRpc2FibGVkOiBib29sZWFuO1xuICBmb2N1c2VkOiBib29sZWFuO1xufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/buttons/radio.js b/dist/sunbird-ui-components/esm2015/buttons/radio.js new file mode 100644 index 0000000..a4d8e4b --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/buttons/radio.js @@ -0,0 +1,333 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { ChangeDetectorRef, Directive, ElementRef, forwardRef, Input, Renderer2 } from '@angular/core'; +import { NG_VALUE_ACCESSOR } from '@angular/forms'; +import { NgbButtonLabel } from './label'; +/** @type {?} */ +const NGB_RADIO_VALUE_ACCESSOR = { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef((/** + * @return {?} + */ + () => NgbRadioGroup)), + multi: true +}; +/** @type {?} */ +let nextId = 0; +/** + * Allows to easily create Bootstrap-style radio buttons. + * + * Integrates with forms, so the value of a checked button is bound to the underlying form control + * either in a reactive or template-driven way. + */ +export class NgbRadioGroup { + constructor() { + this._radios = new Set(); + this._value = null; + /** + * Name of the radio group applied to radio input elements. + * + * Will be applied to all radio input elements inside the group, + * unless [`NgbRadio`](#/components/buttons/api#NgbRadio)'s specify names themselves. + * + * If not provided, will be generated in the `ngb-radio-xx` format. + */ + this.name = `ngb-radio-${nextId++}`; + this.onChange = (/** + * @param {?} _ + * @return {?} + */ + (_) => { }); + this.onTouched = (/** + * @return {?} + */ + () => { }); + } + /** + * @return {?} + */ + get disabled() { return this._disabled; } + /** + * @param {?} isDisabled + * @return {?} + */ + set disabled(isDisabled) { this.setDisabledState(isDisabled); } + /** + * @param {?} radio + * @return {?} + */ + onRadioChange(radio) { + this.writeValue(radio.value); + this.onChange(radio.value); + } + /** + * @return {?} + */ + onRadioValueUpdate() { this._updateRadiosValue(); } + /** + * @param {?} radio + * @return {?} + */ + register(radio) { this._radios.add(radio); } + /** + * @param {?} fn + * @return {?} + */ + registerOnChange(fn) { this.onChange = fn; } + /** + * @param {?} fn + * @return {?} + */ + registerOnTouched(fn) { this.onTouched = fn; } + /** + * @param {?} isDisabled + * @return {?} + */ + setDisabledState(isDisabled) { + this._disabled = isDisabled; + this._updateRadiosDisabled(); + } + /** + * @param {?} radio + * @return {?} + */ + unregister(radio) { this._radios.delete(radio); } + /** + * @param {?} value + * @return {?} + */ + writeValue(value) { + this._value = value; + this._updateRadiosValue(); + } + /** + * @private + * @return {?} + */ + _updateRadiosValue() { this._radios.forEach((/** + * @param {?} radio + * @return {?} + */ + (radio) => radio.updateValue(this._value))); } + /** + * @private + * @return {?} + */ + _updateRadiosDisabled() { this._radios.forEach((/** + * @param {?} radio + * @return {?} + */ + (radio) => radio.updateDisabled())); } +} +NgbRadioGroup.decorators = [ + { type: Directive, args: [{ selector: '[ngbRadioGroup]', host: { 'role': 'radiogroup' }, providers: [NGB_RADIO_VALUE_ACCESSOR] },] } +]; +NgbRadioGroup.propDecorators = { + name: [{ type: Input }] +}; +if (false) { + /** + * @type {?} + * @private + */ + NgbRadioGroup.prototype._radios; + /** + * @type {?} + * @private + */ + NgbRadioGroup.prototype._value; + /** + * @type {?} + * @private + */ + NgbRadioGroup.prototype._disabled; + /** + * Name of the radio group applied to radio input elements. + * + * Will be applied to all radio input elements inside the group, + * unless [`NgbRadio`](#/components/buttons/api#NgbRadio)'s specify names themselves. + * + * If not provided, will be generated in the `ngb-radio-xx` format. + * @type {?} + */ + NgbRadioGroup.prototype.name; + /** @type {?} */ + NgbRadioGroup.prototype.onChange; + /** @type {?} */ + NgbRadioGroup.prototype.onTouched; +} +/** + * A directive that marks an input of type "radio" as a part of the + * [`NgbRadioGroup`](#/components/buttons/api#NgbRadioGroup). + */ +export class NgbRadio { + /** + * @param {?} _group + * @param {?} _label + * @param {?} _renderer + * @param {?} _element + * @param {?} _cd + */ + constructor(_group, _label, _renderer, _element, _cd) { + this._group = _group; + this._label = _label; + this._renderer = _renderer; + this._element = _element; + this._cd = _cd; + this._value = null; + this._group.register(this); + this.updateDisabled(); + } + /** + * The form control value when current radio button is checked. + * @param {?} value + * @return {?} + */ + set value(value) { + this._value = value; + /** @type {?} */ + const stringValue = value ? value.toString() : ''; + this._renderer.setProperty(this._element.nativeElement, 'value', stringValue); + this._group.onRadioValueUpdate(); + } + /** + * If `true`, current radio button will be disabled. + * @param {?} isDisabled + * @return {?} + */ + set disabled(isDisabled) { + this._disabled = isDisabled !== false; + this.updateDisabled(); + } + /** + * @param {?} isFocused + * @return {?} + */ + set focused(isFocused) { + if (this._label) { + this._label.focused = isFocused; + } + if (!isFocused) { + this._group.onTouched(); + } + } + /** + * @return {?} + */ + get checked() { return this._checked; } + /** + * @return {?} + */ + get disabled() { return this._group.disabled || this._disabled; } + /** + * @return {?} + */ + get value() { return this._value; } + /** + * @return {?} + */ + get nameAttr() { return this.name || this._group.name; } + /** + * @return {?} + */ + ngOnDestroy() { this._group.unregister(this); } + /** + * @return {?} + */ + onChange() { this._group.onRadioChange(this); } + /** + * @param {?} value + * @return {?} + */ + updateValue(value) { + // label won't be updated, if it is inside the OnPush component when [ngModel] changes + if (this.value !== value) { + this._cd.markForCheck(); + } + this._checked = this.value === value; + this._label.active = this._checked; + } + /** + * @return {?} + */ + updateDisabled() { this._label.disabled = this.disabled; } +} +NgbRadio.decorators = [ + { type: Directive, args: [{ + selector: '[ngbButton][type=radio]', + host: { + '[checked]': 'checked', + '[disabled]': 'disabled', + '[name]': 'nameAttr', + '(change)': 'onChange()', + '(focus)': 'focused = true', + '(blur)': 'focused = false' + } + },] } +]; +/** @nocollapse */ +NgbRadio.ctorParameters = () => [ + { type: NgbRadioGroup }, + { type: NgbButtonLabel }, + { type: Renderer2 }, + { type: ElementRef }, + { type: ChangeDetectorRef } +]; +NgbRadio.propDecorators = { + name: [{ type: Input }], + value: [{ type: Input, args: ['value',] }], + disabled: [{ type: Input, args: ['disabled',] }] +}; +if (false) { + /** + * @type {?} + * @private + */ + NgbRadio.prototype._checked; + /** + * @type {?} + * @private + */ + NgbRadio.prototype._disabled; + /** + * @type {?} + * @private + */ + NgbRadio.prototype._value; + /** + * The value for the 'name' property of the input element. + * + * All inputs of the radio group should have the same name. If not specified, + * the name of the enclosing group is used. + * @type {?} + */ + NgbRadio.prototype.name; + /** + * @type {?} + * @private + */ + NgbRadio.prototype._group; + /** + * @type {?} + * @private + */ + NgbRadio.prototype._label; + /** + * @type {?} + * @private + */ + NgbRadio.prototype._renderer; + /** + * @type {?} + * @private + */ + NgbRadio.prototype._element; + /** + * @type {?} + * @private + */ + NgbRadio.prototype._cd; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8uanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJidXR0b25zL3JhZGlvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFhLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNoSCxPQUFPLEVBQXVCLGlCQUFpQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLFNBQVMsQ0FBQzs7TUFFakMsd0JBQXdCLEdBQUc7SUFDL0IsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixXQUFXLEVBQUUsVUFBVTs7O0lBQUMsR0FBRyxFQUFFLENBQUMsYUFBYSxFQUFDO0lBQzVDLEtBQUssRUFBRSxJQUFJO0NBQ1o7O0lBRUcsTUFBTSxHQUFHLENBQUM7Ozs7Ozs7QUFTZCxNQUFNLE9BQU8sYUFBYTtJQUQxQjtRQUVVLFlBQU8sR0FBa0IsSUFBSSxHQUFHLEVBQVksQ0FBQztRQUM3QyxXQUFNLEdBQUcsSUFBSSxDQUFDOzs7Ozs7Ozs7UUFjYixTQUFJLEdBQUcsYUFBYSxNQUFNLEVBQUUsRUFBRSxDQUFDO1FBRXhDLGFBQVE7Ozs7UUFBRyxDQUFDLENBQU0sRUFBRSxFQUFFLEdBQUUsQ0FBQyxFQUFDO1FBQzFCLGNBQVM7OztRQUFHLEdBQUcsRUFBRSxHQUFFLENBQUMsRUFBQztJQTZCdkIsQ0FBQzs7OztJQTNDQyxJQUFJLFFBQVEsS0FBSyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDOzs7OztJQUN6QyxJQUFJLFFBQVEsQ0FBQyxVQUFtQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7Ozs7O0lBZXhFLGFBQWEsQ0FBQyxLQUFlO1FBQzNCLElBQUksQ0FBQyxV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QUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQztRQUNyQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3JDLENBQUM7Ozs7SUFFRCxjQUFjLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7OztZQWxGM0QsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSx5QkFBeUI7Z0JBQ25DLElBQUksRUFBRTtvQkFDSixXQUFXLEVBQUUsU0FBUztvQkFDdEIsWUFBWSxFQUFFLFVBQVU7b0JBQ3hCLFFBQVEsRUFBRSxVQUFVO29CQUNwQixVQUFVLEVBQUUsWUFBWTtvQkFDeEIsU0FBUyxFQUFFLGdCQUFnQjtvQkFDM0IsUUFBUSxFQUFFLGlCQUFpQjtpQkFDNUI7YUFDRjs7OztZQW9EcUIsYUFBYTtZQXRJM0IsY0FBYztZQUgwRCxTQUFTO1lBQW5ELFVBQVU7WUFBeEMsaUJBQWlCOzs7bUJBaUd0QixLQUFLO29CQUtMLEtBQUssU0FBQyxPQUFPO3VCQVdiLEtBQUssU0FBQyxVQUFVOzs7Ozs7O0lBMUJqQiw0QkFBMEI7Ozs7O0lBQzFCLDZCQUEyQjs7Ozs7SUFDM0IsMEJBQTJCOzs7Ozs7OztJQVEzQix3QkFBc0I7Ozs7O0lBd0NsQiwwQkFBNkI7Ozs7O0lBQUUsMEJBQThCOzs7OztJQUFFLDZCQUE0Qjs7Ozs7SUFDM0YsNEJBQThDOzs7OztJQUFFLHVCQUE4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2hhbmdlRGV0ZWN0b3JSZWYsIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgZm9yd2FyZFJlZiwgSW5wdXQsIE9uRGVzdHJveSwgUmVuZGVyZXIyfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7TmdiQnV0dG9uTGFiZWx9IGZyb20gJy4vbGFiZWwnO1xuXG5jb25zdCBOR0JfUkFESU9fVkFMVUVfQUNDRVNTT1IgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBOZ2JSYWRpb0dyb3VwKSxcbiAgbXVsdGk6IHRydWVcbn07XG5cbmxldCBuZXh0SWQgPSAwO1xuXG4vKipcbiAqIEFsbG93cyB0byBlYXNpbHkgY3JlYXRlIEJvb3RzdHJhcC1zdHlsZSByYWRpbyBidXR0b25zLlxuICpcbiAqIEludGVncmF0ZXMgd2l0aCBmb3Jtcywgc28gdGhlIHZhbHVlIG9mIGEgY2hlY2tlZCBidXR0b24gaXMgYm91bmQgdG8gdGhlIHVuZGVybHlpbmcgZm9ybSBjb250cm9sXG4gKiBlaXRoZXIgaW4gYSByZWFjdGl2ZSBvciB0ZW1wbGF0ZS1kcml2ZW4gd2F5LlxuICovXG5ARGlyZWN0aXZlKHtzZWxlY3RvcjogJ1tuZ2JSYWRpb0dyb3VwXScsIGhvc3Q6IHsncm9sZSc6ICdyYWRpb2dyb3VwJ30sIHByb3ZpZGVyczogW05HQl9SQURJT19WQUxVRV9BQ0NFU1NPUl19KVxuZXhwb3J0IGNsYXNzIE5nYlJhZGlvR3JvdXAgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIHByaXZhdGUgX3JhZGlvczogU2V0PE5nYlJhZGlvPiA9IG5ldyBTZXQ8TmdiUmFkaW8+KCk7XG4gIHByaXZhdGUgX3ZhbHVlID0gbnVsbDtcbiAgcHJpdmF0ZSBfZGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgZ2V0IGRpc2FibGVkKCkgeyByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7IH1cbiAgc2V0IGRpc2FibGVkKGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHsgdGhpcy5zZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQpOyB9XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIHJhZGlvIGdyb3VwIGFwcGxpZWQgdG8gcmFkaW8gaW5wdXQgZWxlbWVudHMuXG4gICAqXG4gICAqIFdpbGwgYmUgYXBwbGllZCB0byBhbGwgcmFkaW8gaW5wdXQgZWxlbWVudHMgaW5zaWRlIHRoZSBncm91cCxcbiAgICogdW5sZXNzIFtgTmdiUmFkaW9gXSgjL2NvbXBvbmVudHMvYnV0dG9ucy9hcGkjTmdiUmFkaW8pJ3Mgc3BlY2lmeSBuYW1lcyB0aGVtc2VsdmVzLlxuICAgKlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIHdpbGwgYmUgZ2VuZXJhdGVkIGluIHRoZSBgbmdiLXJhZGlvLXh4YCBmb3JtYXQuXG4gICAqL1xuICBASW5wdXQoKSBuYW1lID0gYG5nYi1yYWRpby0ke25leHRJZCsrfWA7XG5cbiAgb25DaGFuZ2UgPSAoXzogYW55KSA9PiB7fTtcbiAgb25Ub3VjaGVkID0gKCkgPT4ge307XG5cbiAgb25SYWRpb0NoYW5nZShyYWRpbzogTmdiUmFkaW8pIHtcbiAgICB0aGlzLndyaXRlVmFsdWUocmFkaW8udmFsdWUpO1xuICAgIHRoaXMub25DaGFuZ2UocmFkaW8udmFsdWUpO1xuICB9XG5cbiAgb25SYWRpb1ZhbHVlVXBkYXRlKCkgeyB0aGlzLl91cGRhdGVSYWRpb3NWYWx1ZSgpOyB9XG5cbiAgcmVnaXN0ZXIocmFkaW86IE5nYlJhZGlvKSB7IHRoaXMuX3JhZGlvcy5hZGQocmFkaW8pOyB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBhbnkpID0+IGFueSk6IHZvaWQgeyB0aGlzLm9uQ2hhbmdlID0gZm47IH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gYW55KTogdm9pZCB7IHRoaXMub25Ub3VjaGVkID0gZm47IH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgdGhpcy5fdXBkYXRlUmFkaW9zRGlzYWJsZWQoKTtcbiAgfVxuXG4gIHVucmVnaXN0ZXIocmFkaW86IE5nYlJhZGlvKSB7IHRoaXMuX3JhZGlvcy5kZWxldGUocmFkaW8pOyB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZSkge1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5fdXBkYXRlUmFkaW9zVmFsdWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZVJhZGlvc1ZhbHVlKCkgeyB0aGlzLl9yYWRpb3MuZm9yRWFjaCgocmFkaW8pID0+IHJhZGlvLnVwZGF0ZVZhbHVlKHRoaXMuX3ZhbHVlKSk7IH1cbiAgcHJpdmF0ZSBfdXBkYXRlUmFkaW9zRGlzYWJsZWQoKSB7IHRoaXMuX3JhZGlvcy5mb3JFYWNoKChyYWRpbykgPT4gcmFkaW8udXBkYXRlRGlzYWJsZWQoKSk7IH1cbn1cblxuXG4vKipcbiAqIEEgZGlyZWN0aXZlIHRoYXQgbWFya3MgYW4gaW5wdXQgb2YgdHlwZSBcInJhZGlvXCIgYXMgYSBwYXJ0IG9mIHRoZVxuICogW2BOZ2JSYWRpb0dyb3VwYF0oIy9jb21wb25lbnRzL2J1dHRvbnMvYXBpI05nYlJhZGlvR3JvdXApLlxuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbbmdiQnV0dG9uXVt0eXBlPXJhZGlvXScsXG4gIGhvc3Q6IHtcbiAgICAnW2NoZWNrZWRdJzogJ2NoZWNrZWQnLFxuICAgICdbZGlzYWJsZWRdJzogJ2Rpc2FibGVkJyxcbiAgICAnW25hbWVdJzogJ25hbWVBdHRyJyxcbiAgICAnKGNoYW5nZSknOiAnb25DaGFuZ2UoKScsXG4gICAgJyhmb2N1cyknOiAnZm9jdXNlZCA9IHRydWUnLFxuICAgICcoYmx1ciknOiAnZm9jdXNlZCA9IGZhbHNlJ1xuICB9XG59KVxuZXhwb3J0IGNsYXNzIE5nYlJhZGlvIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBfY2hlY2tlZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZGlzYWJsZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgX3ZhbHVlOiBhbnkgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgZm9yIHRoZSAnbmFtZScgcHJvcGVydHkgb2YgdGhlIGlucHV0IGVsZW1lbnQuXG4gICAqXG4gICAqIEFsbCBpbnB1dHMgb2YgdGhlIHJhZGlvIGdyb3VwIHNob3VsZCBoYXZlIHRoZSBzYW1lIG5hbWUuIElmIG5vdCBzcGVjaWZpZWQsXG4gICAqIHRoZSBuYW1lIG9mIHRoZSBlbmNsb3NpbmcgZ3JvdXAgaXMgdXNlZC5cbiAgICovXG4gIEBJbnB1dCgpIG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGZvcm0gY29udHJvbCB2YWx1ZSB3aGVuIGN1cnJlbnQgcmFkaW8gYnV0dG9uIGlzIGNoZWNrZWQuXG4gICAqL1xuICBASW5wdXQoJ3ZhbHVlJylcbiAgc2V0IHZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgIGNvbnN0IHN0cmluZ1ZhbHVlID0gdmFsdWUgPyB2YWx1ZS50b1N0cmluZygpIDogJyc7XG4gICAgdGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LCAndmFsdWUnLCBzdHJpbmdWYWx1ZSk7XG4gICAgdGhpcy5fZ3JvdXAub25SYWRpb1ZhbHVlVXBkYXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogSWYgYHRydWVgLCBjdXJyZW50IHJhZGlvIGJ1dHRvbiB3aWxsIGJlIGRpc2FibGVkLlxuICAgKi9cbiAgQElucHV0KCdkaXNhYmxlZCcpXG4gIHNldCBkaXNhYmxlZChpc0Rpc2FibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSBpc0Rpc2FibGVkICE9PSBmYWxzZTtcbiAgICB0aGlzLnVwZGF0ZURpc2FibGVkKCk7XG4gIH1cblxuICBzZXQgZm9jdXNlZChpc0ZvY3VzZWQ6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5fbGFiZWwpIHtcbiAgICAgIHRoaXMuX2xhYmVsLmZvY3VzZWQgPSBpc0ZvY3VzZWQ7XG4gICAgfVxuICAgIGlmICghaXNGb2N1c2VkKSB7XG4gICAgICB0aGlzLl9ncm91cC5vblRvdWNoZWQoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgY2hlY2tlZCgpIHsgcmV0dXJuIHRoaXMuX2NoZWNrZWQ7IH1cblxuICBnZXQgZGlzYWJsZWQoKSB7IHJldHVybiB0aGlzLl9ncm91cC5kaXNhYmxlZCB8fCB0aGlzLl9kaXNhYmxlZDsgfVxuXG4gIGdldCB2YWx1ZSgpIHsgcmV0dXJuIHRoaXMuX3ZhbHVlOyB9XG5cbiAgZ2V0IG5hbWVBdHRyKCkgeyByZXR1cm4gdGhpcy5uYW1lIHx8IHRoaXMuX2dyb3VwLm5hbWU7IH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICAgIHByaXZhdGUgX2dyb3VwOiBOZ2JSYWRpb0dyb3VwLCBwcml2YXRlIF9sYWJlbDogTmdiQnV0dG9uTGFiZWwsIHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICBwcml2YXRlIF9lbGVtZW50OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+LCBwcml2YXRlIF9jZDogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICB0aGlzLl9ncm91cC5yZWdpc3Rlcih0aGlzKTtcbiAgICB0aGlzLnVwZGF0ZURpc2FibGVkKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHsgdGhpcy5fZ3JvdXAudW5yZWdpc3Rlcih0aGlzKTsgfVxuXG4gIG9uQ2hhbmdlKCkgeyB0aGlzLl9ncm91cC5vblJhZGlvQ2hhbmdlKHRoaXMpOyB9XG5cbiAgdXBkYXRlVmFsdWUodmFsdWUpIHtcbiAgICAvLyBsYWJlbCB3b24ndCBiZSB1cGRhdGVkLCBpZiBpdCBpcyBpbnNpZGUgdGhlIE9uUHVzaCBjb21wb25lbnQgd2hlbiBbbmdNb2RlbF0gY2hhbmdlc1xuICAgIGlmICh0aGlzLnZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fY2hlY2tlZCA9IHRoaXMudmFsdWUgPT09IHZhbHVlO1xuICAgIHRoaXMuX2xhYmVsLmFjdGl2ZSA9IHRoaXMuX2NoZWNrZWQ7XG4gIH1cblxuICB1cGRhdGVEaXNhYmxlZCgpIHsgdGhpcy5fbGFiZWwuZGlzYWJsZWQgPSB0aGlzLmRpc2FibGVkOyB9XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/card/card-config.js b/dist/sunbird-ui-components/esm2015/card/card-config.js new file mode 100644 index 0000000..d15c423 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/card/card-config.js @@ -0,0 +1,29 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Injectable } from '@angular/core'; +import * as i0 from "@angular/core"; +/** + * A configuration service for the [SbCard](#/components/alert/api#SbCard) component. + * + * You can inject this service, typically in your root component, and customize its properties + * to provide default values for all alerts used in the application. + */ +export class SbCardConfig { + constructor() { + this.dismissible = true; + this.type = 'warning'; + } +} +SbCardConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } +]; +/** @nocollapse */ SbCardConfig.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function SbCardConfig_Factory() { return new SbCardConfig(); }, token: SbCardConfig, providedIn: "root" }); +if (false) { + /** @type {?} */ + SbCardConfig.prototype.dismissible; + /** @type {?} */ + SbCardConfig.prototype.type; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC1jb25maWcuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjYXJkL2NhcmQtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQVN6QyxNQUFNLE9BQU8sWUFBWTtJQUR6QjtRQUVFLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ25CLFNBQUksR0FBRyxTQUFTLENBQUM7S0FDbEI7OztZQUpBLFVBQVUsU0FBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUM7Ozs7O0lBRTlCLG1DQUFtQjs7SUFDbkIsNEJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBBIGNvbmZpZ3VyYXRpb24gc2VydmljZSBmb3IgdGhlIFtTYkNhcmRdKCMvY29tcG9uZW50cy9hbGVydC9hcGkjU2JDYXJkKSBjb21wb25lbnQuXG4gKlxuICogWW91IGNhbiBpbmplY3QgdGhpcyBzZXJ2aWNlLCB0eXBpY2FsbHkgaW4geW91ciByb290IGNvbXBvbmVudCwgYW5kIGN1c3RvbWl6ZSBpdHMgcHJvcGVydGllc1xuICogdG8gcHJvdmlkZSBkZWZhdWx0IHZhbHVlcyBmb3IgYWxsIGFsZXJ0cyB1c2VkIGluIHRoZSBhcHBsaWNhdGlvbi5cbiAqL1xuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgU2JDYXJkQ29uZmlnIHtcbiAgZGlzbWlzc2libGUgPSB0cnVlO1xuICB0eXBlID0gJ3dhcm5pbmcnO1xufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/card/card.js b/dist/sunbird-ui-components/esm2015/card/card.js new file mode 100644 index 0000000..58adcfd --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/card/card.js @@ -0,0 +1,109 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, Renderer2, ElementRef, ViewEncapsulation } from '@angular/core'; +import { SbCardConfig } from './card-config'; +/** + * Alert is a component to provide contextual feedback messages for user. + * + * It supports several alert types and can be dismissed. + */ +export class SbCard { + /** + * @param {?} config + * @param {?} _renderer + * @param {?} _element + */ + constructor(config, _renderer, _element) { + this._renderer = _renderer; + this._element = _element; + /** + * An event emitted when the close button is clicked. It has no payload and only relevant for dismissible alerts. + */ + this.close = new EventEmitter(); + this.dismissible = config.dismissible; + this.type = config.type; + } + /** + * @return {?} + */ + closeHandler() { this.close.emit(null); } + /** + * @param {?} changes + * @return {?} + */ + ngOnChanges(changes) { + /** @type {?} */ + const typeChange = changes['type']; + if (typeChange && !typeChange.firstChange) { + this._renderer.removeClass(this._element.nativeElement, `alert-${typeChange.previousValue}`); + this._renderer.addClass(this._element.nativeElement, `alert-${typeChange.currentValue}`); + } + } + /** + * @return {?} + */ + ngOnInit() { this._renderer.addClass(this._element.nativeElement, `alert-${this.type}`); } +} +SbCard.decorators = [ + { type: Component, args: [{ + selector: 'sb-card', + changeDetection: ChangeDetectionStrategy.OnPush, + encapsulation: ViewEncapsulation.None, + host: { 'role': 'alert', 'class': 'alert', '[class.alert-dismissible]': 'dismissible' }, + template: ` + + + `, + styles: ["ngb-alert{display:block}"] + }] } +]; +/** @nocollapse */ +SbCard.ctorParameters = () => [ + { type: SbCardConfig }, + { type: Renderer2 }, + { type: ElementRef } +]; +SbCard.propDecorators = { + dismissible: [{ type: Input }], + type: [{ type: Input }], + close: [{ type: Output }] +}; +if (false) { + /** + * If `true`, alert can be dismissed by the user. + * + * The close button (×) will be displayed and you can be notified + * of the event with the `(close)` output. + * @type {?} + */ + SbCard.prototype.dismissible; + /** + * Type of the alert. + * + * Bootstrap provides styles for the following types: `'success'`, `'info'`, `'warning'`, `'danger'`, `'primary'`, + * `'secondary'`, `'light'` and `'dark'`. + * @type {?} + */ + SbCard.prototype.type; + /** + * An event emitted when the close button is clicked. It has no payload and only relevant for dismissible alerts. + * @type {?} + */ + SbCard.prototype.close; + /** + * @type {?} + * @private + */ + SbCard.prototype._renderer; + /** + * @type {?} + * @private + */ + SbCard.prototype._element; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImNhcmQvY2FyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFJVixpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGVBQWUsQ0FBQzs7Ozs7O0FBcUIzQyxNQUFNLE9BQU8sTUFBTTs7Ozs7O0lBcUJqQixZQUFZLE1BQW9CLEVBQVUsU0FBb0IsRUFBVSxRQUFvQjtRQUFsRCxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBWTs7OztRQUZsRixVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUd6QyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUM7UUFDdEMsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQzFCLENBQUM7Ozs7SUFFRCxZQUFZLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7OztJQUV6QyxXQUFXLENBQUMsT0FBc0I7O2NBQzFCLFVBQVUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQ2xDLElBQUksVUFBVSxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRTtZQUN6QyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxTQUFTLFVBQVUsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1lBQzdGLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLFNBQVMsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7U0FDMUY7SUFDSCxDQUFDOzs7O0lBRUQsUUFBUSxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLFNBQVMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7WUFsRDNGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsU0FBUztnQkFDbkIsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07Z0JBQy9DLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO2dCQUNyQyxJQUFJLEVBQUUsRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsYUFBYSxFQUFDO2dCQUNyRixRQUFRLEVBQUU7Ozs7OztLQU1QOzthQUVKOzs7O1lBcEJPLFlBQVk7WUFSbEIsU0FBUztZQUNULFVBQVU7OzswQkFvQ1QsS0FBSzttQkFPTCxLQUFLO29CQUlMLE1BQU07Ozs7Ozs7Ozs7SUFYUCw2QkFBOEI7Ozs7Ozs7O0lBTzlCLHNCQUFzQjs7Ozs7SUFJdEIsdUJBQTJDOzs7OztJQUVULDJCQUE0Qjs7Ozs7SUFBRSwwQkFBNEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIFJlbmRlcmVyMixcbiAgRWxlbWVudFJlZixcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1NiQ2FyZENvbmZpZ30gZnJvbSAnLi9jYXJkLWNvbmZpZyc7XG5cbi8qKlxuICogQWxlcnQgaXMgYSBjb21wb25lbnQgdG8gcHJvdmlkZSBjb250ZXh0dWFsIGZlZWRiYWNrIG1lc3NhZ2VzIGZvciB1c2VyLlxuICpcbiAqIEl0IHN1cHBvcnRzIHNldmVyYWwgYWxlcnQgdHlwZXMgYW5kIGNhbiBiZSBkaXNtaXNzZWQuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NiLWNhcmQnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaG9zdDogeydyb2xlJzogJ2FsZXJ0JywgJ2NsYXNzJzogJ2FsZXJ0JywgJ1tjbGFzcy5hbGVydC1kaXNtaXNzaWJsZV0nOiAnZGlzbWlzc2libGUnfSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPGJ1dHRvbiAqbmdJZj1cImRpc21pc3NpYmxlXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2xvc2VcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBpMThuLWFyaWEtbGFiZWw9XCJAQG5nYi5hbGVydC5jbG9zZVwiXG4gICAgICAoY2xpY2spPVwiY2xvc2VIYW5kbGVyKClcIj5cbiAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICAgYCxcbiAgc3R5bGVVcmxzOiBbJy4vY2FyZC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgU2JDYXJkIGltcGxlbWVudHMgT25Jbml0LFxuICAgIE9uQ2hhbmdlcyB7XG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGFsZXJ0IGNhbiBiZSBkaXNtaXNzZWQgYnkgdGhlIHVzZXIuXG4gICAqXG4gICAqIFRoZSBjbG9zZSBidXR0b24gKMOXKSB3aWxsIGJlIGRpc3BsYXllZCBhbmQgeW91IGNhbiBiZSBub3RpZmllZFxuICAgKiBvZiB0aGUgZXZlbnQgd2l0aCB0aGUgYChjbG9zZSlgIG91dHB1dC5cbiAgICovXG4gIEBJbnB1dCgpIGRpc21pc3NpYmxlOiBib29sZWFuO1xuICAvKipcbiAgICogVHlwZSBvZiB0aGUgYWxlcnQuXG4gICAqXG4gICAqIEJvb3RzdHJhcCBwcm92aWRlcyBzdHlsZXMgZm9yIHRoZSBmb2xsb3dpbmcgdHlwZXM6IGAnc3VjY2VzcydgLCBgJ2luZm8nYCwgYCd3YXJuaW5nJ2AsIGAnZGFuZ2VyJ2AsIGAncHJpbWFyeSdgLFxuICAgKiBgJ3NlY29uZGFyeSdgLCBgJ2xpZ2h0J2AgYW5kIGAnZGFyaydgLlxuICAgKi9cbiAgQElucHV0KCkgdHlwZTogc3RyaW5nO1xuICAvKipcbiAgICogQW4gZXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBjbG9zZSBidXR0b24gaXMgY2xpY2tlZC4gSXQgaGFzIG5vIHBheWxvYWQgYW5kIG9ubHkgcmVsZXZhbnQgZm9yIGRpc21pc3NpYmxlIGFsZXJ0cy5cbiAgICovXG4gIEBPdXRwdXQoKSBjbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IFNiQ2FyZENvbmZpZywgcHJpdmF0ZSBfcmVuZGVyZXI6IFJlbmRlcmVyMiwgcHJpdmF0ZSBfZWxlbWVudDogRWxlbWVudFJlZikge1xuICAgIHRoaXMuZGlzbWlzc2libGUgPSBjb25maWcuZGlzbWlzc2libGU7XG4gICAgdGhpcy50eXBlID0gY29uZmlnLnR5cGU7XG4gIH1cblxuICBjbG9zZUhhbmRsZXIoKSB7IHRoaXMuY2xvc2UuZW1pdChudWxsKTsgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBjb25zdCB0eXBlQ2hhbmdlID0gY2hhbmdlc1sndHlwZSddO1xuICAgIGlmICh0eXBlQ2hhbmdlICYmICF0eXBlQ2hhbmdlLmZpcnN0Q2hhbmdlKSB7XG4gICAgICB0aGlzLl9yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIGBhbGVydC0ke3R5cGVDaGFuZ2UucHJldmlvdXNWYWx1ZX1gKTtcbiAgICAgIHRoaXMuX3JlbmRlcmVyLmFkZENsYXNzKHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCwgYGFsZXJ0LSR7dHlwZUNoYW5nZS5jdXJyZW50VmFsdWV9YCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7IHRoaXMuX3JlbmRlcmVyLmFkZENsYXNzKHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCwgYGFsZXJ0LSR7dGhpcy50eXBlfWApOyB9XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/card/card.module.js b/dist/sunbird-ui-components/esm2015/card/card.module.js new file mode 100644 index 0000000..722bab4 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/card/card.module.js @@ -0,0 +1,15 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { SbCard } from './card'; +export { SbCard } from './card'; +export { SbCardConfig } from './card-config'; +export class SbCardModule { +} +SbCardModule.decorators = [ + { type: NgModule, args: [{ declarations: [SbCard], exports: [SbCard], imports: [CommonModule], entryComponents: [SbCard] },] } +]; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC5tb2R1bGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjYXJkL2NhcmQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUU3QyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBRTlCLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDOUIsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUczQyxNQUFNLE9BQU8sWUFBWTs7O1lBRHhCLFFBQVEsU0FBQyxFQUFDLFlBQVksRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHtTYkNhcmR9IGZyb20gJy4vY2FyZCc7XG5cbmV4cG9ydCB7U2JDYXJkfSBmcm9tICcuL2NhcmQnO1xuZXhwb3J0IHtTYkNhcmRDb25maWd9IGZyb20gJy4vY2FyZC1jb25maWcnO1xuXG5ATmdNb2R1bGUoe2RlY2xhcmF0aW9uczogW1NiQ2FyZF0sIGV4cG9ydHM6IFtTYkNhcmRdLCBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSwgZW50cnlDb21wb25lbnRzOiBbU2JDYXJkXX0pXG5leHBvcnQgY2xhc3MgU2JDYXJkTW9kdWxlIHtcbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/carousel/carousel-config.js b/dist/sunbird-ui-components/esm2015/carousel/carousel-config.js new file mode 100644 index 0000000..8564738 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/carousel/carousel-config.js @@ -0,0 +1,41 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Injectable } from '@angular/core'; +import * as i0 from "@angular/core"; +/** + * A configuration service for the [NgbCarousel](#/components/carousel/api#NgbCarousel) component. + * + * You can inject this service, typically in your root component, and customize its properties + * to provide default values for all carousels used in the application. + */ +export class NgbCarouselConfig { + constructor() { + this.interval = 5000; + this.wrap = true; + this.keyboard = true; + this.pauseOnHover = true; + this.showNavigationArrows = true; + this.showNavigationIndicators = true; + } +} +NgbCarouselConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } +]; +/** @nocollapse */ NgbCarouselConfig.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function NgbCarouselConfig_Factory() { return new NgbCarouselConfig(); }, token: NgbCarouselConfig, providedIn: "root" }); +if (false) { + /** @type {?} */ + NgbCarouselConfig.prototype.interval; + /** @type {?} */ + NgbCarouselConfig.prototype.wrap; + /** @type {?} */ + NgbCarouselConfig.prototype.keyboard; + /** @type {?} */ + NgbCarouselConfig.prototype.pauseOnHover; + /** @type {?} */ + NgbCarouselConfig.prototype.showNavigationArrows; + /** @type {?} */ + NgbCarouselConfig.prototype.showNavigationIndicators; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwtY29uZmlnLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY2Fyb3VzZWwvY2Fyb3VzZWwtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQVN6QyxNQUFNLE9BQU8saUJBQWlCO0lBRDlCO1FBRUUsYUFBUSxHQUFHLElBQUksQ0FBQztRQUNoQixTQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ1osYUFBUSxHQUFHLElBQUksQ0FBQztRQUNoQixpQkFBWSxHQUFHLElBQUksQ0FBQztRQUNwQix5QkFBb0IsR0FBRyxJQUFJLENBQUM7UUFDNUIsNkJBQXdCLEdBQUcsSUFBSSxDQUFDO0tBQ2pDOzs7WUFSQSxVQUFVLFNBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDOzs7OztJQUU5QixxQ0FBZ0I7O0lBQ2hCLGlDQUFZOztJQUNaLHFDQUFnQjs7SUFDaEIseUNBQW9COztJQUNwQixpREFBNEI7O0lBQzVCLHFEQUFnQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogQSBjb25maWd1cmF0aW9uIHNlcnZpY2UgZm9yIHRoZSBbTmdiQ2Fyb3VzZWxdKCMvY29tcG9uZW50cy9jYXJvdXNlbC9hcGkjTmdiQ2Fyb3VzZWwpIGNvbXBvbmVudC5cbiAqXG4gKiBZb3UgY2FuIGluamVjdCB0aGlzIHNlcnZpY2UsIHR5cGljYWxseSBpbiB5b3VyIHJvb3QgY29tcG9uZW50LCBhbmQgY3VzdG9taXplIGl0cyBwcm9wZXJ0aWVzXG4gKiB0byBwcm92aWRlIGRlZmF1bHQgdmFsdWVzIGZvciBhbGwgY2Fyb3VzZWxzIHVzZWQgaW4gdGhlIGFwcGxpY2F0aW9uLlxuICovXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBOZ2JDYXJvdXNlbENvbmZpZyB7XG4gIGludGVydmFsID0gNTAwMDtcbiAgd3JhcCA9IHRydWU7XG4gIGtleWJvYXJkID0gdHJ1ZTtcbiAgcGF1c2VPbkhvdmVyID0gdHJ1ZTtcbiAgc2hvd05hdmlnYXRpb25BcnJvd3MgPSB0cnVlO1xuICBzaG93TmF2aWdhdGlvbkluZGljYXRvcnMgPSB0cnVlO1xufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/carousel/carousel.js b/dist/sunbird-ui-components/esm2015/carousel/carousel.js new file mode 100644 index 0000000..46d0c31 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/carousel/carousel.js @@ -0,0 +1,507 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, Directive, EventEmitter, Inject, Input, NgZone, Output, PLATFORM_ID, QueryList, TemplateRef, HostListener } from '@angular/core'; +import { isPlatformBrowser } from '@angular/common'; +import { NgbCarouselConfig } from './carousel-config'; +import { Subject, timer, BehaviorSubject, combineLatest, NEVER } from 'rxjs'; +import { startWith, map, switchMap, takeUntil, distinctUntilChanged } from 'rxjs/operators'; +/** @type {?} */ +let nextId = 0; +/** + * A directive that wraps the individual carousel slide. + */ +export class NgbSlide { + /** + * @param {?} tplRef + */ + constructor(tplRef) { + this.tplRef = tplRef; + /** + * Slide id that must be unique for the entire document. + * + * If not provided, will be generated in the `ngb-slide-xx` format. + */ + this.id = `ngb-slide-${nextId++}`; + } +} +NgbSlide.decorators = [ + { type: Directive, args: [{ selector: 'ng-template[ngbSlide]' },] } +]; +/** @nocollapse */ +NgbSlide.ctorParameters = () => [ + { type: TemplateRef } +]; +NgbSlide.propDecorators = { + id: [{ type: Input }] +}; +if (false) { + /** + * Slide id that must be unique for the entire document. + * + * If not provided, will be generated in the `ngb-slide-xx` format. + * @type {?} + */ + NgbSlide.prototype.id; + /** @type {?} */ + NgbSlide.prototype.tplRef; +} +/** + * Carousel is a component to easily create and control slideshows. + * + * Allows to set intervals, change the way user interacts with the slides and provides a programmatic API. + */ +export class NgbCarousel { + /** + * @param {?} config + * @param {?} _platformId + * @param {?} _ngZone + * @param {?} _cd + */ + constructor(config, _platformId, _ngZone, _cd) { + this._platformId = _platformId; + this._ngZone = _ngZone; + this._cd = _cd; + this.NgbSlideEventSource = NgbSlideEventSource; + this._destroy$ = new Subject(); + this._interval$ = new BehaviorSubject(0); + this._mouseHover$ = new BehaviorSubject(false); + this._pauseOnHover$ = new BehaviorSubject(false); + this._pause$ = new BehaviorSubject(false); + this._wrap$ = new BehaviorSubject(false); + /** + * An event emitted right after the slide transition is completed. + * + * See [`NgbSlideEvent`](#/components/carousel/api#NgbSlideEvent) for payload details. + */ + this.slide = new EventEmitter(); + this.interval = config.interval; + this.wrap = config.wrap; + this.keyboard = config.keyboard; + this.pauseOnHover = config.pauseOnHover; + this.showNavigationArrows = config.showNavigationArrows; + this.showNavigationIndicators = config.showNavigationIndicators; + } + /** + * Time in milliseconds before the next slide is shown. + * @param {?} value + * @return {?} + */ + set interval(value) { + this._interval$.next(value); + } + /** + * @return {?} + */ + get interval() { return this._interval$.value; } + /** + * If `true`, will 'wrap' the carousel by switching from the last slide back to the first. + * @param {?} value + * @return {?} + */ + set wrap(value) { + this._wrap$.next(value); + } + /** + * @return {?} + */ + get wrap() { return this._wrap$.value; } + /** + * If `true`, will pause slide switching when mouse cursor hovers the slide. + * + * \@since 2.2.0 + * @param {?} value + * @return {?} + */ + set pauseOnHover(value) { + this._pauseOnHover$.next(value); + } + /** + * @return {?} + */ + get pauseOnHover() { return this._pauseOnHover$.value; } + /** + * @return {?} + */ + mouseEnter() { + this._mouseHover$.next(true); + } + /** + * @return {?} + */ + mouseLeave() { + this._mouseHover$.next(false); + } + /** + * @return {?} + */ + ngAfterContentInit() { + // setInterval() doesn't play well with SSR and protractor, + // so we should run it in the browser and outside Angular + if (isPlatformBrowser(this._platformId)) { + this._ngZone.runOutsideAngular((/** + * @return {?} + */ + () => { + /** @type {?} */ + const hasNextSlide$ = combineLatest(this.slide.pipe(map((/** + * @param {?} slideEvent + * @return {?} + */ + slideEvent => slideEvent.current)), startWith(this.activeId)), this._wrap$, this.slides.changes.pipe(startWith(null))) + .pipe(map((/** + * @param {?} __0 + * @return {?} + */ + ([currentSlideId, wrap]) => { + /** @type {?} */ + const slideArr = this.slides.toArray(); + /** @type {?} */ + const currentSlideIdx = this._getSlideIdxById(currentSlideId); + return wrap ? slideArr.length > 1 : currentSlideIdx < slideArr.length - 1; + })), distinctUntilChanged()); + combineLatest(this._pause$, this._pauseOnHover$, this._mouseHover$, this._interval$, hasNextSlide$) + .pipe(map((/** + * @param {?} __0 + * @return {?} + */ + ([pause, pauseOnHover, mouseHover, interval, hasNextSlide]) => ((pause || (pauseOnHover && mouseHover) || !hasNextSlide) ? 0 : interval))), distinctUntilChanged(), switchMap((/** + * @param {?} interval + * @return {?} + */ + interval => interval > 0 ? timer(interval, interval) : NEVER)), takeUntil(this._destroy$)) + .subscribe((/** + * @return {?} + */ + () => this._ngZone.run((/** + * @return {?} + */ + () => this.next(NgbSlideEventSource.TIMER))))); + })); + } + this.slides.changes.pipe(takeUntil(this._destroy$)).subscribe((/** + * @return {?} + */ + () => this._cd.markForCheck())); + } + /** + * @return {?} + */ + ngAfterContentChecked() { + /** @type {?} */ + let activeSlide = this._getSlideById(this.activeId); + this.activeId = activeSlide ? activeSlide.id : (this.slides.length ? this.slides.first.id : null); + } + /** + * @return {?} + */ + ngOnDestroy() { this._destroy$.next(); } + /** + * Navigates to a slide with the specified identifier. + * @param {?} slideId + * @param {?=} source + * @return {?} + */ + select(slideId, source) { + this._cycleToSelected(slideId, this._getSlideEventDirection(this.activeId, slideId), source); + } + /** + * Navigates to the previous slide. + * @param {?=} source + * @return {?} + */ + prev(source) { + this._cycleToSelected(this._getPrevSlide(this.activeId), NgbSlideEventDirection.RIGHT, source); + } + /** + * Navigates to the next slide. + * @param {?=} source + * @return {?} + */ + next(source) { + this._cycleToSelected(this._getNextSlide(this.activeId), NgbSlideEventDirection.LEFT, source); + } + /** + * Pauses cycling through the slides. + * @return {?} + */ + pause() { this._pause$.next(true); } + /** + * Restarts cycling through the slides from left to right. + * @return {?} + */ + cycle() { this._pause$.next(false); } + /** + * @private + * @param {?} slideIdx + * @param {?} direction + * @param {?=} source + * @return {?} + */ + _cycleToSelected(slideIdx, direction, source) { + /** @type {?} */ + let selectedSlide = this._getSlideById(slideIdx); + if (selectedSlide && selectedSlide.id !== this.activeId) { + this.slide.emit({ prev: this.activeId, current: selectedSlide.id, direction: direction, paused: this._pause$.value, source }); + this.activeId = selectedSlide.id; + } + // we get here after the interval fires or any external API call like next(), prev() or select() + this._cd.markForCheck(); + } + /** + * @private + * @param {?} currentActiveSlideId + * @param {?} nextActiveSlideId + * @return {?} + */ + _getSlideEventDirection(currentActiveSlideId, nextActiveSlideId) { + /** @type {?} */ + const currentActiveSlideIdx = this._getSlideIdxById(currentActiveSlideId); + /** @type {?} */ + const nextActiveSlideIdx = this._getSlideIdxById(nextActiveSlideId); + return currentActiveSlideIdx > nextActiveSlideIdx ? NgbSlideEventDirection.RIGHT : NgbSlideEventDirection.LEFT; + } + /** + * @private + * @param {?} slideId + * @return {?} + */ + _getSlideById(slideId) { return this.slides.find((/** + * @param {?} slide + * @return {?} + */ + slide => slide.id === slideId)); } + /** + * @private + * @param {?} slideId + * @return {?} + */ + _getSlideIdxById(slideId) { + return this.slides.toArray().indexOf(this._getSlideById(slideId)); + } + /** + * @private + * @param {?} currentSlideId + * @return {?} + */ + _getNextSlide(currentSlideId) { + /** @type {?} */ + const slideArr = this.slides.toArray(); + /** @type {?} */ + const currentSlideIdx = this._getSlideIdxById(currentSlideId); + /** @type {?} */ + const isLastSlide = currentSlideIdx === slideArr.length - 1; + return isLastSlide ? (this.wrap ? slideArr[0].id : slideArr[slideArr.length - 1].id) : + slideArr[currentSlideIdx + 1].id; + } + /** + * @private + * @param {?} currentSlideId + * @return {?} + */ + _getPrevSlide(currentSlideId) { + /** @type {?} */ + const slideArr = this.slides.toArray(); + /** @type {?} */ + const currentSlideIdx = this._getSlideIdxById(currentSlideId); + /** @type {?} */ + const isFirstSlide = currentSlideIdx === 0; + return isFirstSlide ? (this.wrap ? slideArr[slideArr.length - 1].id : slideArr[0].id) : + slideArr[currentSlideIdx - 1].id; + } +} +NgbCarousel.decorators = [ + { type: Component, args: [{ + selector: 'ngb-carousel', + exportAs: 'ngbCarousel', + changeDetection: ChangeDetectionStrategy.OnPush, + host: { + 'class': 'carousel slide', + '[style.display]': '"block"', + 'tabIndex': '0', + '(keydown.arrowLeft)': 'keyboard && prev(NgbSlideEventSource.ARROW_LEFT)', + '(keydown.arrowRight)': 'keyboard && next(NgbSlideEventSource.ARROW_RIGHT)' + }, + template: ` + + + + + Previous + + + + Next + + ` + }] } +]; +/** @nocollapse */ +NgbCarousel.ctorParameters = () => [ + { type: NgbCarouselConfig }, + { type: undefined, decorators: [{ type: Inject, args: [PLATFORM_ID,] }] }, + { type: NgZone }, + { type: ChangeDetectorRef } +]; +NgbCarousel.propDecorators = { + slides: [{ type: ContentChildren, args: [NgbSlide,] }], + activeId: [{ type: Input }], + interval: [{ type: Input }], + wrap: [{ type: Input }], + keyboard: [{ type: Input }], + pauseOnHover: [{ type: Input }], + showNavigationArrows: [{ type: Input }], + showNavigationIndicators: [{ type: Input }], + slide: [{ type: Output }], + mouseEnter: [{ type: HostListener, args: ['mouseenter',] }], + mouseLeave: [{ type: HostListener, args: ['mouseleave',] }] +}; +if (false) { + /** @type {?} */ + NgbCarousel.prototype.slides; + /** @type {?} */ + NgbCarousel.prototype.NgbSlideEventSource; + /** + * @type {?} + * @private + */ + NgbCarousel.prototype._destroy$; + /** + * @type {?} + * @private + */ + NgbCarousel.prototype._interval$; + /** + * @type {?} + * @private + */ + NgbCarousel.prototype._mouseHover$; + /** + * @type {?} + * @private + */ + NgbCarousel.prototype._pauseOnHover$; + /** + * @type {?} + * @private + */ + NgbCarousel.prototype._pause$; + /** + * @type {?} + * @private + */ + NgbCarousel.prototype._wrap$; + /** + * The slide id that should be displayed **initially**. + * + * For subsequent interactions use methods `select()`, `next()`, etc. and the `(slide)` output. + * @type {?} + */ + NgbCarousel.prototype.activeId; + /** + * If `true`, allows to interact with carousel using keyboard 'arrow left' and 'arrow right'. + * @type {?} + */ + NgbCarousel.prototype.keyboard; + /** + * If `true`, 'previous' and 'next' navigation arrows will be visible on the slide. + * + * \@since 2.2.0 + * @type {?} + */ + NgbCarousel.prototype.showNavigationArrows; + /** + * If `true`, navigation indicators at the bottom of the slide will be visible. + * + * \@since 2.2.0 + * @type {?} + */ + NgbCarousel.prototype.showNavigationIndicators; + /** + * An event emitted right after the slide transition is completed. + * + * See [`NgbSlideEvent`](#/components/carousel/api#NgbSlideEvent) for payload details. + * @type {?} + */ + NgbCarousel.prototype.slide; + /** + * @type {?} + * @private + */ + NgbCarousel.prototype._platformId; + /** + * @type {?} + * @private + */ + NgbCarousel.prototype._ngZone; + /** + * @type {?} + * @private + */ + NgbCarousel.prototype._cd; +} +/** + * A slide change event emitted right after the slide transition is completed. + * @record + */ +export function NgbSlideEvent() { } +if (false) { + /** + * The previous slide id. + * @type {?} + */ + NgbSlideEvent.prototype.prev; + /** + * The current slide id. + * @type {?} + */ + NgbSlideEvent.prototype.current; + /** + * The slide event direction. + * + * Possible values are `'left' | 'right'`. + * @type {?} + */ + NgbSlideEvent.prototype.direction; + /** + * Whether the pause() method was called (and no cycle() call was done afterwards). + * + * \@since 5.1.0 + * @type {?} + */ + NgbSlideEvent.prototype.paused; + /** + * Source triggering the slide change event. + * + * Possible values are `'timer' | 'arrowLeft' | 'arrowRight' | 'indicator'` + * + * \@since 5.1.0 + * @type {?|undefined} + */ + NgbSlideEvent.prototype.source; +} +/** @enum {string} */ +const NgbSlideEventDirection = { + LEFT: (/** @type {?} */ ('left')), + RIGHT: (/** @type {?} */ ('right')), +}; +export { NgbSlideEventDirection }; +/** @enum {string} */ +const NgbSlideEventSource = { + TIMER: 'timer', + ARROW_LEFT: 'arrowLeft', + ARROW_RIGHT: 'arrowRight', + INDICATOR: 'indicator', +}; +export { NgbSlideEventSource }; +/** @type {?} */ +export const NGB_CAROUSEL_DIRECTIVES = [NgbCarousel, NgbSlide]; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjYXJvdXNlbC9jYXJvdXNlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUdMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULGVBQWUsRUFDZixTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUVOLE1BQU0sRUFDTixXQUFXLEVBQ1gsU0FBUyxFQUNULFdBQVcsRUFDWCxZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFbEQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFcEQsT0FBTyxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDM0UsT0FBTyxFQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxvQkFBb0IsRUFBQyxNQUFNLGdCQUFnQixDQUFDOztJQUV0RixNQUFNLEdBQUcsQ0FBQzs7OztBQU1kLE1BQU0sT0FBTyxRQUFROzs7O0lBT25CLFlBQW1CLE1BQXdCO1FBQXhCLFdBQU0sR0FBTixNQUFNLENBQWtCOzs7Ozs7UUFEbEMsT0FBRSxHQUFHLGFBQWEsTUFBTSxFQUFFLEVBQUUsQ0FBQztJQUNRLENBQUM7OztZQVJoRCxTQUFTLFNBQUMsRUFBQyxRQUFRLEVBQUUsdUJBQXVCLEVBQUM7Ozs7WUFmNUMsV0FBVzs7O2lCQXNCVixLQUFLOzs7Ozs7Ozs7SUFBTixzQkFBc0M7O0lBQzFCLDBCQUErQjs7Ozs7OztBQXVDN0MsTUFBTSxPQUFPLFdBQVc7Ozs7Ozs7SUE4RXRCLFlBQ0ksTUFBeUIsRUFBK0IsV0FB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Ozs7SUF5QjFCLCtCQUEyQjs7Ozs7OztJQW1CM0IsMkNBQXVDOzs7Ozs7O0lBT3ZDLCtDQUEyQzs7Ozs7OztJQU8zQyw0QkFBb0Q7Ozs7O0lBR3JCLGtDQUF3Qzs7Ozs7SUFBRSw4QkFBdUI7Ozs7O0lBQzVGLDBCQUE4Qjs7Ozs7O0FBcUlwQyxtQ0FpQ0M7Ozs7OztJQTdCQyw2QkFBYTs7Ozs7SUFLYixnQ0FBZ0I7Ozs7Ozs7SUFPaEIsa0NBQWtDOzs7Ozs7O0lBT2xDLCtCQUFnQjs7Ozs7Ozs7O0lBU2hCLCtCQUE2Qjs7OztJQU83QixNQUFPLG1CQUFLLE1BQU0sRUFBQTtJQUNsQixPQUFRLG1CQUFLLE9BQU8sRUFBQTs7Ozs7SUFJcEIsT0FBUSxPQUFPO0lBQ2YsWUFBYSxXQUFXO0lBQ3hCLGFBQWMsWUFBWTtJQUMxQixXQUFZLFdBQVc7Ozs7QUFHekIsTUFBTSxPQUFPLHVCQUF1QixHQUFHLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyQ29udGVudENoZWNrZWQsXG4gIEFmdGVyQ29udGVudEluaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIERpcmVjdGl2ZSxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBQTEFURk9STV9JRCxcbiAgUXVlcnlMaXN0LFxuICBUZW1wbGF0ZVJlZixcbiAgSG9zdExpc3RlbmVyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtpc1BsYXRmb3JtQnJvd3Nlcn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHtOZ2JDYXJvdXNlbENvbmZpZ30gZnJvbSAnLi9jYXJvdXNlbC1jb25maWcnO1xuXG5pbXBvcnQge1N1YmplY3QsIHRpbWVyLCBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE5FVkVSfSBmcm9tICdyeGpzJztcbmltcG9ydCB7c3RhcnRXaXRoLCBtYXAsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCBkaXN0aW5jdFVudGlsQ2hhbmdlZH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5sZXQgbmV4dElkID0gMDtcblxuLyoqXG4gKiBBIGRpcmVjdGl2ZSB0aGF0IHdyYXBzIHRoZSBpbmRpdmlkdWFsIGNhcm91c2VsIHNsaWRlLlxuICovXG5ARGlyZWN0aXZlKHtzZWxlY3RvcjogJ25nLXRlbXBsYXRlW25nYlNsaWRlXSd9KVxuZXhwb3J0IGNsYXNzIE5nYlNsaWRlIHtcbiAgLyoqXG4gICAqIFNsaWRlIGlkIHRoYXQgbXVzdCBiZSB1bmlxdWUgZm9yIHRoZSBlbnRpcmUgZG9jdW1lbnQuXG4gICAqXG4gICAqIElmIG5vdCBwcm92aWRlZCwgd2lsbCBiZSBnZW5lcmF0ZWQgaW4gdGhlIGBuZ2Itc2xpZGUteHhgIGZvcm1hdC5cbiAgICovXG4gIEBJbnB1dCgpIGlkID0gYG5nYi1zbGlkZS0ke25leHRJZCsrfWA7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0cGxSZWY6IFRlbXBsYXRlUmVmPGFueT4pIHt9XG59XG5cbi8qKlxuICogQ2Fyb3VzZWwgaXMgYSBjb21wb25lbnQgdG8gZWFzaWx5IGNyZWF0ZSBhbmQgY29udHJvbCBzbGlkZXNob3dzLlxuICpcbiAqIEFsbG93cyB0byBzZXQgaW50ZXJ2YWxzLCBjaGFuZ2UgdGhlIHdheSB1c2VyIGludGVyYWN0cyB3aXRoIHRoZSBzbGlkZXMgYW5kIHByb3ZpZGVzIGEgcHJvZ3JhbW1hdGljIEFQSS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmdiLWNhcm91c2VsJyxcbiAgZXhwb3J0QXM6ICduZ2JDYXJvdXNlbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7XG4gICAgJ2NsYXNzJzogJ2Nhcm91c2VsIHNsaWRlJyxcbiAgICAnW3N0eWxlLmRpc3BsYXldJzogJ1wiYmxvY2tcIicsXG4gICAgJ3RhYkluZGV4JzogJzAnLFxuICAgICcoa2V5ZG93bi5hcnJvd0xlZnQpJzogJ2tleWJvYXJkICYmIHByZXYoTmdiU2xpZGVFdmVudFNvdXJjZS5BUlJPV19MRUZUKScsXG4gICAgJyhrZXlkb3duLmFycm93UmlnaHQpJzogJ2tleWJvYXJkICYmIG5leHQoTmdiU2xpZGVFdmVudFNvdXJjZS5BUlJPV19SSUdIVCknXG4gIH0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPG9sIGNsYXNzPVwiY2Fyb3VzZWwtaW5kaWNhdG9yc1wiICpuZ0lmPVwic2hvd05hdmlnYXRpb25JbmRpY2F0b3JzXCI+XG4gICAgICA8bGkgKm5nRm9yPVwibGV0IHNsaWRlIG9mIHNsaWRlc1wiIFtpZF09XCJzbGlkZS5pZFwiIFtjbGFzcy5hY3RpdmVdPVwic2xpZGUuaWQgPT09IGFjdGl2ZUlkXCJcbiAgICAgICAgICAoY2xpY2spPVwic2VsZWN0KHNsaWRlLmlkLCBOZ2JTbGlkZUV2ZW50U291cmNlLklORElDQVRPUilcIj48L2xpPlxuICAgIDwvb2w+XG4gICAgPGRpdiBjbGFzcz1cImNhcm91c2VsLWlubmVyXCI+XG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBzbGlkZSBvZiBzbGlkZXNcIiBjbGFzcz1cImNhcm91c2VsLWl0ZW1cIiBbY2xhc3MuYWN0aXZlXT1cInNsaWRlLmlkID09PSBhY3RpdmVJZFwiPlxuICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwic2xpZGUudHBsUmVmXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxhIGNsYXNzPVwiY2Fyb3VzZWwtY29udHJvbC1wcmV2XCIgcm9sZT1cImJ1dHRvblwiIChjbGljayk9XCJwcmV2KE5nYlNsaWRlRXZlbnRTb3VyY2UuQVJST1dfTEVGVClcIiAqbmdJZj1cInNob3dOYXZpZ2F0aW9uQXJyb3dzXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImNhcm91c2VsLWNvbnRyb2wtcHJldi1pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCIgaTE4bj1cIkBAbmdiLmNhcm91c2VsLnByZXZpb3VzXCI+UHJldmlvdXM8L3NwYW4+XG4gICAgPC9hPlxuICAgIDxhIGNsYXNzPVwiY2Fyb3VzZWwtY29udHJvbC1uZXh0XCIgcm9sZT1cImJ1dHRvblwiIChjbGljayk9XCJuZXh0KE5nYlNsaWRlRXZlbnRTb3VyY2UuQVJST1dfUklHSFQpXCIgKm5nSWY9XCJzaG93TmF2aWdhdGlvbkFycm93c1wiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjYXJvdXNlbC1jb250cm9sLW5leHQtaWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiIGkxOG49XCJAQG5nYi5jYXJvdXNlbC5uZXh0XCI+TmV4dDwvc3Bhbj5cbiAgICA8L2E+XG4gIGBcbn0pXG5leHBvcnQgY2xhc3MgTmdiQ2Fyb3VzZWwgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRDaGVja2VkLFxuICAgIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG4gIEBDb250ZW50Q2hpbGRyZW4oTmdiU2xpZGUpIHNsaWRlczogUXVlcnlMaXN0PE5nYlNsaWRlPjtcblxuICBwdWJsaWMgTmdiU2xpZGVFdmVudFNvdXJjZSA9IE5nYlNsaWRlRXZlbnRTb3VyY2U7XG5cbiAgcHJpdmF0ZSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIF9pbnRlcnZhbCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KDApO1xuICBwcml2YXRlIF9tb3VzZUhvdmVyJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICBwcml2YXRlIF9wYXVzZU9uSG92ZXIkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gIHByaXZhdGUgX3BhdXNlJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICBwcml2YXRlIF93cmFwJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gIC8qKlxuICAgKiBUaGUgc2xpZGUgaWQgdGhhdCBzaG91bGQgYmUgZGlzcGxheWVkICoqaW5pdGlhbGx5KiouXG4gICAqXG4gICAqIEZvciBzdWJzZXF1ZW50IGludGVyYWN0aW9ucyB1c2UgbWV0aG9kcyBgc2VsZWN0KClgLCBgbmV4dCgpYCwgZXRjLiBhbmQgdGhlIGAoc2xpZGUpYCBvdXRwdXQuXG4gICAqL1xuICBASW5wdXQoKSBhY3RpdmVJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaW1lIGluIG1pbGxpc2Vjb25kcyBiZWZvcmUgdGhlIG5leHQgc2xpZGUgaXMgc2hvd24uXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgaW50ZXJ2YWwodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2ludGVydmFsJC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIGdldCBpbnRlcnZhbCgpIHsgcmV0dXJuIHRoaXMuX2ludGVydmFsJC52YWx1ZTsgfVxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHdpbGwgJ3dyYXAnIHRoZSBjYXJvdXNlbCBieSBzd2l0Y2hpbmcgZnJvbSB0aGUgbGFzdCBzbGlkZSBiYWNrIHRvIHRoZSBmaXJzdC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCB3cmFwKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fd3JhcCQubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBnZXQgd3JhcCgpIHsgcmV0dXJuIHRoaXMuX3dyYXAkLnZhbHVlOyB9XG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgYWxsb3dzIHRvIGludGVyYWN0IHdpdGggY2Fyb3VzZWwgdXNpbmcga2V5Ym9hcmQgJ2Fycm93IGxlZnQnIGFuZCAnYXJyb3cgcmlnaHQnLlxuICAgKi9cbiAgQElucHV0KCkga2V5Ym9hcmQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgd2lsbCBwYXVzZSBzbGlkZSBzd2l0Y2hpbmcgd2hlbiBtb3VzZSBjdXJzb3IgaG92ZXJzIHRoZSBzbGlkZS5cbiAgICpcbiAgICogQHNpbmNlIDIuMi4wXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgcGF1c2VPbkhvdmVyKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fcGF1c2VPbkhvdmVyJC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIGdldCBwYXVzZU9uSG92ZXIoKSB7IHJldHVybiB0aGlzLl9wYXVzZU9uSG92ZXIkLnZhbHVlOyB9XG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgJ3ByZXZpb3VzJyBhbmQgJ25leHQnIG5hdmlnYXRpb24gYXJyb3dzIHdpbGwgYmUgdmlzaWJsZSBvbiB0aGUgc2xpZGUuXG4gICAqXG4gICAqIEBzaW5jZSAyLjIuMFxuICAgKi9cbiAgQElucHV0KCkgc2hvd05hdmlnYXRpb25BcnJvd3M6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgbmF2aWdhdGlvbiBpbmRpY2F0b3JzIGF0IHRoZSBib3R0b20gb2YgdGhlIHNsaWRlIHdpbGwgYmUgdmlzaWJsZS5cbiAgICpcbiAgICogQHNpbmNlIDIuMi4wXG4gICAqL1xuICBASW5wdXQoKSBzaG93TmF2aWdhdGlvbkluZGljYXRvcnM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEFuIGV2ZW50IGVtaXR0ZWQgcmlnaHQgYWZ0ZXIgdGhlIHNsaWRlIHRyYW5zaXRpb24gaXMgY29tcGxldGVkLlxuICAgKlxuICAgKiBTZWUgW2BOZ2JTbGlkZUV2ZW50YF0oIy9jb21wb25lbnRzL2Nhcm91c2VsL2FwaSNOZ2JTbGlkZUV2ZW50KSBmb3IgcGF5bG9hZCBkZXRhaWxzLlxuICAgKi9cbiAgQE91dHB1dCgpIHNsaWRlID0gbmV3IEV2ZW50RW1pdHRlcjxOZ2JTbGlkZUV2ZW50PigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgY29uZmlnOiBOZ2JDYXJvdXNlbENvbmZpZywgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSBfcGxhdGZvcm1JZCwgcHJpdmF0ZSBfbmdab25lOiBOZ1pvbmUsXG4gICAgICBwcml2YXRlIF9jZDogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICB0aGlzLmludGVydmFsID0gY29uZmlnLmludGVydmFsO1xuICAgIHRoaXMud3JhcCA9IGNvbmZpZy53cmFwO1xuICAgIHRoaXMua2V5Ym9hcmQgPSBjb25maWcua2V5Ym9hcmQ7XG4gICAgdGhpcy5wYXVzZU9uSG92ZXIgPSBjb25maWcucGF1c2VPbkhvdmVyO1xuICAgIHRoaXMuc2hvd05hdmlnYXRpb25BcnJvd3MgPSBjb25maWcuc2hvd05hdmlnYXRpb25BcnJvd3M7XG4gICAgdGhpcy5zaG93TmF2aWdhdGlvbkluZGljYXRvcnMgPSBjb25maWcuc2hvd05hdmlnYXRpb25JbmRpY2F0b3JzO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2VlbnRlcicpXG4gIG1vdXNlRW50ZXIoKSB7XG4gICAgdGhpcy5fbW91c2VIb3ZlciQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlbGVhdmUnKVxuICBtb3VzZUxlYXZlKCkge1xuICAgIHRoaXMuX21vdXNlSG92ZXIkLm5leHQoZmFsc2UpO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIC8vIHNldEludGVydmFsKCkgZG9lc24ndCBwbGF5IHdlbGwgd2l0aCBTU1IgYW5kIHByb3RyYWN0b3IsXG4gICAgLy8gc28gd2Ugc2hvdWxkIHJ1biBpdCBpbiB0aGUgYnJvd3NlciBhbmQgb3V0c2lkZSBBbmd1bGFyXG4gICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMuX3BsYXRmb3JtSWQpKSB7XG4gICAgICB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNOZXh0U2xpZGUkID0gY29tYmluZUxhdGVzdChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNsaWRlLnBpcGUobWFwKHNsaWRlRXZlbnQgPT4gc2xpZGVFdmVudC5jdXJyZW50KSwgc3RhcnRXaXRoKHRoaXMuYWN0aXZlSWQpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl93cmFwJCwgdGhpcy5zbGlkZXMuY2hhbmdlcy5waXBlKHN0YXJ0V2l0aChudWxsKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcCgoW2N1cnJlbnRTbGlkZUlkLCB3cmFwXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNsaWRlQXJyID0gdGhpcy5zbGlkZXMudG9BcnJheSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTbGlkZUlkeCA9IHRoaXMuX2dldFNsaWRlSWR4QnlJZChjdXJyZW50U2xpZGVJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXAgPyBzbGlkZUFyci5sZW5ndGggPiAxIDogY3VycmVudFNsaWRlSWR4IDwgc2xpZGVBcnIubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuICAgICAgICBjb21iaW5lTGF0ZXN0KHRoaXMuX3BhdXNlJCwgdGhpcy5fcGF1c2VPbkhvdmVyJCwgdGhpcy5fbW91c2VIb3ZlciQsIHRoaXMuX2ludGVydmFsJCwgaGFzTmV4dFNsaWRlJClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgoW3BhdXNlLCBwYXVzZU9uSG92ZXIsIG1vdXNlSG92ZXIsIGludGVydmFsLCBoYXNOZXh0U2xpZGVdKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgKChwYXVzZSB8fCAocGF1c2VPbkhvdmVyICYmIG1vdXNlSG92ZXIpIHx8ICFoYXNOZXh0U2xpZGUpID8gMCA6IGludGVydmFsKSksXG5cbiAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCBzd2l0Y2hNYXAoaW50ZXJ2YWwgPT4gaW50ZXJ2YWwgPiAwID8gdGltZXIoaW50ZXJ2YWwsIGludGVydmFsKSA6IE5FVkVSKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHRoaXMubmV4dChOZ2JTbGlkZUV2ZW50U291cmNlLlRJTUVSKSkpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5zbGlkZXMuY2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKSk7XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudENoZWNrZWQoKSB7XG4gICAgbGV0IGFjdGl2ZVNsaWRlID0gdGhpcy5fZ2V0U2xpZGVCeUlkKHRoaXMuYWN0aXZlSWQpO1xuICAgIHRoaXMuYWN0aXZlSWQgPSBhY3RpdmVTbGlkZSA/IGFjdGl2ZVNsaWRlLmlkIDogKHRoaXMuc2xpZGVzLmxlbmd0aCA/IHRoaXMuc2xpZGVzLmZpcnN0LmlkIDogbnVsbCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHsgdGhpcy5fZGVzdHJveSQubmV4dCgpOyB9XG5cbiAgLyoqXG4gICAqIE5hdmlnYXRlcyB0byBhIHNsaWRlIHdpdGggdGhlIHNwZWNpZmllZCBpZGVudGlmaWVyLlxuICAgKi9cbiAgc2VsZWN0KHNsaWRlSWQ6IHN0cmluZywgc291cmNlPzogTmdiU2xpZGVFdmVudFNvdXJjZSkge1xuICAgIHRoaXMuX2N5Y2xlVG9TZWxlY3RlZChzbGlkZUlkLCB0aGlzLl9nZXRTbGlkZUV2ZW50RGlyZWN0aW9uKHRoaXMuYWN0aXZlSWQsIHNsaWRlSWQpLCBzb3VyY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIE5hdmlnYXRlcyB0byB0aGUgcHJldmlvdXMgc2xpZGUuXG4gICAqL1xuICBwcmV2KHNvdXJjZT86IE5nYlNsaWRlRXZlbnRTb3VyY2UpIHtcbiAgICB0aGlzLl9jeWNsZVRvU2VsZWN0ZWQodGhpcy5fZ2V0UHJldlNsaWRlKHRoaXMuYWN0aXZlSWQpLCBOZ2JTbGlkZUV2ZW50RGlyZWN0aW9uLlJJR0hULCBzb3VyY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIE5hdmlnYXRlcyB0byB0aGUgbmV4dCBzbGlkZS5cbiAgICovXG4gIG5leHQoc291cmNlPzogTmdiU2xpZGVFdmVudFNvdXJjZSkge1xuICAgIHRoaXMuX2N5Y2xlVG9TZWxlY3RlZCh0aGlzLl9nZXROZXh0U2xpZGUodGhpcy5hY3RpdmVJZCksIE5nYlNsaWRlRXZlbnREaXJlY3Rpb24uTEVGVCwgc291cmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXVzZXMgY3ljbGluZyB0aHJvdWdoIHRoZSBzbGlkZXMuXG4gICAqL1xuICBwYXVzZSgpIHsgdGhpcy5fcGF1c2UkLm5leHQodHJ1ZSk7IH1cblxuICAvKipcbiAgICogUmVzdGFydHMgY3ljbGluZyB0aHJvdWdoIHRoZSBzbGlkZXMgZnJvbSBsZWZ0IHRvIHJpZ2h0LlxuICAgKi9cbiAgY3ljbGUoKSB7IHRoaXMuX3BhdXNlJC5uZXh0KGZhbHNlKTsgfVxuXG4gIHByaXZhdGUgX2N5Y2xlVG9TZWxlY3RlZChzbGlkZUlkeDogc3RyaW5nLCBkaXJlY3Rpb246IE5nYlNsaWRlRXZlbnREaXJlY3Rpb24sIHNvdXJjZT86IE5nYlNsaWRlRXZlbnRTb3VyY2UpIHtcbiAgICBsZXQgc2VsZWN0ZWRTbGlkZSA9IHRoaXMuX2dldFNsaWRlQnlJZChzbGlkZUlkeCk7XG4gICAgaWYgKHNlbGVjdGVkU2xpZGUgJiYgc2VsZWN0ZWRTbGlkZS5pZCAhPT0gdGhpcy5hY3RpdmVJZCkge1xuICAgICAgdGhpcy5zbGlkZS5lbWl0KFxuICAgICAgICAgIHtwcmV2OiB0aGlzLmFjdGl2ZUlkLCBjdXJyZW50OiBzZWxlY3RlZFNsaWRlLmlkLCBkaXJlY3Rpb246IGRpcmVjdGlvbiwgcGF1c2VkOiB0aGlzLl9wYXVzZSQudmFsdWUsIHNvdXJjZX0pO1xuICAgICAgdGhpcy5hY3RpdmVJZCA9IHNlbGVjdGVkU2xpZGUuaWQ7XG4gICAgfVxuXG4gICAgLy8gd2UgZ2V0IGhlcmUgYWZ0ZXIgdGhlIGludGVydmFsIGZpcmVzIG9yIGFueSBleHRlcm5hbCBBUEkgY2FsbCBsaWtlIG5leHQoKSwgcHJldigpIG9yIHNlbGVjdCgpXG4gICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIF9nZXRTbGlkZUV2ZW50RGlyZWN0aW9uKGN1cnJlbnRBY3RpdmVTbGlkZUlkOiBzdHJpbmcsIG5leHRBY3RpdmVTbGlkZUlkOiBzdHJpbmcpOiBOZ2JTbGlkZUV2ZW50RGlyZWN0aW9uIHtcbiAgICBjb25zdCBjdXJyZW50QWN0aXZlU2xpZGVJZHggPSB0aGlzLl9nZXRTbGlkZUlkeEJ5SWQoY3VycmVudEFjdGl2ZVNsaWRlSWQpO1xuICAgIGNvbnN0IG5leHRBY3RpdmVTbGlkZUlkeCA9IHRoaXMuX2dldFNsaWRlSWR4QnlJZChuZXh0QWN0aXZlU2xpZGVJZCk7XG5cbiAgICByZXR1cm4gY3VycmVudEFjdGl2ZVNsaWRlSWR4ID4gbmV4dEFjdGl2ZVNsaWRlSWR4ID8gTmdiU2xpZGVFdmVudERpcmVjdGlvbi5SSUdIVCA6IE5nYlNsaWRlRXZlbnREaXJlY3Rpb24uTEVGVDtcbiAgfVxuXG4gIHByaXZhdGUgX2dldFNsaWRlQnlJZChzbGlkZUlkOiBzdHJpbmcpOiBOZ2JTbGlkZSB7IHJldHVybiB0aGlzLnNsaWRlcy5maW5kKHNsaWRlID0+IHNsaWRlLmlkID09PSBzbGlkZUlkKTsgfVxuXG4gIHByaXZhdGUgX2dldFNsaWRlSWR4QnlJZChzbGlkZUlkOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnNsaWRlcy50b0FycmF5KCkuaW5kZXhPZih0aGlzLl9nZXRTbGlkZUJ5SWQoc2xpZGVJZCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0TmV4dFNsaWRlKGN1cnJlbnRTbGlkZUlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHNsaWRlQXJyID0gdGhpcy5zbGlkZXMudG9BcnJheSgpO1xuICAgIGNvbnN0IGN1cnJlbnRTbGlkZUlkeCA9IHRoaXMuX2dldFNsaWRlSWR4QnlJZChjdXJyZW50U2xpZGVJZCk7XG4gICAgY29uc3QgaXNMYXN0U2xpZGUgPSBjdXJyZW50U2xpZGVJZHggPT09IHNsaWRlQXJyLmxlbmd0aCAtIDE7XG5cbiAgICByZXR1cm4gaXNMYXN0U2xpZGUgPyAodGhpcy53cmFwID8gc2xpZGVBcnJbMF0uaWQgOiBzbGlkZUFycltzbGlkZUFyci5sZW5ndGggLSAxXS5pZCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgIHNsaWRlQXJyW2N1cnJlbnRTbGlkZUlkeCArIDFdLmlkO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0UHJldlNsaWRlKGN1cnJlbnRTbGlkZUlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHNsaWRlQXJyID0gdGhpcy5zbGlkZXMudG9BcnJheSgpO1xuICAgIGNvbnN0IGN1cnJlbnRTbGlkZUlkeCA9IHRoaXMuX2dldFNsaWRlSWR4QnlJZChjdXJyZW50U2xpZGVJZCk7XG4gICAgY29uc3QgaXNGaXJzdFNsaWRlID0gY3VycmVudFNsaWRlSWR4ID09PSAwO1xuXG4gICAgcmV0dXJuIGlzRmlyc3RTbGlkZSA/ICh0aGlzLndyYXAgPyBzbGlkZUFycltzbGlkZUFyci5sZW5ndGggLSAxXS5pZCA6IHNsaWRlQXJyWzBdLmlkKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNsaWRlQXJyW2N1cnJlbnRTbGlkZUlkeCAtIDFdLmlkO1xuICB9XG59XG5cbi8qKlxuICogQSBzbGlkZSBjaGFuZ2UgZXZlbnQgZW1pdHRlZCByaWdodCBhZnRlciB0aGUgc2xpZGUgdHJhbnNpdGlvbiBpcyBjb21wbGV0ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmdiU2xpZGVFdmVudCB7XG4gIC8qKlxuICAgKiBUaGUgcHJldmlvdXMgc2xpZGUgaWQuXG4gICAqL1xuICBwcmV2OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IHNsaWRlIGlkLlxuICAgKi9cbiAgY3VycmVudDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc2xpZGUgZXZlbnQgZGlyZWN0aW9uLlxuICAgKlxuICAgKiBQb3NzaWJsZSB2YWx1ZXMgYXJlIGAnbGVmdCcgfCAncmlnaHQnYC5cbiAgICovXG4gIGRpcmVjdGlvbjogTmdiU2xpZGVFdmVudERpcmVjdGlvbjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgcGF1c2UoKSBtZXRob2Qgd2FzIGNhbGxlZCAoYW5kIG5vIGN5Y2xlKCkgY2FsbCB3YXMgZG9uZSBhZnRlcndhcmRzKS5cbiAgICpcbiAgICogQHNpbmNlIDUuMS4wXG4gICAqL1xuICBwYXVzZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNvdXJjZSB0cmlnZ2VyaW5nIHRoZSBzbGlkZSBjaGFuZ2UgZXZlbnQuXG4gICAqXG4gICAqIFBvc3NpYmxlIHZhbHVlcyBhcmUgYCd0aW1lcicgfCAnYXJyb3dMZWZ0JyB8ICdhcnJvd1JpZ2h0JyB8ICdpbmRpY2F0b3InYFxuICAgKlxuICAgKiBAc2luY2UgNS4xLjBcbiAgICovXG4gIHNvdXJjZT86IE5nYlNsaWRlRXZlbnRTb3VyY2U7XG59XG5cbi8qKlxuICogRGVmaW5lcyB0aGUgY2Fyb3VzZWwgc2xpZGUgdHJhbnNpdGlvbiBkaXJlY3Rpb24uXG4gKi9cbmV4cG9ydCBlbnVtIE5nYlNsaWRlRXZlbnREaXJlY3Rpb24ge1xuICBMRUZUID0gPGFueT4nbGVmdCcsXG4gIFJJR0hUID0gPGFueT4ncmlnaHQnXG59XG5cbmV4cG9ydCBlbnVtIE5nYlNsaWRlRXZlbnRTb3VyY2Uge1xuICBUSU1FUiA9ICd0aW1lcicsXG4gIEFSUk9XX0xFRlQgPSAnYXJyb3dMZWZ0JyxcbiAgQVJST1dfUklHSFQgPSAnYXJyb3dSaWdodCcsXG4gIElORElDQVRPUiA9ICdpbmRpY2F0b3InXG59XG5cbmV4cG9ydCBjb25zdCBOR0JfQ0FST1VTRUxfRElSRUNUSVZFUyA9IFtOZ2JDYXJvdXNlbCwgTmdiU2xpZGVdO1xuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/carousel/carousel.module.js b/dist/sunbird-ui-components/esm2015/carousel/carousel.module.js new file mode 100644 index 0000000..266463a --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/carousel/carousel.module.js @@ -0,0 +1,15 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { NGB_CAROUSEL_DIRECTIVES } from './carousel'; +export { NgbCarousel, NgbSlide, NgbSlideEventDirection, NgbSlideEventSource } from './carousel'; +export { NgbCarouselConfig } from './carousel-config'; +export class NgbCarouselModule { +} +NgbCarouselModule.decorators = [ + { type: NgModule, args: [{ declarations: NGB_CAROUSEL_DIRECTIVES, exports: NGB_CAROUSEL_DIRECTIVES, imports: [CommonModule] },] } +]; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwubW9kdWxlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY2Fyb3VzZWwvY2Fyb3VzZWwubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUU3QyxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFFbkQsT0FBTyxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQWlCLHNCQUFzQixFQUFFLG1CQUFtQixFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQzdHLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBR3BELE1BQU0sT0FBTyxpQkFBaUI7OztZQUQ3QixRQUFRLFNBQUMsRUFBQyxZQUFZLEVBQUUsdUJBQXVCLEVBQUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHtOR0JfQ0FST1VTRUxfRElSRUNUSVZFU30gZnJvbSAnLi9jYXJvdXNlbCc7XG5cbmV4cG9ydCB7TmdiQ2Fyb3VzZWwsIE5nYlNsaWRlLCBOZ2JTbGlkZUV2ZW50LCBOZ2JTbGlkZUV2ZW50RGlyZWN0aW9uLCBOZ2JTbGlkZUV2ZW50U291cmNlfSBmcm9tICcuL2Nhcm91c2VsJztcbmV4cG9ydCB7TmdiQ2Fyb3VzZWxDb25maWd9IGZyb20gJy4vY2Fyb3VzZWwtY29uZmlnJztcblxuQE5nTW9kdWxlKHtkZWNsYXJhdGlvbnM6IE5HQl9DQVJPVVNFTF9ESVJFQ1RJVkVTLCBleHBvcnRzOiBOR0JfQ0FST1VTRUxfRElSRUNUSVZFUywgaW1wb3J0czogW0NvbW1vbk1vZHVsZV19KVxuZXhwb3J0IGNsYXNzIE5nYkNhcm91c2VsTW9kdWxlIHtcbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/collapse/collapse.js b/dist/sunbird-ui-components/esm2015/collapse/collapse.js new file mode 100644 index 0000000..93d1c48 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/collapse/collapse.js @@ -0,0 +1,34 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Directive, Input } from '@angular/core'; +/** + * A directive to provide a simple way of hiding and showing elements on the page. + */ +export class NgbCollapse { + constructor() { + /** + * If `true`, will collapse the element or show it otherwise. + */ + this.collapsed = false; + } +} +NgbCollapse.decorators = [ + { type: Directive, args: [{ + selector: '[ngbCollapse]', + exportAs: 'ngbCollapse', + host: { '[class.collapse]': 'true', '[class.show]': '!collapsed' } + },] } +]; +NgbCollapse.propDecorators = { + collapsed: [{ type: Input, args: ['ngbCollapse',] }] +}; +if (false) { + /** + * If `true`, will collapse the element or show it otherwise. + * @type {?} + */ + NgbCollapse.prototype.collapsed; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGFwc2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb2xsYXBzZS9jb2xsYXBzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUMsTUFBTSxlQUFlLENBQUM7Ozs7QUFVL0MsTUFBTSxPQUFPLFdBQVc7SUFMeEI7Ozs7UUFTd0IsY0FBUyxHQUFHLEtBQUssQ0FBQztJQUMxQyxDQUFDOzs7WUFWQSxTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLGVBQWU7Z0JBQ3pCLFFBQVEsRUFBRSxhQUFhO2dCQUN2QixJQUFJLEVBQUUsRUFBQyxrQkFBa0IsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBQzthQUNqRTs7O3dCQUtFLEtBQUssU0FBQyxhQUFhOzs7Ozs7O0lBQXBCLGdDQUF3QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGlyZWN0aXZlLCBJbnB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogQSBkaXJlY3RpdmUgdG8gcHJvdmlkZSBhIHNpbXBsZSB3YXkgb2YgaGlkaW5nIGFuZCBzaG93aW5nIGVsZW1lbnRzIG9uIHRoZSBwYWdlLlxuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbbmdiQ29sbGFwc2VdJyxcbiAgZXhwb3J0QXM6ICduZ2JDb2xsYXBzZScsXG4gIGhvc3Q6IHsnW2NsYXNzLmNvbGxhcHNlXSc6ICd0cnVlJywgJ1tjbGFzcy5zaG93XSc6ICchY29sbGFwc2VkJ31cbn0pXG5leHBvcnQgY2xhc3MgTmdiQ29sbGFwc2Uge1xuICAvKipcbiAgICogSWYgYHRydWVgLCB3aWxsIGNvbGxhcHNlIHRoZSBlbGVtZW50IG9yIHNob3cgaXQgb3RoZXJ3aXNlLlxuICAgKi9cbiAgQElucHV0KCduZ2JDb2xsYXBzZScpIGNvbGxhcHNlZCA9IGZhbHNlO1xufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/collapse/collapse.module.js b/dist/sunbird-ui-components/esm2015/collapse/collapse.module.js new file mode 100644 index 0000000..89c3516 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/collapse/collapse.module.js @@ -0,0 +1,13 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgModule } from '@angular/core'; +import { NgbCollapse } from './collapse'; +export { NgbCollapse } from './collapse'; +export class NgbCollapseModule { +} +NgbCollapseModule.decorators = [ + { type: NgModule, args: [{ declarations: [NgbCollapse], exports: [NgbCollapse] },] } +]; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGFwc2UubW9kdWxlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY29sbGFwc2UvY29sbGFwc2UubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFFdkMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUd2QyxNQUFNLE9BQU8saUJBQWlCOzs7WUFEN0IsUUFBUSxTQUFDLEVBQUMsWUFBWSxFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge05nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TmdiQ29sbGFwc2V9IGZyb20gJy4vY29sbGFwc2UnO1xuXG5leHBvcnQge05nYkNvbGxhcHNlfSBmcm9tICcuL2NvbGxhcHNlJztcblxuQE5nTW9kdWxlKHtkZWNsYXJhdGlvbnM6IFtOZ2JDb2xsYXBzZV0sIGV4cG9ydHM6IFtOZ2JDb2xsYXBzZV19KVxuZXhwb3J0IGNsYXNzIE5nYkNvbGxhcHNlTW9kdWxlIHtcbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/datepicker/adapters/ngb-date-adapter.js b/dist/sunbird-ui-components/esm2015/datepicker/adapters/ngb-date-adapter.js new file mode 100644 index 0000000..fc19975 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/datepicker/adapters/ngb-date-adapter.js @@ -0,0 +1,75 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Injectable } from '@angular/core'; +import { isInteger } from '../../util/util'; +import * as i0 from "@angular/core"; +/** + * @return {?} + */ +export function NGB_DATEPICKER_DATE_ADAPTER_FACTORY() { + return new NgbDateStructAdapter(); +} +/** + * An abstract service that does the conversion between the internal datepicker `NgbDateStruct` model and + * any provided user date model `D`, ex. a string, a native date, etc. + * + * The adapter is used **only** for conversion when binding datepicker to a form control, + * ex. `[(ngModel)]="userDateModel"`. Here `userDateModel` can be of any type. + * + * The default datepicker implementation assumes we use `NgbDateStruct` as a user model. + * + * See the [date format overview](#/components/datepicker/overview#date-model) for more details + * and the [custom adapter demo](#/components/datepicker/examples#adapter) for an example. + * @abstract + * @template D + */ +export class NgbDateAdapter { +} +NgbDateAdapter.decorators = [ + { type: Injectable, args: [{ providedIn: 'root', useFactory: NGB_DATEPICKER_DATE_ADAPTER_FACTORY },] } +]; +/** @nocollapse */ NgbDateAdapter.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: NGB_DATEPICKER_DATE_ADAPTER_FACTORY, token: NgbDateAdapter, providedIn: "root" }); +if (false) { + /** + * Converts a user-model date of type `D` to an `NgbDateStruct` for internal use. + * @abstract + * @param {?} value + * @return {?} + */ + NgbDateAdapter.prototype.fromModel = function (value) { }; + /** + * Converts an internal `NgbDateStruct` date to a user-model date of type `D`. + * @abstract + * @param {?} date + * @return {?} + */ + NgbDateAdapter.prototype.toModel = function (date) { }; +} +export class NgbDateStructAdapter extends NgbDateAdapter { + /** + * Converts a NgbDateStruct value into NgbDateStruct value + * @param {?} date + * @return {?} + */ + fromModel(date) { + return (date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day)) ? + { year: date.year, month: date.month, day: date.day } : + null; + } + /** + * Converts a NgbDateStruct value into NgbDateStruct value + * @param {?} date + * @return {?} + */ + toModel(date) { + return (date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day)) ? + { year: date.year, month: date.month, day: date.day } : + null; + } +} +NgbDateStructAdapter.decorators = [ + { type: Injectable } +]; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdiLWRhdGUtYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImRhdGVwaWNrZXIvYWRhcHRlcnMvbmdiLWRhdGUtYWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0saUJBQWlCLENBQUM7Ozs7O0FBRTFDLE1BQU0sVUFBVSxtQ0FBbUM7SUFDakQsT0FBTyxJQUFJLG9CQUFvQixFQUFFLENBQUM7QUFDcEMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBZUQsTUFBTSxPQUFnQixjQUFjOzs7WUFEbkMsVUFBVSxTQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsbUNBQW1DLEVBQUM7Ozs7Ozs7Ozs7SUFLL0UsMERBQTRDOzs7Ozs7O0lBSzVDLHVEQUF5Qzs7QUFJM0MsTUFBTSxPQUFPLG9CQUFxQixTQUFRLGNBQTZCOzs7Ozs7SUFJckUsU0FBUyxDQUFDLElBQW1CO1FBQzNCLE9BQU8sQ0FBQyxJQUFJLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25GLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDO1lBQ3JELElBQUksQ0FBQztJQUNYLENBQUM7Ozs7OztJQUtELE9BQU8sQ0FBQyxJQUFtQjtRQUN6QixPQUFPLENBQUMsSUFBSSxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuRixFQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQztZQUNyRCxJQUFJLENBQUM7SUFDWCxDQUFDOzs7WUFsQkYsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge05nYkRhdGVTdHJ1Y3R9IGZyb20gJy4uL25nYi1kYXRlLXN0cnVjdCc7XG5pbXBvcnQge2lzSW50ZWdlcn0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcblxuZXhwb3J0IGZ1bmN0aW9uIE5HQl9EQVRFUElDS0VSX0RBVEVfQURBUFRFUl9GQUNUT1JZKCkge1xuICByZXR1cm4gbmV3IE5nYkRhdGVTdHJ1Y3RBZGFwdGVyKCk7XG59XG5cbi8qKlxuICogQW4gYWJzdHJhY3Qgc2VydmljZSB0aGF0IGRvZXMgdGhlIGNvbnZlcnNpb24gYmV0d2VlbiB0aGUgaW50ZXJuYWwgZGF0ZXBpY2tlciBgTmdiRGF0ZVN0cnVjdGAgbW9kZWwgYW5kXG4gKiBhbnkgcHJvdmlkZWQgdXNlciBkYXRlIG1vZGVsIGBEYCwgZXguIGEgc3RyaW5nLCBhIG5hdGl2ZSBkYXRlLCBldGMuXG4gKlxuICogVGhlIGFkYXB0ZXIgaXMgdXNlZCAqKm9ubHkqKiBmb3IgY29udmVyc2lvbiB3aGVuIGJpbmRpbmcgZGF0ZXBpY2tlciB0byBhIGZvcm0gY29udHJvbCxcbiAqIGV4LiBgWyhuZ01vZGVsKV09XCJ1c2VyRGF0ZU1vZGVsXCJgLiBIZXJlIGB1c2VyRGF0ZU1vZGVsYCBjYW4gYmUgb2YgYW55IHR5cGUuXG4gKlxuICogVGhlIGRlZmF1bHQgZGF0ZXBpY2tlciBpbXBsZW1lbnRhdGlvbiBhc3N1bWVzIHdlIHVzZSBgTmdiRGF0ZVN0cnVjdGAgYXMgYSB1c2VyIG1vZGVsLlxuICpcbiAqIFNlZSB0aGUgW2RhdGUgZm9ybWF0IG92ZXJ2aWV3XSgjL2NvbXBvbmVudHMvZGF0ZXBpY2tlci9vdmVydmlldyNkYXRlLW1vZGVsKSBmb3IgbW9yZSBkZXRhaWxzXG4gKiBhbmQgdGhlIFtjdXN0b20gYWRhcHRlciBkZW1vXSgjL2NvbXBvbmVudHMvZGF0ZXBpY2tlci9leGFtcGxlcyNhZGFwdGVyKSBmb3IgYW4gZXhhbXBsZS5cbiAqL1xuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290JywgdXNlRmFjdG9yeTogTkdCX0RBVEVQSUNLRVJfREFURV9BREFQVEVSX0ZBQ1RPUll9KVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE5nYkRhdGVBZGFwdGVyPEQ+IHtcbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgdXNlci1tb2RlbCBkYXRlIG9mIHR5cGUgYERgIHRvIGFuIGBOZ2JEYXRlU3RydWN0YCBmb3IgaW50ZXJuYWwgdXNlLlxuICAgKi9cbiAgYWJzdHJhY3QgZnJvbU1vZGVsKHZhbHVlOiBEKTogTmdiRGF0ZVN0cnVjdDtcblxuICAvKipcbiAgICogQ29udmVydHMgYW4gaW50ZXJuYWwgYE5nYkRhdGVTdHJ1Y3RgIGRhdGUgdG8gYSB1c2VyLW1vZGVsIGRhdGUgb2YgdHlwZSBgRGAuXG4gICAqL1xuICBhYnN0cmFjdCB0b01vZGVsKGRhdGU6IE5nYkRhdGVTdHJ1Y3QpOiBEO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTmdiRGF0ZVN0cnVjdEFkYXB0ZXIgZXh0ZW5kcyBOZ2JEYXRlQWRhcHRlcjxOZ2JEYXRlU3RydWN0PiB7XG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIE5nYkRhdGVTdHJ1Y3QgdmFsdWUgaW50byBOZ2JEYXRlU3RydWN0IHZhbHVlXG4gICAqL1xuICBmcm9tTW9kZWwoZGF0ZTogTmdiRGF0ZVN0cnVjdCk6IE5nYkRhdGVTdHJ1Y3Qge1xuICAgIHJldHVybiAoZGF0ZSAmJiBpc0ludGVnZXIoZGF0ZS55ZWFyKSAmJiBpc0ludGVnZXIoZGF0ZS5tb250aCkgJiYgaXNJbnRlZ2VyKGRhdGUuZGF5KSkgP1xuICAgICAgICB7eWVhcjogZGF0ZS55ZWFyLCBtb250aDogZGF0ZS5tb250aCwgZGF5OiBkYXRlLmRheX0gOlxuICAgICAgICBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgTmdiRGF0ZVN0cnVjdCB2YWx1ZSBpbnRvIE5nYkRhdGVTdHJ1Y3QgdmFsdWVcbiAgICovXG4gIHRvTW9kZWwoZGF0ZTogTmdiRGF0ZVN0cnVjdCk6IE5nYkRhdGVTdHJ1Y3Qge1xuICAgIHJldHVybiAoZGF0ZSAmJiBpc0ludGVnZXIoZGF0ZS55ZWFyKSAmJiBpc0ludGVnZXIoZGF0ZS5tb250aCkgJiYgaXNJbnRlZ2VyKGRhdGUuZGF5KSkgP1xuICAgICAgICB7eWVhcjogZGF0ZS55ZWFyLCBtb250aDogZGF0ZS5tb250aCwgZGF5OiBkYXRlLmRheX0gOlxuICAgICAgICBudWxsO1xuICB9XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/datepicker/adapters/ngb-date-native-adapter.js b/dist/sunbird-ui-components/esm2015/datepicker/adapters/ngb-date-native-adapter.js new file mode 100644 index 0000000..3fb3b95 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/datepicker/adapters/ngb-date-native-adapter.js @@ -0,0 +1,54 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Injectable } from '@angular/core'; +import { NgbDateAdapter } from './ngb-date-adapter'; +import { isInteger } from '../../util/util'; +/** + * [`NgbDateAdapter`](#/components/datepicker/api#NgbDateAdapter) implementation that uses + * native javascript dates as a user date model. + */ +export class NgbDateNativeAdapter extends NgbDateAdapter { + /** + * Converts a native `Date` to a `NgbDateStruct`. + * @param {?} date + * @return {?} + */ + fromModel(date) { + return (date instanceof Date && !isNaN(date.getTime())) ? this._fromNativeDate(date) : null; + } + /** + * Converts a `NgbDateStruct` to a native `Date`. + * @param {?} date + * @return {?} + */ + toModel(date) { + return date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day) ? this._toNativeDate(date) : + null; + } + /** + * @protected + * @param {?} date + * @return {?} + */ + _fromNativeDate(date) { + return { year: date.getFullYear(), month: date.getMonth() + 1, day: date.getDate() }; + } + /** + * @protected + * @param {?} date + * @return {?} + */ + _toNativeDate(date) { + /** @type {?} */ + const jsDate = new Date(date.year, date.month - 1, date.day, 12); + // avoid 30 -> 1930 conversion + jsDate.setFullYear(date.year); + return jsDate; + } +} +NgbDateNativeAdapter.decorators = [ + { type: Injectable } +]; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdiLWRhdGUtbmF0aXZlLWFkYXB0ZXIuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJkYXRlcGlja2VyL2FkYXB0ZXJzL25nYi1kYXRlLW5hdGl2ZS1hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVsRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0saUJBQWlCLENBQUM7Ozs7O0FBTzFDLE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxjQUFvQjs7Ozs7O0lBSTVELFNBQVMsQ0FBQyxJQUFVO1FBQ2xCLE9BQU8sQ0FBQyxJQUFJLFlBQVksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUM5RixDQUFDOzs7Ozs7SUFLRCxPQUFPLENBQUMsSUFBbUI7UUFDekIsT0FBTyxJQUFJLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUMxQixJQUFJLENBQUM7SUFDN0YsQ0FBQzs7Ozs7O0lBRVMsZUFBZSxDQUFDLElBQVU7UUFDbEMsT0FBTyxFQUFDLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBQyxDQUFDO0lBQ3JGLENBQUM7Ozs7OztJQUVTLGFBQWEsQ0FBQyxJQUFtQjs7Y0FDbkMsTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDaEUsOEJBQThCO1FBQzlCLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlCLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7OztZQTFCRixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TmdiRGF0ZUFkYXB0ZXJ9IGZyb20gJy4vbmdiLWRhdGUtYWRhcHRlcic7XG5pbXBvcnQge05nYkRhdGVTdHJ1Y3R9IGZyb20gJy4uL25nYi1kYXRlLXN0cnVjdCc7XG5pbXBvcnQge2lzSW50ZWdlcn0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcblxuLyoqXG4gKiBbYE5nYkRhdGVBZGFwdGVyYF0oIy9jb21wb25lbnRzL2RhdGVwaWNrZXIvYXBpI05nYkRhdGVBZGFwdGVyKSBpbXBsZW1lbnRhdGlvbiB0aGF0IHVzZXNcbiAqIG5hdGl2ZSBqYXZhc2NyaXB0IGRhdGVzIGFzIGEgdXNlciBkYXRlIG1vZGVsLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTmdiRGF0ZU5hdGl2ZUFkYXB0ZXIgZXh0ZW5kcyBOZ2JEYXRlQWRhcHRlcjxEYXRlPiB7XG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIG5hdGl2ZSBgRGF0ZWAgdG8gYSBgTmdiRGF0ZVN0cnVjdGAuXG4gICAqL1xuICBmcm9tTW9kZWwoZGF0ZTogRGF0ZSk6IE5nYkRhdGVTdHJ1Y3Qge1xuICAgIHJldHVybiAoZGF0ZSBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKGRhdGUuZ2V0VGltZSgpKSkgPyB0aGlzLl9mcm9tTmF0aXZlRGF0ZShkYXRlKSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYSBgTmdiRGF0ZVN0cnVjdGAgdG8gYSBuYXRpdmUgYERhdGVgLlxuICAgKi9cbiAgdG9Nb2RlbChkYXRlOiBOZ2JEYXRlU3RydWN0KTogRGF0ZSB7XG4gICAgcmV0dXJuIGRhdGUgJiYgaXNJbnRlZ2VyKGRhdGUueWVhcikgJiYgaXNJbnRlZ2VyKGRhdGUubW9udGgpICYmIGlzSW50ZWdlcihkYXRlLmRheSkgPyB0aGlzLl90b05hdGl2ZURhdGUoZGF0ZSkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbDtcbiAgfVxuXG4gIHByb3RlY3RlZCBfZnJvbU5hdGl2ZURhdGUoZGF0ZTogRGF0ZSk6IE5nYkRhdGVTdHJ1Y3Qge1xuICAgIHJldHVybiB7eWVhcjogZGF0ZS5nZXRGdWxsWWVhcigpLCBtb250aDogZGF0ZS5nZXRNb250aCgpICsgMSwgZGF5OiBkYXRlLmdldERhdGUoKX07XG4gIH1cblxuICBwcm90ZWN0ZWQgX3RvTmF0aXZlRGF0ZShkYXRlOiBOZ2JEYXRlU3RydWN0KTogRGF0ZSB7XG4gICAgY29uc3QganNEYXRlID0gbmV3IERhdGUoZGF0ZS55ZWFyLCBkYXRlLm1vbnRoIC0gMSwgZGF0ZS5kYXksIDEyKTtcbiAgICAvLyBhdm9pZCAzMCAtPiAxOTMwIGNvbnZlcnNpb25cbiAgICBqc0RhdGUuc2V0RnVsbFllYXIoZGF0ZS55ZWFyKTtcbiAgICByZXR1cm4ganNEYXRlO1xuICB9XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/datepicker/adapters/ngb-date-native-utc-adapter.js b/dist/sunbird-ui-components/esm2015/datepicker/adapters/ngb-date-native-utc-adapter.js new file mode 100644 index 0000000..316e302 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/datepicker/adapters/ngb-date-native-utc-adapter.js @@ -0,0 +1,37 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Injectable } from '@angular/core'; +import { NgbDateNativeAdapter } from './ngb-date-native-adapter'; +/** + * Same as [`NgbDateNativeAdapter`](#/components/datepicker/api#NgbDateNativeAdapter), but with UTC dates. + * + * \@since 3.2.0 + */ +export class NgbDateNativeUTCAdapter extends NgbDateNativeAdapter { + /** + * @protected + * @param {?} date + * @return {?} + */ + _fromNativeDate(date) { + return { year: date.getUTCFullYear(), month: date.getUTCMonth() + 1, day: date.getUTCDate() }; + } + /** + * @protected + * @param {?} date + * @return {?} + */ + _toNativeDate(date) { + /** @type {?} */ + const jsDate = new Date(Date.UTC(date.year, date.month - 1, date.day)); + // avoid 30 -> 1930 conversion + jsDate.setUTCFullYear(date.year); + return jsDate; + } +} +NgbDateNativeUTCAdapter.decorators = [ + { type: Injectable } +]; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdiLWRhdGUtbmF0aXZlLXV0Yy1hZGFwdGVyLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiZGF0ZXBpY2tlci9hZGFwdGVycy9uZ2ItZGF0ZS1uYXRpdmUtdXRjLWFkYXB0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFekMsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7Ozs7OztBQVEvRCxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsb0JBQW9COzs7Ozs7SUFDckQsZUFBZSxDQUFDLElBQVU7UUFDbEMsT0FBTyxFQUFDLElBQUksRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBQyxDQUFDO0lBQzlGLENBQUM7Ozs7OztJQUVTLGFBQWEsQ0FBQyxJQUFtQjs7Y0FDbkMsTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEUsOEJBQThCO1FBQzlCLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7OztZQVhGLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtOZ2JEYXRlU3RydWN0fSBmcm9tICcuLi9uZ2ItZGF0ZS1zdHJ1Y3QnO1xuaW1wb3J0IHtOZ2JEYXRlTmF0aXZlQWRhcHRlcn0gZnJvbSAnLi9uZ2ItZGF0ZS1uYXRpdmUtYWRhcHRlcic7XG5cbi8qKlxuICogU2FtZSBhcyBbYE5nYkRhdGVOYXRpdmVBZGFwdGVyYF0oIy9jb21wb25lbnRzL2RhdGVwaWNrZXIvYXBpI05nYkRhdGVOYXRpdmVBZGFwdGVyKSwgYnV0IHdpdGggVVRDIGRhdGVzLlxuICpcbiAqIEBzaW5jZSAzLjIuMFxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTmdiRGF0ZU5hdGl2ZVVUQ0FkYXB0ZXIgZXh0ZW5kcyBOZ2JEYXRlTmF0aXZlQWRhcHRlciB7XG4gIHByb3RlY3RlZCBfZnJvbU5hdGl2ZURhdGUoZGF0ZTogRGF0ZSk6IE5nYkRhdGVTdHJ1Y3Qge1xuICAgIHJldHVybiB7eWVhcjogZGF0ZS5nZXRVVENGdWxsWWVhcigpLCBtb250aDogZGF0ZS5nZXRVVENNb250aCgpICsgMSwgZGF5OiBkYXRlLmdldFVUQ0RhdGUoKX07XG4gIH1cblxuICBwcm90ZWN0ZWQgX3RvTmF0aXZlRGF0ZShkYXRlOiBOZ2JEYXRlU3RydWN0KTogRGF0ZSB7XG4gICAgY29uc3QganNEYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMoZGF0ZS55ZWFyLCBkYXRlLm1vbnRoIC0gMSwgZGF0ZS5kYXkpKTtcbiAgICAvLyBhdm9pZCAzMCAtPiAxOTMwIGNvbnZlcnNpb25cbiAgICBqc0RhdGUuc2V0VVRDRnVsbFllYXIoZGF0ZS55ZWFyKTtcbiAgICByZXR1cm4ganNEYXRlO1xuICB9XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/datepicker/datepicker-config.js b/dist/sunbird-ui-components/esm2015/datepicker/datepicker-config.js new file mode 100644 index 0000000..45f5a5e --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/datepicker/datepicker-config.js @@ -0,0 +1,55 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Injectable } from '@angular/core'; +import * as i0 from "@angular/core"; +/** + * A configuration service for the [`NgbDatepicker`](#/components/datepicker/api#NgbDatepicker) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the datepickers used in the application. + */ +export class NgbDatepickerConfig { + constructor() { + this.displayMonths = 1; + this.firstDayOfWeek = 1; + this.navigation = 'select'; + this.outsideDays = 'visible'; + this.showWeekdays = true; + this.showWeekNumbers = false; + } +} +NgbDatepickerConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } +]; +/** @nocollapse */ NgbDatepickerConfig.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function NgbDatepickerConfig_Factory() { return new NgbDatepickerConfig(); }, token: NgbDatepickerConfig, providedIn: "root" }); +if (false) { + /** @type {?} */ + NgbDatepickerConfig.prototype.dayTemplate; + /** @type {?} */ + NgbDatepickerConfig.prototype.dayTemplateData; + /** @type {?} */ + NgbDatepickerConfig.prototype.footerTemplate; + /** @type {?} */ + NgbDatepickerConfig.prototype.displayMonths; + /** @type {?} */ + NgbDatepickerConfig.prototype.firstDayOfWeek; + /** @type {?} */ + NgbDatepickerConfig.prototype.markDisabled; + /** @type {?} */ + NgbDatepickerConfig.prototype.minDate; + /** @type {?} */ + NgbDatepickerConfig.prototype.maxDate; + /** @type {?} */ + NgbDatepickerConfig.prototype.navigation; + /** @type {?} */ + NgbDatepickerConfig.prototype.outsideDays; + /** @type {?} */ + NgbDatepickerConfig.prototype.showWeekdays; + /** @type {?} */ + NgbDatepickerConfig.prototype.showWeekNumbers; + /** @type {?} */ + NgbDatepickerConfig.prototype.startDate; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1jb25maWcuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJkYXRlcGlja2VyL2RhdGVwaWNrZXItY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFjLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQVd0RCxNQUFNLE9BQU8sbUJBQW1CO0lBRGhDO1FBS0Usa0JBQWEsR0FBRyxDQUFDLENBQUM7UUFDbEIsbUJBQWMsR0FBRyxDQUFDLENBQUM7UUFJbkIsZUFBVSxHQUFpQyxRQUFRLENBQUM7UUFDcEQsZ0JBQVcsR0FBdUMsU0FBUyxDQUFDO1FBQzVELGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLG9CQUFlLEdBQUcsS0FBSyxDQUFDO0tBRXpCOzs7WUFmQSxVQUFVLFNBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDOzs7OztJQUU5QiwwQ0FBNkM7O0lBQzdDLDhDQUFzRjs7SUFDdEYsNkNBQWlDOztJQUNqQyw0Q0FBa0I7O0lBQ2xCLDZDQUFtQjs7SUFDbkIsMkNBQXVGOztJQUN2RixzQ0FBdUI7O0lBQ3ZCLHNDQUF1Qjs7SUFDdkIseUNBQW9EOztJQUNwRCwwQ0FBNEQ7O0lBQzVELDJDQUFvQjs7SUFDcEIsOENBQXdCOztJQUN4Qix3Q0FBeUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIFRlbXBsYXRlUmVmfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RGF5VGVtcGxhdGVDb250ZXh0fSBmcm9tICcuL2RhdGVwaWNrZXItZGF5LXRlbXBsYXRlLWNvbnRleHQnO1xuaW1wb3J0IHtOZ2JEYXRlU3RydWN0fSBmcm9tICcuL25nYi1kYXRlLXN0cnVjdCc7XG5cbi8qKlxuICogQSBjb25maWd1cmF0aW9uIHNlcnZpY2UgZm9yIHRoZSBbYE5nYkRhdGVwaWNrZXJgXSgjL2NvbXBvbmVudHMvZGF0ZXBpY2tlci9hcGkjTmdiRGF0ZXBpY2tlcikgY29tcG9uZW50LlxuICpcbiAqIFlvdSBjYW4gaW5qZWN0IHRoaXMgc2VydmljZSwgdHlwaWNhbGx5IGluIHlvdXIgcm9vdCBjb21wb25lbnQsIGFuZCBjdXN0b21pemUgdGhlIHZhbHVlcyBvZiBpdHMgcHJvcGVydGllcyBpblxuICogb3JkZXIgdG8gcHJvdmlkZSBkZWZhdWx0IHZhbHVlcyBmb3IgYWxsIHRoZSBkYXRlcGlja2VycyB1c2VkIGluIHRoZSBhcHBsaWNhdGlvbi5cbiAqL1xuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgTmdiRGF0ZXBpY2tlckNvbmZpZyB7XG4gIGRheVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxEYXlUZW1wbGF0ZUNvbnRleHQ+O1xuICBkYXlUZW1wbGF0ZURhdGE6IChkYXRlOiBOZ2JEYXRlU3RydWN0LCBjdXJyZW50OiB7eWVhcjogbnVtYmVyLCBtb250aDogbnVtYmVyfSkgPT4gYW55O1xuICBmb290ZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgZGlzcGxheU1vbnRocyA9IDE7XG4gIGZpcnN0RGF5T2ZXZWVrID0gMTtcbiAgbWFya0Rpc2FibGVkOiAoZGF0ZTogTmdiRGF0ZVN0cnVjdCwgY3VycmVudDoge3llYXI6IG51bWJlciwgbW9udGg6IG51bWJlcn0pID0+IGJvb2xlYW47XG4gIG1pbkRhdGU6IE5nYkRhdGVTdHJ1Y3Q7XG4gIG1heERhdGU6IE5nYkRhdGVTdHJ1Y3Q7XG4gIG5hdmlnYXRpb246ICdzZWxlY3QnIHwgJ2Fycm93cycgfCAnbm9uZScgPSAnc2VsZWN0JztcbiAgb3V0c2lkZURheXM6ICd2aXNpYmxlJyB8ICdjb2xsYXBzZWQnIHwgJ2hpZGRlbicgPSAndmlzaWJsZSc7XG4gIHNob3dXZWVrZGF5cyA9IHRydWU7XG4gIHNob3dXZWVrTnVtYmVycyA9IGZhbHNlO1xuICBzdGFydERhdGU6IHt5ZWFyOiBudW1iZXIsIG1vbnRoOiBudW1iZXJ9O1xufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/datepicker/datepicker-day-template-context.js b/dist/sunbird-ui-components/esm2015/datepicker/datepicker-day-template-context.js new file mode 100644 index 0000000..e75b9bf --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/datepicker/datepicker-day-template-context.js @@ -0,0 +1,62 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * The context for the datepicker 'day' template. + * + * You can override the way dates are displayed in the datepicker via the `[dayTemplate]` input. + * @record + */ +export function DayTemplateContext() { } +if (false) { + /** + * The date that corresponds to the template. Same as the `date` parameter. + * + * Can be used for convenience as a default template key, ex. `let-d`. + * + * \@since 3.3.0 + * @type {?} + */ + DayTemplateContext.prototype.$implicit; + /** + * The month currently displayed by the datepicker. + * @type {?} + */ + DayTemplateContext.prototype.currentMonth; + /** + * Any data you pass using the `[dayTemplateData]` input in the datepicker. + * + * \@since 3.3.0 + * @type {?|undefined} + */ + DayTemplateContext.prototype.data; + /** + * The date that corresponds to the template. + * @type {?} + */ + DayTemplateContext.prototype.date; + /** + * `True` if the current date is disabled. + * @type {?} + */ + DayTemplateContext.prototype.disabled; + /** + * `True` if the current date is focused. + * @type {?} + */ + DayTemplateContext.prototype.focused; + /** + * `True` if the current date is selected. + * @type {?} + */ + DayTemplateContext.prototype.selected; + /** + * `True` if the current date is today (equal to `NgbCalendar.getToday()`). + * + * \@since 4.1.0 + * @type {?} + */ + DayTemplateContext.prototype.today; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1kYXktdGVtcGxhdGUtY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImRhdGVwaWNrZXIvZGF0ZXBpY2tlci1kYXktdGVtcGxhdGUtY29udGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBTUEsd0NBZ0RDOzs7Ozs7Ozs7O0lBeENDLHVDQUFtQjs7Ozs7SUFLbkIsMENBQXFCOzs7Ozs7O0lBT3JCLGtDQUFXOzs7OztJQUtYLGtDQUFjOzs7OztJQUtkLHNDQUFrQjs7Ozs7SUFLbEIscUNBQWlCOzs7OztJQUtqQixzQ0FBa0I7Ozs7Ozs7SUFPbEIsbUNBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge05nYkRhdGV9IGZyb20gJy4vbmdiLWRhdGUnO1xuLyoqXG4gKiBUaGUgY29udGV4dCBmb3IgdGhlIGRhdGVwaWNrZXIgJ2RheScgdGVtcGxhdGUuXG4gKlxuICogWW91IGNhbiBvdmVycmlkZSB0aGUgd2F5IGRhdGVzIGFyZSBkaXNwbGF5ZWQgaW4gdGhlIGRhdGVwaWNrZXIgdmlhIHRoZSBgW2RheVRlbXBsYXRlXWAgaW5wdXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF5VGVtcGxhdGVDb250ZXh0IHtcbiAgLyoqXG4gICAqIFRoZSBkYXRlIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHRlbXBsYXRlLiBTYW1lIGFzIHRoZSBgZGF0ZWAgcGFyYW1ldGVyLlxuICAgKlxuICAgKiBDYW4gYmUgdXNlZCBmb3IgY29udmVuaWVuY2UgYXMgYSBkZWZhdWx0IHRlbXBsYXRlIGtleSwgZXguIGBsZXQtZGAuXG4gICAqXG4gICAqIEBzaW5jZSAzLjMuMFxuICAgKi9cbiAgJGltcGxpY2l0OiBOZ2JEYXRlO1xuXG4gIC8qKlxuICAgKiBUaGUgbW9udGggY3VycmVudGx5IGRpc3BsYXllZCBieSB0aGUgZGF0ZXBpY2tlci5cbiAgICovXG4gIGN1cnJlbnRNb250aDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBbnkgZGF0YSB5b3UgcGFzcyB1c2luZyB0aGUgYFtkYXlUZW1wbGF0ZURhdGFdYCBpbnB1dCBpbiB0aGUgZGF0ZXBpY2tlci5cbiAgICpcbiAgICogQHNpbmNlIDMuMy4wXG4gICAqL1xuICBkYXRhPzogYW55O1xuXG4gIC8qKlxuICAgKiBUaGUgZGF0ZSB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSB0ZW1wbGF0ZS5cbiAgICovXG4gIGRhdGU6IE5nYkRhdGU7XG5cbiAgLyoqXG4gICAqIGBUcnVlYCBpZiB0aGUgY3VycmVudCBkYXRlIGlzIGRpc2FibGVkLlxuICAgKi9cbiAgZGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIGBUcnVlYCBpZiB0aGUgY3VycmVudCBkYXRlIGlzIGZvY3VzZWQuXG4gICAqL1xuICBmb2N1c2VkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBgVHJ1ZWAgaWYgdGhlIGN1cnJlbnQgZGF0ZSBpcyBzZWxlY3RlZC5cbiAgICovXG4gIHNlbGVjdGVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBgVHJ1ZWAgaWYgdGhlIGN1cnJlbnQgZGF0ZSBpcyB0b2RheSAoZXF1YWwgdG8gYE5nYkNhbGVuZGFyLmdldFRvZGF5KClgKS5cbiAgICpcbiAgICogQHNpbmNlIDQuMS4wXG4gICAqL1xuICB0b2RheTogYm9vbGVhbjtcbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/datepicker/datepicker-day-view.js b/dist/sunbird-ui-components/esm2015/datepicker/datepicker-day-view.js new file mode 100644 index 0000000..5f4ea5f --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/datepicker/datepicker-day-view.js @@ -0,0 +1,62 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { ChangeDetectionStrategy, Component, Input, ViewEncapsulation } from '@angular/core'; +import { NgbDate } from './ngb-date'; +import { NgbDatepickerI18n } from './datepicker-i18n'; +export class NgbDatepickerDayView { + /** + * @param {?} i18n + */ + constructor(i18n) { + this.i18n = i18n; + } + /** + * @return {?} + */ + isMuted() { return !this.selected && (this.date.month !== this.currentMonth || this.disabled); } +} +NgbDatepickerDayView.decorators = [ + { type: Component, args: [{ + selector: '[ngbDatepickerDayView]', + changeDetection: ChangeDetectionStrategy.OnPush, + encapsulation: ViewEncapsulation.None, + host: { + 'class': 'btn-light', + '[class.bg-primary]': 'selected', + '[class.text-white]': 'selected', + '[class.text-muted]': 'isMuted()', + '[class.outside]': 'isMuted()', + '[class.active]': 'focused' + }, + template: `{{ i18n.getDayNumerals(date) }}`, + styles: ["[ngbDatepickerDayView]{text-align:center;width:2rem;height:2rem;line-height:2rem;border-radius:.25rem;background:0 0}[ngbDatepickerDayView].outside{opacity:.5}"] + }] } +]; +/** @nocollapse */ +NgbDatepickerDayView.ctorParameters = () => [ + { type: NgbDatepickerI18n } +]; +NgbDatepickerDayView.propDecorators = { + currentMonth: [{ type: Input }], + date: [{ type: Input }], + disabled: [{ type: Input }], + focused: [{ type: Input }], + selected: [{ type: Input }] +}; +if (false) { + /** @type {?} */ + NgbDatepickerDayView.prototype.currentMonth; + /** @type {?} */ + NgbDatepickerDayView.prototype.date; + /** @type {?} */ + NgbDatepickerDayView.prototype.disabled; + /** @type {?} */ + NgbDatepickerDayView.prototype.focused; + /** @type {?} */ + NgbDatepickerDayView.prototype.selected; + /** @type {?} */ + NgbDatepickerDayView.prototype.i18n; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1kYXktdmlldy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImRhdGVwaWNrZXIvZGF0ZXBpY2tlci1kYXktdmlldy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFDLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDM0YsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFlBQVksQ0FBQztBQUNuQyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQWlCcEQsTUFBTSxPQUFPLG9CQUFvQjs7OztJQU8vQixZQUFtQixJQUF1QjtRQUF2QixTQUFJLEdBQUosSUFBSSxDQUFtQjtJQUFHLENBQUM7Ozs7SUFFOUMsT0FBTyxLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7WUF4QmpHLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsd0JBQXdCO2dCQUNsQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtnQkFDL0MsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7Z0JBRXJDLElBQUksRUFBRTtvQkFDSixPQUFPLEVBQUUsV0FBVztvQkFDcEIsb0JBQW9CLEVBQUUsVUFBVTtvQkFDaEMsb0JBQW9CLEVBQUUsVUFBVTtvQkFDaEMsb0JBQW9CLEVBQUUsV0FBVztvQkFDakMsaUJBQWlCLEVBQUUsV0FBVztvQkFDOUIsZ0JBQWdCLEVBQUUsU0FBUztpQkFDNUI7Z0JBQ0QsUUFBUSxFQUFFLGlDQUFpQzs7YUFDNUM7Ozs7WUFoQk8saUJBQWlCOzs7MkJBa0J0QixLQUFLO21CQUNMLEtBQUs7dUJBQ0wsS0FBSztzQkFDTCxLQUFLO3VCQUNMLEtBQUs7Ozs7SUFKTiw0Q0FBOEI7O0lBQzlCLG9DQUF1Qjs7SUFDdkIsd0NBQTJCOztJQUMzQix1Q0FBMEI7O0lBQzFCLHdDQUEyQjs7SUFFZixvQ0FBOEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0LCBWaWV3RW5jYXBzdWxhdGlvbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge05nYkRhdGV9IGZyb20gJy4vbmdiLWRhdGUnO1xuaW1wb3J0IHtOZ2JEYXRlcGlja2VySTE4bn0gZnJvbSAnLi9kYXRlcGlja2VyLWkxOG4nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdbbmdiRGF0ZXBpY2tlckRheVZpZXddJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHN0eWxlVXJsczogWycuL2RhdGVwaWNrZXItZGF5LXZpZXcuc2NzcyddLFxuICBob3N0OiB7XG4gICAgJ2NsYXNzJzogJ2J0bi1saWdodCcsXG4gICAgJ1tjbGFzcy5iZy1wcmltYXJ5XSc6ICdzZWxlY3RlZCcsXG4gICAgJ1tjbGFzcy50ZXh0LXdoaXRlXSc6ICdzZWxlY3RlZCcsXG4gICAgJ1tjbGFzcy50ZXh0LW11dGVkXSc6ICdpc011dGVkKCknLFxuICAgICdbY2xhc3Mub3V0c2lkZV0nOiAnaXNNdXRlZCgpJyxcbiAgICAnW2NsYXNzLmFjdGl2ZV0nOiAnZm9jdXNlZCdcbiAgfSxcbiAgdGVtcGxhdGU6IGB7eyBpMThuLmdldERheU51bWVyYWxzKGRhdGUpIH19YFxufSlcbmV4cG9ydCBjbGFzcyBOZ2JEYXRlcGlja2VyRGF5VmlldyB7XG4gIEBJbnB1dCgpIGN1cnJlbnRNb250aDogbnVtYmVyO1xuICBASW5wdXQoKSBkYXRlOiBOZ2JEYXRlO1xuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbjtcbiAgQElucHV0KCkgZm9jdXNlZDogYm9vbGVhbjtcbiAgQElucHV0KCkgc2VsZWN0ZWQ6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IocHVibGljIGkxOG46IE5nYkRhdGVwaWNrZXJJMThuKSB7fVxuXG4gIGlzTXV0ZWQoKSB7IHJldHVybiAhdGhpcy5zZWxlY3RlZCAmJiAodGhpcy5kYXRlLm1vbnRoICE9PSB0aGlzLmN1cnJlbnRNb250aCB8fCB0aGlzLmRpc2FibGVkKTsgfVxufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/datepicker/datepicker-i18n.js b/dist/sunbird-ui-components/esm2015/datepicker/datepicker-i18n.js new file mode 100644 index 0000000..7937094 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/datepicker/datepicker-i18n.js @@ -0,0 +1,171 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Inject, Injectable, LOCALE_ID } from '@angular/core'; +import { FormStyle, getLocaleDayNames, getLocaleMonthNames, TranslationWidth, formatDate } from '@angular/common'; +import * as i0 from "@angular/core"; +/** + * @param {?} locale + * @return {?} + */ +export function NGB_DATEPICKER_18N_FACTORY(locale) { + return new NgbDatepickerI18nDefault(locale); +} +/** + * A service supplying i18n data to the datepicker component. + * + * The default implementation of this service uses the Angular locale and registered locale data for + * weekdays and month names (as explained in the Angular i18n guide). + * + * It also provides a way to i18n data that depends on calendar calculations, like aria labels, day, week and year + * numerals. For other static labels the datepicker uses the default Angular i18n. + * + * See the [i18n demo](#/components/datepicker/examples#i18n) and + * [Hebrew calendar demo](#/components/datepicker/calendars#hebrew) on how to extend this class and define + * a custom provider for i18n. + * @abstract + */ +export class NgbDatepickerI18n { + /** + * Returns the textual representation of a day that is rendered in a day cell. + * + * \@since 3.0.0 + * @param {?} date + * @return {?} + */ + getDayNumerals(date) { return `${date.day}`; } + /** + * Returns the textual representation of a week number rendered by datepicker. + * + * \@since 3.0.0 + * @param {?} weekNumber + * @return {?} + */ + getWeekNumerals(weekNumber) { return `${weekNumber}`; } + /** + * Returns the textual representation of a year that is rendered in the datepicker year select box. + * + * \@since 3.0.0 + * @param {?} year + * @return {?} + */ + getYearNumerals(year) { return `${year}`; } +} +NgbDatepickerI18n.decorators = [ + { type: Injectable, args: [{ providedIn: 'root', useFactory: NGB_DATEPICKER_18N_FACTORY, deps: [LOCALE_ID] },] } +]; +/** @nocollapse */ NgbDatepickerI18n.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function NgbDatepickerI18n_Factory() { return NGB_DATEPICKER_18N_FACTORY(i0.ɵɵinject(i0.LOCALE_ID)); }, token: NgbDatepickerI18n, providedIn: "root" }); +if (false) { + /** + * Returns the short weekday name to display in the heading of the month view. + * + * With default calendar we use ISO 8601: 'weekday' is 1=Mon ... 7=Sun. + * @abstract + * @param {?} weekday + * @return {?} + */ + NgbDatepickerI18n.prototype.getWeekdayShortName = function (weekday) { }; + /** + * Returns the short month name to display in the date picker navigation. + * + * With default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec. + * @abstract + * @param {?} month + * @param {?=} year + * @return {?} + */ + NgbDatepickerI18n.prototype.getMonthShortName = function (month, year) { }; + /** + * Returns the full month name to display in the date picker navigation. + * + * With default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec. + * @abstract + * @param {?} month + * @param {?=} year + * @return {?} + */ + NgbDatepickerI18n.prototype.getMonthFullName = function (month, year) { }; + /** + * Returns the value of the `aria-label` attribute for a specific date. + * + * \@since 2.0.0 + * @abstract + * @param {?} date + * @return {?} + */ + NgbDatepickerI18n.prototype.getDayAriaLabel = function (date) { }; +} +export class NgbDatepickerI18nDefault extends NgbDatepickerI18n { + /** + * @param {?} _locale + */ + constructor(_locale) { + super(); + this._locale = _locale; + /** @type {?} */ + const weekdaysStartingOnSunday = getLocaleDayNames(_locale, FormStyle.Standalone, TranslationWidth.Short); + this._weekdaysShort = weekdaysStartingOnSunday.map((/** + * @param {?} day + * @param {?} index + * @return {?} + */ + (day, index) => weekdaysStartingOnSunday[(index + 1) % 7])); + this._monthsShort = getLocaleMonthNames(_locale, FormStyle.Standalone, TranslationWidth.Abbreviated); + this._monthsFull = getLocaleMonthNames(_locale, FormStyle.Standalone, TranslationWidth.Wide); + } + /** + * @param {?} weekday + * @return {?} + */ + getWeekdayShortName(weekday) { return this._weekdaysShort[weekday - 1]; } + /** + * @param {?} month + * @return {?} + */ + getMonthShortName(month) { return this._monthsShort[month - 1]; } + /** + * @param {?} month + * @return {?} + */ + getMonthFullName(month) { return this._monthsFull[month - 1]; } + /** + * @param {?} date + * @return {?} + */ + getDayAriaLabel(date) { + /** @type {?} */ + const jsDate = new Date(date.year, date.month - 1, date.day); + return formatDate(jsDate, 'fullDate', this._locale); + } +} +NgbDatepickerI18nDefault.decorators = [ + { type: Injectable } +]; +/** @nocollapse */ +NgbDatepickerI18nDefault.ctorParameters = () => [ + { type: String, decorators: [{ type: Inject, args: [LOCALE_ID,] }] } +]; +if (false) { + /** + * @type {?} + * @private + */ + NgbDatepickerI18nDefault.prototype._weekdaysShort; + /** + * @type {?} + * @private + */ + NgbDatepickerI18nDefault.prototype._monthsShort; + /** + * @type {?} + * @private + */ + NgbDatepickerI18nDefault.prototype._monthsFull; + /** + * @type {?} + * @private + */ + NgbDatepickerI18nDefault.prototype._locale; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1pMThuLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiZGF0ZXBpY2tlci9kYXRlcGlja2VyLWkxOG4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUM1RCxPQUFPLEVBQUMsU0FBUyxFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBQyxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7QUFHaEgsTUFBTSxVQUFVLDBCQUEwQixDQUFDLE1BQU07SUFDL0MsT0FBTyxJQUFJLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzlDLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQWdCRCxNQUFNLE9BQWdCLGlCQUFpQjs7Ozs7Ozs7SUFrQ3JDLGNBQWMsQ0FBQyxJQUFtQixJQUFZLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDOzs7Ozs7OztJQU9yRSxlQUFlLENBQUMsVUFBa0IsSUFBWSxPQUFPLEdBQUcsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDOzs7Ozs7OztJQU92RSxlQUFlLENBQUMsSUFBWSxJQUFZLE9BQU8sR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7OztZQWpENUQsVUFBVSxTQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsMEJBQTBCLEVBQUUsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7OztJQU96Rix5RUFBc0Q7Ozs7Ozs7Ozs7SUFPdEQsMkVBQWlFOzs7Ozs7Ozs7O0lBT2pFLDBFQUFnRTs7Ozs7Ozs7O0lBT2hFLGtFQUFzRDs7QUF5QnhELE1BQU0sT0FBTyx3QkFBeUIsU0FBUSxpQkFBaUI7Ozs7SUFLN0QsWUFBdUMsT0FBZTtRQUNwRCxLQUFLLEVBQUUsQ0FBQztRQUQ2QixZQUFPLEdBQVAsT0FBTyxDQUFROztjQUc5Qyx3QkFBd0IsR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7UUFDekcsSUFBSSxDQUFDLGNBQWMsR0FBRyx3QkFBd0IsQ0FBQyxHQUFHOzs7OztRQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUMsQ0FBQztRQUU5RyxJQUFJLENBQUMsWUFBWSxHQUFHLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsVUFBVSxFQUFFLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3JHLElBQUksQ0FBQyxXQUFXLEdBQUcsbUJBQW1CLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0YsQ0FBQzs7Ozs7SUFFRCxtQkFBbUIsQ0FBQyxPQUFlLElBQVksT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Ozs7O0lBRXpGLGlCQUFpQixDQUFDLEtBQWEsSUFBWSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7Ozs7SUFFakYsZ0JBQWdCLENBQUMsS0FBYSxJQUFZLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7OztJQUUvRSxlQUFlLENBQUMsSUFBbUI7O2NBQzNCLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDNUQsT0FBTyxVQUFVLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEQsQ0FBQzs7O1lBekJGLFVBQVU7Ozs7eUNBTUksTUFBTSxTQUFDLFNBQVM7Ozs7Ozs7SUFKN0Isa0RBQXNDOzs7OztJQUN0QyxnREFBb0M7Ozs7O0lBQ3BDLCtDQUFtQzs7Ozs7SUFFdkIsMkNBQTBDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGUsIExPQ0FMRV9JRH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Zvcm1TdHlsZSwgZ2V0TG9jYWxlRGF5TmFtZXMsIGdldExvY2FsZU1vbnRoTmFtZXMsIFRyYW5zbGF0aW9uV2lkdGgsIGZvcm1hdERhdGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge05nYkRhdGVTdHJ1Y3R9IGZyb20gJy4vbmdiLWRhdGUtc3RydWN0JztcblxuZXhwb3J0IGZ1bmN0aW9uIE5HQl9EQVRFUElDS0VSXzE4Tl9GQUNUT1JZKGxvY2FsZSkge1xuICByZXR1cm4gbmV3IE5nYkRhdGVwaWNrZXJJMThuRGVmYXVsdChsb2NhbGUpO1xufVxuXG4vKipcbiAqIEEgc2VydmljZSBzdXBwbHlpbmcgaTE4biBkYXRhIHRvIHRoZSBkYXRlcGlja2VyIGNvbXBvbmVudC5cbiAqXG4gKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIHNlcnZpY2UgdXNlcyB0aGUgQW5ndWxhciBsb2NhbGUgYW5kIHJlZ2lzdGVyZWQgbG9jYWxlIGRhdGEgZm9yXG4gKiB3ZWVrZGF5cyBhbmQgbW9udGggbmFtZXMgKGFzIGV4cGxhaW5lZCBpbiB0aGUgQW5ndWxhciBpMThuIGd1aWRlKS5cbiAqXG4gKiBJdCBhbHNvIHByb3ZpZGVzIGEgd2F5IHRvIGkxOG4gZGF0YSB0aGF0IGRlcGVuZHMgb24gY2FsZW5kYXIgY2FsY3VsYXRpb25zLCBsaWtlIGFyaWEgbGFiZWxzLCBkYXksIHdlZWsgYW5kIHllYXJcbiAqIG51bWVyYWxzLiBGb3Igb3RoZXIgc3RhdGljIGxhYmVscyB0aGUgZGF0ZXBpY2tlciB1c2VzIHRoZSBkZWZhdWx0IEFuZ3VsYXIgaTE4bi5cbiAqXG4gKiBTZWUgdGhlIFtpMThuIGRlbW9dKCMvY29tcG9uZW50cy9kYXRlcGlja2VyL2V4YW1wbGVzI2kxOG4pIGFuZFxuICogW0hlYnJldyBjYWxlbmRhciBkZW1vXSgjL2NvbXBvbmVudHMvZGF0ZXBpY2tlci9jYWxlbmRhcnMjaGVicmV3KSBvbiBob3cgdG8gZXh0ZW5kIHRoaXMgY2xhc3MgYW5kIGRlZmluZVxuICogYSBjdXN0b20gcHJvdmlkZXIgZm9yIGkxOG4uXG4gKi9cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCcsIHVzZUZhY3Rvcnk6IE5HQl9EQVRFUElDS0VSXzE4Tl9GQUNUT1JZLCBkZXBzOiBbTE9DQUxFX0lEXX0pXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTmdiRGF0ZXBpY2tlckkxOG4ge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgc2hvcnQgd2Vla2RheSBuYW1lIHRvIGRpc3BsYXkgaW4gdGhlIGhlYWRpbmcgb2YgdGhlIG1vbnRoIHZpZXcuXG4gICAqXG4gICAqIFdpdGggZGVmYXVsdCBjYWxlbmRhciB3ZSB1c2UgSVNPIDg2MDE6ICd3ZWVrZGF5JyBpcyAxPU1vbiAuLi4gNz1TdW4uXG4gICAqL1xuICBhYnN0cmFjdCBnZXRXZWVrZGF5U2hvcnROYW1lKHdlZWtkYXk6IG51bWJlcik6IHN0cmluZztcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgc2hvcnQgbW9udGggbmFtZSB0byBkaXNwbGF5IGluIHRoZSBkYXRlIHBpY2tlciBuYXZpZ2F0aW9uLlxuICAgKlxuICAgKiBXaXRoIGRlZmF1bHQgY2FsZW5kYXIgd2UgdXNlIElTTyA4NjAxOiAnbW9udGgnIGlzIDE9SmFuIC4uLiAxMj1EZWMuXG4gICAqL1xuICBhYnN0cmFjdCBnZXRNb250aFNob3J0TmFtZShtb250aDogbnVtYmVyLCB5ZWFyPzogbnVtYmVyKTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBmdWxsIG1vbnRoIG5hbWUgdG8gZGlzcGxheSBpbiB0aGUgZGF0ZSBwaWNrZXIgbmF2aWdhdGlvbi5cbiAgICpcbiAgICogV2l0aCBkZWZhdWx0IGNhbGVuZGFyIHdlIHVzZSBJU08gODYwMTogJ21vbnRoJyBpcyAxPUphbiAuLi4gMTI9RGVjLlxuICAgKi9cbiAgYWJzdHJhY3QgZ2V0TW9udGhGdWxsTmFtZShtb250aDogbnVtYmVyLCB5ZWFyPzogbnVtYmVyKTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgYGFyaWEtbGFiZWxgIGF0dHJpYnV0ZSBmb3IgYSBzcGVjaWZpYyBkYXRlLlxuICAgKlxuICAgKiBAc2luY2UgMi4wLjBcbiAgICovXG4gIGFic3RyYWN0IGdldERheUFyaWFMYWJlbChkYXRlOiBOZ2JEYXRlU3RydWN0KTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIGEgZGF5IHRoYXQgaXMgcmVuZGVyZWQgaW4gYSBkYXkgY2VsbC5cbiAgICpcbiAgICogQHNpbmNlIDMuMC4wXG4gICAqL1xuICBnZXREYXlOdW1lcmFscyhkYXRlOiBOZ2JEYXRlU3RydWN0KTogc3RyaW5nIHsgcmV0dXJuIGAke2RhdGUuZGF5fWA7IH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBvZiBhIHdlZWsgbnVtYmVyIHJlbmRlcmVkIGJ5IGRhdGVwaWNrZXIuXG4gICAqXG4gICAqIEBzaW5jZSAzLjAuMFxuICAgKi9cbiAgZ2V0V2Vla051bWVyYWxzKHdlZWtOdW1iZXI6IG51bWJlcik6IHN0cmluZyB7IHJldHVybiBgJHt3ZWVrTnVtYmVyfWA7IH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBvZiBhIHllYXIgdGhhdCBpcyByZW5kZXJlZCBpbiB0aGUgZGF0ZXBpY2tlciB5ZWFyIHNlbGVjdCBib3guXG4gICAqXG4gICAqIEBzaW5jZSAzLjAuMFxuICAgKi9cbiAgZ2V0WWVhck51bWVyYWxzKHllYXI6IG51bWJlcik6IHN0cmluZyB7IHJldHVybiBgJHt5ZWFyfWA7IH1cbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE5nYkRhdGVwaWNrZXJJMThuRGVmYXVsdCBleHRlbmRzIE5nYkRhdGVwaWNrZXJJMThuIHtcbiAgcHJpdmF0ZSBfd2Vla2RheXNTaG9ydDogQXJyYXk8c3RyaW5nPjtcbiAgcHJpdmF0ZSBfbW9udGhzU2hvcnQ6IEFycmF5PHN0cmluZz47XG4gIHByaXZhdGUgX21vbnRoc0Z1bGw6IEFycmF5PHN0cmluZz47XG5cbiAgY29uc3RydWN0b3IoQEluamVjdChMT0NBTEVfSUQpIHByaXZhdGUgX2xvY2FsZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIGNvbnN0IHdlZWtkYXlzU3RhcnRpbmdPblN1bmRheSA9IGdldExvY2FsZURheU5hbWVzKF9sb2NhbGUsIEZvcm1TdHlsZS5TdGFuZGFsb25lLCBUcmFuc2xhdGlvbldpZHRoLlNob3J0KTtcbiAgICB0aGlzLl93ZWVrZGF5c1Nob3J0ID0gd2Vla2RheXNTdGFydGluZ09uU3VuZGF5Lm1hcCgoZGF5LCBpbmRleCkgPT4gd2Vla2RheXNTdGFydGluZ09uU3VuZGF5WyhpbmRleCArIDEpICUgN10pO1xuXG4gICAgdGhpcy5fbW9udGhzU2hvcnQgPSBnZXRMb2NhbGVNb250aE5hbWVzKF9sb2NhbGUsIEZvcm1TdHlsZS5TdGFuZGFsb25lLCBUcmFuc2xhdGlvbldpZHRoLkFiYnJldmlhdGVkKTtcbiAgICB0aGlzLl9tb250aHNGdWxsID0gZ2V0TG9jYWxlTW9udGhOYW1lcyhfbG9jYWxlLCBGb3JtU3R5bGUuU3RhbmRhbG9uZSwgVHJhbnNsYXRpb25XaWR0aC5XaWRlKTtcbiAgfVxuXG4gIGdldFdlZWtkYXlTaG9ydE5hbWUod2Vla2RheTogbnVtYmVyKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRbd2Vla2RheSAtIDFdOyB9XG5cbiAgZ2V0TW9udGhTaG9ydE5hbWUobW9udGg6IG51bWJlcik6IHN0cmluZyB7IHJldHVybiB0aGlzLl9tb250aHNTaG9ydFttb250aCAtIDFdOyB9XG5cbiAgZ2V0TW9udGhGdWxsTmFtZShtb250aDogbnVtYmVyKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuX21vbnRoc0Z1bGxbbW9udGggLSAxXTsgfVxuXG4gIGdldERheUFyaWFMYWJlbChkYXRlOiBOZ2JEYXRlU3RydWN0KTogc3RyaW5nIHtcbiAgICBjb25zdCBqc0RhdGUgPSBuZXcgRGF0ZShkYXRlLnllYXIsIGRhdGUubW9udGggLSAxLCBkYXRlLmRheSk7XG4gICAgcmV0dXJuIGZvcm1hdERhdGUoanNEYXRlLCAnZnVsbERhdGUnLCB0aGlzLl9sb2NhbGUpO1xuICB9XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/datepicker/datepicker-input.js b/dist/sunbird-ui-components/esm2015/datepicker/datepicker-input.js new file mode 100644 index 0000000..966ff62 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/datepicker/datepicker-input.js @@ -0,0 +1,736 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { ChangeDetectorRef, ComponentFactoryResolver, Directive, ElementRef, EventEmitter, forwardRef, Inject, Input, NgZone, Output, Renderer2, TemplateRef, ViewContainerRef } from '@angular/core'; +import { DOCUMENT } from '@angular/common'; +import { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms'; +import { ngbAutoClose } from '../util/autoclose'; +import { ngbFocusTrap } from '../util/focus-trap'; +import { positionElements } from '../util/positioning'; +import { NgbDateAdapter } from './adapters/ngb-date-adapter'; +import { NgbDatepicker } from './datepicker'; +import { NgbDatepickerService } from './datepicker-service'; +import { NgbCalendar } from './ngb-calendar'; +import { NgbDate } from './ngb-date'; +import { NgbDateParserFormatter } from './ngb-date-parser-formatter'; +/** @type {?} */ +const NGB_DATEPICKER_VALUE_ACCESSOR = { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef((/** + * @return {?} + */ + () => NgbInputDatepicker)), + multi: true +}; +/** @type {?} */ +const NGB_DATEPICKER_VALIDATOR = { + provide: NG_VALIDATORS, + useExisting: forwardRef((/** + * @return {?} + */ + () => NgbInputDatepicker)), + multi: true +}; +/** + * A directive that allows to stick a datepicker popup to an input field. + * + * Manages interaction with the input field itself, does value formatting and provides forms integration. + */ +export class NgbInputDatepicker { + /** + * @param {?} _parserFormatter + * @param {?} _elRef + * @param {?} _vcRef + * @param {?} _renderer + * @param {?} _cfr + * @param {?} _ngZone + * @param {?} _service + * @param {?} _calendar + * @param {?} _dateAdapter + * @param {?} _document + * @param {?} _changeDetector + */ + constructor(_parserFormatter, _elRef, _vcRef, _renderer, _cfr, _ngZone, _service, _calendar, _dateAdapter, _document, _changeDetector) { + this._parserFormatter = _parserFormatter; + this._elRef = _elRef; + this._vcRef = _vcRef; + this._renderer = _renderer; + this._cfr = _cfr; + this._ngZone = _ngZone; + this._service = _service; + this._calendar = _calendar; + this._dateAdapter = _dateAdapter; + this._document = _document; + this._changeDetector = _changeDetector; + this._cRef = null; + this._disabled = false; + /** + * Indicates whether the datepicker popup should be closed automatically after date selection / outside click or not. + * + * * `true` - the popup will close on both date selection and outside click. + * * `false` - the popup can only be closed manually via `close()` or `toggle()` methods. + * * `"inside"` - the popup will close on date selection, but not outside clicks. + * * `"outside"` - the popup will close only on the outside click and not on date selection/inside clicks. + * + * \@since 3.0.0 + */ + this.autoClose = true; + /** + * The preferred placement of the datepicker popup. + * + * Possible values are `"top"`, `"top-left"`, `"top-right"`, `"bottom"`, `"bottom-left"`, + * `"bottom-right"`, `"left"`, `"left-top"`, `"left-bottom"`, `"right"`, `"right-top"`, + * `"right-bottom"` + * + * Accepts an array of strings or a string with space separated possible values. + * + * The default order of preference is `"bottom-left bottom-right top-left top-right"` + * + * Please see the [positioning overview](#/positioning) for more details. + */ + this.placement = ['bottom-left', 'bottom-right', 'top-left', 'top-right']; + /** + * An event emitted when user selects a date using keyboard or mouse. + * + * The payload of the event is currently selected `NgbDate`. + * + * \@since 1.1.1 + */ + this.dateSelect = new EventEmitter(); + /** + * Event emitted right after the navigation happens and displayed month changes. + * + * See [`NgbDatepickerNavigateEvent`](#/components/datepicker/api#NgbDatepickerNavigateEvent) for the payload info. + */ + this.navigate = new EventEmitter(); + /** + * An event fired after closing datepicker window. + * + * \@since 4.2.0 + */ + this.closed = new EventEmitter(); + this._onChange = (/** + * @param {?} _ + * @return {?} + */ + (_) => { }); + this._onTouched = (/** + * @return {?} + */ + () => { }); + this._validatorChange = (/** + * @return {?} + */ + () => { }); + this._zoneSubscription = _ngZone.onStable.subscribe((/** + * @return {?} + */ + () => this._updatePopupPosition())); + } + /** + * @return {?} + */ + get disabled() { + return this._disabled; + } + /** + * @param {?} value + * @return {?} + */ + set disabled(value) { + this._disabled = value === '' || (value && value !== 'false'); + if (this.isOpen()) { + this._cRef.instance.setDisabledState(this._disabled); + } + } + /** + * @param {?} fn + * @return {?} + */ + registerOnChange(fn) { this._onChange = fn; } + /** + * @param {?} fn + * @return {?} + */ + registerOnTouched(fn) { this._onTouched = fn; } + /** + * @param {?} fn + * @return {?} + */ + registerOnValidatorChange(fn) { this._validatorChange = fn; } + /** + * @param {?} isDisabled + * @return {?} + */ + setDisabledState(isDisabled) { this.disabled = isDisabled; } + /** + * @param {?} c + * @return {?} + */ + validate(c) { + /** @type {?} */ + const value = c.value; + if (value === null || value === undefined) { + return null; + } + /** @type {?} */ + const ngbDate = this._fromDateStruct(this._dateAdapter.fromModel(value)); + if (!this._calendar.isValid(ngbDate)) { + return { 'ngbDate': { invalid: c.value } }; + } + if (this.minDate && ngbDate.before(NgbDate.from(this.minDate))) { + return { 'ngbDate': { requiredBefore: this.minDate } }; + } + if (this.maxDate && ngbDate.after(NgbDate.from(this.maxDate))) { + return { 'ngbDate': { requiredAfter: this.maxDate } }; + } + } + /** + * @param {?} value + * @return {?} + */ + writeValue(value) { + this._model = this._fromDateStruct(this._dateAdapter.fromModel(value)); + this._writeModelValue(this._model); + } + /** + * @param {?} value + * @param {?=} updateView + * @return {?} + */ + manualDateChange(value, updateView = false) { + /** @type {?} */ + const inputValueChanged = value !== this._inputValue; + if (inputValueChanged) { + this._inputValue = value; + this._model = this._fromDateStruct(this._parserFormatter.parse(value)); + } + if (inputValueChanged || !updateView) { + this._onChange(this._model ? this._dateAdapter.toModel(this._model) : (value === '' ? null : value)); + } + if (updateView && this._model) { + this._writeModelValue(this._model); + } + } + /** + * @return {?} + */ + isOpen() { return !!this._cRef; } + /** + * Opens the datepicker popup. + * + * If the related form control contains a valid date, the corresponding month will be opened. + * @return {?} + */ + open() { + if (!this.isOpen()) { + /** @type {?} */ + const cf = this._cfr.resolveComponentFactory(NgbDatepicker); + this._cRef = this._vcRef.createComponent(cf); + this._applyPopupStyling(this._cRef.location.nativeElement); + this._applyDatepickerInputs(this._cRef.instance); + this._subscribeForDatepickerOutputs(this._cRef.instance); + this._cRef.instance.ngOnInit(); + this._cRef.instance.writeValue(this._dateAdapter.toModel(this._model)); + // date selection event handling + this._cRef.instance.registerOnChange((/** + * @param {?} selectedDate + * @return {?} + */ + (selectedDate) => { + this.writeValue(selectedDate); + this._onChange(selectedDate); + this._onTouched(); + })); + this._cRef.changeDetectorRef.detectChanges(); + this._cRef.instance.setDisabledState(this.disabled); + if (this.container === 'body') { + window.document.querySelector(this.container).appendChild(this._cRef.location.nativeElement); + } + // focus handling + ngbFocusTrap(this._cRef.location.nativeElement, this.closed, true); + this._cRef.instance.focus(); + ngbAutoClose(this._ngZone, this._document, this.autoClose, (/** + * @return {?} + */ + () => this.close()), this.closed, [], [this._elRef.nativeElement, this._cRef.location.nativeElement]); + } + } + /** + * Closes the datepicker popup. + * @return {?} + */ + close() { + if (this.isOpen()) { + this._vcRef.remove(this._vcRef.indexOf(this._cRef.hostView)); + this._cRef = null; + this.closed.emit(); + this._changeDetector.markForCheck(); + } + } + /** + * Toggles the datepicker popup. + * @return {?} + */ + toggle() { + if (this.isOpen()) { + this.close(); + } + else { + this.open(); + } + } + /** + * Navigates to the provided date. + * + * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec. + * If nothing or invalid date provided calendar will open current month. + * + * Use the `[startDate]` input as an alternative. + * @param {?=} date + * @return {?} + */ + navigateTo(date) { + if (this.isOpen()) { + this._cRef.instance.navigateTo(date); + } + } + /** + * @return {?} + */ + onBlur() { this._onTouched(); } + /** + * @param {?} changes + * @return {?} + */ + ngOnChanges(changes) { + if (changes['minDate'] || changes['maxDate']) { + this._validatorChange(); + } + } + /** + * @return {?} + */ + ngOnDestroy() { + this.close(); + this._zoneSubscription.unsubscribe(); + } + /** + * @private + * @param {?} datepickerInstance + * @return {?} + */ + _applyDatepickerInputs(datepickerInstance) { + ['dayTemplate', 'dayTemplateData', 'displayMonths', 'firstDayOfWeek', 'footerTemplate', 'markDisabled', 'minDate', + 'maxDate', 'navigation', 'outsideDays', 'showNavigation', 'showWeekdays', 'showWeekNumbers'] + .forEach((/** + * @param {?} optionName + * @return {?} + */ + (optionName) => { + if (this[optionName] !== undefined) { + datepickerInstance[optionName] = this[optionName]; + } + })); + datepickerInstance.startDate = this.startDate || this._model; + } + /** + * @private + * @param {?} nativeElement + * @return {?} + */ + _applyPopupStyling(nativeElement) { + this._renderer.addClass(nativeElement, 'dropdown-menu'); + this._renderer.addClass(nativeElement, 'show'); + if (this.container === 'body') { + this._renderer.addClass(nativeElement, 'ngb-dp-body'); + } + } + /** + * @private + * @param {?} datepickerInstance + * @return {?} + */ + _subscribeForDatepickerOutputs(datepickerInstance) { + datepickerInstance.navigate.subscribe((/** + * @param {?} navigateEvent + * @return {?} + */ + navigateEvent => this.navigate.emit(navigateEvent))); + datepickerInstance.select.subscribe((/** + * @param {?} date + * @return {?} + */ + date => { + this.dateSelect.emit(date); + if (this.autoClose === true || this.autoClose === 'inside') { + this.close(); + } + })); + } + /** + * @private + * @param {?} model + * @return {?} + */ + _writeModelValue(model) { + /** @type {?} */ + const value = this._parserFormatter.format(model); + this._inputValue = value; + this._renderer.setProperty(this._elRef.nativeElement, 'value', value); + if (this.isOpen()) { + this._cRef.instance.writeValue(this._dateAdapter.toModel(model)); + this._onTouched(); + } + } + /** + * @private + * @param {?} date + * @return {?} + */ + _fromDateStruct(date) { + /** @type {?} */ + const ngbDate = date ? new NgbDate(date.year, date.month, date.day) : null; + return this._calendar.isValid(ngbDate) ? ngbDate : null; + } + /** + * @private + * @return {?} + */ + _updatePopupPosition() { + if (!this._cRef) { + return; + } + /** @type {?} */ + let hostElement; + if (typeof this.positionTarget === 'string') { + hostElement = window.document.querySelector(this.positionTarget); + } + else if (this.positionTarget instanceof HTMLElement) { + hostElement = this.positionTarget; + } + else { + hostElement = this._elRef.nativeElement; + } + if (this.positionTarget && !hostElement) { + throw new Error('ngbDatepicker could not find element declared in [positionTarget] to position against.'); + } + positionElements(hostElement, this._cRef.location.nativeElement, this.placement, this.container === 'body'); + } +} +NgbInputDatepicker.decorators = [ + { type: Directive, args: [{ + selector: 'input[ngbDatepicker]', + exportAs: 'ngbDatepicker', + host: { + '(input)': 'manualDateChange($event.target.value)', + '(change)': 'manualDateChange($event.target.value, true)', + '(blur)': 'onBlur()', + '[disabled]': 'disabled' + }, + providers: [NGB_DATEPICKER_VALUE_ACCESSOR, NGB_DATEPICKER_VALIDATOR, NgbDatepickerService] + },] } +]; +/** @nocollapse */ +NgbInputDatepicker.ctorParameters = () => [ + { type: NgbDateParserFormatter }, + { type: ElementRef }, + { type: ViewContainerRef }, + { type: Renderer2 }, + { type: ComponentFactoryResolver }, + { type: NgZone }, + { type: NgbDatepickerService }, + { type: NgbCalendar }, + { type: NgbDateAdapter }, + { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }, + { type: ChangeDetectorRef } +]; +NgbInputDatepicker.propDecorators = { + autoClose: [{ type: Input }], + dayTemplate: [{ type: Input }], + dayTemplateData: [{ type: Input }], + displayMonths: [{ type: Input }], + firstDayOfWeek: [{ type: Input }], + footerTemplate: [{ type: Input }], + markDisabled: [{ type: Input }], + minDate: [{ type: Input }], + maxDate: [{ type: Input }], + navigation: [{ type: Input }], + outsideDays: [{ type: Input }], + placement: [{ type: Input }], + showWeekdays: [{ type: Input }], + showWeekNumbers: [{ type: Input }], + startDate: [{ type: Input }], + container: [{ type: Input }], + positionTarget: [{ type: Input }], + dateSelect: [{ type: Output }], + navigate: [{ type: Output }], + closed: [{ type: Output }], + disabled: [{ type: Input }] +}; +if (false) { + /** + * @type {?} + * @private + */ + NgbInputDatepicker.prototype._cRef; + /** + * @type {?} + * @private + */ + NgbInputDatepicker.prototype._disabled; + /** + * @type {?} + * @private + */ + NgbInputDatepicker.prototype._model; + /** + * @type {?} + * @private + */ + NgbInputDatepicker.prototype._inputValue; + /** + * @type {?} + * @private + */ + NgbInputDatepicker.prototype._zoneSubscription; + /** + * Indicates whether the datepicker popup should be closed automatically after date selection / outside click or not. + * + * * `true` - the popup will close on both date selection and outside click. + * * `false` - the popup can only be closed manually via `close()` or `toggle()` methods. + * * `"inside"` - the popup will close on date selection, but not outside clicks. + * * `"outside"` - the popup will close only on the outside click and not on date selection/inside clicks. + * + * \@since 3.0.0 + * @type {?} + */ + NgbInputDatepicker.prototype.autoClose; + /** + * The reference to a custom template for the day. + * + * Allows to completely override the way a day 'cell' in the calendar is displayed. + * + * See [`DayTemplateContext`](#/components/datepicker/api#DayTemplateContext) for the data you get inside. + * @type {?} + */ + NgbInputDatepicker.prototype.dayTemplate; + /** + * The callback to pass any arbitrary data to the template cell via the + * [`DayTemplateContext`](#/components/datepicker/api#DayTemplateContext)'s `data` parameter. + * + * `current` is the month that is currently displayed by the datepicker. + * + * \@since 3.3.0 + * @type {?} + */ + NgbInputDatepicker.prototype.dayTemplateData; + /** + * The number of months to display. + * @type {?} + */ + NgbInputDatepicker.prototype.displayMonths; + /** + * The first day of the week. + * + * With default calendar we use ISO 8601: 'weekday' is 1=Mon ... 7=Sun. + * @type {?} + */ + NgbInputDatepicker.prototype.firstDayOfWeek; + /** + * The reference to the custom template for the datepicker footer. + * + * \@since 3.3.0 + * @type {?} + */ + NgbInputDatepicker.prototype.footerTemplate; + /** + * The callback to mark some dates as disabled. + * + * It is called for each new date when navigating to a different month. + * + * `current` is the month that is currently displayed by the datepicker. + * @type {?} + */ + NgbInputDatepicker.prototype.markDisabled; + /** + * The earliest date that can be displayed or selected. Also used for form validation. + * + * If not provided, 'year' select box will display 10 years before the current month. + * @type {?} + */ + NgbInputDatepicker.prototype.minDate; + /** + * The latest date that can be displayed or selected. Also used for form validation. + * + * If not provided, 'year' select box will display 10 years after the current month. + * @type {?} + */ + NgbInputDatepicker.prototype.maxDate; + /** + * Navigation type. + * + * * `"select"` - select boxes for month and navigation arrows + * * `"arrows"` - only navigation arrows + * * `"none"` - no navigation visible at all + * @type {?} + */ + NgbInputDatepicker.prototype.navigation; + /** + * The way of displaying days that don't belong to the current month. + * + * * `"visible"` - days are visible + * * `"hidden"` - days are hidden, white space preserved + * * `"collapsed"` - days are collapsed, so the datepicker height might change between months + * + * For the 2+ months view, days in between months are never shown. + * @type {?} + */ + NgbInputDatepicker.prototype.outsideDays; + /** + * The preferred placement of the datepicker popup. + * + * Possible values are `"top"`, `"top-left"`, `"top-right"`, `"bottom"`, `"bottom-left"`, + * `"bottom-right"`, `"left"`, `"left-top"`, `"left-bottom"`, `"right"`, `"right-top"`, + * `"right-bottom"` + * + * Accepts an array of strings or a string with space separated possible values. + * + * The default order of preference is `"bottom-left bottom-right top-left top-right"` + * + * Please see the [positioning overview](#/positioning) for more details. + * @type {?} + */ + NgbInputDatepicker.prototype.placement; + /** + * If `true`, weekdays will be displayed. + * @type {?} + */ + NgbInputDatepicker.prototype.showWeekdays; + /** + * If `true`, week numbers will be displayed. + * @type {?} + */ + NgbInputDatepicker.prototype.showWeekNumbers; + /** + * The date to open calendar with. + * + * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec. + * If nothing or invalid date is provided, calendar will open with current month. + * + * You could use `navigateTo(date)` method as an alternative. + * @type {?} + */ + NgbInputDatepicker.prototype.startDate; + /** + * A selector specifying the element the datepicker popup should be appended to. + * + * Currently only supports `"body"`. + * @type {?} + */ + NgbInputDatepicker.prototype.container; + /** + * A css selector or html element specifying the element the datepicker popup should be positioned against. + * + * By default the input is used as a target. + * + * \@since 4.2.0 + * @type {?} + */ + NgbInputDatepicker.prototype.positionTarget; + /** + * An event emitted when user selects a date using keyboard or mouse. + * + * The payload of the event is currently selected `NgbDate`. + * + * \@since 1.1.1 + * @type {?} + */ + NgbInputDatepicker.prototype.dateSelect; + /** + * Event emitted right after the navigation happens and displayed month changes. + * + * See [`NgbDatepickerNavigateEvent`](#/components/datepicker/api#NgbDatepickerNavigateEvent) for the payload info. + * @type {?} + */ + NgbInputDatepicker.prototype.navigate; + /** + * An event fired after closing datepicker window. + * + * \@since 4.2.0 + * @type {?} + */ + NgbInputDatepicker.prototype.closed; + /** + * @type {?} + * @private + */ + NgbInputDatepicker.prototype._onChange; + /** + * @type {?} + * @private + */ + NgbInputDatepicker.prototype._onTouched; + /** + * @type {?} + * @private + */ + NgbInputDatepicker.prototype._validatorChange; + /** + * @type {?} + * @private + */ + NgbInputDatepicker.prototype._parserFormatter; + /** + * @type {?} + * @private + */ + NgbInputDatepicker.prototype._elRef; + /** + * @type {?} + * @private + */ + NgbInputDatepicker.prototype._vcRef; + /** + * @type {?} + * @private + */ + NgbInputDatepicker.prototype._renderer; + /** + * @type {?} + * @private + */ + NgbInputDatepicker.prototype._cfr; + /** + * @type {?} + * @private + */ + NgbInputDatepicker.prototype._ngZone; + /** + * @type {?} + * @private + */ + NgbInputDatepicker.prototype._service; + /** + * @type {?} + * @private + */ + NgbInputDatepicker.prototype._calendar; + /** + * @type {?} + * @private + */ + NgbInputDatepicker.prototype._dateAdapter; + /** + * @type {?} + * @private + */ + NgbInputDatepicker.prototype._document; + /** + * @type {?} + * @private + */ + NgbInputDatepicker.prototype._changeDetector; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1pbnB1dC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImRhdGVwaWNrZXIvZGF0ZXBpY2tlci1pbnB1dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNMLGlCQUFpQixFQUNqQix3QkFBd0IsRUFFeEIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUdOLE1BQU0sRUFDTixTQUFTLEVBRVQsV0FBVyxFQUNYLGdCQUFnQixFQUNqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUF3QyxhQUFhLEVBQUUsaUJBQWlCLEVBQVksTUFBTSxnQkFBZ0IsQ0FBQztBQUVsSCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDL0MsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBaUIsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUVyRSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFDLGFBQWEsRUFBNkIsTUFBTSxjQUFjLENBQUM7QUFFdkUsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDMUQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sNkJBQTZCLENBQUM7O01BRzdELDZCQUE2QixHQUFHO0lBQ3BDLE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVU7OztJQUFDLEdB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LHVDQUEyQjs7Ozs7Ozs7O0lBUzNCLDRDQUE4Qzs7Ozs7Ozs7O0lBUzlDLHdDQUFtRDs7Ozs7OztJQU9uRCxzQ0FBb0U7Ozs7Ozs7SUFPcEUsb0NBQTRDOzs7OztJQWM1Qyx1Q0FBbUM7Ozs7O0lBQ25DLHdDQUE4Qjs7Ozs7SUFDOUIsOENBQW9DOzs7OztJQUloQyw4Q0FBZ0Q7Ozs7O0lBQUUsb0NBQTRDOzs7OztJQUM5RixvQ0FBZ0M7Ozs7O0lBQUUsdUNBQTRCOzs7OztJQUFFLGtDQUFzQzs7Ozs7SUFDdEcscUNBQXVCOzs7OztJQUFFLHNDQUFzQzs7Ozs7SUFBRSx1Q0FBOEI7Ozs7O0lBQy9GLDBDQUF5Qzs7Ozs7SUFBRSx1Q0FBd0M7Ozs7O0lBQ25GLDZDQUEwQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gIENvbXBvbmVudFJlZixcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgUmVuZGVyZXIyLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NvbnRhaW5lclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RE9DVU1FTlR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge0Fic3RyYWN0Q29udHJvbCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SLCBWYWxpZGF0b3J9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHtuZ2JBdXRvQ2xvc2V9IGZyb20gJy4uL3V0aWwvYXV0b2Nsb3NlJztcbmltcG9ydCB7bmdiRm9jdXNUcmFwfSBmcm9tICcuLi91dGlsL2ZvY3VzLXRyYXAnO1xuaW1wb3J0IHtQbGFjZW1lbnRBcnJheSwgcG9zaXRpb25FbGVtZW50c30gZnJvbSAnLi4vdXRpbC9wb3NpdGlvbmluZyc7XG5cbmltcG9ydCB7TmdiRGF0ZUFkYXB0ZXJ9IGZyb20gJy4vYWRhcHRlcnMvbmdiLWRhdGUtYWRhcHRlcic7XG5pbXBvcnQge05nYkRhdGVwaWNrZXIsIE5nYkRhdGVwaWNrZXJOYXZpZ2F0ZUV2ZW50fSBmcm9tICcuL2RhdGVwaWNrZXInO1xuaW1wb3J0IHtEYXlUZW1wbGF0ZUNvbnRleHR9IGZyb20gJy4vZGF0ZXBpY2tlci1kYXktdGVtcGxhdGUtY29udGV4dCc7XG5pbXBvcnQge05nYkRhdGVwaWNrZXJTZXJ2aWNlfSBmcm9tICcuL2RhdGVwaWNrZXItc2VydmljZSc7XG5pbXBvcnQge05nYkNhbGVuZGFyfSBmcm9tICcuL25nYi1jYWxlbmRhcic7XG5pbXBvcnQge05nYkRhdGV9IGZyb20gJy4vbmdiLWRhdGUnO1xuaW1wb3J0IHtOZ2JEYXRlUGFyc2VyRm9ybWF0dGVyfSBmcm9tICcuL25nYi1kYXRlLXBhcnNlci1mb3JtYXR0ZXInO1xuaW1wb3J0IHtOZ2JEYXRlU3RydWN0fSBmcm9tICcuL25nYi1kYXRlLXN0cnVjdCc7XG5cbmNvbnN0IE5HQl9EQVRFUElDS0VSX1ZBTFVFX0FDQ0VTU09SID0ge1xuICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTmdiSW5wdXREYXRlcGlja2VyKSxcbiAgbXVsdGk6IHRydWVcbn07XG5cbmNvbnN0IE5HQl9EQVRFUElDS0VSX1ZBTElEQVRPUiA9IHtcbiAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTmdiSW5wdXREYXRlcGlja2VyKSxcbiAgbXVsdGk6IHRydWVcbn07XG5cbi8qKlxuICogQSBkaXJlY3RpdmUgdGhhdCBhbGxvd3MgdG8gc3RpY2sgYSBkYXRlcGlja2VyIHBvcHVwIHRvIGFuIGlucHV0IGZpZWxkLlxuICpcbiAqIE1hbmFnZXMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgaW5wdXQgZmllbGQgaXRzZWxmLCBkb2VzIHZhbHVlIGZvcm1hdHRpbmcgYW5kIHByb3ZpZGVzIGZvcm1zIGludGVncmF0aW9uLlxuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdpbnB1dFtuZ2JEYXRlcGlja2VyXScsXG4gIGV4cG9ydEFzOiAnbmdiRGF0ZXBpY2tlcicsXG4gIGhvc3Q6IHtcbiAgICAnKGlucHV0KSc6ICdtYW51YWxEYXRlQ2hhbmdlKCRldmVudC50YXJnZXQudmFsdWUpJyxcbiAgICAnKGNoYW5nZSknOiAnbWFudWFsRGF0ZUNoYW5nZSgkZXZlbnQudGFyZ2V0LnZhbHVlLCB0cnVlKScsXG4gICAgJyhibHVyKSc6ICdvbkJsdXIoKScsXG4gICAgJ1tkaXNhYmxlZF0nOiAnZGlzYWJsZWQnXG4gIH0sXG4gIHByb3ZpZGVyczogW05HQl9EQVRFUElDS0VSX1ZBTFVFX0FDQ0VTU09SLCBOR0JfREFURVBJQ0tFUl9WQUxJREFUT1IsIE5nYkRhdGVwaWNrZXJTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBOZ2JJbnB1dERhdGVwaWNrZXIgaW1wbGVtZW50cyBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yIHtcbiAgcHJpdmF0ZSBfY1JlZjogQ29tcG9uZW50UmVmPE5nYkRhdGVwaWNrZXI+ID0gbnVsbDtcbiAgcHJpdmF0ZSBfZGlzYWJsZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfbW9kZWw6IE5nYkRhdGU7XG4gIHByaXZhdGUgX2lucHV0VmFsdWU6IHN0cmluZztcbiAgcHJpdmF0ZSBfem9uZVN1YnNjcmlwdGlvbjogYW55O1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZGF0ZXBpY2tlciBwb3B1cCBzaG91bGQgYmUgY2xvc2VkIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgZGF0ZSBzZWxlY3Rpb24gLyBvdXRzaWRlIGNsaWNrIG9yIG5vdC5cbiAgICpcbiAgICogKiBgdHJ1ZWAgLSB0aGUgcG9wdXAgd2lsbCBjbG9zZSBvbiBib3RoIGRhdGUgc2VsZWN0aW9uIGFuZCBvdXRzaWRlIGNsaWNrLlxuICAgKiAqIGBmYWxzZWAgLSB0aGUgcG9wdXAgY2FuIG9ubHkgYmUgY2xvc2VkIG1hbnVhbGx5IHZpYSBgY2xvc2UoKWAgb3IgYHRvZ2dsZSgpYCBtZXRob2RzLlxuICAgKiAqIGBcImluc2lkZVwiYCAtIHRoZSBwb3B1cCB3aWxsIGNsb3NlIG9uIGRhdGUgc2VsZWN0aW9uLCBidXQgbm90IG91dHNpZGUgY2xpY2tzLlxuICAgKiAqIGBcIm91dHNpZGVcImAgLSB0aGUgcG9wdXAgd2lsbCBjbG9zZSBvbmx5IG9uIHRoZSBvdXRzaWRlIGNsaWNrIGFuZCBub3Qgb24gZGF0ZSBzZWxlY3Rpb24vaW5zaWRlIGNsaWNrcy5cbiAgICpcbiAgICogQHNpbmNlIDMuMC4wXG4gICAqL1xuICBASW5wdXQoKSBhdXRvQ2xvc2U6IGJvb2xlYW4gfCAnaW5zaWRlJyB8ICdvdXRzaWRlJyA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFRoZSByZWZlcmVuY2UgdG8gYSBjdXN0b20gdGVtcGxhdGUgZm9yIHRoZSBkYXkuXG4gICAqXG4gICAqIEFsbG93cyB0byBjb21wbGV0ZWx5IG92ZXJyaWRlIHRoZSB3YXkgYSBkYXkgJ2NlbGwnIGluIHRoZSBjYWxlbmRhciBpcyBkaXNwbGF5ZWQuXG4gICAqXG4gICAqIFNlZSBbYERheVRlbXBsYXRlQ29udGV4dGBdKCMvY29tcG9uZW50cy9kYXRlcGlja2VyL2FwaSNEYXlUZW1wbGF0ZUNvbnRleHQpIGZvciB0aGUgZGF0YSB5b3UgZ2V0IGluc2lkZS5cbiAgICovXG4gIEBJbnB1dCgpIGRheVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxEYXlUZW1wbGF0ZUNvbnRleHQ+O1xuXG4gIC8qKlxuICAgKiBUaGUgY2FsbGJhY2sgdG8gcGFzcyBhbnkgYXJiaXRyYXJ5IGRhdGEgdG8gdGhlIHRlbXBsYXRlIGNlbGwgdmlhIHRoZVxuICAgKiBbYERheVRlbXBsYXRlQ29udGV4dGBdKCMvY29tcG9uZW50cy9kYXRlcGlja2VyL2FwaSNEYXlUZW1wbGF0ZUNvbnRleHQpJ3MgYGRhdGFgIHBhcmFtZXRlci5cbiAgICpcbiAgICogYGN1cnJlbnRgIGlzIHRoZSBtb250aCB0aGF0IGlzIGN1cnJlbnRseSBkaXNwbGF5ZWQgYnkgdGhlIGRhdGVwaWNrZXIuXG4gICAqXG4gICAqIEBzaW5jZSAzLjMuMFxuICAgKi9cbiAgQElucHV0KCkgZGF5VGVtcGxhdGVEYXRhOiAoZGF0ZTogTmdiRGF0ZSwgY3VycmVudDoge3llYXI6IG51bWJlciwgbW9udGg6IG51bWJlcn0pID0+IGFueTtcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBtb250aHMgdG8gZGlzcGxheS5cbiAgICovXG4gIEBJbnB1dCgpIGRpc3BsYXlNb250aHM6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICpcbiAgICogV2l0aCBkZWZhdWx0IGNhbGVuZGFyIHdlIHVzZSBJU08gODYwMTogJ3dlZWtkYXknIGlzIDE9TW9uIC4uLiA3PVN1bi5cbiAgICovXG4gIEBJbnB1dCgpIGZpcnN0RGF5T2ZXZWVrOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSByZWZlcmVuY2UgdG8gdGhlIGN1c3RvbSB0ZW1wbGF0ZSBmb3IgdGhlIGRhdGVwaWNrZXIgZm9vdGVyLlxuICAgKlxuICAgKiBAc2luY2UgMy4zLjBcbiAgICovXG4gIEBJbnB1dCgpIGZvb3RlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIC8qKlxuICAgKiBUaGUgY2FsbGJhY2sgdG8gbWFyayBzb21lIGRhdGVzIGFzIGRpc2FibGVkLlxuICAgKlxuICAgKiBJdCBpcyBjYWxsZWQgZm9yIGVhY2ggbmV3IGRhdGUgd2hlbiBuYXZpZ2F0aW5nIHRvIGEgZGlmZmVyZW50IG1vbnRoLlxuICAgKlxuICAgKiBgY3VycmVudGAgaXMgdGhlIG1vbnRoIHRoYXQgaXMgY3VycmVudGx5IGRpc3BsYXllZCBieSB0aGUgZGF0ZXBpY2tlci5cbiAgICovXG4gIEBJbnB1dCgpIG1hcmtEaXNhYmxlZDogKGRhdGU6IE5nYkRhdGUsIGN1cnJlbnQ6IHt5ZWFyOiBudW1iZXIsIG1vbnRoOiBudW1iZXJ9KSA9PiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgZWFybGllc3QgZGF0ZSB0aGF0IGNhbiBiZSBkaXNwbGF5ZWQgb3Igc2VsZWN0ZWQuIEFsc28gdXNlZCBmb3IgZm9ybSB2YWxpZGF0aW9uLlxuICAgKlxuICAgKiBJZiBub3QgcHJvdmlkZWQsICd5ZWFyJyBzZWxlY3QgYm94IHdpbGwgZGlzcGxheSAxMCB5ZWFycyBiZWZvcmUgdGhlIGN1cnJlbnQgbW9udGguXG4gICAqL1xuICBASW5wdXQoKSBtaW5EYXRlOiBOZ2JEYXRlU3RydWN0O1xuXG4gIC8qKlxuICAgKiBUaGUgbGF0ZXN0IGRhdGUgdGhhdCBjYW4gYmUgZGlzcGxheWVkIG9yIHNlbGVjdGVkLiBBbHNvIHVzZWQgZm9yIGZvcm0gdmFsaWRhdGlvbi5cbiAgICpcbiAgICogSWYgbm90IHByb3ZpZGVkLCAneWVhcicgc2VsZWN0IGJveCB3aWxsIGRpc3BsYXkgMTAgeWVhcnMgYWZ0ZXIgdGhlIGN1cnJlbnQgbW9udGguXG4gICAqL1xuICBASW5wdXQoKSBtYXhEYXRlOiBOZ2JEYXRlU3RydWN0O1xuXG4gIC8qKlxuICAgKiBOYXZpZ2F0aW9uIHR5cGUuXG4gICAqXG4gICAqICogYFwic2VsZWN0XCJgIC0gc2VsZWN0IGJveGVzIGZvciBtb250aCBhbmQgbmF2aWdhdGlvbiBhcnJvd3NcbiAgICogKiBgXCJhcnJvd3NcImAgLSBvbmx5IG5hdmlnYXRpb24gYXJyb3dzXG4gICAqICogYFwibm9uZVwiYCAtIG5vIG5hdmlnYXRpb24gdmlzaWJsZSBhdCBhbGxcbiAgICovXG4gIEBJbnB1dCgpIG5hdmlnYXRpb246ICdzZWxlY3QnIHwgJ2Fycm93cycgfCAnbm9uZSc7XG5cbiAgLyoqXG4gICAqIFRoZSB3YXkgb2YgZGlzcGxheWluZyBkYXlzIHRoYXQgZG9uJ3QgYmVsb25nIHRvIHRoZSBjdXJyZW50IG1vbnRoLlxuICAgKlxuICAgKiAqIGBcInZpc2libGVcImAgLSBkYXlzIGFyZSB2aXNpYmxlXG4gICAqICogYFwiaGlkZGVuXCJgIC0gZGF5cyBhcmUgaGlkZGVuLCB3aGl0ZSBzcGFjZSBwcmVzZXJ2ZWRcbiAgICogKiBgXCJjb2xsYXBzZWRcImAgLSBkYXlzIGFyZSBjb2xsYXBzZWQsIHNvIHRoZSBkYXRlcGlja2VyIGhlaWdodCBtaWdodCBjaGFuZ2UgYmV0d2VlbiBtb250aHNcbiAgICpcbiAgICogRm9yIHRoZSAyKyBtb250aHMgdmlldywgZGF5cyBpbiBiZXR3ZWVuIG1vbnRocyBhcmUgbmV2ZXIgc2hvd24uXG4gICAqL1xuICBASW5wdXQoKSBvdXRzaWRlRGF5czogJ3Zpc2libGUnIHwgJ2NvbGxhcHNlZCcgfCAnaGlkZGVuJztcblxuICAvKipcbiAgICogVGhlIHByZWZlcnJlZCBwbGFjZW1lbnQgb2YgdGhlIGRhdGVwaWNrZXIgcG9wdXAuXG4gICAqXG4gICAqIFBvc3NpYmxlIHZhbHVlcyBhcmUgYFwidG9wXCJgLCBgXCJ0b3AtbGVmdFwiYCwgYFwidG9wLXJpZ2h0XCJgLCBgXCJib3R0b21cImAsIGBcImJvdHRvbS1sZWZ0XCJgLFxuICAgKiBgXCJib3R0b20tcmlnaHRcImAsIGBcImxlZnRcImAsIGBcImxlZnQtdG9wXCJgLCBgXCJsZWZ0LWJvdHRvbVwiYCwgYFwicmlnaHRcImAsIGBcInJpZ2h0LXRvcFwiYCxcbiAgICogYFwicmlnaHQtYm90dG9tXCJgXG4gICAqXG4gICAqIEFjY2VwdHMgYW4gYXJyYXkgb2Ygc3RyaW5ncyBvciBhIHN0cmluZyB3aXRoIHNwYWNlIHNlcGFyYXRlZCBwb3NzaWJsZSB2YWx1ZXMuXG4gICAqXG4gICAqIFRoZSBkZWZhdWx0IG9yZGVyIG9mIHByZWZlcmVuY2UgaXMgYFwiYm90dG9tLWxlZnQgYm90dG9tLXJpZ2h0IHRvcC1sZWZ0IHRvcC1yaWdodFwiYFxuICAgKlxuICAgKiBQbGVhc2Ugc2VlIHRoZSBbcG9zaXRpb25pbmcgb3ZlcnZpZXddKCMvcG9zaXRpb25pbmcpIGZvciBtb3JlIGRldGFpbHMuXG4gICAqL1xuICBASW5wdXQoKSBwbGFjZW1lbnQ6IFBsYWNlbWVudEFycmF5ID0gWydib3R0b20tbGVmdCcsICdib3R0b20tcmlnaHQnLCAndG9wLWxlZnQnLCAndG9wLXJpZ2h0J107XG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgd2Vla2RheXMgd2lsbCBiZSBkaXNwbGF5ZWQuXG4gICAqL1xuICBASW5wdXQoKSBzaG93V2Vla2RheXM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgd2VlayBudW1iZXJzIHdpbGwgYmUgZGlzcGxheWVkLlxuICAgKi9cbiAgQElucHV0KCkgc2hvd1dlZWtOdW1iZXJzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgZGF0ZSB0byBvcGVuIGNhbGVuZGFyIHdpdGguXG4gICAqXG4gICAqIFdpdGggdGhlIGRlZmF1bHQgY2FsZW5kYXIgd2UgdXNlIElTTyA4NjAxOiAnbW9udGgnIGlzIDE9SmFuIC4uLiAxMj1EZWMuXG4gICAqIElmIG5vdGhpbmcgb3IgaW52YWxpZCBkYXRlIGlzIHByb3ZpZGVkLCBjYWxlbmRhciB3aWxsIG9wZW4gd2l0aCBjdXJyZW50IG1vbnRoLlxuICAgKlxuICAgKiBZb3UgY291bGQgdXNlIGBuYXZpZ2F0ZVRvKGRhdGUpYCBtZXRob2QgYXMgYW4gYWx0ZXJuYXRpdmUuXG4gICAqL1xuICBASW5wdXQoKSBzdGFydERhdGU6IHt5ZWFyOiBudW1iZXIsIG1vbnRoOiBudW1iZXIsIGRheT86IG51bWJlcn07XG5cbiAgLyoqXG4gICAqIEEgc2VsZWN0b3Igc3BlY2lmeWluZyB0aGUgZWxlbWVudCB0aGUgZGF0ZXBpY2tlciBwb3B1cCBzaG91bGQgYmUgYXBwZW5kZWQgdG8uXG4gICAqXG4gICAqIEN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIGBcImJvZHlcImAuXG4gICAqL1xuICBASW5wdXQoKSBjb250YWluZXI6IHN0cmluZztcblxuICAvKipcbiAgICogQSBjc3Mgc2VsZWN0b3Igb3IgaHRtbCBlbGVtZW50IHNwZWNpZnlpbmcgdGhlIGVsZW1lbnQgdGhlIGRhdGVwaWNrZXIgcG9wdXAgc2hvdWxkIGJlIHBvc2l0aW9uZWQgYWdhaW5zdC5cbiAgICpcbiAgICogQnkgZGVmYXVsdCB0aGUgaW5wdXQgaXMgdXNlZCBhcyBhIHRhcmdldC5cbiAgICpcbiAgICogQHNpbmNlIDQuMi4wXG4gICAqL1xuICBASW5wdXQoKSBwb3NpdGlvblRhcmdldDogc3RyaW5nIHwgSFRNTEVsZW1lbnQ7XG5cbiAgLyoqXG4gICAqIEFuIGV2ZW50IGVtaXR0ZWQgd2hlbiB1c2VyIHNlbGVjdHMgYSBkYXRlIHVzaW5nIGtleWJvYXJkIG9yIG1vdXNlLlxuICAgKlxuICAgKiBUaGUgcGF5bG9hZCBvZiB0aGUgZXZlbnQgaXMgY3VycmVudGx5IHNlbGVjdGVkIGBOZ2JEYXRlYC5cbiAgICpcbiAgICogQHNpbmNlIDEuMS4xXG4gICAqL1xuICBAT3V0cHV0KCkgZGF0ZVNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8TmdiRGF0ZT4oKTtcblxuICAvKipcbiAgICogRXZlbnQgZW1pdHRlZCByaWdodCBhZnRlciB0aGUgbmF2aWdhdGlvbiBoYXBwZW5zIGFuZCBkaXNwbGF5ZWQgbW9udGggY2hhbmdlcy5cbiAgICpcbiAgICogU2VlIFtgTmdiRGF0ZXBpY2tlck5hdmlnYXRlRXZlbnRgXSgjL2NvbXBvbmVudHMvZGF0ZXBpY2tlci9hcGkjTmdiRGF0ZXBpY2tlck5hdmlnYXRlRXZlbnQpIGZvciB0aGUgcGF5bG9hZCBpbmZvLlxuICAgKi9cbiAgQE91dHB1dCgpIG5hdmlnYXRlID0gbmV3IEV2ZW50RW1pdHRlcjxOZ2JEYXRlcGlja2VyTmF2aWdhdGVFdmVudD4oKTtcblxuICAvKipcbiAgICogQW4gZXZlbnQgZmlyZWQgYWZ0ZXIgY2xvc2luZyBkYXRlcGlja2VyIHdpbmRvdy5cbiAgICpcbiAgICogQHNpbmNlIDQuMi4wXG4gICAqL1xuICBAT3V0cHV0KCkgY2xvc2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBkaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gIH1cbiAgc2V0IGRpc2FibGVkKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IHZhbHVlID09PSAnJyB8fCAodmFsdWUgJiYgdmFsdWUgIT09ICdmYWxzZScpO1xuXG4gICAgaWYgKHRoaXMuaXNPcGVuKCkpIHtcbiAgICAgIHRoaXMuX2NSZWYuaW5zdGFuY2Uuc2V0RGlzYWJsZWRTdGF0ZSh0aGlzLl9kaXNhYmxlZCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfb25DaGFuZ2UgPSAoXzogYW55KSA9PiB7fTtcbiAgcHJpdmF0ZSBfb25Ub3VjaGVkID0gKCkgPT4ge307XG4gIHByaXZhdGUgX3ZhbGlkYXRvckNoYW5nZSA9ICgpID0+IHt9O1xuXG5cbiAgY29uc3RydWN0b3IoXG4gICAgICBwcml2YXRlIF9wYXJzZXJGb3JtYXR0ZXI6IE5nYkRhdGVQYXJzZXJGb3JtYXR0ZXIsIHByaXZhdGUgX2VsUmVmOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+LFxuICAgICAgcHJpdmF0ZSBfdmNSZWY6IFZpZXdDb250YWluZXJSZWYsIHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjIsIHByaXZhdGUgX2NmcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgICAgcHJpdmF0ZSBfbmdab25lOiBOZ1pvbmUsIHByaXZhdGUgX3NlcnZpY2U6IE5nYkRhdGVwaWNrZXJTZXJ2aWNlLCBwcml2YXRlIF9jYWxlbmRhcjogTmdiQ2FsZW5kYXIsXG4gICAgICBwcml2YXRlIF9kYXRlQWRhcHRlcjogTmdiRGF0ZUFkYXB0ZXI8YW55PiwgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBfZG9jdW1lbnQ6IGFueSxcbiAgICAgIHByaXZhdGUgX2NoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHRoaXMuX3pvbmVTdWJzY3JpcHRpb24gPSBfbmdab25lLm9uU3RhYmxlLnN1YnNjcmliZSgoKSA9PiB0aGlzLl91cGRhdGVQb3B1cFBvc2l0aW9uKCkpO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBhbnkpID0+IGFueSk6IHZvaWQgeyB0aGlzLl9vbkNoYW5nZSA9IGZuOyB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IGFueSk6IHZvaWQgeyB0aGlzLl9vblRvdWNoZWQgPSBmbjsgfVxuXG4gIHJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoZm46ICgpID0+IHZvaWQpOiB2b2lkIHsgdGhpcy5fdmFsaWRhdG9yQ2hhbmdlID0gZm47IH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHsgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7IH1cblxuICB2YWxpZGF0ZShjOiBBYnN0cmFjdENvbnRyb2wpOiB7W2tleTogc3RyaW5nXTogYW55fSB7XG4gICAgY29uc3QgdmFsdWUgPSBjLnZhbHVlO1xuXG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IG5nYkRhdGUgPSB0aGlzLl9mcm9tRGF0ZVN0cnVjdCh0aGlzLl9kYXRlQWRhcHRlci5mcm9tTW9kZWwodmFsdWUpKTtcblxuICAgIGlmICghdGhpcy5fY2FsZW5kYXIuaXNWYWxpZChuZ2JEYXRlKSkge1xuICAgICAgcmV0dXJuIHsnbmdiRGF0ZSc6IHtpbnZhbGlkOiBjLnZhbHVlfX07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWluRGF0ZSAmJiBuZ2JEYXRlLmJlZm9yZShOZ2JEYXRlLmZyb20odGhpcy5taW5EYXRlKSkpIHtcbiAgICAgIHJldHVybiB7J25nYkRhdGUnOiB7cmVxdWlyZWRCZWZvcmU6IHRoaXMubWluRGF0ZX19O1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1heERhdGUgJiYgbmdiRGF0ZS5hZnRlcihOZ2JEYXRlLmZyb20odGhpcy5tYXhEYXRlKSkpIHtcbiAgICAgIHJldHVybiB7J25nYkRhdGUnOiB7cmVxdWlyZWRBZnRlcjogdGhpcy5tYXhEYXRlfX07XG4gICAgfVxuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZSkge1xuICAgIHRoaXMuX21vZGVsID0gdGhpcy5fZnJvbURhdGVTdHJ1Y3QodGhpcy5fZGF0ZUFkYXB0ZXIuZnJvbU1vZGVsKHZhbHVlKSk7XG4gICAgdGhpcy5fd3JpdGVNb2RlbFZhbHVlKHRoaXMuX21vZGVsKTtcbiAgfVxuXG4gIG1hbnVhbERhdGVDaGFuZ2UodmFsdWU6IHN0cmluZywgdXBkYXRlVmlldyA9IGZhbHNlKSB7XG4gICAgY29uc3QgaW5wdXRWYWx1ZUNoYW5nZWQgPSB2YWx1ZSAhPT0gdGhpcy5faW5wdXRWYWx1ZTtcbiAgICBpZiAoaW5wdXRWYWx1ZUNoYW5nZWQpIHtcbiAgICAgIHRoaXMuX2lucHV0VmFsdWUgPSB2YWx1ZTtcbiAgICAgIHRoaXMuX21vZGVsID0gdGhpcy5fZnJvbURhdGVTdHJ1Y3QodGhpcy5fcGFyc2VyRm9ybWF0dGVyLnBhcnNlKHZhbHVlKSk7XG4gICAgfVxuICAgIGlmIChpbnB1dFZhbHVlQ2hhbmdlZCB8fCAhdXBkYXRlVmlldykge1xuICAgICAgdGhpcy5fb25DaGFuZ2UodGhpcy5fbW9kZWwgPyB0aGlzLl9kYXRlQWRhcHRlci50b01vZGVsKHRoaXMuX21vZGVsKSA6ICh2YWx1ZSA9PT0gJycgPyBudWxsIDogdmFsdWUpKTtcbiAgICB9XG4gICAgaWYgKHVwZGF0ZVZpZXcgJiYgdGhpcy5fbW9kZWwpIHtcbiAgICAgIHRoaXMuX3dyaXRlTW9kZWxWYWx1ZSh0aGlzLl9tb2RlbCk7XG4gICAgfVxuICB9XG5cbiAgaXNPcGVuKCkgeyByZXR1cm4gISF0aGlzLl9jUmVmOyB9XG5cbiAgLyoqXG4gICAqIE9wZW5zIHRoZSBkYXRlcGlja2VyIHBvcHVwLlxuICAgKlxuICAgKiBJZiB0aGUgcmVsYXRlZCBmb3JtIGNvbnRyb2wgY29udGFpbnMgYSB2YWxpZCBkYXRlLCB0aGUgY29ycmVzcG9uZGluZyBtb250aCB3aWxsIGJlIG9wZW5lZC5cbiAgICovXG4gIG9wZW4oKSB7XG4gICAgaWYgKCF0aGlzLmlzT3BlbigpKSB7XG4gICAgICBjb25zdCBjZiA9IHRoaXMuX2Nmci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShOZ2JEYXRlcGlja2VyKTtcbiAgICAgIHRoaXMuX2NSZWYgPSB0aGlzLl92Y1JlZi5jcmVhdGVDb21wb25lbnQoY2YpO1xuXG4gICAgICB0aGlzLl9hcHBseVBvcHVwU3R5bGluZyh0aGlzLl9jUmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgdGhpcy5fYXBwbHlEYXRlcGlja2VySW5wdXRzKHRoaXMuX2NSZWYuaW5zdGFuY2UpO1xuICAgICAgdGhpcy5fc3Vic2NyaWJlRm9yRGF0ZXBpY2tlck91dHB1dHModGhpcy5fY1JlZi5pbnN0YW5jZSk7XG4gICAgICB0aGlzLl9jUmVmLmluc3RhbmNlLm5nT25Jbml0KCk7XG4gICAgICB0aGlzLl9jUmVmLmluc3RhbmNlLndyaXRlVmFsdWUodGhpcy5fZGF0ZUFkYXB0ZXIudG9Nb2RlbCh0aGlzLl9tb2RlbCkpO1xuXG4gICAgICAvLyBkYXRlIHNlbGVjdGlvbiBldmVudCBoYW5kbGluZ1xuICAgICAgdGhpcy5fY1JlZi5pbnN0YW5jZS5yZWdpc3Rlck9uQ2hhbmdlKChzZWxlY3RlZERhdGUpID0+IHtcbiAgICAgICAgdGhpcy53cml0ZVZhbHVlKHNlbGVjdGVkRGF0ZSk7XG4gICAgICAgIHRoaXMuX29uQ2hhbmdlKHNlbGVjdGVkRGF0ZSk7XG4gICAgICAgIHRoaXMuX29uVG91Y2hlZCgpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuX2NSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICB0aGlzLl9jUmVmLmluc3RhbmNlLnNldERpc2FibGVkU3RhdGUodGhpcy5kaXNhYmxlZCk7XG5cbiAgICAgIGlmICh0aGlzLmNvbnRhaW5lciA9PT0gJ2JvZHknKSB7XG4gICAgICAgIHdpbmRvdy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuY29udGFpbmVyKS5hcHBlbmRDaGlsZCh0aGlzLl9jUmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICAvLyBmb2N1cyBoYW5kbGluZ1xuICAgICAgbmdiRm9jdXNUcmFwKHRoaXMuX2NSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudCwgdGhpcy5jbG9zZWQsIHRydWUpO1xuICAgICAgdGhpcy5fY1JlZi5pbnN0YW5jZS5mb2N1cygpO1xuXG4gICAgICBuZ2JBdXRvQ2xvc2UoXG4gICAgICAgICAgdGhpcy5fbmdab25lLCB0aGlzLl9kb2N1bWVudCwgdGhpcy5hdXRvQ2xvc2UsICgpID0+IHRoaXMuY2xvc2UoKSwgdGhpcy5jbG9zZWQsIFtdLFxuICAgICAgICAgIFt0aGlzLl9lbFJlZi5uYXRpdmVFbGVtZW50LCB0aGlzLl9jUmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnRdKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2VzIHRoZSBkYXRlcGlja2VyIHBvcHVwLlxuICAgKi9cbiAgY2xvc2UoKSB7XG4gICAgaWYgKHRoaXMuaXNPcGVuKCkpIHtcbiAgICAgIHRoaXMuX3ZjUmVmLnJlbW92ZSh0aGlzLl92Y1JlZi5pbmRleE9mKHRoaXMuX2NSZWYuaG9zdFZpZXcpKTtcbiAgICAgIHRoaXMuX2NSZWYgPSBudWxsO1xuICAgICAgdGhpcy5jbG9zZWQuZW1pdCgpO1xuICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgdGhlIGRhdGVwaWNrZXIgcG9wdXAuXG4gICAqL1xuICB0b2dnbGUoKSB7XG4gICAgaWYgKHRoaXMuaXNPcGVuKCkpIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcGVuKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE5hdmlnYXRlcyB0byB0aGUgcHJvdmlkZWQgZGF0ZS5cbiAgICpcbiAgICogV2l0aCB0aGUgZGVmYXVsdCBjYWxlbmRhciB3ZSB1c2UgSVNPIDg2MDE6ICdtb250aCcgaXMgMT1KYW4gLi4uIDEyPURlYy5cbiAgICogSWYgbm90aGluZyBvciBpbnZhbGlkIGRhdGUgcHJvdmlkZWQgY2FsZW5kYXIgd2lsbCBvcGVuIGN1cnJlbnQgbW9udGguXG4gICAqXG4gICAqIFVzZSB0aGUgYFtzdGFydERhdGVdYCBpbnB1dCBhcyBhbiBhbHRlcm5hdGl2ZS5cbiAgICovXG4gIG5hdmlnYXRlVG8oZGF0ZT86IHt5ZWFyOiBudW1iZXIsIG1vbnRoOiBudW1iZXIsIGRheT86IG51bWJlcn0pIHtcbiAgICBpZiAodGhpcy5pc09wZW4oKSkge1xuICAgICAgdGhpcy5fY1JlZi5pbnN0YW5jZS5uYXZpZ2F0ZVRvKGRhdGUpO1xuICAgIH1cbiAgfVxuXG4gIG9uQmx1cigpIHsgdGhpcy5fb25Ub3VjaGVkKCk7IH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXNbJ21pbkRhdGUnXSB8fCBjaGFuZ2VzWydtYXhEYXRlJ10pIHtcbiAgICAgIHRoaXMuX3ZhbGlkYXRvckNoYW5nZSgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgICB0aGlzLl96b25lU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIF9hcHBseURhdGVwaWNrZXJJbnB1dHMoZGF0ZXBpY2tlckluc3RhbmNlOiBOZ2JEYXRlcGlja2VyKTogdm9pZCB7XG4gICAgWydkYXlUZW1wbGF0ZScsICdkYXlUZW1wbGF0ZURhdGEnLCAnZGlzcGxheU1vbnRocycsICdmaXJzdERheU9mV2VlaycsICdmb290ZXJUZW1wbGF0ZScsICdtYXJrRGlzYWJsZWQnLCAnbWluRGF0ZScsXG4gICAgICdtYXhEYXRlJywgJ25hdmlnYXRpb24nLCAnb3V0c2lkZURheXMnLCAnc2hvd05hdmlnYXRpb24nLCAnc2hvd1dlZWtkYXlzJywgJ3Nob3dXZWVrTnVtYmVycyddXG4gICAgICAgIC5mb3JFYWNoKChvcHRpb25OYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICBpZiAodGhpc1tvcHRpb25OYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBkYXRlcGlja2VySW5zdGFuY2Vbb3B0aW9uTmFtZV0gPSB0aGlzW29wdGlvbk5hbWVdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgZGF0ZXBpY2tlckluc3RhbmNlLnN0YXJ0RGF0ZSA9IHRoaXMuc3RhcnREYXRlIHx8IHRoaXMuX21vZGVsO1xuICB9XG5cbiAgcHJpdmF0ZSBfYXBwbHlQb3B1cFN0eWxpbmcobmF0aXZlRWxlbWVudDogYW55KSB7XG4gICAgdGhpcy5fcmVuZGVyZXIuYWRkQ2xhc3MobmF0aXZlRWxlbWVudCwgJ2Ryb3Bkb3duLW1lbnUnKTtcbiAgICB0aGlzLl9yZW5kZXJlci5hZGRDbGFzcyhuYXRpdmVFbGVtZW50LCAnc2hvdycpO1xuXG4gICAgaWYgKHRoaXMuY29udGFpbmVyID09PSAnYm9keScpIHtcbiAgICAgIHRoaXMuX3JlbmRlcmVyLmFkZENsYXNzKG5hdGl2ZUVsZW1lbnQsICduZ2ItZHAtYm9keScpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3N1YnNjcmliZUZvckRhdGVwaWNrZXJPdXRwdXRzKGRhdGVwaWNrZXJJbnN0YW5jZTogTmdiRGF0ZXBpY2tlcikge1xuICAgIGRhdGVwaWNrZXJJbnN0YW5jZS5uYXZpZ2F0ZS5zdWJzY3JpYmUobmF2aWdhdGVFdmVudCA9PiB0aGlzLm5hdmlnYXRlLmVtaXQobmF2aWdhdGVFdmVudCkpO1xuICAgIGRhdGVwaWNrZXJJbnN0YW5jZS5zZWxlY3Quc3Vic2NyaWJlKGRhdGUgPT4ge1xuICAgICAgdGhpcy5kYXRlU2VsZWN0LmVtaXQoZGF0ZSk7XG4gICAgICBpZiAodGhpcy5hdXRvQ2xvc2UgPT09IHRydWUgfHwgdGhpcy5hdXRvQ2xvc2UgPT09ICdpbnNpZGUnKSB7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3dyaXRlTW9kZWxWYWx1ZShtb2RlbDogTmdiRGF0ZSkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fcGFyc2VyRm9ybWF0dGVyLmZvcm1hdChtb2RlbCk7XG4gICAgdGhpcy5faW5wdXRWYWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsUmVmLm5hdGl2ZUVsZW1lbnQsICd2YWx1ZScsIHZhbHVlKTtcbiAgICBpZiAodGhpcy5pc09wZW4oKSkge1xuICAgICAgdGhpcy5fY1JlZi5pbnN0YW5jZS53cml0ZVZhbHVlKHRoaXMuX2RhdGVBZGFwdGVyLnRvTW9kZWwobW9kZWwpKTtcbiAgICAgIHRoaXMuX29uVG91Y2hlZCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2Zyb21EYXRlU3RydWN0KGRhdGU6IE5nYkRhdGVTdHJ1Y3QpOiBOZ2JEYXRlIHtcbiAgICBjb25zdCBuZ2JEYXRlID0gZGF0ZSA/IG5ldyBOZ2JEYXRlKGRhdGUueWVhciwgZGF0ZS5tb250aCwgZGF0ZS5kYXkpIDogbnVsbDtcbiAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXIuaXNWYWxpZChuZ2JEYXRlKSA/IG5nYkRhdGUgOiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlUG9wdXBQb3NpdGlvbigpIHtcbiAgICBpZiAoIXRoaXMuX2NSZWYpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgaG9zdEVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICAgIGlmICh0eXBlb2YgdGhpcy5wb3NpdGlvblRhcmdldCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGhvc3RFbGVtZW50ID0gd2luZG93LmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5wb3NpdGlvblRhcmdldCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnBvc2l0aW9uVGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgIGhvc3RFbGVtZW50ID0gdGhpcy5wb3NpdGlvblRhcmdldDtcbiAgICB9IGVsc2Uge1xuICAgICAgaG9zdEVsZW1lbnQgPSB0aGlzLl9lbFJlZi5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBvc2l0aW9uVGFyZ2V0ICYmICFob3N0RWxlbWVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCduZ2JEYXRlcGlja2VyIGNvdWxkIG5vdCBmaW5kIGVsZW1lbnQgZGVjbGFyZWQgaW4gW3Bvc2l0aW9uVGFyZ2V0XSB0byBwb3NpdGlvbiBhZ2FpbnN0LicpO1xuICAgIH1cblxuICAgIHBvc2l0aW9uRWxlbWVudHMoaG9zdEVsZW1lbnQsIHRoaXMuX2NSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudCwgdGhpcy5wbGFjZW1lbnQsIHRoaXMuY29udGFpbmVyID09PSAnYm9keScpO1xuICB9XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/datepicker/datepicker-keymap-service.js b/dist/sunbird-ui-components/esm2015/datepicker/datepicker-keymap-service.js new file mode 100644 index 0000000..1578260 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/datepicker/datepicker-keymap-service.js @@ -0,0 +1,111 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Injectable } from '@angular/core'; +import { NgbDatepickerService } from './datepicker-service'; +import { NgbCalendar } from './ngb-calendar'; +import { Key } from '../util/key'; +export class NgbDatepickerKeyMapService { + /** + * @param {?} _service + * @param {?} _calendar + */ + constructor(_service, _calendar) { + this._service = _service; + this._calendar = _calendar; + _service.model$.subscribe((/** + * @param {?} model + * @return {?} + */ + model => { + this._minDate = model.minDate; + this._maxDate = model.maxDate; + this._firstViewDate = model.firstDate; + this._lastViewDate = model.lastDate; + })); + } + /** + * @param {?} event + * @return {?} + */ + processKey(event) { + // tslint:disable-next-line:deprecation + switch (event.which) { + case Key.PageUp: + this._service.focusMove(event.shiftKey ? 'y' : 'm', -1); + break; + case Key.PageDown: + this._service.focusMove(event.shiftKey ? 'y' : 'm', 1); + break; + case Key.End: + this._service.focus(event.shiftKey ? this._maxDate : this._lastViewDate); + break; + case Key.Home: + this._service.focus(event.shiftKey ? this._minDate : this._firstViewDate); + break; + case Key.ArrowLeft: + this._service.focusMove('d', -1); + break; + case Key.ArrowUp: + this._service.focusMove('d', -this._calendar.getDaysPerWeek()); + break; + case Key.ArrowRight: + this._service.focusMove('d', 1); + break; + case Key.ArrowDown: + this._service.focusMove('d', this._calendar.getDaysPerWeek()); + break; + case Key.Enter: + case Key.Space: + this._service.focusSelect(); + break; + default: + return; + } + // note 'return' in default case + event.preventDefault(); + event.stopPropagation(); + } +} +NgbDatepickerKeyMapService.decorators = [ + { type: Injectable } +]; +/** @nocollapse */ +NgbDatepickerKeyMapService.ctorParameters = () => [ + { type: NgbDatepickerService }, + { type: NgbCalendar } +]; +if (false) { + /** + * @type {?} + * @private + */ + NgbDatepickerKeyMapService.prototype._minDate; + /** + * @type {?} + * @private + */ + NgbDatepickerKeyMapService.prototype._maxDate; + /** + * @type {?} + * @private + */ + NgbDatepickerKeyMapService.prototype._firstViewDate; + /** + * @type {?} + * @private + */ + NgbDatepickerKeyMapService.prototype._lastViewDate; + /** + * @type {?} + * @private + */ + NgbDatepickerKeyMapService.prototype._service; + /** + * @type {?} + * @private + */ + NgbDatepickerKeyMapService.prototype._calendar; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1rZXltYXAtc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImRhdGVwaWNrZXIvZGF0ZXBpY2tlci1rZXltYXAtc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUloQyxNQUFNLE9BQU8sMEJBQTBCOzs7OztJQU1yQyxZQUFvQixRQUE4QixFQUFVLFNBQXNCO1FBQTlELGFBQVEsR0FBUixRQUFRLENBQXNCO1FBQVUsY0FBUyxHQUFULFNBQVMsQ0FBYTtRQUNoRixRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVM7Ozs7UUFBQyxLQUFLLENBQUMsRUFBRTtZQUNoQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDOUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQzlCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztZQUN0QyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFDdEMsQ0FBQyxFQUFDLENBQUM7SUFDTCxDQUFDOzs7OztJQUVELFVBQVUsQ0FBQyxLQUFvQjtRQUM3Qix1Q0FBdUM7UUFDdkMsUUFBUSxLQUFLLENBQUMsS0FBSyxFQUFFO1lBQ25CLEtBQUssR0FBRyxDQUFDLE1BQU07Z0JBQ2IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDeEQsTUFBTTtZQUNSLEtBQUssR0FBRyxDQUFDLFFBQVE7Z0JBQ2YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZELE1BQU07WUFDUixLQUFLLEdBQUcsQ0FBQyxHQUFHO2dCQUNWLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDekUsTUFBTTtZQUNSLEtBQUssR0FBRyxDQUFDLElBQUk7Z0JBQ1gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUMxRSxNQUFNO1lBQ1IsS0FBSyxHQUFHLENBQUMsU0FBUztnQkFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pDLE1BQU07WUFDUixLQUFLLEdBQUcsQ0FBQyxPQUFPO2dCQUNkLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztnQkFDL0QsTUFBTTtZQUNSLEtBQUssR0FBRyxDQUFDLFVBQVU7Z0JBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDaEMsTUFBTTtZQUNSLEtBQUssR0FBRyxDQUFDLFNBQVM7Z0JBQ2hCLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7Z0JBQzlELE1BQU07WUFDUixLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUM7WUFDZixLQUFLLEdBQUcsQ0FBQyxLQUFLO2dCQUNaLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQzVCLE1BQU07WUFDUjtnQkFDRSxPQUFPO1NBQ1Y7UUFFRCxnQ0FBZ0M7UUFDaEMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUMxQixDQUFDOzs7WUF0REYsVUFBVTs7OztZQUxILG9CQUFvQjtZQUNwQixXQUFXOzs7Ozs7O0lBTWpCLDhDQUEwQjs7Ozs7SUFDMUIsOENBQTBCOzs7OztJQUMxQixvREFBZ0M7Ozs7O0lBQ2hDLG1EQUErQjs7Ozs7SUFFbkIsOENBQXNDOzs7OztJQUFFLCtDQUE4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge05nYkRhdGVwaWNrZXJTZXJ2aWNlfSBmcm9tICcuL2RhdGVwaWNrZXItc2VydmljZSc7XG5pbXBvcnQge05nYkNhbGVuZGFyfSBmcm9tICcuL25nYi1jYWxlbmRhcic7XG5pbXBvcnQge0tleX0gZnJvbSAnLi4vdXRpbC9rZXknO1xuaW1wb3J0IHtOZ2JEYXRlfSBmcm9tICcuL25nYi1kYXRlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE5nYkRhdGVwaWNrZXJLZXlNYXBTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBfbWluRGF0ZTogTmdiRGF0ZTtcbiAgcHJpdmF0ZSBfbWF4RGF0ZTogTmdiRGF0ZTtcbiAgcHJpdmF0ZSBfZmlyc3RWaWV3RGF0ZTogTmdiRGF0ZTtcbiAgcHJpdmF0ZSBfbGFzdFZpZXdEYXRlOiBOZ2JEYXRlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX3NlcnZpY2U6IE5nYkRhdGVwaWNrZXJTZXJ2aWNlLCBwcml2YXRlIF9jYWxlbmRhcjogTmdiQ2FsZW5kYXIpIHtcbiAgICBfc2VydmljZS5tb2RlbCQuc3Vic2NyaWJlKG1vZGVsID0+IHtcbiAgICAgIHRoaXMuX21pbkRhdGUgPSBtb2RlbC5taW5EYXRlO1xuICAgICAgdGhpcy5fbWF4RGF0ZSA9IG1vZGVsLm1heERhdGU7XG4gICAgICB0aGlzLl9maXJzdFZpZXdEYXRlID0gbW9kZWwuZmlyc3REYXRlO1xuICAgICAgdGhpcy5fbGFzdFZpZXdEYXRlID0gbW9kZWwubGFzdERhdGU7XG4gICAgfSk7XG4gIH1cblxuICBwcm9jZXNzS2V5KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmRlcHJlY2F0aW9uXG4gICAgc3dpdGNoIChldmVudC53aGljaCkge1xuICAgICAgY2FzZSBLZXkuUGFnZVVwOlxuICAgICAgICB0aGlzLl9zZXJ2aWNlLmZvY3VzTW92ZShldmVudC5zaGlmdEtleSA/ICd5JyA6ICdtJywgLTEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgS2V5LlBhZ2VEb3duOlxuICAgICAgICB0aGlzLl9zZXJ2aWNlLmZvY3VzTW92ZShldmVudC5zaGlmdEtleSA/ICd5JyA6ICdtJywgMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBLZXkuRW5kOlxuICAgICAgICB0aGlzLl9zZXJ2aWNlLmZvY3VzKGV2ZW50LnNoaWZ0S2V5ID8gdGhpcy5fbWF4RGF0ZSA6IHRoaXMuX2xhc3RWaWV3RGF0ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBLZXkuSG9tZTpcbiAgICAgICAgdGhpcy5fc2VydmljZS5mb2N1cyhldmVudC5zaGlmdEtleSA/IHRoaXMuX21pbkRhdGUgOiB0aGlzLl9maXJzdFZpZXdEYXRlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEtleS5BcnJvd0xlZnQ6XG4gICAgICAgIHRoaXMuX3NlcnZpY2UuZm9jdXNNb3ZlKCdkJywgLTEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgS2V5LkFycm93VXA6XG4gICAgICAgIHRoaXMuX3NlcnZpY2UuZm9jdXNNb3ZlKCdkJywgLXRoaXMuX2NhbGVuZGFyLmdldERheXNQZXJXZWVrKCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgS2V5LkFycm93UmlnaHQ6XG4gICAgICAgIHRoaXMuX3NlcnZpY2UuZm9jdXNNb3ZlKCdkJywgMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBLZXkuQXJyb3dEb3duOlxuICAgICAgICB0aGlzLl9zZXJ2aWNlLmZvY3VzTW92ZSgnZCcsIHRoaXMuX2NhbGVuZGFyLmdldERheXNQZXJXZWVrKCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgS2V5LkVudGVyOlxuICAgICAgY2FzZSBLZXkuU3BhY2U6XG4gICAgICAgIHRoaXMuX3NlcnZpY2UuZm9jdXNTZWxlY3QoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gbm90ZSAncmV0dXJuJyBpbiBkZWZhdWx0IGNhc2VcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/datepicker/datepicker-month-view.js b/dist/sunbird-ui-components/esm2015/datepicker/datepicker-month-view.js new file mode 100644 index 0000000..77e02c6 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/datepicker/datepicker-month-view.js @@ -0,0 +1,81 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Component, Input, TemplateRef, Output, EventEmitter, ViewEncapsulation } from '@angular/core'; +import { NgbDatepickerI18n } from './datepicker-i18n'; +export class NgbDatepickerMonthView { + /** + * @param {?} i18n + */ + constructor(i18n) { + this.i18n = i18n; + this.select = new EventEmitter(); + } + /** + * @param {?} day + * @return {?} + */ + doSelect(day) { + if (!day.context.disabled && !day.hidden) { + this.select.emit(day.date); + } + } +} +NgbDatepickerMonthView.decorators = [ + { type: Component, args: [{ + selector: 'ngb-datepicker-month-view', + host: { 'role': 'grid' }, + encapsulation: ViewEncapsulation.None, + template: ` +
+
+
+ {{ i18n.getWeekdayShortName(w) }} +
+
+ +
+
{{ i18n.getWeekNumerals(week.number) }}
+
+ + + +
+
+
+ `, + styles: ["ngb-datepicker-month-view{display:block}.ngb-dp-week-number,.ngb-dp-weekday{line-height:2rem;text-align:center;font-style:italic}.ngb-dp-weekday{color:#5bc0de;color:var(--info)}.ngb-dp-week{border-radius:.25rem;display:-ms-flexbox;display:flex}.ngb-dp-weekdays{border-bottom:1px solid rgba(0,0,0,.125);border-radius:0}.ngb-dp-day,.ngb-dp-week-number,.ngb-dp-weekday{width:2rem;height:2rem}.ngb-dp-day{cursor:pointer}.ngb-dp-day.disabled,.ngb-dp-day.hidden{cursor:default}"] + }] } +]; +/** @nocollapse */ +NgbDatepickerMonthView.ctorParameters = () => [ + { type: NgbDatepickerI18n } +]; +NgbDatepickerMonthView.propDecorators = { + dayTemplate: [{ type: Input }], + month: [{ type: Input }], + showWeekdays: [{ type: Input }], + showWeekNumbers: [{ type: Input }], + select: [{ type: Output }] +}; +if (false) { + /** @type {?} */ + NgbDatepickerMonthView.prototype.dayTemplate; + /** @type {?} */ + NgbDatepickerMonthView.prototype.month; + /** @type {?} */ + NgbDatepickerMonthView.prototype.showWeekdays; + /** @type {?} */ + NgbDatepickerMonthView.prototype.showWeekNumbers; + /** @type {?} */ + NgbDatepickerMonthView.prototype.select; + /** @type {?} */ + NgbDatepickerMonthView.prototype.i18n; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1tb250aC12aWV3LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiZGF0ZXBpY2tlci9kYXRlcGlja2VyLW1vbnRoLXZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBR3JHLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBZ0NwRCxNQUFNLE9BQU8sc0JBQXNCOzs7O0lBUWpDLFlBQW1CLElBQXVCO1FBQXZCLFNBQUksR0FBSixJQUFJLENBQW1CO1FBRmhDLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO0lBRUYsQ0FBQzs7Ozs7SUFFOUMsUUFBUSxDQUFDLEdBQWlCO1FBQ3hCLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUU7WUFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzVCO0lBQ0gsQ0FBQzs7O1lBM0NGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsMkJBQTJCO2dCQUNyQyxJQUFJLEVBQUUsRUFBQyxNQUFNLEVBQUUsTUFBTSxFQUFDO2dCQUN0QixhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtnQkFFckMsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JUOzthQUNGOzs7O1lBL0JPLGlCQUFpQjs7OzBCQWlDdEIsS0FBSztvQkFDTCxLQUFLOzJCQUNMLEtBQUs7OEJBQ0wsS0FBSztxQkFFTCxNQUFNOzs7O0lBTFAsNkNBQXNEOztJQUN0RCx1Q0FBK0I7O0lBQy9CLDhDQUFzQjs7SUFDdEIsaURBQXlCOztJQUV6Qix3Q0FBK0M7O0lBRW5DLHNDQUE4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBJbnB1dCwgVGVtcGxhdGVSZWYsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBWaWV3RW5jYXBzdWxhdGlvbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge01vbnRoVmlld01vZGVsLCBEYXlWaWV3TW9kZWx9IGZyb20gJy4vZGF0ZXBpY2tlci12aWV3LW1vZGVsJztcbmltcG9ydCB7TmdiRGF0ZX0gZnJvbSAnLi9uZ2ItZGF0ZSc7XG5pbXBvcnQge05nYkRhdGVwaWNrZXJJMThufSBmcm9tICcuL2RhdGVwaWNrZXItaTE4bic7XG5pbXBvcnQge0RheVRlbXBsYXRlQ29udGV4dH0gZnJvbSAnLi9kYXRlcGlja2VyLWRheS10ZW1wbGF0ZS1jb250ZXh0JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmdiLWRhdGVwaWNrZXItbW9udGgtdmlldycsXG4gIGhvc3Q6IHsncm9sZSc6ICdncmlkJ30sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHN0eWxlVXJsczogWycuL2RhdGVwaWNrZXItbW9udGgtdmlldy5zY3NzJ10sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiAqbmdJZj1cInNob3dXZWVrZGF5c1wiIGNsYXNzPVwibmdiLWRwLXdlZWsgbmdiLWRwLXdlZWtkYXlzIGJnLWxpZ2h0XCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwic2hvd1dlZWtOdW1iZXJzXCIgY2xhc3M9XCJuZ2ItZHAtd2Vla2RheSBuZ2ItZHAtc2hvd3dlZWtcIj48L2Rpdj5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHcgb2YgbW9udGgud2Vla2RheXNcIiBjbGFzcz1cIm5nYi1kcC13ZWVrZGF5IHNtYWxsXCI+XG4gICAgICAgIHt7IGkxOG4uZ2V0V2Vla2RheVNob3J0TmFtZSh3KSB9fVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPG5nLXRlbXBsYXRlIG5nRm9yIGxldC13ZWVrIFtuZ0Zvck9mXT1cIm1vbnRoLndlZWtzXCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwiIXdlZWsuY29sbGFwc2VkXCIgY2xhc3M9XCJuZ2ItZHAtd2Vla1wiIHJvbGU9XCJyb3dcIj5cbiAgICAgICAgPGRpdiAqbmdJZj1cInNob3dXZWVrTnVtYmVyc1wiIGNsYXNzPVwibmdiLWRwLXdlZWstbnVtYmVyIHNtYWxsIHRleHQtbXV0ZWRcIj57eyBpMThuLmdldFdlZWtOdW1lcmFscyh3ZWVrLm51bWJlcikgfX08L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZGF5IG9mIHdlZWsuZGF5c1wiIChjbGljayk9XCJkb1NlbGVjdChkYXkpXCIgY2xhc3M9XCJuZ2ItZHAtZGF5XCIgcm9sZT1cImdyaWRjZWxsXCJcbiAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiZGF5LmNvbnRleHQuZGlzYWJsZWRcIlxuICAgICAgICAgIFt0YWJpbmRleF09XCJkYXkudGFiaW5kZXhcIlxuICAgICAgICAgIFtjbGFzcy5oaWRkZW5dPVwiZGF5LmhpZGRlblwiXG4gICAgICAgICAgW2NsYXNzLm5nYi1kcC10b2RheV09XCJkYXkuY29udGV4dC50b2RheVwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJkYXkuYXJpYUxhYmVsXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cIiFkYXkuaGlkZGVuXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiZGF5VGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwiZGF5LmNvbnRleHRcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgYFxufSlcbmV4cG9ydCBjbGFzcyBOZ2JEYXRlcGlja2VyTW9udGhWaWV3IHtcbiAgQElucHV0KCkgZGF5VGVtcGxhdGU6IFRlbXBsYXRlUmVmPERheVRlbXBsYXRlQ29udGV4dD47XG4gIEBJbnB1dCgpIG1vbnRoOiBNb250aFZpZXdNb2RlbDtcbiAgQElucHV0KCkgc2hvd1dlZWtkYXlzO1xuICBASW5wdXQoKSBzaG93V2Vla051bWJlcnM7XG5cbiAgQE91dHB1dCgpIHNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8TmdiRGF0ZT4oKTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgaTE4bjogTmdiRGF0ZXBpY2tlckkxOG4pIHt9XG5cbiAgZG9TZWxlY3QoZGF5OiBEYXlWaWV3TW9kZWwpIHtcbiAgICBpZiAoIWRheS5jb250ZXh0LmRpc2FibGVkICYmICFkYXkuaGlkZGVuKSB7XG4gICAgICB0aGlzLnNlbGVjdC5lbWl0KGRheS5kYXRlKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/datepicker/datepicker-navigation-select.js b/dist/sunbird-ui-components/esm2015/datepicker/datepicker-navigation-select.js new file mode 100644 index 0000000..e1be06b --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/datepicker/datepicker-navigation-select.js @@ -0,0 +1,81 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, ViewEncapsulation } from '@angular/core'; +import { NgbDate } from './ngb-date'; +import { toInteger } from '../util/util'; +import { NgbDatepickerI18n } from './datepicker-i18n'; +export class NgbDatepickerNavigationSelect { + /** + * @param {?} i18n + */ + constructor(i18n) { + this.i18n = i18n; + this.select = new EventEmitter(); + } + /** + * @param {?} month + * @return {?} + */ + changeMonth(month) { this.select.emit(new NgbDate(this.date.year, toInteger(month), 1)); } + /** + * @param {?} year + * @return {?} + */ + changeYear(year) { this.select.emit(new NgbDate(toInteger(year), this.date.month, 1)); } +} +NgbDatepickerNavigationSelect.decorators = [ + { type: Component, args: [{ + selector: 'ngb-datepicker-navigation-select', + changeDetection: ChangeDetectionStrategy.OnPush, + encapsulation: ViewEncapsulation.None, + template: ` + + `, + styles: ["ngb-datepicker-navigation-select>.custom-select{-ms-flex:1 1 auto;flex:1 1 auto;padding:0 .5rem;font-size:.875rem;height:1.85rem}"] + }] } +]; +/** @nocollapse */ +NgbDatepickerNavigationSelect.ctorParameters = () => [ + { type: NgbDatepickerI18n } +]; +NgbDatepickerNavigationSelect.propDecorators = { + date: [{ type: Input }], + disabled: [{ type: Input }], + months: [{ type: Input }], + years: [{ type: Input }], + select: [{ type: Output }] +}; +if (false) { + /** @type {?} */ + NgbDatepickerNavigationSelect.prototype.date; + /** @type {?} */ + NgbDatepickerNavigationSelect.prototype.disabled; + /** @type {?} */ + NgbDatepickerNavigationSelect.prototype.months; + /** @type {?} */ + NgbDatepickerNavigationSelect.prototype.years; + /** @type {?} */ + NgbDatepickerNavigationSelect.prototype.select; + /** @type {?} */ + NgbDatepickerNavigationSelect.prototype.i18n; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1uYXZpZ2F0aW9uLXNlbGVjdC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImRhdGVwaWNrZXIvZGF0ZXBpY2tlci1uYXZpZ2F0aW9uLXNlbGVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNqSCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ25DLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDdkMsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUE0QnBELE1BQU0sT0FBTyw2QkFBNkI7Ozs7SUFReEMsWUFBbUIsSUFBdUI7UUFBdkIsU0FBSSxHQUFKLElBQUksQ0FBbUI7UUFGaEMsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7SUFFRixDQUFDOzs7OztJQUU5QyxXQUFXLENBQUMsS0FBYSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7Ozs7SUFFbEcsVUFBVSxDQUFDLElBQVksSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7OztZQXRDakcsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxrQ0FBa0M7Z0JBQzVDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2dCQUMvQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtnQkFFckMsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJUOzthQUNGOzs7O1lBM0JPLGlCQUFpQjs7O21CQTZCdEIsS0FBSzt1QkFDTCxLQUFLO3FCQUNMLEtBQUs7b0JBQ0wsS0FBSztxQkFFTCxNQUFNOzs7O0lBTFAsNkNBQXVCOztJQUN2QixpREFBMkI7O0lBQzNCLCtDQUEwQjs7SUFDMUIsOENBQXlCOztJQUV6QiwrQ0FBK0M7O0lBRW5DLDZDQUE4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBWaWV3RW5jYXBzdWxhdGlvbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge05nYkRhdGV9IGZyb20gJy4vbmdiLWRhdGUnO1xuaW1wb3J0IHt0b0ludGVnZXJ9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQge05nYkRhdGVwaWNrZXJJMThufSBmcm9tICcuL2RhdGVwaWNrZXItaTE4bic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25nYi1kYXRlcGlja2VyLW5hdmlnYXRpb24tc2VsZWN0JyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHN0eWxlVXJsczogWycuL2RhdGVwaWNrZXItbmF2aWdhdGlvbi1zZWxlY3Quc2NzcyddLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxzZWxlY3RcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICBjbGFzcz1cImN1c3RvbS1zZWxlY3RcIlxuICAgICAgW3ZhbHVlXT1cImRhdGU/Lm1vbnRoXCJcbiAgICAgIGkxOG4tYXJpYS1sYWJlbD1cIkBAbmdiLmRhdGVwaWNrZXIuc2VsZWN0LW1vbnRoXCIgYXJpYS1sYWJlbD1cIlNlbGVjdCBtb250aFwiXG4gICAgICBpMThuLXRpdGxlPVwiQEBuZ2IuZGF0ZXBpY2tlci5zZWxlY3QtbW9udGhcIiB0aXRsZT1cIlNlbGVjdCBtb250aFwiXG4gICAgICAoY2hhbmdlKT1cImNoYW5nZU1vbnRoKCRldmVudC50YXJnZXQudmFsdWUpXCI+XG4gICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG0gb2YgbW9udGhzXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJpMThuLmdldE1vbnRoRnVsbE5hbWUobSwgZGF0ZT8ueWVhcilcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJtXCI+e3sgaTE4bi5nZXRNb250aFNob3J0TmFtZShtLCBkYXRlPy55ZWFyKSB9fTwvb3B0aW9uPlxuICAgIDwvc2VsZWN0PjxzZWxlY3RcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICBjbGFzcz1cImN1c3RvbS1zZWxlY3RcIlxuICAgICAgW3ZhbHVlXT1cImRhdGU/LnllYXJcIlxuICAgICAgaTE4bi1hcmlhLWxhYmVsPVwiQEBuZ2IuZGF0ZXBpY2tlci5zZWxlY3QteWVhclwiIGFyaWEtbGFiZWw9XCJTZWxlY3QgeWVhclwiXG4gICAgICBpMThuLXRpdGxlPVwiQEBuZ2IuZGF0ZXBpY2tlci5zZWxlY3QteWVhclwiIHRpdGxlPVwiU2VsZWN0IHllYXJcIlxuICAgICAgKGNoYW5nZSk9XCJjaGFuZ2VZZWFyKCRldmVudC50YXJnZXQudmFsdWUpXCI+XG4gICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHkgb2YgeWVhcnNcIiBbdmFsdWVdPVwieVwiPnt7IGkxOG4uZ2V0WWVhck51bWVyYWxzKHkpIH19PC9vcHRpb24+XG4gICAgPC9zZWxlY3Q+XG4gIGBcbn0pXG5leHBvcnQgY2xhc3MgTmdiRGF0ZXBpY2tlck5hdmlnYXRpb25TZWxlY3Qge1xuICBASW5wdXQoKSBkYXRlOiBOZ2JEYXRlO1xuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbjtcbiAgQElucHV0KCkgbW9udGhzOiBudW1iZXJbXTtcbiAgQElucHV0KCkgeWVhcnM6IG51bWJlcltdO1xuXG4gIEBPdXRwdXQoKSBzZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPE5nYkRhdGU+KCk7XG5cbiAgY29uc3RydWN0b3IocHVibGljIGkxOG46IE5nYkRhdGVwaWNrZXJJMThuKSB7fVxuXG4gIGNoYW5nZU1vbnRoKG1vbnRoOiBzdHJpbmcpIHsgdGhpcy5zZWxlY3QuZW1pdChuZXcgTmdiRGF0ZSh0aGlzLmRhdGUueWVhciwgdG9JbnRlZ2VyKG1vbnRoKSwgMSkpOyB9XG5cbiAgY2hhbmdlWWVhcih5ZWFyOiBzdHJpbmcpIHsgdGhpcy5zZWxlY3QuZW1pdChuZXcgTmdiRGF0ZSh0b0ludGVnZXIoeWVhciksIHRoaXMuZGF0ZS5tb250aCwgMSkpOyB9XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/datepicker/datepicker-navigation.js b/dist/sunbird-ui-components/esm2015/datepicker/datepicker-navigation.js new file mode 100644 index 0000000..468fd1b --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/datepicker/datepicker-navigation.js @@ -0,0 +1,99 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, ViewEncapsulation } from '@angular/core'; +import { NavigationEvent } from './datepicker-view-model'; +import { NgbDate } from './ngb-date'; +import { NgbDatepickerI18n } from './datepicker-i18n'; +export class NgbDatepickerNavigation { + /** + * @param {?} i18n + */ + constructor(i18n) { + this.i18n = i18n; + this.navigation = NavigationEvent; + this.months = []; + this.navigate = new EventEmitter(); + this.select = new EventEmitter(); + } +} +NgbDatepickerNavigation.decorators = [ + { type: Component, args: [{ + selector: 'ngb-datepicker-navigation', + changeDetection: ChangeDetectionStrategy.OnPush, + encapsulation: ViewEncapsulation.None, + template: ` +
+ +
+ + + + +
+
+ {{ i18n.getMonthFullName(month.number, month.year) }} {{ i18n.getYearNumerals(month.year) }} +
+
+
+
+ +
+ `, + styles: ["ngb-datepicker-navigation{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.ngb-dp-navigation-chevron{border-style:solid;border-width:.2em .2em 0 0;display:inline-block;width:.75em;height:.75em;margin-left:.25em;margin-right:.15em;-webkit-transform:rotate(-135deg);transform:rotate(-135deg)}.right .ngb-dp-navigation-chevron{-webkit-transform:rotate(45deg);transform:rotate(45deg);margin-left:.15em;margin-right:.25em}.ngb-dp-arrow{display:-ms-flexbox;display:flex;-ms-flex:1 1 auto;flex:1 1 auto;padding-right:0;padding-left:0;margin:0;width:2rem;height:2rem}.ngb-dp-arrow.right{-ms-flex-pack:end;justify-content:flex-end}.ngb-dp-arrow-btn{padding:0 .25rem;margin:0 .5rem;border:none;background-color:transparent;z-index:1}.ngb-dp-arrow-btn:focus{outline-width:1px;outline-style:auto}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.ngb-dp-arrow-btn:focus{outline-style:solid}}.ngb-dp-month-name{font-size:larger;height:2rem;line-height:2rem;text-align:center}.ngb-dp-navigation-select{display:-ms-flexbox;display:flex;-ms-flex:1 1 9rem;flex:1 1 9rem}"] + }] } +]; +/** @nocollapse */ +NgbDatepickerNavigation.ctorParameters = () => [ + { type: NgbDatepickerI18n } +]; +NgbDatepickerNavigation.propDecorators = { + date: [{ type: Input }], + disabled: [{ type: Input }], + months: [{ type: Input }], + showSelect: [{ type: Input }], + prevDisabled: [{ type: Input }], + nextDisabled: [{ type: Input }], + selectBoxes: [{ type: Input }], + navigate: [{ type: Output }], + select: [{ type: Output }] +}; +if (false) { + /** @type {?} */ + NgbDatepickerNavigation.prototype.navigation; + /** @type {?} */ + NgbDatepickerNavigation.prototype.date; + /** @type {?} */ + NgbDatepickerNavigation.prototype.disabled; + /** @type {?} */ + NgbDatepickerNavigation.prototype.months; + /** @type {?} */ + NgbDatepickerNavigation.prototype.showSelect; + /** @type {?} */ + NgbDatepickerNavigation.prototype.prevDisabled; + /** @type {?} */ + NgbDatepickerNavigation.prototype.nextDisabled; + /** @type {?} */ + NgbDatepickerNavigation.prototype.selectBoxes; + /** @type {?} */ + NgbDatepickerNavigation.prototype.navigate; + /** @type {?} */ + NgbDatepickerNavigation.prototype.select; + /** @type {?} */ + NgbDatepickerNavigation.prototype.i18n; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1uYXZpZ2F0aW9uLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiZGF0ZXBpY2tlci9kYXRlcGlja2VyLW5hdmlnYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakgsT0FBTyxFQUFDLGVBQWUsRUFBaUIsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ25DLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBdUNwRCxNQUFNLE9BQU8sdUJBQXVCOzs7O0lBY2xDLFlBQW1CLElBQXVCO1FBQXZCLFNBQUksR0FBSixJQUFJLENBQW1CO1FBYjFDLGVBQVUsR0FBRyxlQUFlLENBQUM7UUFJcEIsV0FBTSxHQUFxQixFQUFFLENBQUM7UUFNN0IsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFtQixDQUFDO1FBQy9DLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO0lBRUYsQ0FBQzs7O1lBbkQvQyxTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLDJCQUEyQjtnQkFDckMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07Z0JBQy9DLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO2dCQUVyQyxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQThCUDs7YUFDSjs7OztZQXRDTyxpQkFBaUI7OzttQkEwQ3RCLEtBQUs7dUJBQ0wsS0FBSztxQkFDTCxLQUFLO3lCQUNMLEtBQUs7MkJBQ0wsS0FBSzsyQkFDTCxLQUFLOzBCQUNMLEtBQUs7dUJBRUwsTUFBTTtxQkFDTixNQUFNOzs7O0lBWFAsNkNBQTZCOztJQUU3Qix1Q0FBdUI7O0lBQ3ZCLDJDQUEyQjs7SUFDM0IseUNBQXVDOztJQUN2Qyw2Q0FBNkI7O0lBQzdCLCtDQUErQjs7SUFDL0IsK0NBQStCOztJQUMvQiw4Q0FBMEQ7O0lBRTFELDJDQUF5RDs7SUFDekQseUNBQStDOztJQUVuQyx1Q0FBOEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgVmlld0VuY2Fwc3VsYXRpb259IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtOYXZpZ2F0aW9uRXZlbnQsIE1vbnRoVmlld01vZGVsfSBmcm9tICcuL2RhdGVwaWNrZXItdmlldy1tb2RlbCc7XG5pbXBvcnQge05nYkRhdGV9IGZyb20gJy4vbmdiLWRhdGUnO1xuaW1wb3J0IHtOZ2JEYXRlcGlja2VySTE4bn0gZnJvbSAnLi9kYXRlcGlja2VyLWkxOG4nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ2ItZGF0ZXBpY2tlci1uYXZpZ2F0aW9uJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHN0eWxlVXJsczogWycuL2RhdGVwaWNrZXItbmF2aWdhdGlvbi5zY3NzJ10sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cIm5nYi1kcC1hcnJvd1wiPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWxpbmsgbmdiLWRwLWFycm93LWJ0blwiIChjbGljayk9XCJuYXZpZ2F0ZS5lbWl0KG5hdmlnYXRpb24uUFJFVilcIiBbZGlzYWJsZWRdPVwicHJldkRpc2FibGVkXCJcbiAgICAgICAgICAgICAgaTE4bi1hcmlhLWxhYmVsPVwiQEBuZ2IuZGF0ZXBpY2tlci5wcmV2aW91cy1tb250aFwiIGFyaWEtbGFiZWw9XCJQcmV2aW91cyBtb250aFwiXG4gICAgICAgICAgICAgIGkxOG4tdGl0bGU9XCJAQG5nYi5kYXRlcGlja2VyLnByZXZpb3VzLW1vbnRoXCIgdGl0bGU9XCJQcmV2aW91cyBtb250aFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm5nYi1kcC1uYXZpZ2F0aW9uLWNoZXZyb25cIj48L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8bmdiLWRhdGVwaWNrZXItbmF2aWdhdGlvbi1zZWxlY3QgKm5nSWY9XCJzaG93U2VsZWN0XCIgY2xhc3M9XCJuZ2ItZHAtbmF2aWdhdGlvbi1zZWxlY3RcIlxuICAgICAgW2RhdGVdPVwiZGF0ZVwiXG4gICAgICBbZGlzYWJsZWRdID0gXCJkaXNhYmxlZFwiXG4gICAgICBbbW9udGhzXT1cInNlbGVjdEJveGVzLm1vbnRoc1wiXG4gICAgICBbeWVhcnNdPVwic2VsZWN0Qm94ZXMueWVhcnNcIlxuICAgICAgKHNlbGVjdCk9XCJzZWxlY3QuZW1pdCgkZXZlbnQpXCI+XG4gICAgPC9uZ2ItZGF0ZXBpY2tlci1uYXZpZ2F0aW9uLXNlbGVjdD5cblxuICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cIiFzaG93U2VsZWN0XCIgbmdGb3IgbGV0LW1vbnRoIFtuZ0Zvck9mXT1cIm1vbnRoc1wiIGxldC1pPVwiaW5kZXhcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJuZ2ItZHAtYXJyb3dcIiAqbmdJZj1cImkgPiAwXCI+PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibmdiLWRwLW1vbnRoLW5hbWVcIj5cbiAgICAgICAge3sgaTE4bi5nZXRNb250aEZ1bGxOYW1lKG1vbnRoLm51bWJlciwgbW9udGgueWVhcikgfX0ge3sgaTE4bi5nZXRZZWFyTnVtZXJhbHMobW9udGgueWVhcikgfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm5nYi1kcC1hcnJvd1wiICpuZ0lmPVwiaSAhPT0gbW9udGhzLmxlbmd0aCAtIDFcIj48L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxkaXYgY2xhc3M9XCJuZ2ItZHAtYXJyb3cgcmlnaHRcIj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1saW5rIG5nYi1kcC1hcnJvdy1idG5cIiAoY2xpY2spPVwibmF2aWdhdGUuZW1pdChuYXZpZ2F0aW9uLk5FWFQpXCIgW2Rpc2FibGVkXT1cIm5leHREaXNhYmxlZFwiXG4gICAgICAgICAgICAgIGkxOG4tYXJpYS1sYWJlbD1cIkBAbmdiLmRhdGVwaWNrZXIubmV4dC1tb250aFwiIGFyaWEtbGFiZWw9XCJOZXh0IG1vbnRoXCJcbiAgICAgICAgICAgICAgaTE4bi10aXRsZT1cIkBAbmdiLmRhdGVwaWNrZXIubmV4dC1tb250aFwiIHRpdGxlPVwiTmV4dCBtb250aFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm5nYi1kcC1uYXZpZ2F0aW9uLWNoZXZyb25cIj48L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICBgXG59KVxuZXhwb3J0IGNsYXNzIE5nYkRhdGVwaWNrZXJOYXZpZ2F0aW9uIHtcbiAgbmF2aWdhdGlvbiA9IE5hdmlnYXRpb25FdmVudDtcblxuICBASW5wdXQoKSBkYXRlOiBOZ2JEYXRlO1xuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbjtcbiAgQElucHV0KCkgbW9udGhzOiBNb250aFZpZXdNb2RlbFtdID0gW107XG4gIEBJbnB1dCgpIHNob3dTZWxlY3Q6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHByZXZEaXNhYmxlZDogYm9vbGVhbjtcbiAgQElucHV0KCkgbmV4dERpc2FibGVkOiBib29sZWFuO1xuICBASW5wdXQoKSBzZWxlY3RCb3hlczoge3llYXJzOiBudW1iZXJbXSwgbW9udGhzOiBudW1iZXJbXX07XG5cbiAgQE91dHB1dCgpIG5hdmlnYXRlID0gbmV3IEV2ZW50RW1pdHRlcjxOYXZpZ2F0aW9uRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBzZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPE5nYkRhdGU+KCk7XG5cbiAgY29uc3RydWN0b3IocHVibGljIGkxOG46IE5nYkRhdGVwaWNrZXJJMThuKSB7fVxufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/datepicker/datepicker-service.js b/dist/sunbird-ui-components/esm2015/datepicker/datepicker-service.js new file mode 100644 index 0000000..4f0f07b --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/datepicker/datepicker-service.js @@ -0,0 +1,404 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgbCalendar } from './ngb-calendar'; +import { NgbDate } from './ngb-date'; +import { Injectable } from '@angular/core'; +import { isInteger, toInteger } from '../util/util'; +import { Subject } from 'rxjs'; +import { buildMonths, checkDateInRange, checkMinBeforeMax, isChangedDate, isChangedMonth, isDateSelectable, generateSelectBoxYears, generateSelectBoxMonths, prevMonthDisabled, nextMonthDisabled } from './datepicker-tools'; +import { filter } from 'rxjs/operators'; +import { NgbDatepickerI18n } from './datepicker-i18n'; +export class NgbDatepickerService { + /** + * @param {?} _calendar + * @param {?} _i18n + */ + constructor(_calendar, _i18n) { + this._calendar = _calendar; + this._i18n = _i18n; + this._model$ = new Subject(); + this._select$ = new Subject(); + this._state = { + disabled: false, + displayMonths: 1, + firstDayOfWeek: 1, + focusVisible: false, + months: [], + navigation: 'select', + outsideDays: 'visible', + prevDisabled: false, + nextDisabled: false, + selectBoxes: { years: [], months: [] }, + selectedDate: null + }; + } + /** + * @return {?} + */ + get model$() { return this._model$.pipe(filter((/** + * @param {?} model + * @return {?} + */ + model => model.months.length > 0))); } + /** + * @return {?} + */ + get select$() { return this._select$.pipe(filter((/** + * @param {?} date + * @return {?} + */ + date => date !== null))); } + /** + * @param {?} dayTemplateData + * @return {?} + */ + set dayTemplateData(dayTemplateData) { + if (this._state.dayTemplateData !== dayTemplateData) { + this._nextState({ dayTemplateData }); + } + } + /** + * @param {?} disabled + * @return {?} + */ + set disabled(disabled) { + if (this._state.disabled !== disabled) { + this._nextState({ disabled }); + } + } + /** + * @param {?} displayMonths + * @return {?} + */ + set displayMonths(displayMonths) { + displayMonths = toInteger(displayMonths); + if (isInteger(displayMonths) && displayMonths > 0 && this._state.displayMonths !== displayMonths) { + this._nextState({ displayMonths }); + } + } + /** + * @param {?} firstDayOfWeek + * @return {?} + */ + set firstDayOfWeek(firstDayOfWeek) { + firstDayOfWeek = toInteger(firstDayOfWeek); + if (isInteger(firstDayOfWeek) && firstDayOfWeek >= 0 && this._state.firstDayOfWeek !== firstDayOfWeek) { + this._nextState({ firstDayOfWeek }); + } + } + /** + * @param {?} focusVisible + * @return {?} + */ + set focusVisible(focusVisible) { + if (this._state.focusVisible !== focusVisible && !this._state.disabled) { + this._nextState({ focusVisible }); + } + } + /** + * @param {?} date + * @return {?} + */ + set maxDate(date) { + /** @type {?} */ + const maxDate = this.toValidDate(date, null); + if (isChangedDate(this._state.maxDate, maxDate)) { + this._nextState({ maxDate }); + } + } + /** + * @param {?} markDisabled + * @return {?} + */ + set markDisabled(markDisabled) { + if (this._state.markDisabled !== markDisabled) { + this._nextState({ markDisabled }); + } + } + /** + * @param {?} date + * @return {?} + */ + set minDate(date) { + /** @type {?} */ + const minDate = this.toValidDate(date, null); + if (isChangedDate(this._state.minDate, minDate)) { + this._nextState({ minDate }); + } + } + /** + * @param {?} navigation + * @return {?} + */ + set navigation(navigation) { + if (this._state.navigation !== navigation) { + this._nextState({ navigation }); + } + } + /** + * @param {?} outsideDays + * @return {?} + */ + set outsideDays(outsideDays) { + if (this._state.outsideDays !== outsideDays) { + this._nextState({ outsideDays }); + } + } + /** + * @param {?} date + * @return {?} + */ + focus(date) { + if (!this._state.disabled && this._calendar.isValid(date) && isChangedDate(this._state.focusDate, date)) { + this._nextState({ focusDate: date }); + } + } + /** + * @param {?=} period + * @param {?=} number + * @return {?} + */ + focusMove(period, number) { + this.focus(this._calendar.getNext(this._state.focusDate, period, number)); + } + /** + * @return {?} + */ + focusSelect() { + if (isDateSelectable(this._state.focusDate, this._state)) { + this.select(this._state.focusDate, { emitEvent: true }); + } + } + /** + * @param {?} date + * @return {?} + */ + open(date) { + /** @type {?} */ + const firstDate = this.toValidDate(date, this._calendar.getToday()); + if (!this._state.disabled && (!this._state.firstDate || isChangedMonth(this._state.firstDate, date))) { + this._nextState({ firstDate }); + } + } + /** + * @param {?} date + * @param {?=} options + * @return {?} + */ + select(date, options = {}) { + /** @type {?} */ + const selectedDate = this.toValidDate(date, null); + if (!this._state.disabled) { + if (isChangedDate(this._state.selectedDate, selectedDate)) { + this._nextState({ selectedDate }); + } + if (options.emitEvent && isDateSelectable(selectedDate, this._state)) { + this._select$.next(selectedDate); + } + } + } + /** + * @param {?} date + * @param {?=} defaultValue + * @return {?} + */ + toValidDate(date, defaultValue) { + /** @type {?} */ + const ngbDate = NgbDate.from(date); + if (defaultValue === undefined) { + defaultValue = this._calendar.getToday(); + } + return this._calendar.isValid(ngbDate) ? ngbDate : defaultValue; + } + /** + * @private + * @param {?} patch + * @return {?} + */ + _nextState(patch) { + /** @type {?} */ + const newState = this._updateState(patch); + this._patchContexts(newState); + this._state = newState; + this._model$.next(this._state); + } + /** + * @private + * @param {?} state + * @return {?} + */ + _patchContexts(state) { + const { months, displayMonths, selectedDate, focusDate, focusVisible, disabled, outsideDays } = state; + state.months.forEach((/** + * @param {?} month + * @return {?} + */ + month => { + month.weeks.forEach((/** + * @param {?} week + * @return {?} + */ + week => { + week.days.forEach((/** + * @param {?} day + * @return {?} + */ + day => { + // patch focus flag + if (focusDate) { + day.context.focused = focusDate.equals(day.date) && focusVisible; + } + // calculating tabindex + day.tabindex = !disabled && day.date.equals(focusDate) && focusDate.month === month.number ? 0 : -1; + // override context disabled + if (disabled === true) { + day.context.disabled = true; + } + // patch selection flag + if (selectedDate !== undefined) { + day.context.selected = selectedDate !== null && selectedDate.equals(day.date); + } + // visibility + if (month.number !== day.date.month) { + day.hidden = outsideDays === 'hidden' || outsideDays === 'collapsed' || + (displayMonths > 1 && day.date.after(months[0].firstDate) && + day.date.before(months[displayMonths - 1].lastDate)); + } + })); + })); + })); + } + /** + * @private + * @param {?} patch + * @return {?} + */ + _updateState(patch) { + // patching fields + /** @type {?} */ + const state = Object.assign({}, this._state, patch); + /** @type {?} */ + let startDate = state.firstDate; + // min/max dates changed + if ('minDate' in patch || 'maxDate' in patch) { + checkMinBeforeMax(state.minDate, state.maxDate); + state.focusDate = checkDateInRange(state.focusDate, state.minDate, state.maxDate); + state.firstDate = checkDateInRange(state.firstDate, state.minDate, state.maxDate); + startDate = state.focusDate; + } + // disabled + if ('disabled' in patch) { + state.focusVisible = false; + } + // initial rebuild via 'select()' + if ('selectedDate' in patch && this._state.months.length === 0) { + startDate = state.selectedDate; + } + // terminate early if only focus visibility was changed + if ('focusVisible' in patch) { + return state; + } + // focus date changed + if ('focusDate' in patch) { + state.focusDate = checkDateInRange(state.focusDate, state.minDate, state.maxDate); + startDate = state.focusDate; + // nothing to rebuild if only focus changed and it is still visible + if (state.months.length !== 0 && !state.focusDate.before(state.firstDate) && + !state.focusDate.after(state.lastDate)) { + return state; + } + } + // first date changed + if ('firstDate' in patch) { + state.firstDate = checkDateInRange(state.firstDate, state.minDate, state.maxDate); + startDate = state.firstDate; + } + // rebuilding months + if (startDate) { + /** @type {?} */ + const forceRebuild = 'dayTemplateData' in patch || 'firstDayOfWeek' in patch || 'markDisabled' in patch || + 'minDate' in patch || 'maxDate' in patch || 'disabled' in patch || 'outsideDays' in patch; + /** @type {?} */ + const months = buildMonths(this._calendar, startDate, state, this._i18n, forceRebuild); + // updating months and boundary dates + state.months = months; + state.firstDate = months.length > 0 ? months[0].firstDate : undefined; + state.lastDate = months.length > 0 ? months[months.length - 1].lastDate : undefined; + // reset selected date if 'markDisabled' returns true + if ('selectedDate' in patch && !isDateSelectable(state.selectedDate, state)) { + state.selectedDate = null; + } + // adjusting focus after months were built + if ('firstDate' in patch) { + if (state.focusDate === undefined || state.focusDate.before(state.firstDate) || + state.focusDate.after(state.lastDate)) { + state.focusDate = startDate; + } + } + // adjusting months/years for the select box navigation + /** @type {?} */ + const yearChanged = !this._state.firstDate || this._state.firstDate.year !== state.firstDate.year; + /** @type {?} */ + const monthChanged = !this._state.firstDate || this._state.firstDate.month !== state.firstDate.month; + if (state.navigation === 'select') { + // years -> boundaries (min/max were changed) + if ('minDate' in patch || 'maxDate' in patch || state.selectBoxes.years.length === 0 || yearChanged) { + state.selectBoxes.years = generateSelectBoxYears(state.firstDate, state.minDate, state.maxDate); + } + // months -> when current year or boundaries change + if ('minDate' in patch || 'maxDate' in patch || state.selectBoxes.months.length === 0 || yearChanged) { + state.selectBoxes.months = + generateSelectBoxMonths(this._calendar, state.firstDate, state.minDate, state.maxDate); + } + } + else { + state.selectBoxes = { years: [], months: [] }; + } + // updating navigation arrows -> boundaries change (min/max) or month/year changes + if ((state.navigation === 'arrows' || state.navigation === 'select') && + (monthChanged || yearChanged || 'minDate' in patch || 'maxDate' in patch || 'disabled' in patch)) { + state.prevDisabled = state.disabled || prevMonthDisabled(this._calendar, state.firstDate, state.minDate); + state.nextDisabled = state.disabled || nextMonthDisabled(this._calendar, state.lastDate, state.maxDate); + } + } + return state; + } +} +NgbDatepickerService.decorators = [ + { type: Injectable } +]; +/** @nocollapse */ +NgbDatepickerService.ctorParameters = () => [ + { type: NgbCalendar }, + { type: NgbDatepickerI18n } +]; +if (false) { + /** + * @type {?} + * @private + */ + NgbDatepickerService.prototype._model$; + /** + * @type {?} + * @private + */ + NgbDatepickerService.prototype._select$; + /** + * @type {?} + * @private + */ + NgbDatepickerService.prototype._state; + /** + * @type {?} + * @private + */ + NgbDatepickerService.prototype._calendar; + /** + * @type {?} + * @private + */ + NgbDatepickerService.prototype._i18n; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiZGF0ZXBpY2tlci9kYXRlcGlja2VyLXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBQyxXQUFXLEVBQVksTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBR25DLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDbEQsT0FBTyxFQUFhLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUN6QyxPQUFPLEVBQ0wsV0FBVyxFQUNYLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsYUFBYSxFQUNiLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsc0JBQXNCLEVBQ3RCLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2xCLE1BQU0sb0JBQW9CLENBQUM7QUFFNUIsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3RDLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBR3BELE1BQU0sT0FBTyxvQkFBb0I7Ozs7O0lBdUYvQixZQUFvQixTQUFzQixFQUFVLEtBQXdCO1FBQXhELGNBQVMsR0FBVCxTQUFTLENBQWE7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQXRGcEUsWUFBTyxHQUFHLElBQUksT0FBTyxFQUF1QixDQUFDO1FBRTdDLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBVyxDQUFDO1FBRWxDLFdBQU0sR0FBd0I7WUFDcEMsUUFBUSxFQUFFLEtBQUs7WUFDZixhQUFhLEVBQUUsQ0FBQztZQUNoQixjQUFjLEVBQUUsQ0FBQztZQUNqQixZ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QztnQkFDekcsS0FBSyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsUUFBUSxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDekc7U0FDRjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzs7O1lBblJGLFVBQVU7Ozs7WUF2QkgsV0FBVztZQXFCWCxpQkFBaUI7Ozs7Ozs7SUFJdkIsdUNBQXFEOzs7OztJQUVyRCx3Q0FBMEM7Ozs7O0lBRTFDLHNDQVlFOzs7OztJQXNFVSx5Q0FBOEI7Ozs7O0lBQUUscUNBQWdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOZ2JDYWxlbmRhciwgTmdiUGVyaW9kfSBmcm9tICcuL25nYi1jYWxlbmRhcic7XG5pbXBvcnQge05nYkRhdGV9IGZyb20gJy4vbmdiLWRhdGUnO1xuaW1wb3J0IHtOZ2JEYXRlU3RydWN0fSBmcm9tICcuL25nYi1kYXRlLXN0cnVjdCc7XG5pbXBvcnQge0RhdGVwaWNrZXJWaWV3TW9kZWwsIE5nYkRheVRlbXBsYXRlRGF0YSwgTmdiTWFya0Rpc2FibGVkfSBmcm9tICcuL2RhdGVwaWNrZXItdmlldy1tb2RlbCc7XG5pbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtpc0ludGVnZXIsIHRvSW50ZWdlcn0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBidWlsZE1vbnRocyxcbiAgY2hlY2tEYXRlSW5SYW5nZSxcbiAgY2hlY2tNaW5CZWZvcmVNYXgsXG4gIGlzQ2hhbmdlZERhdGUsXG4gIGlzQ2hhbmdlZE1vbnRoLFxuICBpc0RhdGVTZWxlY3RhYmxlLFxuICBnZW5lcmF0ZVNlbGVjdEJveFllYXJzLFxuICBnZW5lcmF0ZVNlbGVjdEJveE1vbnRocyxcbiAgcHJldk1vbnRoRGlzYWJsZWQsXG4gIG5leHRNb250aERpc2FibGVkXG59IGZyb20gJy4vZGF0ZXBpY2tlci10b29scyc7XG5cbmltcG9ydCB7ZmlsdGVyfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge05nYkRhdGVwaWNrZXJJMThufSBmcm9tICcuL2RhdGVwaWNrZXItaTE4bic7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBOZ2JEYXRlcGlja2VyU2VydmljZSB7XG4gIHByaXZhdGUgX21vZGVsJCA9IG5ldyBTdWJqZWN0PERhdGVwaWNrZXJWaWV3TW9kZWw+KCk7XG5cbiAgcHJpdmF0ZSBfc2VsZWN0JCA9IG5ldyBTdWJqZWN0PE5nYkRhdGU+KCk7XG5cbiAgcHJpdmF0ZSBfc3RhdGU6IERhdGVwaWNrZXJWaWV3TW9kZWwgPSB7XG4gICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgIGRpc3BsYXlNb250aHM6IDEsXG4gICAgZmlyc3REYXlPZldlZWs6IDEsXG4gICAgZm9jdXNWaXNpYmxlOiBmYWxzZSxcbiAgICBtb250aHM6IFtdLFxuICAgIG5hdmlnYXRpb246ICdzZWxlY3QnLFxuICAgIG91dHNpZGVEYXlzOiAndmlzaWJsZScsXG4gICAgcHJldkRpc2FibGVkOiBmYWxzZSxcbiAgICBuZXh0RGlzYWJsZWQ6IGZhbHNlLFxuICAgIHNlbGVjdEJveGVzOiB7eWVhcnM6IFtdLCBtb250aHM6IFtdfSxcbiAgICBzZWxlY3RlZERhdGU6IG51bGxcbiAgfTtcblxuICBnZXQgbW9kZWwkKCk6IE9ic2VydmFibGU8RGF0ZXBpY2tlclZpZXdNb2RlbD4geyByZXR1cm4gdGhpcy5fbW9kZWwkLnBpcGUoZmlsdGVyKG1vZGVsID0+IG1vZGVsLm1vbnRocy5sZW5ndGggPiAwKSk7IH1cblxuICBnZXQgc2VsZWN0JCgpOiBPYnNlcnZhYmxlPE5nYkRhdGU+IHsgcmV0dXJuIHRoaXMuX3NlbGVjdCQucGlwZShmaWx0ZXIoZGF0ZSA9PiBkYXRlICE9PSBudWxsKSk7IH1cblxuICBzZXQgZGF5VGVtcGxhdGVEYXRhKGRheVRlbXBsYXRlRGF0YTogTmdiRGF5VGVtcGxhdGVEYXRhKSB7XG4gICAgaWYgKHRoaXMuX3N0YXRlLmRheVRlbXBsYXRlRGF0YSAhPT0gZGF5VGVtcGxhdGVEYXRhKSB7XG4gICAgICB0aGlzLl9uZXh0U3RhdGUoe2RheVRlbXBsYXRlRGF0YX0pO1xuICAgIH1cbiAgfVxuXG4gIHNldCBkaXNhYmxlZChkaXNhYmxlZDogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLl9zdGF0ZS5kaXNhYmxlZCAhPT0gZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuX25leHRTdGF0ZSh7ZGlzYWJsZWR9KTtcbiAgICB9XG4gIH1cblxuICBzZXQgZGlzcGxheU1vbnRocyhkaXNwbGF5TW9udGhzOiBudW1iZXIpIHtcbiAgICBkaXNwbGF5TW9udGhzID0gdG9JbnRlZ2VyKGRpc3BsYXlNb250aHMpO1xuICAgIGlmIChpc0ludGVnZXIoZGlzcGxheU1vbnRocykgJiYgZGlzcGxheU1vbnRocyA+IDAgJiYgdGhpcy5fc3RhdGUuZGlzcGxheU1vbnRocyAhPT0gZGlzcGxheU1vbnRocykge1xuICAgICAgdGhpcy5fbmV4dFN0YXRlKHtkaXNwbGF5TW9udGhzfSk7XG4gICAgfVxuICB9XG5cbiAgc2V0IGZpcnN0RGF5T2ZXZWVrKGZpcnN0RGF5T2ZXZWVrOiBudW1iZXIpIHtcbiAgICBmaXJzdERheU9mV2VlayA9IHRvSW50ZWdlcihmaXJzdERheU9mV2Vlayk7XG4gICAgaWYgKGlzSW50ZWdlcihmaXJzdERheU9mV2VlaykgJiYgZmlyc3REYXlPZldlZWsgPj0gMCAmJiB0aGlzLl9zdGF0ZS5maXJzdERheU9mV2VlayAhPT0gZmlyc3REYXlPZldlZWspIHtcbiAgICAgIHRoaXMuX25leHRTdGF0ZSh7Zmlyc3REYXlPZldlZWt9KTtcbiAgICB9XG4gIH1cblxuICBzZXQgZm9jdXNWaXNpYmxlKGZvY3VzVmlzaWJsZTogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLl9zdGF0ZS5mb2N1c1Zpc2libGUgIT09IGZvY3VzVmlzaWJsZSAmJiAhdGhpcy5fc3RhdGUuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuX25leHRTdGF0ZSh7Zm9jdXNWaXNpYmxlfSk7XG4gICAgfVxuICB9XG5cbiAgc2V0IG1heERhdGUoZGF0ZTogTmdiRGF0ZSkge1xuICAgIGNvbnN0IG1heERhdGUgPSB0aGlzLnRvVmFsaWREYXRlKGRhdGUsIG51bGwpO1xuICAgIGlmIChpc0NoYW5nZWREYXRlKHRoaXMuX3N0YXRlLm1heERhdGUsIG1heERhdGUpKSB7XG4gICAgICB0aGlzLl9uZXh0U3RhdGUoe21heERhdGV9KTtcbiAgICB9XG4gIH1cblxuICBzZXQgbWFya0Rpc2FibGVkKG1hcmtEaXNhYmxlZDogTmdiTWFya0Rpc2FibGVkKSB7XG4gICAgaWYgKHRoaXMuX3N0YXRlLm1hcmtEaXNhYmxlZCAhPT0gbWFya0Rpc2FibGVkKSB7XG4gICAgICB0aGlzLl9uZXh0U3RhdGUoe21hcmtEaXNhYmxlZH0pO1xuICAgIH1cbiAgfVxuXG4gIHNldCBtaW5EYXRlKGRhdGU6IE5nYkRhdGUpIHtcbiAgICBjb25zdCBtaW5EYXRlID0gdGhpcy50b1ZhbGlkRGF0ZShkYXRlLCBudWxsKTtcbiAgICBpZiAoaXNDaGFuZ2VkRGF0ZSh0aGlzLl9zdGF0ZS5taW5EYXRlLCBtaW5EYXRlKSkge1xuICAgICAgdGhpcy5fbmV4dFN0YXRlKHttaW5EYXRlfSk7XG4gICAgfVxuICB9XG5cbiAgc2V0IG5hdmlnYXRpb24obmF2aWdhdGlvbjogJ3NlbGVjdCcgfCAnYXJyb3dzJyB8ICdub25lJykge1xuICAgIGlmICh0aGlzLl9zdGF0ZS5uYXZpZ2F0aW9uICE9PSBuYXZpZ2F0aW9uKSB7XG4gICAgICB0aGlzLl9uZXh0U3RhdGUoe25hdmlnYXRpb259KTtcbiAgICB9XG4gIH1cblxuICBzZXQgb3V0c2lkZURheXMob3V0c2lkZURheXM6ICd2aXNpYmxlJyB8ICdjb2xsYXBzZWQnIHwgJ2hpZGRlbicpIHtcbiAgICBpZiAodGhpcy5fc3RhdGUub3V0c2lkZURheXMgIT09IG91dHNpZGVEYXlzKSB7XG4gICAgICB0aGlzLl9uZXh0U3RhdGUoe291dHNpZGVEYXlzfSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfY2FsZW5kYXI6IE5nYkNhbGVuZGFyLCBwcml2YXRlIF9pMThuOiBOZ2JEYXRlcGlja2VySTE4bikge31cblxuICBmb2N1cyhkYXRlOiBOZ2JEYXRlKSB7XG4gICAgaWYgKCF0aGlzLl9zdGF0ZS5kaXNhYmxlZCAmJiB0aGlzLl9jYWxlbmRhci5pc1ZhbGlkKGRhdGUpICYmIGlzQ2hhbmdlZERhdGUodGhpcy5fc3RhdGUuZm9jdXNEYXRlLCBkYXRlKSkge1xuICAgICAgdGhpcy5fbmV4dFN0YXRlKHtmb2N1c0RhdGU6IGRhdGV9KTtcbiAgICB9XG4gIH1cblxuICBmb2N1c01vdmUocGVyaW9kPzogTmdiUGVyaW9kLCBudW1iZXI/OiBudW1iZXIpIHtcbiAgICB0aGlzLmZvY3VzKHRoaXMuX2NhbGVuZGFyLmdldE5leHQodGhpcy5fc3RhdGUuZm9jdXNEYXRlLCBwZXJpb2QsIG51bWJlcikpO1xuICB9XG5cbiAgZm9jdXNTZWxlY3QoKSB7XG4gICAgaWYgKGlzRGF0ZVNlbGVjdGFibGUodGhpcy5fc3RhdGUuZm9jdXNEYXRlLCB0aGlzLl9zdGF0ZSkpIHtcbiAgICAgIHRoaXMuc2VsZWN0KHRoaXMuX3N0YXRlLmZvY3VzRGF0ZSwge2VtaXRFdmVudDogdHJ1ZX0pO1xuICAgIH1cbiAgfVxuXG4gIG9wZW4oZGF0ZTogTmdiRGF0ZSkge1xuICAgIGNvbnN0IGZpcnN0RGF0ZSA9IHRoaXMudG9WYWxpZERhdGUoZGF0ZSwgdGhpcy5fY2FsZW5kYXIuZ2V0VG9kYXkoKSk7XG4gICAgaWYgKCF0aGlzLl9zdGF0ZS5kaXNhYmxlZCAmJiAoIXRoaXMuX3N0YXRlLmZpcnN0RGF0ZSB8fCBpc0NoYW5nZWRNb250aCh0aGlzLl9zdGF0ZS5maXJzdERhdGUsIGRhdGUpKSkge1xuICAgICAgdGhpcy5fbmV4dFN0YXRlKHtmaXJzdERhdGV9KTtcbiAgICB9XG4gIH1cblxuICBzZWxlY3QoZGF0ZTogTmdiRGF0ZSwgb3B0aW9uczoge2VtaXRFdmVudD86IGJvb2xlYW59ID0ge30pIHtcbiAgICBjb25zdCBzZWxlY3RlZERhdGUgPSB0aGlzLnRvVmFsaWREYXRlKGRhdGUsIG51bGwpO1xuICAgIGlmICghdGhpcy5fc3RhdGUuZGlzYWJsZWQpIHtcbiAgICAgIGlmIChpc0NoYW5nZWREYXRlKHRoaXMuX3N0YXRlLnNlbGVjdGVkRGF0ZSwgc2VsZWN0ZWREYXRlKSkge1xuICAgICAgICB0aGlzLl9uZXh0U3RhdGUoe3NlbGVjdGVkRGF0ZX0pO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5lbWl0RXZlbnQgJiYgaXNEYXRlU2VsZWN0YWJsZShzZWxlY3RlZERhdGUsIHRoaXMuX3N0YXRlKSkge1xuICAgICAgICB0aGlzLl9zZWxlY3QkLm5leHQoc2VsZWN0ZWREYXRlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB0b1ZhbGlkRGF0ZShkYXRlOiBOZ2JEYXRlU3RydWN0LCBkZWZhdWx0VmFsdWU/OiBOZ2JEYXRlKTogTmdiRGF0ZSB7XG4gICAgY29uc3QgbmdiRGF0ZSA9IE5nYkRhdGUuZnJvbShkYXRlKTtcbiAgICBpZiAoZGVmYXVsdFZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlZmF1bHRWYWx1ZSA9IHRoaXMuX2NhbGVuZGFyLmdldFRvZGF5KCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jYWxlbmRhci5pc1ZhbGlkKG5nYkRhdGUpID8gbmdiRGF0ZSA6IGRlZmF1bHRWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX25leHRTdGF0ZShwYXRjaDogUGFydGlhbDxEYXRlcGlja2VyVmlld01vZGVsPikge1xuICAgIGNvbnN0IG5ld1N0YXRlID0gdGhpcy5fdXBkYXRlU3RhdGUocGF0Y2gpO1xuICAgIHRoaXMuX3BhdGNoQ29udGV4dHMobmV3U3RhdGUpO1xuICAgIHRoaXMuX3N0YXRlID0gbmV3U3RhdGU7XG4gICAgdGhpcy5fbW9kZWwkLm5leHQodGhpcy5fc3RhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcGF0Y2hDb250ZXh0cyhzdGF0ZTogRGF0ZXBpY2tlclZpZXdNb2RlbCkge1xuICAgIGNvbnN0IHttb250aHMsIGRpc3BsYXlNb250aHMsIHNlbGVjdGVkRGF0ZSwgZm9jdXNEYXRlLCBmb2N1c1Zpc2libGUsIGRpc2FibGVkLCBvdXRzaWRlRGF5c30gPSBzdGF0ZTtcbiAgICBzdGF0ZS5tb250aHMuZm9yRWFjaChtb250aCA9PiB7XG4gICAgICBtb250aC53ZWVrcy5mb3JFYWNoKHdlZWsgPT4ge1xuICAgICAgICB3ZWVrLmRheXMuZm9yRWFjaChkYXkgPT4ge1xuXG4gICAgICAgICAgLy8gcGF0Y2ggZm9jdXMgZmxhZ1xuICAgICAgICAgIGlmIChmb2N1c0RhdGUpIHtcbiAgICAgICAgICAgIGRheS5jb250ZXh0LmZvY3VzZWQgPSBmb2N1c0RhdGUuZXF1YWxzKGRheS5kYXRlKSAmJiBmb2N1c1Zpc2libGU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gY2FsY3VsYXRpbmcgdGFiaW5kZXhcbiAgICAgICAgICBkYXkudGFiaW5kZXggPSAhZGlzYWJsZWQgJiYgZGF5LmRhdGUuZXF1YWxzKGZvY3VzRGF0ZSkgJiYgZm9jdXNEYXRlLm1vbnRoID09PSBtb250aC5udW1iZXIgPyAwIDogLTE7XG5cbiAgICAgICAgICAvLyBvdmVycmlkZSBjb250ZXh0IGRpc2FibGVkXG4gICAgICAgICAgaWYgKGRpc2FibGVkID09PSB0cnVlKSB7XG4gICAgICAgICAgICBkYXkuY29udGV4dC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gcGF0Y2ggc2VsZWN0aW9uIGZsYWdcbiAgICAgICAgICBpZiAoc2VsZWN0ZWREYXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGRheS5jb250ZXh0LnNlbGVjdGVkID0gc2VsZWN0ZWREYXRlICE9PSBudWxsICYmIHNlbGVjdGVkRGF0ZS5lcXVhbHMoZGF5LmRhdGUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIHZpc2liaWxpdHlcbiAgICAgICAgICBpZiAobW9udGgubnVtYmVyICE9PSBkYXkuZGF0ZS5tb250aCkge1xuICAgICAgICAgICAgZGF5LmhpZGRlbiA9IG91dHNpZGVEYXlzID09PSAnaGlkZGVuJyB8fCBvdXRzaWRlRGF5cyA9PT0gJ2NvbGxhcHNlZCcgfHxcbiAgICAgICAgICAgICAgICAoZGlzcGxheU1vbnRocyA+IDEgJiYgZGF5LmRhdGUuYWZ0ZXIobW9udGhzWzBdLmZpcnN0RGF0ZSkgJiZcbiAgICAgICAgICAgICAgICAgZGF5LmRhdGUuYmVmb3JlKG1vbnRoc1tkaXNwbGF5TW9udGhzIC0gMV0ubGFzdERhdGUpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVTdGF0ZShwYXRjaDogUGFydGlhbDxEYXRlcGlja2VyVmlld01vZGVsPik6IERhdGVwaWNrZXJWaWV3TW9kZWwge1xuICAgIC8vIHBhdGNoaW5nIGZpZWxkc1xuICAgIGNvbnN0IHN0YXRlID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fc3RhdGUsIHBhdGNoKTtcblxuICAgIGxldCBzdGFydERhdGUgPSBzdGF0ZS5maXJzdERhdGU7XG5cbiAgICAvLyBtaW4vbWF4IGRhdGVzIGNoYW5nZWRcbiAgICBpZiAoJ21pbkRhdGUnIGluIHBhdGNoIHx8ICdtYXhEYXRlJyBpbiBwYXRjaCkge1xuICAgICAgY2hlY2tNaW5CZWZvcmVNYXgoc3RhdGUubWluRGF0ZSwgc3RhdGUubWF4RGF0ZSk7XG4gICAgICBzdGF0ZS5mb2N1c0RhdGUgPSBjaGVja0RhdGVJblJhbmdlKHN0YXRlLmZvY3VzRGF0ZSwgc3RhdGUubWluRGF0ZSwgc3RhdGUubWF4RGF0ZSk7XG4gICAgICBzdGF0ZS5maXJzdERhdGUgPSBjaGVja0RhdGVJblJhbmdlKHN0YXRlLmZpcnN0RGF0ZSwgc3RhdGUubWluRGF0ZSwgc3RhdGUubWF4RGF0ZSk7XG4gICAgICBzdGFydERhdGUgPSBzdGF0ZS5mb2N1c0RhdGU7XG4gICAgfVxuXG4gICAgLy8gZGlzYWJsZWRcbiAgICBpZiAoJ2Rpc2FibGVkJyBpbiBwYXRjaCkge1xuICAgICAgc3RhdGUuZm9jdXNWaXNpYmxlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gaW5pdGlhbCByZWJ1aWxkIHZpYSAnc2VsZWN0KCknXG4gICAgaWYgKCdzZWxlY3RlZERhdGUnIGluIHBhdGNoICYmIHRoaXMuX3N0YXRlLm1vbnRocy5sZW5ndGggPT09IDApIHtcbiAgICAgIHN0YXJ0RGF0ZSA9IHN0YXRlLnNlbGVjdGVkRGF0ZTtcbiAgICB9XG5cbiAgICAvLyB0ZXJtaW5hdGUgZWFybHkgaWYgb25seSBmb2N1cyB2aXNpYmlsaXR5IHdhcyBjaGFuZ2VkXG4gICAgaWYgKCdmb2N1c1Zpc2libGUnIGluIHBhdGNoKSB7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgLy8gZm9jdXMgZGF0ZSBjaGFuZ2VkXG4gICAgaWYgKCdmb2N1c0RhdGUnIGluIHBhdGNoKSB7XG4gICAgICBzdGF0ZS5mb2N1c0RhdGUgPSBjaGVja0RhdGVJblJhbmdlKHN0YXRlLmZvY3VzRGF0ZSwgc3RhdGUubWluRGF0ZSwgc3RhdGUubWF4RGF0ZSk7XG4gICAgICBzdGFydERhdGUgPSBzdGF0ZS5mb2N1c0RhdGU7XG5cbiAgICAgIC8vIG5vdGhpbmcgdG8gcmVidWlsZCBpZiBvbmx5IGZvY3VzIGNoYW5nZWQgYW5kIGl0IGlzIHN0aWxsIHZpc2libGVcbiAgICAgIGlmIChzdGF0ZS5tb250aHMubGVuZ3RoICE9PSAwICYmICFzdGF0ZS5mb2N1c0RhdGUuYmVmb3JlKHN0YXRlLmZpcnN0RGF0ZSkgJiZcbiAgICAgICAgICAhc3RhdGUuZm9jdXNEYXRlLmFmdGVyKHN0YXRlLmxhc3REYXRlKSkge1xuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZmlyc3QgZGF0ZSBjaGFuZ2VkXG4gICAgaWYgKCdmaXJzdERhdGUnIGluIHBhdGNoKSB7XG4gICAgICBzdGF0ZS5maXJzdERhdGUgPSBjaGVja0RhdGVJblJhbmdlKHN0YXRlLmZpcnN0RGF0ZSwgc3RhdGUubWluRGF0ZSwgc3RhdGUubWF4RGF0ZSk7XG4gICAgICBzdGFydERhdGUgPSBzdGF0ZS5maXJzdERhdGU7XG4gICAgfVxuXG4gICAgLy8gcmVidWlsZGluZyBtb250aHNcbiAgICBpZiAoc3RhcnREYXRlKSB7XG4gICAgICBjb25zdCBmb3JjZVJlYnVpbGQgPSAnZGF5VGVtcGxhdGVEYXRhJyBpbiBwYXRjaCB8fCAnZmlyc3REYXlPZldlZWsnIGluIHBhdGNoIHx8ICdtYXJrRGlzYWJsZWQnIGluIHBhdGNoIHx8XG4gICAgICAgICAgJ21pbkRhdGUnIGluIHBhdGNoIHx8ICdtYXhEYXRlJyBpbiBwYXRjaCB8fCAnZGlzYWJsZWQnIGluIHBhdGNoIHx8ICdvdXRzaWRlRGF5cycgaW4gcGF0Y2g7XG5cbiAgICAgIGNvbnN0IG1vbnRocyA9IGJ1aWxkTW9udGhzKHRoaXMuX2NhbGVuZGFyLCBzdGFydERhdGUsIHN0YXRlLCB0aGlzLl9pMThuLCBmb3JjZVJlYnVpbGQpO1xuXG4gICAgICAvLyB1cGRhdGluZyBtb250aHMgYW5kIGJvdW5kYXJ5IGRhdGVzXG4gICAgICBzdGF0ZS5tb250aHMgPSBtb250aHM7XG4gICAgICBzdGF0ZS5maXJzdERhdGUgPSBtb250aHMubGVuZ3RoID4gMCA/IG1vbnRoc1swXS5maXJzdERhdGUgOiB1bmRlZmluZWQ7XG4gICAgICBzdGF0ZS5sYXN0RGF0ZSA9IG1vbnRocy5sZW5ndGggPiAwID8gbW9udGhzW21vbnRocy5sZW5ndGggLSAxXS5sYXN0RGF0ZSA6IHVuZGVmaW5lZDtcblxuICAgICAgLy8gcmVzZXQgc2VsZWN0ZWQgZGF0ZSBpZiAnbWFya0Rpc2FibGVkJyByZXR1cm5zIHRydWVcbiAgICAgIGlmICgnc2VsZWN0ZWREYXRlJyBpbiBwYXRjaCAmJiAhaXNEYXRlU2VsZWN0YWJsZShzdGF0ZS5zZWxlY3RlZERhdGUsIHN0YXRlKSkge1xuICAgICAgICBzdGF0ZS5zZWxlY3RlZERhdGUgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBhZGp1c3RpbmcgZm9jdXMgYWZ0ZXIgbW9udGhzIHdlcmUgYnVpbHRcbiAgICAgIGlmICgnZmlyc3REYXRlJyBpbiBwYXRjaCkge1xuICAgICAgICBpZiAoc3RhdGUuZm9jdXNEYXRlID09PSB1bmRlZmluZWQgfHwgc3RhdGUuZm9jdXNEYXRlLmJlZm9yZShzdGF0ZS5maXJzdERhdGUpIHx8XG4gICAgICAgICAgICBzdGF0ZS5mb2N1c0RhdGUuYWZ0ZXIoc3RhdGUubGFzdERhdGUpKSB7XG4gICAgICAgICAgc3RhdGUuZm9jdXNEYXRlID0gc3RhcnREYXRlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGFkanVzdGluZyBtb250aHMveWVhcnMgZm9yIHRoZSBzZWxlY3QgYm94IG5hdmlnYXRpb25cbiAgICAgIGNvbnN0IHllYXJDaGFuZ2VkID0gIXRoaXMuX3N0YXRlLmZpcnN0RGF0ZSB8fCB0aGlzLl9zdGF0ZS5maXJzdERhdGUueWVhciAhPT0gc3RhdGUuZmlyc3REYXRlLnllYXI7XG4gICAgICBjb25zdCBtb250aENoYW5nZWQgPSAhdGhpcy5fc3RhdGUuZmlyc3REYXRlIHx8IHRoaXMuX3N0YXRlLmZpcnN0RGF0ZS5tb250aCAhPT0gc3RhdGUuZmlyc3REYXRlLm1vbnRoO1xuICAgICAgaWYgKHN0YXRlLm5hdmlnYXRpb24gPT09ICdzZWxlY3QnKSB7XG4gICAgICAgIC8vIHllYXJzIC0+ICBib3VuZGFyaWVzIChtaW4vbWF4IHdlcmUgY2hhbmdlZClcbiAgICAgICAgaWYgKCdtaW5EYXRlJyBpbiBwYXRjaCB8fCAnbWF4RGF0ZScgaW4gcGF0Y2ggfHwgc3RhdGUuc2VsZWN0Qm94ZXMueWVhcnMubGVuZ3RoID09PSAwIHx8IHllYXJDaGFuZ2VkKSB7XG4gICAgICAgICAgc3RhdGUuc2VsZWN0Qm94ZXMueWVhcnMgPSBnZW5lcmF0ZVNlbGVjdEJveFllYXJzKHN0YXRlLmZpcnN0RGF0ZSwgc3RhdGUubWluRGF0ZSwgc3RhdGUubWF4RGF0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBtb250aHMgLT4gd2hlbiBjdXJyZW50IHllYXIgb3IgYm91bmRhcmllcyBjaGFuZ2VcbiAgICAgICAgaWYgKCdtaW5EYXRlJyBpbiBwYXRjaCB8fCAnbWF4RGF0ZScgaW4gcGF0Y2ggfHwgc3RhdGUuc2VsZWN0Qm94ZXMubW9udGhzLmxlbmd0aCA9PT0gMCB8fCB5ZWFyQ2hhbmdlZCkge1xuICAgICAgICAgIHN0YXRlLnNlbGVjdEJveGVzLm1vbnRocyA9XG4gICAgICAgICAgICAgIGdlbmVyYXRlU2VsZWN0Qm94TW9udGhzKHRoaXMuX2NhbGVuZGFyLCBzdGF0ZS5maXJzdERhdGUsIHN0YXRlLm1pbkRhdGUsIHN0YXRlLm1heERhdGUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5zZWxlY3RCb3hlcyA9IHt5ZWFyczogW10sIG1vbnRoczogW119O1xuICAgICAgfVxuXG4gICAgICAvLyB1cGRhdGluZyBuYXZpZ2F0aW9uIGFycm93cyAtPiBib3VuZGFyaWVzIGNoYW5nZSAobWluL21heCkgb3IgbW9udGgveWVhciBjaGFuZ2VzXG4gICAgICBpZiAoKHN0YXRlLm5hdmlnYXRpb24gPT09ICdhcnJvd3MnIHx8IHN0YXRlLm5hdmlnYXRpb24gPT09ICdzZWxlY3QnKSAmJlxuICAgICAgICAgIChtb250aENoYW5nZWQgfHwgeWVhckNoYW5nZWQgfHwgJ21pbkRhdGUnIGluIHBhdGNoIHx8ICdtYXhEYXRlJyBpbiBwYXRjaCB8fCAnZGlzYWJsZWQnIGluIHBhdGNoKSkge1xuICAgICAgICBzdGF0ZS5wcmV2RGlzYWJsZWQgPSBzdGF0ZS5kaXNhYmxlZCB8fCBwcmV2TW9udGhEaXNhYmxlZCh0aGlzLl9jYWxlbmRhciwgc3RhdGUuZmlyc3REYXRlLCBzdGF0ZS5taW5EYXRlKTtcbiAgICAgICAgc3RhdGUubmV4dERpc2FibGVkID0gc3RhdGUuZGlzYWJsZWQgfHwgbmV4dE1vbnRoRGlzYWJsZWQodGhpcy5fY2FsZW5kYXIsIHN0YXRlLmxhc3REYXRlLCBzdGF0ZS5tYXhEYXRlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/datepicker/datepicker-tools.js b/dist/sunbird-ui-components/esm2015/datepicker/datepicker-tools.js new file mode 100644 index 0000000..119eb73 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/datepicker/datepicker-tools.js @@ -0,0 +1,301 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgbDate } from './ngb-date'; +import { isDefined } from '../util/util'; +/** + * @param {?} prev + * @param {?} next + * @return {?} + */ +export function isChangedDate(prev, next) { + return !dateComparator(prev, next); +} +/** + * @param {?} prev + * @param {?} next + * @return {?} + */ +export function isChangedMonth(prev, next) { + return !prev && !next ? false : !prev || !next ? true : prev.year !== next.year || prev.month !== next.month; +} +/** + * @param {?} prev + * @param {?} next + * @return {?} + */ +export function dateComparator(prev, next) { + return (!prev && !next) || (!!prev && !!next && prev.equals(next)); +} +/** + * @param {?} minDate + * @param {?} maxDate + * @return {?} + */ +export function checkMinBeforeMax(minDate, maxDate) { + if (maxDate && minDate && maxDate.before(minDate)) { + throw new Error(`'maxDate' ${maxDate} should be greater than 'minDate' ${minDate}`); + } +} +/** + * @param {?} date + * @param {?} minDate + * @param {?} maxDate + * @return {?} + */ +export function checkDateInRange(date, minDate, maxDate) { + if (date && minDate && date.before(minDate)) { + return minDate; + } + if (date && maxDate && date.after(maxDate)) { + return maxDate; + } + return date; +} +/** + * @param {?} date + * @param {?} state + * @return {?} + */ +export function isDateSelectable(date, state) { + const { minDate, maxDate, disabled, markDisabled } = state; + // clang-format off + return !(!isDefined(date) || + disabled || + (markDisabled && markDisabled(date, { year: date.year, month: date.month })) || + (minDate && date.before(minDate)) || + (maxDate && date.after(maxDate))); + // clang-format on +} +/** + * @param {?} calendar + * @param {?} date + * @param {?} minDate + * @param {?} maxDate + * @return {?} + */ +export function generateSelectBoxMonths(calendar, date, minDate, maxDate) { + if (!date) { + return []; + } + /** @type {?} */ + let months = calendar.getMonths(date.year); + if (minDate && date.year === minDate.year) { + /** @type {?} */ + const index = months.findIndex((/** + * @param {?} month + * @return {?} + */ + month => month === minDate.month)); + months = months.slice(index); + } + if (maxDate && date.year === maxDate.year) { + /** @type {?} */ + const index = months.findIndex((/** + * @param {?} month + * @return {?} + */ + month => month === maxDate.month)); + months = months.slice(0, index + 1); + } + return months; +} +/** + * @param {?} date + * @param {?} minDate + * @param {?} maxDate + * @return {?} + */ +export function generateSelectBoxYears(date, minDate, maxDate) { + if (!date) { + return []; + } + /** @type {?} */ + const start = minDate && minDate.year || date.year - 10; + /** @type {?} */ + const end = maxDate && maxDate.year || date.year + 10; + return Array.from({ length: end - start + 1 }, (/** + * @param {?} e + * @param {?} i + * @return {?} + */ + (e, i) => start + i)); +} +/** + * @param {?} calendar + * @param {?} date + * @param {?} maxDate + * @return {?} + */ +export function nextMonthDisabled(calendar, date, maxDate) { + return maxDate && calendar.getNext(date, 'm').after(maxDate); +} +/** + * @param {?} calendar + * @param {?} date + * @param {?} minDate + * @return {?} + */ +export function prevMonthDisabled(calendar, date, minDate) { + /** @type {?} */ + const prevDate = calendar.getPrev(date, 'm'); + return minDate && (prevDate.year === minDate.year && prevDate.month < minDate.month || + prevDate.year < minDate.year && minDate.month === 1); +} +/** + * @param {?} calendar + * @param {?} date + * @param {?} state + * @param {?} i18n + * @param {?} force + * @return {?} + */ +export function buildMonths(calendar, date, state, i18n, force) { + const { displayMonths, months } = state; + // move old months to a temporary array + /** @type {?} */ + const monthsToReuse = months.splice(0, months.length); + // generate new first dates, nullify or reuse months + /** @type {?} */ + const firstDates = Array.from({ length: displayMonths }, (/** + * @param {?} _ + * @param {?} i + * @return {?} + */ + (_, i) => { + /** @type {?} */ + const firstDate = calendar.getNext(date, 'm', i); + months[i] = null; + if (!force) { + /** @type {?} */ + const reusedIndex = monthsToReuse.findIndex((/** + * @param {?} month + * @return {?} + */ + month => month.firstDate.equals(firstDate))); + // move reused month back to months + if (reusedIndex !== -1) { + months[i] = monthsToReuse.splice(reusedIndex, 1)[0]; + } + } + return firstDate; + })); + // rebuild nullified months + firstDates.forEach((/** + * @param {?} firstDate + * @param {?} i + * @return {?} + */ + (firstDate, i) => { + if (months[i] === null) { + months[i] = buildMonth(calendar, firstDate, state, i18n, monthsToReuse.shift() || (/** @type {?} */ ({}))); + } + })); + return months; +} +/** + * @param {?} calendar + * @param {?} date + * @param {?} state + * @param {?} i18n + * @param {?=} month + * @return {?} + */ +export function buildMonth(calendar, date, state, i18n, month = (/** @type {?} */ ({}))) { + const { dayTemplateData, minDate, maxDate, firstDayOfWeek, markDisabled, outsideDays } = state; + /** @type {?} */ + const calendarToday = calendar.getToday(); + month.firstDate = null; + month.lastDate = null; + month.number = date.month; + month.year = date.year; + month.weeks = month.weeks || []; + month.weekdays = month.weekdays || []; + date = getFirstViewDate(calendar, date, firstDayOfWeek); + // month has weeks + for (let week = 0; week < calendar.getWeeksPerMonth(); week++) { + /** @type {?} */ + let weekObject = month.weeks[week]; + if (!weekObject) { + weekObject = month.weeks[week] = { number: 0, days: [], collapsed: true }; + } + /** @type {?} */ + const days = weekObject.days; + // week has days + for (let day = 0; day < calendar.getDaysPerWeek(); day++) { + if (week === 0) { + month.weekdays[day] = calendar.getWeekday(date); + } + /** @type {?} */ + const newDate = new NgbDate(date.year, date.month, date.day); + /** @type {?} */ + const nextDate = calendar.getNext(newDate); + /** @type {?} */ + const ariaLabel = i18n.getDayAriaLabel(newDate); + // marking date as disabled + /** @type {?} */ + let disabled = !!((minDate && newDate.before(minDate)) || (maxDate && newDate.after(maxDate))); + if (!disabled && markDisabled) { + disabled = markDisabled(newDate, { month: month.number, year: month.year }); + } + // today + /** @type {?} */ + let today = newDate.equals(calendarToday); + // adding user-provided data to the context + /** @type {?} */ + let contextUserData = dayTemplateData ? dayTemplateData(newDate, { month: month.number, year: month.year }) : undefined; + // saving first date of the month + if (month.firstDate === null && newDate.month === month.number) { + month.firstDate = newDate; + } + // saving last date of the month + if (newDate.month === month.number && nextDate.month !== month.number) { + month.lastDate = newDate; + } + /** @type {?} */ + let dayObject = days[day]; + if (!dayObject) { + dayObject = days[day] = (/** @type {?} */ ({})); + } + dayObject.date = newDate; + dayObject.context = Object.assign(dayObject.context || {}, { + $implicit: newDate, + date: newDate, + data: contextUserData, + currentMonth: month.number, disabled, + focused: false, + selected: false, today + }); + dayObject.tabindex = -1; + dayObject.ariaLabel = ariaLabel; + dayObject.hidden = false; + date = nextDate; + } + weekObject.number = calendar.getWeekNumber(days.map((/** + * @param {?} day + * @return {?} + */ + day => day.date)), firstDayOfWeek); + // marking week as collapsed + weekObject.collapsed = outsideDays === 'collapsed' && days[0].date.month !== month.number && + days[days.length - 1].date.month !== month.number; + } + return month; +} +/** + * @param {?} calendar + * @param {?} date + * @param {?} firstDayOfWeek + * @return {?} + */ +export function getFirstViewDate(calendar, date, firstDayOfWeek) { + /** @type {?} */ + const daysPerWeek = calendar.getDaysPerWeek(); + /** @type {?} */ + const firstMonthDate = new NgbDate(date.year, date.month, 1); + /** @type {?} */ + const dayOfWeek = calendar.getWeekday(firstMonthDate) % daysPerWeek; + return calendar.getPrev(firstMonthDate, 'd', (daysPerWeek + dayOfWeek - firstDayOfWeek) % daysPerWeek); +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci10b29scy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImRhdGVwaWNrZXIvZGF0ZXBpY2tlci10b29scy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFlBQVksQ0FBQztBQUduQyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sY0FBYyxDQUFDOzs7Ozs7QUFHdkMsTUFBTSxVQUFVLGFBQWEsQ0FBQyxJQUFhLEVBQUUsSUFBYTtJQUN4RCxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNyQyxDQUFDOzs7Ozs7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUFDLElBQWEsRUFBRSxJQUFhO0lBQ3pELE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMvRyxDQUFDOzs7Ozs7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUFDLElBQWEsRUFBRSxJQUFhO0lBQ3pELE9BQU8sQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNyRSxDQUFDOzs7Ozs7QUFFRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsT0FBZ0IsRUFBRSxPQUFnQjtJQUNsRSxJQUFJLE9BQU8sSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUNqRCxNQUFNLElBQUksS0FBSyxDQUFDLGFBQWEsT0FBTyxxQ0FBcUMsT0FBTyxFQUFFLENBQUMsQ0FBQztLQUNyRjtBQUNILENBQUM7Ozs7Ozs7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsSUFBYSxFQUFFLE9BQWdCLEVBQUUsT0FBZ0I7SUFDaEYsSUFBSSxJQUFJLElBQUksT0FBTyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDM0MsT0FBTyxPQUFPLENBQUM7S0FDaEI7SUFDRCxJQUFJLElBQUksSUFBSSxPQUFPLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUMxQyxPQUFPLE9BQU8sQ0FBQztLQUNoQjtJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQzs7Ozs7O0FBRUQsTUFBTSxVQUFVLGdCQUFnQixDQUFDLElBQWEsRUFBRSxLQUEwQjtVQUNsRSxFQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBQyxHQUFHLEtBQUs7SUFDeEQsbUJBQW1CO0lBQ25CLE9BQU8sQ0FBQyxDQUNOLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztRQUNoQixRQUFRO1FBQ1IsQ0FBQyxZQUFZLElBQUksWUFBWSxDQUFDLElBQUksRUFBRSxFQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQztRQUMxRSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pDLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FDakMsQ0FBQztJQUNGLGtCQUFrQjtBQUNwQixDQUFDOzs7Ozs7OztBQUVELE1BQU0sVUFBVSx1QkFBdUIsQ0FBQyxRQUFxQixFQUFFLElBQWEsRUFBRSxPQUFnQixFQUFFLE9BQWdCO0lBQzlHLElBQUksQ0FBQyxJQUFJLEVBQUU7UUFDVCxPQUFPLEVBQUUsQ0FBQztLQUNYOztRQUVHLE1BQU0sR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7SUFFMUMsSUFBSSxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsSUFBSSxFQUFFOztjQUNuQyxLQUFLLEdBQUcsTUFBTSxDQUFDLFNBQVM7Ozs7UUFBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssS0FBSyxPQUFPLENBQUMsS0FBSyxFQUFDO1FBQ2hFLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQzlCO0lBRUQsSUFBSSxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsSUFBSSxFQUFFOztjQUNuQyxLQUFLLEdBQUcsTUFBTSxDQUFDLFNBQVM7Ozs7UUFBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssS0FBSyxPQUFPLENBQUMsS0FBSyxFQUFDO1FBQ2hFLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDckM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDOzs7Ozs7O0FBRUQsTUFBTSxVQUFVLHNCQUFzQixDQUFDLElBQWEsRUFBRSxPQUFnQixFQUFFLE9BQWdCO0lBQ3RGLElBQUksQ0FBQyxJQUFJLEVBQUU7UUFDVCxPQUFPLEVBQUUsQ0FBQztLQUNYOztVQUVLLEtBQUssR0FBRyxPQUFPLElBQUksT0FBTyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUU7O1VBQ2pELEdBQUcsR0FBRyxPQUFPLElBQUksT0FBTyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUU7SUFFckQsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRyxLQUFLLEdBQUcsQ0FBQyxFQUFDOzs7OztJQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBQyxDQUFDO0FBQ3BFLENBQUM7Ozs7Ozs7QUFFRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsUUFBcUIsRUFBRSxJQUFhLEVBQUUsT0FBZ0I7SUFDdEYsT0FBTyxPQUFPLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQy9ELENBQUM7Ozs7Ozs7QUFFRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsUUFBcUIsRUFBRSxJQUFhLEVBQUUsT0FBZ0I7O1VBQ2hGLFFBQVEsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUM7SUFDNUMsT0FBTyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSztRQUNoRSxRQUFRLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQztBQUMxRSxDQUFDOzs7Ozs7Ozs7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUN2QixRQUFxQixFQUFFLElBQWEsRUFBRSxLQUEwQixFQUFFLElBQXVCLEVBQ3pGLEtBQWM7VUFDVixFQUFDLGFBQWEsRUFBRSxNQUFNLEVBQUMsR0FBRyxLQUFLOzs7VUFFL0IsYUFBYSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUM7OztVQUcvQyxVQUFVLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUM7Ozs7O0lBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7O2NBQ3hELFNBQVMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7UUFFakIsSUFBSSxDQUFDLEtBQUssRUFBRTs7a0JBQ0osV0FBVyxHQUFHLGFBQWEsQ0FBQyxTQUFTOzs7O1lBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBQztZQUN2RixtQ0FBbUM7WUFDbkMsSUFBSSxXQUFXLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNyRDtTQUNGO1FBRUQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQyxFQUFDO0lBRUYsMkJBQTJCO0lBQzNCLFVBQVUsQ0FBQyxPQUFPOzs7OztJQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ2xDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRTtZQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxhQUFhLENBQUMsS0FBSyxFQUFFLElBQUksbUJBQUEsRUFBRSxFQUFrQixDQUFDLENBQUM7U0FDekc7SUFDSCxDQUFDLEVBQUMsQ0FBQztJQUVILE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7Ozs7Ozs7OztBQUVELE1BQU0sVUFBVSxVQUFVLENBQ3RCLFFBQXFCLEVBQUUsSUFBYSxFQUFFLEtBQTBCLEVBQUUsSUFBdUIsRUFDekYsUUFBd0IsbUJBQUEsRUFBRSxFQUFrQjtVQUN4QyxFQUFDLGVBQWUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFDLEdBQUcsS0FBSzs7VUFDdEYsYUFBYSxHQUFHLFFBQVEsQ0FBQyxRQUFRLEVBQUU7SUFFekMsS0FBSyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFDdkIsS0FBSyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7SUFDdEIsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQzFCLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztJQUN2QixLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO0lBQ2hDLEtBQUssQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7SUFFdEMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFFeEQsa0JBQWtCO0lBQ2xCLEtBQUssSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRTs7WUFDekQsVUFBVSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDZixVQUFVLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFDLENBQUM7U0FDekU7O2NBQ0ssSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJO1FBRTVCLGdCQUFnQjtRQUNoQixLQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsUUFBUSxDQUFDLGNBQWMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ3hELElBQUksSUFBSSxLQUFLLENBQUMsRUFBRTtnQkFDZCxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDakQ7O2tCQUVLLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQzs7a0JBQ3RELFFBQVEsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQzs7a0JBRXBDLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQzs7O2dCQUczQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUM5RixJQUFJLENBQUMsUUFBUSxJQUFJLFlBQVksRUFBRTtnQkFDN0IsUUFBUSxHQUFHLFlBQVksQ0FBQyxPQUFPLEVBQUUsRUFBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBQyxDQUFDLENBQUM7YUFDM0U7OztnQkFHRyxLQUFLLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUM7OztnQkFHckMsZUFBZSxHQUNmLGVBQWUsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxFQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztZQUVuRyxpQ0FBaUM7WUFDakMsSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLElBQUksSUFBSSxPQUFPLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxNQUFNLEVBQUU7Z0JBQzlELEtBQUssQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDO2FBQzNCO1lBRUQsZ0NBQWdDO1lBQ2hDLElBQUksT0FBTyxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsTUFBTSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLE1BQU0sRUFBRTtnQkFDckUsS0FBSyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7YUFDMUI7O2dCQUVHLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ2QsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxtQkFBQSxFQUFFLEVBQWdCLENBQUM7YUFDNUM7WUFDRCxTQUFTLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztZQUN6QixTQUFTLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQUU7Z0JBQ3pELFNBQVMsRUFBRSxPQUFPO2dCQUNsQixJQUFJLEVBQUUsT0FBTztnQkFDYixJQUFJLEVBQUUsZUFBZTtnQkFDckIsWUFBWSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsUUFBUTtnQkFDcEMsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFLO2FBQ3ZCLENBQUMsQ0FBQztZQUNILFNBQVMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDeEIsU0FBUyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7WUFDaEMsU0FBUyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFFekIsSUFBSSxHQUFHLFFBQVEsQ0FBQztTQUNqQjtRQUVELFVBQVUsQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRzs7OztRQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksRUFBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBRXRGLDRCQUE0QjtRQUM1QixVQUFVLENBQUMsU0FBUyxHQUFHLFdBQVcsS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLE1BQU07WUFDckYsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsTUFBTSxDQUFDO0tBQ3ZEO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDOzs7Ozs7O0FBRUQsTUFBTSxVQUFVLGdCQUFnQixDQUFDLFFBQXFCLEVBQUUsSUFBYSxFQUFFLGNBQXNCOztVQUNyRixXQUFXLEdBQUcsUUFBUSxDQUFDLGNBQWMsRUFBRTs7VUFDdkMsY0FBYyxHQUFHLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7O1VBQ3RELFNBQVMsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxHQUFHLFdBQVc7SUFDbkUsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxXQUFXLEdBQUcsU0FBUyxHQUFHLGNBQWMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDO0FBQ3pHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge05nYkRhdGV9IGZyb20gJy4vbmdiLWRhdGUnO1xuaW1wb3J0IHtEYXRlcGlja2VyVmlld01vZGVsLCBEYXlWaWV3TW9kZWwsIE1vbnRoVmlld01vZGVsfSBmcm9tICcuL2RhdGVwaWNrZXItdmlldy1tb2RlbCc7XG5pbXBvcnQge05nYkNhbGVuZGFyfSBmcm9tICcuL25nYi1jYWxlbmRhcic7XG5pbXBvcnQge2lzRGVmaW5lZH0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCB7TmdiRGF0ZXBpY2tlckkxOG59IGZyb20gJy4vZGF0ZXBpY2tlci1pMThuJztcblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ2hhbmdlZERhdGUocHJldjogTmdiRGF0ZSwgbmV4dDogTmdiRGF0ZSkge1xuICByZXR1cm4gIWRhdGVDb21wYXJhdG9yKHByZXYsIG5leHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDaGFuZ2VkTW9udGgocHJldjogTmdiRGF0ZSwgbmV4dDogTmdiRGF0ZSkge1xuICByZXR1cm4gIXByZXYgJiYgIW5leHQgPyBmYWxzZSA6ICFwcmV2IHx8ICFuZXh0ID8gdHJ1ZSA6IHByZXYueWVhciAhPT0gbmV4dC55ZWFyIHx8IHByZXYubW9udGggIT09IG5leHQubW9udGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkYXRlQ29tcGFyYXRvcihwcmV2OiBOZ2JEYXRlLCBuZXh0OiBOZ2JEYXRlKSB7XG4gIHJldHVybiAoIXByZXYgJiYgIW5leHQpIHx8ICghIXByZXYgJiYgISFuZXh0ICYmIHByZXYuZXF1YWxzKG5leHQpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrTWluQmVmb3JlTWF4KG1pbkRhdGU6IE5nYkRhdGUsIG1heERhdGU6IE5nYkRhdGUpIHtcbiAgaWYgKG1heERhdGUgJiYgbWluRGF0ZSAmJiBtYXhEYXRlLmJlZm9yZShtaW5EYXRlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJ21heERhdGUnICR7bWF4RGF0ZX0gc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiAnbWluRGF0ZScgJHttaW5EYXRlfWApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0RhdGVJblJhbmdlKGRhdGU6IE5nYkRhdGUsIG1pbkRhdGU6IE5nYkRhdGUsIG1heERhdGU6IE5nYkRhdGUpOiBOZ2JEYXRlIHtcbiAgaWYgKGRhdGUgJiYgbWluRGF0ZSAmJiBkYXRlLmJlZm9yZShtaW5EYXRlKSkge1xuICAgIHJldHVybiBtaW5EYXRlO1xuICB9XG4gIGlmIChkYXRlICYmIG1heERhdGUgJiYgZGF0ZS5hZnRlcihtYXhEYXRlKSkge1xuICAgIHJldHVybiBtYXhEYXRlO1xuICB9XG5cbiAgcmV0dXJuIGRhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGVTZWxlY3RhYmxlKGRhdGU6IE5nYkRhdGUsIHN0YXRlOiBEYXRlcGlja2VyVmlld01vZGVsKSB7XG4gIGNvbnN0IHttaW5EYXRlLCBtYXhEYXRlLCBkaXNhYmxlZCwgbWFya0Rpc2FibGVkfSA9IHN0YXRlO1xuICAvLyBjbGFuZy1mb3JtYXQgb2ZmXG4gIHJldHVybiAhKFxuICAgICFpc0RlZmluZWQoZGF0ZSkgfHxcbiAgICBkaXNhYmxlZCB8fFxuICAgIChtYXJrRGlzYWJsZWQgJiYgbWFya0Rpc2FibGVkKGRhdGUsIHt5ZWFyOiBkYXRlLnllYXIsIG1vbnRoOiBkYXRlLm1vbnRofSkpIHx8XG4gICAgKG1pbkRhdGUgJiYgZGF0ZS5iZWZvcmUobWluRGF0ZSkpIHx8XG4gICAgKG1heERhdGUgJiYgZGF0ZS5hZnRlcihtYXhEYXRlKSlcbiAgKTtcbiAgLy8gY2xhbmctZm9ybWF0IG9uXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVNlbGVjdEJveE1vbnRocyhjYWxlbmRhcjogTmdiQ2FsZW5kYXIsIGRhdGU6IE5nYkRhdGUsIG1pbkRhdGU6IE5nYkRhdGUsIG1heERhdGU6IE5nYkRhdGUpIHtcbiAgaWYgKCFkYXRlKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgbGV0IG1vbnRocyA9IGNhbGVuZGFyLmdldE1vbnRocyhkYXRlLnllYXIpO1xuXG4gIGlmIChtaW5EYXRlICYmIGRhdGUueWVhciA9PT0gbWluRGF0ZS55ZWFyKSB7XG4gICAgY29uc3QgaW5kZXggPSBtb250aHMuZmluZEluZGV4KG1vbnRoID0+IG1vbnRoID09PSBtaW5EYXRlLm1vbnRoKTtcbiAgICBtb250aHMgPSBtb250aHMuc2xpY2UoaW5kZXgpO1xuICB9XG5cbiAgaWYgKG1heERhdGUgJiYgZGF0ZS55ZWFyID09PSBtYXhEYXRlLnllYXIpIHtcbiAgICBjb25zdCBpbmRleCA9IG1vbnRocy5maW5kSW5kZXgobW9udGggPT4gbW9udGggPT09IG1heERhdGUubW9udGgpO1xuICAgIG1vbnRocyA9IG1vbnRocy5zbGljZSgwLCBpbmRleCArIDEpO1xuICB9XG5cbiAgcmV0dXJuIG1vbnRocztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlU2VsZWN0Qm94WWVhcnMoZGF0ZTogTmdiRGF0ZSwgbWluRGF0ZTogTmdiRGF0ZSwgbWF4RGF0ZTogTmdiRGF0ZSkge1xuICBpZiAoIWRhdGUpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCBzdGFydCA9IG1pbkRhdGUgJiYgbWluRGF0ZS55ZWFyIHx8IGRhdGUueWVhciAtIDEwO1xuICBjb25zdCBlbmQgPSBtYXhEYXRlICYmIG1heERhdGUueWVhciB8fCBkYXRlLnllYXIgKyAxMDtcblxuICByZXR1cm4gQXJyYXkuZnJvbSh7bGVuZ3RoOiBlbmQgLSBzdGFydCArIDF9LCAoZSwgaSkgPT4gc3RhcnQgKyBpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5leHRNb250aERpc2FibGVkKGNhbGVuZGFyOiBOZ2JDYWxlbmRhciwgZGF0ZTogTmdiRGF0ZSwgbWF4RGF0ZTogTmdiRGF0ZSkge1xuICByZXR1cm4gbWF4RGF0ZSAmJiBjYWxlbmRhci5nZXROZXh0KGRhdGUsICdtJykuYWZ0ZXIobWF4RGF0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmV2TW9udGhEaXNhYmxlZChjYWxlbmRhcjogTmdiQ2FsZW5kYXIsIGRhdGU6IE5nYkRhdGUsIG1pbkRhdGU6IE5nYkRhdGUpIHtcbiAgY29uc3QgcHJldkRhdGUgPSBjYWxlbmRhci5nZXRQcmV2KGRhdGUsICdtJyk7XG4gIHJldHVybiBtaW5EYXRlICYmIChwcmV2RGF0ZS55ZWFyID09PSBtaW5EYXRlLnllYXIgJiYgcHJldkRhdGUubW9udGggPCBtaW5EYXRlLm1vbnRoIHx8XG4gICAgICAgICAgICAgICAgICAgICBwcmV2RGF0ZS55ZWFyIDwgbWluRGF0ZS55ZWFyICYmIG1pbkRhdGUubW9udGggPT09IDEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRNb250aHMoXG4gICAgY2FsZW5kYXI6IE5nYkNhbGVuZGFyLCBkYXRlOiBOZ2JEYXRlLCBzdGF0ZTogRGF0ZXBpY2tlclZpZXdNb2RlbCwgaTE4bjogTmdiRGF0ZXBpY2tlckkxOG4sXG4gICAgZm9yY2U6IGJvb2xlYW4pOiBNb250aFZpZXdNb2RlbFtdIHtcbiAgY29uc3Qge2Rpc3BsYXlNb250aHMsIG1vbnRoc30gPSBzdGF0ZTtcbiAgLy8gbW92ZSBvbGQgbW9udGhzIHRvIGEgdGVtcG9yYXJ5IGFycmF5XG4gIGNvbnN0IG1vbnRoc1RvUmV1c2UgPSBtb250aHMuc3BsaWNlKDAsIG1vbnRocy5sZW5ndGgpO1xuXG4gIC8vIGdlbmVyYXRlIG5ldyBmaXJzdCBkYXRlcywgbnVsbGlmeSBvciByZXVzZSBtb250aHNcbiAgY29uc3QgZmlyc3REYXRlcyA9IEFycmF5LmZyb20oe2xlbmd0aDogZGlzcGxheU1vbnRoc30sIChfLCBpKSA9PiB7XG4gICAgY29uc3QgZmlyc3REYXRlID0gY2FsZW5kYXIuZ2V0TmV4dChkYXRlLCAnbScsIGkpO1xuICAgIG1vbnRoc1tpXSA9IG51bGw7XG5cbiAgICBpZiAoIWZvcmNlKSB7XG4gICAgICBjb25zdCByZXVzZWRJbmRleCA9IG1vbnRoc1RvUmV1c2UuZmluZEluZGV4KG1vbnRoID0+IG1vbnRoLmZpcnN0RGF0ZS5lcXVhbHMoZmlyc3REYXRlKSk7XG4gICAgICAvLyBtb3ZlIHJldXNlZCBtb250aCBiYWNrIHRvIG1vbnRoc1xuICAgICAgaWYgKHJldXNlZEluZGV4ICE9PSAtMSkge1xuICAgICAgICBtb250aHNbaV0gPSBtb250aHNUb1JldXNlLnNwbGljZShyZXVzZWRJbmRleCwgMSlbMF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpcnN0RGF0ZTtcbiAgfSk7XG5cbiAgLy8gcmVidWlsZCBudWxsaWZpZWQgbW9udGhzXG4gIGZpcnN0RGF0ZXMuZm9yRWFjaCgoZmlyc3REYXRlLCBpKSA9PiB7XG4gICAgaWYgKG1vbnRoc1tpXSA9PT0gbnVsbCkge1xuICAgICAgbW9udGhzW2ldID0gYnVpbGRNb250aChjYWxlbmRhciwgZmlyc3REYXRlLCBzdGF0ZSwgaTE4biwgbW9udGhzVG9SZXVzZS5zaGlmdCgpIHx8IHt9IGFzIE1vbnRoVmlld01vZGVsKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBtb250aHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZE1vbnRoKFxuICAgIGNhbGVuZGFyOiBOZ2JDYWxlbmRhciwgZGF0ZTogTmdiRGF0ZSwgc3RhdGU6IERhdGVwaWNrZXJWaWV3TW9kZWwsIGkxOG46IE5nYkRhdGVwaWNrZXJJMThuLFxuICAgIG1vbnRoOiBNb250aFZpZXdNb2RlbCA9IHt9IGFzIE1vbnRoVmlld01vZGVsKTogTW9udGhWaWV3TW9kZWwge1xuICBjb25zdCB7ZGF5VGVtcGxhdGVEYXRhLCBtaW5EYXRlLCBtYXhEYXRlLCBmaXJzdERheU9mV2VlaywgbWFya0Rpc2FibGVkLCBvdXRzaWRlRGF5c30gPSBzdGF0ZTtcbiAgY29uc3QgY2FsZW5kYXJUb2RheSA9IGNhbGVuZGFyLmdldFRvZGF5KCk7XG5cbiAgbW9udGguZmlyc3REYXRlID0gbnVsbDtcbiAgbW9udGgubGFzdERhdGUgPSBudWxsO1xuICBtb250aC5udW1iZXIgPSBkYXRlLm1vbnRoO1xuICBtb250aC55ZWFyID0gZGF0ZS55ZWFyO1xuICBtb250aC53ZWVrcyA9IG1vbnRoLndlZWtzIHx8IFtdO1xuICBtb250aC53ZWVrZGF5cyA9IG1vbnRoLndlZWtkYXlzIHx8IFtdO1xuXG4gIGRhdGUgPSBnZXRGaXJzdFZpZXdEYXRlKGNhbGVuZGFyLCBkYXRlLCBmaXJzdERheU9mV2Vlayk7XG5cbiAgLy8gbW9udGggaGFzIHdlZWtzXG4gIGZvciAobGV0IHdlZWsgPSAwOyB3ZWVrIDwgY2FsZW5kYXIuZ2V0V2Vla3NQZXJNb250aCgpOyB3ZWVrKyspIHtcbiAgICBsZXQgd2Vla09iamVjdCA9IG1vbnRoLndlZWtzW3dlZWtdO1xuICAgIGlmICghd2Vla09iamVjdCkge1xuICAgICAgd2Vla09iamVjdCA9IG1vbnRoLndlZWtzW3dlZWtdID0ge251bWJlcjogMCwgZGF5czogW10sIGNvbGxhcHNlZDogdHJ1ZX07XG4gICAgfVxuICAgIGNvbnN0IGRheXMgPSB3ZWVrT2JqZWN0LmRheXM7XG5cbiAgICAvLyB3ZWVrIGhhcyBkYXlzXG4gICAgZm9yIChsZXQgZGF5ID0gMDsgZGF5IDwgY2FsZW5kYXIuZ2V0RGF5c1BlcldlZWsoKTsgZGF5KyspIHtcbiAgICAgIGlmICh3ZWVrID09PSAwKSB7XG4gICAgICAgIG1vbnRoLndlZWtkYXlzW2RheV0gPSBjYWxlbmRhci5nZXRXZWVrZGF5KGRhdGUpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXdEYXRlID0gbmV3IE5nYkRhdGUoZGF0ZS55ZWFyLCBkYXRlLm1vbnRoLCBkYXRlLmRheSk7XG4gICAgICBjb25zdCBuZXh0RGF0ZSA9IGNhbGVuZGFyLmdldE5leHQobmV3RGF0ZSk7XG5cbiAgICAgIGNvbnN0IGFyaWFMYWJlbCA9IGkxOG4uZ2V0RGF5QXJpYUxhYmVsKG5ld0RhdGUpO1xuXG4gICAgICAvLyBtYXJraW5nIGRhdGUgYXMgZGlzYWJsZWRcbiAgICAgIGxldCBkaXNhYmxlZCA9ICEhKChtaW5EYXRlICYmIG5ld0RhdGUuYmVmb3JlKG1pbkRhdGUpKSB8fCAobWF4RGF0ZSAmJiBuZXdEYXRlLmFmdGVyKG1heERhdGUpKSk7XG4gICAgICBpZiAoIWRpc2FibGVkICYmIG1hcmtEaXNhYmxlZCkge1xuICAgICAgICBkaXNhYmxlZCA9IG1hcmtEaXNhYmxlZChuZXdEYXRlLCB7bW9udGg6IG1vbnRoLm51bWJlciwgeWVhcjogbW9udGgueWVhcn0pO1xuICAgICAgfVxuXG4gICAgICAvLyB0b2RheVxuICAgICAgbGV0IHRvZGF5ID0gbmV3RGF0ZS5lcXVhbHMoY2FsZW5kYXJUb2RheSk7XG5cbiAgICAgIC8vIGFkZGluZyB1c2VyLXByb3ZpZGVkIGRhdGEgdG8gdGhlIGNvbnRleHRcbiAgICAgIGxldCBjb250ZXh0VXNlckRhdGEgPVxuICAgICAgICAgIGRheVRlbXBsYXRlRGF0YSA/IGRheVRlbXBsYXRlRGF0YShuZXdEYXRlLCB7bW9udGg6IG1vbnRoLm51bWJlciwgeWVhcjogbW9udGgueWVhcn0pIDogdW5kZWZpbmVkO1xuXG4gICAgICAvLyBzYXZpbmcgZmlyc3QgZGF0ZSBvZiB0aGUgbW9udGhcbiAgICAgIGlmIChtb250aC5maXJzdERhdGUgPT09IG51bGwgJiYgbmV3RGF0ZS5tb250aCA9PT0gbW9udGgubnVtYmVyKSB7XG4gICAgICAgIG1vbnRoLmZpcnN0RGF0ZSA9IG5ld0RhdGU7XG4gICAgICB9XG5cbiAgICAgIC8vIHNhdmluZyBsYXN0IGRhdGUgb2YgdGhlIG1vbnRoXG4gICAgICBpZiAobmV3RGF0ZS5tb250aCA9PT0gbW9udGgubnVtYmVyICYmIG5leHREYXRlLm1vbnRoICE9PSBtb250aC5udW1iZXIpIHtcbiAgICAgICAgbW9udGgubGFzdERhdGUgPSBuZXdEYXRlO1xuICAgICAgfVxuXG4gICAgICBsZXQgZGF5T2JqZWN0ID0gZGF5c1tkYXldO1xuICAgICAgaWYgKCFkYXlPYmplY3QpIHtcbiAgICAgICAgZGF5T2JqZWN0ID0gZGF5c1tkYXldID0ge30gYXMgRGF5Vmlld01vZGVsO1xuICAgICAgfVxuICAgICAgZGF5T2JqZWN0LmRhdGUgPSBuZXdEYXRlO1xuICAgICAgZGF5T2JqZWN0LmNvbnRleHQgPSBPYmplY3QuYXNzaWduKGRheU9iamVjdC5jb250ZXh0IHx8IHt9LCB7XG4gICAgICAgICRpbXBsaWNpdDogbmV3RGF0ZSxcbiAgICAgICAgZGF0ZTogbmV3RGF0ZSxcbiAgICAgICAgZGF0YTogY29udGV4dFVzZXJEYXRhLFxuICAgICAgICBjdXJyZW50TW9udGg6IG1vbnRoLm51bWJlciwgZGlzYWJsZWQsXG4gICAgICAgIGZvY3VzZWQ6IGZhbHNlLFxuICAgICAgICBzZWxlY3RlZDogZmFsc2UsIHRvZGF5XG4gICAgICB9KTtcbiAgICAgIGRheU9iamVjdC50YWJpbmRleCA9IC0xO1xuICAgICAgZGF5T2JqZWN0LmFyaWFMYWJlbCA9IGFyaWFMYWJlbDtcbiAgICAgIGRheU9iamVjdC5oaWRkZW4gPSBmYWxzZTtcblxuICAgICAgZGF0ZSA9IG5leHREYXRlO1xuICAgIH1cblxuICAgIHdlZWtPYmplY3QubnVtYmVyID0gY2FsZW5kYXIuZ2V0V2Vla051bWJlcihkYXlzLm1hcChkYXkgPT4gZGF5LmRhdGUpLCBmaXJzdERheU9mV2Vlayk7XG5cbiAgICAvLyBtYXJraW5nIHdlZWsgYXMgY29sbGFwc2VkXG4gICAgd2Vla09iamVjdC5jb2xsYXBzZWQgPSBvdXRzaWRlRGF5cyA9PT0gJ2NvbGxhcHNlZCcgJiYgZGF5c1swXS5kYXRlLm1vbnRoICE9PSBtb250aC5udW1iZXIgJiZcbiAgICAgICAgZGF5c1tkYXlzLmxlbmd0aCAtIDFdLmRhdGUubW9udGggIT09IG1vbnRoLm51bWJlcjtcbiAgfVxuXG4gIHJldHVybiBtb250aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpcnN0Vmlld0RhdGUoY2FsZW5kYXI6IE5nYkNhbGVuZGFyLCBkYXRlOiBOZ2JEYXRlLCBmaXJzdERheU9mV2VlazogbnVtYmVyKTogTmdiRGF0ZSB7XG4gIGNvbnN0IGRheXNQZXJXZWVrID0gY2FsZW5kYXIuZ2V0RGF5c1BlcldlZWsoKTtcbiAgY29uc3QgZmlyc3RNb250aERhdGUgPSBuZXcgTmdiRGF0ZShkYXRlLnllYXIsIGRhdGUubW9udGgsIDEpO1xuICBjb25zdCBkYXlPZldlZWsgPSBjYWxlbmRhci5nZXRXZWVrZGF5KGZpcnN0TW9udGhEYXRlKSAlIGRheXNQZXJXZWVrO1xuICByZXR1cm4gY2FsZW5kYXIuZ2V0UHJldihmaXJzdE1vbnRoRGF0ZSwgJ2QnLCAoZGF5c1BlcldlZWsgKyBkYXlPZldlZWsgLSBmaXJzdERheU9mV2VlaykgJSBkYXlzUGVyV2Vlayk7XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/datepicker/datepicker-view-model.js b/dist/sunbird-ui-components/esm2015/datepicker/datepicker-view-model.js new file mode 100644 index 0000000..f8fec94 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/datepicker/datepicker-view-model.js @@ -0,0 +1,13 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @enum {number} */ +const NavigationEvent = { + PREV: 0, + NEXT: 1, +}; +export { NavigationEvent }; +NavigationEvent[NavigationEvent.PREV] = 'PREV'; +NavigationEvent[NavigationEvent.NEXT] = 'NEXT'; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci12aWV3LW1vZGVsLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiZGF0ZXBpY2tlci9kYXRlcGlja2VyLXZpZXctbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0lBeURFLE9BQUk7SUFDSixPQUFJIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOZ2JEYXRlfSBmcm9tICcuL25nYi1kYXRlJztcbmltcG9ydCB7TmdiRGF0ZVN0cnVjdH0gZnJvbSAnLi9uZ2ItZGF0ZS1zdHJ1Y3QnO1xuaW1wb3J0IHtEYXlUZW1wbGF0ZUNvbnRleHR9IGZyb20gJy4vZGF0ZXBpY2tlci1kYXktdGVtcGxhdGUtY29udGV4dCc7XG5cbmV4cG9ydCB0eXBlIE5nYk1hcmtEaXNhYmxlZCA9IChkYXRlOiBOZ2JEYXRlU3RydWN0LCBjdXJyZW50OiB7eWVhcjogbnVtYmVyLCBtb250aDogbnVtYmVyfSkgPT4gYm9vbGVhbjtcbmV4cG9ydCB0eXBlIE5nYkRheVRlbXBsYXRlRGF0YSA9IChkYXRlOiBOZ2JEYXRlU3RydWN0LCBjdXJyZW50OiB7eWVhcjogbnVtYmVyLCBtb250aDogbnVtYmVyfSkgPT4gYW55O1xuXG5leHBvcnQgdHlwZSBEYXlWaWV3TW9kZWwgPSB7XG4gIGRhdGU6IE5nYkRhdGUsXG4gIGNvbnRleHQ6IERheVRlbXBsYXRlQ29udGV4dCxcbiAgdGFiaW5kZXg6IG51bWJlcixcbiAgYXJpYUxhYmVsOiBzdHJpbmcsXG4gIGhpZGRlbjogYm9vbGVhblxufTtcblxuZXhwb3J0IHR5cGUgV2Vla1ZpZXdNb2RlbCA9IHtcbiAgbnVtYmVyOiBudW1iZXIsXG4gIGRheXM6IERheVZpZXdNb2RlbFtdLFxuICBjb2xsYXBzZWQ6IGJvb2xlYW5cbn07XG5cbmV4cG9ydCB0eXBlIE1vbnRoVmlld01vZGVsID0ge1xuICBmaXJzdERhdGU6IE5nYkRhdGUsXG4gIGxhc3REYXRlOiBOZ2JEYXRlLFxuICBudW1iZXI6IG51bWJlcixcbiAgeWVhcjogbnVtYmVyLFxuICB3ZWVrczogV2Vla1ZpZXdNb2RlbFtdLFxuICB3ZWVrZGF5czogbnVtYmVyW11cbn07XG5cbi8vIGNsYW5nLWZvcm1hdCBvZmZcbmV4cG9ydCB0eXBlIERhdGVwaWNrZXJWaWV3TW9kZWwgPSB7XG4gIGRheVRlbXBsYXRlRGF0YT86IE5nYkRheVRlbXBsYXRlRGF0YSxcbiAgZGlzYWJsZWQ6IGJvb2xlYW4sXG4gIGRpc3BsYXlNb250aHM6IG51bWJlcixcbiAgZmlyc3REYXRlPzogTmdiRGF0ZSxcbiAgZmlyc3REYXlPZldlZWs6IG51bWJlcixcbiAgZm9jdXNEYXRlPzogTmdiRGF0ZSxcbiAgZm9jdXNWaXNpYmxlOiBib29sZWFuLFxuICBsYXN0RGF0ZT86IE5nYkRhdGUsXG4gIG1hcmtEaXNhYmxlZD86IE5nYk1hcmtEaXNhYmxlZCxcbiAgbWF4RGF0ZT86IE5nYkRhdGUsXG4gIG1pbkRhdGU/OiBOZ2JEYXRlLFxuICBtb250aHM6IE1vbnRoVmlld01vZGVsW10sXG4gIG5hdmlnYXRpb246ICdzZWxlY3QnIHwgJ2Fycm93cycgfCAnbm9uZScsXG4gIG91dHNpZGVEYXlzOiAndmlzaWJsZScgfCAnY29sbGFwc2VkJyB8ICdoaWRkZW4nLFxuICBwcmV2RGlzYWJsZWQ6IGJvb2xlYW4sXG4gIG5leHREaXNhYmxlZDogYm9vbGVhbixcbiAgc2VsZWN0Qm94ZXM6IHtcbiAgICB5ZWFyczogbnVtYmVyW10sXG4gICAgbW9udGhzOiBudW1iZXJbXVxuICB9LFxuICBzZWxlY3RlZERhdGU6IE5nYkRhdGVcbn07XG4vLyBjbGFuZy1mb3JtYXQgb25cblxuZXhwb3J0IGVudW0gTmF2aWdhdGlvbkV2ZW50IHtcbiAgUFJFVixcbiAgTkVYVFxufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/datepicker/datepicker.js b/dist/sunbird-ui-components/esm2015/datepicker/datepicker.js new file mode 100644 index 0000000..d6242a8 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/datepicker/datepicker.js @@ -0,0 +1,573 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { fromEvent, merge, Subject } from 'rxjs'; +import { filter, take, takeUntil } from 'rxjs/operators'; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, forwardRef, Input, NgZone, Output, TemplateRef, ViewChild, ViewEncapsulation } from '@angular/core'; +import { NG_VALUE_ACCESSOR } from '@angular/forms'; +import { NgbCalendar } from './ngb-calendar'; +import { NgbDate } from './ngb-date'; +import { NgbDatepickerService } from './datepicker-service'; +import { NgbDatepickerKeyMapService } from './datepicker-keymap-service'; +import { NavigationEvent } from './datepicker-view-model'; +import { NgbDatepickerConfig } from './datepicker-config'; +import { NgbDateAdapter } from './adapters/ngb-date-adapter'; +import { NgbDatepickerI18n } from './datepicker-i18n'; +import { isChangedDate, isChangedMonth } from './datepicker-tools'; +import { hasClassName } from '../util/util'; +/** @type {?} */ +const NGB_DATEPICKER_VALUE_ACCESSOR = { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef((/** + * @return {?} + */ + () => NgbDatepicker)), + multi: true +}; +/** + * An event emitted right before the navigation happens and the month displayed by the datepicker changes. + * @record + */ +export function NgbDatepickerNavigateEvent() { } +if (false) { + /** + * The currently displayed month. + * @type {?} + */ + NgbDatepickerNavigateEvent.prototype.current; + /** + * The month we're navigating to. + * @type {?} + */ + NgbDatepickerNavigateEvent.prototype.next; + /** + * Calling this function will prevent navigation from happening. + * + * \@since 4.1.0 + * @type {?} + */ + NgbDatepickerNavigateEvent.prototype.preventDefault; +} +/** + * A highly configurable component that helps you with selecting calendar dates. + * + * `NgbDatepicker` is meant to be displayed inline on a page or put inside a popup. + */ +export class NgbDatepicker { + /** + * @param {?} _keyMapService + * @param {?} _service + * @param {?} _calendar + * @param {?} i18n + * @param {?} config + * @param {?} _cd + * @param {?} _elementRef + * @param {?} _ngbDateAdapter + * @param {?} _ngZone + */ + constructor(_keyMapService, _service, _calendar, i18n, config, _cd, _elementRef, _ngbDateAdapter, _ngZone) { + this._keyMapService = _keyMapService; + this._service = _service; + this._calendar = _calendar; + this.i18n = i18n; + this._cd = _cd; + this._elementRef = _elementRef; + this._ngbDateAdapter = _ngbDateAdapter; + this._ngZone = _ngZone; + this._destroyed$ = new Subject(); + /** + * An event emitted right before the navigation happens and displayed month changes. + * + * See [`NgbDatepickerNavigateEvent`](#/components/datepicker/api#NgbDatepickerNavigateEvent) for the payload info. + */ + this.navigate = new EventEmitter(); + /** + * An event emitted when user selects a date using keyboard or mouse. + * + * The payload of the event is currently selected `NgbDate`. + */ + this.select = new EventEmitter(); + this.onChange = (/** + * @param {?} _ + * @return {?} + */ + (_) => { }); + this.onTouched = (/** + * @return {?} + */ + () => { }); + ['dayTemplate', 'dayTemplateData', 'displayMonths', 'firstDayOfWeek', 'footerTemplate', 'markDisabled', 'minDate', + 'maxDate', 'navigation', 'outsideDays', 'showWeekdays', 'showWeekNumbers', 'startDate'] + .forEach((/** + * @param {?} input + * @return {?} + */ + input => this[input] = config[input])); + _service.select$.pipe(takeUntil(this._destroyed$)).subscribe((/** + * @param {?} date + * @return {?} + */ + date => { this.select.emit(date); })); + _service.model$.pipe(takeUntil(this._destroyed$)).subscribe((/** + * @param {?} model + * @return {?} + */ + model => { + /** @type {?} */ + const newDate = model.firstDate; + /** @type {?} */ + const oldDate = this.model ? this.model.firstDate : null; + /** @type {?} */ + let navigationPrevented = false; + // emitting navigation event if the first month changes + if (!newDate.equals(oldDate)) { + this.navigate.emit({ + current: oldDate ? { year: oldDate.year, month: oldDate.month } : null, + next: { year: newDate.year, month: newDate.month }, + preventDefault: (/** + * @return {?} + */ + () => navigationPrevented = true) + }); + // can't prevent the very first navigation + if (navigationPrevented && oldDate !== null) { + this._service.open(oldDate); + return; + } + } + /** @type {?} */ + const newSelectedDate = model.selectedDate; + /** @type {?} */ + const newFocusedDate = model.focusDate; + /** @type {?} */ + const oldFocusedDate = this.model ? this.model.focusDate : null; + this.model = model; + // handling selection change + if (isChangedDate(newSelectedDate, this._controlValue)) { + this._controlValue = newSelectedDate; + this.onTouched(); + this.onChange(this._ngbDateAdapter.toModel(newSelectedDate)); + } + // handling focus change + if (isChangedDate(newFocusedDate, oldFocusedDate) && oldFocusedDate && model.focusVisible) { + this.focus(); + } + _cd.markForCheck(); + })); + } + /** + * @return {?} + */ + focus() { + this._ngZone.onStable.asObservable().pipe(take(1)).subscribe((/** + * @return {?} + */ + () => { + /** @type {?} */ + const elementToFocus = this._elementRef.nativeElement.querySelector('div.ngb-dp-day[tabindex="0"]'); + if (elementToFocus) { + elementToFocus.focus(); + } + })); + } + /** + * Navigates to the provided date. + * + * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec. + * If nothing or invalid date provided calendar will open current month. + * + * Use the `[startDate]` input as an alternative. + * @param {?=} date + * @return {?} + */ + navigateTo(date) { + this._service.open(NgbDate.from(date ? date.day ? (/** @type {?} */ (date)) : Object.assign({}, date, { day: 1 }) : null)); + } + /** + * @return {?} + */ + ngAfterViewInit() { + this._ngZone.runOutsideAngular((/** + * @return {?} + */ + () => { + /** @type {?} */ + const focusIns$ = fromEvent(this._monthsEl.nativeElement, 'focusin'); + /** @type {?} */ + const focusOuts$ = fromEvent(this._monthsEl.nativeElement, 'focusout'); + // we're changing 'focusVisible' only when entering or leaving months view + // and ignoring all focus events where both 'target' and 'related' target are day cells + merge(focusIns$, focusOuts$) + .pipe(filter((/** + * @param {?} __0 + * @return {?} + */ + ({ target, relatedTarget }) => !(hasClassName(target, 'ngb-dp-day') && hasClassName(relatedTarget, 'ngb-dp-day')))), takeUntil(this._destroyed$)) + .subscribe((/** + * @param {?} __0 + * @return {?} + */ + ({ type }) => this._ngZone.run((/** + * @return {?} + */ + () => this._service.focusVisible = type === 'focusin')))); + })); + } + /** + * @return {?} + */ + ngOnDestroy() { this._destroyed$.next(); } + /** + * @return {?} + */ + ngOnInit() { + if (this.model === undefined) { + ['dayTemplateData', 'displayMonths', 'markDisabled', 'firstDayOfWeek', 'navigation', 'minDate', 'maxDate', + 'outsideDays'] + .forEach((/** + * @param {?} input + * @return {?} + */ + input => this._service[input] = this[input])); + this.navigateTo(this.startDate); + } + } + /** + * @param {?} changes + * @return {?} + */ + ngOnChanges(changes) { + ['dayTemplateData', 'displayMonths', 'markDisabled', 'firstDayOfWeek', 'navigation', 'minDate', 'maxDate', + 'outsideDays'] + .filter((/** + * @param {?} input + * @return {?} + */ + input => input in changes)) + .forEach((/** + * @param {?} input + * @return {?} + */ + input => this._service[input] = this[input])); + if ('startDate' in changes) { + const { currentValue, previousValue } = changes.startDate; + if (isChangedMonth(previousValue, currentValue)) { + this.navigateTo(this.startDate); + } + } + } + /** + * @param {?} date + * @return {?} + */ + onDateSelect(date) { + this._service.focus(date); + this._service.select(date, { emitEvent: true }); + } + /** + * @param {?} event + * @return {?} + */ + onKeyDown(event) { this._keyMapService.processKey(event); } + /** + * @param {?} date + * @return {?} + */ + onNavigateDateSelect(date) { this._service.open(date); } + /** + * @param {?} event + * @return {?} + */ + onNavigateEvent(event) { + switch (event) { + case NavigationEvent.PREV: + this._service.open(this._calendar.getPrev(this.model.firstDate, 'm', 1)); + break; + case NavigationEvent.NEXT: + this._service.open(this._calendar.getNext(this.model.firstDate, 'm', 1)); + break; + } + } + /** + * @param {?} fn + * @return {?} + */ + registerOnChange(fn) { this.onChange = fn; } + /** + * @param {?} fn + * @return {?} + */ + registerOnTouched(fn) { this.onTouched = fn; } + /** + * @param {?} isDisabled + * @return {?} + */ + setDisabledState(isDisabled) { this._service.disabled = isDisabled; } + /** + * @param {?} value + * @return {?} + */ + writeValue(value) { + this._controlValue = NgbDate.from(this._ngbDateAdapter.fromModel(value)); + this._service.select(this._controlValue); + } +} +NgbDatepicker.decorators = [ + { type: Component, args: [{ + exportAs: 'ngbDatepicker', + selector: 'ngb-datepicker', + changeDetection: ChangeDetectionStrategy.OnPush, + encapsulation: ViewEncapsulation.None, + template: ` + +
+
+
+ +
+ + +
+ +
+ +
+
+ {{ i18n.getMonthFullName(month.number, month.year) }} {{ i18n.getYearNumerals(month.year) }} +
+ + +
+
+
+ + + `, + providers: [NGB_DATEPICKER_VALUE_ACCESSOR, NgbDatepickerService, NgbDatepickerKeyMapService], + styles: ["ngb-datepicker{border:1px solid #dfdfdf;border-radius:.25rem;display:inline-block}ngb-datepicker-month-view{pointer-events:auto}ngb-datepicker.dropdown-menu{padding:0}.ngb-dp-body{z-index:1050}.ngb-dp-header{border-bottom:0;border-radius:.25rem .25rem 0 0;padding-top:.25rem;background-color:#f8f9fa}.ngb-dp-months{display:-ms-flexbox;display:flex}.ngb-dp-month{pointer-events:none}.ngb-dp-month-name{font-size:larger;height:2rem;line-height:2rem;text-align:center;background-color:#f8f9fa}.ngb-dp-month+.ngb-dp-month .ngb-dp-month-name,.ngb-dp-month+.ngb-dp-month .ngb-dp-week{padding-left:1rem}.ngb-dp-month:last-child .ngb-dp-week{padding-right:.25rem}.ngb-dp-month:first-child .ngb-dp-week{padding-left:.25rem}.ngb-dp-month .ngb-dp-week:last-child{padding-bottom:.25rem}"] + }] } +]; +/** @nocollapse */ +NgbDatepicker.ctorParameters = () => [ + { type: NgbDatepickerKeyMapService }, + { type: NgbDatepickerService }, + { type: NgbCalendar }, + { type: NgbDatepickerI18n }, + { type: NgbDatepickerConfig }, + { type: ChangeDetectorRef }, + { type: ElementRef }, + { type: NgbDateAdapter }, + { type: NgZone } +]; +NgbDatepicker.propDecorators = { + _monthsEl: [{ type: ViewChild, args: ['months', { static: true },] }], + dayTemplate: [{ type: Input }], + dayTemplateData: [{ type: Input }], + displayMonths: [{ type: Input }], + firstDayOfWeek: [{ type: Input }], + footerTemplate: [{ type: Input }], + markDisabled: [{ type: Input }], + maxDate: [{ type: Input }], + minDate: [{ type: Input }], + navigation: [{ type: Input }], + outsideDays: [{ type: Input }], + showWeekdays: [{ type: Input }], + showWeekNumbers: [{ type: Input }], + startDate: [{ type: Input }], + navigate: [{ type: Output }], + select: [{ type: Output }] +}; +if (false) { + /** @type {?} */ + NgbDatepicker.prototype.model; + /** + * @type {?} + * @private + */ + NgbDatepicker.prototype._monthsEl; + /** + * @type {?} + * @private + */ + NgbDatepicker.prototype._controlValue; + /** + * @type {?} + * @private + */ + NgbDatepicker.prototype._destroyed$; + /** + * The reference to a custom template for the day. + * + * Allows to completely override the way a day 'cell' in the calendar is displayed. + * + * See [`DayTemplateContext`](#/components/datepicker/api#DayTemplateContext) for the data you get inside. + * @type {?} + */ + NgbDatepicker.prototype.dayTemplate; + /** + * The callback to pass any arbitrary data to the template cell via the + * [`DayTemplateContext`](#/components/datepicker/api#DayTemplateContext)'s `data` parameter. + * + * `current` is the month that is currently displayed by the datepicker. + * + * \@since 3.3.0 + * @type {?} + */ + NgbDatepicker.prototype.dayTemplateData; + /** + * The number of months to display. + * @type {?} + */ + NgbDatepicker.prototype.displayMonths; + /** + * The first day of the week. + * + * With default calendar we use ISO 8601: 'weekday' is 1=Mon ... 7=Sun. + * @type {?} + */ + NgbDatepicker.prototype.firstDayOfWeek; + /** + * The reference to the custom template for the datepicker footer. + * + * \@since 3.3.0 + * @type {?} + */ + NgbDatepicker.prototype.footerTemplate; + /** + * The callback to mark some dates as disabled. + * + * It is called for each new date when navigating to a different month. + * + * `current` is the month that is currently displayed by the datepicker. + * @type {?} + */ + NgbDatepicker.prototype.markDisabled; + /** + * The latest date that can be displayed or selected. + * + * If not provided, 'year' select box will display 10 years after the current month. + * @type {?} + */ + NgbDatepicker.prototype.maxDate; + /** + * The earliest date that can be displayed or selected. + * + * If not provided, 'year' select box will display 10 years before the current month. + * @type {?} + */ + NgbDatepicker.prototype.minDate; + /** + * Navigation type. + * + * * `"select"` - select boxes for month and navigation arrows + * * `"arrows"` - only navigation arrows + * * `"none"` - no navigation visible at all + * @type {?} + */ + NgbDatepicker.prototype.navigation; + /** + * The way of displaying days that don't belong to the current month. + * + * * `"visible"` - days are visible + * * `"hidden"` - days are hidden, white space preserved + * * `"collapsed"` - days are collapsed, so the datepicker height might change between months + * + * For the 2+ months view, days in between months are never shown. + * @type {?} + */ + NgbDatepicker.prototype.outsideDays; + /** + * If `true`, weekdays will be displayed. + * @type {?} + */ + NgbDatepicker.prototype.showWeekdays; + /** + * If `true`, week numbers will be displayed. + * @type {?} + */ + NgbDatepicker.prototype.showWeekNumbers; + /** + * The date to open calendar with. + * + * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec. + * If nothing or invalid date is provided, calendar will open with current month. + * + * You could use `navigateTo(date)` method as an alternative. + * @type {?} + */ + NgbDatepicker.prototype.startDate; + /** + * An event emitted right before the navigation happens and displayed month changes. + * + * See [`NgbDatepickerNavigateEvent`](#/components/datepicker/api#NgbDatepickerNavigateEvent) for the payload info. + * @type {?} + */ + NgbDatepicker.prototype.navigate; + /** + * An event emitted when user selects a date using keyboard or mouse. + * + * The payload of the event is currently selected `NgbDate`. + * @type {?} + */ + NgbDatepicker.prototype.select; + /** @type {?} */ + NgbDatepicker.prototype.onChange; + /** @type {?} */ + NgbDatepicker.prototype.onTouched; + /** + * @type {?} + * @private + */ + NgbDatepicker.prototype._keyMapService; + /** @type {?} */ + NgbDatepicker.prototype._service; + /** + * @type {?} + * @private + */ + NgbDatepicker.prototype._calendar; + /** @type {?} */ + NgbDatepicker.prototype.i18n; + /** + * @type {?} + * @private + */ + NgbDatepicker.prototype._cd; + /** + * @type {?} + * @private + */ + NgbDatepicker.prototype._elementRef; + /** + * @type {?} + * @private + */ + NgbDatepicker.prototype._ngbDateAdapter; + /** + * @type {?} + * @private + */ + NgbDatepicker.prototype._ngZone; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImRhdGVwaWNrZXIvZGF0ZXBpY2tlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQy9DLE9BQU8sRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZELE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixLQUFLLEVBQ0wsTUFBTSxFQUlOLE1BQU0sRUFFTixXQUFXLEVBQ1gsU0FBUyxFQUNULGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXVCLGlCQUFpQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDMUQsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDdkUsT0FBTyxFQUFzQixlQUFlLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUU3RSxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFFM0QsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFDLGFBQWEsRUFBRSxjQUFjLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRSxPQUFP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TCxLQUFLO3lCQVNMLEtBQUs7MEJBV0wsS0FBSzsyQkFLTCxLQUFLOzhCQUtMLEtBQUs7d0JBVUwsS0FBSzt1QkFPTCxNQUFNO3FCQU9OLE1BQU07Ozs7SUF2SFAsOEJBQTJCOzs7OztJQUUzQixrQ0FBZ0Y7Ozs7O0lBQ2hGLHNDQUErQjs7Ozs7SUFDL0Isb0NBQTBDOzs7Ozs7Ozs7SUFTMUMsb0NBQXNEOzs7Ozs7Ozs7O0lBVXRELHdDQUF5Rjs7Ozs7SUFLekYsc0NBQStCOzs7Ozs7O0lBTy9CLHVDQUFnQzs7Ozs7OztJQU9oQyx1Q0FBMEM7Ozs7Ozs7OztJQVMxQyxxQ0FBMEY7Ozs7Ozs7SUFPMUYsZ0NBQWdDOzs7Ozs7O0lBT2hDLGdDQUFnQzs7Ozs7Ozs7O0lBU2hDLG1DQUFrRDs7Ozs7Ozs7Ozs7SUFXbEQsb0NBQXlEOzs7OztJQUt6RCxxQ0FBK0I7Ozs7O0lBSy9CLHdDQUFrQzs7Ozs7Ozs7OztJQVVsQyxrQ0FBZ0U7Ozs7Ozs7SUFPaEUsaUNBQW9FOzs7Ozs7O0lBT3BFLCtCQUErQzs7SUFFL0MsaUNBQTBCOztJQUMxQixrQ0FBcUI7Ozs7O0lBR2pCLHVDQUFrRDs7SUFBRSxpQ0FBcUM7Ozs7O0lBQ3pGLGtDQUE4Qjs7SUFBRSw2QkFBOEI7Ozs7O0lBQzlELDRCQUE4Qjs7Ozs7SUFBRSxvQ0FBNEM7Ozs7O0lBQzVFLHdDQUE0Qzs7Ozs7SUFBRSxnQ0FBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2Zyb21FdmVudCwgbWVyZ2UsIFN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtmaWx0ZXIsIHRha2UsIHRha2VVbnRpbH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge05nYkNhbGVuZGFyfSBmcm9tICcuL25nYi1jYWxlbmRhcic7XG5pbXBvcnQge05nYkRhdGV9IGZyb20gJy4vbmdiLWRhdGUnO1xuaW1wb3J0IHtOZ2JEYXRlcGlja2VyU2VydmljZX0gZnJvbSAnLi9kYXRlcGlja2VyLXNlcnZpY2UnO1xuaW1wb3J0IHtOZ2JEYXRlcGlja2VyS2V5TWFwU2VydmljZX0gZnJvbSAnLi9kYXRlcGlja2VyLWtleW1hcC1zZXJ2aWNlJztcbmltcG9ydCB7RGF0ZXBpY2tlclZpZXdNb2RlbCwgTmF2aWdhdGlvbkV2ZW50fSBmcm9tICcuL2RhdGVwaWNrZXItdmlldy1tb2RlbCc7XG5pbXBvcnQge0RheVRlbXBsYXRlQ29udGV4dH0gZnJvbSAnLi9kYXRlcGlja2VyLWRheS10ZW1wbGF0ZS1jb250ZXh0JztcbmltcG9ydCB7TmdiRGF0ZXBpY2tlckNvbmZpZ30gZnJvbSAnLi9kYXRlcGlja2VyLWNvbmZpZyc7XG5pbXBvcnQge05nYkRhdGVBZGFwdGVyfSBmcm9tICcuL2FkYXB0ZXJzL25nYi1kYXRlLWFkYXB0ZXInO1xuaW1wb3J0IHtOZ2JEYXRlU3RydWN0fSBmcm9tICcuL25nYi1kYXRlLXN0cnVjdCc7XG5pbXBvcnQge05nYkRhdGVwaWNrZXJJMThufSBmcm9tICcuL2RhdGVwaWNrZXItaTE4bic7XG5pbXBvcnQge2lzQ2hhbmdlZERhdGUsIGlzQ2hhbmdlZE1vbnRofSBmcm9tICcuL2RhdGVwaWNrZXItdG9vbHMnO1xuaW1wb3J0IHtoYXNDbGFzc05hbWV9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5cbmNvbnN0IE5HQl9EQVRFUElDS0VSX1ZBTFVFX0FDQ0VTU09SID0ge1xuICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTmdiRGF0ZXBpY2tlciksXG4gIG11bHRpOiB0cnVlXG59O1xuXG4vKipcbiAqIEFuIGV2ZW50IGVtaXR0ZWQgcmlnaHQgYmVmb3JlIHRoZSBuYXZpZ2F0aW9uIGhhcHBlbnMgYW5kIHRoZSBtb250aCBkaXNwbGF5ZWQgYnkgdGhlIGRhdGVwaWNrZXIgY2hhbmdlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZ2JEYXRlcGlja2VyTmF2aWdhdGVFdmVudCB7XG4gIC8qKlxuICAgKiBUaGUgY3VycmVudGx5IGRpc3BsYXllZCBtb250aC5cbiAgICovXG4gIGN1cnJlbnQ6IHt5ZWFyOiBudW1iZXIsIG1vbnRoOiBudW1iZXJ9O1xuXG4gIC8qKlxuICAgKiBUaGUgbW9udGggd2UncmUgbmF2aWdhdGluZyB0by5cbiAgICovXG4gIG5leHQ6IHt5ZWFyOiBudW1iZXIsIG1vbnRoOiBudW1iZXJ9O1xuXG4gIC8qKlxuICAgKiBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBwcmV2ZW50IG5hdmlnYXRpb24gZnJvbSBoYXBwZW5pbmcuXG4gICAqXG4gICAqIEBzaW5jZSA0LjEuMFxuICAgKi9cbiAgcHJldmVudERlZmF1bHQ6ICgpID0+IHZvaWQ7XG59XG5cbi8qKlxuICogQSBoaWdobHkgY29uZmlndXJhYmxlIGNvbXBvbmVudCB0aGF0IGhlbHBzIHlvdSB3aXRoIHNlbGVjdGluZyBjYWxlbmRhciBkYXRlcy5cbiAqXG4gKiBgTmdiRGF0ZXBpY2tlcmAgaXMgbWVhbnQgdG8gYmUgZGlzcGxheWVkIGlubGluZSBvbiBhIHBhZ2Ugb3IgcHV0IGluc2lkZSBhIHBvcHVwLlxuICovXG5AQ29tcG9uZW50KHtcbiAgZXhwb3J0QXM6ICduZ2JEYXRlcGlja2VyJyxcbiAgc2VsZWN0b3I6ICduZ2ItZGF0ZXBpY2tlcicsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBzdHlsZVVybHM6IFsnLi9kYXRlcGlja2VyLnNjc3MnXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bmctdGVtcGxhdGUgI2R0IGxldC1kYXRlPVwiZGF0ZVwiIGxldC1jdXJyZW50TW9udGg9XCJjdXJyZW50TW9udGhcIiBsZXQtc2VsZWN0ZWQ9XCJzZWxlY3RlZFwiIGxldC1kaXNhYmxlZD1cImRpc2FibGVkXCIgbGV0LWZvY3VzZWQ9XCJmb2N1c2VkXCI+XG4gICAgICA8ZGl2IG5nYkRhdGVwaWNrZXJEYXlWaWV3XG4gICAgICAgIFtkYXRlXT1cImRhdGVcIlxuICAgICAgICBbY3VycmVudE1vbnRoXT1cImN1cnJlbnRNb250aFwiXG4gICAgICAgIFtzZWxlY3RlZF09XCJzZWxlY3RlZFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIFtmb2N1c2VkXT1cImZvY3VzZWRcIj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8ZGl2IGNsYXNzPVwibmdiLWRwLWhlYWRlclwiPlxuICAgICAgPG5nYi1kYXRlcGlja2VyLW5hdmlnYXRpb24gKm5nSWY9XCJuYXZpZ2F0aW9uICE9PSAnbm9uZSdcIlxuICAgICAgICBbZGF0ZV09XCJtb2RlbC5maXJzdERhdGVcIlxuICAgICAgICBbbW9udGhzXT1cIm1vZGVsLm1vbnRoc1wiXG4gICAgICAgIFtkaXNhYmxlZF09XCJtb2RlbC5kaXNhYmxlZFwiXG4gICAgICAgIFtzaG93U2VsZWN0XT1cIm1vZGVsLm5hdmlnYXRpb24gPT09ICdzZWxlY3QnXCJcbiAgICAgICAgW3ByZXZEaXNhYmxlZF09XCJtb2RlbC5wcmV2RGlzYWJsZWRcIlxuICAgICAgICBbbmV4dERpc2FibGVkXT1cIm1vZGVsLm5leHREaXNhYmxlZFwiXG4gICAgICAgIFtzZWxlY3RCb3hlc109XCJtb2RlbC5zZWxlY3RCb3hlc1wiXG4gICAgICAgIChuYXZpZ2F0ZSk9XCJvbk5hdmlnYXRlRXZlbnQoJGV2ZW50KVwiXG4gICAgICAgIChzZWxlY3QpPVwib25OYXZpZ2F0ZURhdGVTZWxlY3QoJGV2ZW50KVwiPlxuICAgICAgPC9uZ2ItZGF0ZXBpY2tlci1uYXZpZ2F0aW9uPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiAjbW9udGhzIGNsYXNzPVwibmdiLWRwLW1vbnRoc1wiIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCI+XG4gICAgICA8bmctdGVtcGxhdGUgbmdGb3IgbGV0LW1vbnRoIFtuZ0Zvck9mXT1cIm1vZGVsLm1vbnRoc1wiIGxldC1pPVwiaW5kZXhcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm5nYi1kcC1tb250aFwiPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJuYXZpZ2F0aW9uID09PSAnbm9uZScgfHwgKGRpc3BsYXlNb250aHMgPiAxICYmIG5hdmlnYXRpb24gPT09ICdzZWxlY3QnKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJuZ2ItZHAtbW9udGgtbmFtZVwiPlxuICAgICAgICAgICAge3sgaTE4bi5nZXRNb250aEZ1bGxOYW1lKG1vbnRoLm51bWJlciwgbW9udGgueWVhcikgfX0ge3sgaTE4bi5nZXRZZWFyTnVtZXJhbHMobW9udGgueWVhcikgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bmdiLWRhdGVwaWNrZXItbW9udGgtdmlld1xuICAgICAgICAgICAgW21vbnRoXT1cIm1vbnRoXCJcbiAgICAgICAgICAgIFtkYXlUZW1wbGF0ZV09XCJkYXlUZW1wbGF0ZSB8fCBkdFwiXG4gICAgICAgICAgICBbc2hvd1dlZWtkYXlzXT1cInNob3dXZWVrZGF5c1wiXG4gICAgICAgICAgICBbc2hvd1dlZWtOdW1iZXJzXT1cInNob3dXZWVrTnVtYmVyc1wiXG4gICAgICAgICAgICAoc2VsZWN0KT1cIm9uRGF0ZVNlbGVjdCgkZXZlbnQpXCI+XG4gICAgICAgICAgPC9uZ2ItZGF0ZXBpY2tlci1tb250aC12aWV3PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG5cbiAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiZm9vdGVyVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICBgLFxuICBwcm92aWRlcnM6IFtOR0JfREFURVBJQ0tFUl9WQUxVRV9BQ0NFU1NPUiwgTmdiRGF0ZXBpY2tlclNlcnZpY2UsIE5nYkRhdGVwaWNrZXJLZXlNYXBTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBOZ2JEYXRlcGlja2VyIGltcGxlbWVudHMgT25EZXN0cm95LFxuICAgIE9uQ2hhbmdlcywgT25Jbml0LCBBZnRlclZpZXdJbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIG1vZGVsOiBEYXRlcGlja2VyVmlld01vZGVsO1xuXG4gIEBWaWV3Q2hpbGQoJ21vbnRocycsIHtzdGF0aWM6IHRydWV9KSBwcml2YXRlIF9tb250aHNFbDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gIHByaXZhdGUgX2NvbnRyb2xWYWx1ZTogTmdiRGF0ZTtcbiAgcHJpdmF0ZSBfZGVzdHJveWVkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIFRoZSByZWZlcmVuY2UgdG8gYSBjdXN0b20gdGVtcGxhdGUgZm9yIHRoZSBkYXkuXG4gICAqXG4gICAqIEFsbG93cyB0byBjb21wbGV0ZWx5IG92ZXJyaWRlIHRoZSB3YXkgYSBkYXkgJ2NlbGwnIGluIHRoZSBjYWxlbmRhciBpcyBkaXNwbGF5ZWQuXG4gICAqXG4gICAqIFNlZSBbYERheVRlbXBsYXRlQ29udGV4dGBdKCMvY29tcG9uZW50cy9kYXRlcGlja2VyL2FwaSNEYXlUZW1wbGF0ZUNvbnRleHQpIGZvciB0aGUgZGF0YSB5b3UgZ2V0IGluc2lkZS5cbiAgICovXG4gIEBJbnB1dCgpIGRheVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxEYXlUZW1wbGF0ZUNvbnRleHQ+O1xuXG4gIC8qKlxuICAgKiBUaGUgY2FsbGJhY2sgdG8gcGFzcyBhbnkgYXJiaXRyYXJ5IGRhdGEgdG8gdGhlIHRlbXBsYXRlIGNlbGwgdmlhIHRoZVxuICAgKiBbYERheVRlbXBsYXRlQ29udGV4dGBdKCMvY29tcG9uZW50cy9kYXRlcGlja2VyL2FwaSNEYXlUZW1wbGF0ZUNvbnRleHQpJ3MgYGRhdGFgIHBhcmFtZXRlci5cbiAgICpcbiAgICogYGN1cnJlbnRgIGlzIHRoZSBtb250aCB0aGF0IGlzIGN1cnJlbnRseSBkaXNwbGF5ZWQgYnkgdGhlIGRhdGVwaWNrZXIuXG4gICAqXG4gICAqIEBzaW5jZSAzLjMuMFxuICAgKi9cbiAgQElucHV0KCkgZGF5VGVtcGxhdGVEYXRhOiAoZGF0ZTogTmdiRGF0ZSwgY3VycmVudDoge3llYXI6IG51bWJlciwgbW9udGg6IG51bWJlcn0pID0+IGFueTtcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBtb250aHMgdG8gZGlzcGxheS5cbiAgICovXG4gIEBJbnB1dCgpIGRpc3BsYXlNb250aHM6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICpcbiAgICogV2l0aCBkZWZhdWx0IGNhbGVuZGFyIHdlIHVzZSBJU08gODYwMTogJ3dlZWtkYXknIGlzIDE9TW9uIC4uLiA3PVN1bi5cbiAgICovXG4gIEBJbnB1dCgpIGZpcnN0RGF5T2ZXZWVrOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSByZWZlcmVuY2UgdG8gdGhlIGN1c3RvbSB0ZW1wbGF0ZSBmb3IgdGhlIGRhdGVwaWNrZXIgZm9vdGVyLlxuICAgKlxuICAgKiBAc2luY2UgMy4zLjBcbiAgICovXG4gIEBJbnB1dCgpIGZvb3RlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIC8qKlxuICAgKiBUaGUgY2FsbGJhY2sgdG8gbWFyayBzb21lIGRhdGVzIGFzIGRpc2FibGVkLlxuICAgKlxuICAgKiBJdCBpcyBjYWxsZWQgZm9yIGVhY2ggbmV3IGRhdGUgd2hlbiBuYXZpZ2F0aW5nIHRvIGEgZGlmZmVyZW50IG1vbnRoLlxuICAgKlxuICAgKiBgY3VycmVudGAgaXMgdGhlIG1vbnRoIHRoYXQgaXMgY3VycmVudGx5IGRpc3BsYXllZCBieSB0aGUgZGF0ZXBpY2tlci5cbiAgICovXG4gIEBJbnB1dCgpIG1hcmtEaXNhYmxlZDogKGRhdGU6IE5nYkRhdGUsIGN1cnJlbnQ6IHt5ZWFyOiBudW1iZXIsIG1vbnRoOiBudW1iZXJ9KSA9PiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgbGF0ZXN0IGRhdGUgdGhhdCBjYW4gYmUgZGlzcGxheWVkIG9yIHNlbGVjdGVkLlxuICAgKlxuICAgKiBJZiBub3QgcHJvdmlkZWQsICd5ZWFyJyBzZWxlY3QgYm94IHdpbGwgZGlzcGxheSAxMCB5ZWFycyBhZnRlciB0aGUgY3VycmVudCBtb250aC5cbiAgICovXG4gIEBJbnB1dCgpIG1heERhdGU6IE5nYkRhdGVTdHJ1Y3Q7XG5cbiAgLyoqXG4gICAqIFRoZSBlYXJsaWVzdCBkYXRlIHRoYXQgY2FuIGJlIGRpc3BsYXllZCBvciBzZWxlY3RlZC5cbiAgICpcbiAgICogSWYgbm90IHByb3ZpZGVkLCAneWVhcicgc2VsZWN0IGJveCB3aWxsIGRpc3BsYXkgMTAgeWVhcnMgYmVmb3JlIHRoZSBjdXJyZW50IG1vbnRoLlxuICAgKi9cbiAgQElucHV0KCkgbWluRGF0ZTogTmdiRGF0ZVN0cnVjdDtcblxuICAvKipcbiAgICogTmF2aWdhdGlvbiB0eXBlLlxuICAgKlxuICAgKiAqIGBcInNlbGVjdFwiYCAtIHNlbGVjdCBib3hlcyBmb3IgbW9udGggYW5kIG5hdmlnYXRpb24gYXJyb3dzXG4gICAqICogYFwiYXJyb3dzXCJgIC0gb25seSBuYXZpZ2F0aW9uIGFycm93c1xuICAgKiAqIGBcIm5vbmVcImAgLSBubyBuYXZpZ2F0aW9uIHZpc2libGUgYXQgYWxsXG4gICAqL1xuICBASW5wdXQoKSBuYXZpZ2F0aW9uOiAnc2VsZWN0JyB8ICdhcnJvd3MnIHwgJ25vbmUnO1xuXG4gIC8qKlxuICAgKiBUaGUgd2F5IG9mIGRpc3BsYXlpbmcgZGF5cyB0aGF0IGRvbid0IGJlbG9uZyB0byB0aGUgY3VycmVudCBtb250aC5cbiAgICpcbiAgICogKiBgXCJ2aXNpYmxlXCJgIC0gZGF5cyBhcmUgdmlzaWJsZVxuICAgKiAqIGBcImhpZGRlblwiYCAtIGRheXMgYXJlIGhpZGRlbiwgd2hpdGUgc3BhY2UgcHJlc2VydmVkXG4gICAqICogYFwiY29sbGFwc2VkXCJgIC0gZGF5cyBhcmUgY29sbGFwc2VkLCBzbyB0aGUgZGF0ZXBpY2tlciBoZWlnaHQgbWlnaHQgY2hhbmdlIGJldHdlZW4gbW9udGhzXG4gICAqXG4gICAqIEZvciB0aGUgMisgbW9udGhzIHZpZXcsIGRheXMgaW4gYmV0d2VlbiBtb250aHMgYXJlIG5ldmVyIHNob3duLlxuICAgKi9cbiAgQElucHV0KCkgb3V0c2lkZURheXM6ICd2aXNpYmxlJyB8ICdjb2xsYXBzZWQnIHwgJ2hpZGRlbic7XG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgd2Vla2RheXMgd2lsbCBiZSBkaXNwbGF5ZWQuXG4gICAqL1xuICBASW5wdXQoKSBzaG93V2Vla2RheXM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgd2VlayBudW1iZXJzIHdpbGwgYmUgZGlzcGxheWVkLlxuICAgKi9cbiAgQElucHV0KCkgc2hvd1dlZWtOdW1iZXJzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgZGF0ZSB0byBvcGVuIGNhbGVuZGFyIHdpdGguXG4gICAqXG4gICAqIFdpdGggdGhlIGRlZmF1bHQgY2FsZW5kYXIgd2UgdXNlIElTTyA4NjAxOiAnbW9udGgnIGlzIDE9SmFuIC4uLiAxMj1EZWMuXG4gICAqIElmIG5vdGhpbmcgb3IgaW52YWxpZCBkYXRlIGlzIHByb3ZpZGVkLCBjYWxlbmRhciB3aWxsIG9wZW4gd2l0aCBjdXJyZW50IG1vbnRoLlxuICAgKlxuICAgKiBZb3UgY291bGQgdXNlIGBuYXZpZ2F0ZVRvKGRhdGUpYCBtZXRob2QgYXMgYW4gYWx0ZXJuYXRpdmUuXG4gICAqL1xuICBASW5wdXQoKSBzdGFydERhdGU6IHt5ZWFyOiBudW1iZXIsIG1vbnRoOiBudW1iZXIsIGRheT86IG51bWJlcn07XG5cbiAgLyoqXG4gICAqIEFuIGV2ZW50IGVtaXR0ZWQgcmlnaHQgYmVmb3JlIHRoZSBuYXZpZ2F0aW9uIGhhcHBlbnMgYW5kIGRpc3BsYXllZCBtb250aCBjaGFuZ2VzLlxuICAgKlxuICAgKiBTZWUgW2BOZ2JEYXRlcGlja2VyTmF2aWdhdGVFdmVudGBdKCMvY29tcG9uZW50cy9kYXRlcGlja2VyL2FwaSNOZ2JEYXRlcGlja2VyTmF2aWdhdGVFdmVudCkgZm9yIHRoZSBwYXlsb2FkIGluZm8uXG4gICAqL1xuICBAT3V0cHV0KCkgbmF2aWdhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPE5nYkRhdGVwaWNrZXJOYXZpZ2F0ZUV2ZW50PigpO1xuXG4gIC8qKlxuICAgKiBBbiBldmVudCBlbWl0dGVkIHdoZW4gdXNlciBzZWxlY3RzIGEgZGF0ZSB1c2luZyBrZXlib2FyZCBvciBtb3VzZS5cbiAgICpcbiAgICogVGhlIHBheWxvYWQgb2YgdGhlIGV2ZW50IGlzIGN1cnJlbnRseSBzZWxlY3RlZCBgTmdiRGF0ZWAuXG4gICAqL1xuICBAT3V0cHV0KCkgc2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxOZ2JEYXRlPigpO1xuXG4gIG9uQ2hhbmdlID0gKF86IGFueSkgPT4ge307XG4gIG9uVG91Y2hlZCA9ICgpID0+IHt9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgcHJpdmF0ZSBfa2V5TWFwU2VydmljZTogTmdiRGF0ZXBpY2tlcktleU1hcFNlcnZpY2UsIHB1YmxpYyBfc2VydmljZTogTmdiRGF0ZXBpY2tlclNlcnZpY2UsXG4gICAgICBwcml2YXRlIF9jYWxlbmRhcjogTmdiQ2FsZW5kYXIsIHB1YmxpYyBpMThuOiBOZ2JEYXRlcGlja2VySTE4biwgY29uZmlnOiBOZ2JEYXRlcGlja2VyQ29uZmlnLFxuICAgICAgcHJpdmF0ZSBfY2Q6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgIHByaXZhdGUgX25nYkRhdGVBZGFwdGVyOiBOZ2JEYXRlQWRhcHRlcjxhbnk+LCBwcml2YXRlIF9uZ1pvbmU6IE5nWm9uZSkge1xuICAgIFsnZGF5VGVtcGxhdGUnLCAnZGF5VGVtcGxhdGVEYXRhJywgJ2Rpc3BsYXlNb250aHMnLCAnZmlyc3REYXlPZldlZWsnLCAnZm9vdGVyVGVtcGxhdGUnLCAnbWFya0Rpc2FibGVkJywgJ21pbkRhdGUnLFxuICAgICAnbWF4RGF0ZScsICduYXZpZ2F0aW9uJywgJ291dHNpZGVEYXlzJywgJ3Nob3dXZWVrZGF5cycsICdzaG93V2Vla051bWJlcnMnLCAnc3RhcnREYXRlJ11cbiAgICAgICAgLmZvckVhY2goaW5wdXQgPT4gdGhpc1tpbnB1dF0gPSBjb25maWdbaW5wdXRdKTtcblxuICAgIF9zZXJ2aWNlLnNlbGVjdCQucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkJCkpLnN1YnNjcmliZShkYXRlID0+IHsgdGhpcy5zZWxlY3QuZW1pdChkYXRlKTsgfSk7XG5cbiAgICBfc2VydmljZS5tb2RlbCQucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkJCkpLnN1YnNjcmliZShtb2RlbCA9PiB7XG4gICAgICBjb25zdCBuZXdEYXRlID0gbW9kZWwuZmlyc3REYXRlO1xuICAgICAgY29uc3Qgb2xkRGF0ZSA9IHRoaXMubW9kZWwgPyB0aGlzLm1vZGVsLmZpcnN0RGF0ZSA6IG51bGw7XG5cbiAgICAgIGxldCBuYXZpZ2F0aW9uUHJldmVudGVkID0gZmFsc2U7XG4gICAgICAvLyBlbWl0dGluZyBuYXZpZ2F0aW9uIGV2ZW50IGlmIHRoZSBmaXJzdCBtb250aCBjaGFuZ2VzXG4gICAgICBpZiAoIW5ld0RhdGUuZXF1YWxzKG9sZERhdGUpKSB7XG4gICAgICAgIHRoaXMubmF2aWdhdGUuZW1pdCh7XG4gICAgICAgICAgY3VycmVudDogb2xkRGF0ZSA/IHt5ZWFyOiBvbGREYXRlLnllYXIsIG1vbnRoOiBvbGREYXRlLm1vbnRofSA6IG51bGwsXG4gICAgICAgICAgbmV4dDoge3llYXI6IG5ld0RhdGUueWVhciwgbW9udGg6IG5ld0RhdGUubW9udGh9LFxuICAgICAgICAgIHByZXZlbnREZWZhdWx0OiAoKSA9PiBuYXZpZ2F0aW9uUHJldmVudGVkID0gdHJ1ZVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBjYW4ndCBwcmV2ZW50IHRoZSB2ZXJ5IGZpcnN0IG5hdmlnYXRpb25cbiAgICAgICAgaWYgKG5hdmlnYXRpb25QcmV2ZW50ZWQgJiYgb2xkRGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuX3NlcnZpY2Uub3BlbihvbGREYXRlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV3U2VsZWN0ZWREYXRlID0gbW9kZWwuc2VsZWN0ZWREYXRlO1xuICAgICAgY29uc3QgbmV3Rm9jdXNlZERhdGUgPSBtb2RlbC5mb2N1c0RhdGU7XG4gICAgICBjb25zdCBvbGRGb2N1c2VkRGF0ZSA9IHRoaXMubW9kZWwgPyB0aGlzLm1vZGVsLmZvY3VzRGF0ZSA6IG51bGw7XG5cbiAgICAgIHRoaXMubW9kZWwgPSBtb2RlbDtcblxuICAgICAgLy8gaGFuZGxpbmcgc2VsZWN0aW9uIGNoYW5nZVxuICAgICAgaWYgKGlzQ2hhbmdlZERhdGUobmV3U2VsZWN0ZWREYXRlLCB0aGlzLl9jb250cm9sVmFsdWUpKSB7XG4gICAgICAgIHRoaXMuX2NvbnRyb2xWYWx1ZSA9IG5ld1NlbGVjdGVkRGF0ZTtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLl9uZ2JEYXRlQWRhcHRlci50b01vZGVsKG5ld1NlbGVjdGVkRGF0ZSkpO1xuICAgICAgfVxuXG4gICAgICAvLyBoYW5kbGluZyBmb2N1cyBjaGFuZ2VcbiAgICAgIGlmIChpc0NoYW5nZWREYXRlKG5ld0ZvY3VzZWREYXRlLCBvbGRGb2N1c2VkRGF0ZSkgJiYgb2xkRm9jdXNlZERhdGUgJiYgbW9kZWwuZm9jdXNWaXNpYmxlKSB7XG4gICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgIH1cblxuICAgICAgX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuICB9XG5cbiAgZm9jdXMoKSB7XG4gICAgdGhpcy5fbmdab25lLm9uU3RhYmxlLmFzT2JzZXJ2YWJsZSgpLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID1cbiAgICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oJ2Rpdi5uZ2ItZHAtZGF5W3RhYmluZGV4PVwiMFwiXScpO1xuICAgICAgaWYgKGVsZW1lbnRUb0ZvY3VzKSB7XG4gICAgICAgIGVsZW1lbnRUb0ZvY3VzLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTmF2aWdhdGVzIHRvIHRoZSBwcm92aWRlZCBkYXRlLlxuICAgKlxuICAgKiBXaXRoIHRoZSBkZWZhdWx0IGNhbGVuZGFyIHdlIHVzZSBJU08gODYwMTogJ21vbnRoJyBpcyAxPUphbiAuLi4gMTI9RGVjLlxuICAgKiBJZiBub3RoaW5nIG9yIGludmFsaWQgZGF0ZSBwcm92aWRlZCBjYWxlbmRhciB3aWxsIG9wZW4gY3VycmVudCBtb250aC5cbiAgICpcbiAgICogVXNlIHRoZSBgW3N0YXJ0RGF0ZV1gIGlucHV0IGFzIGFuIGFsdGVybmF0aXZlLlxuICAgKi9cbiAgbmF2aWdhdGVUbyhkYXRlPzoge3llYXI6IG51bWJlciwgbW9udGg6IG51bWJlciwgZGF5PzogbnVtYmVyfSkge1xuICAgIHRoaXMuX3NlcnZpY2Uub3BlbihOZ2JEYXRlLmZyb20oZGF0ZSA/IGRhdGUuZGF5ID8gZGF0ZSBhcyBOZ2JEYXRlU3RydWN0IDogey4uLmRhdGUsIGRheTogMX0gOiBudWxsKSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIGNvbnN0IGZvY3VzSW5zJCA9IGZyb21FdmVudDxGb2N1c0V2ZW50Pih0aGlzLl9tb250aHNFbC5uYXRpdmVFbGVtZW50LCAnZm9jdXNpbicpO1xuICAgICAgY29uc3QgZm9jdXNPdXRzJCA9IGZyb21FdmVudDxGb2N1c0V2ZW50Pih0aGlzLl9tb250aHNFbC5uYXRpdmVFbGVtZW50LCAnZm9jdXNvdXQnKTtcblxuICAgICAgLy8gd2UncmUgY2hhbmdpbmcgJ2ZvY3VzVmlzaWJsZScgb25seSB3aGVuIGVudGVyaW5nIG9yIGxlYXZpbmcgbW9udGhzIHZpZXdcbiAgICAgIC8vIGFuZCBpZ25vcmluZyBhbGwgZm9jdXMgZXZlbnRzIHdoZXJlIGJvdGggJ3RhcmdldCcgYW5kICdyZWxhdGVkJyB0YXJnZXQgYXJlIGRheSBjZWxsc1xuICAgICAgbWVyZ2UoZm9jdXNJbnMkLCBmb2N1c091dHMkKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICBmaWx0ZXIoXG4gICAgICAgICAgICAgICAgICAoe3RhcmdldCwgcmVsYXRlZFRhcmdldH0pID0+XG4gICAgICAgICAgICAgICAgICAgICAgIShoYXNDbGFzc05hbWUodGFyZ2V0LCAnbmdiLWRwLWRheScpICYmIGhhc0NsYXNzTmFtZShyZWxhdGVkVGFyZ2V0LCAnbmdiLWRwLWRheScpKSksXG4gICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQkKSlcbiAgICAgICAgICAuc3Vic2NyaWJlKCh7dHlwZX0pID0+IHRoaXMuX25nWm9uZS5ydW4oKCkgPT4gdGhpcy5fc2VydmljZS5mb2N1c1Zpc2libGUgPSB0eXBlID09PSAnZm9jdXNpbicpKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkgeyB0aGlzLl9kZXN0cm95ZWQkLm5leHQoKTsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLm1vZGVsID09PSB1bmRlZmluZWQpIHtcbiAgICAgIFsnZGF5VGVtcGxhdGVEYXRhJywgJ2Rpc3BsYXlNb250aHMnLCAnbWFya0Rpc2FibGVkJywgJ2ZpcnN0RGF5T2ZXZWVrJywgJ25hdmlnYXRpb24nLCAnbWluRGF0ZScsICdtYXhEYXRlJyxcbiAgICAgICAnb3V0c2lkZURheXMnXVxuICAgICAgICAgIC5mb3JFYWNoKGlucHV0ID0+IHRoaXMuX3NlcnZpY2VbaW5wdXRdID0gdGhpc1tpbnB1dF0pO1xuICAgICAgdGhpcy5uYXZpZ2F0ZVRvKHRoaXMuc3RhcnREYXRlKTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgWydkYXlUZW1wbGF0ZURhdGEnLCAnZGlzcGxheU1vbnRocycsICdtYXJrRGlzYWJsZWQnLCAnZmlyc3REYXlPZldlZWsnLCAnbmF2aWdhdGlvbicsICdtaW5EYXRlJywgJ21heERhdGUnLFxuICAgICAnb3V0c2lkZURheXMnXVxuICAgICAgICAuZmlsdGVyKGlucHV0ID0+IGlucHV0IGluIGNoYW5nZXMpXG4gICAgICAgIC5mb3JFYWNoKGlucHV0ID0+IHRoaXMuX3NlcnZpY2VbaW5wdXRdID0gdGhpc1tpbnB1dF0pO1xuXG4gICAgaWYgKCdzdGFydERhdGUnIGluIGNoYW5nZXMpIHtcbiAgICAgIGNvbnN0IHtjdXJyZW50VmFsdWUsIHByZXZpb3VzVmFsdWV9ID0gY2hhbmdlcy5zdGFydERhdGU7XG4gICAgICBpZiAoaXNDaGFuZ2VkTW9udGgocHJldmlvdXNWYWx1ZSwgY3VycmVudFZhbHVlKSkge1xuICAgICAgICB0aGlzLm5hdmlnYXRlVG8odGhpcy5zdGFydERhdGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uRGF0ZVNlbGVjdChkYXRlOiBOZ2JEYXRlKSB7XG4gICAgdGhpcy5fc2VydmljZS5mb2N1cyhkYXRlKTtcbiAgICB0aGlzLl9zZXJ2aWNlLnNlbGVjdChkYXRlLCB7ZW1pdEV2ZW50OiB0cnVlfSk7XG4gIH1cblxuICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHsgdGhpcy5fa2V5TWFwU2VydmljZS5wcm9jZXNzS2V5KGV2ZW50KTsgfVxuXG4gIG9uTmF2aWdhdGVEYXRlU2VsZWN0KGRhdGU6IE5nYkRhdGUpIHsgdGhpcy5fc2VydmljZS5vcGVuKGRhdGUpOyB9XG5cbiAgb25OYXZpZ2F0ZUV2ZW50KGV2ZW50OiBOYXZpZ2F0aW9uRXZlbnQpIHtcbiAgICBzd2l0Y2ggKGV2ZW50KSB7XG4gICAgICBjYXNlIE5hdmlnYXRpb25FdmVudC5QUkVWOlxuICAgICAgICB0aGlzLl9zZXJ2aWNlLm9wZW4odGhpcy5fY2FsZW5kYXIuZ2V0UHJldih0aGlzLm1vZGVsLmZpcnN0RGF0ZSwgJ20nLCAxKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBOYXZpZ2F0aW9uRXZlbnQuTkVYVDpcbiAgICAgICAgdGhpcy5fc2VydmljZS5vcGVuKHRoaXMuX2NhbGVuZGFyLmdldE5leHQodGhpcy5tb2RlbC5maXJzdERhdGUsICdtJywgMSkpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IGFueSkgPT4gYW55KTogdm9pZCB7IHRoaXMub25DaGFuZ2UgPSBmbjsgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiBhbnkpOiB2b2lkIHsgdGhpcy5vblRvdWNoZWQgPSBmbjsgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbikgeyB0aGlzLl9zZXJ2aWNlLmRpc2FibGVkID0gaXNEaXNhYmxlZDsgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWUpIHtcbiAgICB0aGlzLl9jb250cm9sVmFsdWUgPSBOZ2JEYXRlLmZyb20odGhpcy5fbmdiRGF0ZUFkYXB0ZXIuZnJvbU1vZGVsKHZhbHVlKSk7XG4gICAgdGhpcy5fc2VydmljZS5zZWxlY3QodGhpcy5fY29udHJvbFZhbHVlKTtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/datepicker/datepicker.module.js b/dist/sunbird-ui-components/esm2015/datepicker/datepicker.module.js new file mode 100644 index 0000000..aaab68c --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/datepicker/datepicker.module.js @@ -0,0 +1,46 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; +import { NgbDatepicker } from './datepicker'; +import { NgbDatepickerMonthView } from './datepicker-month-view'; +import { NgbDatepickerNavigation } from './datepicker-navigation'; +import { NgbInputDatepicker } from './datepicker-input'; +import { NgbDatepickerDayView } from './datepicker-day-view'; +import { NgbDatepickerNavigationSelect } from './datepicker-navigation-select'; +export { NgbDatepicker } from './datepicker'; +export { NgbInputDatepicker } from './datepicker-input'; +export { NgbCalendar, NgbCalendarGregorian } from './ngb-calendar'; +export { NgbCalendarIslamicCivil } from './hijri/ngb-calendar-islamic-civil'; +export { NgbCalendarIslamicUmalqura } from './hijri/ngb-calendar-islamic-umalqura'; +export { NgbCalendarPersian } from './jalali/ngb-calendar-persian'; +export { NgbCalendarHebrew } from './hebrew/ngb-calendar-hebrew'; +export { NgbDatepickerI18nHebrew } from './hebrew/datepicker-i18n-hebrew'; +export { NgbDatepickerMonthView } from './datepicker-month-view'; +export { NgbDatepickerDayView } from './datepicker-day-view'; +export { NgbDatepickerNavigation } from './datepicker-navigation'; +export { NgbDatepickerNavigationSelect } from './datepicker-navigation-select'; +export { NgbDatepickerConfig } from './datepicker-config'; +export { NgbDatepickerI18n } from './datepicker-i18n'; +export { NgbDate } from './ngb-date'; +export { NgbDateAdapter } from './adapters/ngb-date-adapter'; +export { NgbDateNativeAdapter } from './adapters/ngb-date-native-adapter'; +export { NgbDateNativeUTCAdapter } from './adapters/ngb-date-native-utc-adapter'; +export { NgbDateParserFormatter } from './ngb-date-parser-formatter'; +export class NgbDatepickerModule { +} +NgbDatepickerModule.decorators = [ + { type: NgModule, args: [{ + declarations: [ + NgbDatepicker, NgbDatepickerMonthView, NgbDatepickerNavigation, NgbDatepickerNavigationSelect, NgbDatepickerDayView, + NgbInputDatepicker + ], + exports: [NgbDatepicker, NgbInputDatepicker], + imports: [CommonModule, FormsModule], + entryComponents: [NgbDatepicker] + },] } +]; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5tb2R1bGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJkYXRlcGlja2VyL2RhdGVwaWNrZXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUMzQyxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUMvRCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRSxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUMzRCxPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUU3RSxPQUFPLEVBQUMsYUFBYSxFQUE2QixNQUFNLGNBQWMsQ0FBQztBQUN2RSxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RCxPQUFPLEVBQUMsV0FBVyxFQUFhLG9CQUFvQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUUsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDM0UsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFDakYsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDeEUsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDL0QsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDM0QsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDaEUsT0FBTyxFQUFDLDZCQUE2QixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDN0UsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDeEQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFcEQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFlBQVksQ0FBQztBQUNuQyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDeEUsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sd0NBQXdDLENBQUM7QUFDL0UsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFXbkUsTUFBTSxPQUFPLG1CQUFtQjs7O1lBVC9CLFFBQVEsU0FBQztnQkFDUixZQUFZLEVBQUU7b0JBQ1osYUFBYSxFQUFFLHNCQUFzQixFQUFFLHVCQUF1QixFQUFFLDZCQUE2QixFQUFFLG9CQUFvQjtvQkFDbkgsa0JBQWtCO2lCQUNuQjtnQkFDRCxPQUFPLEVBQUUsQ0FBQyxhQUFhLEVBQUUsa0JBQWtCLENBQUM7Z0JBQzVDLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxXQUFXLENBQUM7Z0JBQ3BDLGVBQWUsRUFBRSxDQUFDLGFBQWEsQ0FBQzthQUNqQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge0Zvcm1zTW9kdWxlfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge05nYkRhdGVwaWNrZXJ9IGZyb20gJy4vZGF0ZXBpY2tlcic7XG5pbXBvcnQge05nYkRhdGVwaWNrZXJNb250aFZpZXd9IGZyb20gJy4vZGF0ZXBpY2tlci1tb250aC12aWV3JztcbmltcG9ydCB7TmdiRGF0ZXBpY2tlck5hdmlnYXRpb259IGZyb20gJy4vZGF0ZXBpY2tlci1uYXZpZ2F0aW9uJztcbmltcG9ydCB7TmdiSW5wdXREYXRlcGlja2VyfSBmcm9tICcuL2RhdGVwaWNrZXItaW5wdXQnO1xuaW1wb3J0IHtOZ2JEYXRlcGlja2VyRGF5Vmlld30gZnJvbSAnLi9kYXRlcGlja2VyLWRheS12aWV3JztcbmltcG9ydCB7TmdiRGF0ZXBpY2tlck5hdmlnYXRpb25TZWxlY3R9IGZyb20gJy4vZGF0ZXBpY2tlci1uYXZpZ2F0aW9uLXNlbGVjdCc7XG5cbmV4cG9ydCB7TmdiRGF0ZXBpY2tlciwgTmdiRGF0ZXBpY2tlck5hdmlnYXRlRXZlbnR9IGZyb20gJy4vZGF0ZXBpY2tlcic7XG5leHBvcnQge05nYklucHV0RGF0ZXBpY2tlcn0gZnJvbSAnLi9kYXRlcGlja2VyLWlucHV0JztcbmV4cG9ydCB7TmdiQ2FsZW5kYXIsIE5nYlBlcmlvZCwgTmdiQ2FsZW5kYXJHcmVnb3JpYW59IGZyb20gJy4vbmdiLWNhbGVuZGFyJztcbmV4cG9ydCB7TmdiQ2FsZW5kYXJJc2xhbWljQ2l2aWx9IGZyb20gJy4vaGlqcmkvbmdiLWNhbGVuZGFyLWlzbGFtaWMtY2l2aWwnO1xuZXhwb3J0IHtOZ2JDYWxlbmRhcklzbGFtaWNVbWFscXVyYX0gZnJvbSAnLi9oaWpyaS9uZ2ItY2FsZW5kYXItaXNsYW1pYy11bWFscXVyYSc7XG5leHBvcnQge05nYkNhbGVuZGFyUGVyc2lhbn0gZnJvbSAnLi9qYWxhbGkvbmdiLWNhbGVuZGFyLXBlcnNpYW4nO1xuZXhwb3J0IHtOZ2JDYWxlbmRhckhlYnJld30gZnJvbSAnLi9oZWJyZXcvbmdiLWNhbGVuZGFyLWhlYnJldyc7XG5leHBvcnQge05nYkRhdGVwaWNrZXJJMThuSGVicmV3fSBmcm9tICcuL2hlYnJldy9kYXRlcGlja2VyLWkxOG4taGVicmV3JztcbmV4cG9ydCB7TmdiRGF0ZXBpY2tlck1vbnRoVmlld30gZnJvbSAnLi9kYXRlcGlja2VyLW1vbnRoLXZpZXcnO1xuZXhwb3J0IHtOZ2JEYXRlcGlja2VyRGF5Vmlld30gZnJvbSAnLi9kYXRlcGlja2VyLWRheS12aWV3JztcbmV4cG9ydCB7TmdiRGF0ZXBpY2tlck5hdmlnYXRpb259IGZyb20gJy4vZGF0ZXBpY2tlci1uYXZpZ2F0aW9uJztcbmV4cG9ydCB7TmdiRGF0ZXBpY2tlck5hdmlnYXRpb25TZWxlY3R9IGZyb20gJy4vZGF0ZXBpY2tlci1uYXZpZ2F0aW9uLXNlbGVjdCc7XG5leHBvcnQge05nYkRhdGVwaWNrZXJDb25maWd9IGZyb20gJy4vZGF0ZXBpY2tlci1jb25maWcnO1xuZXhwb3J0IHtOZ2JEYXRlcGlja2VySTE4bn0gZnJvbSAnLi9kYXRlcGlja2VyLWkxOG4nO1xuZXhwb3J0IHtOZ2JEYXRlU3RydWN0fSBmcm9tICcuL25nYi1kYXRlLXN0cnVjdCc7XG5leHBvcnQge05nYkRhdGV9IGZyb20gJy4vbmdiLWRhdGUnO1xuZXhwb3J0IHtOZ2JEYXRlQWRhcHRlcn0gZnJvbSAnLi9hZGFwdGVycy9uZ2ItZGF0ZS1hZGFwdGVyJztcbmV4cG9ydCB7TmdiRGF0ZU5hdGl2ZUFkYXB0ZXJ9IGZyb20gJy4vYWRhcHRlcnMvbmdiLWRhdGUtbmF0aXZlLWFkYXB0ZXInO1xuZXhwb3J0IHtOZ2JEYXRlTmF0aXZlVVRDQWRhcHRlcn0gZnJvbSAnLi9hZGFwdGVycy9uZ2ItZGF0ZS1uYXRpdmUtdXRjLWFkYXB0ZXInO1xuZXhwb3J0IHtOZ2JEYXRlUGFyc2VyRm9ybWF0dGVyfSBmcm9tICcuL25nYi1kYXRlLXBhcnNlci1mb3JtYXR0ZXInO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtcbiAgICBOZ2JEYXRlcGlja2VyLCBOZ2JEYXRlcGlja2VyTW9udGhWaWV3LCBOZ2JEYXRlcGlja2VyTmF2aWdhdGlvbiwgTmdiRGF0ZXBpY2tlck5hdmlnYXRpb25TZWxlY3QsIE5nYkRhdGVwaWNrZXJEYXlWaWV3LFxuICAgIE5nYklucHV0RGF0ZXBpY2tlclxuICBdLFxuICBleHBvcnRzOiBbTmdiRGF0ZXBpY2tlciwgTmdiSW5wdXREYXRlcGlja2VyXSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGVdLFxuICBlbnRyeUNvbXBvbmVudHM6IFtOZ2JEYXRlcGlja2VyXVxufSlcbmV4cG9ydCBjbGFzcyBOZ2JEYXRlcGlja2VyTW9kdWxlIHtcbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/datepicker/hebrew/datepicker-i18n-hebrew.js b/dist/sunbird-ui-components/esm2015/datepicker/hebrew/datepicker-i18n-hebrew.js new file mode 100644 index 0000000..b2fd1a3 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/datepicker/hebrew/datepicker-i18n-hebrew.js @@ -0,0 +1,63 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgbDatepickerI18n } from '../datepicker-i18n'; +import { hebrewNumerals, isHebrewLeapYear } from './hebrew'; +import { Injectable } from '@angular/core'; +/** @type {?} */ +const WEEKDAYS = ['שני', 'שלישי', 'רביעי', 'חמישי', 'שישי', 'שבת', 'ראשון']; +/** @type {?} */ +const MONTHS = ['תשרי', 'חשון', 'כסלו', 'טבת', 'שבט', 'אדר', 'ניסן', 'אייר', 'סיון', 'תמוז', 'אב', 'אלול']; +/** @type {?} */ +const MONTHS_LEAP = ['תשרי', 'חשון', 'כסלו', 'טבת', 'שבט', 'אדר א׳', 'אדר ב׳', 'ניסן', 'אייר', 'סיון', 'תמוז', 'אב', 'אלול']; +/** + * \@since 3.2.0 + */ +export class NgbDatepickerI18nHebrew extends NgbDatepickerI18n { + /** + * @param {?} month + * @param {?=} year + * @return {?} + */ + getMonthShortName(month, year) { return this.getMonthFullName(month, year); } + /** + * @param {?} month + * @param {?=} year + * @return {?} + */ + getMonthFullName(month, year) { + return isHebrewLeapYear(year) ? MONTHS_LEAP[month - 1] : MONTHS[month - 1]; + } + /** + * @param {?} weekday + * @return {?} + */ + getWeekdayShortName(weekday) { return WEEKDAYS[weekday - 1]; } + /** + * @param {?} date + * @return {?} + */ + getDayAriaLabel(date) { + return `${hebrewNumerals(date.day)} ${this.getMonthFullName(date.month, date.year)} ${hebrewNumerals(date.year)}`; + } + /** + * @param {?} date + * @return {?} + */ + getDayNumerals(date) { return hebrewNumerals(date.day); } + /** + * @param {?} weekNumber + * @return {?} + */ + getWeekNumerals(weekNumber) { return hebrewNumerals(weekNumber); } + /** + * @param {?} year + * @return {?} + */ + getYearNumerals(year) { return hebrewNumerals(year); } +} +NgbDatepickerI18nHebrew.decorators = [ + { type: Injectable } +]; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1pMThuLWhlYnJldy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImRhdGVwaWNrZXIvaGVicmV3L2RhdGVwaWNrZXItaTE4bi1oZWJyZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRXJELE9BQU8sRUFBQyxjQUFjLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDMUQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQzs7TUFHbkMsUUFBUSxHQUFHLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDOztNQUNyRSxNQUFNLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQzs7TUFDcEcsV0FBVyxHQUNiLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDOzs7O0FBTTVHLE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxpQkFBaUI7Ozs7OztJQUM1RCxpQkFBaUIsQ0FBQyxLQUFhLEVBQUUsSUFBYSxJQUFZLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Ozs7OztJQUV0RyxnQkFBZ0IsQ0FBQyxLQUFhLEVBQUUsSUFBYTtRQUMzQyxPQUFPLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzdFLENBQUM7Ozs7O0lBRUQsbUJBQW1CLENBQUMsT0FBZSxJQUFZLE9BQU8sUUFBUSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Ozs7O0lBRTlFLGVBQWUsQ0FBQyxJQUFtQjtRQUNqQyxPQUFPLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ3BILENBQUM7Ozs7O0lBRUQsY0FBYyxDQUFDLElBQW1CLElBQVksT0FBTyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7Ozs7SUFFaEYsZUFBZSxDQUFDLFVBQWtCLElBQVksT0FBTyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7OztJQUVsRixlQUFlLENBQUMsSUFBWSxJQUFZLE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O1lBbEJ2RSxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOZ2JEYXRlcGlja2VySTE4bn0gZnJvbSAnLi4vZGF0ZXBpY2tlci1pMThuJztcbmltcG9ydCB7TmdiRGF0ZVN0cnVjdH0gZnJvbSAnLi4vLi4vaW5kZXgnO1xuaW1wb3J0IHtoZWJyZXdOdW1lcmFscywgaXNIZWJyZXdMZWFwWWVhcn0gZnJvbSAnLi9oZWJyZXcnO1xuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuXG5jb25zdCBXRUVLREFZUyA9IFsn16nXoNeZJywgJ9ep15zXmdep15knLCAn16jXkdeZ16LXmScsICfXl9ee15nXqdeZJywgJ9ep15nXqdeZJywgJ9ep15HXqicsICfXqNeQ16nXldefJ107XG5jb25zdCBNT05USFMgPSBbJ9eq16nXqNeZJywgJ9eX16nXldefJywgJ9eb16HXnNeVJywgJ9eY15HXqicsICfXqdeR15gnLCAn15DXk9eoJywgJ9eg15nXodefJywgJ9eQ15nXmdeoJywgJ9eh15nXldefJywgJ9eq157XldeWJywgJ9eQ15EnLCAn15DXnNeV15wnXTtcbmNvbnN0IE1PTlRIU19MRUFQID1cbiAgICBbJ9eq16nXqNeZJywgJ9eX16nXldefJywgJ9eb16HXnNeVJywgJ9eY15HXqicsICfXqdeR15gnLCAn15DXk9eoINeQ17MnLCAn15DXk9eoINeR17MnLCAn16DXmdeh158nLCAn15DXmdeZ16gnLCAn16HXmdeV158nLCAn16rXnteV15YnLCAn15DXkScsICfXkNec15XXnCddO1xuXG4vKipcbiAqIEBzaW5jZSAzLjIuMFxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTmdiRGF0ZXBpY2tlckkxOG5IZWJyZXcgZXh0ZW5kcyBOZ2JEYXRlcGlja2VySTE4biB7XG4gIGdldE1vbnRoU2hvcnROYW1lKG1vbnRoOiBudW1iZXIsIHllYXI/OiBudW1iZXIpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5nZXRNb250aEZ1bGxOYW1lKG1vbnRoLCB5ZWFyKTsgfVxuXG4gIGdldE1vbnRoRnVsbE5hbWUobW9udGg6IG51bWJlciwgeWVhcj86IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGlzSGVicmV3TGVhcFllYXIoeWVhcikgPyBNT05USFNfTEVBUFttb250aCAtIDFdIDogTU9OVEhTW21vbnRoIC0gMV07XG4gIH1cblxuICBnZXRXZWVrZGF5U2hvcnROYW1lKHdlZWtkYXk6IG51bWJlcik6IHN0cmluZyB7IHJldHVybiBXRUVLREFZU1t3ZWVrZGF5IC0gMV07IH1cblxuICBnZXREYXlBcmlhTGFiZWwoZGF0ZTogTmdiRGF0ZVN0cnVjdCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke2hlYnJld051bWVyYWxzKGRhdGUuZGF5KX0gJHt0aGlzLmdldE1vbnRoRnVsbE5hbWUoZGF0ZS5tb250aCwgZGF0ZS55ZWFyKX0gJHtoZWJyZXdOdW1lcmFscyhkYXRlLnllYXIpfWA7XG4gIH1cblxuICBnZXREYXlOdW1lcmFscyhkYXRlOiBOZ2JEYXRlU3RydWN0KTogc3RyaW5nIHsgcmV0dXJuIGhlYnJld051bWVyYWxzKGRhdGUuZGF5KTsgfVxuXG4gIGdldFdlZWtOdW1lcmFscyh3ZWVrTnVtYmVyOiBudW1iZXIpOiBzdHJpbmcgeyByZXR1cm4gaGVicmV3TnVtZXJhbHMod2Vla051bWJlcik7IH1cblxuICBnZXRZZWFyTnVtZXJhbHMoeWVhcjogbnVtYmVyKTogc3RyaW5nIHsgcmV0dXJuIGhlYnJld051bWVyYWxzKHllYXIpOyB9XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/datepicker/hebrew/hebrew.js b/dist/sunbird-ui-components/esm2015/datepicker/hebrew/hebrew.js new file mode 100644 index 0000000..8cc7e74 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/datepicker/hebrew/hebrew.js @@ -0,0 +1,406 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgbDate } from '../ngb-date'; +/** @type {?} */ +const PARTS_PER_HOUR = 1080; +/** @type {?} */ +const PARTS_PER_DAY = 24 * PARTS_PER_HOUR; +/** @type {?} */ +const PARTS_FRACTIONAL_MONTH = 12 * PARTS_PER_HOUR + 793; +/** @type {?} */ +const PARTS_PER_MONTH = 29 * PARTS_PER_DAY + PARTS_FRACTIONAL_MONTH; +/** @type {?} */ +const BAHARAD = 11 * PARTS_PER_HOUR + 204; +/** @type {?} */ +const HEBREW_DAY_ON_JAN_1_1970 = 2092591; +/** @type {?} */ +const GREGORIAN_EPOCH = 1721425.5; +/** + * @param {?} year + * @return {?} + */ +function isGregorianLeapYear(year) { + return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0; +} +/** + * @param {?} year + * @return {?} + */ +function numberOfFirstDayInYear(year) { + /** @type {?} */ + let monthsBeforeYear = Math.floor((235 * year - 234) / 19); + /** @type {?} */ + let fractionalMonthsBeforeYear = monthsBeforeYear * PARTS_FRACTIONAL_MONTH + BAHARAD; + /** @type {?} */ + let dayNumber = monthsBeforeYear * 29 + Math.floor(fractionalMonthsBeforeYear / PARTS_PER_DAY); + /** @type {?} */ + let timeOfDay = fractionalMonthsBeforeYear % PARTS_PER_DAY; + /** @type {?} */ + let dayOfWeek = dayNumber % 7; + if (dayOfWeek === 2 || dayOfWeek === 4 || dayOfWeek === 6) { + dayNumber++; + dayOfWeek = dayNumber % 7; + } + if (dayOfWeek === 1 && timeOfDay > 15 * PARTS_PER_HOUR + 204 && !isHebrewLeapYear(year)) { + dayNumber += 2; + } + else if (dayOfWeek === 0 && timeOfDay > 21 * PARTS_PER_HOUR + 589 && isHebrewLeapYear(year - 1)) { + dayNumber++; + } + return dayNumber; +} +/** + * @param {?} month + * @param {?} year + * @return {?} + */ +function getDaysInGregorianMonth(month, year) { + /** @type {?} */ + let days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + if (isGregorianLeapYear(year)) { + days[1]++; + } + return days[month - 1]; +} +/** + * @param {?} year + * @return {?} + */ +function getHebrewMonths(year) { + return isHebrewLeapYear(year) ? 13 : 12; +} +/** + * Returns the number of days in a specific Hebrew year. + * `year` is any Hebrew year. + * @param {?} year + * @return {?} + */ +function getDaysInHebrewYear(year) { + return numberOfFirstDayInYear(year + 1) - numberOfFirstDayInYear(year); +} +/** + * @param {?} year + * @return {?} + */ +export function isHebrewLeapYear(year) { + /** @type {?} */ + let b = (year * 12 + 17) % 19; + return b >= ((b < 0) ? -7 : 12); +} +/** + * Returns the number of days in a specific Hebrew month. + * `month` is 1 for Nisan, 2 for Iyar etc. Note: Hebrew leap year contains 13 months. + * `year` is any Hebrew year. + * @param {?} month + * @param {?} year + * @return {?} + */ +export function getDaysInHebrewMonth(month, year) { + /** @type {?} */ + let yearLength = numberOfFirstDayInYear(year + 1) - numberOfFirstDayInYear(year); + /** @type {?} */ + let yearType = (yearLength <= 380 ? yearLength : (yearLength - 30)) - 353; + /** @type {?} */ + let leapYear = isHebrewLeapYear(year); + /** @type {?} */ + let daysInMonth = leapYear ? [30, 29, 29, 29, 30, 30, 29, 30, 29, 30, 29, 30, 29] : + [30, 29, 29, 29, 30, 29, 30, 29, 30, 29, 30, 29]; + if (yearType > 0) { + daysInMonth[2]++; // Kislev gets an extra day in normal or complete years. + } + if (yearType > 1) { + daysInMonth[1]++; // Heshvan gets an extra day in complete years only. + } + return daysInMonth[month - 1]; +} +/** + * @param {?} date + * @return {?} + */ +export function getDayNumberInHebrewYear(date) { + /** @type {?} */ + let numberOfDay = 0; + for (let i = 1; i < date.month; i++) { + numberOfDay += getDaysInHebrewMonth(i, date.year); + } + return numberOfDay + date.day; +} +/** + * @param {?} date + * @param {?} val + * @return {?} + */ +export function setHebrewMonth(date, val) { + /** @type {?} */ + let after = val >= 0; + if (!after) { + val = -val; + } + while (val > 0) { + if (after) { + if (val > getHebrewMonths(date.year) - date.month) { + val -= getHebrewMonths(date.year) - date.month + 1; + date.year++; + date.month = 1; + } + else { + date.month += val; + val = 0; + } + } + else { + if (val >= date.month) { + date.year--; + val -= date.month; + date.month = getHebrewMonths(date.year); + } + else { + date.month -= val; + val = 0; + } + } + } + return date; +} +/** + * @param {?} date + * @param {?} val + * @return {?} + */ +export function setHebrewDay(date, val) { + /** @type {?} */ + let after = val >= 0; + if (!after) { + val = -val; + } + while (val > 0) { + if (after) { + if (val > getDaysInHebrewYear(date.year) - getDayNumberInHebrewYear(date)) { + val -= getDaysInHebrewYear(date.year) - getDayNumberInHebrewYear(date) + 1; + date.year++; + date.month = 1; + date.day = 1; + } + else if (val > getDaysInHebrewMonth(date.month, date.year) - date.day) { + val -= getDaysInHebrewMonth(date.month, date.year) - date.day + 1; + date.month++; + date.day = 1; + } + else { + date.day += val; + val = 0; + } + } + else { + if (val >= date.day) { + val -= date.day; + date.month--; + if (date.month === 0) { + date.year--; + date.month = getHebrewMonths(date.year); + } + date.day = getDaysInHebrewMonth(date.month, date.year); + } + else { + date.day -= val; + val = 0; + } + } + } + return date; +} +/** + * Returns the equivalent Hebrew date value for a give input Gregorian date. + * `gdate` is a JS Date to be converted to Hebrew date. + * @param {?} gdate + * @return {?} + */ +export function fromGregorian(gdate) { + /** @type {?} */ + const date = new Date(gdate); + /** @type {?} */ + const gYear = date.getFullYear(); + /** @type {?} */ + const gMonth = date.getMonth(); + /** @type {?} */ + const gDay = date.getDate(); + /** @type {?} */ + let julianDay = GREGORIAN_EPOCH - 1 + 365 * (gYear - 1) + Math.floor((gYear - 1) / 4) - + Math.floor((gYear - 1) / 100) + Math.floor((gYear - 1) / 400) + + Math.floor((367 * (gMonth + 1) - 362) / 12 + (gMonth + 1 <= 2 ? 0 : isGregorianLeapYear(gYear) ? -1 : -2) + gDay); + julianDay = Math.floor(julianDay + 0.5); + /** @type {?} */ + let daysSinceHebEpoch = julianDay - 347997; + /** @type {?} */ + let monthsSinceHebEpoch = Math.floor(daysSinceHebEpoch * PARTS_PER_DAY / PARTS_PER_MONTH); + /** @type {?} */ + let hYear = Math.floor((monthsSinceHebEpoch * 19 + 234) / 235) + 1; + /** @type {?} */ + let firstDayOfThisYear = numberOfFirstDayInYear(hYear); + /** @type {?} */ + let dayOfYear = daysSinceHebEpoch - firstDayOfThisYear; + while (dayOfYear < 1) { + hYear--; + firstDayOfThisYear = numberOfFirstDayInYear(hYear); + dayOfYear = daysSinceHebEpoch - firstDayOfThisYear; + } + /** @type {?} */ + let hMonth = 1; + /** @type {?} */ + let hDay = dayOfYear; + while (hDay > getDaysInHebrewMonth(hMonth, hYear)) { + hDay -= getDaysInHebrewMonth(hMonth, hYear); + hMonth++; + } + return new NgbDate(hYear, hMonth, hDay); +} +/** + * Returns the equivalent JS date value for a given Hebrew date. + * `hebrewDate` is an Hebrew date to be converted to Gregorian. + * @param {?} hebrewDate + * @return {?} + */ +export function toGregorian(hebrewDate) { + /** @type {?} */ + const hYear = hebrewDate.year; + /** @type {?} */ + const hMonth = hebrewDate.month; + /** @type {?} */ + const hDay = hebrewDate.day; + /** @type {?} */ + let days = numberOfFirstDayInYear(hYear); + for (let i = 1; i < hMonth; i++) { + days += getDaysInHebrewMonth(i, hYear); + } + days += hDay; + /** @type {?} */ + let diffDays = days - HEBREW_DAY_ON_JAN_1_1970; + /** @type {?} */ + let after = diffDays >= 0; + if (!after) { + diffDays = -diffDays; + } + /** @type {?} */ + let gYear = 1970; + /** @type {?} */ + let gMonth = 1; + /** @type {?} */ + let gDay = 1; + while (diffDays > 0) { + if (after) { + if (diffDays >= (isGregorianLeapYear(gYear) ? 366 : 365)) { + diffDays -= isGregorianLeapYear(gYear) ? 366 : 365; + gYear++; + } + else if (diffDays >= getDaysInGregorianMonth(gMonth, gYear)) { + diffDays -= getDaysInGregorianMonth(gMonth, gYear); + gMonth++; + } + else { + gDay += diffDays; + diffDays = 0; + } + } + else { + if (diffDays >= (isGregorianLeapYear(gYear - 1) ? 366 : 365)) { + diffDays -= isGregorianLeapYear(gYear - 1) ? 366 : 365; + gYear--; + } + else { + if (gMonth > 1) { + gMonth--; + } + else { + gMonth = 12; + gYear--; + } + if (diffDays >= getDaysInGregorianMonth(gMonth, gYear)) { + diffDays -= getDaysInGregorianMonth(gMonth, gYear); + } + else { + gDay = getDaysInGregorianMonth(gMonth, gYear) - diffDays + 1; + diffDays = 0; + } + } + } + } + return new Date(gYear, gMonth - 1, gDay); +} +/** + * @param {?} numerals + * @return {?} + */ +export function hebrewNumerals(numerals) { + if (!numerals) { + return ''; + } + /** @type {?} */ + const hArray0_9 = ['', '\u05d0', '\u05d1', '\u05d2', '\u05d3', '\u05d4', '\u05d5', '\u05d6', '\u05d7', '\u05d8']; + /** @type {?} */ + const hArray10_19 = [ + '\u05d9', '\u05d9\u05d0', '\u05d9\u05d1', '\u05d9\u05d2', '\u05d9\u05d3', '\u05d8\u05d5', '\u05d8\u05d6', + '\u05d9\u05d6', '\u05d9\u05d7', '\u05d9\u05d8' + ]; + /** @type {?} */ + const hArray20_90 = ['', '', '\u05db', '\u05dc', '\u05de', '\u05e0', '\u05e1', '\u05e2', '\u05e4', '\u05e6']; + /** @type {?} */ + const hArray100_900 = [ + '', '\u05e7', '\u05e8', '\u05e9', '\u05ea', '\u05ea\u05e7', '\u05ea\u05e8', '\u05ea\u05e9', '\u05ea\u05ea', + '\u05ea\u05ea\u05e7' + ]; + /** @type {?} */ + const hArray1000_9000 = [ + '', '\u05d0', '\u05d1', '\u05d1\u05d0', '\u05d1\u05d1', '\u05d4', '\u05d4\u05d0', '\u05d4\u05d1', + '\u05d4\u05d1\u05d0', '\u05d4\u05d1\u05d1' + ]; + /** @type {?} */ + const geresh = '\u05f3'; + /** @type {?} */ + const gershaim = '\u05f4'; + /** @type {?} */ + let mem = 0; + /** @type {?} */ + let result = []; + /** @type {?} */ + let step = 0; + while (numerals > 0) { + /** @type {?} */ + let m = numerals % 10; + if (step === 0) { + mem = m; + } + else if (step === 1) { + if (m !== 1) { + result.unshift(hArray20_90[m], hArray0_9[mem]); + } + else { + result.unshift(hArray10_19[mem]); + } + } + else if (step === 2) { + result.unshift(hArray100_900[m]); + } + else { + if (m !== 5) { + result.unshift(hArray1000_9000[m], geresh, ' '); + } + break; + } + numerals = Math.floor(numerals / 10); + if (step === 0 && numerals === 0) { + result.unshift(hArray0_9[m]); + } + step++; + } + result = result.join('').split(''); + if (result.length === 1) { + result.push(geresh); + } + else if (result.length > 1) { + result.splice(result.length - 1, 0, gershaim); + } + return result.join(''); +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVicmV3LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiZGF0ZXBpY2tlci9oZWJyZXcvaGVicmV3LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sYUFBYSxDQUFDOztNQUc5QixjQUFjLEdBQUcsSUFBSTs7TUFDckIsYUFBYSxHQUFHLEVBQUUsR0FBRyxjQUFjOztNQUNuQyxzQkFBc0IsR0FBRyxFQUFFLEdBQUcsY0FBYyxHQUFHLEdBQUc7O01BQ2xELGVBQWUsR0FBRyxFQUFFLEdBQUcsYUFBYSxHQUFHLHNCQUFzQjs7TUFDN0QsT0FBTyxHQUFHLEVBQUUsR0FBRyxjQUFjLEdBQUcsR0FBRzs7TUFDbkMsd0JBQXdCLEdBQUcsT0FBTzs7TUFDbEMsZUFBZSxHQUFHLFNBQVM7Ozs7O0FBRWpDLFNBQVMsbUJBQW1CLENBQUMsSUFBWTtJQUN2QyxPQUFPLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ2hFLENBQUM7Ozs7O0FBRUQsU0FBUyxzQkFBc0IsQ0FBQyxJQUFZOztRQUN0QyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7O1FBQ3RELDBCQUEwQixHQUFHLGdCQUFnQixHQUFHLHNCQUFzQixHQUFHLE9BQU87O1FBQ2hGLFNBQVMsR0FBRyxnQkFBZ0IsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQywwQkFBMEIsR0FBRyxhQUFhLENBQUM7O1FBQzFGLFNBQVMsR0FBRywwQkFBMEIsR0FBRyxhQUFhOztRQUV0RCxTQUFTLEdBQUcsU0FBUyxHQUFHLENBQUM7SUFFN0IsSUFBSSxTQUFT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O1FBQ0QsSUFBSSxFQUFFLENBQUM7S0FDUjtJQUNELE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNuQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3ZCLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDckI7U0FBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQzVCLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0tBQy9DO0lBQ0QsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge05nYkRhdGV9IGZyb20gJy4uL25nYi1kYXRlJztcbmltcG9ydCB7TmdiRGF0ZVN0cnVjdH0gZnJvbSAnLi4vbmdiLWRhdGUtc3RydWN0JztcblxuY29uc3QgUEFSVFNfUEVSX0hPVVIgPSAxMDgwO1xuY29uc3QgUEFSVFNfUEVSX0RBWSA9IDI0ICogUEFSVFNfUEVSX0hPVVI7XG5jb25zdCBQQVJUU19GUkFDVElPTkFMX01PTlRIID0gMTIgKiBQQVJUU19QRVJfSE9VUiArIDc5MztcbmNvbnN0IFBBUlRTX1BFUl9NT05USCA9IDI5ICogUEFSVFNfUEVSX0RBWSArIFBBUlRTX0ZSQUNUSU9OQUxfTU9OVEg7XG5jb25zdCBCQUhBUkFEID0gMTEgKiBQQVJUU19QRVJfSE9VUiArIDIwNDtcbmNvbnN0IEhFQlJFV19EQVlfT05fSkFOXzFfMTk3MCA9IDIwOTI1OTE7XG5jb25zdCBHUkVHT1JJQU5fRVBPQ0ggPSAxNzIxNDI1LjU7XG5cbmZ1bmN0aW9uIGlzR3JlZ29yaWFuTGVhcFllYXIoeWVhcjogbnVtYmVyKTogYm9vbGVhbiB7XG4gIHJldHVybiB5ZWFyICUgNCA9PT0gMCAmJiB5ZWFyICUgMTAwICE9PSAwIHx8IHllYXIgJSA0MDAgPT09IDA7XG59XG5cbmZ1bmN0aW9uIG51bWJlck9mRmlyc3REYXlJblllYXIoeWVhcjogbnVtYmVyKTogbnVtYmVyIHtcbiAgbGV0IG1vbnRoc0JlZm9yZVllYXIgPSBNYXRoLmZsb29yKCgyMzUgKiB5ZWFyIC0gMjM0KSAvIDE5KTtcbiAgbGV0IGZyYWN0aW9uYWxNb250aHNCZWZvcmVZZWFyID0gbW9udGhzQmVmb3JlWWVhciAqIFBBUlRTX0ZSQUNUSU9OQUxfTU9OVEggKyBCQUhBUkFEO1xuICBsZXQgZGF5TnVtYmVyID0gbW9udGhzQmVmb3JlWWVhciAqIDI5ICsgTWF0aC5mbG9vcihmcmFjdGlvbmFsTW9udGhzQmVmb3JlWWVhciAvIFBBUlRTX1BFUl9EQVkpO1xuICBsZXQgdGltZU9mRGF5ID0gZnJhY3Rpb25hbE1vbnRoc0JlZm9yZVllYXIgJSBQQVJUU19QRVJfREFZO1xuXG4gIGxldCBkYXlPZldlZWsgPSBkYXlOdW1iZXIgJSA3OyAgLy8gMCA9PSBNb25kYXlcblxuICBpZiAoZGF5T2ZXZWVrID09PSAyIHx8IGRheU9mV2VlayA9PT0gNCB8fCBkYXlPZldlZWsgPT09IDYpIHtcbiAgICBkYXlOdW1iZXIrKztcbiAgICBkYXlPZldlZWsgPSBkYXlOdW1iZXIgJSA3O1xuICB9XG4gIGlmIChkYXlPZldlZWsgPT09IDEgJiYgdGltZU9mRGF5ID4gMTUgKiBQQVJUU19QRVJfSE9VUiArIDIwNCAmJiAhaXNIZWJyZXdMZWFwWWVhcih5ZWFyKSkge1xuICAgIGRheU51bWJlciArPSAyO1xuICB9IGVsc2UgaWYgKGRheU9mV2VlayA9PT0gMCAmJiB0aW1lT2ZEYXkgPiAyMSAqIFBBUlRTX1BFUl9IT1VSICsgNTg5ICYmIGlzSGVicmV3TGVhcFllYXIoeWVhciAtIDEpKSB7XG4gICAgZGF5TnVtYmVyKys7XG4gIH1cbiAgcmV0dXJuIGRheU51bWJlcjtcbn1cblxuZnVuY3Rpb24gZ2V0RGF5c0luR3JlZ29yaWFuTW9udGgobW9udGg6IG51bWJlciwgeWVhcjogbnVtYmVyKTogbnVtYmVyIHtcbiAgbGV0IGRheXMgPSBbMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV07XG4gIGlmIChpc0dyZWdvcmlhbkxlYXBZZWFyKHllYXIpKSB7XG4gICAgZGF5c1sxXSsrO1xuICB9XG4gIHJldHVybiBkYXlzW21vbnRoIC0gMV07XG59XG5cbmZ1bmN0aW9uIGdldEhlYnJld01vbnRocyh5ZWFyOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gaXNIZWJyZXdMZWFwWWVhcih5ZWFyKSA/IDEzIDogMTI7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRheXMgaW4gYSBzcGVjaWZpYyBIZWJyZXcgeWVhci5cbiAqIGB5ZWFyYCBpcyBhbnkgSGVicmV3IHllYXIuXG4gKi9cbmZ1bmN0aW9uIGdldERheXNJbkhlYnJld1llYXIoeWVhcjogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIG51bWJlck9mRmlyc3REYXlJblllYXIoeWVhciArIDEpIC0gbnVtYmVyT2ZGaXJzdERheUluWWVhcih5ZWFyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSGVicmV3TGVhcFllYXIoeWVhcjogbnVtYmVyKTogYm9vbGVhbiB7XG4gIGxldCBiID0gKHllYXIgKiAxMiArIDE3KSAlIDE5O1xuICByZXR1cm4gYiA+PSAoKGIgPCAwKSA/IC03IDogMTIpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIG51bWJlciBvZiBkYXlzIGluIGEgc3BlY2lmaWMgSGVicmV3IG1vbnRoLlxuICogYG1vbnRoYCBpcyAxIGZvciBOaXNhbiwgMiBmb3IgSXlhciBldGMuIE5vdGU6IEhlYnJldyBsZWFwIHllYXIgY29udGFpbnMgMTMgbW9udGhzLlxuICogYHllYXJgIGlzIGFueSBIZWJyZXcgeWVhci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERheXNJbkhlYnJld01vbnRoKG1vbnRoOiBudW1iZXIsIHllYXI6IG51bWJlcik6IG51bWJlciB7XG4gIGxldCB5ZWFyTGVuZ3RoID0gbnVtYmVyT2ZGaXJzdERheUluWWVhcih5ZWFyICsgMSkgLSBudW1iZXJPZkZpcnN0RGF5SW5ZZWFyKHllYXIpO1xuICBsZXQgeWVhclR5cGUgPSAoeWVhckxlbmd0aCA8PSAzODAgPyB5ZWFyTGVuZ3RoIDogKHllYXJMZW5ndGggLSAzMCkpIC0gMzUzO1xuICBsZXQgbGVhcFllYXIgPSBpc0hlYnJld0xlYXBZZWFyKHllYXIpO1xuICBsZXQgZGF5c0luTW9udGggPSBsZWFwWWVhciA/IFszMCwgMjksIDI5LCAyOSwgMzAsIDMwLCAyOSwgMzAsIDI5LCAzMCwgMjksIDMwLCAyOV0gOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFszMCwgMjksIDI5LCAyOSwgMzAsIDI5LCAzMCwgMjksIDMwLCAyOSwgMzAsIDI5XTtcbiAgaWYgKHllYXJUeXBlID4gMCkge1xuICAgIGRheXNJbk1vbnRoWzJdKys7ICAvLyBLaXNsZXYgZ2V0cyBhbiBleHRyYSBkYXkgaW4gbm9ybWFsIG9yIGNvbXBsZXRlIHllYXJzLlxuICB9XG4gIGlmICh5ZWFyVHlwZSA+IDEpIHtcbiAgICBkYXlzSW5Nb250aFsxXSsrOyAgLy8gSGVzaHZhbiBnZXRzIGFuIGV4dHJhIGRheSBpbiBjb21wbGV0ZSB5ZWFycyBvbmx5LlxuICB9XG4gIHJldHVybiBkYXlzSW5Nb250aFttb250aCAtIDFdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF5TnVtYmVySW5IZWJyZXdZZWFyKGRhdGU6IE5nYkRhdGUpOiBudW1iZXIge1xuICBsZXQgbnVtYmVyT2ZEYXkgPSAwO1xuICBmb3IgKGxldCBpID0gMTsgaSA8IGRhdGUubW9udGg7IGkrKykge1xuICAgIG51bWJlck9mRGF5ICs9IGdldERheXNJbkhlYnJld01vbnRoKGksIGRhdGUueWVhcik7XG4gIH1cbiAgcmV0dXJuIG51bWJlck9mRGF5ICsgZGF0ZS5kYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRIZWJyZXdNb250aChkYXRlOiBOZ2JEYXRlLCB2YWw6IG51bWJlcik6IE5nYkRhdGUge1xuICBsZXQgYWZ0ZXIgPSB2YWwgPj0gMDtcbiAgaWYgKCFhZnRlcikge1xuICAgIHZhbCA9IC12YWw7XG4gIH1cbiAgd2hpbGUgKHZhbCA+IDApIHtcbiAgICBpZiAoYWZ0ZXIpIHtcbiAgICAgIGlmICh2YWwgPiBnZXRIZWJyZXdNb250aHMoZGF0ZS55ZWFyKSAtIGRhdGUubW9udGgpIHtcbiAgICAgICAgdmFsIC09IGdldEhlYnJld01vbnRocyhkYXRlLnllYXIpIC0gZGF0ZS5tb250aCArIDE7XG4gICAgICAgIGRhdGUueWVhcisrO1xuICAgICAgICBkYXRlLm1vbnRoID0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGUubW9udGggKz0gdmFsO1xuICAgICAgICB2YWwgPSAwO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodmFsID49IGRhdGUubW9udGgpIHtcbiAgICAgICAgZGF0ZS55ZWFyLS07XG4gICAgICAgIHZhbCAtPSBkYXRlLm1vbnRoO1xuICAgICAgICBkYXRlLm1vbnRoID0gZ2V0SGVicmV3TW9udGhzKGRhdGUueWVhcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkYXRlLm1vbnRoIC09IHZhbDtcbiAgICAgICAgdmFsID0gMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRIZWJyZXdEYXkoZGF0ZTogTmdiRGF0ZSwgdmFsOiBudW1iZXIpOiBOZ2JEYXRlIHtcbiAgbGV0IGFmdGVyID0gdmFsID49IDA7XG4gIGlmICghYWZ0ZXIpIHtcbiAgICB2YWwgPSAtdmFsO1xuICB9XG4gIHdoaWxlICh2YWwgPiAwKSB7XG4gICAgaWYgKGFmdGVyKSB7XG4gICAgICBpZiAodmFsID4gZ2V0RGF5c0luSGVicmV3WWVhcihkYXRlLnllYXIpIC0gZ2V0RGF5TnVtYmVySW5IZWJyZXdZZWFyKGRhdGUpKSB7XG4gICAgICAgIHZhbCAtPSBnZXREYXlzSW5IZWJyZXdZZWFyKGRhdGUueWVhcikgLSBnZXREYXlOdW1iZXJJbkhlYnJld1llYXIoZGF0ZSkgKyAxO1xuICAgICAgICBkYXRlLnllYXIrKztcbiAgICAgICAgZGF0ZS5tb250aCA9IDE7XG4gICAgICAgIGRhdGUuZGF5ID0gMTtcbiAgICAgIH0gZWxzZSBpZiAodmFsID4gZ2V0RGF5c0luSGVicmV3TW9udGgoZGF0ZS5tb250aCwgZGF0ZS55ZWFyKSAtIGRhdGUuZGF5KSB7XG4gICAgICAgIHZhbCAtPSBnZXREYXlzSW5IZWJyZXdNb250aChkYXRlLm1vbnRoLCBkYXRlLnllYXIpIC0gZGF0ZS5kYXkgKyAxO1xuICAgICAgICBkYXRlLm1vbnRoKys7XG4gICAgICAgIGRhdGUuZGF5ID0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGUuZGF5ICs9IHZhbDtcbiAgICAgICAgdmFsID0gMDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHZhbCA+PSBkYXRlLmRheSkge1xuICAgICAgICB2YWwgLT0gZGF0ZS5kYXk7XG4gICAgICAgIGRhdGUubW9udGgtLTtcbiAgICAgICAgaWYgKGRhdGUubW9udGggPT09IDApIHtcbiAgICAgICAgICBkYXRlLnllYXItLTtcbiAgICAgICAgICBkYXRlLm1vbnRoID0gZ2V0SGVicmV3TW9udGhzKGRhdGUueWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgZGF0ZS5kYXkgPSBnZXREYXlzSW5IZWJyZXdNb250aChkYXRlLm1vbnRoLCBkYXRlLnllYXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0ZS5kYXkgLT0gdmFsO1xuICAgICAgICB2YWwgPSAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZGF0ZTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBlcXVpdmFsZW50IEhlYnJldyBkYXRlIHZhbHVlIGZvciBhIGdpdmUgaW5wdXQgR3JlZ29yaWFuIGRhdGUuXG4gKiBgZ2RhdGVgIGlzIGEgSlMgRGF0ZSB0byBiZSBjb252ZXJ0ZWQgdG8gSGVicmV3IGRhdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9tR3JlZ29yaWFuKGdkYXRlOiBEYXRlKTogTmdiRGF0ZSB7XG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShnZGF0ZSk7XG4gIGNvbnN0IGdZZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpLCBnTW9udGggPSBkYXRlLmdldE1vbnRoKCksIGdEYXkgPSBkYXRlLmdldERhdGUoKTtcbiAgbGV0IGp1bGlhbkRheSA9IEdSRUdPUklBTl9FUE9DSCAtIDEgKyAzNjUgKiAoZ1llYXIgLSAxKSArIE1hdGguZmxvb3IoKGdZZWFyIC0gMSkgLyA0KSAtXG4gICAgICBNYXRoLmZsb29yKChnWWVhciAtIDEpIC8gMTAwKSArIE1hdGguZmxvb3IoKGdZZWFyIC0gMSkgLyA0MDApICtcbiAgICAgIE1hdGguZmxvb3IoKDM2NyAqIChnTW9udGggKyAxKSAtIDM2MikgLyAxMiArIChnTW9udGggKyAxIDw9IDIgPyAwIDogaXNHcmVnb3JpYW5MZWFwWWVhcihnWWVhcikgPyAtMSA6IC0yKSArIGdEYXkpO1xuICBqdWxpYW5EYXkgPSBNYXRoLmZsb29yKGp1bGlhbkRheSArIDAuNSk7XG4gIGxldCBkYXlzU2luY2VIZWJFcG9jaCA9IGp1bGlhbkRheSAtIDM0Nzk5NztcbiAgbGV0IG1vbnRoc1NpbmNlSGViRXBvY2ggPSBNYXRoLmZsb29yKGRheXNTaW5jZUhlYkVwb2NoICogUEFSVFNfUEVSX0RBWSAvIFBBUlRTX1BFUl9NT05USCk7XG4gIGxldCBoWWVhciA9IE1hdGguZmxvb3IoKG1vbnRoc1NpbmNlSGViRXBvY2ggKiAxOSArIDIzNCkgLyAyMzUpICsgMTtcbiAgbGV0IGZpcnN0RGF5T2ZUaGlzWWVhciA9IG51bWJlck9mRmlyc3REYXlJblllYXIoaFllYXIpO1xuICBsZXQgZGF5T2ZZZWFyID0gZGF5c1NpbmNlSGViRXBvY2ggLSBmaXJzdERheU9mVGhpc1llYXI7XG4gIHdoaWxlIChkYXlPZlllYXIgPCAxKSB7XG4gICAgaFllYXItLTtcbiAgICBmaXJzdERheU9mVGhpc1llYXIgPSBudW1iZXJPZkZpcnN0RGF5SW5ZZWFyKGhZZWFyKTtcbiAgICBkYXlPZlllYXIgPSBkYXlzU2luY2VIZWJFcG9jaCAtIGZpcnN0RGF5T2ZUaGlzWWVhcjtcbiAgfVxuICBsZXQgaE1vbnRoID0gMTtcbiAgbGV0IGhEYXkgPSBkYXlPZlllYXI7XG4gIHdoaWxlIChoRGF5ID4gZ2V0RGF5c0luSGVicmV3TW9udGgoaE1vbnRoLCBoWWVhcikpIHtcbiAgICBoRGF5IC09IGdldERheXNJbkhlYnJld01vbnRoKGhNb250aCwgaFllYXIpO1xuICAgIGhNb250aCsrO1xuICB9XG4gIHJldHVybiBuZXcgTmdiRGF0ZShoWWVhciwgaE1vbnRoLCBoRGF5KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBlcXVpdmFsZW50IEpTIGRhdGUgdmFsdWUgZm9yIGEgZ2l2ZW4gSGVicmV3IGRhdGUuXG4gKiBgaGVicmV3RGF0ZWAgaXMgYW4gSGVicmV3IGRhdGUgdG8gYmUgY29udmVydGVkIHRvIEdyZWdvcmlhbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvR3JlZ29yaWFuKGhlYnJld0RhdGU6IE5nYkRhdGVTdHJ1Y3QgfCBOZ2JEYXRlKTogRGF0ZSB7XG4gIGNvbnN0IGhZZWFyID0gaGVicmV3RGF0ZS55ZWFyO1xuICBjb25zdCBoTW9udGggPSBoZWJyZXdEYXRlLm1vbnRoO1xuICBjb25zdCBoRGF5ID0gaGVicmV3RGF0ZS5kYXk7XG4gIGxldCBkYXlzID0gbnVtYmVyT2ZGaXJzdERheUluWWVhcihoWWVhcik7XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgaE1vbnRoOyBpKyspIHtcbiAgICBkYXlzICs9IGdldERheXNJbkhlYnJld01vbnRoKGksIGhZZWFyKTtcbiAgfVxuICBkYXlzICs9IGhEYXk7XG4gIGxldCBkaWZmRGF5cyA9IGRheXMgLSBIRUJSRVdfREFZX09OX0pBTl8xXzE5NzA7XG4gIGxldCBhZnRlciA9IGRpZmZEYXlzID49IDA7XG4gIGlmICghYWZ0ZXIpIHtcbiAgICBkaWZmRGF5cyA9IC1kaWZmRGF5cztcbiAgfVxuICBsZXQgZ1llYXIgPSAxOTcwO1xuICBsZXQgZ01vbnRoID0gMTtcbiAgbGV0IGdEYXkgPSAxO1xuICB3aGlsZSAoZGlmZkRheXMgPiAwKSB7XG4gICAgaWYgKGFmdGVyKSB7XG4gICAgICBpZiAoZGlmZkRheXMgPj0gKGlzR3JlZ29yaWFuTGVhcFllYXIoZ1llYXIpID8gMzY2IDogMzY1KSkge1xuICAgICAgICBkaWZmRGF5cyAtPSBpc0dyZWdvcmlhbkxlYXBZZWFyKGdZZWFyKSA/IDM2NiA6IDM2NTtcbiAgICAgICAgZ1llYXIrKztcbiAgICAgIH0gZWxzZSBpZiAoZGlmZkRheXMgPj0gZ2V0RGF5c0luR3JlZ29yaWFuTW9udGgoZ01vbnRoLCBnWWVhcikpIHtcbiAgICAgICAgZGlmZkRheXMgLT0gZ2V0RGF5c0luR3JlZ29yaWFuTW9udGgoZ01vbnRoLCBnWWVhcik7XG4gICAgICAgIGdNb250aCsrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ0RheSArPSBkaWZmRGF5cztcbiAgICAgICAgZGlmZkRheXMgPSAwO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZGlmZkRheXMgPj0gKGlzR3JlZ29yaWFuTGVhcFllYXIoZ1llYXIgLSAxKSA/IDM2NiA6IDM2NSkpIHtcbiAgICAgICAgZGlmZkRheXMgLT0gaXNHcmVnb3JpYW5MZWFwWWVhcihnWWVhciAtIDEpID8gMzY2IDogMzY1O1xuICAgICAgICBnWWVhci0tO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGdNb250aCA+IDEpIHtcbiAgICAgICAgICBnTW9udGgtLTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBnTW9udGggPSAxMjtcbiAgICAgICAgICBnWWVhci0tO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkaWZmRGF5cyA+PSBnZXREYXlzSW5HcmVnb3JpYW5Nb250aChnTW9udGgsIGdZZWFyKSkge1xuICAgICAgICAgIGRpZmZEYXlzIC09IGdldERheXNJbkdyZWdvcmlhbk1vbnRoKGdNb250aCwgZ1llYXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGdEYXkgPSBnZXREYXlzSW5HcmVnb3JpYW5Nb250aChnTW9udGgsIGdZZWFyKSAtIGRpZmZEYXlzICsgMTtcbiAgICAgICAgICBkaWZmRGF5cyA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ldyBEYXRlKGdZZWFyLCBnTW9udGggLSAxLCBnRGF5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhlYnJld051bWVyYWxzKG51bWVyYWxzOiBudW1iZXIpOiBzdHJpbmcge1xuICBpZiAoIW51bWVyYWxzKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGNvbnN0IGhBcnJheTBfOSA9IFsnJywgJ1xcdTA1ZDAnLCAnXFx1MDVkMScsICdcXHUwNWQyJywgJ1xcdTA1ZDMnLCAnXFx1MDVkNCcsICdcXHUwNWQ1JywgJ1xcdTA1ZDYnLCAnXFx1MDVkNycsICdcXHUwNWQ4J107XG4gIGNvbnN0IGhBcnJheTEwXzE5ID0gW1xuICAgICdcXHUwNWQ5JywgJ1xcdTA1ZDlcXHUwNWQwJywgJ1xcdTA1ZDlcXHUwNWQxJywgJ1xcdTA1ZDlcXHUwNWQyJywgJ1xcdTA1ZDlcXHUwNWQzJywgJ1xcdTA1ZDhcXHUwNWQ1JywgJ1xcdTA1ZDhcXHUwNWQ2JyxcbiAgICAnXFx1MDVkOVxcdTA1ZDYnLCAnXFx1MDVkOVxcdTA1ZDcnLCAnXFx1MDVkOVxcdTA1ZDgnXG4gIF07XG4gIGNvbnN0IGhBcnJheTIwXzkwID0gWycnLCAnJywgJ1xcdTA1ZGInLCAnXFx1MDVkYycsICdcXHUwNWRlJywgJ1xcdTA1ZTAnLCAnXFx1MDVlMScsICdcXHUwNWUyJywgJ1xcdTA1ZTQnLCAnXFx1MDVlNiddO1xuICBjb25zdCBoQXJyYXkxMDBfOTAwID0gW1xuICAgICcnLCAnXFx1MDVlNycsICdcXHUwNWU4JywgJ1xcdTA1ZTknLCAnXFx1MDVlYScsICdcXHUwNWVhXFx1MDVlNycsICdcXHUwNWVhXFx1MDVlOCcsICdcXHUwNWVhXFx1MDVlOScsICdcXHUwNWVhXFx1MDVlYScsXG4gICAgJ1xcdTA1ZWFcXHUwNWVhXFx1MDVlNydcbiAgXTtcbiAgY29uc3QgaEFycmF5MTAwMF85MDAwID0gW1xuICAgICcnLCAnXFx1MDVkMCcsICdcXHUwNWQxJywgJ1xcdTA1ZDFcXHUwNWQwJywgJ1xcdTA1ZDFcXHUwNWQxJywgJ1xcdTA1ZDQnLCAnXFx1MDVkNFxcdTA1ZDAnLCAnXFx1MDVkNFxcdTA1ZDEnLFxuICAgICdcXHUwNWQ0XFx1MDVkMVxcdTA1ZDAnLCAnXFx1MDVkNFxcdTA1ZDFcXHUwNWQxJ1xuICBdO1xuICBjb25zdCBnZXJlc2ggPSAnXFx1MDVmMycsIGdlcnNoYWltID0gJ1xcdTA1ZjQnO1xuICBsZXQgbWVtID0gMDtcbiAgbGV0IHJlc3VsdCA9IFtdO1xuICBsZXQgc3RlcCA9IDA7XG4gIHdoaWxlIChudW1lcmFscyA+IDApIHtcbiAgICBsZXQgbSA9IG51bWVyYWxzICUgMTA7XG4gICAgaWYgKHN0ZXAgPT09IDApIHtcbiAgICAgIG1lbSA9IG07XG4gICAgfSBlbHNlIGlmIChzdGVwID09PSAxKSB7XG4gICAgICBpZiAobSAhPT0gMSkge1xuICAgICAgICByZXN1bHQudW5zaGlmdChoQXJyYXkyMF85MFttXSwgaEFycmF5MF85W21lbV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0LnVuc2hpZnQoaEFycmF5MTBfMTlbbWVtXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzdGVwID09PSAyKSB7XG4gICAgICByZXN1bHQudW5zaGlmdChoQXJyYXkxMDBfOTAwW21dKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG0gIT09IDUpIHtcbiAgICAgICAgcmVzdWx0LnVuc2hpZnQoaEFycmF5MTAwMF85MDAwW21dLCBnZXJlc2gsICcgJyk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgbnVtZXJhbHMgPSBNYXRoLmZsb29yKG51bWVyYWxzIC8gMTApO1xuICAgIGlmIChzdGVwID09PSAwICYmIG51bWVyYWxzID09PSAwKSB7XG4gICAgICByZXN1bHQudW5zaGlmdChoQXJyYXkwXzlbbV0pO1xuICAgIH1cbiAgICBzdGVwKys7XG4gIH1cbiAgcmVzdWx0ID0gcmVzdWx0LmpvaW4oJycpLnNwbGl0KCcnKTtcbiAgaWYgKHJlc3VsdC5sZW5ndGggPT09IDEpIHtcbiAgICByZXN1bHQucHVzaChnZXJlc2gpO1xuICB9IGVsc2UgaWYgKHJlc3VsdC5sZW5ndGggPiAxKSB7XG4gICAgcmVzdWx0LnNwbGljZShyZXN1bHQubGVuZ3RoIC0gMSwgMCwgZ2Vyc2hhaW0pO1xuICB9XG4gIHJldHVybiByZXN1bHQuam9pbignJyk7XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/datepicker/hebrew/ngb-calendar-hebrew.js b/dist/sunbird-ui-components/esm2015/datepicker/hebrew/ngb-calendar-hebrew.js new file mode 100644 index 0000000..29ee7bc --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/datepicker/hebrew/ngb-calendar-hebrew.js @@ -0,0 +1,116 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgbDate } from '../ngb-date'; +import { fromJSDate, NgbCalendar, toJSDate } from '../ngb-calendar'; +import { Injectable } from '@angular/core'; +import { isNumber } from '../../util/util'; +import { fromGregorian, getDayNumberInHebrewYear, getDaysInHebrewMonth, isHebrewLeapYear, toGregorian, setHebrewDay, setHebrewMonth } from './hebrew'; +/** + * \@since 3.2.0 + */ +export class NgbCalendarHebrew extends NgbCalendar { + /** + * @return {?} + */ + getDaysPerWeek() { return 7; } + /** + * @param {?=} year + * @return {?} + */ + getMonths(year) { + if (year && isHebrewLeapYear(year)) { + return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]; + } + else { + return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; + } + } + /** + * @return {?} + */ + getWeeksPerMonth() { return 6; } + /** + * @param {?} date + * @return {?} + */ + isValid(date) { + /** @type {?} */ + let b = date && isNumber(date.year) && isNumber(date.month) && isNumber(date.day); + b = b && date.month > 0 && date.month <= (isHebrewLeapYear(date.year) ? 13 : 12); + b = b && date.day > 0 && date.day <= getDaysInHebrewMonth(date.month, date.year); + return b && !isNaN(toGregorian(date).getTime()); + } + /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + getNext(date, period = 'd', number = 1) { + date = new NgbDate(date.year, date.month, date.day); + switch (period) { + case 'y': + date.year += number; + date.month = 1; + date.day = 1; + return date; + case 'm': + date = setHebrewMonth(date, number); + date.day = 1; + return date; + case 'd': + return setHebrewDay(date, number); + default: + return date; + } + } + /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + getPrev(date, period = 'd', number = 1) { return this.getNext(date, period, -number); } + /** + * @param {?} date + * @return {?} + */ + getWeekday(date) { + /** @type {?} */ + const day = toGregorian(date).getDay(); + // in JS Date Sun=0, in ISO 8601 Sun=7 + return day === 0 ? 7 : day; + } + /** + * @param {?} week + * @param {?} firstDayOfWeek + * @return {?} + */ + getWeekNumber(week, firstDayOfWeek) { + /** @type {?} */ + const date = week[week.length - 1]; + return Math.ceil(getDayNumberInHebrewYear(date) / 7); + } + /** + * @return {?} + */ + getToday() { return fromGregorian(new Date()); } + /** + * \@since 3.4.0 + * @param {?} date + * @return {?} + */ + toGregorian(date) { return fromJSDate(toGregorian(date)); } + /** + * \@since 3.4.0 + * @param {?} date + * @return {?} + */ + fromGregorian(date) { return fromGregorian(toJSDate(date)); } +} +NgbCalendarHebrew.decorators = [ + { type: Injectable } +]; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdiLWNhbGVuZGFyLWhlYnJldy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImRhdGVwaWNrZXIvaGVicmV3L25nYi1jYWxlbmRhci1oZWJyZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDcEMsT0FBTyxFQUFDLFVBQVUsRUFBRSxXQUFXLEVBQWEsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0UsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUNMLGFBQWEsRUFDYix3QkFBd0IsRUFDeEIsb0JBQW9CLEVBQ3BCLGdCQUFnQixFQUNoQixXQUFXLEVBQ1gsWUFBWSxFQUNaLGNBQWMsRUFDZixNQUFNLFVBQVUsQ0FBQzs7OztBQU1sQixNQUFNLE9BQU8saUJBQWtCLFNBQVEsV0FBVzs7OztJQUNoRCxjQUFjLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7OztJQUU5QixTQUFTLENBQUMsSUFBYTtRQUNyQixJQUFJLElBQUksSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNsQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDcEQ7YUFBTTtZQUNMLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxF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SUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Ozs7OztJQUs3RSxhQUFhLENBQUMsSUFBYSxJQUFhLE9BQU8sYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O1lBaEVoRixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOZ2JEYXRlfSBmcm9tICcuLi9uZ2ItZGF0ZSc7XG5pbXBvcnQge2Zyb21KU0RhdGUsIE5nYkNhbGVuZGFyLCBOZ2JQZXJpb2QsIHRvSlNEYXRlfSBmcm9tICcuLi9uZ2ItY2FsZW5kYXInO1xuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7aXNOdW1iZXJ9IGZyb20gJy4uLy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQge1xuICBmcm9tR3JlZ29yaWFuLFxuICBnZXREYXlOdW1iZXJJbkhlYnJld1llYXIsXG4gIGdldERheXNJbkhlYnJld01vbnRoLFxuICBpc0hlYnJld0xlYXBZZWFyLFxuICB0b0dyZWdvcmlhbixcbiAgc2V0SGVicmV3RGF5LFxuICBzZXRIZWJyZXdNb250aFxufSBmcm9tICcuL2hlYnJldyc7XG5cbi8qKlxuICogQHNpbmNlIDMuMi4wXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBOZ2JDYWxlbmRhckhlYnJldyBleHRlbmRzIE5nYkNhbGVuZGFyIHtcbiAgZ2V0RGF5c1BlcldlZWsoKSB7IHJldHVybiA3OyB9XG5cbiAgZ2V0TW9udGhzKHllYXI/OiBudW1iZXIpIHtcbiAgICBpZiAoeWVhciAmJiBpc0hlYnJld0xlYXBZZWFyKHllYXIpKSB7XG4gICAgICByZXR1cm4gWzEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyXTtcbiAgICB9XG4gIH1cblxuICBnZXRXZWVrc1Blck1vbnRoKCkgeyByZXR1cm4gNjsgfVxuXG4gIGlzVmFsaWQoZGF0ZTogTmdiRGF0ZSk6IGJvb2xlYW4ge1xuICAgIGxldCBiID0gZGF0ZSAmJiBpc051bWJlcihkYXRlLnllYXIpICYmIGlzTnVtYmVyKGRhdGUubW9udGgpICYmIGlzTnVtYmVyKGRhdGUuZGF5KTtcbiAgICBiID0gYiAmJiBkYXRlLm1vbnRoID4gMCAmJiBkYXRlLm1vbnRoIDw9IChpc0hlYnJld0xlYXBZZWFyKGRhdGUueWVhcikgPyAxMyA6IDEyKTtcbiAgICBiID0gYiAmJiBkYXRlLmRheSA+IDAgJiYgZGF0ZS5kYXkgPD0gZ2V0RGF5c0luSGVicmV3TW9udGgoZGF0ZS5tb250aCwgZGF0ZS55ZWFyKTtcbiAgICByZXR1cm4gYiAmJiAhaXNOYU4odG9HcmVnb3JpYW4oZGF0ZSkuZ2V0VGltZSgpKTtcbiAgfVxuXG4gIGdldE5leHQoZGF0ZTogTmdiRGF0ZSwgcGVyaW9kOiBOZ2JQZXJpb2QgPSAnZCcsIG51bWJlciA9IDEpIHtcbiAgICBkYXRlID0gbmV3IE5nYkRhdGUoZGF0ZS55ZWFyLCBkYXRlLm1vbnRoLCBkYXRlLmRheSk7XG5cbiAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgY2FzZSAneSc6XG4gICAgICAgIGRhdGUueWVhciArPSBudW1iZXI7XG4gICAgICAgIGRhdGUubW9udGggPSAxO1xuICAgICAgICBkYXRlLmRheSA9IDE7XG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgICAgY2FzZSAnbSc6XG4gICAgICAgIGRhdGUgPSBzZXRIZWJyZXdNb250aChkYXRlLCBudW1iZXIpO1xuICAgICAgICBkYXRlLmRheSA9IDE7XG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgICAgY2FzZSAnZCc6XG4gICAgICAgIHJldHVybiBzZXRIZWJyZXdEYXkoZGF0ZSwgbnVtYmVyKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cbiAgfVxuXG4gIGdldFByZXYoZGF0ZTogTmdiRGF0ZSwgcGVyaW9kOiBOZ2JQZXJpb2QgPSAnZCcsIG51bWJlciA9IDEpIHsgcmV0dXJuIHRoaXMuZ2V0TmV4dChkYXRlLCBwZXJpb2QsIC1udW1iZXIpOyB9XG5cbiAgZ2V0V2Vla2RheShkYXRlOiBOZ2JEYXRlKSB7XG4gICAgY29uc3QgZGF5ID0gdG9HcmVnb3JpYW4oZGF0ZSkuZ2V0RGF5KCk7XG4gICAgLy8gaW4gSlMgRGF0ZSBTdW49MCwgaW4gSVNPIDg2MDEgU3VuPTdcbiAgICByZXR1cm4gZGF5ID09PSAwID8gNyA6IGRheTtcbiAgfVxuXG4gIGdldFdlZWtOdW1iZXIod2VlazogTmdiRGF0ZVtdLCBmaXJzdERheU9mV2VlazogbnVtYmVyKSB7XG4gICAgY29uc3QgZGF0ZSA9IHdlZWtbd2Vlay5sZW5ndGggLSAxXTtcbiAgICByZXR1cm4gTWF0aC5jZWlsKGdldERheU51bWJlckluSGVicmV3WWVhcihkYXRlKSAvIDcpO1xuICB9XG5cbiAgZ2V0VG9kYXkoKTogTmdiRGF0ZSB7IHJldHVybiBmcm9tR3JlZ29yaWFuKG5ldyBEYXRlKCkpOyB9XG5cbiAgLyoqXG4gICAqIEBzaW5jZSAzLjQuMFxuICAgKi9cbiAgdG9HcmVnb3JpYW4oZGF0ZTogTmdiRGF0ZSk6IE5nYkRhdGUgeyByZXR1cm4gZnJvbUpTRGF0ZSh0b0dyZWdvcmlhbihkYXRlKSk7IH1cblxuICAvKipcbiAgICogQHNpbmNlIDMuNC4wXG4gICAqL1xuICBmcm9tR3JlZ29yaWFuKGRhdGU6IE5nYkRhdGUpOiBOZ2JEYXRlIHsgcmV0dXJuIGZyb21HcmVnb3JpYW4odG9KU0RhdGUoZGF0ZSkpOyB9XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/datepicker/hijri/ngb-calendar-hijri.js b/dist/sunbird-ui-components/esm2015/datepicker/hijri/ngb-calendar-hijri.js new file mode 100644 index 0000000..d4e84a2 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/datepicker/hijri/ngb-calendar-hijri.js @@ -0,0 +1,182 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgbDate } from '../ngb-date'; +import { NgbCalendar } from '../ngb-calendar'; +import { Injectable } from '@angular/core'; +import { isNumber } from '../../util/util'; +/** + * @abstract + */ +export class NgbCalendarHijri extends NgbCalendar { + /** + * @return {?} + */ + getDaysPerWeek() { return 7; } + /** + * @return {?} + */ + getMonths() { return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; } + /** + * @return {?} + */ + getWeeksPerMonth() { return 6; } + /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + getNext(date, period = 'd', number = 1) { + date = new NgbDate(date.year, date.month, date.day); + switch (period) { + case 'y': + date = this._setYear(date, date.year + number); + date.month = 1; + date.day = 1; + return date; + case 'm': + date = this._setMonth(date, date.month + number); + date.day = 1; + return date; + case 'd': + return this._setDay(date, date.day + number); + default: + return date; + } + } + /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + getPrev(date, period = 'd', number = 1) { return this.getNext(date, period, -number); } + /** + * @param {?} date + * @return {?} + */ + getWeekday(date) { + /** @type {?} */ + const day = this.toGregorian(date).getDay(); + // in JS Date Sun=0, in ISO 8601 Sun=7 + return day === 0 ? 7 : day; + } + /** + * @param {?} week + * @param {?} firstDayOfWeek + * @return {?} + */ + getWeekNumber(week, firstDayOfWeek) { + // in JS Date Sun=0, in ISO 8601 Sun=7 + if (firstDayOfWeek === 7) { + firstDayOfWeek = 0; + } + /** @type {?} */ + const thursdayIndex = (4 + 7 - firstDayOfWeek) % 7; + /** @type {?} */ + const date = week[thursdayIndex]; + /** @type {?} */ + const jsDate = this.toGregorian(date); + jsDate.setDate(jsDate.getDate() + 4 - (jsDate.getDay() || 7)); // Thursday + // Thursday + /** @type {?} */ + const time = jsDate.getTime(); + /** @type {?} */ + const MuhDate = this.toGregorian(new NgbDate(date.year, 1, 1)); + return Math.floor(Math.round((time - MuhDate.getTime()) / 86400000) / 7) + 1; + } + /** + * @return {?} + */ + getToday() { return this.fromGregorian(new Date()); } + /** + * @param {?} date + * @return {?} + */ + isValid(date) { + return date && isNumber(date.year) && isNumber(date.month) && isNumber(date.day) && + !isNaN(this.toGregorian(date).getTime()); + } + /** + * @private + * @param {?} date + * @param {?} day + * @return {?} + */ + _setDay(date, day) { + day = +day; + /** @type {?} */ + let mDays = this.getDaysPerMonth(date.month, date.year); + if (day <= 0) { + while (day <= 0) { + date = this._setMonth(date, date.month - 1); + mDays = this.getDaysPerMonth(date.month, date.year); + day += mDays; + } + } + else if (day > mDays) { + while (day > mDays) { + day -= mDays; + date = this._setMonth(date, date.month + 1); + mDays = this.getDaysPerMonth(date.month, date.year); + } + } + date.day = day; + return date; + } + /** + * @private + * @param {?} date + * @param {?} month + * @return {?} + */ + _setMonth(date, month) { + month = +month; + date.year = date.year + Math.floor((month - 1) / 12); + date.month = Math.floor(((month - 1) % 12 + 12) % 12) + 1; + return date; + } + /** + * @private + * @param {?} date + * @param {?} year + * @return {?} + */ + _setYear(date, year) { + date.year = +year; + return date; + } +} +NgbCalendarHijri.decorators = [ + { type: Injectable } +]; +if (false) { + /** + * Returns the number of days in a specific Hijri month. + * `month` is 1 for Muharram, 2 for Safar, etc. + * `year` is any Hijri year. + * @abstract + * @param {?} month + * @param {?} year + * @return {?} + */ + NgbCalendarHijri.prototype.getDaysPerMonth = function (month, year) { }; + /** + * Returns the equivalent Hijri date value for a give input Gregorian date. + * `gDate` is s JS Date to be converted to Hijri. + * @abstract + * @param {?} gDate + * @return {?} + */ + NgbCalendarHijri.prototype.fromGregorian = function (gDate) { }; + /** + * Converts the current Hijri date to Gregorian. + * @abstract + * @param {?} hDate + * @return {?} + */ + NgbCalendarHijri.prototype.toGregorian = function (hDate) { }; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdiLWNhbGVuZGFyLWhpanJpLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiZGF0ZXBpY2tlci9oaWpyaS9uZ2ItY2FsZW5kYXItaGlqcmkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDcEMsT0FBTyxFQUFZLFdBQVcsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlCQUFpQixDQUFDOzs7O0FBR3pDLE1BQU0sT0FBZ0IsZ0JBQWlCLFNBQVEsV0FBVzs7OztJQW1CeEQsY0FBYyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQzs7OztJQUU5QixTQUFTLEtBQUssT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7O0lBRS9ELGdCQUFnQixLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQzs7Ozs7OztJQUVoQyxPQUFPLENBQUMsSUFBYSxFQUFFLFNBQW9CLEdBQUcsRUFBRSxNQUFNLEdBQUcsQ0FBQztRQUN4RCxJQUFJLEdBQUcsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVwRCxRQUFRLE1BQU0sRUFBRTtZQUNkLEtBQUssR0FBRztnQkFDTixJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksR0FBRyxN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QUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Ozs7Ozs7SUFFTyxRQUFRLENBQUMsSUFBYSxFQUFFLElBQVk7UUFDMUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQztRQUNsQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7OztZQTVHRixVQUFVOzs7Ozs7Ozs7Ozs7SUFPVCx3RUFBOEQ7Ozs7Ozs7O0lBTTlELGdFQUE2Qzs7Ozs7OztJQUs3Qyw4REFBMkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge05nYkRhdGV9IGZyb20gJy4uL25nYi1kYXRlJztcbmltcG9ydCB7TmdiUGVyaW9kLCBOZ2JDYWxlbmRhcn0gZnJvbSAnLi4vbmdiLWNhbGVuZGFyJztcbmltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge2lzTnVtYmVyfSBmcm9tICcuLi8uLi91dGlsL3V0aWwnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTmdiQ2FsZW5kYXJIaWpyaSBleHRlbmRzIE5nYkNhbGVuZGFyIHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBkYXlzIGluIGEgc3BlY2lmaWMgSGlqcmkgbW9udGguXG4gICAqIGBtb250aGAgaXMgMSBmb3IgTXVoYXJyYW0sIDIgZm9yIFNhZmFyLCBldGMuXG4gICAqIGB5ZWFyYCBpcyBhbnkgSGlqcmkgeWVhci5cbiAgICovXG4gIGFic3RyYWN0IGdldERheXNQZXJNb250aChtb250aDogbnVtYmVyLCB5ZWFyOiBudW1iZXIpOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGVxdWl2YWxlbnQgSGlqcmkgZGF0ZSB2YWx1ZSBmb3IgYSBnaXZlIGlucHV0IEdyZWdvcmlhbiBkYXRlLlxuICAgKiBgZ0RhdGVgIGlzIHMgSlMgRGF0ZSB0byBiZSBjb252ZXJ0ZWQgdG8gSGlqcmkuXG4gICAqL1xuICBhYnN0cmFjdCBmcm9tR3JlZ29yaWFuKGdEYXRlOiBEYXRlKTogTmdiRGF0ZTtcblxuICAvKipcbiAgICogQ29udmVydHMgdGhlIGN1cnJlbnQgSGlqcmkgZGF0ZSB0byBHcmVnb3JpYW4uXG4gICAqL1xuICBhYnN0cmFjdCB0b0dyZWdvcmlhbihoRGF0ZTogTmdiRGF0ZSk6IERhdGU7XG5cbiAgZ2V0RGF5c1BlcldlZWsoKSB7IHJldHVybiA3OyB9XG5cbiAgZ2V0TW9udGhzKCkgeyByZXR1cm4gWzEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTJdOyB9XG5cbiAgZ2V0V2Vla3NQZXJNb250aCgpIHsgcmV0dXJuIDY7IH1cblxuICBnZXROZXh0KGRhdGU6IE5nYkRhdGUsIHBlcmlvZDogTmdiUGVyaW9kID0gJ2QnLCBudW1iZXIgPSAxKSB7XG4gICAgZGF0ZSA9IG5ldyBOZ2JEYXRlKGRhdGUueWVhciwgZGF0ZS5tb250aCwgZGF0ZS5kYXkpO1xuXG4gICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgIGNhc2UgJ3knOlxuICAgICAgICBkYXRlID0gdGhpcy5fc2V0WWVhcihkYXRlLCBkYXRlLnllYXIgKyBudW1iZXIpO1xuICAgICAgICBkYXRlLm1vbnRoID0gMTtcbiAgICAgICAgZGF0ZS5kYXkgPSAxO1xuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICAgIGNhc2UgJ20nOlxuICAgICAgICBkYXRlID0gdGhpcy5fc2V0TW9udGgoZGF0ZSwgZGF0ZS5tb250aCArIG51bWJlcik7XG4gICAgICAgIGRhdGUuZGF5ID0gMTtcbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgICBjYXNlICdkJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NldERheShkYXRlLCBkYXRlLmRheSArIG51bWJlcik7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG4gIH1cblxuICBnZXRQcmV2KGRhdGU6IE5nYkRhdGUsIHBlcmlvZDogTmdiUGVyaW9kID0gJ2QnLCBudW1iZXIgPSAxKSB7IHJldHVybiB0aGlzLmdldE5leHQoZGF0ZSwgcGVyaW9kLCAtbnVtYmVyKTsgfVxuXG4gIGdldFdlZWtkYXkoZGF0ZTogTmdiRGF0ZSkge1xuICAgIGNvbnN0IGRheSA9IHRoaXMudG9HcmVnb3JpYW4oZGF0ZSkuZ2V0RGF5KCk7XG4gICAgLy8gaW4gSlMgRGF0ZSBTdW49MCwgaW4gSVNPIDg2MDEgU3VuPTdcbiAgICByZXR1cm4gZGF5ID09PSAwID8gNyA6IGRheTtcbiAgfVxuXG4gIGdldFdlZWtOdW1iZXIod2VlazogTmdiRGF0ZVtdLCBmaXJzdERheU9mV2VlazogbnVtYmVyKSB7XG4gICAgLy8gaW4gSlMgRGF0ZSBTdW49MCwgaW4gSVNPIDg2MDEgU3VuPTdcbiAgICBpZiAoZmlyc3REYXlPZldlZWsgPT09IDcpIHtcbiAgICAgIGZpcnN0RGF5T2ZXZWVrID0gMDtcbiAgICB9XG5cbiAgICBjb25zdCB0aHVyc2RheUluZGV4ID0gKDQgKyA3IC0gZmlyc3REYXlPZldlZWspICUgNztcbiAgICBjb25zdCBkYXRlID0gd2Vla1t0aHVyc2RheUluZGV4XTtcblxuICAgIGNvbnN0IGpzRGF0ZSA9IHRoaXMudG9HcmVnb3JpYW4oZGF0ZSk7XG4gICAganNEYXRlLnNldERhdGUoanNEYXRlLmdldERhdGUoKSArIDQgLSAoanNEYXRlLmdldERheSgpIHx8IDcpKTsgIC8vIFRodXJzZGF5XG4gICAgY29uc3QgdGltZSA9IGpzRGF0ZS5nZXRUaW1lKCk7XG4gICAgY29uc3QgTXVoRGF0ZSA9IHRoaXMudG9HcmVnb3JpYW4obmV3IE5nYkRhdGUoZGF0ZS55ZWFyLCAxLCAxKSk7ICAvLyBDb21wYXJlIHdpdGggTXVoYXJyYW0gMVxuICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucm91bmQoKHRpbWUgLSBNdWhEYXRlLmdldFRpbWUoKSkgLyA4NjQwMDAwMCkgLyA3KSArIDE7XG4gIH1cblxuICBnZXRUb2RheSgpOiBOZ2JEYXRlIHsgcmV0dXJuIHRoaXMuZnJvbUdyZWdvcmlhbihuZXcgRGF0ZSgpKTsgfVxuXG5cbiAgaXNWYWxpZChkYXRlOiBOZ2JEYXRlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGRhdGUgJiYgaXNOdW1iZXIoZGF0ZS55ZWFyKSAmJiBpc051bWJlcihkYXRlLm1vbnRoKSAmJiBpc051bWJlcihkYXRlLmRheSkgJiZcbiAgICAgICAgIWlzTmFOKHRoaXMudG9HcmVnb3JpYW4oZGF0ZSkuZ2V0VGltZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldERheShkYXRlOiBOZ2JEYXRlLCBkYXk6IG51bWJlcik6IE5nYkRhdGUge1xuICAgIGRheSA9ICtkYXk7XG4gICAgbGV0IG1EYXlzID0gdGhpcy5nZXREYXlzUGVyTW9udGgoZGF0ZS5tb250aCwgZGF0ZS55ZWFyKTtcbiAgICBpZiAoZGF5IDw9IDApIHtcbiAgICAgIHdoaWxlIChkYXkgPD0gMCkge1xuICAgICAgICBkYXRlID0gdGhpcy5fc2V0TW9udGgoZGF0ZSwgZGF0ZS5tb250aCAtIDEpO1xuICAgICAgICBtRGF5cyA9IHRoaXMuZ2V0RGF5c1Blck1vbnRoKGRhdGUubW9udGgsIGRhdGUueWVhcik7XG4gICAgICAgIGRheSArPSBtRGF5cztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRheSA+IG1EYXlzKSB7XG4gICAgICB3aGlsZSAoZGF5ID4gbURheXMpIHtcbiAgICAgICAgZGF5IC09IG1EYXlzO1xuICAgICAgICBkYXRlID0gdGhpcy5fc2V0TW9udGgoZGF0ZSwgZGF0ZS5tb250aCArIDEpO1xuICAgICAgICBtRGF5cyA9IHRoaXMuZ2V0RGF5c1Blck1vbnRoKGRhdGUubW9udGgsIGRhdGUueWVhcik7XG4gICAgICB9XG4gICAgfVxuICAgIGRhdGUuZGF5ID0gZGF5O1xuICAgIHJldHVybiBkYXRlO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0TW9udGgoZGF0ZTogTmdiRGF0ZSwgbW9udGg6IG51bWJlcik6IE5nYkRhdGUge1xuICAgIG1vbnRoID0gK21vbnRoO1xuICAgIGRhdGUueWVhciA9IGRhdGUueWVhciArIE1hdGguZmxvb3IoKG1vbnRoIC0gMSkgLyAxMik7XG4gICAgZGF0ZS5tb250aCA9IE1hdGguZmxvb3IoKChtb250aCAtIDEpICUgMTIgKyAxMikgJSAxMikgKyAxO1xuICAgIHJldHVybiBkYXRlO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0WWVhcihkYXRlOiBOZ2JEYXRlLCB5ZWFyOiBudW1iZXIpOiBOZ2JEYXRlIHtcbiAgICBkYXRlLnllYXIgPSAreWVhcjtcbiAgICByZXR1cm4gZGF0ZTtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/datepicker/hijri/ngb-calendar-islamic-civil.js b/dist/sunbird-ui-components/esm2015/datepicker/hijri/ngb-calendar-islamic-civil.js new file mode 100644 index 0000000..4941a01 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/datepicker/hijri/ngb-calendar-islamic-civil.js @@ -0,0 +1,177 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgbCalendarHijri } from './ngb-calendar-hijri'; +import { NgbDate } from '../ngb-date'; +import { Injectable } from '@angular/core'; +/** + * Checks if islamic year is a leap year + * @param {?} hYear + * @return {?} + */ +function isIslamicLeapYear(hYear) { + return (14 + 11 * hYear) % 30 < 11; +} +/** + * Checks if gregorian years is a leap year + * @param {?} gDate + * @return {?} + */ +function isGregorianLeapYear(gDate) { + /** @type {?} */ + const year = gDate.getFullYear(); + return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0; +} +/** + * Returns the start of Hijri Month. + * `hMonth` is 0 for Muharram, 1 for Safar, etc. + * `hYear` is any Hijri hYear. + * @param {?} hYear + * @param {?} hMonth + * @return {?} + */ +function getIslamicMonthStart(hYear, hMonth) { + return Math.ceil(29.5 * hMonth) + (hYear - 1) * 354 + Math.floor((3 + 11 * hYear) / 30.0); +} +/** + * Returns the start of Hijri year. + * `year` is any Hijri year. + * @param {?} year + * @return {?} + */ +function getIslamicYearStart(year) { + return (year - 1) * 354 + Math.floor((3 + 11 * year) / 30.0); +} +/** + * @param {?} a + * @param {?} b + * @return {?} + */ +function mod(a, b) { + return a - b * Math.floor(a / b); +} +/** + * The civil calendar is one type of Hijri calendars used in islamic countries. + * Uses a fixed cycle of alternating 29- and 30-day months, + * with a leap day added to the last month of 11 out of every 30 years. + * http://cldr.unicode.org/development/development-process/design-proposals/islamic-calendar-types + * All the calculations here are based on the equations from "Calendrical Calculations" By Edward M. Reingold, Nachum + * Dershowitz. + * @type {?} + */ +const GREGORIAN_EPOCH = 1721425.5; +/** @type {?} */ +const ISLAMIC_EPOCH = 1948439.5; +export class NgbCalendarIslamicCivil extends NgbCalendarHijri { + /** + * Returns the equivalent islamic(civil) date value for a give input Gregorian date. + * `gDate` is a JS Date to be converted to Hijri. + * @param {?} gDate + * @return {?} + */ + fromGregorian(gDate) { + /** @type {?} */ + const gYear = gDate.getFullYear(); + /** @type {?} */ + const gMonth = gDate.getMonth(); + /** @type {?} */ + const gDay = gDate.getDate(); + /** @type {?} */ + let julianDay = GREGORIAN_EPOCH - 1 + 365 * (gYear - 1) + Math.floor((gYear - 1) / 4) + + -Math.floor((gYear - 1) / 100) + Math.floor((gYear - 1) / 400) + + Math.floor((367 * (gMonth + 1) - 362) / 12 + (gMonth + 1 <= 2 ? 0 : isGregorianLeapYear(gDate) ? -1 : -2) + gDay); + julianDay = Math.floor(julianDay) + 0.5; + /** @type {?} */ + const days = julianDay - ISLAMIC_EPOCH; + /** @type {?} */ + const hYear = Math.floor((30 * days + 10646) / 10631.0); + /** @type {?} */ + let hMonth = Math.ceil((days - 29 - getIslamicYearStart(hYear)) / 29.5); + hMonth = Math.min(hMonth, 11); + /** @type {?} */ + const hDay = Math.ceil(days - getIslamicMonthStart(hYear, hMonth)) + 1; + return new NgbDate(hYear, hMonth + 1, hDay); + } + /** + * Returns the equivalent JS date value for a give input islamic(civil) date. + * `hDate` is an islamic(civil) date to be converted to Gregorian. + * @param {?} hDate + * @return {?} + */ + toGregorian(hDate) { + /** @type {?} */ + const hYear = hDate.year; + /** @type {?} */ + const hMonth = hDate.month - 1; + /** @type {?} */ + const hDay = hDate.day; + /** @type {?} */ + const julianDay = hDay + Math.ceil(29.5 * hMonth) + (hYear - 1) * 354 + Math.floor((3 + 11 * hYear) / 30) + ISLAMIC_EPOCH - 1; + /** @type {?} */ + const wjd = Math.floor(julianDay - 0.5) + 0.5; + /** @type {?} */ + const depoch = wjd - GREGORIAN_EPOCH; + /** @type {?} */ + const quadricent = Math.floor(depoch / 146097); + /** @type {?} */ + const dqc = mod(depoch, 146097); + /** @type {?} */ + const cent = Math.floor(dqc / 36524); + /** @type {?} */ + const dcent = mod(dqc, 36524); + /** @type {?} */ + const quad = Math.floor(dcent / 1461); + /** @type {?} */ + const dquad = mod(dcent, 1461); + /** @type {?} */ + const yindex = Math.floor(dquad / 365); + /** @type {?} */ + let year = quadricent * 400 + cent * 100 + quad * 4 + yindex; + if (!(cent === 4 || yindex === 4)) { + year++; + } + /** @type {?} */ + const gYearStart = GREGORIAN_EPOCH + 365 * (year - 1) + Math.floor((year - 1) / 4) - Math.floor((year - 1) / 100) + + Math.floor((year - 1) / 400); + /** @type {?} */ + const yearday = wjd - gYearStart; + /** @type {?} */ + const tjd = GREGORIAN_EPOCH - 1 + 365 * (year - 1) + Math.floor((year - 1) / 4) - Math.floor((year - 1) / 100) + + Math.floor((year - 1) / 400) + Math.floor(739 / 12 + (isGregorianLeapYear(new Date(year, 3, 1)) ? -1 : -2) + 1); + /** @type {?} */ + const leapadj = wjd < tjd ? 0 : isGregorianLeapYear(new Date(year, 3, 1)) ? 1 : 2; + /** @type {?} */ + const month = Math.floor(((yearday + leapadj) * 12 + 373) / 367); + /** @type {?} */ + const tjd2 = GREGORIAN_EPOCH - 1 + 365 * (year - 1) + Math.floor((year - 1) / 4) - Math.floor((year - 1) / 100) + + Math.floor((year - 1) / 400) + + Math.floor((367 * month - 362) / 12 + (month <= 2 ? 0 : isGregorianLeapYear(new Date(year, month - 1, 1)) ? -1 : -2) + + 1); + /** @type {?} */ + const day = wjd - tjd2 + 1; + return new Date(year, month - 1, day); + } + /** + * Returns the number of days in a specific Hijri month. + * `month` is 1 for Muharram, 2 for Safar, etc. + * `year` is any Hijri year. + * @param {?} month + * @param {?} year + * @return {?} + */ + getDaysPerMonth(month, year) { + year = year + Math.floor(month / 13); + month = ((month - 1) % 12) + 1; + /** @type {?} */ + let length = 29 + month % 2; + if (month === 12 && isIslamicLeapYear(year)) { + length++; + } + return length; + } +} +NgbCalendarIslamicCivil.decorators = [ + { type: Injectable } +]; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdiLWNhbGVuZGFyLWlzbGFtaWMtY2l2aWwuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJkYXRlcGlja2VyL2hpanJpL25nYi1jYWxlbmRhci1pc2xhbWljLWNpdmlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ3BDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7Ozs7OztBQUt6QyxTQUFTLGlCQUFpQixDQUFDLEtBQWE7SUFDdEMsT0FBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNyQyxDQUFDOzs7Ozs7QUFLRCxTQUFTLG1CQUFtQixDQUFDLEtBQVc7O1VBQ2hDLElBQUksR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFO0lBQ2hDLE9BQU8sSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUksSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDaEUsQ0FBQzs7Ozs7Ozs7O0FBT0QsU0FBUyxvQkFBb0IsQ0FBQyxLQUFhLEVBQUUsTUFBYztJQUN6RCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUM1RixDQUFDOzs7Ozs7O0FBTUQsU0FBUyxtQkFBbUIsQ0FBQyxJQUFZO0lBQ3ZDLE9BQU8sQ0FBQyxJQUFJLEdB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QUFDOzs7WUE5RUYsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TmdiQ2FsZW5kYXJIaWpyaX0gZnJvbSAnLi9uZ2ItY2FsZW5kYXItaGlqcmknO1xuaW1wb3J0IHtOZ2JEYXRlfSBmcm9tICcuLi9uZ2ItZGF0ZSc7XG5pbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIENoZWNrcyBpZiBpc2xhbWljIHllYXIgaXMgYSBsZWFwIHllYXJcbiAqL1xuZnVuY3Rpb24gaXNJc2xhbWljTGVhcFllYXIoaFllYXI6IG51bWJlcik6IGJvb2xlYW4ge1xuICByZXR1cm4gKDE0ICsgMTEgKiBoWWVhcikgJSAzMCA8IDExO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBncmVnb3JpYW4geWVhcnMgaXMgYSBsZWFwIHllYXJcbiAqL1xuZnVuY3Rpb24gaXNHcmVnb3JpYW5MZWFwWWVhcihnRGF0ZTogRGF0ZSk6IGJvb2xlYW4ge1xuICBjb25zdCB5ZWFyID0gZ0RhdGUuZ2V0RnVsbFllYXIoKTtcbiAgcmV0dXJuIHllYXIgJSA0ID09PSAwICYmIHllYXIgJSAxMDAgIT09IDAgfHwgeWVhciAlIDQwMCA9PT0gMDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBzdGFydCBvZiBIaWpyaSBNb250aC5cbiAqIGBoTW9udGhgIGlzIDAgZm9yIE11aGFycmFtLCAxIGZvciBTYWZhciwgZXRjLlxuICogYGhZZWFyYCBpcyBhbnkgSGlqcmkgaFllYXIuXG4gKi9cbmZ1bmN0aW9uIGdldElzbGFtaWNNb250aFN0YXJ0KGhZZWFyOiBudW1iZXIsIGhNb250aDogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGguY2VpbCgyOS41ICogaE1vbnRoKSArIChoWWVhciAtIDEpICogMzU0ICsgTWF0aC5mbG9vcigoMyArIDExICogaFllYXIpIC8gMzAuMCk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgc3RhcnQgb2YgSGlqcmkgeWVhci5cbiAqIGB5ZWFyYCBpcyBhbnkgSGlqcmkgeWVhci5cbiAqL1xuZnVuY3Rpb24gZ2V0SXNsYW1pY1llYXJTdGFydCh5ZWFyOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gKHllYXIgLSAxKSAqIDM1NCArIE1hdGguZmxvb3IoKDMgKyAxMSAqIHllYXIpIC8gMzAuMCk7XG59XG5cbmZ1bmN0aW9uIG1vZChhOiBudW1iZXIsIGI6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBhIC0gYiAqIE1hdGguZmxvb3IoYSAvIGIpO1xufVxuXG4vKipcbiAqIFRoZSBjaXZpbCBjYWxlbmRhciBpcyBvbmUgdHlwZSBvZiBIaWpyaSBjYWxlbmRhcnMgdXNlZCBpbiBpc2xhbWljIGNvdW50cmllcy5cbiAqIFVzZXMgYSBmaXhlZCBjeWNsZSBvZiBhbHRlcm5hdGluZyAyOS0gYW5kIDMwLWRheSBtb250aHMsXG4gKiB3aXRoIGEgbGVhcCBkYXkgYWRkZWQgdG8gdGhlIGxhc3QgbW9udGggb2YgMTEgb3V0IG9mIGV2ZXJ5IDMwIHllYXJzLlxuICogaHR0cDovL2NsZHIudW5pY29kZS5vcmcvZGV2ZWxvcG1lbnQvZGV2ZWxvcG1lbnQtcHJvY2Vzcy9kZXNpZ24tcHJvcG9zYWxzL2lzbGFtaWMtY2FsZW5kYXItdHlwZXNcbiAqIEFsbCB0aGUgY2FsY3VsYXRpb25zIGhlcmUgYXJlIGJhc2VkIG9uIHRoZSBlcXVhdGlvbnMgZnJvbSBcIkNhbGVuZHJpY2FsIENhbGN1bGF0aW9uc1wiIEJ5IEVkd2FyZCBNLiBSZWluZ29sZCwgTmFjaHVtXG4gKiBEZXJzaG93aXR6LlxuICovXG5cbmNvbnN0IEdSRUdPUklBTl9FUE9DSCA9IDE3MjE0MjUuNTtcbmNvbnN0IElTTEFNSUNfRVBPQ0ggPSAxOTQ4NDM5LjU7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBOZ2JDYWxlbmRhcklzbGFtaWNDaXZpbCBleHRlbmRzIE5nYkNhbGVuZGFySGlqcmkge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgZXF1aXZhbGVudCBpc2xhbWljKGNpdmlsKSBkYXRlIHZhbHVlIGZvciBhIGdpdmUgaW5wdXQgR3JlZ29yaWFuIGRhdGUuXG4gICAqIGBnRGF0ZWAgaXMgYSBKUyBEYXRlIHRvIGJlIGNvbnZlcnRlZCB0byBIaWpyaS5cbiAgICovXG4gIGZyb21HcmVnb3JpYW4oZ0RhdGU6IERhdGUpOiBOZ2JEYXRlIHtcbiAgICBjb25zdCBnWWVhciA9IGdEYXRlLmdldEZ1bGxZZWFyKCksIGdNb250aCA9IGdEYXRlLmdldE1vbnRoKCksIGdEYXkgPSBnRGF0ZS5nZXREYXRlKCk7XG5cbiAgICBsZXQganVsaWFuRGF5ID0gR1JFR09SSUFOX0VQT0NIIC0gMSArIDM2NSAqIChnWWVhciAtIDEpICsgTWF0aC5mbG9vcigoZ1llYXIgLSAxKSAvIDQpICtcbiAgICAgICAgLU1hdGguZmxvb3IoKGdZZWFyIC0gMSkgLyAxMDApICsgTWF0aC5mbG9vcigoZ1llYXIgLSAxKSAvIDQwMCkgK1xuICAgICAgICBNYXRoLmZsb29yKFxuICAgICAgICAgICAgKDM2NyAqIChnTW9udGggKyAxKSAtIDM2MikgLyAxMiArIChnTW9udGggKyAxIDw9IDIgPyAwIDogaXNHcmVnb3JpYW5MZWFwWWVhcihnRGF0ZSkgPyAtMSA6IC0yKSArIGdEYXkpO1xuICAgIGp1bGlhbkRheSA9IE1hdGguZmxvb3IoanVsaWFuRGF5KSArIDAuNTtcblxuICAgIGNvbnN0IGRheXMgPSBqdWxpYW5EYXkgLSBJU0xBTUlDX0VQT0NIO1xuICAgIGNvbnN0IGhZZWFyID0gTWF0aC5mbG9vcigoMzAgKiBkYXlzICsgMTA2NDYpIC8gMTA2MzEuMCk7XG4gICAgbGV0IGhNb250aCA9IE1hdGguY2VpbCgoZGF5cyAtIDI5IC0gZ2V0SXNsYW1pY1llYXJTdGFydChoWWVhcikpIC8gMjkuNSk7XG4gICAgaE1vbnRoID0gTWF0aC5taW4oaE1vbnRoLCAxMSk7XG4gICAgY29uc3QgaERheSA9IE1hdGguY2VpbChkYXlzIC0gZ2V0SXNsYW1pY01vbnRoU3RhcnQoaFllYXIsIGhNb250aCkpICsgMTtcbiAgICByZXR1cm4gbmV3IE5nYkRhdGUoaFllYXIsIGhNb250aCArIDEsIGhEYXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGVxdWl2YWxlbnQgSlMgZGF0ZSB2YWx1ZSBmb3IgYSBnaXZlIGlucHV0IGlzbGFtaWMoY2l2aWwpIGRhdGUuXG4gICAqIGBoRGF0ZWAgaXMgYW4gaXNsYW1pYyhjaXZpbCkgZGF0ZSB0byBiZSBjb252ZXJ0ZWQgdG8gR3JlZ29yaWFuLlxuICAgKi9cbiAgdG9HcmVnb3JpYW4oaERhdGU6IE5nYkRhdGUpOiBEYXRlIHtcbiAgICBjb25zdCBoWWVhciA9IGhEYXRlLnllYXI7XG4gICAgY29uc3QgaE1vbnRoID0gaERhdGUubW9udGggLSAxO1xuICAgIGNvbnN0IGhEYXkgPSBoRGF0ZS5kYXk7XG4gICAgY29uc3QganVsaWFuRGF5ID1cbiAgICAgICAgaERheSArIE1hdGguY2VpbCgyOS41ICogaE1vbnRoKSArIChoWWVhciAtIDEpICogMzU0ICsgTWF0aC5mbG9vcigoMyArIDExICogaFllYXIpIC8gMzApICsgSVNMQU1JQ19FUE9DSCAtIDE7XG5cbiAgICBjb25zdCB3amQgPSBNYXRoLmZsb29yKGp1bGlhbkRheSAtIDAuNSkgKyAwLjUsIGRlcG9jaCA9IHdqZCAtIEdSRUdPUklBTl9FUE9DSCxcbiAgICAgICAgICBxdWFkcmljZW50ID0gTWF0aC5mbG9vcihkZXBvY2ggLyAxNDYwOTcpLCBkcWMgPSBtb2QoZGVwb2NoLCAxNDYwOTcpLCBjZW50ID0gTWF0aC5mbG9vcihkcWMgLyAzNjUyNCksXG4gICAgICAgICAgZGNlbnQgPSBtb2QoZHFjLCAzNjUyNCksIHF1YWQgPSBNYXRoLmZsb29yKGRjZW50IC8gMTQ2MSksIGRxdWFkID0gbW9kKGRjZW50LCAxNDYxKSxcbiAgICAgICAgICB5aW5kZXggPSBNYXRoLmZsb29yKGRxdWFkIC8gMzY1KTtcbiAgICBsZXQgeWVhciA9IHF1YWRyaWNlbnQgKiA0MDAgKyBjZW50ICogMTAwICsgcXVhZCAqIDQgKyB5aW5kZXg7XG4gICAgaWYgKCEoY2VudCA9PT0gNCB8fCB5aW5kZXggPT09IDQpKSB7XG4gICAgICB5ZWFyKys7XG4gICAgfVxuXG4gICAgY29uc3QgZ1llYXJTdGFydCA9IEdSRUdPUklBTl9FUE9DSCArIDM2NSAqICh5ZWFyIC0gMSkgKyBNYXRoLmZsb29yKCh5ZWFyIC0gMSkgLyA0KSAtIE1hdGguZmxvb3IoKHllYXIgLSAxKSAvIDEwMCkgK1xuICAgICAgICBNYXRoLmZsb29yKCh5ZWFyIC0gMSkgLyA0MDApO1xuXG4gICAgY29uc3QgeWVhcmRheSA9IHdqZCAtIGdZZWFyU3RhcnQ7XG5cbiAgICBjb25zdCB0amQgPSBHUkVHT1JJQU5fRVBPQ0ggLSAxICsgMzY1ICogKHllYXIgLSAxKSArIE1hdGguZmxvb3IoKHllYXIgLSAxKSAvIDQpIC0gTWF0aC5mbG9vcigoeWVhciAtIDEpIC8gMTAwKSArXG4gICAgICAgIE1hdGguZmxvb3IoKHllYXIgLSAxKSAvIDQwMCkgKyBNYXRoLmZsb29yKDczOSAvIDEyICsgKGlzR3JlZ29yaWFuTGVhcFllYXIobmV3IERhdGUoeWVhciwgMywgMSkpID8gLTEgOiAtMikgKyAxKTtcblxuICAgIGNvbnN0IGxlYXBhZGogPSB3amQgPCB0amQgPyAwIDogaXNHcmVnb3JpYW5MZWFwWWVhcihuZXcgRGF0ZSh5ZWFyLCAzLCAxKSkgPyAxIDogMjtcblxuICAgIGNvbnN0IG1vbnRoID0gTWF0aC5mbG9vcigoKHllYXJkYXkgKyBsZWFwYWRqKSAqIDEyICsgMzczKSAvIDM2Nyk7XG4gICAgY29uc3QgdGpkMiA9IEdSRUdPUklBTl9FUE9DSCAtIDEgKyAzNjUgKiAoeWVhciAtIDEpICsgTWF0aC5mbG9vcigoeWVhciAtIDEpIC8gNCkgLSBNYXRoLmZsb29yKCh5ZWFyIC0gMSkgLyAxMDApICtcbiAgICAgICAgTWF0aC5mbG9vcigoeWVhciAtIDEpIC8gNDAwKSArXG4gICAgICAgIE1hdGguZmxvb3IoXG4gICAgICAgICAgICAoMzY3ICogbW9udGggLSAzNjIpIC8gMTIgKyAobW9udGggPD0gMiA/IDAgOiBpc0dyZWdvcmlhbkxlYXBZZWFyKG5ldyBEYXRlKHllYXIsIG1vbnRoIC0gMSwgMSkpID8gLTEgOiAtMikgK1xuICAgICAgICAgICAgMSk7XG5cbiAgICBjb25zdCBkYXkgPSB3amQgLSB0amQyICsgMTtcblxuICAgIHJldHVybiBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRheSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRheXMgaW4gYSBzcGVjaWZpYyBIaWpyaSBtb250aC5cbiAgICogYG1vbnRoYCBpcyAxIGZvciBNdWhhcnJhbSwgMiBmb3IgU2FmYXIsIGV0Yy5cbiAgICogYHllYXJgIGlzIGFueSBIaWpyaSB5ZWFyLlxuICAgKi9cbiAgZ2V0RGF5c1Blck1vbnRoKG1vbnRoOiBudW1iZXIsIHllYXI6IG51bWJlcik6IG51bWJlciB7XG4gICAgeWVhciA9IHllYXIgKyBNYXRoLmZsb29yKG1vbnRoIC8gMTMpO1xuICAgIG1vbnRoID0gKChtb250aCAtIDEpICUgMTIpICsgMTtcbiAgICBsZXQgbGVuZ3RoID0gMjkgKyBtb250aCAlIDI7XG4gICAgaWYgKG1vbnRoID09PSAxMiAmJiBpc0lzbGFtaWNMZWFwWWVhcih5ZWFyKSkge1xuICAgICAgbGVuZ3RoKys7XG4gICAgfVxuICAgIHJldHVybiBsZW5ndGg7XG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/datepicker/hijri/ngb-calendar-islamic-umalqura.js b/dist/sunbird-ui-components/esm2015/datepicker/hijri/ngb-calendar-islamic-umalqura.js new file mode 100644 index 0000000..7ce6e0e --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/datepicker/hijri/ngb-calendar-islamic-umalqura.js @@ -0,0 +1,261 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgbCalendarIslamicCivil } from './ngb-calendar-islamic-civil'; +import { NgbDate } from '../ngb-date'; +import { Injectable } from '@angular/core'; +/** + * Umalqura calendar is one type of Hijri calendars used in islamic countries. + * This Calendar is used by Saudi Arabia for administrative purpose. + * Unlike tabular calendars, the algorithm involves astronomical calculation, but it's still deterministic. + * http://cldr.unicode.org/development/development-process/design-proposals/islamic-calendar-types + * @type {?} + */ +const GREGORIAN_FIRST_DATE = new Date(1882, 10, 12); +/** @type {?} */ +const GREGORIAN_LAST_DATE = new Date(2174, 10, 25); +/** @type {?} */ +const HIJRI_BEGIN = 1300; +/** @type {?} */ +const HIJRI_END = 1600; +/** @type {?} */ +const ONE_DAY = 1000 * 60 * 60 * 24; +/** @type {?} */ +const MONTH_LENGTH = [ + // 1300-1304 + '101010101010', '110101010100', '111011001001', '011011010100', '011011101010', + // 1305-1309 + '001101101100', '101010101101', '010101010101', '011010101001', '011110010010', + // 1310-1314 + '101110101001', '010111010100', '101011011010', '010101011100', '110100101101', + // 1315-1319 + '011010010101', '011101001010', '101101010100', '101101101010', '010110101101', + // 1320-1324 + '010010101110', '101001001111', '010100010111', '011010001011', '011010100101', + // 1325-1329 + '101011010101', '001011010110', '100101011011', '010010011101', '101001001101', + // 1330-1334 + '110100100110', '110110010101', '010110101100', '100110110110', '001010111010', + // 1335-1339 + '101001011011', '010100101011', '101010010101', '011011001010', '101011101001', + // 1340-1344 + '001011110100', '100101110110', '001010110110', '100101010110', '101011001010', + // 1345-1349 + '101110100100', '101111010010', '010111011001', '001011011100', '100101101101', + // 1350-1354 + '010101001101', '101010100101', '101101010010', '101110100101', '010110110100', + // 1355-1359 + '100110110110', '010101010111', '001010010111', '010101001011', '011010100011', + // 1360-1364 + '011101010010', '101101100101', '010101101010', '101010101011', '010100101011', + // 1365-1369 + '110010010101', '110101001010', '110110100101', '010111001010', '101011010110', + // 1370-1374 + '100101010111', '010010101011', '100101001011', '101010100101', '101101010010', + // 1375-1379 + '101101101010', '010101110101', '001001110110', '100010110111', '010001011011', + // 1380-1384 + '010101010101', '010110101001', '010110110100', '100111011010', '010011011101', + // 1385-1389 + '001001101110', '100100110110', '101010101010', '110101010100', '110110110010', + // 1390-1394 + '010111010101', '001011011010', '100101011011', '010010101011', '101001010101', + // 1395-1399 + '101101001001', '101101100100', '101101110001', '010110110100', '101010110101', + // 1400-1404 + '101001010101', '110100100101', '111010010010', '111011001001', '011011010100', + // 1405-1409 + '101011101001', '100101101011', '010010101011', '101010010011', '110101001001', + // 1410-1414 + '110110100100', '110110110010', '101010111001', '010010111010', '101001011011', + // 1415-1419 + '010100101011', '101010010101', '101100101010', '101101010101', '010101011100', + // 1420-1424 + '010010111101', '001000111101', '100100011101', '101010010101', '101101001010', + // 1425-1429 + '101101011010', '010101101101', '001010110110', '100100111011', '010010011011', + // 1430-1434 + '011001010101', '011010101001', '011101010100', '101101101010', '010101101100', + // 1435-1439 + '101010101101', '010101010101', '101100101001', '101110010010', '101110101001', + // 1440-1444 + '010111010100', '101011011010', '010101011010', '101010101011', '010110010101', + // 1445-1449 + '011101001001', '011101100100', '101110101010', '010110110101', '001010110110', + // 1450-1454 + '101001010110', '111001001101', '101100100101', '101101010010', '101101101010', + // 1455-1459 + '010110101101', '001010101110', '100100101111', '010010010111', '011001001011', + // 1460-1464 + '011010100101', '011010101100', '101011010110', '010101011101', '010010011101', + // 1465-1469 + '101001001101', '110100010110', '110110010101', '010110101010', '010110110101', + // 1470-1474 + '001011011010', '100101011011', '010010101101', '010110010101', '011011001010', + // 1475-1479 + '011011100100', '101011101010', '010011110101', '001010110110', '100101010110', + // 1480-1484 + '101010101010', '101101010100', '101111010010', '010111011001', '001011101010', + // 1485-1489 + '100101101101', '010010101101', '101010010101', '101101001010', '101110100101', + // 1490-1494 + '010110110010', '100110110101', '010011010110', '101010010111', '010101000111', + // 1495-1499 + '011010010011', '011101001001', '101101010101', '010101101010', '101001101011', + // 1500-1504 + '010100101011', '101010001011', '110101000110', '110110100011', '010111001010', + // 1505-1509 + '101011010110', '010011011011', '001001101011', '100101001011', '101010100101', + // 1510-1514 + '101101010010', '101101101001', '010101110101', '000101110110', '100010110111', + // 1515-1519 + '001001011011', '010100101011', '010101100101', '010110110100', '100111011010', + // 1520-1524 + '010011101101', '000101101101', '100010110110', '101010100110', '110101010010', + // 1525-1529 + '110110101001', '010111010100', '101011011010', '100101011011', '010010101011', + // 1530-1534 + '011001010011', '011100101001', '011101100010', '101110101001', '010110110010', + // 1535-1539 + '101010110101', '010101010101', '101100100101', '110110010010', '111011001001', + // 1540-1544 + '011011010010', '101011101001', '010101101011', '010010101011', '101001010101', + // 1545-1549 + '110100101001', '110101010100', '110110101010', '100110110101', '010010111010', + // 1550-1554 + '101000111011', '010010011011', '101001001101', '101010101010', '101011010101', + // 1555-1559 + '001011011010', '100101011101', '010001011110', '101000101110', '110010011010', + // 1560-1564 + '110101010101', '011010110010', '011010111001', '010010111010', '101001011101', + // 1565-1569 + '010100101101', '101010010101', '101101010010', '101110101000', '101110110100', + // 1570-1574 + '010110111001', '001011011010', '100101011010', '101101001010', '110110100100', + // 1575-1579 + '111011010001', '011011101000', '101101101010', '010101101101', '010100110101', + // 1580-1584 + '011010010101', '110101001010', '110110101000', '110111010100', '011011011010', + // 1585-1589 + '010101011011', '001010011101', '011000101011', '101100010101', '101101001010', + // 1590-1594 + '101110010101', '010110101010', '101010101110', '100100101110', '110010001111', + // 1595-1599 + '010100100111', '011010010101', '011010101010', '101011010110', '010101011101', + // 1600 + '001010011101' +]; +/** + * @param {?} date1 + * @param {?} date2 + * @return {?} + */ +function getDaysDiff(date1, date2) { + // Ignores the time part in date1 and date2: + /** @type {?} */ + const time1 = Date.UTC(date1.getFullYear(), date1.getMonth(), date1.getDate()); + /** @type {?} */ + const time2 = Date.UTC(date2.getFullYear(), date2.getMonth(), date2.getDate()); + /** @type {?} */ + const diff = Math.abs(time1 - time2); + return Math.round(diff / ONE_DAY); +} +export class NgbCalendarIslamicUmalqura extends NgbCalendarIslamicCivil { + /** + * Returns the equivalent islamic(Umalqura) date value for a give input Gregorian date. + * `gdate` is s JS Date to be converted to Hijri. + * @param {?} gDate + * @return {?} + */ + fromGregorian(gDate) { + /** @type {?} */ + let hDay = 1; + /** @type {?} */ + let hMonth = 0; + /** @type {?} */ + let hYear = 1300; + /** @type {?} */ + let daysDiff = getDaysDiff(gDate, GREGORIAN_FIRST_DATE); + if (gDate.getTime() - GREGORIAN_FIRST_DATE.getTime() >= 0 && gDate.getTime() - GREGORIAN_LAST_DATE.getTime() <= 0) { + /** @type {?} */ + let year = 1300; + for (let i = 0; i < MONTH_LENGTH.length; i++, year++) { + for (let j = 0; j < 12; j++) { + /** @type {?} */ + let numOfDays = +MONTH_LENGTH[i][j] + 29; + if (daysDiff <= numOfDays) { + hDay = daysDiff + 1; + if (hDay > numOfDays) { + hDay = 1; + j++; + } + if (j > 11) { + j = 0; + year++; + } + hMonth = j; + hYear = year; + return new NgbDate(hYear, hMonth + 1, hDay); + } + daysDiff = daysDiff - numOfDays; + } + } + } + else { + return super.fromGregorian(gDate); + } + } + /** + * Converts the current Hijri date to Gregorian. + * @param {?} hDate + * @return {?} + */ + toGregorian(hDate) { + /** @type {?} */ + const hYear = hDate.year; + /** @type {?} */ + const hMonth = hDate.month - 1; + /** @type {?} */ + const hDay = hDate.day; + /** @type {?} */ + let gDate = new Date(GREGORIAN_FIRST_DATE); + /** @type {?} */ + let dayDiff = hDay - 1; + if (hYear >= HIJRI_BEGIN && hYear <= HIJRI_END) { + for (let y = 0; y < hYear - HIJRI_BEGIN; y++) { + for (let m = 0; m < 12; m++) { + dayDiff += +MONTH_LENGTH[y][m] + 29; + } + } + for (let m = 0; m < hMonth; m++) { + dayDiff += +MONTH_LENGTH[hYear - HIJRI_BEGIN][m] + 29; + } + gDate.setDate(GREGORIAN_FIRST_DATE.getDate() + dayDiff); + } + else { + gDate = super.toGregorian(hDate); + } + return gDate; + } + /** + * Returns the number of days in a specific Hijri hMonth. + * `hMonth` is 1 for Muharram, 2 for Safar, etc. + * `hYear` is any Hijri hYear. + * @param {?} hMonth + * @param {?} hYear + * @return {?} + */ + getDaysPerMonth(hMonth, hYear) { + if (hYear >= HIJRI_BEGIN && hYear <= HIJRI_END) { + /** @type {?} */ + const pos = hYear - HIJRI_BEGIN; + return +MONTH_LENGTH[pos][hMonth - 1] + 29; + } + return super.getDaysPerMonth(hMonth, hYear); + } +} +NgbCalendarIslamicUmalqura.decorators = [ + { type: Injectable } +]; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdiLWNhbGVuZGFyLWlzbGFtaWMtdW1hbHF1cmEuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJkYXRlcGlja2VyL2hpanJpL25nYi1jYWxlbmRhci1pc2xhbWljLXVtYWxxdXJhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUNyRSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ3BDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7O01BU25DLG9CQUFvQixHQUFHLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDOztNQUM3QyxtQkFBbUIsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQzs7TUFDNUMsV0FBVyxHQUFHLElBQUk7O01BQ2xCLFNBQVMsR0FBRyxJQUFJOztNQUNoQixPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTs7TUFFN0IsWUFBWSxHQUFHO0lBQ25CLFlBQVk7SUFDWixjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYztJQUM5RSxZQUFZO0lBQ1osY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWM7SUFDOUUsWUFBWTtJQUNaLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjO0lBQzlFLFlBQVk7SUFDWixjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYztJQUM5RSxZQUFZO0lBQ1osY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWM7SUFDOUUsWUFBWTtJQUNaLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjO0lBQzlFLFlBQVk7SUFDWixjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYztJQUM5RSxZQUFZO0lBQ1osY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWM7SUFDOUUsWUFBWTtJQUNaLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjO0lBQzlFLFlBQVk7SUFDWixjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYztJQUM5RSxZQUFZO0lBQ1osY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWM7SUFDOUUsWUFBWTtJQUNaLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjO0lBQzlFLFlBQVk7SUFDWixjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYztJQUM5RSxZQUFZO0lBQ1osY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWM7SUFDOUUsWUFBWTtJQUNaLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjO0lBQzlFLFlBQVk7SUFDWixjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYztJQUM5RSxZQUFZO0lBQ1osY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWM7SUFDOUUsWUFBWTtJQUNaLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjO0lBQzlFLFlBQVk7SUFDWixjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYztJQUM5RSxZQUFZO0lBQ1osY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWM7SUFDOUUsWUFBWTtJQUNaLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjO0lBQzlFLFlBQVk7SUFDWixjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYztJQUM5RSxZQUFZO0lBQ1osY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWM7SUFDOUUsWUFBWTtJQUNaLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjO0lBQzlFLFlBQVk7SUFDWixjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYztJQUM5RSxZQUFZO0lBQ1osY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWM7SUFDOUUsWUFBWTtJQUNaLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjO0lBQzlFLFlBQVk7SUFDWixjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYztJQUM5RSxZQUFZO0lBQ1osY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWM7SUFDOUUsWUFBWTtJQUNaLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjO0lBQzlFLFlBQVk7SUFDWixjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYztJQUM5RSxZQUFZO0lBQ1osY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWM7SUFDOUUsWUFBWTtJQUNaLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjO0lBQzlFLFlBQVk7SUFDWixjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYztJQUM5RSxZQUFZO0lBQ1osY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWM7SUFDOUUsWUFBWTtJQUNaLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjO0lBQzlFLFlBQVk7SUFDWixjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYztJQUM5RSxZQUFZO0lBQ1osY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWM7SUFDOUUsWUFBWTtJQUNaLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjO0lBQzlFLFlBQVk7SUFDWixjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYztJQUM5RSxZQUFZO0lBQ1osY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWM7SUFDOUUsWUFBWTtJQUNaLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjO0lBQzlFLFlBQVk7SUFDWixjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYztJQUM5RSxZQUFZO0lBQ1osY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWM7SUFDOUUsWUFBWTtJQUNaLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjO0lBQzlFLFlBQVk7SUFDWixjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYztJQUM5RSxZQUFZO0lBQ1osY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWM7SUFDOUUsWUFBWTtJQUNaLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjO0lBQzlFLFlBQVk7SUFDWixjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYztJQUM5RSxZQUFZO0lBQ1osY0FBYyxFQUFFLGNBQWMsRUFBRSxj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LEtBQUssR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7YUFDdkQ7WUFDRCxLQUFLLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO1NBQ3pEO2FBQU07WUFDTCxLQUFLLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNsQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzs7Ozs7Ozs7O0lBTUQsZUFBZSxDQUFDLE1BQWMsRUFBRSxLQUFhO1FBQzNDLElBQUksS0FBSyxJQUFJLFdBQVcsSUFBSSxLQUFLLElBQUksU0FBUyxFQUFFOztrQkFDeEMsR0FBRyxHQUFHLEtBQUssR0FBRyxXQUFXO1lBQy9CLE9BQU8sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUM1QztRQUNELE9BQU8sS0FBSyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDOUMsQ0FBQzs7O1lBdEVGLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge05nYkNhbGVuZGFySXNsYW1pY0NpdmlsfSBmcm9tICcuL25nYi1jYWxlbmRhci1pc2xhbWljLWNpdmlsJztcbmltcG9ydCB7TmdiRGF0ZX0gZnJvbSAnLi4vbmdiLWRhdGUnO1xuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBVbWFscXVyYSBjYWxlbmRhciBpcyBvbmUgdHlwZSBvZiBIaWpyaSBjYWxlbmRhcnMgdXNlZCBpbiBpc2xhbWljIGNvdW50cmllcy5cbiAqIFRoaXMgQ2FsZW5kYXIgaXMgdXNlZCBieSBTYXVkaSBBcmFiaWEgZm9yIGFkbWluaXN0cmF0aXZlIHB1cnBvc2UuXG4gKiBVbmxpa2UgdGFidWxhciBjYWxlbmRhcnMsIHRoZSBhbGdvcml0aG0gaW52b2x2ZXMgYXN0cm9ub21pY2FsIGNhbGN1bGF0aW9uLCBidXQgaXQncyBzdGlsbCBkZXRlcm1pbmlzdGljLlxuICogaHR0cDovL2NsZHIudW5pY29kZS5vcmcvZGV2ZWxvcG1lbnQvZGV2ZWxvcG1lbnQtcHJvY2Vzcy9kZXNpZ24tcHJvcG9zYWxzL2lzbGFtaWMtY2FsZW5kYXItdHlwZXNcbiAqL1xuXG5jb25zdCBHUkVHT1JJQU5fRklSU1RfREFURSA9IG5ldyBEYXRlKDE4ODIsIDEwLCAxMik7XG5jb25zdCBHUkVHT1JJQU5fTEFTVF9EQVRFID0gbmV3IERhdGUoMjE3NCwgMTAsIDI1KTtcbmNvbnN0IEhJSlJJX0JFR0lOID0gMTMwMDtcbmNvbnN0IEhJSlJJX0VORCA9IDE2MDA7XG5jb25zdCBPTkVfREFZID0gMTAwMCAqIDYwICogNjAgKiAyNDtcblxuY29uc3QgTU9OVEhfTEVOR1RIID0gW1xuICAvLyAxMzAwLTEzMDRcbiAgJzEwMTAxMDEwMTAxMCcsICcxMTAxMDEwMTAxMDAnLCAnMTExMDExMDAxMDAxJywgJzAxMTAxMTAxMDEwMCcsICcwMTEwMTExMDEwMTAnLFxuICAvLyAxMzA1LTEzMDlcbiAgJzAwMTEwMTEwMTEwMCcsICcxMDEwMTAxMDExMDEnLCAnMDEwMTAxMDEwMTAxJywgJzAxMTAxMDEwMTAwMScsICcwMTExMTAwMTAwMTAnLFxuICAvLyAxMzEwLTEzMTRcbiAgJzEwMTExMDEwMTAwMScsICcwMTAxMTEwMTAxMDAnLCAnMTAxMDExMDExMDEwJywgJzAxMDEwMTAxMTEwMCcsICcxMTAxMDAxMDExMDEnLFxuICAvLyAxMzE1LTEzMTlcbiAgJzAxMTAxMDAxMDEwMScsICcwMTExMDEwMDEwMTAnLCAnMTAxMTAxMDEwMTAwJywgJzEwMTEwMTEwMTAxMCcsICcwMTAxMTAxMDExMDEnLFxuICAvLyAxMzIwLTEzMjRcbiAgJzAxMDAxMDEwMTExMCcsICcxMDEwMDEwMDExMTEnLCAnMDEwMTAwMDEwMTExJywgJzAxMTAxMDAwMTAxMScsICcwMTEwMTAxMDAxMDEnLFxuICAvLyAxMzI1LTEzMjlcbiAgJzEwMTAxMTAxMDEwMScsICcwMDEwMTEwMTAxMTAnLCAnMTAwMTAxMDExMDExJywgJzAxMDAxMDAxMTEwMScsICcxMDEwMDEwMDExMDEnLFxuICAvLyAxMzMwLTEzMzRcbiAgJzExMDEwMDEwMDExMCcsICcxMTAxMTAwMTAxMDEnLCAnMDEwMTEwMTAxMTAwJywgJzEwMDExMDExMDExMCcsICcwMDEwMTAxMTEwMTAnLFxuICAvLyAxMzM1LTEzMzlcbiAgJzEwMTAwMTAxMTAxMScsICcwMTAxMDAxMDEwMTEnLCAnMTAxMDEwMDEwMTAxJywgJzAxMTAxMTAwMTAxMCcsICcxMDEwMTExMDEwMDEnLFxuICAvLyAxMzQwLTEzNDRcbiAgJzAwMTAxMTExMDEwMCcsICcxMDAxMDExMTAxMTAnLCAnMDAxMDEwMTEwMTEwJywgJzEwMDEwMTAxMDExMCcsICcxMDEwMTEwMDEwMTAnLFxuICAvLyAxMzQ1LTEzNDlcbiAgJzEwMTExMDEwMDEwMCcsICcxMDExMTEwMTAwMTAnLCAnMDEwMTExMDExMDAxJywgJzAwMTAxMTAxMTEwMCcsICcxMDAxMDExMDExMDEnLFxuICAvLyAxMzUwLTEzNTRcbiAgJzAxMDEwMTAwMTEwMScsICcxMDEwMTAxMDAxMDEnLCAnMTAxMTAxMDEwMDEwJywgJzEwMTExMDEwMDEwMScsICcwMTAxMTAxMTAxMDAnLFxuICAvLyAxMzU1LTEzNTlcbiAgJzEwMDExMDExMDExMCcsICcwMTAxMDEwMTAxMTEnLCAnMDAxMDEwMDEwMTExJywgJzAxMDEwMTAwMTAxMScsICcwMTEwMTAxMDAwMTEnLFxuICAvLyAxMzYwLTEzNjRcbiAgJzAxMTEwMTAxMDAxMCcsICcxMDExMDExMDAxMDEnLCAnMDEwMTAxMTAxMDEwJywgJzEwMTAxMDEwMTAxMScsICcwMTAxMDAxMDEwMTEnLFxuICAvLyAxMzY1LTEzNjlcbiAgJzExMDAxMDAxMDEwMScsICcxMTAxMDEwMDEwMTAnLCAnMTEwMTEwMTAwMTAxJywgJzAxMDExMTAwMTAxMCcsICcxMDEwMTEwMTAxMTAnLFxuICAvLyAxMzcwLTEzNzRcbiAgJzEwMDEwMTAxMDExMScsICcwMTAwMTAxMDEwMTEnLCAnMTAwMTAxMDAxMDExJywgJzEwMTAxMDEwMDEwMScsICcxMDExMDEwMTAwMTAnLFxuICAvLyAxMzc1LTEzNzlcbiAgJzEwMTEwMTEwMTAxMCcsICcwMTAxMDExMTAxMDEnLCAnMDAxMDAxMTEwMTEwJywgJzEwMDAxMDExMDExMScsICcwMTAwMDEwMTEwMTEnLFxuICAvLyAxMzgwLTEzODRcbiAgJzAxMDEwMTAxMDEwMScsICcwMTAxMTAxMDEwMDEnLCAnMDEwMTEwMTEwMTAwJywgJzEwMDExMTAxMTAxMCcsICcwMTAwMTEwMTExMDEnLFxuICAvLyAxMzg1LTEzODlcbiAgJzAwMTAwMTEwMTExMCcsICcxMDAxMDAxMTAxMTAnLCAnMTAxMDEwMTAxMDEwJywgJzExMDEwMTAxMDEwMCcsICcxMTAxMTAxMTAwMTAnLFxuICAvLyAxMzkwLTEzOTRcbiAgJzAxMDExMTAxMDEwMScsICcwMDEwMTEwMTEwMTAnLCAnMTAwMTAxMDExMDExJywgJzAxMDAxMDEwMTAxMScsICcxMDEwMDEwMTAxMDEnLFxuICAvLyAxMzk1LTEzOTlcbiAgJzEwMTEwMTAwMTAwMScsICcxMDExMDExMDAxMDAnLCAnMTAxMTAxMTEwMDAxJywgJzAxMDExMDExMDEwMCcsICcxMDEwMTAxMTAxMDEnLFxuICAvLyAxNDAwLTE0MDRcbiAgJzEwMTAwMTAxMDEwMScsICcxMTAxMDAxMDAxMDEnLCAnMTExMDEwMDEwMDEwJywgJzExMTAxMTAwMTAwMScsICcwMTEwMTEwMTAxMDAnLFxuICAvLyAxNDA1LTE0MDlcbiAgJzEwMTAxMTEwMTAwMScsICcxMDAxMDExMDEwMTEnLCAnMDEwMDEwMTAxMDExJywgJzEwMTAxMDAxMDAxMScsICcxMTAxMDEwMDEwMDEnLFxuICAvLyAxNDEwLTE0MTRcbiAgJzExMDExMDEwMDEwMCcsICcxMTAxMTAxMTAwMTAnLCAnMTAxMDEwMTExMDAxJywgJzAxMDAxMDExMTAxMCcsICcxMDEwMDEwMTEwMTEnLFxuICAvLyAxNDE1LTE0MTlcbiAgJzAxMDEwMDEwMTAxMScsICcxMDEwMTAwMTAxMDEnLCAnMTAxMTAwMTAxMDEwJywgJzEwMTEwMTAxMDEwMScsICcwMTAxMDEwMTExMDAnLFxuICAvLyAxNDIwLTE0MjRcbiAgJzAxMDAxMDExMTEwMScsICcwMDEwMDAxMTExMDEnLCAnMTAwMTAwMDExMTAxJywgJzEwMTAxMDAxMDEwMScsICcxMDExMDEwMDEwMTAnLFxuICAvLyAxNDI1LTE0MjlcbiAgJzEwMTEwMTAxMTAxMCcsICcwMTAxMDExMDExMDEnLCAnMDAxMDEwMTEwMTEwJywgJzEwMDEwMDExMTAxMScsICcwMTAwMTAwMTEwMTEnLFxuICAvLyAxNDMwLTE0MzRcbiAgJzAxMTAwMTAxMDEwMScsICcwMTEwMTAxMDEwMDEnLCAnMDExMTAxMDEwMTAwJywgJzEwMTEwMTEwMTAxMCcsICcwMTAxMDExMDExMDAnLFxuICAvLyAxNDM1LTE0MzlcbiAgJzEwMTAxMDEwMTEwMScsICcwMTAxMDEwMTAxMDEnLCAnMTAxMTAwMTAxMDAxJywgJzEwMTExMDAxMDAxMCcsICcxMDExMTAxMDEwMDEnLFxuICAvLyAxNDQwLTE0NDRcbiAgJzAxMDExMTAxMDEwMCcsICcxMDEwMTEwMTEwMTAnLCAnMDEwMTAxMDExMDEwJywgJzEwMTAxMDEwMTAxMScsICcwMTAxMTAwMTAxMDEnLFxuICAvLyAxNDQ1LTE0NDlcbiAgJzAxMTEwMTAwMTAwMScsICcwMTExMDExMDAxMDAnLCAnMTAxMTEwMTAxMDEwJywgJzAxMDExMDExMDEwMScsICcwMDEwMTAxMTAxMTAnLFxuICAvLyAxNDUwLTE0NTRcbiAgJzEwMTAwMTAxMDExMCcsICcxMTEwMDEwMDExMDEnLCAnMTAxMTAwMTAwMTAxJywgJzEwMTEwMTAxMDAxMCcsICcxMDExMDExMDEwMTAnLFxuICAvLyAxNDU1LTE0NTlcbiAgJzAxMDExMDEwMTEwMScsICcwMDEwMTAxMDExMTAnLCAnMTAwMTAwMTAxMTExJywgJzAxMDAxMDAxMDExMScsICcwMTEwMDEwMDEwMTEnLFxuICAvLyAxNDYwLTE0NjRcbiAgJzAxMTAxMDEwMDEwMScsICcwMTEwMTAxMDExMDAnLCAnMTAxMDExMDEwMTEwJywgJzAxMDEwMTAxMTEwMScsICcwMTAwMTAwMTExMDEnLFxuICAvLyAxNDY1LTE0NjlcbiAgJzEwMTAwMTAwMTEwMScsICcxMTAxMDAwMTAxMTAnLCAnMTEwMTEwMDEwMTAxJywgJzAxMDExMDEwMTAxMCcsICcwMTAxMTAxMTAxMDEnLFxuICAvLyAxNDcwLTE0NzRcbiAgJzAwMTAxMTAxMTAxMCcsICcxMDAxMDEwMTEwMTEnLCAnMDEwMDEwMTAxMTAxJywgJzAxMDExMDAxMDEwMScsICcwMTEwMTEwMDEwMTAnLFxuICAvLyAxNDc1LTE0NzlcbiAgJzAxMTAxMTEwMDEwMCcsICcxMDEwMTExMDEwMTAnLCAnMDEwMDExMTEwMTAxJywgJzAwMTAxMDExMDExMCcsICcxMDAxMDEwMTAxMTAnLFxuICAvLyAxNDgwLTE0ODRcbiAgJzEwMTAxMDEwMTAxMCcsICcxMDExMDEwMTAxMDAnLCAnMTAxMTExMDEwMDEwJywgJzAxMDExMTAxMTAwMScsICcwMDEwMTExMDEwMTAnLFxuICAvLyAxNDg1LTE0ODlcbiAgJzEwMDEwMTEwMTEwMScsICcwMTAwMTAxMDExMDEnLCAnMTAxMDEwMDEwMTAxJywgJzEwMTEwMTAwMTAxMCcsICcxMDExMTAxMDAxMDEnLFxuICAvLyAxNDkwLTE0OTRcbiAgJzAxMDExMDExMDAxMCcsICcxMDAxMTAxMTAxMDEnLCAnMDEwMDExMDEwMTEwJywgJzEwMTAxMDAxMDExMScsICcwMTAxMDEwMDAxMTEnLFxuICAvLyAxNDk1LTE0OTlcbiAgJzAxMTAxMDAxMDAxMScsICcwMTExMDEwMDEwMDEnLCAnMTAxMTAxMDEwMTAxJywgJzAxMDEwMTEwMTAxMCcsICcxMDEwMDExMDEwMTEnLFxuICAvLyAxNTAwLTE1MDRcbiAgJzAxMDEwMDEwMTAxMScsICcxMDEwMTAwMDEwMTEnLCAnMTEwMTAxMDAwMTEwJywgJzExMDExMDEwMDAxMScsICcwMTAxMTEwMDEwMTAnLFxuICAvLyAxNTA1LTE1MDlcbiAgJzEwMTAxMTAxMDExMCcsICcwMTAwMTEwMTEwMTEnLCAnMDAxMDAxMTAxMDExJywgJzEwMDEwMTAwMTAxMScsICcxMDEwMTAxMDAxMDEnLFxuICAvLyAxNTEwLTE1MTRcbiAgJzEwMTEwMTAxMDAxMCcsICcxMDExMDExMDEwMDEnLCAnMDEwMTAxMTEwMTAxJywgJzAwMDEwMTExMDExMCcsICcxMDAwMTAxMTAxMTEnLFxuICAvLyAxNTE1LTE1MTlcbiAgJzAwMTAwMTAxMTAxMScsICcwMTAxMDAxMDEwMTEnLCAnMDEwMTAxMTAwMTAxJywgJzAxMDExMDExMDEwMCcsICcxMDAxMTEwMTEwMTAnLFxuICAvLyAxNTIwLTE1MjRcbiAgJzAxMDAxMTEwMTEwMScsICcwMDAxMDExMDExMDEnLCAnMTAwMDEwMTEwMTEwJywgJzEwMTAxMDEwMDExMCcsICcxMTAxMDEwMTAwMTAnLFxuICAvLyAxNTI1LTE1MjlcbiAgJzExMDExMDEwMTAwMScsICcwMTAxMTEwMTAxMDAnLCAnMTAxMDExMDExMDEwJywgJzEwMDEwMTAxMTAxMScsICcwMTAwMTAxMDEwMTEnLFxuICAvLyAxNTMwLTE1MzRcbiAgJzAxMTAwMTAxMDAxMScsICcwMTExMDAxMDEwMDEnLCAnMDExMTAxMTAwMDEwJywgJzEwMTExMDEwMTAwMScsICcwMTAxMTAxMTAwMTAnLFxuICAvLyAxNTM1LTE1MzlcbiAgJzEwMTAxMDExMDEwMScsICcwMTAxMDEwMTAxMDEnLCAnMTAxMTAwMTAwMTAxJywgJzExMDExMDAxMDAxMCcsICcxMTEwMTEwMDEwMDEnLFxuICAvLyAxNTQwLTE1NDRcbiAgJzAxMTAxMTAxMDAxMCcsICcxMDEwMTExMDEwMDEnLCAnMDEwMTAxMTAxMDExJywgJzAxMDAxMDEwMTAxMScsICcxMDEwMDEwMTAxMDEnLFxuICAvLyAxNTQ1LTE1NDlcbiAgJzExMDEwMDEwMTAwMScsICcxMTAxMDEwMTAxMDAnLCAnMTEwMTEwMTAxMDEwJywgJzEwMDExMDExMDEwMScsICcwMTAwMTAxMTEwMTAnLFxuICAvLyAxNTUwLTE1NTRcbiAgJzEwMTAwMDExMTAxMScsICcwMTAwMTAwMTEwMTEnLCAnMTAxMDAxMDAxMTAxJywgJzEwMTAxMDEwMTAxMCcsICcxMDEwMTEwMTAxMDEnLFxuICAvLyAxNTU1LTE1NTlcbiAgJzAwMTAxMTAxMTAxMCcsICcxMDAxMDEwMTExMDEnLCAnMDEwMDAxMDExMTEwJywgJzEwMTAwMDEwMTExMCcsICcxMTAwMTAwMTEwMTAnLFxuICAvLyAxNTYwLTE1NjRcbiAgJzExMDEwMTAxMDEwMScsICcwMTEwMTAxMTAwMTAnLCAnMDExMDEwMTExMDAxJywgJzAxMDAxMDExMTAxMCcsICcxMDEwMDEwMTExMDEnLFxuICAvLyAxNTY1LTE1NjlcbiAgJzAxMDEwMDEwMTEwMScsICcxMDEwMTAwMTAxMDEnLCAnMTAxMTAxMDEwMDEwJywgJzEwMTExMDEwMTAwMCcsICcxMDExMTAxMTAxMDAnLFxuICAvLyAxNTcwLTE1NzRcbiAgJzAxMDExMDExMTAwMScsICcwMDEwMTEwMTEwMTAnLCAnMTAwMTAxMDExMDEwJywgJzEwMTEwMTAwMTAxMCcsICcxMTAxMTAxMDAxMDAnLFxuICAvLyAxNTc1LTE1NzlcbiAgJzExMTAxMTAxMDAwMScsICcwMTEwMTExMDEwMDAnLCAnMTAxMTAxMTAxMDEwJywgJzAxMDEwMTEwMTEwMScsICcwMTAxMDAxMTAxMDEnLFxuICAvLyAxNTgwLTE1ODRcbiAgJzAxMTAxMDAxMDEwMScsICcxMTAxMDEwMDEwMTAnLCAnMTEwMTEwMTAxMDAwJywgJzExMDExMTAxMDEwMCcsICcwMTEwMTEwMTEwMTAnLFxuICAvLyAxNTg1LTE1ODlcbiAgJzAxMDEwMTAxMTAxMScsICcwMDEwMTAwMTExMDEnLCAnMDExMDAwMTAxMDExJywgJzEwMTEwMDAxMDEwMScsICcxMDExMDEwMDEwMTAnLFxuICAvLyAxNTkwLTE1OTRcbiAgJzEwMTExMDAxMDEwMScsICcwMTAxMTAxMDEwMTAnLCAnMTAxMDEwMTAxMTEwJywgJzEwMDEwMDEwMTExMCcsICcxMTAwMTAwMDExMTEnLFxuICAvLyAxNTk1LTE1OTlcbiAgJzAxMDEwMDEwMDExMScsICcwMTEwMTAwMTAxMDEnLCAnMDExMDEwMTAxMDEwJywgJzEwMTAxMTAxMDExMCcsICcwMTAxMDEwMTExMDEnLFxuICAvLyAxNjAwXG4gICcwMDEwMTAwMTExMDEnXG5dO1xuXG5mdW5jdGlvbiBnZXREYXlzRGlmZihkYXRlMTogRGF0ZSwgZGF0ZTI6IERhdGUpOiBudW1iZXIge1xuICAvLyBJZ25vcmVzIHRoZSB0aW1lIHBhcnQgaW4gZGF0ZTEgYW5kIGRhdGUyOlxuICBjb25zdCB0aW1lMSA9IERhdGUuVVRDKGRhdGUxLmdldEZ1bGxZZWFyKCksIGRhdGUxLmdldE1vbnRoKCksIGRhdGUxLmdldERhdGUoKSk7XG4gIGNvbnN0IHRpbWUyID0gRGF0ZS5VVEMoZGF0ZTIuZ2V0RnVsbFllYXIoKSwgZGF0ZTIuZ2V0TW9udGgoKSwgZGF0ZTIuZ2V0RGF0ZSgpKTtcbiAgY29uc3QgZGlmZiA9IE1hdGguYWJzKHRpbWUxIC0gdGltZTIpO1xuICByZXR1cm4gTWF0aC5yb3VuZChkaWZmIC8gT05FX0RBWSk7XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBOZ2JDYWxlbmRhcklzbGFtaWNVbWFscXVyYSBleHRlbmRzIE5nYkNhbGVuZGFySXNsYW1pY0NpdmlsIHtcbiAgLyoqXG4gICogUmV0dXJucyB0aGUgZXF1aXZhbGVudCBpc2xhbWljKFVtYWxxdXJhKSBkYXRlIHZhbHVlIGZvciBhIGdpdmUgaW5wdXQgR3JlZ29yaWFuIGRhdGUuXG4gICogYGdkYXRlYCBpcyBzIEpTIERhdGUgdG8gYmUgY29udmVydGVkIHRvIEhpanJpLlxuICAqL1xuICBmcm9tR3JlZ29yaWFuKGdEYXRlOiBEYXRlKTogTmdiRGF0ZSB7XG4gICAgbGV0IGhEYXkgPSAxLCBoTW9udGggPSAwLCBoWWVhciA9IDEzMDA7XG4gICAgbGV0IGRheXNEaWZmID0gZ2V0RGF5c0RpZmYoZ0RhdGUsIEdSRUdPUklBTl9GSVJTVF9EQVRFKTtcbiAgICBpZiAoZ0RhdGUuZ2V0VGltZSgpIC0gR1JFR09SSUFOX0ZJUlNUX0RBVEUuZ2V0VGltZSgpID49IDAgJiYgZ0RhdGUuZ2V0VGltZSgpIC0gR1JFR09SSUFOX0xBU1RfREFURS5nZXRUaW1lKCkgPD0gMCkge1xuICAgICAgbGV0IHllYXIgPSAxMzAwO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBNT05USF9MRU5HVEgubGVuZ3RoOyBpKyssIHllYXIrKykge1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IDEyOyBqKyspIHtcbiAgICAgICAgICBsZXQgbnVtT2ZEYXlzID0gK01PTlRIX0xFTkdUSFtpXVtqXSArIDI5O1xuICAgICAgICAgIGlmIChkYXlzRGlmZiA8PSBudW1PZkRheXMpIHtcbiAgICAgICAgICAgIGhEYXkgPSBkYXlzRGlmZiArIDE7XG4gICAgICAgICAgICBpZiAoaERheSA+IG51bU9mRGF5cykge1xuICAgICAgICAgICAgICBoRGF5ID0gMTtcbiAgICAgICAgICAgICAgaisrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGogPiAxMSkge1xuICAgICAgICAgICAgICBqID0gMDtcbiAgICAgICAgICAgICAgeWVhcisrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaE1vbnRoID0gajtcbiAgICAgICAgICAgIGhZZWFyID0geWVhcjtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTmdiRGF0ZShoWWVhciwgaE1vbnRoICsgMSwgaERheSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRheXNEaWZmID0gZGF5c0RpZmYgLSBudW1PZkRheXM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHN1cGVyLmZyb21HcmVnb3JpYW4oZ0RhdGUpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgKiBDb252ZXJ0cyB0aGUgY3VycmVudCBIaWpyaSBkYXRlIHRvIEdyZWdvcmlhbi5cbiAgKi9cbiAgdG9HcmVnb3JpYW4oaERhdGU6IE5nYkRhdGUpOiBEYXRlIHtcbiAgICBjb25zdCBoWWVhciA9IGhEYXRlLnllYXI7XG4gICAgY29uc3QgaE1vbnRoID0gaERhdGUubW9udGggLSAxO1xuICAgIGNvbnN0IGhEYXkgPSBoRGF0ZS5kYXk7XG4gICAgbGV0IGdEYXRlID0gbmV3IERhdGUoR1JFR09SSUFOX0ZJUlNUX0RBVEUpO1xuICAgIGxldCBkYXlEaWZmID0gaERheSAtIDE7XG4gICAgaWYgKGhZZWFyID49IEhJSlJJX0JFR0lOICYmIGhZZWFyIDw9IEhJSlJJX0VORCkge1xuICAgICAgZm9yIChsZXQgeSA9IDA7IHkgPCBoWWVhciAtIEhJSlJJX0JFR0lOOyB5KyspIHtcbiAgICAgICAgZm9yIChsZXQgbSA9IDA7IG0gPCAxMjsgbSsrKSB7XG4gICAgICAgICAgZGF5RGlmZiArPSArTU9OVEhfTEVOR1RIW3ldW21dICsgMjk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZvciAobGV0IG0gPSAwOyBtIDwgaE1vbnRoOyBtKyspIHtcbiAgICAgICAgZGF5RGlmZiArPSArTU9OVEhfTEVOR1RIW2hZZWFyIC0gSElKUklfQkVHSU5dW21dICsgMjk7XG4gICAgICB9XG4gICAgICBnRGF0ZS5zZXREYXRlKEdSRUdPUklBTl9GSVJTVF9EQVRFLmdldERhdGUoKSArIGRheURpZmYpO1xuICAgIH0gZWxzZSB7XG4gICAgICBnRGF0ZSA9IHN1cGVyLnRvR3JlZ29yaWFuKGhEYXRlKTtcbiAgICB9XG4gICAgcmV0dXJuIGdEYXRlO1xuICB9XG4gIC8qKlxuICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBkYXlzIGluIGEgc3BlY2lmaWMgSGlqcmkgaE1vbnRoLlxuICAqIGBoTW9udGhgIGlzIDEgZm9yIE11aGFycmFtLCAyIGZvciBTYWZhciwgZXRjLlxuICAqIGBoWWVhcmAgaXMgYW55IEhpanJpIGhZZWFyLlxuICAqL1xuICBnZXREYXlzUGVyTW9udGgoaE1vbnRoOiBudW1iZXIsIGhZZWFyOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmIChoWWVhciA+PSBISUpSSV9CRUdJTiAmJiBoWWVhciA8PSBISUpSSV9FTkQpIHtcbiAgICAgIGNvbnN0IHBvcyA9IGhZZWFyIC0gSElKUklfQkVHSU47XG4gICAgICByZXR1cm4gK01PTlRIX0xFTkdUSFtwb3NdW2hNb250aCAtIDFdICsgMjk7XG4gICAgfVxuICAgIHJldHVybiBzdXBlci5nZXREYXlzUGVyTW9udGgoaE1vbnRoLCBoWWVhcik7XG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/datepicker/jalali/jalali.js b/dist/sunbird-ui-components/esm2015/datepicker/jalali/jalali.js new file mode 100644 index 0000000..b094c6a --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/datepicker/jalali/jalali.js @@ -0,0 +1,300 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgbDate } from '../ngb-date'; +/** + * Returns the equivalent JS date value for a give input Jalali date. + * `jalaliDate` is an Jalali date to be converted to Gregorian. + * @param {?} jalaliDate + * @return {?} + */ +export function toGregorian(jalaliDate) { + /** @type {?} */ + let jdn = jalaliToJulian(jalaliDate.year, jalaliDate.month, jalaliDate.day); + /** @type {?} */ + let date = julianToGregorian(jdn); + date.setHours(6, 30, 3, 200); + return date; +} +/** + * Returns the equivalent jalali date value for a give input Gregorian date. + * `gdate` is a JS Date to be converted to jalali. + * utc to local + * @param {?} gdate + * @return {?} + */ +export function fromGregorian(gdate) { + /** @type {?} */ + let g2d = gregorianToJulian(gdate.getFullYear(), gdate.getMonth() + 1, gdate.getDate()); + return julianToJalali(g2d); +} +/** + * @param {?} date + * @param {?} yearValue + * @return {?} + */ +export function setJalaliYear(date, yearValue) { + date.year = +yearValue; + return date; +} +/** + * @param {?} date + * @param {?} month + * @return {?} + */ +export function setJalaliMonth(date, month) { + month = +month; + date.year = date.year + Math.floor((month - 1) / 12); + date.month = Math.floor(((month - 1) % 12 + 12) % 12) + 1; + return date; +} +/** + * @param {?} date + * @param {?} day + * @return {?} + */ +export function setJalaliDay(date, day) { + /** @type {?} */ + let mDays = getDaysPerMonth(date.month, date.year); + if (day <= 0) { + while (day <= 0) { + date = setJalaliMonth(date, date.month - 1); + mDays = getDaysPerMonth(date.month, date.year); + day += mDays; + } + } + else if (day > mDays) { + while (day > mDays) { + day -= mDays; + date = setJalaliMonth(date, date.month + 1); + mDays = getDaysPerMonth(date.month, date.year); + } + } + date.day = day; + return date; +} +/** + * @param {?} a + * @param {?} b + * @return {?} + */ +function mod(a, b) { + return a - b * Math.floor(a / b); +} +/** + * @param {?} a + * @param {?} b + * @return {?} + */ +function div(a, b) { + return Math.trunc(a / b); +} +/* + This function determines if the Jalali (Persian) year is + leap (366-day long) or is the common year (365 days), and + finds the day in March (Gregorian calendar) of the first + day of the Jalali year (jalaliYear). + @param jalaliYear Jalali calendar year (-61 to 3177) + @return + leap: number of years since the last leap year (0 to 4) + gYear: Gregorian year of the beginning of Jalali year + march: the March day of Farvardin the 1st (1st day of jalaliYear) + @see: http://www.astro.uni.torun.pl/~kb/Papers/EMP/PersianC-EMP.htm + @see: http://www.fourmilab.ch/documents/calendar/ + */ +/** + * @param {?} jalaliYear + * @return {?} + */ +function jalCal(jalaliYear) { + // Jalali years starting the 33-year rule. + /** @type {?} */ + let breaks = [-61, 9, 38, 199, 426, 686, 756, 818, 1111, 1181, 1210, 1635, 2060, 2097, 2192, 2262, 2324, 2394, 2456, 3178]; + /** @type {?} */ + const breaksLength = breaks.length; + /** @type {?} */ + const gYear = jalaliYear + 621; + /** @type {?} */ + let leapJ = -14; + /** @type {?} */ + let jp = breaks[0]; + if (jalaliYear < jp || jalaliYear >= breaks[breaksLength - 1]) { + throw new Error('Invalid Jalali year ' + jalaliYear); + } + // Find the limiting years for the Jalali year jalaliYear. + /** @type {?} */ + let jump; + for (let i = 1; i < breaksLength; i += 1) { + /** @type {?} */ + const jm = breaks[i]; + jump = jm - jp; + if (jalaliYear < jm) { + break; + } + leapJ = leapJ + div(jump, 33) * 8 + div(mod(jump, 33), 4); + jp = jm; + } + /** @type {?} */ + let n = jalaliYear - jp; + // Find the number of leap years from AD 621 to the beginning + // of the current Jalali year in the Persian calendar. + leapJ = leapJ + div(n, 33) * 8 + div(mod(n, 33) + 3, 4); + if (mod(jump, 33) === 4 && jump - n === 4) { + leapJ += 1; + } + // And the same in the Gregorian calendar (until the year gYear). + /** @type {?} */ + const leapG = div(gYear, 4) - div((div(gYear, 100) + 1) * 3, 4) - 150; + // Determine the Gregorian date of Farvardin the 1st. + /** @type {?} */ + const march = 20 + leapJ - leapG; + // Find how many years have passed since the last leap year. + if (jump - n < 6) { + n = n - jump + div(jump + 4, 33) * 33; + } + /** @type {?} */ + let leap = mod(mod(n + 1, 33) - 1, 4); + if (leap === -1) { + leap = 4; + } + return { leap: leap, gy: gYear, march: march }; +} +/* + Calculates Gregorian and Julian calendar dates from the Julian Day number + (jdn) for the period since jdn=-34839655 (i.e. the year -100100 of both + calendars) to some millions years ahead of the present. + @param jdn Julian Day number + @return + gYear: Calendar year (years BC numbered 0, -1, -2, ...) + gMonth: Calendar month (1 to 12) + gDay: Calendar day of the month M (1 to 28/29/30/31) + */ +/** + * @param {?} julianDayNumber + * @return {?} + */ +function julianToGregorian(julianDayNumber) { + /** @type {?} */ + let j = 4 * julianDayNumber + 139361631; + j = j + div(div(4 * julianDayNumber + 183187720, 146097) * 3, 4) * 4 - 3908; + /** @type {?} */ + const i = div(mod(j, 1461), 4) * 5 + 308; + /** @type {?} */ + const gDay = div(mod(i, 153), 5) + 1; + /** @type {?} */ + const gMonth = mod(div(i, 153), 12) + 1; + /** @type {?} */ + const gYear = div(j, 1461) - 100100 + div(8 - gMonth, 6); + return new Date(gYear, gMonth - 1, gDay); +} +/* + Converts a date of the Jalali calendar to the Julian Day number. + @param jy Jalali year (1 to 3100) + @param jm Jalali month (1 to 12) + @param jd Jalali day (1 to 29/31) + @return Julian Day number + */ +/** + * @param {?} gy + * @param {?} gm + * @param {?} gd + * @return {?} + */ +function gregorianToJulian(gy, gm, gd) { + /** @type {?} */ + let d = div((gy + div(gm - 8, 6) + 100100) * 1461, 4) + div(153 * mod(gm + 9, 12) + 2, 5) + gd - 34840408; + d = d - div(div(gy + 100100 + div(gm - 8, 6), 100) * 3, 4) + 752; + return d; +} +/* + Converts the Julian Day number to a date in the Jalali calendar. + @param julianDayNumber Julian Day number + @return + jalaliYear: Jalali year (1 to 3100) + jalaliMonth: Jalali month (1 to 12) + jalaliDay: Jalali day (1 to 29/31) + */ +/** + * @param {?} julianDayNumber + * @return {?} + */ +function julianToJalali(julianDayNumber) { + /** @type {?} */ + let gy = julianToGregorian(julianDayNumber).getFullYear() // Calculate Gregorian year (gy). + ; + /** @type {?} */ + let jalaliYear = gy - 621; + /** @type {?} */ + let r = jalCal(jalaliYear); + /** @type {?} */ + let gregorianDay = gregorianToJulian(gy, 3, r.march); + /** @type {?} */ + let jalaliDay; + /** @type {?} */ + let jalaliMonth; + /** @type {?} */ + let numberOfDays; + // Find number of days that passed since 1 Farvardin. + numberOfDays = julianDayNumber - gregorianDay; + if (numberOfDays >= 0) { + if (numberOfDays <= 185) { + // The first 6 months. + jalaliMonth = 1 + div(numberOfDays, 31); + jalaliDay = mod(numberOfDays, 31) + 1; + return new NgbDate(jalaliYear, jalaliMonth, jalaliDay); + } + else { + // The remaining months. + numberOfDays -= 186; + } + } + else { + // Previous Jalali year. + jalaliYear -= 1; + numberOfDays += 179; + if (r.leap === 1) { + numberOfDays += 1; + } + } + jalaliMonth = 7 + div(numberOfDays, 30); + jalaliDay = mod(numberOfDays, 30) + 1; + return new NgbDate(jalaliYear, jalaliMonth, jalaliDay); +} +/* + Converts a date of the Jalali calendar to the Julian Day number. + @param jYear Jalali year (1 to 3100) + @param jMonth Jalali month (1 to 12) + @param jDay Jalali day (1 to 29/31) + @return Julian Day number + */ +/** + * @param {?} jYear + * @param {?} jMonth + * @param {?} jDay + * @return {?} + */ +function jalaliToJulian(jYear, jMonth, jDay) { + /** @type {?} */ + let r = jalCal(jYear); + return gregorianToJulian(r.gy, 3, r.march) + (jMonth - 1) * 31 - div(jMonth, 7) * (jMonth - 7) + jDay - 1; +} +/** + * Returns the number of days in a specific jalali month. + * @param {?} month + * @param {?} year + * @return {?} + */ +function getDaysPerMonth(month, year) { + if (month <= 6) { + return 31; + } + if (month <= 11) { + return 30; + } + if (jalCal(year).leap === 0) { + return 30; + } + return 29; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamFsYWxpLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiZGF0ZXBpY2tlci9qYWxhbGkvamFsYWxpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sYUFBYSxDQUFDOzs7Ozs7O0FBTXBDLE1BQU0sVUFBVSxXQUFXLENBQUMsVUFBbUI7O1FBQ3pDLEdBQUcsR0FBRyxjQUFjLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUM7O1FBQ3ZFLElBQUksR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLENBQUM7SUFDakMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM3QixPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7Ozs7Ozs7O0FBT0QsTUFBTSxVQUFVLGFBQWEsQ0FBQyxLQUFXOztRQUNuQyxHQUFHLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3ZGLE9BQU8sY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLENBQUM7Ozs7OztBQUVELE1BQU0sVUFBVSxhQUFhLENBQUMsSUFBYSxFQUFFLFNBQWlCO0lBQzVELElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUM7SUFDdkIsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDOzs7Ozs7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUFDLElBQWEsRUFBRSxLQUFhO0lBQ3pELEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQztJQUNmLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJ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SUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFO1FBQ2QsT0FBTyxFQUFFLENBQUM7S0FDWDtJQUNELElBQUksS0FBSyxJQUFJLEVBQUUsRUFBRTtRQUNmLE9BQU8sRUFBRSxDQUFDO0tBQ1g7SUFDRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO1FBQzNCLE9BQU8sRUFBRSxDQUFDO0tBQ1g7SUFDRCxPQUFPLEVBQUUsQ0FBQztBQUNaLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge05nYkRhdGV9IGZyb20gJy4uL25nYi1kYXRlJztcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBlcXVpdmFsZW50IEpTIGRhdGUgdmFsdWUgZm9yIGEgZ2l2ZSBpbnB1dCBKYWxhbGkgZGF0ZS5cbiAqIGBqYWxhbGlEYXRlYCBpcyBhbiBKYWxhbGkgZGF0ZSB0byBiZSBjb252ZXJ0ZWQgdG8gR3JlZ29yaWFuLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9HcmVnb3JpYW4oamFsYWxpRGF0ZTogTmdiRGF0ZSk6IERhdGUge1xuICBsZXQgamRuID0gamFsYWxpVG9KdWxpYW4oamFsYWxpRGF0ZS55ZWFyLCBqYWxhbGlEYXRlLm1vbnRoLCBqYWxhbGlEYXRlLmRheSk7XG4gIGxldCBkYXRlID0ganVsaWFuVG9HcmVnb3JpYW4oamRuKTtcbiAgZGF0ZS5zZXRIb3Vycyg2LCAzMCwgMywgMjAwKTtcbiAgcmV0dXJuIGRhdGU7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZXF1aXZhbGVudCBqYWxhbGkgZGF0ZSB2YWx1ZSBmb3IgYSBnaXZlIGlucHV0IEdyZWdvcmlhbiBkYXRlLlxuICogYGdkYXRlYCBpcyBhIEpTIERhdGUgdG8gYmUgY29udmVydGVkIHRvIGphbGFsaS5cbiAqIHV0YyB0byBsb2NhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbUdyZWdvcmlhbihnZGF0ZTogRGF0ZSk6IE5nYkRhdGUge1xuICBsZXQgZzJkID0gZ3JlZ29yaWFuVG9KdWxpYW4oZ2RhdGUuZ2V0RnVsbFllYXIoKSwgZ2RhdGUuZ2V0TW9udGgoKSArIDEsIGdkYXRlLmdldERhdGUoKSk7XG4gIHJldHVybiBqdWxpYW5Ub0phbGFsaShnMmQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0SmFsYWxpWWVhcihkYXRlOiBOZ2JEYXRlLCB5ZWFyVmFsdWU6IG51bWJlcik6IE5nYkRhdGUge1xuICBkYXRlLnllYXIgPSAreWVhclZhbHVlO1xuICByZXR1cm4gZGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEphbGFsaU1vbnRoKGRhdGU6IE5nYkRhdGUsIG1vbnRoOiBudW1iZXIpOiBOZ2JEYXRlIHtcbiAgbW9udGggPSArbW9udGg7XG4gIGRhdGUueWVhciA9IGRhdGUueWVhciArIE1hdGguZmxvb3IoKG1vbnRoIC0gMSkgLyAxMik7XG4gIGRhdGUubW9udGggPSBNYXRoLmZsb29yKCgobW9udGggLSAxKSAlIDEyICsgMTIpICUgMTIpICsgMTtcbiAgcmV0dXJuIGRhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRKYWxhbGlEYXkoZGF0ZTogTmdiRGF0ZSwgZGF5OiBudW1iZXIpOiBOZ2JEYXRlIHtcbiAgbGV0IG1EYXlzID0gZ2V0RGF5c1Blck1vbnRoKGRhdGUubW9udGgsIGRhdGUueWVhcik7XG4gIGlmIChkYXkgPD0gMCkge1xuICAgIHdoaWxlIChkYXkgPD0gMCkge1xuICAgICAgZGF0ZSA9IHNldEphbGFsaU1vbnRoKGRhdGUsIGRhdGUubW9udGggLSAxKTtcbiAgICAgIG1EYXlzID0gZ2V0RGF5c1Blck1vbnRoKGRhdGUubW9udGgsIGRhdGUueWVhcik7XG4gICAgICBkYXkgKz0gbURheXM7XG4gICAgfVxuICB9IGVsc2UgaWYgKGRheSA+IG1EYXlzKSB7XG4gICAgd2hpbGUgKGRheSA+IG1EYXlzKSB7XG4gICAgICBkYXkgLT0gbURheXM7XG4gICAgICBkYXRlID0gc2V0SmFsYWxpTW9udGgoZGF0ZSwgZGF0ZS5tb250aCArIDEpO1xuICAgICAgbURheXMgPSBnZXREYXlzUGVyTW9udGgoZGF0ZS5tb250aCwgZGF0ZS55ZWFyKTtcbiAgICB9XG4gIH1cbiAgZGF0ZS5kYXkgPSBkYXk7XG4gIHJldHVybiBkYXRlO1xufVxuXG5mdW5jdGlvbiBtb2QoYTogbnVtYmVyLCBiOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gYSAtIGIgKiBNYXRoLmZsb29yKGEgLyBiKTtcbn1cblxuZnVuY3Rpb24gZGl2KGE6IG51bWJlciwgYjogbnVtYmVyKSB7XG4gIHJldHVybiBNYXRoLnRydW5jKGEgLyBiKTtcbn1cblxuLypcbiBUaGlzIGZ1bmN0aW9uIGRldGVybWluZXMgaWYgdGhlIEphbGFsaSAoUGVyc2lhbikgeWVhciBpc1xuIGxlYXAgKDM2Ni1kYXkgbG9uZykgb3IgaXMgdGhlIGNvbW1vbiB5ZWFyICgzNjUgZGF5cyksIGFuZFxuIGZpbmRzIHRoZSBkYXkgaW4gTWFyY2ggKEdyZWdvcmlhbiBjYWxlbmRhcikgb2YgdGhlIGZpcnN0XG4gZGF5IG9mIHRoZSBKYWxhbGkgeWVhciAoamFsYWxpWWVhcikuXG4gQHBhcmFtIGphbGFsaVllYXIgSmFsYWxpIGNhbGVuZGFyIHllYXIgKC02MSB0byAzMTc3KVxuIEByZXR1cm5cbiBsZWFwOiBudW1iZXIgb2YgeWVhcnMgc2luY2UgdGhlIGxhc3QgbGVhcCB5ZWFyICgwIHRvIDQpXG4gZ1llYXI6IEdyZWdvcmlhbiB5ZWFyIG9mIHRoZSBiZWdpbm5pbmcgb2YgSmFsYWxpIHllYXJcbiBtYXJjaDogdGhlIE1hcmNoIGRheSBvZiBGYXJ2YXJkaW4gdGhlIDFzdCAoMXN0IGRheSBvZiBqYWxhbGlZZWFyKVxuIEBzZWU6IGh0dHA6Ly93d3cuYXN0cm8udW5pLnRvcnVuLnBsL35rYi9QYXBlcnMvRU1QL1BlcnNpYW5DLUVNUC5odG1cbiBAc2VlOiBodHRwOi8vd3d3LmZvdXJtaWxhYi5jaC9kb2N1bWVudHMvY2FsZW5kYXIvXG4gKi9cbmZ1bmN0aW9uIGphbENhbChqYWxhbGlZZWFyOiBudW1iZXIpIHtcbiAgLy8gSmFsYWxpIHllYXJzIHN0YXJ0aW5nIHRoZSAzMy15ZWFyIHJ1bGUuXG4gIGxldCBicmVha3MgPVxuICAgICAgWy02MSwgOSwgMzgsIDE5OSwgNDI2LCA2ODYsIDc1NiwgODE4LCAxMTExLCAxMTgxLCAxMjEwLCAxNjM1LCAyMDYwLCAyMDk3LCAyMTkyLCAyMjYyLCAyMzI0LCAyMzk0LCAyNDU2LCAzMTc4XTtcbiAgY29uc3QgYnJlYWtzTGVuZ3RoID0gYnJlYWtzLmxlbmd0aDtcbiAgY29uc3QgZ1llYXIgPSBqYWxhbGlZZWFyICsgNjIxO1xuICBsZXQgbGVhcEogPSAtMTQ7XG4gIGxldCBqcCA9IGJyZWFrc1swXTtcblxuICBpZiAoamFsYWxpWWVhciA8IGpwIHx8IGphbGFsaVllYXIgPj0gYnJlYWtzW2JyZWFrc0xlbmd0aCAtIDFdKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIEphbGFsaSB5ZWFyICcgKyBqYWxhbGlZZWFyKTtcbiAgfVxuXG4gIC8vIEZpbmQgdGhlIGxpbWl0aW5nIHllYXJzIGZvciB0aGUgSmFsYWxpIHllYXIgamFsYWxpWWVhci5cbiAgbGV0IGp1bXA7XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgYnJlYWtzTGVuZ3RoOyBpICs9IDEpIHtcbiAgICBjb25zdCBqbSA9IGJyZWFrc1tpXTtcbiAgICBqdW1wID0gam0gLSBqcDtcbiAgICBpZiAoamFsYWxpWWVhciA8IGptKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgbGVhcEogPSBsZWFwSiArIGRpdihqdW1wLCAzMykgKiA4ICsgZGl2KG1vZChqdW1wLCAzMyksIDQpO1xuICAgIGpwID0gam07XG4gIH1cbiAgbGV0IG4gPSBqYWxhbGlZZWFyIC0ganA7XG5cbiAgLy8gRmluZCB0aGUgbnVtYmVyIG9mIGxlYXAgeWVhcnMgZnJvbSBBRCA2MjEgdG8gdGhlIGJlZ2lubmluZ1xuICAvLyBvZiB0aGUgY3VycmVudCBKYWxhbGkgeWVhciBpbiB0aGUgUGVyc2lhbiBjYWxlbmRhci5cbiAgbGVhcEogPSBsZWFwSiArIGRpdihuLCAzMykgKiA4ICsgZGl2KG1vZChuLCAzMykgKyAzLCA0KTtcbiAgaWYgKG1vZChqdW1wLCAzMykgPT09IDQgJiYganVtcCAtIG4gPT09IDQpIHtcbiAgICBsZWFwSiArPSAxO1xuICB9XG5cbiAgLy8gQW5kIHRoZSBzYW1lIGluIHRoZSBHcmVnb3JpYW4gY2FsZW5kYXIgKHVudGlsIHRoZSB5ZWFyIGdZZWFyKS5cbiAgY29uc3QgbGVhcEcgPSBkaXYoZ1llYXIsIDQpIC0gZGl2KChkaXYoZ1llYXIsIDEwMCkgKyAxKSAqIDMsIDQpIC0gMTUwO1xuXG4gIC8vIERldGVybWluZSB0aGUgR3JlZ29yaWFuIGRhdGUgb2YgRmFydmFyZGluIHRoZSAxc3QuXG4gIGNvbnN0IG1hcmNoID0gMjAgKyBsZWFwSiAtIGxlYXBHO1xuXG4gIC8vIEZpbmQgaG93IG1hbnkgeWVhcnMgaGF2ZSBwYXNzZWQgc2luY2UgdGhlIGxhc3QgbGVhcCB5ZWFyLlxuICBpZiAoanVtcCAtIG4gPCA2KSB7XG4gICAgbiA9IG4gLSBqdW1wICsgZGl2KGp1bXAgKyA0LCAzMykgKiAzMztcbiAgfVxuICBsZXQgbGVhcCA9IG1vZChtb2QobiArIDEsIDMzKSAtIDEsIDQpO1xuICBpZiAobGVhcCA9PT0gLTEpIHtcbiAgICBsZWFwID0gNDtcbiAgfVxuXG4gIHJldHVybiB7bGVhcDogbGVhcCwgZ3k6IGdZZWFyLCBtYXJjaDogbWFyY2h9O1xufVxuXG4vKlxuIENhbGN1bGF0ZXMgR3JlZ29yaWFuIGFuZCBKdWxpYW4gY2FsZW5kYXIgZGF0ZXMgZnJvbSB0aGUgSnVsaWFuIERheSBudW1iZXJcbiAoamRuKSBmb3IgdGhlIHBlcmlvZCBzaW5jZSBqZG49LTM0ODM5NjU1IChpLmUuIHRoZSB5ZWFyIC0xMDAxMDAgb2YgYm90aFxuIGNhbGVuZGFycykgdG8gc29tZSBtaWxsaW9ucyB5ZWFycyBhaGVhZCBvZiB0aGUgcHJlc2VudC5cbiBAcGFyYW0gamRuIEp1bGlhbiBEYXkgbnVtYmVyXG4gQHJldHVyblxuIGdZZWFyOiBDYWxlbmRhciB5ZWFyICh5ZWFycyBCQyBudW1iZXJlZCAwLCAtMSwgLTIsIC4uLilcbiBnTW9udGg6IENhbGVuZGFyIG1vbnRoICgxIHRvIDEyKVxuIGdEYXk6IENhbGVuZGFyIGRheSBvZiB0aGUgbW9udGggTSAoMSB0byAyOC8yOS8zMC8zMSlcbiAqL1xuZnVuY3Rpb24ganVsaWFuVG9HcmVnb3JpYW4oanVsaWFuRGF5TnVtYmVyOiBudW1iZXIpIHtcbiAgbGV0IGogPSA0ICoganVsaWFuRGF5TnVtYmVyICsgMTM5MzYxNjMxO1xuICBqID0gaiArIGRpdihkaXYoNCAqIGp1bGlhbkRheU51bWJlciArIDE4MzE4NzcyMCwgMTQ2MDk3KSAqIDMsIDQpICogNCAtIDM5MDg7XG4gIGNvbnN0IGkgPSBkaXYobW9kKGosIDE0NjEpLCA0KSAqIDUgKyAzMDg7XG4gIGNvbnN0IGdEYXkgPSBkaXYobW9kKGksIDE1MyksIDUpICsgMTtcbiAgY29uc3QgZ01vbnRoID0gbW9kKGRpdihpLCAxNTMpLCAxMikgKyAxO1xuICBjb25zdCBnWWVhciA9IGRpdihqLCAxNDYxKSAtIDEwMDEwMCArIGRpdig4IC0gZ01vbnRoLCA2KTtcblxuICByZXR1cm4gbmV3IERhdGUoZ1llYXIsIGdNb250aCAtIDEsIGdEYXkpO1xufVxuXG4vKlxuIENvbnZlcnRzIGEgZGF0ZSBvZiB0aGUgSmFsYWxpIGNhbGVuZGFyIHRvIHRoZSBKdWxpYW4gRGF5IG51bWJlci5cbiBAcGFyYW0gankgSmFsYWxpIHllYXIgKDEgdG8gMzEwMClcbiBAcGFyYW0gam0gSmFsYWxpIG1vbnRoICgxIHRvIDEyKVxuIEBwYXJhbSBqZCBKYWxhbGkgZGF5ICgxIHRvIDI5LzMxKVxuIEByZXR1cm4gSnVsaWFuIERheSBudW1iZXJcbiAqL1xuZnVuY3Rpb24gZ3JlZ29yaWFuVG9KdWxpYW4oZ3k6IG51bWJlciwgZ206IG51bWJlciwgZ2Q6IG51bWJlcikge1xuICBsZXQgZCA9IGRpdigoZ3kgKyBkaXYoZ20gLSA4LCA2KSArIDEwMDEwMCkgKiAxNDYxLCA0KSArIGRpdigxNTMgKiBtb2QoZ20gKyA5LCAxMikgKyAyLCA1KSArIGdkIC0gMzQ4NDA0MDg7XG4gIGQgPSBkIC0gZGl2KGRpdihneSArIDEwMDEwMCArIGRpdihnbSAtIDgsIDYpLCAxMDApICogMywgNCkgKyA3NTI7XG4gIHJldHVybiBkO1xufVxuXG4vKlxuIENvbnZlcnRzIHRoZSBKdWxpYW4gRGF5IG51bWJlciB0byBhIGRhdGUgaW4gdGhlIEphbGFsaSBjYWxlbmRhci5cbiBAcGFyYW0ganVsaWFuRGF5TnVtYmVyIEp1bGlhbiBEYXkgbnVtYmVyXG4gQHJldHVyblxuIGphbGFsaVllYXI6IEphbGFsaSB5ZWFyICgxIHRvIDMxMDApXG4gamFsYWxpTW9udGg6IEphbGFsaSBtb250aCAoMSB0byAxMilcbiBqYWxhbGlEYXk6IEphbGFsaSBkYXkgKDEgdG8gMjkvMzEpXG4gKi9cbmZ1bmN0aW9uIGp1bGlhblRvSmFsYWxpKGp1bGlhbkRheU51bWJlcjogbnVtYmVyKSB7XG4gIGxldCBneSA9IGp1bGlhblRvR3JlZ29yaWFuKGp1bGlhbkRheU51bWJlcikuZ2V0RnVsbFllYXIoKSAgLy8gQ2FsY3VsYXRlIEdyZWdvcmlhbiB5ZWFyIChneSkuXG4gICAgICAsXG4gICAgICBqYWxhbGlZZWFyID0gZ3kgLSA2MjEsIHIgPSBqYWxDYWwoamFsYWxpWWVhciksIGdyZWdvcmlhbkRheSA9IGdyZWdvcmlhblRvSnVsaWFuKGd5LCAzLCByLm1hcmNoKSwgamFsYWxpRGF5LFxuICAgICAgamFsYWxpTW9udGgsIG51bWJlck9mRGF5cztcblxuICAvLyBGaW5kIG51bWJlciBvZiBkYXlzIHRoYXQgcGFzc2VkIHNpbmNlIDEgRmFydmFyZGluLlxuICBudW1iZXJPZkRheXMgPSBqdWxpYW5EYXlOdW1iZXIgLSBncmVnb3JpYW5EYXk7XG4gIGlmIChudW1iZXJPZkRheXMgPj0gMCkge1xuICAgIGlmIChudW1iZXJPZkRheXMgPD0gMTg1KSB7XG4gICAgICAvLyBUaGUgZmlyc3QgNiBtb250aHMuXG4gICAgICBqYWxhbGlNb250aCA9IDEgKyBkaXYobnVtYmVyT2ZEYXlzLCAzMSk7XG4gICAgICBqYWxhbGlEYXkgPSBtb2QobnVtYmVyT2ZEYXlzLCAzMSkgKyAxO1xuICAgICAgcmV0dXJuIG5ldyBOZ2JEYXRlKGphbGFsaVllYXIsIGphbGFsaU1vbnRoLCBqYWxhbGlEYXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGUgcmVtYWluaW5nIG1vbnRocy5cbiAgICAgIG51bWJlck9mRGF5cyAtPSAxODY7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFByZXZpb3VzIEphbGFsaSB5ZWFyLlxuICAgIGphbGFsaVllYXIgLT0gMTtcbiAgICBudW1iZXJPZkRheXMgKz0gMTc5O1xuICAgIGlmIChyLmxlYXAgPT09IDEpIHtcbiAgICAgIG51bWJlck9mRGF5cyArPSAxO1xuICAgIH1cbiAgfVxuICBqYWxhbGlNb250aCA9IDcgKyBkaXYobnVtYmVyT2ZEYXlzLCAzMCk7XG4gIGphbGFsaURheSA9IG1vZChudW1iZXJPZkRheXMsIDMwKSArIDE7XG5cbiAgcmV0dXJuIG5ldyBOZ2JEYXRlKGphbGFsaVllYXIsIGphbGFsaU1vbnRoLCBqYWxhbGlEYXkpO1xufVxuXG4vKlxuIENvbnZlcnRzIGEgZGF0ZSBvZiB0aGUgSmFsYWxpIGNhbGVuZGFyIHRvIHRoZSBKdWxpYW4gRGF5IG51bWJlci5cbiBAcGFyYW0galllYXIgSmFsYWxpIHllYXIgKDEgdG8gMzEwMClcbiBAcGFyYW0gak1vbnRoIEphbGFsaSBtb250aCAoMSB0byAxMilcbiBAcGFyYW0gakRheSBKYWxhbGkgZGF5ICgxIHRvIDI5LzMxKVxuIEByZXR1cm4gSnVsaWFuIERheSBudW1iZXJcbiAqL1xuZnVuY3Rpb24gamFsYWxpVG9KdWxpYW4oalllYXI6IG51bWJlciwgak1vbnRoOiBudW1iZXIsIGpEYXk6IG51bWJlcikge1xuICBsZXQgciA9IGphbENhbChqWWVhcik7XG4gIHJldHVybiBncmVnb3JpYW5Ub0p1bGlhbihyLmd5LCAzLCByLm1hcmNoKSArIChqTW9udGggLSAxKSAqIDMxIC0gZGl2KGpNb250aCwgNykgKiAoak1vbnRoIC0gNykgKyBqRGF5IC0gMTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGF5cyBpbiBhIHNwZWNpZmljIGphbGFsaSBtb250aC5cbiAqL1xuZnVuY3Rpb24gZ2V0RGF5c1Blck1vbnRoKG1vbnRoOiBudW1iZXIsIHllYXI6IG51bWJlcik6IG51bWJlciB7XG4gIGlmIChtb250aCA8PSA2KSB7XG4gICAgcmV0dXJuIDMxO1xuICB9XG4gIGlmIChtb250aCA8PSAxMSkge1xuICAgIHJldHVybiAzMDtcbiAgfVxuICBpZiAoamFsQ2FsKHllYXIpLmxlYXAgPT09IDApIHtcbiAgICByZXR1cm4gMzA7XG4gIH1cbiAgcmV0dXJuIDI5O1xufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/datepicker/jalali/ngb-calendar-persian.js b/dist/sunbird-ui-components/esm2015/datepicker/jalali/ngb-calendar-persian.js new file mode 100644 index 0000000..7f5a67a --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/datepicker/jalali/ngb-calendar-persian.js @@ -0,0 +1,104 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Injectable } from '@angular/core'; +import { NgbDate } from '../ngb-date'; +import { NgbCalendar } from '../ngb-calendar'; +import { isInteger } from '../../util/util'; +import { fromGregorian, setJalaliDay, setJalaliMonth, setJalaliYear, toGregorian } from './jalali'; +export class NgbCalendarPersian extends NgbCalendar { + /** + * @return {?} + */ + getDaysPerWeek() { return 7; } + /** + * @return {?} + */ + getMonths() { return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; } + /** + * @return {?} + */ + getWeeksPerMonth() { return 6; } + /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + getNext(date, period = 'd', number = 1) { + date = new NgbDate(date.year, date.month, date.day); + switch (period) { + case 'y': + date = setJalaliYear(date, date.year + number); + date.month = 1; + date.day = 1; + return date; + case 'm': + date = setJalaliMonth(date, date.month + number); + date.day = 1; + return date; + case 'd': + return setJalaliDay(date, date.day + number); + default: + return date; + } + } + /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + getPrev(date, period = 'd', number = 1) { return this.getNext(date, period, -number); } + /** + * @param {?} date + * @return {?} + */ + getWeekday(date) { + /** @type {?} */ + const day = toGregorian(date).getDay(); + // in JS Date Sun=0, in ISO 8601 Sun=7 + return day === 0 ? 7 : day; + } + /** + * @param {?} week + * @param {?} firstDayOfWeek + * @return {?} + */ + getWeekNumber(week, firstDayOfWeek) { + // in JS Date Sun=0, in ISO 8601 Sun=7 + if (firstDayOfWeek === 7) { + firstDayOfWeek = 0; + } + /** @type {?} */ + const thursdayIndex = (4 + 7 - firstDayOfWeek) % 7; + /** @type {?} */ + const date = week[thursdayIndex]; + /** @type {?} */ + const jsDate = toGregorian(date); + jsDate.setDate(jsDate.getDate() + 4 - (jsDate.getDay() || 7)); // Thursday + // Thursday + /** @type {?} */ + const time = jsDate.getTime(); + /** @type {?} */ + const startDate = toGregorian(new NgbDate(date.year, 1, 1)); + return Math.floor(Math.round((time - startDate.getTime()) / 86400000) / 7) + 1; + } + /** + * @return {?} + */ + getToday() { return fromGregorian(new Date()); } + /** + * @param {?} date + * @return {?} + */ + isValid(date) { + return date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day) && + !isNaN(toGregorian(date).getTime()); + } +} +NgbCalendarPersian.decorators = [ + { type: Injectable } +]; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdiLWNhbGVuZGFyLXBlcnNpYW4uanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJkYXRlcGlja2VyL2phbGFsaS9uZ2ItY2FsZW5kYXItcGVyc2lhbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ3BDLE9BQU8sRUFBQyxXQUFXLEVBQVksTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFMUMsT0FBTyxFQUFDLGFBQWEsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFHakcsTUFBTSxPQUFPLGtCQUFtQixTQUFRLFdBQVc7Ozs7SUFDakQsY0FBYyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQzs7OztJQUU5QixTQUFTLEtBQUssT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7O0lBRS9ELGdCQUFnQixLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQzs7Ozs7OztJQUVoQyxPQUFPLENBQUMsSUFBYSxFQUFFLFNBQW9CLEdBQUcsRUFBRSxNQUFNLEdBQUcsQ0FBQztRQUN4RCxJQUFJLEdBQUcsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVwRCxRQUFRLE1BQU0sRUFBRTtZQUNkLEtBQUssR0FBRztnQkFDTixJQUFJLEdBQUcsYUFBYSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDO2dCQUMvQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztnQkFDZixJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztnQkFDYixPQUFPLElBQUksQ0FBQztZQUNkLEtBQUssR0FBRztnQkFDTixJQUFJLEdBQUcsY0FBYyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDO2dCQUNqRCxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztnQkFDYixPQUFPLElBQUksQ0FBQztZQUNkLEtBQUssR0FBRztnQkFDTixPQUFPLFlBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQztZQUMvQztnQkFDRSxPQUFPLElBQUksQ0FBQztTQUNmO0lBQ0gsQ0FBQzs7Ozs7OztJQUVELE9BQU8sQ0FBQyxJQUFhLEVBQUUsU0FBb0IsR0FBRyxFQUFFLE1BQU0sR0FBRyxDQUFDLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Ozs7O0lBRTNHLFVBQVUsQ0FBQyxJQUFhOztjQUNoQixHQUFHLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRTtRQUN0QyxzQ0FBc0M7UUFDdEMsT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUM3QixDQUFDOzs7Ozs7SUFFRCxhQUFhLENBQUMsSUFBZSxFQUFFLGNBQXNCO1FBQ25ELHNDQUFzQztRQUN0QyxJQUFJLGNBQWMsS0FBSyxDQUFDLEVBQUU7WUFDeEIsY0FBYyxHQUFHLENBQUMsQ0FBQztTQUNwQjs7Y0FFSyxhQUFhLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUM7O2NBQzVDLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDOztjQUUxQixNQUFNLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQztRQUNoQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFFLFdBQVc7OztjQUNyRSxJQUFJLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRTs7Y0FDdkIsU0FBUyxHQUFHLFdBQVcsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakYsQ0FBQzs7OztJQUVELFFBQVEsS0FBYyxPQUFPLGFBQWEsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7OztJQUV6RCxPQUFPLENBQUMsSUFBYTtRQUNuQixPQUFPLElBQUksSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDL0UsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDMUMsQ0FBQzs7O1lBekRGLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtOZ2JEYXRlfSBmcm9tICcuLi9uZ2ItZGF0ZSc7XG5pbXBvcnQge05nYkNhbGVuZGFyLCBOZ2JQZXJpb2R9IGZyb20gJy4uL25nYi1jYWxlbmRhcic7XG5pbXBvcnQge2lzSW50ZWdlcn0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcblxuaW1wb3J0IHtmcm9tR3JlZ29yaWFuLCBzZXRKYWxhbGlEYXksIHNldEphbGFsaU1vbnRoLCBzZXRKYWxhbGlZZWFyLCB0b0dyZWdvcmlhbn0gZnJvbSAnLi9qYWxhbGknO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTmdiQ2FsZW5kYXJQZXJzaWFuIGV4dGVuZHMgTmdiQ2FsZW5kYXIge1xuICBnZXREYXlzUGVyV2VlaygpIHsgcmV0dXJuIDc7IH1cblxuICBnZXRNb250aHMoKSB7IHJldHVybiBbMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMl07IH1cblxuICBnZXRXZWVrc1Blck1vbnRoKCkgeyByZXR1cm4gNjsgfVxuXG4gIGdldE5leHQoZGF0ZTogTmdiRGF0ZSwgcGVyaW9kOiBOZ2JQZXJpb2QgPSAnZCcsIG51bWJlciA9IDEpIHtcbiAgICBkYXRlID0gbmV3IE5nYkRhdGUoZGF0ZS55ZWFyLCBkYXRlLm1vbnRoLCBkYXRlLmRheSk7XG5cbiAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgY2FzZSAneSc6XG4gICAgICAgIGRhdGUgPSBzZXRKYWxhbGlZZWFyKGRhdGUsIGRhdGUueWVhciArIG51bWJlcik7XG4gICAgICAgIGRhdGUubW9udGggPSAxO1xuICAgICAgICBkYXRlLmRheSA9IDE7XG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgICAgY2FzZSAnbSc6XG4gICAgICAgIGRhdGUgPSBzZXRKYWxhbGlNb250aChkYXRlLCBkYXRlLm1vbnRoICsgbnVtYmVyKTtcbiAgICAgICAgZGF0ZS5kYXkgPSAxO1xuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICAgIGNhc2UgJ2QnOlxuICAgICAgICByZXR1cm4gc2V0SmFsYWxpRGF5KGRhdGUsIGRhdGUuZGF5ICsgbnVtYmVyKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cbiAgfVxuXG4gIGdldFByZXYoZGF0ZTogTmdiRGF0ZSwgcGVyaW9kOiBOZ2JQZXJpb2QgPSAnZCcsIG51bWJlciA9IDEpIHsgcmV0dXJuIHRoaXMuZ2V0TmV4dChkYXRlLCBwZXJpb2QsIC1udW1iZXIpOyB9XG5cbiAgZ2V0V2Vla2RheShkYXRlOiBOZ2JEYXRlKSB7XG4gICAgY29uc3QgZGF5ID0gdG9HcmVnb3JpYW4oZGF0ZSkuZ2V0RGF5KCk7XG4gICAgLy8gaW4gSlMgRGF0ZSBTdW49MCwgaW4gSVNPIDg2MDEgU3VuPTdcbiAgICByZXR1cm4gZGF5ID09PSAwID8gNyA6IGRheTtcbiAgfVxuXG4gIGdldFdlZWtOdW1iZXIod2VlazogTmdiRGF0ZVtdLCBmaXJzdERheU9mV2VlazogbnVtYmVyKSB7XG4gICAgLy8gaW4gSlMgRGF0ZSBTdW49MCwgaW4gSVNPIDg2MDEgU3VuPTdcbiAgICBpZiAoZmlyc3REYXlPZldlZWsgPT09IDcpIHtcbiAgICAgIGZpcnN0RGF5T2ZXZWVrID0gMDtcbiAgICB9XG5cbiAgICBjb25zdCB0aHVyc2RheUluZGV4ID0gKDQgKyA3IC0gZmlyc3REYXlPZldlZWspICUgNztcbiAgICBjb25zdCBkYXRlID0gd2Vla1t0aHVyc2RheUluZGV4XTtcblxuICAgIGNvbnN0IGpzRGF0ZSA9IHRvR3JlZ29yaWFuKGRhdGUpO1xuICAgIGpzRGF0ZS5zZXREYXRlKGpzRGF0ZS5nZXREYXRlKCkgKyA0IC0gKGpzRGF0ZS5nZXREYXkoKSB8fCA3KSk7ICAvLyBUaHVyc2RheVxuICAgIGNvbnN0IHRpbWUgPSBqc0RhdGUuZ2V0VGltZSgpO1xuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IHRvR3JlZ29yaWFuKG5ldyBOZ2JEYXRlKGRhdGUueWVhciwgMSwgMSkpO1xuICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucm91bmQoKHRpbWUgLSBzdGFydERhdGUuZ2V0VGltZSgpKSAvIDg2NDAwMDAwKSAvIDcpICsgMTtcbiAgfVxuXG4gIGdldFRvZGF5KCk6IE5nYkRhdGUgeyByZXR1cm4gZnJvbUdyZWdvcmlhbihuZXcgRGF0ZSgpKTsgfVxuXG4gIGlzVmFsaWQoZGF0ZTogTmdiRGF0ZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBkYXRlICYmIGlzSW50ZWdlcihkYXRlLnllYXIpICYmIGlzSW50ZWdlcihkYXRlLm1vbnRoKSAmJiBpc0ludGVnZXIoZGF0ZS5kYXkpICYmXG4gICAgICAgICFpc05hTih0b0dyZWdvcmlhbihkYXRlKS5nZXRUaW1lKCkpO1xuICB9XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/datepicker/ngb-calendar.js b/dist/sunbird-ui-components/esm2015/datepicker/ngb-calendar.js new file mode 100644 index 0000000..2e57416 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/datepicker/ngb-calendar.js @@ -0,0 +1,233 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgbDate } from './ngb-date'; +import { Injectable } from '@angular/core'; +import { isInteger } from '../util/util'; +import * as i0 from "@angular/core"; +/** + * @param {?} jsDate + * @return {?} + */ +export function fromJSDate(jsDate) { + return new NgbDate(jsDate.getFullYear(), jsDate.getMonth() + 1, jsDate.getDate()); +} +/** + * @param {?} date + * @return {?} + */ +export function toJSDate(date) { + /** @type {?} */ + const jsDate = new Date(date.year, date.month - 1, date.day, 12); + // this is done avoid 30 -> 1930 conversion + if (!isNaN(jsDate.getTime())) { + jsDate.setFullYear(date.year); + } + return jsDate; +} +/** + * @return {?} + */ +export function NGB_DATEPICKER_CALENDAR_FACTORY() { + return new NgbCalendarGregorian(); +} +/** + * A service that represents the calendar used by the datepicker. + * + * The default implementation uses the Gregorian calendar. You can inject it in your own + * implementations if necessary to simplify `NgbDate` calculations. + * @abstract + */ +export class NgbCalendar { +} +NgbCalendar.decorators = [ + { type: Injectable, args: [{ providedIn: 'root', useFactory: NGB_DATEPICKER_CALENDAR_FACTORY },] } +]; +/** @nocollapse */ NgbCalendar.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: NGB_DATEPICKER_CALENDAR_FACTORY, token: NgbCalendar, providedIn: "root" }); +if (false) { + /** + * Returns the number of days per week. + * @abstract + * @return {?} + */ + NgbCalendar.prototype.getDaysPerWeek = function () { }; + /** + * Returns an array of months per year. + * + * With default calendar we use ISO 8601 and return [1, 2, ..., 12]; + * @abstract + * @param {?=} year + * @return {?} + */ + NgbCalendar.prototype.getMonths = function (year) { }; + /** + * Returns the number of weeks per month. + * @abstract + * @return {?} + */ + NgbCalendar.prototype.getWeeksPerMonth = function () { }; + /** + * Returns the weekday number for a given day. + * + * With the default calendar we use ISO 8601: 'weekday' is 1=Mon ... 7=Sun + * @abstract + * @param {?} date + * @return {?} + */ + NgbCalendar.prototype.getWeekday = function (date) { }; + /** + * Adds a number of years, months or days to a given date. + * + * * `period` can be `y`, `m` or `d` and defaults to day. + * * `number` defaults to 1. + * + * Always returns a new date. + * @abstract + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + NgbCalendar.prototype.getNext = function (date, period, number) { }; + /** + * Subtracts a number of years, months or days from a given date. + * + * * `period` can be `y`, `m` or `d` and defaults to day. + * * `number` defaults to 1. + * + * Always returns a new date. + * @abstract + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + NgbCalendar.prototype.getPrev = function (date, period, number) { }; + /** + * Returns the week number for a given week. + * @abstract + * @param {?} week + * @param {?} firstDayOfWeek + * @return {?} + */ + NgbCalendar.prototype.getWeekNumber = function (week, firstDayOfWeek) { }; + /** + * Returns the today's date. + * @abstract + * @return {?} + */ + NgbCalendar.prototype.getToday = function () { }; + /** + * Checks if a date is valid in the current calendar. + * @abstract + * @param {?} date + * @return {?} + */ + NgbCalendar.prototype.isValid = function (date) { }; +} +export class NgbCalendarGregorian extends NgbCalendar { + /** + * @return {?} + */ + getDaysPerWeek() { return 7; } + /** + * @return {?} + */ + getMonths() { return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; } + /** + * @return {?} + */ + getWeeksPerMonth() { return 6; } + /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + getNext(date, period = 'd', number = 1) { + /** @type {?} */ + let jsDate = toJSDate(date); + switch (period) { + case 'y': + return new NgbDate(date.year + number, 1, 1); + case 'm': + jsDate = new Date(date.year, date.month + number - 1, 1, 12); + break; + case 'd': + jsDate.setDate(jsDate.getDate() + number); + break; + default: + return date; + } + return fromJSDate(jsDate); + } + /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + getPrev(date, period = 'd', number = 1) { return this.getNext(date, period, -number); } + /** + * @param {?} date + * @return {?} + */ + getWeekday(date) { + /** @type {?} */ + let jsDate = toJSDate(date); + /** @type {?} */ + let day = jsDate.getDay(); + // in JS Date Sun=0, in ISO 8601 Sun=7 + return day === 0 ? 7 : day; + } + /** + * @param {?} week + * @param {?} firstDayOfWeek + * @return {?} + */ + getWeekNumber(week, firstDayOfWeek) { + // in JS Date Sun=0, in ISO 8601 Sun=7 + if (firstDayOfWeek === 7) { + firstDayOfWeek = 0; + } + /** @type {?} */ + const thursdayIndex = (4 + 7 - firstDayOfWeek) % 7; + /** @type {?} */ + let date = week[thursdayIndex]; + /** @type {?} */ + const jsDate = toJSDate(date); + jsDate.setDate(jsDate.getDate() + 4 - (jsDate.getDay() || 7)); // Thursday + // Thursday + /** @type {?} */ + const time = jsDate.getTime(); + jsDate.setMonth(0); // Compare with Jan 1 + jsDate.setDate(1); + return Math.floor(Math.round((time - jsDate.getTime()) / 86400000) / 7) + 1; + } + /** + * @return {?} + */ + getToday() { return fromJSDate(new Date()); } + /** + * @param {?} date + * @return {?} + */ + isValid(date) { + if (!date || !isInteger(date.year) || !isInteger(date.month) || !isInteger(date.day)) { + return false; + } + // year 0 doesn't exist in Gregorian calendar + if (date.year === 0) { + return false; + } + /** @type {?} */ + const jsDate = toJSDate(date); + return !isNaN(jsDate.getTime()) && jsDate.getFullYear() === date.year && jsDate.getMonth() + 1 === date.month && + jsDate.getDate() === date.day; + } +} +NgbCalendarGregorian.decorators = [ + { type: Injectable } +]; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdiLWNhbGVuZGFyLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiZGF0ZXBpY2tlci9uZ2ItY2FsZW5kYXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sY0FBYyxDQUFDOzs7Ozs7QUFFdkMsTUFBTSxVQUFVLFVBQVUsQ0FBQyxNQUFZO0lBQ3JDLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDcEYsQ0FBQzs7Ozs7QUFDRCxNQUFNLFVBQVUsUUFBUSxDQUFDLElBQWE7O1VBQzlCLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0lBQ2hFLDJDQUEyQztJQUMzQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFO1FBQzVCLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQy9CO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQzs7OztBQUlELE1BQU0sVUFBVSwrQkFBK0I7SUFDN0MsT0FBTyxJQUFJLG9CQUFvQixFQUFFLENBQUM7QUFDcEMsQ0FBQzs7Ozs7Ozs7QUFTRCxNQUFNLE9BQWdCLFdBQVc7OztZQURoQyxVQUFVLFNBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSwr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QUMsQ0FBRSxxQkFBcUI7UUFDMUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUUsQ0FBQzs7OztJQUVELFFBQVEsS0FBYyxPQUFPLFVBQVUsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7OztJQUV0RCxPQUFPLENBQUMsSUFBYTtRQUNuQixJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3BGLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCw2Q0FBNkM7UUFDN0MsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtZQUNuQixPQUFPLEtBQUssQ0FBQztTQUNkOztjQUVLLE1BQU0sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBRTdCLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksTUFBTSxDQUFDLFdBQVcsRUFBRSxLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSztZQUN6RyxNQUFNLENBQUMsT0FBTyxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNwQyxDQUFDOzs7WUFyRUYsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TmdiRGF0ZX0gZnJvbSAnLi9uZ2ItZGF0ZSc7XG5pbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtpc0ludGVnZXJ9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tSlNEYXRlKGpzRGF0ZTogRGF0ZSkge1xuICByZXR1cm4gbmV3IE5nYkRhdGUoanNEYXRlLmdldEZ1bGxZZWFyKCksIGpzRGF0ZS5nZXRNb250aCgpICsgMSwganNEYXRlLmdldERhdGUoKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gdG9KU0RhdGUoZGF0ZTogTmdiRGF0ZSkge1xuICBjb25zdCBqc0RhdGUgPSBuZXcgRGF0ZShkYXRlLnllYXIsIGRhdGUubW9udGggLSAxLCBkYXRlLmRheSwgMTIpO1xuICAvLyB0aGlzIGlzIGRvbmUgYXZvaWQgMzAgLT4gMTkzMCBjb252ZXJzaW9uXG4gIGlmICghaXNOYU4oanNEYXRlLmdldFRpbWUoKSkpIHtcbiAgICBqc0RhdGUuc2V0RnVsbFllYXIoZGF0ZS55ZWFyKTtcbiAgfVxuICByZXR1cm4ganNEYXRlO1xufVxuXG5leHBvcnQgdHlwZSBOZ2JQZXJpb2QgPSAneScgfCAnbScgfCAnZCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBOR0JfREFURVBJQ0tFUl9DQUxFTkRBUl9GQUNUT1JZKCkge1xuICByZXR1cm4gbmV3IE5nYkNhbGVuZGFyR3JlZ29yaWFuKCk7XG59XG5cbi8qKlxuICogQSBzZXJ2aWNlIHRoYXQgcmVwcmVzZW50cyB0aGUgY2FsZW5kYXIgdXNlZCBieSB0aGUgZGF0ZXBpY2tlci5cbiAqXG4gKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB1c2VzIHRoZSBHcmVnb3JpYW4gY2FsZW5kYXIuIFlvdSBjYW4gaW5qZWN0IGl0IGluIHlvdXIgb3duXG4gKiBpbXBsZW1lbnRhdGlvbnMgaWYgbmVjZXNzYXJ5IHRvIHNpbXBsaWZ5IGBOZ2JEYXRlYCBjYWxjdWxhdGlvbnMuXG4gKi9cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCcsIHVzZUZhY3Rvcnk6IE5HQl9EQVRFUElDS0VSX0NBTEVOREFSX0ZBQ1RPUll9KVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE5nYkNhbGVuZGFyIHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBkYXlzIHBlciB3ZWVrLlxuICAgKi9cbiAgYWJzdHJhY3QgZ2V0RGF5c1BlcldlZWsoKTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIG1vbnRocyBwZXIgeWVhci5cbiAgICpcbiAgICogV2l0aCBkZWZhdWx0IGNhbGVuZGFyIHdlIHVzZSBJU08gODYwMSBhbmQgcmV0dXJuIFsxLCAyLCAuLi4sIDEyXTtcbiAgICovXG4gIGFic3RyYWN0IGdldE1vbnRocyh5ZWFyPzogbnVtYmVyKTogbnVtYmVyW107XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG51bWJlciBvZiB3ZWVrcyBwZXIgbW9udGguXG4gICAqL1xuICBhYnN0cmFjdCBnZXRXZWVrc1Blck1vbnRoKCk6IG51bWJlcjtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgd2Vla2RheSBudW1iZXIgZm9yIGEgZ2l2ZW4gZGF5LlxuICAgKlxuICAgKiBXaXRoIHRoZSBkZWZhdWx0IGNhbGVuZGFyIHdlIHVzZSBJU08gODYwMTogJ3dlZWtkYXknIGlzIDE9TW9uIC4uLiA3PVN1blxuICAgKi9cbiAgYWJzdHJhY3QgZ2V0V2Vla2RheShkYXRlOiBOZ2JEYXRlKTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBZGRzIGEgbnVtYmVyIG9mIHllYXJzLCBtb250aHMgb3IgZGF5cyB0byBhIGdpdmVuIGRhdGUuXG4gICAqXG4gICAqICogYHBlcmlvZGAgY2FuIGJlIGB5YCwgYG1gIG9yIGBkYCBhbmQgZGVmYXVsdHMgdG8gZGF5LlxuICAgKiAqIGBudW1iZXJgIGRlZmF1bHRzIHRvIDEuXG4gICAqXG4gICAqIEFsd2F5cyByZXR1cm5zIGEgbmV3IGRhdGUuXG4gICAqL1xuICBhYnN0cmFjdCBnZXROZXh0KGRhdGU6IE5nYkRhdGUsIHBlcmlvZD86IE5nYlBlcmlvZCwgbnVtYmVyPzogbnVtYmVyKTogTmdiRGF0ZTtcblxuICAvKipcbiAgICogU3VidHJhY3RzIGEgbnVtYmVyIG9mIHllYXJzLCBtb250aHMgb3IgZGF5cyBmcm9tIGEgZ2l2ZW4gZGF0ZS5cbiAgICpcbiAgICogKiBgcGVyaW9kYCBjYW4gYmUgYHlgLCBgbWAgb3IgYGRgIGFuZCBkZWZhdWx0cyB0byBkYXkuXG4gICAqICogYG51bWJlcmAgZGVmYXVsdHMgdG8gMS5cbiAgICpcbiAgICogQWx3YXlzIHJldHVybnMgYSBuZXcgZGF0ZS5cbiAgICovXG4gIGFic3RyYWN0IGdldFByZXYoZGF0ZTogTmdiRGF0ZSwgcGVyaW9kPzogTmdiUGVyaW9kLCBudW1iZXI/OiBudW1iZXIpOiBOZ2JEYXRlO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB3ZWVrIG51bWJlciBmb3IgYSBnaXZlbiB3ZWVrLlxuICAgKi9cbiAgYWJzdHJhY3QgZ2V0V2Vla051bWJlcih3ZWVrOiBOZ2JEYXRlW10sIGZpcnN0RGF5T2ZXZWVrOiBudW1iZXIpOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHRvZGF5J3MgZGF0ZS5cbiAgICovXG4gIGFic3RyYWN0IGdldFRvZGF5KCk6IE5nYkRhdGU7XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIGRhdGUgaXMgdmFsaWQgaW4gdGhlIGN1cnJlbnQgY2FsZW5kYXIuXG4gICAqL1xuICBhYnN0cmFjdCBpc1ZhbGlkKGRhdGU6IE5nYkRhdGUpOiBib29sZWFuO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTmdiQ2FsZW5kYXJHcmVnb3JpYW4gZXh0ZW5kcyBOZ2JDYWxlbmRhciB7XG4gIGdldERheXNQZXJXZWVrKCkgeyByZXR1cm4gNzsgfVxuXG4gIGdldE1vbnRocygpIHsgcmV0dXJuIFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyXTsgfVxuXG4gIGdldFdlZWtzUGVyTW9udGgoKSB7IHJldHVybiA2OyB9XG5cbiAgZ2V0TmV4dChkYXRlOiBOZ2JEYXRlLCBwZXJpb2Q6IE5nYlBlcmlvZCA9ICdkJywgbnVtYmVyID0gMSkge1xuICAgIGxldCBqc0RhdGUgPSB0b0pTRGF0ZShkYXRlKTtcblxuICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICBjYXNlICd5JzpcbiAgICAgICAgcmV0dXJuIG5ldyBOZ2JEYXRlKGRhdGUueWVhciArIG51bWJlciwgMSwgMSk7XG4gICAgICBjYXNlICdtJzpcbiAgICAgICAganNEYXRlID0gbmV3IERhdGUoZGF0ZS55ZWFyLCBkYXRlLm1vbnRoICsgbnVtYmVyIC0gMSwgMSwgMTIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2QnOlxuICAgICAgICBqc0RhdGUuc2V0RGF0ZShqc0RhdGUuZ2V0RGF0ZSgpICsgbnVtYmVyKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnJvbUpTRGF0ZShqc0RhdGUpO1xuICB9XG5cbiAgZ2V0UHJldihkYXRlOiBOZ2JEYXRlLCBwZXJpb2Q6IE5nYlBlcmlvZCA9ICdkJywgbnVtYmVyID0gMSkgeyByZXR1cm4gdGhpcy5nZXROZXh0KGRhdGUsIHBlcmlvZCwgLW51bWJlcik7IH1cblxuICBnZXRXZWVrZGF5KGRhdGU6IE5nYkRhdGUpIHtcbiAgICBsZXQganNEYXRlID0gdG9KU0RhdGUoZGF0ZSk7XG4gICAgbGV0IGRheSA9IGpzRGF0ZS5nZXREYXkoKTtcbiAgICAvLyBpbiBKUyBEYXRlIFN1bj0wLCBpbiBJU08gODYwMSBTdW49N1xuICAgIHJldHVybiBkYXkgPT09IDAgPyA3IDogZGF5O1xuICB9XG5cbiAgZ2V0V2Vla051bWJlcih3ZWVrOiBOZ2JEYXRlW10sIGZpcnN0RGF5T2ZXZWVrOiBudW1iZXIpIHtcbiAgICAvLyBpbiBKUyBEYXRlIFN1bj0wLCBpbiBJU08gODYwMSBTdW49N1xuICAgIGlmIChmaXJzdERheU9mV2VlayA9PT0gNykge1xuICAgICAgZmlyc3REYXlPZldlZWsgPSAwO1xuICAgIH1cblxuICAgIGNvbnN0IHRodXJzZGF5SW5kZXggPSAoNCArIDcgLSBmaXJzdERheU9mV2VlaykgJSA3O1xuICAgIGxldCBkYXRlID0gd2Vla1t0aHVyc2RheUluZGV4XTtcblxuICAgIGNvbnN0IGpzRGF0ZSA9IHRvSlNEYXRlKGRhdGUpO1xuICAgIGpzRGF0ZS5zZXREYXRlKGpzRGF0ZS5nZXREYXRlKCkgKyA0IC0gKGpzRGF0ZS5nZXREYXkoKSB8fCA3KSk7ICAvLyBUaHVyc2RheVxuICAgIGNvbnN0IHRpbWUgPSBqc0RhdGUuZ2V0VGltZSgpO1xuICAgIGpzRGF0ZS5zZXRNb250aCgwKTsgIC8vIENvbXBhcmUgd2l0aCBKYW4gMVxuICAgIGpzRGF0ZS5zZXREYXRlKDEpO1xuICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucm91bmQoKHRpbWUgLSBqc0RhdGUuZ2V0VGltZSgpKSAvIDg2NDAwMDAwKSAvIDcpICsgMTtcbiAgfVxuXG4gIGdldFRvZGF5KCk6IE5nYkRhdGUgeyByZXR1cm4gZnJvbUpTRGF0ZShuZXcgRGF0ZSgpKTsgfVxuXG4gIGlzVmFsaWQoZGF0ZTogTmdiRGF0ZSk6IGJvb2xlYW4ge1xuICAgIGlmICghZGF0ZSB8fCAhaXNJbnRlZ2VyKGRhdGUueWVhcikgfHwgIWlzSW50ZWdlcihkYXRlLm1vbnRoKSB8fCAhaXNJbnRlZ2VyKGRhdGUuZGF5KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIHllYXIgMCBkb2Vzbid0IGV4aXN0IGluIEdyZWdvcmlhbiBjYWxlbmRhclxuICAgIGlmIChkYXRlLnllYXIgPT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBqc0RhdGUgPSB0b0pTRGF0ZShkYXRlKTtcblxuICAgIHJldHVybiAhaXNOYU4oanNEYXRlLmdldFRpbWUoKSkgJiYganNEYXRlLmdldEZ1bGxZZWFyKCkgPT09IGRhdGUueWVhciAmJiBqc0RhdGUuZ2V0TW9udGgoKSArIDEgPT09IGRhdGUubW9udGggJiZcbiAgICAgICAganNEYXRlLmdldERhdGUoKSA9PT0gZGF0ZS5kYXk7XG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/datepicker/ngb-date-parser-formatter.js b/dist/sunbird-ui-components/esm2015/datepicker/ngb-date-parser-formatter.js new file mode 100644 index 0000000..83c42a8 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/datepicker/ngb-date-parser-formatter.js @@ -0,0 +1,92 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { padNumber, toInteger, isNumber } from '../util/util'; +import { Injectable } from '@angular/core'; +import * as i0 from "@angular/core"; +/** + * @return {?} + */ +export function NGB_DATEPICKER_PARSER_FORMATTER_FACTORY() { + return new NgbDateISOParserFormatter(); +} +/** + * An abstract service for parsing and formatting dates for the + * [`NgbInputDatepicker`](#/components/datepicker/api#NgbInputDatepicker) directive. + * Converts between the internal `NgbDateStruct` model presentation and a `string` that is displayed in the + * input element. + * + * When user types something in the input this service attempts to parse it into a `NgbDateStruct` object. + * And vice versa, when users selects a date in the calendar with the mouse, it must be displayed as a `string` + * in the input. + * + * Default implementation uses the ISO 8601 format, but you can provide another implementation via DI + * to use an alternative string format or a custom parsing logic. + * + * See the [date format overview](#/components/datepicker/overview#date-model) for more details. + * @abstract + */ +export class NgbDateParserFormatter { +} +NgbDateParserFormatter.decorators = [ + { type: Injectable, args: [{ providedIn: 'root', useFactory: NGB_DATEPICKER_PARSER_FORMATTER_FACTORY },] } +]; +/** @nocollapse */ NgbDateParserFormatter.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: NGB_DATEPICKER_PARSER_FORMATTER_FACTORY, token: NgbDateParserFormatter, providedIn: "root" }); +if (false) { + /** + * Parses the given `string` to an `NgbDateStruct`. + * + * Implementations should try their best to provide a result, even + * partial. They must return `null` if the value can't be parsed. + * @abstract + * @param {?} value + * @return {?} + */ + NgbDateParserFormatter.prototype.parse = function (value) { }; + /** + * Formats the given `NgbDateStruct` to a `string`. + * + * Implementations should return an empty string if the given date is `null`, + * and try their best to provide a partial result if the given date is incomplete or invalid. + * @abstract + * @param {?} date + * @return {?} + */ + NgbDateParserFormatter.prototype.format = function (date) { }; +} +export class NgbDateISOParserFormatter extends NgbDateParserFormatter { + /** + * @param {?} value + * @return {?} + */ + parse(value) { + if (value) { + /** @type {?} */ + const dateParts = value.trim().split('-'); + if (dateParts.length === 1 && isNumber(dateParts[0])) { + return { year: toInteger(dateParts[0]), month: null, day: null }; + } + else if (dateParts.length === 2 && isNumber(dateParts[0]) && isNumber(dateParts[1])) { + return { year: toInteger(dateParts[0]), month: toInteger(dateParts[1]), day: null }; + } + else if (dateParts.length === 3 && isNumber(dateParts[0]) && isNumber(dateParts[1]) && isNumber(dateParts[2])) { + return { year: toInteger(dateParts[0]), month: toInteger(dateParts[1]), day: toInteger(dateParts[2]) }; + } + } + return null; + } + /** + * @param {?} date + * @return {?} + */ + format(date) { + return date ? + `${date.year}-${isNumber(date.month) ? padNumber(date.month) : ''}-${isNumber(date.day) ? padNumber(date.day) : ''}` : + ''; + } +} +NgbDateISOParserFormatter.decorators = [ + { type: Injectable } +]; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdiLWRhdGUtcGFyc2VyLWZvcm1hdHRlci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImRhdGVwaWNrZXIvbmdiLWRhdGUtcGFyc2VyLWZvcm1hdHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRTVELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7Ozs7O0FBRXpDLE1BQU0sVUFBVSx1Q0FBdUM7SUFDckQsT0FBTyxJQUFJLHlCQUF5QixFQUFFLENBQUM7QUFDekMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFrQkQsTUFBTSxPQUFnQixzQkFBc0I7OztZQUQzQyxVQUFVLFNBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSx1Q0FBdUMsRUFBQzs7Ozs7Ozs7Ozs7OztJQVFuRiw4REFBNkM7Ozs7Ozs7Ozs7SUFRN0MsOERBQTZDOztBQUkvQyxNQUFNLE9BQU8seUJBQTBCLFNBQVEsc0JBQXNCOzs7OztJQUNuRSxLQUFLLENBQUMsS0FBYTtRQUNqQixJQUFJLEtBQUssRUFBRTs7a0JBQ0gsU0FBUyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO1lBQ3pDLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNwRCxPQUFPLEVBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUMsQ0FBQzthQUNoRTtpQkFBTSxJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3JGLE9BQU8sRUFBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBQyxDQUFDO2FBQ25GO2lCQUFNLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQy9HLE9BQU8sRUFBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDO2FBQ3RHO1NBQ0Y7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Ozs7O0lBRUQsTUFBTSxDQUFDLElBQW1CO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLENBQUM7WUFDVCxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdEgsRUFBRSxDQUFDO0lBQ1QsQ0FBQzs7O1lBcEJGLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3BhZE51bWJlciwgdG9JbnRlZ2VyLCBpc051bWJlcn0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCB7TmdiRGF0ZVN0cnVjdH0gZnJvbSAnLi9uZ2ItZGF0ZS1zdHJ1Y3QnO1xuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIE5HQl9EQVRFUElDS0VSX1BBUlNFUl9GT1JNQVRURVJfRkFDVE9SWSgpIHtcbiAgcmV0dXJuIG5ldyBOZ2JEYXRlSVNPUGFyc2VyRm9ybWF0dGVyKCk7XG59XG5cbi8qKlxuICogQW4gYWJzdHJhY3Qgc2VydmljZSBmb3IgcGFyc2luZyBhbmQgZm9ybWF0dGluZyBkYXRlcyBmb3IgdGhlXG4gKiBbYE5nYklucHV0RGF0ZXBpY2tlcmBdKCMvY29tcG9uZW50cy9kYXRlcGlja2VyL2FwaSNOZ2JJbnB1dERhdGVwaWNrZXIpIGRpcmVjdGl2ZS5cbiAqIENvbnZlcnRzIGJldHdlZW4gdGhlIGludGVybmFsIGBOZ2JEYXRlU3RydWN0YCBtb2RlbCBwcmVzZW50YXRpb24gYW5kIGEgYHN0cmluZ2AgdGhhdCBpcyBkaXNwbGF5ZWQgaW4gdGhlXG4gKiBpbnB1dCBlbGVtZW50LlxuICpcbiAqIFdoZW4gdXNlciB0eXBlcyBzb21ldGhpbmcgaW4gdGhlIGlucHV0IHRoaXMgc2VydmljZSBhdHRlbXB0cyB0byBwYXJzZSBpdCBpbnRvIGEgYE5nYkRhdGVTdHJ1Y3RgIG9iamVjdC5cbiAqIEFuZCB2aWNlIHZlcnNhLCB3aGVuIHVzZXJzIHNlbGVjdHMgYSBkYXRlIGluIHRoZSBjYWxlbmRhciB3aXRoIHRoZSBtb3VzZSwgaXQgbXVzdCBiZSBkaXNwbGF5ZWQgYXMgYSBgc3RyaW5nYFxuICogaW4gdGhlIGlucHV0LlxuICpcbiAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gdXNlcyB0aGUgSVNPIDg2MDEgZm9ybWF0LCBidXQgeW91IGNhbiBwcm92aWRlIGFub3RoZXIgaW1wbGVtZW50YXRpb24gdmlhIERJXG4gKiB0byB1c2UgYW4gYWx0ZXJuYXRpdmUgc3RyaW5nIGZvcm1hdCBvciBhIGN1c3RvbSBwYXJzaW5nIGxvZ2ljLlxuICpcbiAqIFNlZSB0aGUgW2RhdGUgZm9ybWF0IG92ZXJ2aWV3XSgjL2NvbXBvbmVudHMvZGF0ZXBpY2tlci9vdmVydmlldyNkYXRlLW1vZGVsKSBmb3IgbW9yZSBkZXRhaWxzLlxuICovXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnLCB1c2VGYWN0b3J5OiBOR0JfREFURVBJQ0tFUl9QQVJTRVJfRk9STUFUVEVSX0ZBQ1RPUll9KVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE5nYkRhdGVQYXJzZXJGb3JtYXR0ZXIge1xuICAvKipcbiAgICogUGFyc2VzIHRoZSBnaXZlbiBgc3RyaW5nYCB0byBhbiBgTmdiRGF0ZVN0cnVjdGAuXG4gICAqXG4gICAqIEltcGxlbWVudGF0aW9ucyBzaG91bGQgdHJ5IHRoZWlyIGJlc3QgdG8gcHJvdmlkZSBhIHJlc3VsdCwgZXZlblxuICAgKiBwYXJ0aWFsLiBUaGV5IG11c3QgcmV0dXJuIGBudWxsYCBpZiB0aGUgdmFsdWUgY2FuJ3QgYmUgcGFyc2VkLlxuICAgKi9cbiAgYWJzdHJhY3QgcGFyc2UodmFsdWU6IHN0cmluZyk6IE5nYkRhdGVTdHJ1Y3Q7XG5cbiAgLyoqXG4gICAqIEZvcm1hdHMgdGhlIGdpdmVuIGBOZ2JEYXRlU3RydWN0YCB0byBhIGBzdHJpbmdgLlxuICAgKlxuICAgKiBJbXBsZW1lbnRhdGlvbnMgc2hvdWxkIHJldHVybiBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlIGdpdmVuIGRhdGUgaXMgYG51bGxgLFxuICAgKiBhbmQgdHJ5IHRoZWlyIGJlc3QgdG8gcHJvdmlkZSBhIHBhcnRpYWwgcmVzdWx0IGlmIHRoZSBnaXZlbiBkYXRlIGlzIGluY29tcGxldGUgb3IgaW52YWxpZC5cbiAgICovXG4gIGFic3RyYWN0IGZvcm1hdChkYXRlOiBOZ2JEYXRlU3RydWN0KTogc3RyaW5nO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTmdiRGF0ZUlTT1BhcnNlckZvcm1hdHRlciBleHRlbmRzIE5nYkRhdGVQYXJzZXJGb3JtYXR0ZXIge1xuICBwYXJzZSh2YWx1ZTogc3RyaW5nKTogTmdiRGF0ZVN0cnVjdCB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBjb25zdCBkYXRlUGFydHMgPSB2YWx1ZS50cmltKCkuc3BsaXQoJy0nKTtcbiAgICAgIGlmIChkYXRlUGFydHMubGVuZ3RoID09PSAxICYmIGlzTnVtYmVyKGRhdGVQYXJ0c1swXSkpIHtcbiAgICAgICAgcmV0dXJuIHt5ZWFyOiB0b0ludGVnZXIoZGF0ZVBhcnRzWzBdKSwgbW9udGg6IG51bGwsIGRheTogbnVsbH07XG4gICAgICB9IGVsc2UgaWYgKGRhdGVQYXJ0cy5sZW5ndGggPT09IDIgJiYgaXNOdW1iZXIoZGF0ZVBhcnRzWzBdKSAmJiBpc051bWJlcihkYXRlUGFydHNbMV0pKSB7XG4gICAgICAgIHJldHVybiB7eWVhcjogdG9JbnRlZ2VyKGRhdGVQYXJ0c1swXSksIG1vbnRoOiB0b0ludGVnZXIoZGF0ZVBhcnRzWzFdKSwgZGF5OiBudWxsfTtcbiAgICAgIH0gZWxzZSBpZiAoZGF0ZVBhcnRzLmxlbmd0aCA9PT0gMyAmJiBpc051bWJlcihkYXRlUGFydHNbMF0pICYmIGlzTnVtYmVyKGRhdGVQYXJ0c1sxXSkgJiYgaXNOdW1iZXIoZGF0ZVBhcnRzWzJdKSkge1xuICAgICAgICByZXR1cm4ge3llYXI6IHRvSW50ZWdlcihkYXRlUGFydHNbMF0pLCBtb250aDogdG9JbnRlZ2VyKGRhdGVQYXJ0c1sxXSksIGRheTogdG9JbnRlZ2VyKGRhdGVQYXJ0c1syXSl9O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZvcm1hdChkYXRlOiBOZ2JEYXRlU3RydWN0KTogc3RyaW5nIHtcbiAgICByZXR1cm4gZGF0ZSA/XG4gICAgICAgIGAke2RhdGUueWVhcn0tJHtpc051bWJlcihkYXRlLm1vbnRoKSA/IHBhZE51bWJlcihkYXRlLm1vbnRoKSA6ICcnfS0ke2lzTnVtYmVyKGRhdGUuZGF5KSA/IHBhZE51bWJlcihkYXRlLmRheSkgOiAnJ31gIDpcbiAgICAgICAgJyc7XG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/datepicker/ngb-date-struct.js b/dist/sunbird-ui-components/esm2015/datepicker/ngb-date-struct.js new file mode 100644 index 0000000..b67ab82 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/datepicker/ngb-date-struct.js @@ -0,0 +1,31 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * An interface of the date model used by the datepicker. + * + * All datepicker APIs consume `NgbDateStruct`, but return `NgbDate`. + * + * See the [date format overview](#/components/datepicker/overview#date-model) for more details. + * @record + */ +export function NgbDateStruct() { } +if (false) { + /** + * The year, for example 2016 + * @type {?} + */ + NgbDateStruct.prototype.year; + /** + * The month, for example 1=Jan ... 12=Dec + * @type {?} + */ + NgbDateStruct.prototype.month; + /** + * The day of month, starting at 1 + * @type {?} + */ + NgbDateStruct.prototype.day; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdiLWRhdGUtc3RydWN0LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiZGF0ZXBpY2tlci9uZ2ItZGF0ZS1zdHJ1Y3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBT0EsbUNBZUM7Ozs7OztJQVhDLDZCQUFhOzs7OztJQUtiLDhCQUFjOzs7OztJQUtkLDRCQUFZIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBbiBpbnRlcmZhY2Ugb2YgdGhlIGRhdGUgbW9kZWwgdXNlZCBieSB0aGUgZGF0ZXBpY2tlci5cbiAqXG4gKiBBbGwgZGF0ZXBpY2tlciBBUElzIGNvbnN1bWUgYE5nYkRhdGVTdHJ1Y3RgLCBidXQgcmV0dXJuIGBOZ2JEYXRlYC5cbiAqXG4gKiBTZWUgdGhlIFtkYXRlIGZvcm1hdCBvdmVydmlld10oIy9jb21wb25lbnRzL2RhdGVwaWNrZXIvb3ZlcnZpZXcjZGF0ZS1tb2RlbCkgZm9yIG1vcmUgZGV0YWlscy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZ2JEYXRlU3RydWN0IHtcbiAgLyoqXG4gICAqIFRoZSB5ZWFyLCBmb3IgZXhhbXBsZSAyMDE2XG4gICAqL1xuICB5ZWFyOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBtb250aCwgZm9yIGV4YW1wbGUgMT1KYW4gLi4uIDEyPURlY1xuICAgKi9cbiAgbW9udGg6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGRheSBvZiBtb250aCwgc3RhcnRpbmcgYXQgMVxuICAgKi9cbiAgZGF5OiBudW1iZXI7XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/datepicker/ngb-date.js b/dist/sunbird-ui-components/esm2015/datepicker/ngb-date.js new file mode 100644 index 0000000..86fa9c2 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/datepicker/ngb-date.js @@ -0,0 +1,115 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { isInteger } from '../util/util'; +/** + * A simple class that represents a date that datepicker also uses internally. + * + * It is the implementation of the `NgbDateStruct` interface that adds some convenience methods, + * like `.equals()`, `.before()`, etc. + * + * All datepicker APIs consume `NgbDateStruct`, but return `NgbDate`. + * + * In many cases it is simpler to manipulate these objects together with + * [`NgbCalendar`](#/components/datepicker/api#NgbCalendar) than native JS Dates. + * + * See the [date format overview](#/components/datepicker/overview#date-model) for more details. + * + * \@since 3.0.0 + */ +export class NgbDate { + /** + * A **static method** that creates a new date object from the `NgbDateStruct`, + * + * ex. `NgbDate.from({year: 2000, month: 5, day: 1})`. + * + * If the `date` is already of `NgbDate` type, the method will return the same object. + * @param {?} date + * @return {?} + */ + static from(date) { + if (date instanceof NgbDate) { + return date; + } + return date ? new NgbDate(date.year, date.month, date.day) : null; + } + /** + * @param {?} year + * @param {?} month + * @param {?} day + */ + constructor(year, month, day) { + this.year = isInteger(year) ? year : null; + this.month = isInteger(month) ? month : null; + this.day = isInteger(day) ? day : null; + } + /** + * Checks if the current date is equal to another date. + * @param {?} other + * @return {?} + */ + equals(other) { + return other && this.year === other.year && this.month === other.month && this.day === other.day; + } + /** + * Checks if the current date is before another date. + * @param {?} other + * @return {?} + */ + before(other) { + if (!other) { + return false; + } + if (this.year === other.year) { + if (this.month === other.month) { + return this.day === other.day ? false : this.day < other.day; + } + else { + return this.month < other.month; + } + } + else { + return this.year < other.year; + } + } + /** + * Checks if the current date is after another date. + * @param {?} other + * @return {?} + */ + after(other) { + if (!other) { + return false; + } + if (this.year === other.year) { + if (this.month === other.month) { + return this.day === other.day ? false : this.day > other.day; + } + else { + return this.month > other.month; + } + } + else { + return this.year > other.year; + } + } +} +if (false) { + /** + * The year, for example 2016 + * @type {?} + */ + NgbDate.prototype.year; + /** + * The month, for example 1=Jan ... 12=Dec as in ISO 8601 + * @type {?} + */ + NgbDate.prototype.month; + /** + * The day of month, starting with 1 + * @type {?} + */ + NgbDate.prototype.day; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdiLWRhdGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJkYXRlcGlja2VyL25nYi1kYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sY0FBYyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBaUJ2QyxNQUFNLE9BQU8sT0FBTzs7Ozs7Ozs7OztJQXVCbEIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFtQjtRQUM3QixJQUFJLElBQUksWUFBWSxPQUFPLEVBQUU7WUFDM0IsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDcEUsQ0FBQzs7Ozs7O0lBRUQsWUFBWSxJQUFZLEVBQUUsS0FBYSxFQUFFLEdBQVc7UUFDbEQsSUFBSSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzFDLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUM3QyxJQUFJLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDekMsQ0FBQzs7Ozs7O0lBS0QsTUFBTSxDQUFDLEtBQW9CO1FBQ3pCLE9BQU8sS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDO0lBQ25HLENBQUM7Ozs7OztJQUtELE1BQU0sQ0FBQyxLQUFvQjtRQUN6QixJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1YsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxFQUFFO1lBQzVCLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsS0FBSyxFQUFFO2dCQUM5QixPQUFPLElBQUksQ0FBQyxHQUFHLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7YUFDOUQ7aUJBQU07Z0JBQ0wsT0FBTyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7YUFDakM7U0FDRjthQUFNO1lBQ0wsT0FBTyxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7U0FDL0I7SUFDSCxDQUFDOzs7Ozs7SUFLRCxLQUFLLENBQUMsS0FBb0I7UUFDeEIsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNWLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLElBQUksRUFBRTtZQUM1QixJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLEtBQUssRUFBRTtnQkFDOUIsT0FBTyxJQUFJLENBQUMsR0FBRyxLQUFLLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDO2FBQzlEO2lCQUFNO2dCQUNMLE9BQU8sSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO2FBQ2pDO1NBQ0Y7YUFBTTtZQUNMLE9BQU8sSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1NBQy9CO0lBQ0gsQ0FBQztDQUNGOzs7Ozs7SUEzRUMsdUJBQWE7Ozs7O0lBS2Isd0JBQWM7Ozs7O0lBS2Qsc0JBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge05nYkRhdGVTdHJ1Y3R9IGZyb20gJy4vbmdiLWRhdGUtc3RydWN0JztcbmltcG9ydCB7aXNJbnRlZ2VyfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuXG4vKipcbiAqIEEgc2ltcGxlIGNsYXNzIHRoYXQgcmVwcmVzZW50cyBhIGRhdGUgdGhhdCBkYXRlcGlja2VyIGFsc28gdXNlcyBpbnRlcm5hbGx5LlxuICpcbiAqIEl0IGlzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYE5nYkRhdGVTdHJ1Y3RgIGludGVyZmFjZSB0aGF0IGFkZHMgc29tZSBjb252ZW5pZW5jZSBtZXRob2RzLFxuICogbGlrZSBgLmVxdWFscygpYCwgYC5iZWZvcmUoKWAsIGV0Yy5cbiAqXG4gKiBBbGwgZGF0ZXBpY2tlciBBUElzIGNvbnN1bWUgYE5nYkRhdGVTdHJ1Y3RgLCBidXQgcmV0dXJuIGBOZ2JEYXRlYC5cbiAqXG4gKiBJbiBtYW55IGNhc2VzIGl0IGlzIHNpbXBsZXIgdG8gbWFuaXB1bGF0ZSB0aGVzZSBvYmplY3RzIHRvZ2V0aGVyIHdpdGhcbiAqIFtgTmdiQ2FsZW5kYXJgXSgjL2NvbXBvbmVudHMvZGF0ZXBpY2tlci9hcGkjTmdiQ2FsZW5kYXIpIHRoYW4gbmF0aXZlIEpTIERhdGVzLlxuICpcbiAqIFNlZSB0aGUgW2RhdGUgZm9ybWF0IG92ZXJ2aWV3XSgjL2NvbXBvbmVudHMvZGF0ZXBpY2tlci9vdmVydmlldyNkYXRlLW1vZGVsKSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEBzaW5jZSAzLjAuMFxuICovXG5leHBvcnQgY2xhc3MgTmdiRGF0ZSBpbXBsZW1lbnRzIE5nYkRhdGVTdHJ1Y3Qge1xuICAvKipcbiAgICogVGhlIHllYXIsIGZvciBleGFtcGxlIDIwMTZcbiAgICovXG4gIHllYXI6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG1vbnRoLCBmb3IgZXhhbXBsZSAxPUphbiAuLi4gMTI9RGVjIGFzIGluIElTTyA4NjAxXG4gICAqL1xuICBtb250aDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgZGF5IG9mIG1vbnRoLCBzdGFydGluZyB3aXRoIDFcbiAgICovXG4gIGRheTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBICoqc3RhdGljIG1ldGhvZCoqIHRoYXQgY3JlYXRlcyBhIG5ldyBkYXRlIG9iamVjdCBmcm9tIHRoZSBgTmdiRGF0ZVN0cnVjdGAsXG4gICAqXG4gICAqIGV4LiBgTmdiRGF0ZS5mcm9tKHt5ZWFyOiAyMDAwLCBtb250aDogNSwgZGF5OiAxfSlgLlxuICAgKlxuICAgKiBJZiB0aGUgYGRhdGVgIGlzIGFscmVhZHkgb2YgYE5nYkRhdGVgIHR5cGUsIHRoZSBtZXRob2Qgd2lsbCByZXR1cm4gdGhlIHNhbWUgb2JqZWN0LlxuICAgKi9cbiAgc3RhdGljIGZyb20oZGF0ZTogTmdiRGF0ZVN0cnVjdCk6IE5nYkRhdGUge1xuICAgIGlmIChkYXRlIGluc3RhbmNlb2YgTmdiRGF0ZSkge1xuICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuICAgIHJldHVybiBkYXRlID8gbmV3IE5nYkRhdGUoZGF0ZS55ZWFyLCBkYXRlLm1vbnRoLCBkYXRlLmRheSkgOiBudWxsO1xuICB9XG5cbiAgY29uc3RydWN0b3IoeWVhcjogbnVtYmVyLCBtb250aDogbnVtYmVyLCBkYXk6IG51bWJlcikge1xuICAgIHRoaXMueWVhciA9IGlzSW50ZWdlcih5ZWFyKSA/IHllYXIgOiBudWxsO1xuICAgIHRoaXMubW9udGggPSBpc0ludGVnZXIobW9udGgpID8gbW9udGggOiBudWxsO1xuICAgIHRoaXMuZGF5ID0gaXNJbnRlZ2VyKGRheSkgPyBkYXkgOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgY3VycmVudCBkYXRlIGlzIGVxdWFsIHRvIGFub3RoZXIgZGF0ZS5cbiAgICovXG4gIGVxdWFscyhvdGhlcjogTmdiRGF0ZVN0cnVjdCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBvdGhlciAmJiB0aGlzLnllYXIgPT09IG90aGVyLnllYXIgJiYgdGhpcy5tb250aCA9PT0gb3RoZXIubW9udGggJiYgdGhpcy5kYXkgPT09IG90aGVyLmRheTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGN1cnJlbnQgZGF0ZSBpcyBiZWZvcmUgYW5vdGhlciBkYXRlLlxuICAgKi9cbiAgYmVmb3JlKG90aGVyOiBOZ2JEYXRlU3RydWN0KTogYm9vbGVhbiB7XG4gICAgaWYgKCFvdGhlcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnllYXIgPT09IG90aGVyLnllYXIpIHtcbiAgICAgIGlmICh0aGlzLm1vbnRoID09PSBvdGhlci5tb250aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXkgPT09IG90aGVyLmRheSA/IGZhbHNlIDogdGhpcy5kYXkgPCBvdGhlci5kYXk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5tb250aCA8IG90aGVyLm1vbnRoO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy55ZWFyIDwgb3RoZXIueWVhcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBjdXJyZW50IGRhdGUgaXMgYWZ0ZXIgYW5vdGhlciBkYXRlLlxuICAgKi9cbiAgYWZ0ZXIob3RoZXI6IE5nYkRhdGVTdHJ1Y3QpOiBib29sZWFuIHtcbiAgICBpZiAoIW90aGVyKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLnllYXIgPT09IG90aGVyLnllYXIpIHtcbiAgICAgIGlmICh0aGlzLm1vbnRoID09PSBvdGhlci5tb250aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXkgPT09IG90aGVyLmRheSA/IGZhbHNlIDogdGhpcy5kYXkgPiBvdGhlci5kYXk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5tb250aCA+IG90aGVyLm1vbnRoO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy55ZWFyID4gb3RoZXIueWVhcjtcbiAgICB9XG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/dropdown/dropdown-config.js b/dist/sunbird-ui-components/esm2015/dropdown/dropdown-config.js new file mode 100644 index 0000000..d59ef65 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/dropdown/dropdown-config.js @@ -0,0 +1,31 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Injectable } from '@angular/core'; +import * as i0 from "@angular/core"; +/** + * A configuration service for the [`NgbDropdown`](#/components/dropdown/api#NgbDropdown) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the dropdowns used in the application. + */ +export class NgbDropdownConfig { + constructor() { + this.autoClose = true; + this.placement = ['bottom-left', 'bottom-right', 'top-left', 'top-right']; + } +} +NgbDropdownConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } +]; +/** @nocollapse */ NgbDropdownConfig.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function NgbDropdownConfig_Factory() { return new NgbDropdownConfig(); }, token: NgbDropdownConfig, providedIn: "root" }); +if (false) { + /** @type {?} */ + NgbDropdownConfig.prototype.autoClose; + /** @type {?} */ + NgbDropdownConfig.prototype.placement; + /** @type {?} */ + NgbDropdownConfig.prototype.container; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24tY29uZmlnLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiZHJvcGRvd24vZHJvcGRvd24tY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQVV6QyxNQUFNLE9BQU8saUJBQWlCO0lBRDlCO1FBRUUsY0FBUyxHQUFtQyxJQUFJLENBQUM7UUFDakQsY0FBUyxHQUFtQixDQUFDLGFBQWEsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0tBRXRGOzs7WUFMQSxVQUFVLFNBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDOzs7OztJQUU5QixzQ0FBaUQ7O0lBQ2pELHNDQUFxRjs7SUFDckYsc0NBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7UGxhY2VtZW50QXJyYXl9IGZyb20gJy4uL3V0aWwvcG9zaXRpb25pbmcnO1xuXG4vKipcbiAqIEEgY29uZmlndXJhdGlvbiBzZXJ2aWNlIGZvciB0aGUgW2BOZ2JEcm9wZG93bmBdKCMvY29tcG9uZW50cy9kcm9wZG93bi9hcGkjTmdiRHJvcGRvd24pIGNvbXBvbmVudC5cbiAqXG4gKiBZb3UgY2FuIGluamVjdCB0aGlzIHNlcnZpY2UsIHR5cGljYWxseSBpbiB5b3VyIHJvb3QgY29tcG9uZW50LCBhbmQgY3VzdG9taXplIHRoZSB2YWx1ZXMgb2YgaXRzIHByb3BlcnRpZXMgaW5cbiAqIG9yZGVyIHRvIHByb3ZpZGUgZGVmYXVsdCB2YWx1ZXMgZm9yIGFsbCB0aGUgZHJvcGRvd25zIHVzZWQgaW4gdGhlIGFwcGxpY2F0aW9uLlxuICovXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBOZ2JEcm9wZG93bkNvbmZpZyB7XG4gIGF1dG9DbG9zZTogYm9vbGVhbiB8ICdvdXRzaWRlJyB8ICdpbnNpZGUnID0gdHJ1ZTtcbiAgcGxhY2VtZW50OiBQbGFjZW1lbnRBcnJheSA9IFsnYm90dG9tLWxlZnQnLCAnYm90dG9tLXJpZ2h0JywgJ3RvcC1sZWZ0JywgJ3RvcC1yaWdodCddO1xuICBjb250YWluZXI6IG51bGwgfCAnYm9keSc7XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/dropdown/dropdown.js b/dist/sunbird-ui-components/esm2015/dropdown/dropdown.js new file mode 100644 index 0000000..1f1f9a7 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/dropdown/dropdown.js @@ -0,0 +1,670 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { ChangeDetectorRef, ContentChild, ContentChildren, Directive, ElementRef, EventEmitter, forwardRef, Inject, Input, NgZone, Output, QueryList, Renderer2, Optional } from '@angular/core'; +import { DOCUMENT } from '@angular/common'; +import { Subject } from 'rxjs'; +import { take } from 'rxjs/operators'; +import { positionElements } from '../util/positioning'; +import { ngbAutoClose } from '../util/autoclose'; +import { Key } from '../util/key'; +import { NgbDropdownConfig } from './dropdown-config'; +export class NgbNavbar { +} +NgbNavbar.decorators = [ + { type: Directive, args: [{ selector: '.navbar' },] } +]; +/** + * A directive you should put put on a dropdown item to enable keyboard navigation. + * Arrow keys will move focus between items marked with this directive. + * + * \@since 4.1.0 + */ +export class NgbDropdownItem { + /** + * @param {?} elementRef + */ + constructor(elementRef) { + this.elementRef = elementRef; + this._disabled = false; + } + /** + * @param {?} value + * @return {?} + */ + set disabled(value) { + this._disabled = (/** @type {?} */ (value)) === '' || value === true; // accept an empty attribute as true + } + /** + * @return {?} + */ + get disabled() { return this._disabled; } +} +NgbDropdownItem.decorators = [ + { type: Directive, args: [{ selector: '[ngbDropdownItem]', host: { 'class': 'dropdown-item', '[class.disabled]': 'disabled' } },] } +]; +/** @nocollapse */ +NgbDropdownItem.ctorParameters = () => [ + { type: ElementRef } +]; +NgbDropdownItem.propDecorators = { + disabled: [{ type: Input }] +}; +if (false) { + /** + * @type {?} + * @private + */ + NgbDropdownItem.prototype._disabled; + /** @type {?} */ + NgbDropdownItem.prototype.elementRef; +} +/** + * A directive that wraps dropdown menu content and dropdown items. + */ +export class NgbDropdownMenu { + /** + * @param {?} dropdown + */ + constructor(dropdown) { + this.dropdown = dropdown; + this.placement = 'bottom'; + this.isOpen = false; + } +} +NgbDropdownMenu.decorators = [ + { type: Directive, args: [{ + selector: '[ngbDropdownMenu]', + host: { + '[class.dropdown-menu]': 'true', + '[class.show]': 'dropdown.isOpen()', + '[attr.x-placement]': 'placement', + '(keydown.ArrowUp)': 'dropdown.onKeyDown($event)', + '(keydown.ArrowDown)': 'dropdown.onKeyDown($event)', + '(keydown.Home)': 'dropdown.onKeyDown($event)', + '(keydown.End)': 'dropdown.onKeyDown($event)', + '(keydown.Enter)': 'dropdown.onKeyDown($event)', + '(keydown.Space)': 'dropdown.onKeyDown($event)' + } + },] } +]; +/** @nocollapse */ +NgbDropdownMenu.ctorParameters = () => [ + { type: undefined, decorators: [{ type: Inject, args: [forwardRef((/** + * @return {?} + */ + () => NgbDropdown)),] }] } +]; +NgbDropdownMenu.propDecorators = { + menuItems: [{ type: ContentChildren, args: [NgbDropdownItem,] }] +}; +if (false) { + /** @type {?} */ + NgbDropdownMenu.prototype.placement; + /** @type {?} */ + NgbDropdownMenu.prototype.isOpen; + /** @type {?} */ + NgbDropdownMenu.prototype.menuItems; + /** @type {?} */ + NgbDropdownMenu.prototype.dropdown; +} +/** + * A directive to mark an element to which dropdown menu will be anchored. + * + * This is a simple version of the `NgbDropdownToggle` directive. + * It plays the same role, but doesn't listen to click events to toggle dropdown menu thus enabling support + * for events other than click. + * + * \@since 1.1.0 + */ +export class NgbDropdownAnchor { + /** + * @param {?} dropdown + * @param {?} _elementRef + */ + constructor(dropdown, _elementRef) { + this.dropdown = dropdown; + this._elementRef = _elementRef; + this.anchorEl = _elementRef.nativeElement; + } + /** + * @return {?} + */ + getNativeElement() { return this._elementRef.nativeElement; } +} +NgbDropdownAnchor.decorators = [ + { type: Directive, args: [{ + selector: '[ngbDropdownAnchor]', + host: { 'class': 'dropdown-toggle', 'aria-haspopup': 'true', '[attr.aria-expanded]': 'dropdown.isOpen()' } + },] } +]; +/** @nocollapse */ +NgbDropdownAnchor.ctorParameters = () => [ + { type: undefined, decorators: [{ type: Inject, args: [forwardRef((/** + * @return {?} + */ + () => NgbDropdown)),] }] }, + { type: ElementRef } +]; +if (false) { + /** @type {?} */ + NgbDropdownAnchor.prototype.anchorEl; + /** @type {?} */ + NgbDropdownAnchor.prototype.dropdown; + /** + * @type {?} + * @private + */ + NgbDropdownAnchor.prototype._elementRef; +} +/** + * A directive to mark an element that will toggle dropdown via the `click` event. + * + * You can also use `NgbDropdownAnchor` as an alternative. + */ +export class NgbDropdownToggle extends NgbDropdownAnchor { + /** + * @param {?} dropdown + * @param {?} elementRef + */ + constructor(dropdown, elementRef) { + super(dropdown, elementRef); + } +} +NgbDropdownToggle.decorators = [ + { type: Directive, args: [{ + selector: '[ngbDropdownToggle]', + host: { + 'class': 'dropdown-toggle', + 'aria-haspopup': 'true', + '[attr.aria-expanded]': 'dropdown.isOpen()', + '(click)': 'dropdown.toggle()', + '(keydown.ArrowUp)': 'dropdown.onKeyDown($event)', + '(keydown.ArrowDown)': 'dropdown.onKeyDown($event)', + '(keydown.Home)': 'dropdown.onKeyDown($event)', + '(keydown.End)': 'dropdown.onKeyDown($event)' + }, + providers: [{ provide: NgbDropdownAnchor, useExisting: forwardRef((/** + * @return {?} + */ + () => NgbDropdownToggle)) }] + },] } +]; +/** @nocollapse */ +NgbDropdownToggle.ctorParameters = () => [ + { type: undefined, decorators: [{ type: Inject, args: [forwardRef((/** + * @return {?} + */ + () => NgbDropdown)),] }] }, + { type: ElementRef } +]; +/** + * A directive that provides contextual overlays for displaying lists of links and more. + */ +export class NgbDropdown { + /** + * @param {?} _changeDetector + * @param {?} config + * @param {?} _document + * @param {?} _ngZone + * @param {?} _elementRef + * @param {?} _renderer + * @param {?} ngbNavbar + */ + constructor(_changeDetector, config, _document, _ngZone, _elementRef, _renderer, ngbNavbar) { + this._changeDetector = _changeDetector; + this._document = _document; + this._ngZone = _ngZone; + this._elementRef = _elementRef; + this._renderer = _renderer; + this._closed$ = new Subject(); + /** + * Defines whether or not the dropdown menu is opened initially. + */ + this._open = false; + /** + * An event fired when the dropdown is opened or closed. + * + * The event payload is a `boolean`: + * * `true` - the dropdown was opened + * * `false` - the dropdown was closed + */ + this.openChange = new EventEmitter(); + this.placement = config.placement; + this.container = config.container; + this.autoClose = config.autoClose; + this.display = ngbNavbar ? 'static' : 'dynamic'; + this._zoneSubscription = _ngZone.onStable.subscribe((/** + * @return {?} + */ + () => { this._positionMenu(); })); + } + /** + * @return {?} + */ + ngAfterContentInit() { + this._ngZone.onStable.pipe(take(1)).subscribe((/** + * @return {?} + */ + () => { + this._applyPlacementClasses(); + if (this._open) { + this._setCloseHandlers(); + } + })); + } + /** + * @param {?} changes + * @return {?} + */ + ngOnChanges(changes) { + if (changes.container && this._open) { + this._applyContainer(this.container); + } + if (changes.placement && !changes.placement.isFirstChange) { + this._applyPlacementClasses(); + } + } + /** + * Checks if the dropdown menu is open. + * @return {?} + */ + isOpen() { return this._open; } + /** + * Opens the dropdown menu. + * @return {?} + */ + open() { + if (!this._open) { + this._open = true; + this._applyContainer(this.container); + this.openChange.emit(true); + this._setCloseHandlers(); + } + } + /** + * @private + * @return {?} + */ + _setCloseHandlers() { + /** @type {?} */ + const anchor = this._anchor; + ngbAutoClose(this._ngZone, this._document, this.autoClose, (/** + * @return {?} + */ + () => this.close()), this._closed$, this._menu ? [this._menuElement.nativeElement] : [], anchor ? [anchor.getNativeElement()] : [], '.dropdown-item,.dropdown-divider'); + } + /** + * Closes the dropdown menu. + * @return {?} + */ + close() { + if (this._open) { + this._open = false; + this._resetContainer(); + this._closed$.next(); + this.openChange.emit(false); + this._changeDetector.markForCheck(); + } + } + /** + * Toggles the dropdown menu. + * @return {?} + */ + toggle() { + if (this.isOpen()) { + this.close(); + } + else { + this.open(); + } + } + /** + * @return {?} + */ + ngOnDestroy() { + this._resetContainer(); + this._closed$.next(); + this._zoneSubscription.unsubscribe(); + } + /** + * @param {?} event + * @return {?} + */ + onKeyDown(event) { + // tslint:disable-next-line:deprecation + /** @type {?} */ + const key = event.which; + /** @type {?} */ + const itemElements = this._getMenuElements(); + /** @type {?} */ + let position = -1; + /** @type {?} */ + let isEventFromItems = false; + /** @type {?} */ + const isEventFromToggle = this._isEventFromToggle(event); + if (!isEventFromToggle && itemElements.length) { + itemElements.forEach((/** + * @param {?} itemElement + * @param {?} index + * @return {?} + */ + (itemElement, index) => { + if (itemElement.contains((/** @type {?} */ (event.target)))) { + isEventFromItems = true; + } + if (itemElement === this._document.activeElement) { + position = index; + } + })); + } + // closing on Enter / Space + if (key === Key.Space || key === Key.Enter) { + if (isEventFromItems && (this.autoClose === true || this.autoClose === 'inside')) { + this.close(); + } + return; + } + // opening / navigating + if (isEventFromToggle || isEventFromItems) { + this.open(); + if (itemElements.length) { + switch (key) { + case Key.ArrowDown: + position = Math.min(position + 1, itemElements.length - 1); + break; + case Key.ArrowUp: + if (this._isDropup() && position === -1) { + position = itemElements.length - 1; + break; + } + position = Math.max(position - 1, 0); + break; + case Key.Home: + position = 0; + break; + case Key.End: + position = itemElements.length - 1; + break; + } + itemElements[position].focus(); + } + event.preventDefault(); + } + } + /** + * @private + * @return {?} + */ + _isDropup() { return this._elementRef.nativeElement.classList.contains('dropup'); } + /** + * @private + * @param {?} event + * @return {?} + */ + _isEventFromToggle(event) { + return this._anchor.getNativeElement().contains((/** @type {?} */ (event.target))); + } + /** + * @private + * @return {?} + */ + _getMenuElements() { + /** @type {?} */ + const menu = this._menu; + if (menu == null) { + return []; + } + return menu.menuItems.filter((/** + * @param {?} item + * @return {?} + */ + item => !item.disabled)).map((/** + * @param {?} item + * @return {?} + */ + item => item.elementRef.nativeElement)); + } + /** + * @private + * @return {?} + */ + _positionMenu() { + /** @type {?} */ + const menu = this._menu; + if (this.isOpen() && menu) { + this._applyPlacementClasses(this.display === 'dynamic' ? + positionElements(this._anchor.anchorEl, this._bodyContainer || this._menuElement.nativeElement, this.placement, this.container === 'body') : + this._getFirstPlacement(this.placement)); + } + } + /** + * @private + * @param {?} placement + * @return {?} + */ + _getFirstPlacement(placement) { + return Array.isArray(placement) ? placement[0] : (/** @type {?} */ (placement.split(' ')[0])); + } + /** + * @private + * @return {?} + */ + _resetContainer() { + /** @type {?} */ + const renderer = this._renderer; + /** @type {?} */ + const menuElement = this._menuElement; + if (menuElement) { + /** @type {?} */ + const dropdownElement = this._elementRef.nativeElement; + /** @type {?} */ + const dropdownMenuElement = menuElement.nativeElement; + renderer.appendChild(dropdownElement, dropdownMenuElement); + renderer.removeStyle(dropdownMenuElement, 'position'); + renderer.removeStyle(dropdownMenuElement, 'transform'); + } + if (this._bodyContainer) { + renderer.removeChild(this._document.body, this._bodyContainer); + this._bodyContainer = null; + } + } + /** + * @private + * @param {?=} container + * @return {?} + */ + _applyContainer(container = null) { + this._resetContainer(); + if (container === 'body') { + /** @type {?} */ + const renderer = this._renderer; + /** @type {?} */ + const dropdownMenuElement = this._menuElement.nativeElement; + /** @type {?} */ + const bodyContainer = this._bodyContainer = this._bodyContainer || renderer.createElement('div'); + // Override some styles to have the positionning working + renderer.setStyle(bodyContainer, 'position', 'absolute'); + renderer.setStyle(dropdownMenuElement, 'position', 'static'); + renderer.setStyle(bodyContainer, 'z-index', '1050'); + renderer.appendChild(bodyContainer, dropdownMenuElement); + renderer.appendChild(this._document.body, bodyContainer); + } + } + /** + * @private + * @param {?=} placement + * @return {?} + */ + _applyPlacementClasses(placement) { + /** @type {?} */ + const menu = this._menu; + if (menu) { + if (!placement) { + placement = this._getFirstPlacement(this.placement); + } + /** @type {?} */ + const renderer = this._renderer; + /** @type {?} */ + const dropdownElement = this._elementRef.nativeElement; + // remove the current placement classes + renderer.removeClass(dropdownElement, 'dropup'); + renderer.removeClass(dropdownElement, 'dropdown'); + menu.placement = this.display === 'static' ? null : placement; + /* + * apply the new placement + * in case of top use up-arrow or down-arrow otherwise + */ + /** @type {?} */ + const dropdownClass = placement.search('^top') !== -1 ? 'dropup' : 'dropdown'; + renderer.addClass(dropdownElement, dropdownClass); + /** @type {?} */ + const bodyContainer = this._bodyContainer; + if (bodyContainer) { + renderer.removeClass(bodyContainer, 'dropup'); + renderer.removeClass(bodyContainer, 'dropdown'); + renderer.addClass(bodyContainer, dropdownClass); + } + } + } +} +NgbDropdown.decorators = [ + { type: Directive, args: [{ selector: '[ngbDropdown]', exportAs: 'ngbDropdown', host: { '[class.show]': 'isOpen()' } },] } +]; +/** @nocollapse */ +NgbDropdown.ctorParameters = () => [ + { type: ChangeDetectorRef }, + { type: NgbDropdownConfig }, + { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }, + { type: NgZone }, + { type: ElementRef }, + { type: Renderer2 }, + { type: NgbNavbar, decorators: [{ type: Optional }] } +]; +NgbDropdown.propDecorators = { + _menu: [{ type: ContentChild, args: [NgbDropdownMenu, { static: false },] }], + _menuElement: [{ type: ContentChild, args: [NgbDropdownMenu, { read: ElementRef, static: false },] }], + _anchor: [{ type: ContentChild, args: [NgbDropdownAnchor, { static: false },] }], + autoClose: [{ type: Input }], + _open: [{ type: Input, args: ['open',] }], + placement: [{ type: Input }], + container: [{ type: Input }], + display: [{ type: Input }], + openChange: [{ type: Output }] +}; +if (false) { + /** + * @type {?} + * @private + */ + NgbDropdown.prototype._closed$; + /** + * @type {?} + * @private + */ + NgbDropdown.prototype._zoneSubscription; + /** + * @type {?} + * @private + */ + NgbDropdown.prototype._bodyContainer; + /** + * @type {?} + * @private + */ + NgbDropdown.prototype._menu; + /** + * @type {?} + * @private + */ + NgbDropdown.prototype._menuElement; + /** + * @type {?} + * @private + */ + NgbDropdown.prototype._anchor; + /** + * Indicates whether the dropdown should be closed when clicking one of dropdown items or pressing ESC. + * + * * `true` - the dropdown will close on both outside and inside (menu) clicks. + * * `false` - the dropdown can only be closed manually via `close()` or `toggle()` methods. + * * `"inside"` - the dropdown will close on inside menu clicks, but not outside clicks. + * * `"outside"` - the dropdown will close only on the outside clicks and not on menu clicks. + * @type {?} + */ + NgbDropdown.prototype.autoClose; + /** + * Defines whether or not the dropdown menu is opened initially. + * @type {?} + */ + NgbDropdown.prototype._open; + /** + * The preferred placement of the dropdown. + * + * Possible values are `"top"`, `"top-left"`, `"top-right"`, `"bottom"`, `"bottom-left"`, + * `"bottom-right"`, `"left"`, `"left-top"`, `"left-bottom"`, `"right"`, `"right-top"`, + * `"right-bottom"` + * + * Accepts an array of strings or a string with space separated possible values. + * + * The default order of preference is `"bottom-left bottom-right top-left top-right"` + * + * Please see the [positioning overview](#/positioning) for more details. + * @type {?} + */ + NgbDropdown.prototype.placement; + /** + * A selector specifying the element the dropdown should be appended to. + * Currently only supports "body". + * + * \@since 4.1.0 + * @type {?} + */ + NgbDropdown.prototype.container; + /** + * Enable or disable the dynamic positioning. The default value is dynamic unless the dropdown is used + * inside a Bootstrap navbar. If you need custom placement for a dropdown in a navbar, set it to + * dynamic explicitly. See the [positioning of dropdown](#/positioning#dropdown) + * and the [navbar demo](/#/components/dropdown/examples#navbar) for more details. + * + * \@since 4.2.0 + * @type {?} + */ + NgbDropdown.prototype.display; + /** + * An event fired when the dropdown is opened or closed. + * + * The event payload is a `boolean`: + * * `true` - the dropdown was opened + * * `false` - the dropdown was closed + * @type {?} + */ + NgbDropdown.prototype.openChange; + /** + * @type {?} + * @private + */ + NgbDropdown.prototype._changeDetector; + /** + * @type {?} + * @private + */ + NgbDropdown.prototype._document; + /** + * @type {?} + * @private + */ + NgbDropdown.prototype._ngZone; + /** + * @type {?} + * @private + */ + NgbDropdown.prototype._elementRef; + /** + * @type {?} + * @private + */ + NgbDropdown.prototype._renderer; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJkcm9wZG93bi9kcm9wZG93bi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixZQUFZLEVBQ1osZUFBZSxFQUNmLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFHTixNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsRUFFVCxRQUFRLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBQyxPQUFPLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXBDLE9BQU8sRUFBNEIsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDL0MsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUVoQyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUdwRCxNQUFNLE9BQU8sU0FBUzs7O1lBRHJCLFNBQVMsU0FBQyxFQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUM7Ozs7Ozs7O0FBV2hDLE1BQU0sT0FBTyxlQUFlOzs7O0lBVTFCLFlBQW1CLFVBQW1DO1FBQW5DLGVBQVUsR0FBVixVQUFVLENBQXlCO1FBVDlDLGNBQVMsR0FBRyxLQUFLLENBQUM7SUFTK0IsQ0FBQzs7Ozs7SUFQMUQsSUFDSSxRQUFRLENBQUMsS0FBYztRQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLG1CQUFLLEtBQUssRUFBQSxLQUFLLEVBQUUsSUFBSSxLQUFLLEtBQUss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QVU7WUFVVixTQUFTO1lBeUxrQixTQUFTLHVCQUEvQixRQUFROzs7b0JBaEVaLFlBQVksU0FBQyxlQUFlLEVBQUUsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFDOzJCQUM3QyxZQUFZLFNBQUMsZUFBZSxFQUFFLEVBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDO3NCQUMvRCxZQUFZLFNBQUMsaUJBQWlCLEVBQUUsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFDO3dCQVUvQyxLQUFLO29CQUtMLEtBQUssU0FBQyxNQUFNO3dCQWVaLEtBQUs7d0JBUUwsS0FBSztzQkFVTCxLQUFLO3lCQVNMLE1BQU07Ozs7Ozs7SUEvRFAsK0JBQXVDOzs7OztJQUN2Qyx3Q0FBd0M7Ozs7O0lBQ3hDLHFDQUFvQzs7Ozs7SUFFcEMsNEJBQStFOzs7OztJQUMvRSxtQ0FBbUc7Ozs7O0lBQ25HLDhCQUFxRjs7Ozs7Ozs7OztJQVVyRixnQ0FBbUQ7Ozs7O0lBS25ELDRCQUE2Qjs7Ozs7Ozs7Ozs7Ozs7O0lBZTdCLGdDQUFtQzs7Ozs7Ozs7SUFRbkMsZ0NBQWtDOzs7Ozs7Ozs7O0lBVWxDLDhCQUF1Qzs7Ozs7Ozs7O0lBU3ZDLGlDQUFtRDs7Ozs7SUFHL0Msc0NBQTBDOzs7OztJQUE2QixnQ0FBd0M7Ozs7O0lBQy9HLDhCQUF1Qjs7Ozs7SUFBRSxrQ0FBNEM7Ozs7O0lBQUUsZ0NBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbnRlbnRDaGlsZCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBBZnRlckNvbnRlbnRJbml0LFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBSZW5kZXJlcjIsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIE9wdGlvbmFsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtET0NVTUVOVH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7U3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7dGFrZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge1BsYWNlbWVudCwgUGxhY2VtZW50QXJyYXksIHBvc2l0aW9uRWxlbWVudHN9IGZyb20gJy4uL3V0aWwvcG9zaXRpb25pbmcnO1xuaW1wb3J0IHtuZ2JBdXRvQ2xvc2V9IGZyb20gJy4uL3V0aWwvYXV0b2Nsb3NlJztcbmltcG9ydCB7S2V5fSBmcm9tICcuLi91dGlsL2tleSc7XG5cbmltcG9ydCB7TmdiRHJvcGRvd25Db25maWd9IGZyb20gJy4vZHJvcGRvd24tY29uZmlnJztcblxuQERpcmVjdGl2ZSh7c2VsZWN0b3I6ICcubmF2YmFyJ30pXG5leHBvcnQgY2xhc3MgTmdiTmF2YmFyIHtcbn1cblxuLyoqXG4gKiBBIGRpcmVjdGl2ZSB5b3Ugc2hvdWxkIHB1dCBwdXQgb24gYSBkcm9wZG93biBpdGVtIHRvIGVuYWJsZSBrZXlib2FyZCBuYXZpZ2F0aW9uLlxuICogQXJyb3cga2V5cyB3aWxsIG1vdmUgZm9jdXMgYmV0d2VlbiBpdGVtcyBtYXJrZWQgd2l0aCB0aGlzIGRpcmVjdGl2ZS5cbiAqXG4gKiBAc2luY2UgNC4xLjBcbiAqL1xuQERpcmVjdGl2ZSh7c2VsZWN0b3I6ICdbbmdiRHJvcGRvd25JdGVtXScsIGhvc3Q6IHsnY2xhc3MnOiAnZHJvcGRvd24taXRlbScsICdbY2xhc3MuZGlzYWJsZWRdJzogJ2Rpc2FibGVkJ319KVxuZXhwb3J0IGNsYXNzIE5nYkRyb3Bkb3duSXRlbSB7XG4gIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSA8YW55PnZhbHVlID09PSAnJyB8fCB2YWx1ZSA9PT0gdHJ1ZTsgIC8vIGFjY2VwdCBhbiBlbXB0eSBhdHRyaWJ1dGUgYXMgdHJ1ZVxuICB9XG5cbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7IH1cblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pIHt9XG59XG5cbi8qKlxuICogQSBkaXJlY3RpdmUgdGhhdCB3cmFwcyBkcm9wZG93biBtZW51IGNvbnRlbnQgYW5kIGRyb3Bkb3duIGl0ZW1zLlxuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbbmdiRHJvcGRvd25NZW51XScsXG4gIGhvc3Q6IHtcbiAgICAnW2NsYXNzLmRyb3Bkb3duLW1lbnVdJzogJ3RydWUnLFxuICAgICdbY2xhc3Muc2hvd10nOiAnZHJvcGRvd24uaXNPcGVuKCknLFxuICAgICdbYXR0ci54LXBsYWNlbWVudF0nOiAncGxhY2VtZW50JyxcbiAgICAnKGtleWRvd24uQXJyb3dVcCknOiAnZHJvcGRvd24ub25LZXlEb3duKCRldmVudCknLFxuICAgICcoa2V5ZG93bi5BcnJvd0Rvd24pJzogJ2Ryb3Bkb3duLm9uS2V5RG93bigkZXZlbnQpJyxcbiAgICAnKGtleWRvd24uSG9tZSknOiAnZHJvcGRvd24ub25LZXlEb3duKCRldmVudCknLFxuICAgICcoa2V5ZG93bi5FbmQpJzogJ2Ryb3Bkb3duLm9uS2V5RG93bigkZXZlbnQpJyxcbiAgICAnKGtleWRvd24uRW50ZXIpJzogJ2Ryb3Bkb3duLm9uS2V5RG93bigkZXZlbnQpJyxcbiAgICAnKGtleWRvd24uU3BhY2UpJzogJ2Ryb3Bkb3duLm9uS2V5RG93bigkZXZlbnQpJ1xuICB9XG59KVxuZXhwb3J0IGNsYXNzIE5nYkRyb3Bkb3duTWVudSB7XG4gIHBsYWNlbWVudDogUGxhY2VtZW50ID0gJ2JvdHRvbSc7XG4gIGlzT3BlbiA9IGZhbHNlO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oTmdiRHJvcGRvd25JdGVtKSBtZW51SXRlbXM6IFF1ZXJ5TGlzdDxOZ2JEcm9wZG93bkl0ZW0+O1xuXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoZm9yd2FyZFJlZigoKSA9PiBOZ2JEcm9wZG93bikpIHB1YmxpYyBkcm9wZG93bikge31cbn1cblxuLyoqXG4gKiBBIGRpcmVjdGl2ZSB0byBtYXJrIGFuIGVsZW1lbnQgdG8gd2hpY2ggZHJvcGRvd24gbWVudSB3aWxsIGJlIGFuY2hvcmVkLlxuICpcbiAqIFRoaXMgaXMgYSBzaW1wbGUgdmVyc2lvbiBvZiB0aGUgYE5nYkRyb3Bkb3duVG9nZ2xlYCBkaXJlY3RpdmUuXG4gKiBJdCBwbGF5cyB0aGUgc2FtZSByb2xlLCBidXQgZG9lc24ndCBsaXN0ZW4gdG8gY2xpY2sgZXZlbnRzIHRvIHRvZ2dsZSBkcm9wZG93biBtZW51IHRodXMgZW5hYmxpbmcgc3VwcG9ydFxuICogZm9yIGV2ZW50cyBvdGhlciB0aGFuIGNsaWNrLlxuICpcbiAqIEBzaW5jZSAxLjEuMFxuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbbmdiRHJvcGRvd25BbmNob3JdJyxcbiAgaG9zdDogeydjbGFzcyc6ICdkcm9wZG93bi10b2dnbGUnLCAnYXJpYS1oYXNwb3B1cCc6ICd0cnVlJywgJ1thdHRyLmFyaWEtZXhwYW5kZWRdJzogJ2Ryb3Bkb3duLmlzT3BlbigpJ31cbn0pXG5leHBvcnQgY2xhc3MgTmdiRHJvcGRvd25BbmNob3Ige1xuICBhbmNob3JFbDtcblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KGZvcndhcmRSZWYoKCkgPT4gTmdiRHJvcGRvd24pKSBwdWJsaWMgZHJvcGRvd24sIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KSB7XG4gICAgdGhpcy5hbmNob3JFbCA9IF9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICBnZXROYXRpdmVFbGVtZW50KCkgeyByZXR1cm4gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50OyB9XG59XG5cbi8qKlxuICogQSBkaXJlY3RpdmUgdG8gbWFyayBhbiBlbGVtZW50IHRoYXQgd2lsbCB0b2dnbGUgZHJvcGRvd24gdmlhIHRoZSBgY2xpY2tgIGV2ZW50LlxuICpcbiAqIFlvdSBjYW4gYWxzbyB1c2UgYE5nYkRyb3Bkb3duQW5jaG9yYCBhcyBhbiBhbHRlcm5hdGl2ZS5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW25nYkRyb3Bkb3duVG9nZ2xlXScsXG4gIGhvc3Q6IHtcbiAgICAnY2xhc3MnOiAnZHJvcGRvd24tdG9nZ2xlJyxcbiAgICAnYXJpYS1oYXNwb3B1cCc6ICd0cnVlJyxcbiAgICAnW2F0dHIuYXJpYS1leHBhbmRlZF0nOiAnZHJvcGRvd24uaXNPcGVuKCknLFxuICAgICcoY2xpY2spJzogJ2Ryb3Bkb3duLnRvZ2dsZSgpJyxcbiAgICAnKGtleWRvd24uQXJyb3dVcCknOiAnZHJvcGRvd24ub25LZXlEb3duKCRldmVudCknLFxuICAgICcoa2V5ZG93bi5BcnJvd0Rvd24pJzogJ2Ryb3Bkb3duLm9uS2V5RG93bigkZXZlbnQpJyxcbiAgICAnKGtleWRvd24uSG9tZSknOiAnZHJvcGRvd24ub25LZXlEb3duKCRldmVudCknLFxuICAgICcoa2V5ZG93bi5FbmQpJzogJ2Ryb3Bkb3duLm9uS2V5RG93bigkZXZlbnQpJ1xuICB9LFxuICBwcm92aWRlcnM6IFt7cHJvdmlkZTogTmdiRHJvcGRvd25BbmNob3IsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE5nYkRyb3Bkb3duVG9nZ2xlKX1dXG59KVxuZXhwb3J0IGNsYXNzIE5nYkRyb3Bkb3duVG9nZ2xlIGV4dGVuZHMgTmdiRHJvcGRvd25BbmNob3Ige1xuICBjb25zdHJ1Y3RvcihASW5qZWN0KGZvcndhcmRSZWYoKCkgPT4gTmdiRHJvcGRvd24pKSBkcm9wZG93biwgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pIHtcbiAgICBzdXBlcihkcm9wZG93biwgZWxlbWVudFJlZik7XG4gIH1cbn1cblxuLyoqXG4gKiBBIGRpcmVjdGl2ZSB0aGF0IHByb3ZpZGVzIGNvbnRleHR1YWwgb3ZlcmxheXMgZm9yIGRpc3BsYXlpbmcgbGlzdHMgb2YgbGlua3MgYW5kIG1vcmUuXG4gKi9cbkBEaXJlY3RpdmUoe3NlbGVjdG9yOiAnW25nYkRyb3Bkb3duXScsIGV4cG9ydEFzOiAnbmdiRHJvcGRvd24nLCBob3N0OiB7J1tjbGFzcy5zaG93XSc6ICdpc09wZW4oKSd9fSlcbmV4cG9ydCBjbGFzcyBOZ2JEcm9wZG93biBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgX2Nsb3NlZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIF96b25lU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgX2JvZHlDb250YWluZXI6IEhUTUxFbGVtZW50O1xuXG4gIEBDb250ZW50Q2hpbGQoTmdiRHJvcGRvd25NZW51LCB7c3RhdGljOiBmYWxzZX0pIHByaXZhdGUgX21lbnU6IE5nYkRyb3Bkb3duTWVudTtcbiAgQENvbnRlbnRDaGlsZChOZ2JEcm9wZG93bk1lbnUsIHtyZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IGZhbHNlfSkgcHJpdmF0ZSBfbWVudUVsZW1lbnQ6IEVsZW1lbnRSZWY7XG4gIEBDb250ZW50Q2hpbGQoTmdiRHJvcGRvd25BbmNob3IsIHtzdGF0aWM6IGZhbHNlfSkgcHJpdmF0ZSBfYW5jaG9yOiBOZ2JEcm9wZG93bkFuY2hvcjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGRyb3Bkb3duIHNob3VsZCBiZSBjbG9zZWQgd2hlbiBjbGlja2luZyBvbmUgb2YgZHJvcGRvd24gaXRlbXMgb3IgcHJlc3NpbmcgRVNDLlxuICAgKlxuICAgKiAqIGB0cnVlYCAtIHRoZSBkcm9wZG93biB3aWxsIGNsb3NlIG9uIGJvdGggb3V0c2lkZSBhbmQgaW5zaWRlIChtZW51KSBjbGlja3MuXG4gICAqICogYGZhbHNlYCAtIHRoZSBkcm9wZG93biBjYW4gb25seSBiZSBjbG9zZWQgbWFudWFsbHkgdmlhIGBjbG9zZSgpYCBvciBgdG9nZ2xlKClgIG1ldGhvZHMuXG4gICAqICogYFwiaW5zaWRlXCJgIC0gdGhlIGRyb3Bkb3duIHdpbGwgY2xvc2Ugb24gaW5zaWRlIG1lbnUgY2xpY2tzLCBidXQgbm90IG91dHNpZGUgY2xpY2tzLlxuICAgKiAqIGBcIm91dHNpZGVcImAgLSB0aGUgZHJvcGRvd24gd2lsbCBjbG9zZSBvbmx5IG9uIHRoZSBvdXRzaWRlIGNsaWNrcyBhbmQgbm90IG9uIG1lbnUgY2xpY2tzLlxuICAgKi9cbiAgQElucHV0KCkgYXV0b0Nsb3NlOiBib29sZWFuIHwgJ291dHNpZGUnIHwgJ2luc2lkZSc7XG5cbiAgLyoqXG4gICAqIERlZmluZXMgd2hldGhlciBvciBub3QgdGhlIGRyb3Bkb3duIG1lbnUgaXMgb3BlbmVkIGluaXRpYWxseS5cbiAgICovXG4gIEBJbnB1dCgnb3BlbicpIF9vcGVuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFRoZSBwcmVmZXJyZWQgcGxhY2VtZW50IG9mIHRoZSBkcm9wZG93bi5cbiAgICpcbiAgICogUG9zc2libGUgdmFsdWVzIGFyZSBgXCJ0b3BcImAsIGBcInRvcC1sZWZ0XCJgLCBgXCJ0b3AtcmlnaHRcImAsIGBcImJvdHRvbVwiYCwgYFwiYm90dG9tLWxlZnRcImAsXG4gICAqIGBcImJvdHRvbS1yaWdodFwiYCwgYFwibGVmdFwiYCwgYFwibGVmdC10b3BcImAsIGBcImxlZnQtYm90dG9tXCJgLCBgXCJyaWdodFwiYCwgYFwicmlnaHQtdG9wXCJgLFxuICAgKiBgXCJyaWdodC1ib3R0b21cImBcbiAgICpcbiAgICogQWNjZXB0cyBhbiBhcnJheSBvZiBzdHJpbmdzIG9yIGEgc3RyaW5nIHdpdGggc3BhY2Ugc2VwYXJhdGVkIHBvc3NpYmxlIHZhbHVlcy5cbiAgICpcbiAgICogVGhlIGRlZmF1bHQgb3JkZXIgb2YgcHJlZmVyZW5jZSBpcyBgXCJib3R0b20tbGVmdCBib3R0b20tcmlnaHQgdG9wLWxlZnQgdG9wLXJpZ2h0XCJgXG4gICAqXG4gICAqIFBsZWFzZSBzZWUgdGhlIFtwb3NpdGlvbmluZyBvdmVydmlld10oIy9wb3NpdGlvbmluZykgZm9yIG1vcmUgZGV0YWlscy5cbiAgICovXG4gIEBJbnB1dCgpIHBsYWNlbWVudDogUGxhY2VtZW50QXJyYXk7XG5cbiAgLyoqXG4gICogQSBzZWxlY3RvciBzcGVjaWZ5aW5nIHRoZSBlbGVtZW50IHRoZSBkcm9wZG93biBzaG91bGQgYmUgYXBwZW5kZWQgdG8uXG4gICogQ3VycmVudGx5IG9ubHkgc3VwcG9ydHMgXCJib2R5XCIuXG4gICpcbiAgKiBAc2luY2UgNC4xLjBcbiAgKi9cbiAgQElucHV0KCkgY29udGFpbmVyOiBudWxsIHwgJ2JvZHknO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgb3IgZGlzYWJsZSB0aGUgZHluYW1pYyBwb3NpdGlvbmluZy4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgZHluYW1pYyB1bmxlc3MgdGhlIGRyb3Bkb3duIGlzIHVzZWRcbiAgICogaW5zaWRlIGEgQm9vdHN0cmFwIG5hdmJhci4gSWYgeW91IG5lZWQgY3VzdG9tIHBsYWNlbWVudCBmb3IgYSBkcm9wZG93biBpbiBhIG5hdmJhciwgc2V0IGl0IHRvXG4gICAqIGR5bmFtaWMgZXhwbGljaXRseS4gU2VlIHRoZSBbcG9zaXRpb25pbmcgb2YgZHJvcGRvd25dKCMvcG9zaXRpb25pbmcjZHJvcGRvd24pXG4gICAqIGFuZCB0aGUgW25hdmJhciBkZW1vXSgvIy9jb21wb25lbnRzL2Ryb3Bkb3duL2V4YW1wbGVzI25hdmJhcikgZm9yIG1vcmUgZGV0YWlscy5cbiAgICpcbiAgICogQHNpbmNlIDQuMi4wXG4gICAqL1xuICBASW5wdXQoKSBkaXNwbGF5OiAnZHluYW1pYycgfCAnc3RhdGljJztcblxuICAvKipcbiAgICogQW4gZXZlbnQgZmlyZWQgd2hlbiB0aGUgZHJvcGRvd24gaXMgb3BlbmVkIG9yIGNsb3NlZC5cbiAgICpcbiAgICogVGhlIGV2ZW50IHBheWxvYWQgaXMgYSBgYm9vbGVhbmA6XG4gICAqICogYHRydWVgIC0gdGhlIGRyb3Bkb3duIHdhcyBvcGVuZWRcbiAgICogKiBgZmFsc2VgIC0gdGhlIGRyb3Bkb3duIHdhcyBjbG9zZWRcbiAgICovXG4gIEBPdXRwdXQoKSBvcGVuQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLCBjb25maWc6IE5nYkRyb3Bkb3duQ29uZmlnLCBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIF9kb2N1bWVudDogYW55LFxuICAgICAgcHJpdmF0ZSBfbmdab25lOiBOZ1pvbmUsIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LCBwcml2YXRlIF9yZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgQE9wdGlvbmFsKCkgbmdiTmF2YmFyOiBOZ2JOYXZiYXIpIHtcbiAgICB0aGlzLnBsYWNlbWVudCA9IGNvbmZpZy5wbGFjZW1lbnQ7XG4gICAgdGhpcy5jb250YWluZXIgPSBjb25maWcuY29udGFpbmVyO1xuICAgIHRoaXMuYXV0b0Nsb3NlID0gY29uZmlnLmF1dG9DbG9zZTtcblxuICAgIHRoaXMuZGlzcGxheSA9IG5nYk5hdmJhciA/ICdzdGF0aWMnIDogJ2R5bmFtaWMnO1xuXG4gICAgdGhpcy5fem9uZVN1YnNjcmlwdGlvbiA9IF9uZ1pvbmUub25TdGFibGUuc3Vic2NyaWJlKCgpID0+IHsgdGhpcy5fcG9zaXRpb25NZW51KCk7IH0pO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIHRoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLl9hcHBseVBsYWNlbWVudENsYXNzZXMoKTtcbiAgICAgIGlmICh0aGlzLl9vcGVuKSB7XG4gICAgICAgIHRoaXMuX3NldENsb3NlSGFuZGxlcnMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlcy5jb250YWluZXIgJiYgdGhpcy5fb3Blbikge1xuICAgICAgdGhpcy5fYXBwbHlDb250YWluZXIodGhpcy5jb250YWluZXIpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzLnBsYWNlbWVudCAmJiAhY2hhbmdlcy5wbGFjZW1lbnQuaXNGaXJzdENoYW5nZSkge1xuICAgICAgdGhpcy5fYXBwbHlQbGFjZW1lbnRDbGFzc2VzKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgZHJvcGRvd24gbWVudSBpcyBvcGVuLlxuICAgKi9cbiAgaXNPcGVuKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fb3BlbjsgfVxuXG4gIC8qKlxuICAgKiBPcGVucyB0aGUgZHJvcGRvd24gbWVudS5cbiAgICovXG4gIG9wZW4oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9vcGVuKSB7XG4gICAgICB0aGlzLl9vcGVuID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2FwcGx5Q29udGFpbmVyKHRoaXMuY29udGFpbmVyKTtcbiAgICAgIHRoaXMub3BlbkNoYW5nZS5lbWl0KHRydWUpO1xuICAgICAgdGhpcy5fc2V0Q2xvc2VIYW5kbGVycygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3NldENsb3NlSGFuZGxlcnMoKSB7XG4gICAgY29uc3QgYW5jaG9yID0gdGhpcy5fYW5jaG9yO1xuICAgIG5nYkF1dG9DbG9zZShcbiAgICAgICAgdGhpcy5fbmdab25lLCB0aGlzLl9kb2N1bWVudCwgdGhpcy5hdXRvQ2xvc2UsICgpID0+IHRoaXMuY2xvc2UoKSwgdGhpcy5fY2xvc2VkJCxcbiAgICAgICAgdGhpcy5fbWVudSA/IFt0aGlzLl9tZW51RWxlbWVudC5uYXRpdmVFbGVtZW50XSA6IFtdLCBhbmNob3IgPyBbYW5jaG9yLmdldE5hdGl2ZUVsZW1lbnQoKV0gOiBbXSxcbiAgICAgICAgJy5kcm9wZG93bi1pdGVtLC5kcm9wZG93bi1kaXZpZGVyJyk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2VzIHRoZSBkcm9wZG93biBtZW51LlxuICAgKi9cbiAgY2xvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX29wZW4pIHtcbiAgICAgIHRoaXMuX29wZW4gPSBmYWxzZTtcbiAgICAgIHRoaXMuX3Jlc2V0Q29udGFpbmVyKCk7XG4gICAgICB0aGlzLl9jbG9zZWQkLm5leHQoKTtcbiAgICAgIHRoaXMub3BlbkNoYW5nZS5lbWl0KGZhbHNlKTtcbiAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIHRoZSBkcm9wZG93biBtZW51LlxuICAgKi9cbiAgdG9nZ2xlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzT3BlbigpKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3BlbigpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX3Jlc2V0Q29udGFpbmVyKCk7XG5cbiAgICB0aGlzLl9jbG9zZWQkLm5leHQoKTtcbiAgICB0aGlzLl96b25lU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6ZGVwcmVjYXRpb25cbiAgICBjb25zdCBrZXkgPSBldmVudC53aGljaDtcbiAgICBjb25zdCBpdGVtRWxlbWVudHMgPSB0aGlzLl9nZXRNZW51RWxlbWVudHMoKTtcblxuICAgIGxldCBwb3NpdGlvbiA9IC0xO1xuICAgIGxldCBpc0V2ZW50RnJvbUl0ZW1zID0gZmFsc2U7XG4gICAgY29uc3QgaXNFdmVudEZyb21Ub2dnbGUgPSB0aGlzLl9pc0V2ZW50RnJvbVRvZ2dsZShldmVudCk7XG5cbiAgICBpZiAoIWlzRXZlbnRGcm9tVG9nZ2xlICYmIGl0ZW1FbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgIGl0ZW1FbGVtZW50cy5mb3JFYWNoKChpdGVtRWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGl0ZW1FbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkpIHtcbiAgICAgICAgICBpc0V2ZW50RnJvbUl0ZW1zID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXRlbUVsZW1lbnQgPT09IHRoaXMuX2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICBwb3NpdGlvbiA9IGluZGV4O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBjbG9zaW5nIG9uIEVudGVyIC8gU3BhY2VcbiAgICBpZiAoa2V5ID09PSBLZXkuU3BhY2UgfHwga2V5ID09PSBLZXkuRW50ZXIpIHtcbiAgICAgIGlmIChpc0V2ZW50RnJvbUl0ZW1zICYmICh0aGlzLmF1dG9DbG9zZSA9PT0gdHJ1ZSB8fCB0aGlzLmF1dG9DbG9zZSA9PT0gJ2luc2lkZScpKSB7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBvcGVuaW5nIC8gbmF2aWdhdGluZ1xuICAgIGlmIChpc0V2ZW50RnJvbVRvZ2dsZSB8fCBpc0V2ZW50RnJvbUl0ZW1zKSB7XG4gICAgICB0aGlzLm9wZW4oKTtcblxuICAgICAgaWYgKGl0ZW1FbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICBjYXNlIEtleS5BcnJvd0Rvd246XG4gICAgICAgICAgICBwb3NpdGlvbiA9IE1hdGgubWluKHBvc2l0aW9uICsgMSwgaXRlbUVsZW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBLZXkuQXJyb3dVcDpcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc0Ryb3B1cCgpICYmIHBvc2l0aW9uID09PSAtMSkge1xuICAgICAgICAgICAgICBwb3NpdGlvbiA9IGl0ZW1FbGVtZW50cy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBvc2l0aW9uID0gTWF0aC5tYXgocG9zaXRpb24gLSAxLCAwKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgS2V5LkhvbWU6XG4gICAgICAgICAgICBwb3NpdGlvbiA9IDA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIEtleS5FbmQ6XG4gICAgICAgICAgICBwb3NpdGlvbiA9IGl0ZW1FbGVtZW50cy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaXRlbUVsZW1lbnRzW3Bvc2l0aW9uXS5mb2N1cygpO1xuICAgICAgfVxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9pc0Ryb3B1cCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2Ryb3B1cCcpOyB9XG5cbiAgcHJpdmF0ZSBfaXNFdmVudEZyb21Ub2dnbGUoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICByZXR1cm4gdGhpcy5fYW5jaG9yLmdldE5hdGl2ZUVsZW1lbnQoKS5jb250YWlucyhldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0TWVudUVsZW1lbnRzKCk6IEhUTUxFbGVtZW50W10ge1xuICAgIGNvbnN0IG1lbnUgPSB0aGlzLl9tZW51O1xuICAgIGlmIChtZW51ID09IG51bGwpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIG1lbnUubWVudUl0ZW1zLmZpbHRlcihpdGVtID0+ICFpdGVtLmRpc2FibGVkKS5tYXAoaXRlbSA9PiBpdGVtLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIF9wb3NpdGlvbk1lbnUoKSB7XG4gICAgY29uc3QgbWVudSA9IHRoaXMuX21lbnU7XG4gICAgaWYgKHRoaXMuaXNPcGVuKCkgJiYgbWVudSkge1xuICAgICAgdGhpcy5fYXBwbHlQbGFjZW1lbnRDbGFzc2VzKFxuICAgICAgICAgIHRoaXMuZGlzcGxheSA9PT0gJ2R5bmFtaWMnID9cbiAgICAgICAgICAgICAgcG9zaXRpb25FbGVtZW50cyhcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2FuY2hvci5hbmNob3JFbCwgdGhpcy5fYm9keUNvbnRhaW5lciB8fCB0aGlzLl9tZW51RWxlbWVudC5uYXRpdmVFbGVtZW50LCB0aGlzLnBsYWNlbWVudCxcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyID09PSAnYm9keScpIDpcbiAgICAgICAgICAgICAgdGhpcy5fZ2V0Rmlyc3RQbGFjZW1lbnQodGhpcy5wbGFjZW1lbnQpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9nZXRGaXJzdFBsYWNlbWVudChwbGFjZW1lbnQ6IFBsYWNlbWVudEFycmF5KTogUGxhY2VtZW50IHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShwbGFjZW1lbnQpID8gcGxhY2VtZW50WzBdIDogcGxhY2VtZW50LnNwbGl0KCcgJylbMF0gYXMgUGxhY2VtZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVzZXRDb250YWluZXIoKSB7XG4gICAgY29uc3QgcmVuZGVyZXIgPSB0aGlzLl9yZW5kZXJlcjtcbiAgICBjb25zdCBtZW51RWxlbWVudCA9IHRoaXMuX21lbnVFbGVtZW50O1xuICAgIGlmIChtZW51RWxlbWVudCkge1xuICAgICAgY29uc3QgZHJvcGRvd25FbGVtZW50ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgY29uc3QgZHJvcGRvd25NZW51RWxlbWVudCA9IG1lbnVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgIHJlbmRlcmVyLmFwcGVuZENoaWxkKGRyb3Bkb3duRWxlbWVudCwgZHJvcGRvd25NZW51RWxlbWVudCk7XG4gICAgICByZW5kZXJlci5yZW1vdmVTdHlsZShkcm9wZG93bk1lbnVFbGVtZW50LCAncG9zaXRpb24nKTtcbiAgICAgIHJlbmRlcmVyLnJlbW92ZVN0eWxlKGRyb3Bkb3duTWVudUVsZW1lbnQsICd0cmFuc2Zvcm0nKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2JvZHlDb250YWluZXIpIHtcbiAgICAgIHJlbmRlcmVyLnJlbW92ZUNoaWxkKHRoaXMuX2RvY3VtZW50LmJvZHksIHRoaXMuX2JvZHlDb250YWluZXIpO1xuICAgICAgdGhpcy5fYm9keUNvbnRhaW5lciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfYXBwbHlDb250YWluZXIoY29udGFpbmVyOiBudWxsIHwgJ2JvZHknID0gbnVsbCkge1xuICAgIHRoaXMuX3Jlc2V0Q29udGFpbmVyKCk7XG4gICAgaWYgKGNvbnRhaW5lciA9PT0gJ2JvZHknKSB7XG4gICAgICBjb25zdCByZW5kZXJlciA9IHRoaXMuX3JlbmRlcmVyO1xuICAgICAgY29uc3QgZHJvcGRvd25NZW51RWxlbWVudCA9IHRoaXMuX21lbnVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBjb25zdCBib2R5Q29udGFpbmVyID0gdGhpcy5fYm9keUNvbnRhaW5lciA9IHRoaXMuX2JvZHlDb250YWluZXIgfHwgcmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbiAgICAgIC8vIE92ZXJyaWRlIHNvbWUgc3R5bGVzIHRvIGhhdmUgdGhlIHBvc2l0aW9ubmluZyB3b3JraW5nXG4gICAgICByZW5kZXJlci5zZXRTdHlsZShib2R5Q29udGFpbmVyLCAncG9zaXRpb24nLCAnYWJzb2x1dGUnKTtcbiAgICAgIHJlbmRlcmVyLnNldFN0eWxlKGRyb3Bkb3duTWVudUVsZW1lbnQsICdwb3NpdGlvbicsICdzdGF0aWMnKTtcbiAgICAgIHJlbmRlcmVyLnNldFN0eWxlKGJvZHlDb250YWluZXIsICd6LWluZGV4JywgJzEwNTAnKTtcblxuICAgICAgcmVuZGVyZXIuYXBwZW5kQ2hpbGQoYm9keUNvbnRhaW5lciwgZHJvcGRvd25NZW51RWxlbWVudCk7XG4gICAgICByZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLl9kb2N1bWVudC5ib2R5LCBib2R5Q29udGFpbmVyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9hcHBseVBsYWNlbWVudENsYXNzZXMocGxhY2VtZW50PzogUGxhY2VtZW50KSB7XG4gICAgY29uc3QgbWVudSA9IHRoaXMuX21lbnU7XG4gICAgaWYgKG1lbnUpIHtcbiAgICAgIGlmICghcGxhY2VtZW50KSB7XG4gICAgICAgIHBsYWNlbWVudCA9IHRoaXMuX2dldEZpcnN0UGxhY2VtZW50KHRoaXMucGxhY2VtZW50KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVuZGVyZXIgPSB0aGlzLl9yZW5kZXJlcjtcbiAgICAgIGNvbnN0IGRyb3Bkb3duRWxlbWVudCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcblxuICAgICAgLy8gcmVtb3ZlIHRoZSBjdXJyZW50IHBsYWNlbWVudCBjbGFzc2VzXG4gICAgICByZW5kZXJlci5yZW1vdmVDbGFzcyhkcm9wZG93bkVsZW1lbnQsICdkcm9wdXAnKTtcbiAgICAgIHJlbmRlcmVyLnJlbW92ZUNsYXNzKGRyb3Bkb3duRWxlbWVudCwgJ2Ryb3Bkb3duJyk7XG4gICAgICBtZW51LnBsYWNlbWVudCA9IHRoaXMuZGlzcGxheSA9PT0gJ3N0YXRpYycgPyBudWxsIDogcGxhY2VtZW50O1xuXG4gICAgICAvKlxuICAgICAgKiBhcHBseSB0aGUgbmV3IHBsYWNlbWVudFxuICAgICAgKiBpbiBjYXNlIG9mIHRvcCB1c2UgdXAtYXJyb3cgb3IgZG93bi1hcnJvdyBvdGhlcndpc2VcbiAgICAgICovXG4gICAgICBjb25zdCBkcm9wZG93bkNsYXNzID0gcGxhY2VtZW50LnNlYXJjaCgnXnRvcCcpICE9PSAtMSA/ICdkcm9wdXAnIDogJ2Ryb3Bkb3duJztcbiAgICAgIHJlbmRlcmVyLmFkZENsYXNzKGRyb3Bkb3duRWxlbWVudCwgZHJvcGRvd25DbGFzcyk7XG5cbiAgICAgIGNvbnN0IGJvZHlDb250YWluZXIgPSB0aGlzLl9ib2R5Q29udGFpbmVyO1xuICAgICAgaWYgKGJvZHlDb250YWluZXIpIHtcbiAgICAgICAgcmVuZGVyZXIucmVtb3ZlQ2xhc3MoYm9keUNvbnRhaW5lciwgJ2Ryb3B1cCcpO1xuICAgICAgICByZW5kZXJlci5yZW1vdmVDbGFzcyhib2R5Q29udGFpbmVyLCAnZHJvcGRvd24nKTtcbiAgICAgICAgcmVuZGVyZXIuYWRkQ2xhc3MoYm9keUNvbnRhaW5lciwgZHJvcGRvd25DbGFzcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/dropdown/dropdown.module.js b/dist/sunbird-ui-components/esm2015/dropdown/dropdown.module.js new file mode 100644 index 0000000..fd08041 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/dropdown/dropdown.module.js @@ -0,0 +1,16 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgModule } from '@angular/core'; +import { NgbDropdown, NgbDropdownAnchor, NgbDropdownToggle, NgbDropdownMenu, NgbDropdownItem, NgbNavbar } from './dropdown'; +export { NgbDropdown, NgbDropdownAnchor, NgbDropdownToggle, NgbDropdownMenu, NgbDropdownItem } from './dropdown'; +export { NgbDropdownConfig } from './dropdown-config'; +/** @type {?} */ +const NGB_DROPDOWN_DIRECTIVES = [NgbDropdown, NgbDropdownAnchor, NgbDropdownToggle, NgbDropdownMenu, NgbDropdownItem, NgbNavbar]; +export class NgbDropdownModule { +} +NgbDropdownModule.decorators = [ + { type: NgModule, args: [{ declarations: NGB_DROPDOWN_DIRECTIVES, exports: NGB_DROPDOWN_DIRECTIVES },] } +]; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24ubW9kdWxlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiZHJvcGRvd24vZHJvcGRvd24ubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFDTCxXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixlQUFlLEVBQ2YsZUFBZSxFQUNmLFNBQVMsRUFDVixNQUFNLFlBQVksQ0FBQztBQUVwQixPQUFPLEVBQUMsV0FBVyxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDL0csT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7O01BRTlDLHVCQUF1QixHQUN6QixDQUFDLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLFNBQVMsQ0FBQztBQUdwRyxNQUFNLE9BQU8saUJBQWlCOzs7WUFEN0IsUUFBUSxTQUFDLEVBQUMsWUFBWSxFQUFFLHVCQUF1QixFQUFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgTmdiRHJvcGRvd24sXG4gIE5nYkRyb3Bkb3duQW5jaG9yLFxuICBOZ2JEcm9wZG93blRvZ2dsZSxcbiAgTmdiRHJvcGRvd25NZW51LFxuICBOZ2JEcm9wZG93bkl0ZW0sXG4gIE5nYk5hdmJhclxufSBmcm9tICcuL2Ryb3Bkb3duJztcblxuZXhwb3J0IHtOZ2JEcm9wZG93biwgTmdiRHJvcGRvd25BbmNob3IsIE5nYkRyb3Bkb3duVG9nZ2xlLCBOZ2JEcm9wZG93bk1lbnUsIE5nYkRyb3Bkb3duSXRlbX0gZnJvbSAnLi9kcm9wZG93bic7XG5leHBvcnQge05nYkRyb3Bkb3duQ29uZmlnfSBmcm9tICcuL2Ryb3Bkb3duLWNvbmZpZyc7XG5cbmNvbnN0IE5HQl9EUk9QRE9XTl9ESVJFQ1RJVkVTID1cbiAgICBbTmdiRHJvcGRvd24sIE5nYkRyb3Bkb3duQW5jaG9yLCBOZ2JEcm9wZG93blRvZ2dsZSwgTmdiRHJvcGRvd25NZW51LCBOZ2JEcm9wZG93bkl0ZW0sIE5nYk5hdmJhcl07XG5cbkBOZ01vZHVsZSh7ZGVjbGFyYXRpb25zOiBOR0JfRFJPUERPV05fRElSRUNUSVZFUywgZXhwb3J0czogTkdCX0RST1BET1dOX0RJUkVDVElWRVN9KVxuZXhwb3J0IGNsYXNzIE5nYkRyb3Bkb3duTW9kdWxlIHtcbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/index.js b/dist/sunbird-ui-components/esm2015/index.js new file mode 100644 index 0000000..4bbeb4f --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/index.js @@ -0,0 +1,53 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgModule } from '@angular/core'; +import { SbCardModule } from './card/card.module'; +import { NgbAccordionModule } from './accordion/accordion.module'; +import { NgbAlertModule } from './alert/alert.module'; +import { NgbButtonsModule } from './buttons/buttons.module'; +import { NgbCarouselModule } from './carousel/carousel.module'; +import { NgbCollapseModule } from './collapse/collapse.module'; +import { NgbDatepickerModule } from './datepicker/datepicker.module'; +import { NgbDropdownModule } from './dropdown/dropdown.module'; +import { NgbModalModule } from './modal/modal.module'; +import { NgbPaginationModule } from './pagination/pagination.module'; +import { NgbPopoverModule } from './popover/popover.module'; +import { NgbProgressbarModule } from './progressbar/progressbar.module'; +import { NgbRatingModule } from './rating/rating.module'; +import { NgbTabsetModule } from './tabset/tabset.module'; +import { NgbTimepickerModule } from './timepicker/timepicker.module'; +import { NgbToastModule } from './toast/toast.module'; +import { NgbTooltipModule } from './tooltip/tooltip.module'; +import { NgbTypeaheadModule } from './typeahead/typeahead.module'; +export { NgbAccordion, NgbAccordionConfig, NgbAccordionModule, NgbPanel, NgbPanelContent, NgbPanelHeader, NgbPanelTitle, NgbPanelToggle } from './accordion/accordion.module'; +export { SbCard, SbCardConfig, SbCardModule } from './card/card.module'; +export { NgbAlert, NgbAlertConfig, NgbAlertModule } from './alert/alert.module'; +export { NgbButtonLabel, NgbButtonsModule, NgbCheckBox, NgbRadio, NgbRadioGroup } from './buttons/buttons.module'; +export { NgbCarousel, NgbCarouselConfig, NgbCarouselModule, NgbSlide, NgbSlideEventDirection, NgbSlideEventSource } from './carousel/carousel.module'; +export { NgbCollapse, NgbCollapseModule } from './collapse/collapse.module'; +export { NgbCalendar, NgbCalendarGregorian, NgbCalendarHebrew, NgbCalendarIslamicCivil, NgbCalendarIslamicUmalqura, NgbCalendarPersian, NgbDate, NgbDateAdapter, NgbDateNativeAdapter, NgbDateNativeUTCAdapter, NgbDateParserFormatter, NgbDatepicker, NgbDatepickerConfig, NgbDatepickerI18n, NgbDatepickerI18nHebrew, NgbDatepickerModule, NgbInputDatepicker } from './datepicker/datepicker.module'; +export { NgbDropdown, NgbDropdownAnchor, NgbDropdownConfig, NgbDropdownItem, NgbDropdownMenu, NgbDropdownModule, NgbDropdownToggle } from './dropdown/dropdown.module'; +export { ModalDismissReasons, NgbActiveModal, NgbModal, NgbModalConfig, NgbModalModule, NgbModalRef } from './modal/modal.module'; +export { NgbPagination, NgbPaginationConfig, NgbPaginationEllipsis, NgbPaginationFirst, NgbPaginationLast, NgbPaginationModule, NgbPaginationNext, NgbPaginationNumber, NgbPaginationPrevious } from './pagination/pagination.module'; +export { NgbPopover, NgbPopoverConfig, NgbPopoverModule } from './popover/popover.module'; +export { NgbProgressbar, NgbProgressbarConfig, NgbProgressbarModule } from './progressbar/progressbar.module'; +export { NgbRating, NgbRatingConfig, NgbRatingModule } from './rating/rating.module'; +export { NgbTab, NgbTabContent, NgbTabset, NgbTabsetConfig, NgbTabsetModule, NgbTabTitle } from './tabset/tabset.module'; +export { NgbTimeAdapter, NgbTimepickerI18n, NgbTimepicker, NgbTimepickerConfig, NgbTimepickerModule } from './timepicker/timepicker.module'; +export { NgbToast, NgbToastConfig, NgbToastHeader, NgbToastModule } from './toast/toast.module'; +export { NgbTooltip, NgbTooltipConfig, NgbTooltipModule } from './tooltip/tooltip.module'; +export { NgbHighlight, NgbTypeahead, NgbTypeaheadConfig, NgbTypeaheadModule } from './typeahead/typeahead.module'; +/** @type {?} */ +const NGB_MODULES = [ + SbCardModule, NgbAccordionModule, NgbAlertModule, NgbButtonsModule, NgbCarouselModule, NgbCollapseModule, NgbDatepickerModule, + NgbDropdownModule, NgbModalModule, NgbPaginationModule, NgbPopoverModule, NgbProgressbarModule, NgbRatingModule, + NgbTabsetModule, NgbTimepickerModule, NgbToastModule, NgbTooltipModule, NgbTypeaheadModule +]; +export class NgbModule { +} +NgbModule.decorators = [ + { type: NgModule, args: [{ imports: NGB_MODULES, exports: NGB_MODULES },] } +]; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV2QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ25FLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUN0RSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ25FLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUMs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QUFrQixFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUI7SUFDN0gsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixFQUFFLGVBQWU7SUFDL0csZUFBZSxFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0I7Q0FDM0Y7QUFHRCxNQUFNLE9BQU8sU0FBUzs7O1lBRHJCLFFBQVEsU0FBQyxFQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1NiQ2FyZE1vZHVsZX0gZnJvbSAnLi9jYXJkL2NhcmQubW9kdWxlJztcbmltcG9ydCB7TmdiQWNjb3JkaW9uTW9kdWxlfSBmcm9tICcuL2FjY29yZGlvbi9hY2NvcmRpb24ubW9kdWxlJztcbmltcG9ydCB7TmdiQWxlcnRNb2R1bGV9IGZyb20gJy4vYWxlcnQvYWxlcnQubW9kdWxlJztcbmltcG9ydCB7TmdiQnV0dG9uc01vZHVsZX0gZnJvbSAnLi9idXR0b25zL2J1dHRvbnMubW9kdWxlJztcbmltcG9ydCB7TmdiQ2Fyb3VzZWxNb2R1bGV9IGZyb20gJy4vY2Fyb3VzZWwvY2Fyb3VzZWwubW9kdWxlJztcbmltcG9ydCB7TmdiQ29sbGFwc2VNb2R1bGV9IGZyb20gJy4vY29sbGFwc2UvY29sbGFwc2UubW9kdWxlJztcbmltcG9ydCB7TmdiRGF0ZXBpY2tlck1vZHVsZX0gZnJvbSAnLi9kYXRlcGlja2VyL2RhdGVwaWNrZXIubW9kdWxlJztcbmltcG9ydCB7TmdiRHJvcGRvd25Nb2R1bGV9IGZyb20gJy4vZHJvcGRvd24vZHJvcGRvd24ubW9kdWxlJztcbmltcG9ydCB7TmdiTW9kYWxNb2R1bGV9IGZyb20gJy4vbW9kYWwvbW9kYWwubW9kdWxlJztcbmltcG9ydCB7TmdiUGFnaW5hdGlvbk1vZHVsZX0gZnJvbSAnLi9wYWdpbmF0aW9uL3BhZ2luYXRpb24ubW9kdWxlJztcbmltcG9ydCB7TmdiUG9wb3Zlck1vZHVsZX0gZnJvbSAnLi9wb3BvdmVyL3BvcG92ZXIubW9kdWxlJztcbmltcG9ydCB7TmdiUHJvZ3Jlc3NiYXJNb2R1bGV9IGZyb20gJy4vcHJvZ3Jlc3NiYXIvcHJvZ3Jlc3NiYXIubW9kdWxlJztcbmltcG9ydCB7TmdiUmF0aW5nTW9kdWxlfSBmcm9tICcuL3JhdGluZy9yYXRpbmcubW9kdWxlJztcbmltcG9ydCB7TmdiVGFic2V0TW9kdWxlfSBmcm9tICcuL3RhYnNldC90YWJzZXQubW9kdWxlJztcbmltcG9ydCB7TmdiVGltZXBpY2tlck1vZHVsZX0gZnJvbSAnLi90aW1lcGlja2VyL3RpbWVwaWNrZXIubW9kdWxlJztcbmltcG9ydCB7TmdiVG9hc3RNb2R1bGV9IGZyb20gJy4vdG9hc3QvdG9hc3QubW9kdWxlJztcbmltcG9ydCB7TmdiVG9vbHRpcE1vZHVsZX0gZnJvbSAnLi90b29sdGlwL3Rvb2x0aXAubW9kdWxlJztcbmltcG9ydCB7TmdiVHlwZWFoZWFkTW9kdWxlfSBmcm9tICcuL3R5cGVhaGVhZC90eXBlYWhlYWQubW9kdWxlJztcblxuXG5cbmV4cG9ydCB7XG4gIE5nYkFjY29yZGlvbixcbiAgTmdiQWNjb3JkaW9uQ29uZmlnLFxuICBOZ2JBY2NvcmRpb25Nb2R1bGUsXG4gIE5nYlBhbmVsLFxuICBOZ2JQYW5lbENoYW5nZUV2ZW50LFxuICBOZ2JQYW5lbENvbnRlbnQsXG4gIE5nYlBhbmVsSGVhZGVyLFxuICBOZ2JQYW5lbEhlYWRlckNvbnRleHQsXG4gIE5nYlBhbmVsVGl0bGUsXG4gIE5nYlBhbmVsVG9nZ2xlXG59IGZyb20gJy4vYWNjb3JkaW9uL2FjY29yZGlvbi5tb2R1bGUnO1xuZXhwb3J0IHtTYkNhcmQsIFNiQ2FyZENvbmZpZywgU2JDYXJkTW9kdWxlfSBmcm9tICcuL2NhcmQvY2FyZC5tb2R1bGUnO1xuZXhwb3J0IHtOZ2JBbGVydCwgTmdiQWxlcnRDb25maWcsIE5nYkFsZXJ0TW9kdWxlfSBmcm9tICcuL2FsZXJ0L2FsZXJ0Lm1vZHVsZSc7XG5leHBvcnQge05nYkJ1dHRvbkxhYmVsLCBOZ2JCdXR0b25zTW9kdWxlLCBOZ2JDaGVja0JveCwgTmdiUmFkaW8sIE5nYlJhZGlvR3JvdXB9IGZyb20gJy4vYnV0dG9ucy9idXR0b25zLm1vZHVsZSc7XG5leHBvcnQge1xuICBOZ2JDYXJvdXNlbCxcbiAgTmdiQ2Fyb3VzZWxDb25maWcsXG4gIE5nYkNhcm91c2VsTW9kdWxlLFxuICBOZ2JTbGlkZSxcbiAgTmdiU2xpZGVFdmVudCxcbiAgTmdiU2xpZGVFdmVudERpcmVjdGlvbixcbiAgTmdiU2xpZGVFdmVudFNvdXJjZVxufSBmcm9tICcuL2Nhcm91c2VsL2Nhcm91c2VsLm1vZHVsZSc7XG5leHBvcnQge05nYkNvbGxhcHNlLCBOZ2JDb2xsYXBzZU1vZHVsZX0gZnJvbSAnLi9jb2xsYXBzZS9jb2xsYXBzZS5tb2R1bGUnO1xuZXhwb3J0IHtcbiAgTmdiQ2FsZW5kYXIsXG4gIE5nYkNhbGVuZGFyR3JlZ29yaWFuLFxuICBOZ2JDYWxlbmRhckhlYnJldyxcbiAgTmdiQ2FsZW5kYXJJc2xhbWljQ2l2aWwsXG4gIE5nYkNhbGVuZGFySXNsYW1pY1VtYWxxdXJhLFxuICBOZ2JDYWxlbmRhclBlcnNpYW4sXG4gIE5nYkRhdGUsXG4gIE5nYkRhdGVBZGFwdGVyLFxuICBOZ2JEYXRlTmF0aXZlQWRhcHRlcixcbiAgTmdiRGF0ZU5hdGl2ZVVUQ0FkYXB0ZXIsXG4gIE5nYkRhdGVQYXJzZXJGb3JtYXR0ZXIsXG4gIE5nYkRhdGVwaWNrZXIsXG4gIE5nYkRhdGVwaWNrZXJDb25maWcsXG4gIE5nYkRhdGVwaWNrZXJJMThuLFxuICBOZ2JEYXRlcGlja2VySTE4bkhlYnJldyxcbiAgTmdiRGF0ZXBpY2tlck1vZHVsZSxcbiAgTmdiRGF0ZXBpY2tlck5hdmlnYXRlRXZlbnQsXG4gIE5nYkRhdGVTdHJ1Y3QsXG4gIE5nYklucHV0RGF0ZXBpY2tlcixcbiAgTmdiUGVyaW9kXG59IGZyb20gJy4vZGF0ZXBpY2tlci9kYXRlcGlja2VyLm1vZHVsZSc7XG5leHBvcnQge1xuICBOZ2JEcm9wZG93bixcbiAgTmdiRHJvcGRvd25BbmNob3IsXG4gIE5nYkRyb3Bkb3duQ29uZmlnLFxuICBOZ2JEcm9wZG93bkl0ZW0sXG4gIE5nYkRyb3Bkb3duTWVudSxcbiAgTmdiRHJvcGRvd25Nb2R1bGUsXG4gIE5nYkRyb3Bkb3duVG9nZ2xlXG59IGZyb20gJy4vZHJvcGRvd24vZHJvcGRvd24ubW9kdWxlJztcbmV4cG9ydCB7XG4gIE1vZGFsRGlzbWlzc1JlYXNvbnMsXG4gIE5nYkFjdGl2ZU1vZGFsLFxuICBOZ2JNb2RhbCxcbiAgTmdiTW9kYWxDb25maWcsXG4gIE5nYk1vZGFsTW9kdWxlLFxuICBOZ2JNb2RhbE9wdGlvbnMsXG4gIE5nYk1vZGFsUmVmXG59IGZyb20gJy4vbW9kYWwvbW9kYWwubW9kdWxlJztcbmV4cG9ydCB7XG4gIE5nYlBhZ2luYXRpb24sXG4gIE5nYlBhZ2luYXRpb25Db25maWcsXG4gIE5nYlBhZ2luYXRpb25FbGxpcHNpcyxcbiAgTmdiUGFnaW5hdGlvbkZpcnN0LFxuICBOZ2JQYWdpbmF0aW9uTGFzdCxcbiAgTmdiUGFnaW5hdGlvbk1vZHVsZSxcbiAgTmdiUGFnaW5hdGlvbk5leHQsXG4gIE5nYlBhZ2luYXRpb25OdW1iZXIsXG4gIE5nYlBhZ2luYXRpb25QcmV2aW91c1xufSBmcm9tICcuL3BhZ2luYXRpb24vcGFnaW5hdGlvbi5tb2R1bGUnO1xuZXhwb3J0IHtOZ2JQb3BvdmVyLCBOZ2JQb3BvdmVyQ29uZmlnLCBOZ2JQb3BvdmVyTW9kdWxlfSBmcm9tICcuL3BvcG92ZXIvcG9wb3Zlci5tb2R1bGUnO1xuZXhwb3J0IHtOZ2JQcm9ncmVzc2JhciwgTmdiUHJvZ3Jlc3NiYXJDb25maWcsIE5nYlByb2dyZXNzYmFyTW9kdWxlfSBmcm9tICcuL3Byb2dyZXNzYmFyL3Byb2dyZXNzYmFyLm1vZHVsZSc7XG5leHBvcnQge05nYlJhdGluZywgTmdiUmF0aW5nQ29uZmlnLCBOZ2JSYXRpbmdNb2R1bGV9IGZyb20gJy4vcmF0aW5nL3JhdGluZy5tb2R1bGUnO1xuZXhwb3J0IHtcbiAgTmdiVGFiLFxuICBOZ2JUYWJDaGFuZ2VFdmVudCxcbiAgTmdiVGFiQ29udGVudCxcbiAgTmdiVGFic2V0LFxuICBOZ2JUYWJzZXRDb25maWcsXG4gIE5nYlRhYnNldE1vZHVsZSxcbiAgTmdiVGFiVGl0bGVcbn0gZnJvbSAnLi90YWJzZXQvdGFic2V0Lm1vZHVsZSc7XG5leHBvcnQge1xuICBOZ2JUaW1lQWRhcHRlcixcbiAgTmdiVGltZXBpY2tlckkxOG4sXG4gIE5nYlRpbWVwaWNrZXIsXG4gIE5nYlRpbWVwaWNrZXJDb25maWcsXG4gIE5nYlRpbWVwaWNrZXJNb2R1bGUsXG4gIE5nYlRpbWVTdHJ1Y3Rcbn0gZnJvbSAnLi90aW1lcGlja2VyL3RpbWVwaWNrZXIubW9kdWxlJztcbmV4cG9ydCB7TmdiVG9hc3QsIE5nYlRvYXN0Q29uZmlnLCBOZ2JUb2FzdEhlYWRlciwgTmdiVG9hc3RNb2R1bGV9IGZyb20gJy4vdG9hc3QvdG9hc3QubW9kdWxlJztcbmV4cG9ydCB7TmdiVG9vbHRpcCwgTmdiVG9vbHRpcENvbmZpZywgTmdiVG9vbHRpcE1vZHVsZX0gZnJvbSAnLi90b29sdGlwL3Rvb2x0aXAubW9kdWxlJztcbmV4cG9ydCB7XG4gIE5nYkhpZ2hsaWdodCxcbiAgTmdiVHlwZWFoZWFkLFxuICBOZ2JUeXBlYWhlYWRDb25maWcsXG4gIE5nYlR5cGVhaGVhZE1vZHVsZSxcbiAgTmdiVHlwZWFoZWFkU2VsZWN0SXRlbUV2ZW50XG59IGZyb20gJy4vdHlwZWFoZWFkL3R5cGVhaGVhZC5tb2R1bGUnO1xuZXhwb3J0IHtQbGFjZW1lbnR9IGZyb20gJy4vdXRpbC9wb3NpdGlvbmluZyc7XG5cblxuY29uc3QgTkdCX01PRFVMRVMgPSBbXG4gIFNiQ2FyZE1vZHVsZSwgTmdiQWNjb3JkaW9uTW9kdWxlLCBOZ2JBbGVydE1vZHVsZSwgTmdiQnV0dG9uc01vZHVsZSwgTmdiQ2Fyb3VzZWxNb2R1bGUsIE5nYkNvbGxhcHNlTW9kdWxlLCBOZ2JEYXRlcGlja2VyTW9kdWxlLFxuICBOZ2JEcm9wZG93bk1vZHVsZSwgTmdiTW9kYWxNb2R1bGUsIE5nYlBhZ2luYXRpb25Nb2R1bGUsIE5nYlBvcG92ZXJNb2R1bGUsIE5nYlByb2dyZXNzYmFyTW9kdWxlLCBOZ2JSYXRpbmdNb2R1bGUsXG4gIE5nYlRhYnNldE1vZHVsZSwgTmdiVGltZXBpY2tlck1vZHVsZSwgTmdiVG9hc3RNb2R1bGUsIE5nYlRvb2x0aXBNb2R1bGUsIE5nYlR5cGVhaGVhZE1vZHVsZVxuXTtcblxuQE5nTW9kdWxlKHtpbXBvcnRzOiBOR0JfTU9EVUxFUywgZXhwb3J0czogTkdCX01PRFVMRVN9KVxuZXhwb3J0IGNsYXNzIE5nYk1vZHVsZSB7XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/modal/modal-backdrop.js b/dist/sunbird-ui-components/esm2015/modal/modal-backdrop.js new file mode 100644 index 0000000..e7cf6e8 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/modal/modal-backdrop.js @@ -0,0 +1,22 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Component, Input } from '@angular/core'; +export class NgbModalBackdrop { +} +NgbModalBackdrop.decorators = [ + { type: Component, args: [{ + selector: 'ngb-modal-backdrop', + template: '', + host: { '[class]': '"modal-backdrop fade show" + (backdropClass ? " " + backdropClass : "")', 'style': 'z-index: 1050' } + }] } +]; +NgbModalBackdrop.propDecorators = { + backdropClass: [{ type: Input }] +}; +if (false) { + /** @type {?} */ + NgbModalBackdrop.prototype.backdropClass; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtYmFja2Ryb3AuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJtb2RhbC9tb2RhbC1iYWNrZHJvcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFRL0MsTUFBTSxPQUFPLGdCQUFnQjs7O1lBTjVCLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsb0JBQW9CO2dCQUM5QixRQUFRLEVBQUUsRUFBRTtnQkFDWixJQUFJLEVBQ0EsRUFBQyxTQUFTLEVBQUUseUVBQXlFLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBQzthQUNySDs7OzRCQUVFLEtBQUs7Ozs7SUFBTix5Q0FBK0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5wdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ2ItbW9kYWwtYmFja2Ryb3AnLFxuICB0ZW1wbGF0ZTogJycsXG4gIGhvc3Q6XG4gICAgICB7J1tjbGFzc10nOiAnXCJtb2RhbC1iYWNrZHJvcCBmYWRlIHNob3dcIiArIChiYWNrZHJvcENsYXNzID8gXCIgXCIgKyBiYWNrZHJvcENsYXNzIDogXCJcIiknLCAnc3R5bGUnOiAnei1pbmRleDogMTA1MCd9XG59KVxuZXhwb3J0IGNsYXNzIE5nYk1vZGFsQmFja2Ryb3Age1xuICBASW5wdXQoKSBiYWNrZHJvcENsYXNzOiBzdHJpbmc7XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/modal/modal-config.js b/dist/sunbird-ui-components/esm2015/modal/modal-config.js new file mode 100644 index 0000000..6039015 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/modal/modal-config.js @@ -0,0 +1,118 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Injectable } from '@angular/core'; +import * as i0 from "@angular/core"; +/** + * Options available when opening new modal windows with `NgbModal.open()` method. + * @record + */ +export function NgbModalOptions() { } +if (false) { + /** + * `aria-labelledby` attribute value to set on the modal window. + * + * \@since 2.2.0 + * @type {?|undefined} + */ + NgbModalOptions.prototype.ariaLabelledBy; + /** + * If `true`, the backdrop element will be created for a given modal. + * + * Alternatively, specify `'static'` for a backdrop which doesn't close the modal on click. + * + * Default value is `true`. + * @type {?|undefined} + */ + NgbModalOptions.prototype.backdrop; + /** + * Callback right before the modal will be dismissed. + * + * If this function returns: + * * `false` + * * a promise resolved with `false` + * * a promise that is rejected + * + * then the modal won't be dismissed. + * @type {?|undefined} + */ + NgbModalOptions.prototype.beforeDismiss; + /** + * If `true`, the modal will be centered vertically. + * + * Default value is `false`. + * + * \@since 1.1.0 + * @type {?|undefined} + */ + NgbModalOptions.prototype.centered; + /** + * A selector specifying the element all new modal windows should be appended to. + * + * If not specified, will be `body`. + * @type {?|undefined} + */ + NgbModalOptions.prototype.container; + /** + * The `Injector` to use for modal content. + * @type {?|undefined} + */ + NgbModalOptions.prototype.injector; + /** + * If `true`, the modal will be closed when `Escape` key is pressed + * + * Default value is `true`. + * @type {?|undefined} + */ + NgbModalOptions.prototype.keyboard; + /** + * Scrollable modal content (false by default). + * + * \@since 5.0.0 + * @type {?|undefined} + */ + NgbModalOptions.prototype.scrollable; + /** + * Size of a new modal window. + * @type {?|undefined} + */ + NgbModalOptions.prototype.size; + /** + * A custom class to append to the modal window. + * @type {?|undefined} + */ + NgbModalOptions.prototype.windowClass; + /** + * A custom class to append to the modal backdrop. + * + * \@since 1.1.0 + * @type {?|undefined} + */ + NgbModalOptions.prototype.backdropClass; +} +/** + * A configuration service for the [`NgbModal`](#/components/modal/api#NgbModal) service. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all modals used in the application. + * + * \@since 3.1.0 + */ +export class NgbModalConfig { + constructor() { + this.backdrop = true; + this.keyboard = true; + } +} +NgbModalConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } +]; +/** @nocollapse */ NgbModalConfig.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function NgbModalConfig_Factory() { return new NgbModalConfig(); }, token: NgbModalConfig, providedIn: "root" }); +if (false) { + /** @type {?} */ + NgbModalConfig.prototype.backdrop; + /** @type {?} */ + NgbModalConfig.prototype.keyboard; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtY29uZmlnLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsibW9kYWwvbW9kYWwtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFXLE1BQU0sZUFBZSxDQUFDOzs7Ozs7QUFLbkQscUNBZ0ZDOzs7Ozs7OztJQTFFQyx5Q0FBd0I7Ozs7Ozs7OztJQVN4QixtQ0FBOEI7Ozs7Ozs7Ozs7OztJQVk5Qix3Q0FBaUQ7Ozs7Ozs7OztJQVNqRCxtQ0FBbUI7Ozs7Ozs7SUFPbkIsb0NBQW1COzs7OztJQUtuQixtQ0FBb0I7Ozs7Ozs7SUFPcEIsbUNBQW1COzs7Ozs7O0lBT25CLHFDQUFxQjs7Ozs7SUFLckIsK0JBQTBCOzs7OztJQUsxQixzQ0FBcUI7Ozs7Ozs7SUFPckIsd0NBQXVCOzs7Ozs7Ozs7O0FBWXpCLE1BQU0sT0FBTyxjQUFjO0lBRDNCO1FBRUUsYUFBUSxHQUF1QixJQUFJLENBQUM7UUFDcEMsYUFBUSxHQUFHLElBQUksQ0FBQztLQUNqQjs7O1lBSkEsVUFBVSxTQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQzs7Ozs7SUFFOUIsa0NBQW9DOztJQUNwQyxrQ0FBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIEluamVjdG9yfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBPcHRpb25zIGF2YWlsYWJsZSB3aGVuIG9wZW5pbmcgbmV3IG1vZGFsIHdpbmRvd3Mgd2l0aCBgTmdiTW9kYWwub3BlbigpYCBtZXRob2QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmdiTW9kYWxPcHRpb25zIHtcbiAgLyoqXG4gICAqIGBhcmlhLWxhYmVsbGVkYnlgIGF0dHJpYnV0ZSB2YWx1ZSB0byBzZXQgb24gdGhlIG1vZGFsIHdpbmRvdy5cbiAgICpcbiAgICogQHNpbmNlIDIuMi4wXG4gICAqL1xuICBhcmlhTGFiZWxsZWRCeT86IHN0cmluZztcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYmFja2Ryb3AgZWxlbWVudCB3aWxsIGJlIGNyZWF0ZWQgZm9yIGEgZ2l2ZW4gbW9kYWwuXG4gICAqXG4gICAqIEFsdGVybmF0aXZlbHksIHNwZWNpZnkgYCdzdGF0aWMnYCBmb3IgYSBiYWNrZHJvcCB3aGljaCBkb2Vzbid0IGNsb3NlIHRoZSBtb2RhbCBvbiBjbGljay5cbiAgICpcbiAgICogRGVmYXVsdCB2YWx1ZSBpcyBgdHJ1ZWAuXG4gICAqL1xuICBiYWNrZHJvcD86IGJvb2xlYW4gfCAnc3RhdGljJztcblxuICAvKipcbiAgICogQ2FsbGJhY2sgcmlnaHQgYmVmb3JlIHRoZSBtb2RhbCB3aWxsIGJlIGRpc21pc3NlZC5cbiAgICpcbiAgICogSWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zOlxuICAgKiAqIGBmYWxzZWBcbiAgICogKiBhIHByb21pc2UgcmVzb2x2ZWQgd2l0aCBgZmFsc2VgXG4gICAqICogYSBwcm9taXNlIHRoYXQgaXMgcmVqZWN0ZWRcbiAgICpcbiAgICogdGhlbiB0aGUgbW9kYWwgd29uJ3QgYmUgZGlzbWlzc2VkLlxuICAgKi9cbiAgYmVmb3JlRGlzbWlzcz86ICgpID0+IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+O1xuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBtb2RhbCB3aWxsIGJlIGNlbnRlcmVkIHZlcnRpY2FsbHkuXG4gICAqXG4gICAqIERlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC5cbiAgICpcbiAgICogQHNpbmNlIDEuMS4wXG4gICAqL1xuICBjZW50ZXJlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEEgc2VsZWN0b3Igc3BlY2lmeWluZyB0aGUgZWxlbWVudCBhbGwgbmV3IG1vZGFsIHdpbmRvd3Mgc2hvdWxkIGJlIGFwcGVuZGVkIHRvLlxuICAgKlxuICAgKiBJZiBub3Qgc3BlY2lmaWVkLCB3aWxsIGJlIGBib2R5YC5cbiAgICovXG4gIGNvbnRhaW5lcj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGBJbmplY3RvcmAgdG8gdXNlIGZvciBtb2RhbCBjb250ZW50LlxuICAgKi9cbiAgaW5qZWN0b3I/OiBJbmplY3RvcjtcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbW9kYWwgd2lsbCBiZSBjbG9zZWQgd2hlbiBgRXNjYXBlYCBrZXkgaXMgcHJlc3NlZFxuICAgKlxuICAgKiBEZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC5cbiAgICovXG4gIGtleWJvYXJkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU2Nyb2xsYWJsZSBtb2RhbCBjb250ZW50IChmYWxzZSBieSBkZWZhdWx0KS5cbiAgICpcbiAgICogQHNpbmNlIDUuMC4wXG4gICAqL1xuICBzY3JvbGxhYmxlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU2l6ZSBvZiBhIG5ldyBtb2RhbCB3aW5kb3cuXG4gICAqL1xuICBzaXplPzogJ3NtJyB8ICdsZycgfCAneGwnO1xuXG4gIC8qKlxuICAgKiBBIGN1c3RvbSBjbGFzcyB0byBhcHBlbmQgdG8gdGhlIG1vZGFsIHdpbmRvdy5cbiAgICovXG4gIHdpbmRvd0NsYXNzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGN1c3RvbSBjbGFzcyB0byBhcHBlbmQgdG8gdGhlIG1vZGFsIGJhY2tkcm9wLlxuICAgKlxuICAgKiBAc2luY2UgMS4xLjBcbiAgICovXG4gIGJhY2tkcm9wQ2xhc3M/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBjb25maWd1cmF0aW9uIHNlcnZpY2UgZm9yIHRoZSBbYE5nYk1vZGFsYF0oIy9jb21wb25lbnRzL21vZGFsL2FwaSNOZ2JNb2RhbCkgc2VydmljZS5cbiAqXG4gKiBZb3UgY2FuIGluamVjdCB0aGlzIHNlcnZpY2UsIHR5cGljYWxseSBpbiB5b3VyIHJvb3QgY29tcG9uZW50LCBhbmQgY3VzdG9taXplIHRoZSB2YWx1ZXMgb2YgaXRzIHByb3BlcnRpZXMgaW5cbiAqIG9yZGVyIHRvIHByb3ZpZGUgZGVmYXVsdCB2YWx1ZXMgZm9yIGFsbCBtb2RhbHMgdXNlZCBpbiB0aGUgYXBwbGljYXRpb24uXG4qXG4qIEBzaW5jZSAzLjEuMFxuKi9cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIE5nYk1vZGFsQ29uZmlnIGltcGxlbWVudHMgTmdiTW9kYWxPcHRpb25zIHtcbiAgYmFja2Ryb3A6IGJvb2xlYW4gfCAnc3RhdGljJyA9IHRydWU7XG4gIGtleWJvYXJkID0gdHJ1ZTtcbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/modal/modal-dismiss-reasons.js b/dist/sunbird-ui-components/esm2015/modal/modal-dismiss-reasons.js new file mode 100644 index 0000000..c34708d --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/modal/modal-dismiss-reasons.js @@ -0,0 +1,13 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @enum {number} */ +const ModalDismissReasons = { + BACKDROP_CLICK: 0, + ESC: 1, +}; +export { ModalDismissReasons }; +ModalDismissReasons[ModalDismissReasons.BACKDROP_CLICK] = 'BACKDROP_CLICK'; +ModalDismissReasons[ModalDismissReasons.ESC] = 'ESC'; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtZGlzbWlzcy1yZWFzb25zLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsibW9kYWwvbW9kYWwtZGlzbWlzcy1yZWFzb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztJQUNFLGlCQUFjO0lBQ2QsTUFBRyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBlbnVtIE1vZGFsRGlzbWlzc1JlYXNvbnMge1xuICBCQUNLRFJPUF9DTElDSyxcbiAgRVNDXG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/modal/modal-ref.js b/dist/sunbird-ui-components/esm2015/modal/modal-ref.js new file mode 100644 index 0000000..644ac9e --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/modal/modal-ref.js @@ -0,0 +1,191 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * A reference to the currently opened (active) modal. + * + * Instances of this class can be injected into your component passed as modal content. + * So you can `.close()` or `.dismiss()` the modal window from your component. + */ +export class NgbActiveModal { + /** + * Closes the modal with an optional `result` value. + * + * The `NgbMobalRef.result` promise will be resolved with the provided value. + * @param {?=} result + * @return {?} + */ + close(result) { } + /** + * Dismisses the modal with an optional `reason` value. + * + * The `NgbModalRef.result` promise will be rejected with the provided value. + * @param {?=} reason + * @return {?} + */ + dismiss(reason) { } +} +/** + * A reference to the newly opened modal returned by the `NgbModal.open()` method. + */ +export class NgbModalRef { + /** + * @param {?} _windowCmptRef + * @param {?} _contentRef + * @param {?=} _backdropCmptRef + * @param {?=} _beforeDismiss + */ + constructor(_windowCmptRef, _contentRef, _backdropCmptRef, _beforeDismiss) { + this._windowCmptRef = _windowCmptRef; + this._contentRef = _contentRef; + this._backdropCmptRef = _backdropCmptRef; + this._beforeDismiss = _beforeDismiss; + _windowCmptRef.instance.dismissEvent.subscribe((/** + * @param {?} reason + * @return {?} + */ + (reason) => { this.dismiss(reason); })); + this.result = new Promise((/** + * @param {?} resolve + * @param {?} reject + * @return {?} + */ + (resolve, reject) => { + this._resolve = resolve; + this._reject = reject; + })); + this.result.then(null, (/** + * @return {?} + */ + () => { })); + } + /** + * The instance of a component used for the modal content. + * + * When a `TemplateRef` is used as the content, will return `undefined`. + * @return {?} + */ + get componentInstance() { + if (this._contentRef.componentRef) { + return this._contentRef.componentRef.instance; + } + } + /** + * Closes the modal with an optional `result` value. + * + * The `NgbMobalRef.result` promise will be resolved with the provided value. + * @param {?=} result + * @return {?} + */ + close(result) { + if (this._windowCmptRef) { + this._resolve(result); + this._removeModalElements(); + } + } + /** + * @private + * @param {?=} reason + * @return {?} + */ + _dismiss(reason) { + this._reject(reason); + this._removeModalElements(); + } + /** + * Dismisses the modal with an optional `reason` value. + * + * The `NgbModalRef.result` promise will be rejected with the provided value. + * @param {?=} reason + * @return {?} + */ + dismiss(reason) { + if (this._windowCmptRef) { + if (!this._beforeDismiss) { + this._dismiss(reason); + } + else { + /** @type {?} */ + const dismiss = this._beforeDismiss(); + if (dismiss && dismiss.then) { + dismiss.then((/** + * @param {?} result + * @return {?} + */ + result => { + if (result !== false) { + this._dismiss(reason); + } + }), (/** + * @return {?} + */ + () => { })); + } + else if (dismiss !== false) { + this._dismiss(reason); + } + } + } + } + /** + * @private + * @return {?} + */ + _removeModalElements() { + /** @type {?} */ + const windowNativeEl = this._windowCmptRef.location.nativeElement; + windowNativeEl.parentNode.removeChild(windowNativeEl); + this._windowCmptRef.destroy(); + if (this._backdropCmptRef) { + /** @type {?} */ + const backdropNativeEl = this._backdropCmptRef.location.nativeElement; + backdropNativeEl.parentNode.removeChild(backdropNativeEl); + this._backdropCmptRef.destroy(); + } + if (this._contentRef && this._contentRef.viewRef) { + this._contentRef.viewRef.destroy(); + } + this._windowCmptRef = null; + this._backdropCmptRef = null; + this._contentRef = null; + } +} +if (false) { + /** + * @type {?} + * @private + */ + NgbModalRef.prototype._resolve; + /** + * @type {?} + * @private + */ + NgbModalRef.prototype._reject; + /** + * The promise that is resolved when the modal is closed and rejected when the modal is dismissed. + * @type {?} + */ + NgbModalRef.prototype.result; + /** + * @type {?} + * @private + */ + NgbModalRef.prototype._windowCmptRef; + /** + * @type {?} + * @private + */ + NgbModalRef.prototype._contentRef; + /** + * @type {?} + * @private + */ + NgbModalRef.prototype._backdropCmptRef; + /** + * @type {?} + * @private + */ + NgbModalRef.prototype._beforeDismiss; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtcmVmLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsibW9kYWwvbW9kYWwtcmVmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFhQSxNQUFNLE9BQU8sY0FBYzs7Ozs7Ozs7SUFNekIsS0FBSyxDQUFDLE1BQVksSUFBUyxDQUFDOzs7Ozs7OztJQU81QixPQUFPLENBQUMsTUFBWSxJQUFTLENBQUM7Q0FDL0I7Ozs7QUFLRCxNQUFNLE9BQU8sV0FBVzs7Ozs7OztJQW9CdEIsWUFDWSxjQUE0QyxFQUFVLFdBQXVCLEVBQzdFLGdCQUFpRCxFQUFVLGNBQXlCO1FBRHBGLG1CQUFjLEdBQWQsY0FBYyxDQUE4QjtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQzdFLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBaUM7UUFBVSxtQkFBYyxHQUFkLGNBQWMsQ0FBVztRQUM5RixjQUFjLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxTQUFTOzs7O1FBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQztRQUUzRixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksT0FBTzs7Ozs7UUFBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUM1QyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztZQUN4QixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUN4QixDQUFDLEVBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUk7OztRQUFFLEdBQUcsRUFBRSxHQUFFLENBQUMsRUFBQyxDQUFDO0lBQ25DLENBQUM7Ozs7Ozs7SUFyQkQsSUFBSSxpQkFBaUI7UUFDbkIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRTtZQUNqQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQztTQUMvQztJQUNILENBQUM7Ozs7Ozs7O0lBd0JELEtBQUssQ0FBQyxNQUFZO1FBQ2hCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1NBQzdCO0lBQ0gsQ0FBQzs7Ozs7O0lBRU8sUUFBUSxDQUFDLE1BQVk7UUFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUM5QixDQUFDOzs7Ozs7OztJQU9ELE9BQU8sQ0FBQyxNQUFZO1FBQ2xCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUN2QjtpQkFBTTs7c0JBQ0MsT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQ3JDLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUU7b0JBQzNCLE9BQU8sQ0FBQyxJQUFJOzs7O29CQUNSLE1BQU0sQ0FBQyxFQUFFO3dCQUNQLElBQUksTUFBTSxLQUFLLEtBQUssRUFBRTs0QkFDcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQzt5QkFDdkI7b0JBQ0gsQ0FBQzs7O29CQUNELEdBQUcsRUFBRSxHQUFFLENBQUMsRUFBQyxDQUFDO2lCQUNmO3FCQUFNLElBQUksT0FBTyxLQUFLLEtBQUssRUFBRTtvQkFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFDdkI7YUFDRjtTQUNGO0lBQ0gsQ0FBQzs7Ozs7SUFFTyxvQkFBb0I7O2NBQ3BCLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxhQUFhO1FBQ2pFLGNBQWMsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFOUIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7O2tCQUNuQixnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLGFBQWE7WUFDckUsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzFELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNqQztRQUVELElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRTtZQUNoRCxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNwQztRQUVELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDN0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFDMUIsQ0FBQztDQUNGOzs7Ozs7SUE3RkMsK0JBQXlDOzs7OztJQUN6Qyw4QkFBd0M7Ozs7O0lBZ0J4Qyw2QkFBcUI7Ozs7O0lBR2pCLHFDQUFvRDs7Ozs7SUFBRSxrQ0FBK0I7Ozs7O0lBQ3JGLHVDQUF5RDs7Ozs7SUFBRSxxQ0FBaUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudFJlZn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7TmdiTW9kYWxCYWNrZHJvcH0gZnJvbSAnLi9tb2RhbC1iYWNrZHJvcCc7XG5pbXBvcnQge05nYk1vZGFsV2luZG93fSBmcm9tICcuL21vZGFsLXdpbmRvdyc7XG5cbmltcG9ydCB7Q29udGVudFJlZn0gZnJvbSAnLi4vdXRpbC9wb3B1cCc7XG5cbi8qKlxuICogQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnRseSBvcGVuZWQgKGFjdGl2ZSkgbW9kYWwuXG4gKlxuICogSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MgY2FuIGJlIGluamVjdGVkIGludG8geW91ciBjb21wb25lbnQgcGFzc2VkIGFzIG1vZGFsIGNvbnRlbnQuXG4gKiBTbyB5b3UgY2FuIGAuY2xvc2UoKWAgb3IgYC5kaXNtaXNzKClgIHRoZSBtb2RhbCB3aW5kb3cgZnJvbSB5b3VyIGNvbXBvbmVudC5cbiAqL1xuZXhwb3J0IGNsYXNzIE5nYkFjdGl2ZU1vZGFsIHtcbiAgLyoqXG4gICAqIENsb3NlcyB0aGUgbW9kYWwgd2l0aCBhbiBvcHRpb25hbCBgcmVzdWx0YCB2YWx1ZS5cbiAgICpcbiAgICogVGhlIGBOZ2JNb2JhbFJlZi5yZXN1bHRgIHByb21pc2Ugd2lsbCBiZSByZXNvbHZlZCB3aXRoIHRoZSBwcm92aWRlZCB2YWx1ZS5cbiAgICovXG4gIGNsb3NlKHJlc3VsdD86IGFueSk6IHZvaWQge31cblxuICAvKipcbiAgICogRGlzbWlzc2VzIHRoZSBtb2RhbCB3aXRoIGFuIG9wdGlvbmFsIGByZWFzb25gIHZhbHVlLlxuICAgKlxuICAgKiBUaGUgYE5nYk1vZGFsUmVmLnJlc3VsdGAgcHJvbWlzZSB3aWxsIGJlIHJlamVjdGVkIHdpdGggdGhlIHByb3ZpZGVkIHZhbHVlLlxuICAgKi9cbiAgZGlzbWlzcyhyZWFzb24/OiBhbnkpOiB2b2lkIHt9XG59XG5cbi8qKlxuICogQSByZWZlcmVuY2UgdG8gdGhlIG5ld2x5IG9wZW5lZCBtb2RhbCByZXR1cm5lZCBieSB0aGUgYE5nYk1vZGFsLm9wZW4oKWAgbWV0aG9kLlxuICovXG5leHBvcnQgY2xhc3MgTmdiTW9kYWxSZWYge1xuICBwcml2YXRlIF9yZXNvbHZlOiAocmVzdWx0PzogYW55KSA9PiB2b2lkO1xuICBwcml2YXRlIF9yZWplY3Q6IChyZWFzb24/OiBhbnkpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBpbnN0YW5jZSBvZiBhIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgbW9kYWwgY29udGVudC5cbiAgICpcbiAgICogV2hlbiBhIGBUZW1wbGF0ZVJlZmAgaXMgdXNlZCBhcyB0aGUgY29udGVudCwgd2lsbCByZXR1cm4gYHVuZGVmaW5lZGAuXG4gICAqL1xuICBnZXQgY29tcG9uZW50SW5zdGFuY2UoKTogYW55IHtcbiAgICBpZiAodGhpcy5fY29udGVudFJlZi5jb21wb25lbnRSZWYpIHtcbiAgICAgIHJldHVybiB0aGlzLl9jb250ZW50UmVmLmNvbXBvbmVudFJlZi5pbnN0YW5jZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhlIHByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB3aGVuIHRoZSBtb2RhbCBpcyBjbG9zZWQgYW5kIHJlamVjdGVkIHdoZW4gdGhlIG1vZGFsIGlzIGRpc21pc3NlZC5cbiAgICovXG4gIHJlc3VsdDogUHJvbWlzZTxhbnk+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgcHJpdmF0ZSBfd2luZG93Q21wdFJlZjogQ29tcG9uZW50UmVmPE5nYk1vZGFsV2luZG93PiwgcHJpdmF0ZSBfY29udGVudFJlZjogQ29udGVudFJlZixcbiAgICAgIHByaXZhdGUgX2JhY2tkcm9wQ21wdFJlZj86IENvbXBvbmVudFJlZjxOZ2JNb2RhbEJhY2tkcm9wPiwgcHJpdmF0ZSBfYmVmb3JlRGlzbWlzcz86IEZ1bmN0aW9uKSB7XG4gICAgX3dpbmRvd0NtcHRSZWYuaW5zdGFuY2UuZGlzbWlzc0V2ZW50LnN1YnNjcmliZSgocmVhc29uOiBhbnkpID0+IHsgdGhpcy5kaXNtaXNzKHJlYXNvbik7IH0pO1xuXG4gICAgdGhpcy5yZXN1bHQgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLl9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgIHRoaXMuX3JlamVjdCA9IHJlamVjdDtcbiAgICB9KTtcbiAgICB0aGlzLnJlc3VsdC50aGVuKG51bGwsICgpID0+IHt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIG1vZGFsIHdpdGggYW4gb3B0aW9uYWwgYHJlc3VsdGAgdmFsdWUuXG4gICAqXG4gICAqIFRoZSBgTmdiTW9iYWxSZWYucmVzdWx0YCBwcm9taXNlIHdpbGwgYmUgcmVzb2x2ZWQgd2l0aCB0aGUgcHJvdmlkZWQgdmFsdWUuXG4gICAqL1xuICBjbG9zZShyZXN1bHQ/OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fd2luZG93Q21wdFJlZikge1xuICAgICAgdGhpcy5fcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgdGhpcy5fcmVtb3ZlTW9kYWxFbGVtZW50cygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2Rpc21pc3MocmVhc29uPzogYW55KSB7XG4gICAgdGhpcy5fcmVqZWN0KHJlYXNvbik7XG4gICAgdGhpcy5fcmVtb3ZlTW9kYWxFbGVtZW50cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc21pc3NlcyB0aGUgbW9kYWwgd2l0aCBhbiBvcHRpb25hbCBgcmVhc29uYCB2YWx1ZS5cbiAgICpcbiAgICogVGhlIGBOZ2JNb2RhbFJlZi5yZXN1bHRgIHByb21pc2Ugd2lsbCBiZSByZWplY3RlZCB3aXRoIHRoZSBwcm92aWRlZCB2YWx1ZS5cbiAgICovXG4gIGRpc21pc3MocmVhc29uPzogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3dpbmRvd0NtcHRSZWYpIHtcbiAgICAgIGlmICghdGhpcy5fYmVmb3JlRGlzbWlzcykge1xuICAgICAgICB0aGlzLl9kaXNtaXNzKHJlYXNvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBkaXNtaXNzID0gdGhpcy5fYmVmb3JlRGlzbWlzcygpO1xuICAgICAgICBpZiAoZGlzbWlzcyAmJiBkaXNtaXNzLnRoZW4pIHtcbiAgICAgICAgICBkaXNtaXNzLnRoZW4oXG4gICAgICAgICAgICAgIHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2Rpc21pc3MocmVhc29uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICgpID0+IHt9KTtcbiAgICAgICAgfSBlbHNlIGlmIChkaXNtaXNzICE9PSBmYWxzZSkge1xuICAgICAgICAgIHRoaXMuX2Rpc21pc3MocmVhc29uKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3JlbW92ZU1vZGFsRWxlbWVudHMoKSB7XG4gICAgY29uc3Qgd2luZG93TmF0aXZlRWwgPSB0aGlzLl93aW5kb3dDbXB0UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQ7XG4gICAgd2luZG93TmF0aXZlRWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh3aW5kb3dOYXRpdmVFbCk7XG4gICAgdGhpcy5fd2luZG93Q21wdFJlZi5kZXN0cm95KCk7XG5cbiAgICBpZiAodGhpcy5fYmFja2Ryb3BDbXB0UmVmKSB7XG4gICAgICBjb25zdCBiYWNrZHJvcE5hdGl2ZUVsID0gdGhpcy5fYmFja2Ryb3BDbXB0UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBiYWNrZHJvcE5hdGl2ZUVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYmFja2Ryb3BOYXRpdmVFbCk7XG4gICAgICB0aGlzLl9iYWNrZHJvcENtcHRSZWYuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jb250ZW50UmVmICYmIHRoaXMuX2NvbnRlbnRSZWYudmlld1JlZikge1xuICAgICAgdGhpcy5fY29udGVudFJlZi52aWV3UmVmLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLl93aW5kb3dDbXB0UmVmID0gbnVsbDtcbiAgICB0aGlzLl9iYWNrZHJvcENtcHRSZWYgPSBudWxsO1xuICAgIHRoaXMuX2NvbnRlbnRSZWYgPSBudWxsO1xuICB9XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/modal/modal-stack.js b/dist/sunbird-ui-components/esm2015/modal/modal-stack.js new file mode 100644 index 0000000..2a90cac --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/modal/modal-stack.js @@ -0,0 +1,427 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { DOCUMENT } from '@angular/common'; +import { ApplicationRef, Inject, Injectable, Injector, RendererFactory2, TemplateRef, } from '@angular/core'; +import { Subject } from 'rxjs'; +import { ngbFocusTrap } from '../util/focus-trap'; +import { ContentRef } from '../util/popup'; +import { ScrollBar } from '../util/scrollbar'; +import { isDefined, isString } from '../util/util'; +import { NgbModalBackdrop } from './modal-backdrop'; +import { NgbActiveModal, NgbModalRef } from './modal-ref'; +import { NgbModalWindow } from './modal-window'; +import * as i0 from "@angular/core"; +import * as i1 from "@angular/common"; +import * as i2 from "../util/scrollbar"; +export class NgbModalStack { + /** + * @param {?} _applicationRef + * @param {?} _injector + * @param {?} _document + * @param {?} _scrollBar + * @param {?} _rendererFactory + */ + constructor(_applicationRef, _injector, _document, _scrollBar, _rendererFactory) { + this._applicationRef = _applicationRef; + this._injector = _injector; + this._document = _document; + this._scrollBar = _scrollBar; + this._rendererFactory = _rendererFactory; + this._activeWindowCmptHasChanged = new Subject(); + this._ariaHiddenValues = new Map(); + this._backdropAttributes = ['backdropClass']; + this._modalRefs = []; + this._windowAttributes = ['ariaLabelledBy', 'backdrop', 'centered', 'keyboard', 'scrollable', 'size', 'windowClass']; + this._windowCmpts = []; + // Trap focus on active WindowCmpt + this._activeWindowCmptHasChanged.subscribe((/** + * @return {?} + */ + () => { + if (this._windowCmpts.length) { + /** @type {?} */ + const activeWindowCmpt = this._windowCmpts[this._windowCmpts.length - 1]; + ngbFocusTrap(activeWindowCmpt.location.nativeElement, this._activeWindowCmptHasChanged); + this._revertAriaHidden(); + this._setAriaHidden(activeWindowCmpt.location.nativeElement); + } + })); + } + /** + * @param {?} moduleCFR + * @param {?} contentInjector + * @param {?} content + * @param {?} options + * @return {?} + */ + open(moduleCFR, contentInjector, content, options) { + /** @type {?} */ + const containerEl = isDefined(options.container) ? this._document.querySelector(options.container) : this._document.body; + /** @type {?} */ + const renderer = this._rendererFactory.createRenderer(null, null); + /** @type {?} */ + const revertPaddingForScrollBar = this._scrollBar.compensate(); + /** @type {?} */ + const removeBodyClass = (/** + * @return {?} + */ + () => { + if (!this._modalRefs.length) { + renderer.removeClass(this._document.body, 'modal-open'); + this._revertAriaHidden(); + } + }); + if (!containerEl) { + throw new Error(`The specified modal container "${options.container || 'body'}" was not found in the DOM.`); + } + /** @type {?} */ + const activeModal = new NgbActiveModal(); + /** @type {?} */ + const contentRef = this._getContentRef(moduleCFR, options.injector || contentInjector, content, activeModal, options); + /** @type {?} */ + let backdropCmptRef = options.backdrop !== false ? this._attachBackdrop(moduleCFR, containerEl) : null; + /** @type {?} */ + let windowCmptRef = this._attachWindowComponent(moduleCFR, containerEl, contentRef); + /** @type {?} */ + let ngbModalRef = new NgbModalRef(windowCmptRef, contentRef, backdropCmptRef, options.beforeDismiss); + this._registerModalRef(ngbModalRef); + this._registerWindowCmpt(windowCmptRef); + ngbModalRef.result.then(revertPaddingForScrollBar, revertPaddingForScrollBar); + ngbModalRef.result.then(removeBodyClass, removeBodyClass); + activeModal.close = (/** + * @param {?} result + * @return {?} + */ + (result) => { ngbModalRef.close(result); }); + activeModal.dismiss = (/** + * @param {?} reason + * @return {?} + */ + (reason) => { ngbModalRef.dismiss(reason); }); + this._applyWindowOptions(windowCmptRef.instance, options); + if (this._modalRefs.length === 1) { + renderer.addClass(this._document.body, 'modal-open'); + } + if (backdropCmptRef && backdropCmptRef.instance) { + this._applyBackdropOptions(backdropCmptRef.instance, options); + } + return ngbModalRef; + } + /** + * @param {?=} reason + * @return {?} + */ + dismissAll(reason) { this._modalRefs.forEach((/** + * @param {?} ngbModalRef + * @return {?} + */ + ngbModalRef => ngbModalRef.dismiss(reason))); } + /** + * @return {?} + */ + hasOpenModals() { return this._modalRefs.length > 0; } + /** + * @private + * @param {?} moduleCFR + * @param {?} containerEl + * @return {?} + */ + _attachBackdrop(moduleCFR, containerEl) { + /** @type {?} */ + let backdropFactory = moduleCFR.resolveComponentFactory(NgbModalBackdrop); + /** @type {?} */ + let backdropCmptRef = backdropFactory.create(this._injector); + this._applicationRef.attachView(backdropCmptRef.hostView); + containerEl.appendChild(backdropCmptRef.location.nativeElement); + return backdropCmptRef; + } + /** + * @private + * @param {?} moduleCFR + * @param {?} containerEl + * @param {?} contentRef + * @return {?} + */ + _attachWindowComponent(moduleCFR, containerEl, contentRef) { + /** @type {?} */ + let windowFactory = moduleCFR.resolveComponentFactory(NgbModalWindow); + /** @type {?} */ + let windowCmptRef = windowFactory.create(this._injector, contentRef.nodes); + this._applicationRef.attachView(windowCmptRef.hostView); + containerEl.appendChild(windowCmptRef.location.nativeElement); + return windowCmptRef; + } + /** + * @private + * @param {?} windowInstance + * @param {?} options + * @return {?} + */ + _applyWindowOptions(windowInstance, options) { + this._windowAttributes.forEach((/** + * @param {?} optionName + * @return {?} + */ + (optionName) => { + if (isDefined(options[optionName])) { + windowInstance[optionName] = options[optionName]; + } + })); + } + /** + * @private + * @param {?} backdropInstance + * @param {?} options + * @return {?} + */ + _applyBackdropOptions(backdropInstance, options) { + this._backdropAttributes.forEach((/** + * @param {?} optionName + * @return {?} + */ + (optionName) => { + if (isDefined(options[optionName])) { + backdropInstance[optionName] = options[optionName]; + } + })); + } + /** + * @private + * @param {?} moduleCFR + * @param {?} contentInjector + * @param {?} content + * @param {?} activeModal + * @param {?} options + * @return {?} + */ + _getContentRef(moduleCFR, contentInjector, content, activeModal, options) { + if (!content) { + return new ContentRef([]); + } + else if (content instanceof TemplateRef) { + return this._createFromTemplateRef(content, activeModal); + } + else if (isString(content)) { + return this._createFromString(content); + } + else { + return this._createFromComponent(moduleCFR, contentInjector, content, activeModal, options); + } + } + /** + * @private + * @param {?} content + * @param {?} activeModal + * @return {?} + */ + _createFromTemplateRef(content, activeModal) { + /** @type {?} */ + const context = { + $implicit: activeModal, + /** + * @param {?} result + * @return {?} + */ + close(result) { activeModal.close(result); }, + /** + * @param {?} reason + * @return {?} + */ + dismiss(reason) { activeModal.dismiss(reason); } + }; + /** @type {?} */ + const viewRef = content.createEmbeddedView(context); + this._applicationRef.attachView(viewRef); + return new ContentRef([viewRef.rootNodes], viewRef); + } + /** + * @private + * @param {?} content + * @return {?} + */ + _createFromString(content) { + /** @type {?} */ + const component = this._document.createTextNode(`${content}`); + return new ContentRef([[component]]); + } + /** + * @private + * @param {?} moduleCFR + * @param {?} contentInjector + * @param {?} content + * @param {?} context + * @param {?} options + * @return {?} + */ + _createFromComponent(moduleCFR, contentInjector, content, context, options) { + /** @type {?} */ + const contentCmptFactory = moduleCFR.resolveComponentFactory(content); + /** @type {?} */ + const modalContentInjector = Injector.create({ providers: [{ provide: NgbActiveModal, useValue: context }], parent: contentInjector }); + /** @type {?} */ + const componentRef = contentCmptFactory.create(modalContentInjector); + /** @type {?} */ + const componentNativeEl = componentRef.location.nativeElement; + if (options.scrollable) { + ((/** @type {?} */ (componentNativeEl))).classList.add('component-host-scrollable'); + } + this._applicationRef.attachView(componentRef.hostView); + // FIXME: we should here get rid of the component nativeElement + // and use `[Array.from(componentNativeEl.childNodes)]` instead and remove the above CSS class. + return new ContentRef([[componentNativeEl]], componentRef.hostView, componentRef); + } + /** + * @private + * @param {?} element + * @return {?} + */ + _setAriaHidden(element) { + /** @type {?} */ + const parent = element.parentElement; + if (parent && element !== this._document.body) { + Array.from(parent.children).forEach((/** + * @param {?} sibling + * @return {?} + */ + sibling => { + if (sibling !== element && sibling.nodeName !== 'SCRIPT') { + this._ariaHiddenValues.set(sibling, sibling.getAttribute('aria-hidden')); + sibling.setAttribute('aria-hidden', 'true'); + } + })); + this._setAriaHidden(parent); + } + } + /** + * @private + * @return {?} + */ + _revertAriaHidden() { + this._ariaHiddenValues.forEach((/** + * @param {?} value + * @param {?} element + * @return {?} + */ + (value, element) => { + if (value) { + element.setAttribute('aria-hidden', value); + } + else { + element.removeAttribute('aria-hidden'); + } + })); + this._ariaHiddenValues.clear(); + } + /** + * @private + * @param {?} ngbModalRef + * @return {?} + */ + _registerModalRef(ngbModalRef) { + /** @type {?} */ + const unregisterModalRef = (/** + * @return {?} + */ + () => { + /** @type {?} */ + const index = this._modalRefs.indexOf(ngbModalRef); + if (index > -1) { + this._modalRefs.splice(index, 1); + } + }); + this._modalRefs.push(ngbModalRef); + ngbModalRef.result.then(unregisterModalRef, unregisterModalRef); + } + /** + * @private + * @param {?} ngbWindowCmpt + * @return {?} + */ + _registerWindowCmpt(ngbWindowCmpt) { + this._windowCmpts.push(ngbWindowCmpt); + this._activeWindowCmptHasChanged.next(); + ngbWindowCmpt.onDestroy((/** + * @return {?} + */ + () => { + /** @type {?} */ + const index = this._windowCmpts.indexOf(ngbWindowCmpt); + if (index > -1) { + this._windowCmpts.splice(index, 1); + this._activeWindowCmptHasChanged.next(); + } + })); + } +} +NgbModalStack.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } +]; +/** @nocollapse */ +NgbModalStack.ctorParameters = () => [ + { type: ApplicationRef }, + { type: Injector }, + { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }, + { type: ScrollBar }, + { type: RendererFactory2 } +]; +/** @nocollapse */ NgbModalStack.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function NgbModalStack_Factory() { return new NgbModalStack(i0.ɵɵinject(i0.ApplicationRef), i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(i1.DOCUMENT), i0.ɵɵinject(i2.ScrollBar), i0.ɵɵinject(i0.RendererFactory2)); }, token: NgbModalStack, providedIn: "root" }); +if (false) { + /** + * @type {?} + * @private + */ + NgbModalStack.prototype._activeWindowCmptHasChanged; + /** + * @type {?} + * @private + */ + NgbModalStack.prototype._ariaHiddenValues; + /** + * @type {?} + * @private + */ + NgbModalStack.prototype._backdropAttributes; + /** + * @type {?} + * @private + */ + NgbModalStack.prototype._modalRefs; + /** + * @type {?} + * @private + */ + NgbModalStack.prototype._windowAttributes; + /** + * @type {?} + * @private + */ + NgbModalStack.prototype._windowCmpts; + /** + * @type {?} + * @private + */ + NgbModalStack.prototype._applicationRef; + /** + * @type {?} + * @private + */ + NgbModalStack.prototype._injector; + /** + * @type {?} + * @private + */ + NgbModalStack.prototype._document; + /** + * @type {?} + * @private + */ + NgbModalStack.prototype._scrollBar; + /** + * @type {?} + * @private + */ + NgbModalStack.prototype._rendererFactory; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtc3RhY2suanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJtb2RhbC9tb2RhbC1zdGFjay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFDTCxjQUFjLEVBR2QsTUFBTSxFQUNOLFVBQVUsRUFDVixRQUFRLEVBQ1IsZ0JBQWdCLEVBQ2hCLFdBQVcsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRTdCLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUM1QyxPQUFPLEVBQUMsU0FBUyxFQUFFLFFBQVEsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNqRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUVsRCxPQUFPLEVBQUMsY0FBYyxFQUFFLFdBQVcsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUN4RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFHOUMsTUFBTSxPQUFPLGFBQWE7Ozs7Ozs7O0lBU3hCLFlBQ1ksZUFBK0IsRUFBVSxTQUFtQixFQUE0QixTQUFjLEVBQ3RHLFVBQXFCLEVBQVUsZ0JBQWtDO1FBRGpFLG9CQUFlLEdBQWYsZUFBZSxDQUFnQjtRQUFVLGNBQVMsR0FBVCxTQUFTLENBQVU7UUFBNEIsY0FBUyxHQUFULFNBQVMsQ0FBSztRQUN0RyxlQUFVLEdBQVYsVUFBVSxDQUFXO1FBQVUscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQVZyRSxnQ0FBMkIsR0FBRyxJQUFJ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Ozs7O0lBQ2hHLHFDQUEwRDs7Ozs7SUFHdEQsd0NBQXVDOzs7OztJQUFFLGtDQUEyQjs7Ozs7SUFBRSxrQ0FBd0M7Ozs7O0lBQzlHLG1DQUE2Qjs7Ozs7SUFBRSx5Q0FBMEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RPQ1VNRU5UfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQXBwbGljYXRpb25SZWYsXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgQ29tcG9uZW50UmVmLFxuICBJbmplY3QsXG4gIEluamVjdGFibGUsXG4gIEluamVjdG9yLFxuICBSZW5kZXJlckZhY3RvcnkyLFxuICBUZW1wbGF0ZVJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1N1YmplY3R9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge25nYkZvY3VzVHJhcH0gZnJvbSAnLi4vdXRpbC9mb2N1cy10cmFwJztcbmltcG9ydCB7Q29udGVudFJlZn0gZnJvbSAnLi4vdXRpbC9wb3B1cCc7XG5pbXBvcnQge1Njcm9sbEJhcn0gZnJvbSAnLi4vdXRpbC9zY3JvbGxiYXInO1xuaW1wb3J0IHtpc0RlZmluZWQsIGlzU3RyaW5nfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IHtOZ2JNb2RhbEJhY2tkcm9wfSBmcm9tICcuL21vZGFsLWJhY2tkcm9wJztcbmltcG9ydCB7TmdiTW9kYWxPcHRpb25zfSBmcm9tICcuL21vZGFsLWNvbmZpZyc7XG5pbXBvcnQge05nYkFjdGl2ZU1vZGFsLCBOZ2JNb2RhbFJlZn0gZnJvbSAnLi9tb2RhbC1yZWYnO1xuaW1wb3J0IHtOZ2JNb2RhbFdpbmRvd30gZnJvbSAnLi9tb2RhbC13aW5kb3cnO1xuXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBOZ2JNb2RhbFN0YWNrIHtcbiAgcHJpdmF0ZSBfYWN0aXZlV2luZG93Q21wdEhhc0NoYW5nZWQgPSBuZXcgU3ViamVjdCgpO1xuICBwcml2YXRlIF9hcmlhSGlkZGVuVmFsdWVzOiBNYXA8RWxlbWVudCwgc3RyaW5nPiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSBfYmFja2Ryb3BBdHRyaWJ1dGVzID0gWydiYWNrZHJvcENsYXNzJ107XG4gIHByaXZhdGUgX21vZGFsUmVmczogTmdiTW9kYWxSZWZbXSA9IFtdO1xuICBwcml2YXRlIF93aW5kb3dBdHRyaWJ1dGVzID1cbiAgICAgIFsnYXJpYUxhYmVsbGVkQnknLCAnYmFja2Ryb3AnLCAnY2VudGVyZWQnLCAna2V5Ym9hcmQnLCAnc2Nyb2xsYWJsZScsICdzaXplJywgJ3dpbmRvd0NsYXNzJ107XG4gIHByaXZhdGUgX3dpbmRvd0NtcHRzOiBDb21wb25lbnRSZWY8TmdiTW9kYWxXaW5kb3c+W10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgIHByaXZhdGUgX2FwcGxpY2F0aW9uUmVmOiBBcHBsaWNhdGlvblJlZiwgcHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yLCBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIF9kb2N1bWVudDogYW55LFxuICAgICAgcHJpdmF0ZSBfc2Nyb2xsQmFyOiBTY3JvbGxCYXIsIHByaXZhdGUgX3JlbmRlcmVyRmFjdG9yeTogUmVuZGVyZXJGYWN0b3J5Mikge1xuICAgIC8vIFRyYXAgZm9jdXMgb24gYWN0aXZlIFdpbmRvd0NtcHRcbiAgICB0aGlzLl9hY3RpdmVXaW5kb3dDbXB0SGFzQ2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX3dpbmRvd0NtcHRzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBhY3RpdmVXaW5kb3dDbXB0ID0gdGhpcy5fd2luZG93Q21wdHNbdGhpcy5fd2luZG93Q21wdHMubGVuZ3RoIC0gMV07XG4gICAgICAgIG5nYkZvY3VzVHJhcChhY3RpdmVXaW5kb3dDbXB0LmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQsIHRoaXMuX2FjdGl2ZVdpbmRvd0NtcHRIYXNDaGFuZ2VkKTtcbiAgICAgICAgdGhpcy5fcmV2ZXJ0QXJpYUhpZGRlbigpO1xuICAgICAgICB0aGlzLl9zZXRBcmlhSGlkZGVuKGFjdGl2ZVdpbmRvd0NtcHQubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvcGVuKG1vZHVsZUNGUjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBjb250ZW50SW5qZWN0b3I6IEluamVjdG9yLCBjb250ZW50OiBhbnksIG9wdGlvbnMpOiBOZ2JNb2RhbFJlZiB7XG4gICAgY29uc3QgY29udGFpbmVyRWwgPVxuICAgICAgICBpc0RlZmluZWQob3B0aW9ucy5jb250YWluZXIpID8gdGhpcy5fZG9jdW1lbnQucXVlcnlTZWxlY3RvcihvcHRpb25zLmNvbnRhaW5lcikgOiB0aGlzLl9kb2N1bWVudC5ib2R5O1xuICAgIGNvbnN0IHJlbmRlcmVyID0gdGhpcy5fcmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKG51bGwsIG51bGwpO1xuXG4gICAgY29uc3QgcmV2ZXJ0UGFkZGluZ0ZvclNjcm9sbEJhciA9IHRoaXMuX3Njcm9sbEJhci5jb21wZW5zYXRlKCk7XG4gICAgY29uc3QgcmVtb3ZlQm9keUNsYXNzID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9tb2RhbFJlZnMubGVuZ3RoKSB7XG4gICAgICAgIHJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuX2RvY3VtZW50LmJvZHksICdtb2RhbC1vcGVuJyk7XG4gICAgICAgIHRoaXMuX3JldmVydEFyaWFIaWRkZW4oKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKCFjb250YWluZXJFbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgc3BlY2lmaWVkIG1vZGFsIGNvbnRhaW5lciBcIiR7b3B0aW9ucy5jb250YWluZXIgfHwgJ2JvZHknfVwiIHdhcyBub3QgZm91bmQgaW4gdGhlIERPTS5gKTtcbiAgICB9XG5cbiAgICBjb25zdCBhY3RpdmVNb2RhbCA9IG5ldyBOZ2JBY3RpdmVNb2RhbCgpO1xuICAgIGNvbnN0IGNvbnRlbnRSZWYgPVxuICAgICAgICB0aGlzLl9nZXRDb250ZW50UmVmKG1vZHVsZUNGUiwgb3B0aW9ucy5pbmplY3RvciB8fCBjb250ZW50SW5qZWN0b3IsIGNvbnRlbnQsIGFjdGl2ZU1vZGFsLCBvcHRpb25zKTtcblxuICAgIGxldCBiYWNrZHJvcENtcHRSZWY6IENvbXBvbmVudFJlZjxOZ2JNb2RhbEJhY2tkcm9wPiA9XG4gICAgICAgIG9wdGlvbnMuYmFja2Ryb3AgIT09IGZhbHNlID8gdGhpcy5fYXR0YWNoQmFja2Ryb3AobW9kdWxlQ0ZSLCBjb250YWluZXJFbCkgOiBudWxsO1xuICAgIGxldCB3aW5kb3dDbXB0UmVmOiBDb21wb25lbnRSZWY8TmdiTW9kYWxXaW5kb3c+ID0gdGhpcy5fYXR0YWNoV2luZG93Q29tcG9uZW50KG1vZHVsZUNGUiwgY29udGFpbmVyRWwsIGNvbnRlbnRSZWYpO1xuICAgIGxldCBuZ2JNb2RhbFJlZjogTmdiTW9kYWxSZWYgPSBuZXcgTmdiTW9kYWxSZWYod2luZG93Q21wdFJlZiwgY29udGVudFJlZiwgYmFja2Ryb3BDbXB0UmVmLCBvcHRpb25zLmJlZm9yZURpc21pc3MpO1xuXG4gICAgdGhpcy5fcmVnaXN0ZXJNb2RhbFJlZihuZ2JNb2RhbFJlZik7XG4gICAgdGhpcy5fcmVnaXN0ZXJXaW5kb3dDbXB0KHdpbmRvd0NtcHRSZWYpO1xuICAgIG5nYk1vZGFsUmVmLnJlc3VsdC50aGVuKHJldmVydFBhZGRpbmdGb3JTY3JvbGxCYXIsIHJldmVydFBhZGRpbmdGb3JTY3JvbGxCYXIpO1xuICAgIG5nYk1vZGFsUmVmLnJlc3VsdC50aGVuKHJlbW92ZUJvZHlDbGFzcywgcmVtb3ZlQm9keUNsYXNzKTtcbiAgICBhY3RpdmVNb2RhbC5jbG9zZSA9IChyZXN1bHQ6IGFueSkgPT4geyBuZ2JNb2RhbFJlZi5jbG9zZShyZXN1bHQpOyB9O1xuICAgIGFjdGl2ZU1vZGFsLmRpc21pc3MgPSAocmVhc29uOiBhbnkpID0+IHsgbmdiTW9kYWxSZWYuZGlzbWlzcyhyZWFzb24pOyB9O1xuXG4gICAgdGhpcy5fYXBwbHlXaW5kb3dPcHRpb25zKHdpbmRvd0NtcHRSZWYuaW5zdGFuY2UsIG9wdGlvbnMpO1xuICAgIGlmICh0aGlzLl9tb2RhbFJlZnMubGVuZ3RoID09PSAxKSB7XG4gICAgICByZW5kZXJlci5hZGRDbGFzcyh0aGlzLl9kb2N1bWVudC5ib2R5LCAnbW9kYWwtb3BlbicpO1xuICAgIH1cblxuICAgIGlmIChiYWNrZHJvcENtcHRSZWYgJiYgYmFja2Ryb3BDbXB0UmVmLmluc3RhbmNlKSB7XG4gICAgICB0aGlzLl9hcHBseUJhY2tkcm9wT3B0aW9ucyhiYWNrZHJvcENtcHRSZWYuaW5zdGFuY2UsIG9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gbmdiTW9kYWxSZWY7XG4gIH1cblxuICBkaXNtaXNzQWxsKHJlYXNvbj86IGFueSkgeyB0aGlzLl9tb2RhbFJlZnMuZm9yRWFjaChuZ2JNb2RhbFJlZiA9PiBuZ2JNb2RhbFJlZi5kaXNtaXNzKHJlYXNvbikpOyB9XG5cbiAgaGFzT3Blbk1vZGFscygpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX21vZGFsUmVmcy5sZW5ndGggPiAwOyB9XG5cbiAgcHJpdmF0ZSBfYXR0YWNoQmFja2Ryb3AobW9kdWxlQ0ZSOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIGNvbnRhaW5lckVsOiBhbnkpOiBDb21wb25lbnRSZWY8TmdiTW9kYWxCYWNrZHJvcD4ge1xuICAgIGxldCBiYWNrZHJvcEZhY3RvcnkgPSBtb2R1bGVDRlIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoTmdiTW9kYWxCYWNrZHJvcCk7XG4gICAgbGV0IGJhY2tkcm9wQ21wdFJlZiA9IGJhY2tkcm9wRmFjdG9yeS5jcmVhdGUodGhpcy5faW5qZWN0b3IpO1xuICAgIHRoaXMuX2FwcGxpY2F0aW9uUmVmLmF0dGFjaFZpZXcoYmFja2Ryb3BDbXB0UmVmLmhvc3RWaWV3KTtcbiAgICBjb250YWluZXJFbC5hcHBlbmRDaGlsZChiYWNrZHJvcENtcHRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XG4gICAgcmV0dXJuIGJhY2tkcm9wQ21wdFJlZjtcbiAgfVxuXG4gIHByaXZhdGUgX2F0dGFjaFdpbmRvd0NvbXBvbmVudChtb2R1bGVDRlI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgY29udGFpbmVyRWw6IGFueSwgY29udGVudFJlZjogYW55KTpcbiAgICAgIENvbXBvbmVudFJlZjxOZ2JNb2RhbFdpbmRvdz4ge1xuICAgIGxldCB3aW5kb3dGYWN0b3J5ID0gbW9kdWxlQ0ZSLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KE5nYk1vZGFsV2luZG93KTtcbiAgICBsZXQgd2luZG93Q21wdFJlZiA9IHdpbmRvd0ZhY3RvcnkuY3JlYXRlKHRoaXMuX2luamVjdG9yLCBjb250ZW50UmVmLm5vZGVzKTtcbiAgICB0aGlzLl9hcHBsaWNhdGlvblJlZi5hdHRhY2hWaWV3KHdpbmRvd0NtcHRSZWYuaG9zdFZpZXcpO1xuICAgIGNvbnRhaW5lckVsLmFwcGVuZENoaWxkKHdpbmRvd0NtcHRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XG4gICAgcmV0dXJuIHdpbmRvd0NtcHRSZWY7XG4gIH1cblxuICBwcml2YXRlIF9hcHBseVdpbmRvd09wdGlvbnMod2luZG93SW5zdGFuY2U6IE5nYk1vZGFsV2luZG93LCBvcHRpb25zOiBPYmplY3QpOiB2b2lkIHtcbiAgICB0aGlzLl93aW5kb3dBdHRyaWJ1dGVzLmZvckVhY2goKG9wdGlvbk5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKGlzRGVmaW5lZChvcHRpb25zW29wdGlvbk5hbWVdKSkge1xuICAgICAgICB3aW5kb3dJbnN0YW5jZVtvcHRpb25OYW1lXSA9IG9wdGlvbnNbb3B0aW9uTmFtZV07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9hcHBseUJhY2tkcm9wT3B0aW9ucyhiYWNrZHJvcEluc3RhbmNlOiBOZ2JNb2RhbEJhY2tkcm9wLCBvcHRpb25zOiBPYmplY3QpOiB2b2lkIHtcbiAgICB0aGlzLl9iYWNrZHJvcEF0dHJpYnV0ZXMuZm9yRWFjaCgob3B0aW9uTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoaXNEZWZpbmVkKG9wdGlvbnNbb3B0aW9uTmFtZV0pKSB7XG4gICAgICAgIGJhY2tkcm9wSW5zdGFuY2Vbb3B0aW9uTmFtZV0gPSBvcHRpb25zW29wdGlvbk5hbWVdO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0Q29udGVudFJlZihcbiAgICAgIG1vZHVsZUNGUjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBjb250ZW50SW5qZWN0b3I6IEluamVjdG9yLCBjb250ZW50OiBhbnksIGFjdGl2ZU1vZGFsOiBOZ2JBY3RpdmVNb2RhbCxcbiAgICAgIG9wdGlvbnM6IE5nYk1vZGFsT3B0aW9ucyk6IENvbnRlbnRSZWYge1xuICAgIGlmICghY29udGVudCkge1xuICAgICAgcmV0dXJuIG5ldyBDb250ZW50UmVmKFtdKTtcbiAgICB9IGVsc2UgaWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZikge1xuICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUZyb21UZW1wbGF0ZVJlZihjb250ZW50LCBhY3RpdmVNb2RhbCk7XG4gICAgfSBlbHNlIGlmIChpc1N0cmluZyhjb250ZW50KSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUZyb21TdHJpbmcoY29udGVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLl9jcmVhdGVGcm9tQ29tcG9uZW50KG1vZHVsZUNGUiwgY29udGVudEluamVjdG9yLCBjb250ZW50LCBhY3RpdmVNb2RhbCwgb3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfY3JlYXRlRnJvbVRlbXBsYXRlUmVmKGNvbnRlbnQ6IFRlbXBsYXRlUmVmPGFueT4sIGFjdGl2ZU1vZGFsOiBOZ2JBY3RpdmVNb2RhbCk6IENvbnRlbnRSZWYge1xuICAgIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgICAkaW1wbGljaXQ6IGFjdGl2ZU1vZGFsLFxuICAgICAgY2xvc2UocmVzdWx0KSB7IGFjdGl2ZU1vZGFsLmNsb3NlKHJlc3VsdCk7IH0sXG4gICAgICBkaXNtaXNzKHJlYXNvbikgeyBhY3RpdmVNb2RhbC5kaXNtaXNzKHJlYXNvbik7IH1cbiAgICB9O1xuICAgIGNvbnN0IHZpZXdSZWYgPSBjb250ZW50LmNyZWF0ZUVtYmVkZGVkVmlldyhjb250ZXh0KTtcbiAgICB0aGlzLl9hcHBsaWNhdGlvblJlZi5hdHRhY2hWaWV3KHZpZXdSZWYpO1xuICAgIHJldHVybiBuZXcgQ29udGVudFJlZihbdmlld1JlZi5yb290Tm9kZXNdLCB2aWV3UmVmKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NyZWF0ZUZyb21TdHJpbmcoY29udGVudDogc3RyaW5nKTogQ29udGVudFJlZiB7XG4gICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5fZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoYCR7Y29udGVudH1gKTtcbiAgICByZXR1cm4gbmV3IENvbnRlbnRSZWYoW1tjb21wb25lbnRdXSk7XG4gIH1cblxuICBwcml2YXRlIF9jcmVhdGVGcm9tQ29tcG9uZW50KFxuICAgICAgbW9kdWxlQ0ZSOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIGNvbnRlbnRJbmplY3RvcjogSW5qZWN0b3IsIGNvbnRlbnQ6IGFueSwgY29udGV4dDogTmdiQWN0aXZlTW9kYWwsXG4gICAgICBvcHRpb25zOiBOZ2JNb2RhbE9wdGlvbnMpOiBDb250ZW50UmVmIHtcbiAgICBjb25zdCBjb250ZW50Q21wdEZhY3RvcnkgPSBtb2R1bGVDRlIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoY29udGVudCk7XG4gICAgY29uc3QgbW9kYWxDb250ZW50SW5qZWN0b3IgPVxuICAgICAgICBJbmplY3Rvci5jcmVhdGUoe3Byb3ZpZGVyczogW3twcm92aWRlOiBOZ2JBY3RpdmVNb2RhbCwgdXNlVmFsdWU6IGNvbnRleHR9XSwgcGFyZW50OiBjb250ZW50SW5qZWN0b3J9KTtcbiAgICBjb25zdCBjb21wb25lbnRSZWYgPSBjb250ZW50Q21wdEZhY3RvcnkuY3JlYXRlKG1vZGFsQ29udGVudEluamVjdG9yKTtcbiAgICBjb25zdCBjb21wb25lbnROYXRpdmVFbCA9IGNvbXBvbmVudFJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50O1xuICAgIGlmIChvcHRpb25zLnNjcm9sbGFibGUpIHtcbiAgICAgIChjb21wb25lbnROYXRpdmVFbCBhcyBIVE1MRWxlbWVudCkuY2xhc3NMaXN0LmFkZCgnY29tcG9uZW50LWhvc3Qtc2Nyb2xsYWJsZScpO1xuICAgIH1cbiAgICB0aGlzLl9hcHBsaWNhdGlvblJlZi5hdHRhY2hWaWV3KGNvbXBvbmVudFJlZi5ob3N0Vmlldyk7XG4gICAgLy8gRklYTUU6IHdlIHNob3VsZCBoZXJlIGdldCByaWQgb2YgdGhlIGNvbXBvbmVudCBuYXRpdmVFbGVtZW50XG4gICAgLy8gYW5kIHVzZSBgW0FycmF5LmZyb20oY29tcG9uZW50TmF0aXZlRWwuY2hpbGROb2RlcyldYCBpbnN0ZWFkIGFuZCByZW1vdmUgdGhlIGFib3ZlIENTUyBjbGFzcy5cbiAgICByZXR1cm4gbmV3IENvbnRlbnRSZWYoW1tjb21wb25lbnROYXRpdmVFbF1dLCBjb21wb25lbnRSZWYuaG9zdFZpZXcsIGNvbXBvbmVudFJlZik7XG4gIH1cblxuICBwcml2YXRlIF9zZXRBcmlhSGlkZGVuKGVsZW1lbnQ6IEVsZW1lbnQpIHtcbiAgICBjb25zdCBwYXJlbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgaWYgKHBhcmVudCAmJiBlbGVtZW50ICE9PSB0aGlzLl9kb2N1bWVudC5ib2R5KSB7XG4gICAgICBBcnJheS5mcm9tKHBhcmVudC5jaGlsZHJlbikuZm9yRWFjaChzaWJsaW5nID0+IHtcbiAgICAgICAgaWYgKHNpYmxpbmcgIT09IGVsZW1lbnQgJiYgc2libGluZy5ub2RlTmFtZSAhPT0gJ1NDUklQVCcpIHtcbiAgICAgICAgICB0aGlzLl9hcmlhSGlkZGVuVmFsdWVzLnNldChzaWJsaW5nLCBzaWJsaW5nLmdldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKSk7XG4gICAgICAgICAgc2libGluZy5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuX3NldEFyaWFIaWRkZW4ocGFyZW50KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9yZXZlcnRBcmlhSGlkZGVuKCkge1xuICAgIHRoaXMuX2FyaWFIaWRkZW5WYWx1ZXMuZm9yRWFjaCgodmFsdWUsIGVsZW1lbnQpID0+IHtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCB2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLl9hcmlhSGlkZGVuVmFsdWVzLmNsZWFyKCk7XG4gIH1cblxuICBwcml2YXRlIF9yZWdpc3Rlck1vZGFsUmVmKG5nYk1vZGFsUmVmOiBOZ2JNb2RhbFJlZikge1xuICAgIGNvbnN0IHVucmVnaXN0ZXJNb2RhbFJlZiA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fbW9kYWxSZWZzLmluZGV4T2YobmdiTW9kYWxSZWYpO1xuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgdGhpcy5fbW9kYWxSZWZzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLl9tb2RhbFJlZnMucHVzaChuZ2JNb2RhbFJlZik7XG4gICAgbmdiTW9kYWxSZWYucmVzdWx0LnRoZW4odW5yZWdpc3Rlck1vZGFsUmVmLCB1bnJlZ2lzdGVyTW9kYWxSZWYpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVnaXN0ZXJXaW5kb3dDbXB0KG5nYldpbmRvd0NtcHQ6IENvbXBvbmVudFJlZjxOZ2JNb2RhbFdpbmRvdz4pIHtcbiAgICB0aGlzLl93aW5kb3dDbXB0cy5wdXNoKG5nYldpbmRvd0NtcHQpO1xuICAgIHRoaXMuX2FjdGl2ZVdpbmRvd0NtcHRIYXNDaGFuZ2VkLm5leHQoKTtcblxuICAgIG5nYldpbmRvd0NtcHQub25EZXN0cm95KCgpID0+IHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fd2luZG93Q21wdHMuaW5kZXhPZihuZ2JXaW5kb3dDbXB0KTtcbiAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgIHRoaXMuX3dpbmRvd0NtcHRzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVdpbmRvd0NtcHRIYXNDaGFuZ2VkLm5leHQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/modal/modal-window.js b/dist/sunbird-ui-components/esm2015/modal/modal-window.js new file mode 100644 index 0000000..abd1c16 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/modal/modal-window.js @@ -0,0 +1,152 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { DOCUMENT } from '@angular/common'; +import { Component, ElementRef, EventEmitter, Inject, Input, Output, ViewEncapsulation, } from '@angular/core'; +import { getFocusableBoundaryElements } from '../util/focus-trap'; +import { ModalDismissReasons } from './modal-dismiss-reasons'; +export class NgbModalWindow { + /** + * @param {?} _document + * @param {?} _elRef + */ + constructor(_document, _elRef) { + this._document = _document; + this._elRef = _elRef; + this.backdrop = true; + this.keyboard = true; + this.dismissEvent = new EventEmitter(); + } + /** + * @param {?} $event + * @return {?} + */ + backdropClick($event) { + if (this.backdrop === true && this._elRef.nativeElement === $event.target) { + this.dismiss(ModalDismissReasons.BACKDROP_CLICK); + } + } + /** + * @param {?} $event + * @return {?} + */ + escKey($event) { + if (this.keyboard && !$event.defaultPrevented) { + this.dismiss(ModalDismissReasons.ESC); + } + } + /** + * @param {?} reason + * @return {?} + */ + dismiss(reason) { this.dismissEvent.emit(reason); } + /** + * @return {?} + */ + ngOnInit() { this._elWithFocus = this._document.activeElement; } + /** + * @return {?} + */ + ngAfterViewInit() { + if (!this._elRef.nativeElement.contains(document.activeElement)) { + /** @type {?} */ + const autoFocusable = (/** @type {?} */ (this._elRef.nativeElement.querySelector(`[ngbAutofocus]`))); + /** @type {?} */ + const firstFocusable = getFocusableBoundaryElements(this._elRef.nativeElement)[0]; + /** @type {?} */ + const elementToFocus = autoFocusable || firstFocusable || this._elRef.nativeElement; + elementToFocus.focus(); + } + } + /** + * @return {?} + */ + ngOnDestroy() { + /** @type {?} */ + const body = this._document.body; + /** @type {?} */ + const elWithFocus = this._elWithFocus; + /** @type {?} */ + let elementToFocus; + if (elWithFocus && elWithFocus['focus'] && body.contains(elWithFocus)) { + elementToFocus = elWithFocus; + } + else { + elementToFocus = body; + } + elementToFocus.focus(); + this._elWithFocus = null; + } +} +NgbModalWindow.decorators = [ + { type: Component, args: [{ + selector: 'ngb-modal-window', + host: { + '[class]': '"modal fade show d-block" + (windowClass ? " " + windowClass : "")', + 'role': 'dialog', + 'tabindex': '-1', + '(keyup.esc)': 'escKey($event)', + '(click)': 'backdropClick($event)', + '[attr.aria-modal]': 'true', + '[attr.aria-labelledby]': 'ariaLabelledBy', + }, + template: ` +
+ +
+ `, + encapsulation: ViewEncapsulation.None, + styles: ["ngb-modal-window .component-host-scrollable{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;overflow:hidden}"] + }] } +]; +/** @nocollapse */ +NgbModalWindow.ctorParameters = () => [ + { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }, + { type: ElementRef } +]; +NgbModalWindow.propDecorators = { + ariaLabelledBy: [{ type: Input }], + backdrop: [{ type: Input }], + centered: [{ type: Input }], + keyboard: [{ type: Input }], + scrollable: [{ type: Input }], + size: [{ type: Input }], + windowClass: [{ type: Input }], + dismissEvent: [{ type: Output, args: ['dismiss',] }] +}; +if (false) { + /** + * @type {?} + * @private + */ + NgbModalWindow.prototype._elWithFocus; + /** @type {?} */ + NgbModalWindow.prototype.ariaLabelledBy; + /** @type {?} */ + NgbModalWindow.prototype.backdrop; + /** @type {?} */ + NgbModalWindow.prototype.centered; + /** @type {?} */ + NgbModalWindow.prototype.keyboard; + /** @type {?} */ + NgbModalWindow.prototype.scrollable; + /** @type {?} */ + NgbModalWindow.prototype.size; + /** @type {?} */ + NgbModalWindow.prototype.windowClass; + /** @type {?} */ + NgbModalWindow.prototype.dismissEvent; + /** + * @type {?} + * @private + */ + NgbModalWindow.prototype._document; + /** + * @type {?} + * @private + */ + NgbModalWindow.prototype._elRef; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtd2luZG93LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsibW9kYWwvbW9kYWwtd2luZG93LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUVMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsTUFBTSxFQUNOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUMsNEJBQTRCLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRSxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQXNCNUQsTUFBTSxPQUFPLGNBQWM7Ozs7O0lBY3pCLFlBQXNDLFNBQWMsRUFBVSxNQUErQjtRQUF2RCxjQUFTLEdBQVQsU0FBUyxDQUFLO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBeUI7UUFUcEYsYUFBUSxHQUFxQixJQUFJLENBQUM7UUFFbEMsYUFBUSxHQUFHLElBQUksQ0FBQztRQUtOLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUUyQyxDQUFDOzs7OztJQUVqRyxhQUFhLENBQUMsTUFBTTtRQUNsQixJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxLQUFLLE1BQU0sQ0FBQyxNQUFNLEVBQUU7WUFDekUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUNsRDtJQUNILENBQUM7Ozs7O0lBRUQsTUFBTSxDQUFDLE1BQU07UUFDWCxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUU7WUFDN0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN2QztJQUNILENBQUM7Ozs7O0lBRUQsT0FBTyxDQUFDLE1BQU0sSUFBVSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Ozs7SUFFekQsUUFBUSxLQUFLLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDOzs7O0lBRWhFLGVBQWU7UUFDYixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRTs7a0JBQ3pELGFBQWEsR0FBRyxtQkFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsRUFBZTs7a0JBQ3hGLGNBQWMsR0FBRyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7a0JBRTNFLGNBQWMsR0FBRyxhQUFhLElBQUksY0FBYyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYTtZQUNuRixjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDeEI7SUFDSCxDQUFDOzs7O0lBRUQsV0FBVzs7Y0FDSCxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJOztjQUMxQixXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVk7O1lBRWpDLGNBQWM7UUFDbEIsSUFBSSxXQUFXLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDckUsY0FBYyxHQUFHLFdBQVcsQ0FBQztTQUM5QjthQUFNO1lBQ0wsY0FBYyxHQUFHLElBQUksQ0FBQztTQUN2QjtRQUNELGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztJQUMzQixDQUFDOzs7WUExRUYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxrQkFBa0I7Z0JBQzVCLElBQUksRUFBRTtvQkFDSixTQUFTLEVBQUUsb0VBQW9FO29CQUMvRSxNQUFNLEVBQUUsUUFBUTtvQkFDaEIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLGFBQWEsRUFBRSxnQkFBZ0I7b0JBQy9CLFNBQVMsRUFBRSx1QkFBdUI7b0JBQ2xDLG1CQUFtQixFQUFFLE1BQU07b0JBQzNCLHdCQUF3QixFQUFFLGdCQUFnQjtpQkFDM0M7Z0JBQ0QsUUFBUSxFQUFFOzs7OztLQUtQO2dCQUNILGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJOzthQUV0Qzs7Ozs0Q0FlYyxNQUFNLFNBQUMsUUFBUTtZQS9DNUIsVUFBVTs7OzZCQXFDVCxLQUFLO3VCQUNMLEtBQUs7dUJBQ0wsS0FBSzt1QkFDTCxLQUFLO3lCQUNMLEtBQUs7bUJBQ0wsS0FBSzswQkFDTCxLQUFLOzJCQUVMLE1BQU0sU0FBQyxTQUFTOzs7Ozs7O0lBVmpCLHNDQUE4Qjs7SUFFOUIsd0NBQWdDOztJQUNoQyxrQ0FBMkM7O0lBQzNDLGtDQUEwQjs7SUFDMUIsa0NBQXlCOztJQUN6QixvQ0FBNEI7O0lBQzVCLDhCQUFzQjs7SUFDdEIscUNBQTZCOztJQUU3QixzQ0FBcUQ7Ozs7O0lBRXpDLG1DQUF3Qzs7Ozs7SUFBRSxnQ0FBdUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RPQ1VNRU5UfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtnZXRGb2N1c2FibGVCb3VuZGFyeUVsZW1lbnRzfSBmcm9tICcuLi91dGlsL2ZvY3VzLXRyYXAnO1xuaW1wb3J0IHtNb2RhbERpc21pc3NSZWFzb25zfSBmcm9tICcuL21vZGFsLWRpc21pc3MtcmVhc29ucyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25nYi1tb2RhbC13aW5kb3cnLFxuICBob3N0OiB7XG4gICAgJ1tjbGFzc10nOiAnXCJtb2RhbCBmYWRlIHNob3cgZC1ibG9ja1wiICsgKHdpbmRvd0NsYXNzID8gXCIgXCIgKyB3aW5kb3dDbGFzcyA6IFwiXCIpJyxcbiAgICAncm9sZSc6ICdkaWFsb2cnLFxuICAgICd0YWJpbmRleCc6ICctMScsXG4gICAgJyhrZXl1cC5lc2MpJzogJ2VzY0tleSgkZXZlbnQpJyxcbiAgICAnKGNsaWNrKSc6ICdiYWNrZHJvcENsaWNrKCRldmVudCknLFxuICAgICdbYXR0ci5hcmlhLW1vZGFsXSc6ICd0cnVlJyxcbiAgICAnW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XSc6ICdhcmlhTGFiZWxsZWRCeScsXG4gIH0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBbY2xhc3NdPVwiJ21vZGFsLWRpYWxvZycgKyAoc2l6ZSA/ICcgbW9kYWwtJyArIHNpemUgOiAnJykgKyAoY2VudGVyZWQgPyAnIG1vZGFsLWRpYWxvZy1jZW50ZXJlZCcgOiAnJykgK1xuICAgICAoc2Nyb2xsYWJsZSA/ICcgbW9kYWwtZGlhbG9nLXNjcm9sbGFibGUnIDogJycpXCIgcm9sZT1cImRvY3VtZW50XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PjwvZGl2PlxuICAgIDwvZGl2PlxuICAgIGAsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHN0eWxlVXJsczogWycuL21vZGFsLnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBOZ2JNb2RhbFdpbmRvdyBpbXBsZW1lbnRzIE9uSW5pdCxcbiAgICBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIF9lbFdpdGhGb2N1czogRWxlbWVudDsgIC8vIGVsZW1lbnQgdGhhdCBpcyBmb2N1c2VkIHByaW9yIHRvIG1vZGFsIG9wZW5pbmdcblxuICBASW5wdXQoKSBhcmlhTGFiZWxsZWRCeTogc3RyaW5nO1xuICBASW5wdXQoKSBiYWNrZHJvcDogYm9vbGVhbiB8IHN0cmluZyA9IHRydWU7XG4gIEBJbnB1dCgpIGNlbnRlcmVkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGtleWJvYXJkID0gdHJ1ZTtcbiAgQElucHV0KCkgc2Nyb2xsYWJsZTogc3RyaW5nO1xuICBASW5wdXQoKSBzaXplOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHdpbmRvd0NsYXNzOiBzdHJpbmc7XG5cbiAgQE91dHB1dCgnZGlzbWlzcycpIGRpc21pc3NFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIF9kb2N1bWVudDogYW55LCBwcml2YXRlIF9lbFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pIHt9XG5cbiAgYmFja2Ryb3BDbGljaygkZXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5iYWNrZHJvcCA9PT0gdHJ1ZSAmJiB0aGlzLl9lbFJlZi5uYXRpdmVFbGVtZW50ID09PSAkZXZlbnQudGFyZ2V0KSB7XG4gICAgICB0aGlzLmRpc21pc3MoTW9kYWxEaXNtaXNzUmVhc29ucy5CQUNLRFJPUF9DTElDSyk7XG4gICAgfVxuICB9XG5cbiAgZXNjS2V5KCRldmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmtleWJvYXJkICYmICEkZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgdGhpcy5kaXNtaXNzKE1vZGFsRGlzbWlzc1JlYXNvbnMuRVNDKTtcbiAgICB9XG4gIH1cblxuICBkaXNtaXNzKHJlYXNvbik6IHZvaWQgeyB0aGlzLmRpc21pc3NFdmVudC5lbWl0KHJlYXNvbik7IH1cblxuICBuZ09uSW5pdCgpIHsgdGhpcy5fZWxXaXRoRm9jdXMgPSB0aGlzLl9kb2N1bWVudC5hY3RpdmVFbGVtZW50OyB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGlmICghdGhpcy5fZWxSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSkge1xuICAgICAgY29uc3QgYXV0b0ZvY3VzYWJsZSA9IHRoaXMuX2VsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihgW25nYkF1dG9mb2N1c11gKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGNvbnN0IGZpcnN0Rm9jdXNhYmxlID0gZ2V0Rm9jdXNhYmxlQm91bmRhcnlFbGVtZW50cyh0aGlzLl9lbFJlZi5uYXRpdmVFbGVtZW50KVswXTtcblxuICAgICAgY29uc3QgZWxlbWVudFRvRm9jdXMgPSBhdXRvRm9jdXNhYmxlIHx8IGZpcnN0Rm9jdXNhYmxlIHx8IHRoaXMuX2VsUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBlbGVtZW50VG9Gb2N1cy5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGNvbnN0IGJvZHkgPSB0aGlzLl9kb2N1bWVudC5ib2R5O1xuICAgIGNvbnN0IGVsV2l0aEZvY3VzID0gdGhpcy5fZWxXaXRoRm9jdXM7XG5cbiAgICBsZXQgZWxlbWVudFRvRm9jdXM7XG4gICAgaWYgKGVsV2l0aEZvY3VzICYmIGVsV2l0aEZvY3VzWydmb2N1cyddICYmIGJvZHkuY29udGFpbnMoZWxXaXRoRm9jdXMpKSB7XG4gICAgICBlbGVtZW50VG9Gb2N1cyA9IGVsV2l0aEZvY3VzO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbGVtZW50VG9Gb2N1cyA9IGJvZHk7XG4gICAgfVxuICAgIGVsZW1lbnRUb0ZvY3VzLmZvY3VzKCk7XG4gICAgdGhpcy5fZWxXaXRoRm9jdXMgPSBudWxsO1xuICB9XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/modal/modal.js b/dist/sunbird-ui-components/esm2015/modal/modal.js new file mode 100644 index 0000000..cd4fd5a --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/modal/modal.js @@ -0,0 +1,96 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Injectable, Injector, ComponentFactoryResolver } from '@angular/core'; +import { NgbModalConfig } from './modal-config'; +import { NgbModalStack } from './modal-stack'; +import * as i0 from "@angular/core"; +import * as i1 from "./modal-stack"; +import * as i2 from "./modal-config"; +/** + * A service for opening modal windows. + * + * Creating a modal is straightforward: create a component or a template and pass it as an argument to + * the `.open()` method. + */ +export class NgbModal { + /** + * @param {?} _moduleCFR + * @param {?} _injector + * @param {?} _modalStack + * @param {?} _config + */ + constructor(_moduleCFR, _injector, _modalStack, _config) { + this._moduleCFR = _moduleCFR; + this._injector = _injector; + this._modalStack = _modalStack; + this._config = _config; + } + /** + * Opens a new modal window with the specified content and supplied options. + * + * Content can be provided as a `TemplateRef` or a component type. If you pass a component type as content, + * then instances of those components can be injected with an instance of the `NgbActiveModal` class. You can then + * use `NgbActiveModal` methods to close / dismiss modals from "inside" of your component. + * + * Also see the [`NgbModalOptions`](#/components/modal/api#NgbModalOptions) for the list of supported options. + * @param {?} content + * @param {?=} options + * @return {?} + */ + open(content, options = {}) { + /** @type {?} */ + const combinedOptions = Object.assign({}, this._config, options); + return this._modalStack.open(this._moduleCFR, this._injector, content, combinedOptions); + } + /** + * Dismisses all currently displayed modal windows with the supplied reason. + * + * \@since 3.1.0 + * @param {?=} reason + * @return {?} + */ + dismissAll(reason) { this._modalStack.dismissAll(reason); } + /** + * Indicates if there are currently any open modal windows in the application. + * + * \@since 3.3.0 + * @return {?} + */ + hasOpenModals() { return this._modalStack.hasOpenModals(); } +} +NgbModal.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } +]; +/** @nocollapse */ +NgbModal.ctorParameters = () => [ + { type: ComponentFactoryResolver }, + { type: Injector }, + { type: NgbModalStack }, + { type: NgbModalConfig } +]; +/** @nocollapse */ NgbModal.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function NgbModal_Factory() { return new NgbModal(i0.ɵɵinject(i0.ComponentFactoryResolver), i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(i1.NgbModalStack), i0.ɵɵinject(i2.NgbModalConfig)); }, token: NgbModal, providedIn: "root" }); +if (false) { + /** + * @type {?} + * @private + */ + NgbModal.prototype._moduleCFR; + /** + * @type {?} + * @private + */ + NgbModal.prototype._injector; + /** + * @type {?} + * @private + */ + NgbModal.prototype._modalStack; + /** + * @type {?} + * @private + */ + NgbModal.prototype._config; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJtb2RhbC9tb2RhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsd0JBQXdCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFN0UsT0FBTyxFQUFrQixjQUFjLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUvRCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7O0FBUzVDLE1BQU0sT0FBTyxRQUFROzs7Ozs7O0lBQ25CLFlBQ1ksVUFBb0MsRUFBVSxTQUFtQixFQUFVLFdBQTBCLEVBQ3JHLE9BQXVCO1FBRHZCLGVBQVUsR0FBVixVQUFVLENBQTBCO1FBQVUsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFlO1FBQ3JHLFlBQU8sR0FBUCxPQUFPLENBQWdCO0lBQUcsQ0FBQzs7Ozs7Ozs7Ozs7OztJQVd2QyxJQUFJLENBQUMsT0FBWSxFQUFFLFVBQTJCLEVBQUU7O2NBQ3hDLGVBQWUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQztRQUNoRSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDMUYsQ0FBQzs7Ozs7Ozs7SUFPRCxVQUFVLENBQUMsTUFBWSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzs7Ozs7OztJQU9qRSxhQUFhLEtBQWMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQzs7O1lBaEN0RSxVQUFVLFNBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDOzs7O1lBWkYsd0JBQXdCO1lBQWxDLFFBQVE7WUFJcEIsYUFBYTtZQUZJLGNBQWM7Ozs7Ozs7O0lBYWpDLDhCQUE0Qzs7Ozs7SUFBRSw2QkFBMkI7Ozs7O0lBQUUsK0JBQWtDOzs7OztJQUM3RywyQkFBK0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIEluamVjdG9yLCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge05nYk1vZGFsT3B0aW9ucywgTmdiTW9kYWxDb25maWd9IGZyb20gJy4vbW9kYWwtY29uZmlnJztcbmltcG9ydCB7TmdiTW9kYWxSZWZ9IGZyb20gJy4vbW9kYWwtcmVmJztcbmltcG9ydCB7TmdiTW9kYWxTdGFja30gZnJvbSAnLi9tb2RhbC1zdGFjayc7XG5cbi8qKlxuICogQSBzZXJ2aWNlIGZvciBvcGVuaW5nIG1vZGFsIHdpbmRvd3MuXG4gKlxuICogQ3JlYXRpbmcgYSBtb2RhbCBpcyBzdHJhaWdodGZvcndhcmQ6IGNyZWF0ZSBhIGNvbXBvbmVudCBvciBhIHRlbXBsYXRlIGFuZCBwYXNzIGl0IGFzIGFuIGFyZ3VtZW50IHRvXG4gKiB0aGUgYC5vcGVuKClgIG1ldGhvZC5cbiAqL1xuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgTmdiTW9kYWwge1xuICBjb25zdHJ1Y3RvcihcbiAgICAgIHByaXZhdGUgX21vZHVsZUNGUjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IsIHByaXZhdGUgX21vZGFsU3RhY2s6IE5nYk1vZGFsU3RhY2ssXG4gICAgICBwcml2YXRlIF9jb25maWc6IE5nYk1vZGFsQ29uZmlnKSB7fVxuXG4gIC8qKlxuICAgKiBPcGVucyBhIG5ldyBtb2RhbCB3aW5kb3cgd2l0aCB0aGUgc3BlY2lmaWVkIGNvbnRlbnQgYW5kIHN1cHBsaWVkIG9wdGlvbnMuXG4gICAqXG4gICAqIENvbnRlbnQgY2FuIGJlIHByb3ZpZGVkIGFzIGEgYFRlbXBsYXRlUmVmYCBvciBhIGNvbXBvbmVudCB0eXBlLiBJZiB5b3UgcGFzcyBhIGNvbXBvbmVudCB0eXBlIGFzIGNvbnRlbnQsXG4gICAqIHRoZW4gaW5zdGFuY2VzIG9mIHRob3NlIGNvbXBvbmVudHMgY2FuIGJlIGluamVjdGVkIHdpdGggYW4gaW5zdGFuY2Ugb2YgdGhlIGBOZ2JBY3RpdmVNb2RhbGAgY2xhc3MuIFlvdSBjYW4gdGhlblxuICAgKiB1c2UgYE5nYkFjdGl2ZU1vZGFsYCBtZXRob2RzIHRvIGNsb3NlIC8gZGlzbWlzcyBtb2RhbHMgZnJvbSBcImluc2lkZVwiIG9mIHlvdXIgY29tcG9uZW50LlxuICAgKlxuICAgKiBBbHNvIHNlZSB0aGUgW2BOZ2JNb2RhbE9wdGlvbnNgXSgjL2NvbXBvbmVudHMvbW9kYWwvYXBpI05nYk1vZGFsT3B0aW9ucykgZm9yIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBvcHRpb25zLlxuICAgKi9cbiAgb3Blbihjb250ZW50OiBhbnksIG9wdGlvbnM6IE5nYk1vZGFsT3B0aW9ucyA9IHt9KTogTmdiTW9kYWxSZWYge1xuICAgIGNvbnN0IGNvbWJpbmVkT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX2NvbmZpZywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMuX21vZGFsU3RhY2sub3Blbih0aGlzLl9tb2R1bGVDRlIsIHRoaXMuX2luamVjdG9yLCBjb250ZW50LCBjb21iaW5lZE9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc21pc3NlcyBhbGwgY3VycmVudGx5IGRpc3BsYXllZCBtb2RhbCB3aW5kb3dzIHdpdGggdGhlIHN1cHBsaWVkIHJlYXNvbi5cbiAgICpcbiAgICogQHNpbmNlIDMuMS4wXG4gICAqL1xuICBkaXNtaXNzQWxsKHJlYXNvbj86IGFueSkgeyB0aGlzLl9tb2RhbFN0YWNrLmRpc21pc3NBbGwocmVhc29uKTsgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlcmUgYXJlIGN1cnJlbnRseSBhbnkgb3BlbiBtb2RhbCB3aW5kb3dzIGluIHRoZSBhcHBsaWNhdGlvbi5cbiAgICpcbiAgICogQHNpbmNlIDMuMy4wXG4gICAqL1xuICBoYXNPcGVuTW9kYWxzKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fbW9kYWxTdGFjay5oYXNPcGVuTW9kYWxzKCk7IH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/modal/modal.module.js b/dist/sunbird-ui-components/esm2015/modal/modal.module.js new file mode 100644 index 0000000..e526df9 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/modal/modal.module.js @@ -0,0 +1,22 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgModule } from '@angular/core'; +import { NgbModal } from './modal'; +import { NgbModalBackdrop } from './modal-backdrop'; +import { NgbModalWindow } from './modal-window'; +export { NgbModal } from './modal'; +export { NgbModalConfig } from './modal-config'; +export { NgbModalRef, NgbActiveModal } from './modal-ref'; +export { ModalDismissReasons } from './modal-dismiss-reasons'; +export class NgbModalModule { +} +NgbModalModule.decorators = [ + { type: NgModule, args: [{ + declarations: [NgbModalBackdrop, NgbModalWindow], + entryComponents: [NgbModalBackdrop, NgbModalWindow], + providers: [NgbModal] + },] } +]; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwubW9kdWxlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsibW9kYWwvbW9kYWwubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXZDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDakMsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTlDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDakMsT0FBTyxFQUFDLGNBQWMsRUFBa0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRCxPQUFPLEVBQUMsV0FBVyxFQUFFLGNBQWMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUN4RCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQU81RCxNQUFNLE9BQU8sY0FBYzs7O1lBTDFCLFFBQVEsU0FBQztnQkFDUixZQUFZLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxjQUFjLENBQUM7Z0JBQ2hELGVBQWUsRUFBRSxDQUFDLGdCQUFnQixFQUFFLGNBQWMsQ0FBQztnQkFDbkQsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDO2FBQ3RCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7TmdiTW9kYWx9IGZyb20gJy4vbW9kYWwnO1xuaW1wb3J0IHtOZ2JNb2RhbEJhY2tkcm9wfSBmcm9tICcuL21vZGFsLWJhY2tkcm9wJztcbmltcG9ydCB7TmdiTW9kYWxXaW5kb3d9IGZyb20gJy4vbW9kYWwtd2luZG93JztcblxuZXhwb3J0IHtOZ2JNb2RhbH0gZnJvbSAnLi9tb2RhbCc7XG5leHBvcnQge05nYk1vZGFsQ29uZmlnLCBOZ2JNb2RhbE9wdGlvbnN9IGZyb20gJy4vbW9kYWwtY29uZmlnJztcbmV4cG9ydCB7TmdiTW9kYWxSZWYsIE5nYkFjdGl2ZU1vZGFsfSBmcm9tICcuL21vZGFsLXJlZic7XG5leHBvcnQge01vZGFsRGlzbWlzc1JlYXNvbnN9IGZyb20gJy4vbW9kYWwtZGlzbWlzcy1yZWFzb25zJztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbTmdiTW9kYWxCYWNrZHJvcCwgTmdiTW9kYWxXaW5kb3ddLFxuICBlbnRyeUNvbXBvbmVudHM6IFtOZ2JNb2RhbEJhY2tkcm9wLCBOZ2JNb2RhbFdpbmRvd10sXG4gIHByb3ZpZGVyczogW05nYk1vZGFsXVxufSlcbmV4cG9ydCBjbGFzcyBOZ2JNb2RhbE1vZHVsZSB7XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/pagination/pagination-config.js b/dist/sunbird-ui-components/esm2015/pagination/pagination-config.js new file mode 100644 index 0000000..92dca9d --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/pagination/pagination-config.js @@ -0,0 +1,46 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Injectable } from '@angular/core'; +import * as i0 from "@angular/core"; +/** + * A configuration service for the [`NgbPagination`](#/components/pagination/api#NgbPagination) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the paginations used in the application. + */ +export class NgbPaginationConfig { + constructor() { + this.disabled = false; + this.boundaryLinks = false; + this.directionLinks = true; + this.ellipses = true; + this.maxSize = 0; + this.pageSize = 10; + this.rotate = false; + } +} +NgbPaginationConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } +]; +/** @nocollapse */ NgbPaginationConfig.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function NgbPaginationConfig_Factory() { return new NgbPaginationConfig(); }, token: NgbPaginationConfig, providedIn: "root" }); +if (false) { + /** @type {?} */ + NgbPaginationConfig.prototype.disabled; + /** @type {?} */ + NgbPaginationConfig.prototype.boundaryLinks; + /** @type {?} */ + NgbPaginationConfig.prototype.directionLinks; + /** @type {?} */ + NgbPaginationConfig.prototype.ellipses; + /** @type {?} */ + NgbPaginationConfig.prototype.maxSize; + /** @type {?} */ + NgbPaginationConfig.prototype.pageSize; + /** @type {?} */ + NgbPaginationConfig.prototype.rotate; + /** @type {?} */ + NgbPaginationConfig.prototype.size; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi1jb25maWcuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJwYWdpbmF0aW9uL3BhZ2luYXRpb24tY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQVN6QyxNQUFNLE9BQU8sbUJBQW1CO0lBRGhDO1FBRUUsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUN0QixtQkFBYyxHQUFHLElBQUksQ0FBQztRQUN0QixhQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLFlBQU8sR0FBRyxDQUFDLENBQUM7UUFDWixhQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2QsV0FBTSxHQUFHLEtBQUssQ0FBQztLQUVoQjs7O1lBVkEsVUFBVSxTQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQzs7Ozs7SUFFOUIsdUNBQWlCOztJQUNqQiw0Q0FBc0I7O0lBQ3RCLDZDQUFzQjs7SUFDdEIsdUNBQWdCOztJQUNoQixzQ0FBWTs7SUFDWix1Q0FBYzs7SUFDZCxxQ0FBZTs7SUFDZixtQ0FBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIEEgY29uZmlndXJhdGlvbiBzZXJ2aWNlIGZvciB0aGUgW2BOZ2JQYWdpbmF0aW9uYF0oIy9jb21wb25lbnRzL3BhZ2luYXRpb24vYXBpI05nYlBhZ2luYXRpb24pIGNvbXBvbmVudC5cbiAqXG4gKiBZb3UgY2FuIGluamVjdCB0aGlzIHNlcnZpY2UsIHR5cGljYWxseSBpbiB5b3VyIHJvb3QgY29tcG9uZW50LCBhbmQgY3VzdG9taXplIHRoZSB2YWx1ZXMgb2YgaXRzIHByb3BlcnRpZXMgaW5cbiAqIG9yZGVyIHRvIHByb3ZpZGUgZGVmYXVsdCB2YWx1ZXMgZm9yIGFsbCB0aGUgcGFnaW5hdGlvbnMgdXNlZCBpbiB0aGUgYXBwbGljYXRpb24uXG4gKi9cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIE5nYlBhZ2luYXRpb25Db25maWcge1xuICBkaXNhYmxlZCA9IGZhbHNlO1xuICBib3VuZGFyeUxpbmtzID0gZmFsc2U7XG4gIGRpcmVjdGlvbkxpbmtzID0gdHJ1ZTtcbiAgZWxsaXBzZXMgPSB0cnVlO1xuICBtYXhTaXplID0gMDtcbiAgcGFnZVNpemUgPSAxMDtcbiAgcm90YXRlID0gZmFsc2U7XG4gIHNpemU6ICdzbScgfCAnbGcnO1xufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/pagination/pagination.js b/dist/sunbird-ui-components/esm2015/pagination/pagination.js new file mode 100644 index 0000000..3b4c017 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/pagination/pagination.js @@ -0,0 +1,551 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Component, ContentChild, Directive, EventEmitter, Input, Output, ChangeDetectionStrategy, TemplateRef } from '@angular/core'; +import { getValueInRange, isNumber } from '../util/util'; +import { NgbPaginationConfig } from './pagination-config'; +/** + * A context for the + * * `NgbPaginationFirst` + * * `NgbPaginationPrevious` + * * `NgbPaginationNext` + * * `NgbPaginationLast` + * * `NgbPaginationEllipsis` + * + * link templates in case you want to override one. + * + * \@since 4.1.0 + * @record + */ +export function NgbPaginationLinkContext() { } +if (false) { + /** + * The currently selected page number + * @type {?} + */ + NgbPaginationLinkContext.prototype.currentPage; + /** + * If `true`, the current link is disabled + * @type {?} + */ + NgbPaginationLinkContext.prototype.disabled; +} +/** + * A context for the `NgbPaginationNumber` link template in case you want to override one. + * + * Extends `NgbPaginationLinkContext`. + * + * \@since 4.1.0 + * @record + */ +export function NgbPaginationNumberContext() { } +if (false) { + /** + * The page number, displayed by the current page link. + * @type {?} + */ + NgbPaginationNumberContext.prototype.$implicit; +} +/** + * A directive to match the 'ellipsis' link template + * + * \@since 4.1.0 + */ +export class NgbPaginationEllipsis { + /** + * @param {?} templateRef + */ + constructor(templateRef) { + this.templateRef = templateRef; + } +} +NgbPaginationEllipsis.decorators = [ + { type: Directive, args: [{ selector: 'ng-template[ngbPaginationEllipsis]' },] } +]; +/** @nocollapse */ +NgbPaginationEllipsis.ctorParameters = () => [ + { type: TemplateRef } +]; +if (false) { + /** @type {?} */ + NgbPaginationEllipsis.prototype.templateRef; +} +/** + * A directive to match the 'first' link template + * + * \@since 4.1.0 + */ +export class NgbPaginationFirst { + /** + * @param {?} templateRef + */ + constructor(templateRef) { + this.templateRef = templateRef; + } +} +NgbPaginationFirst.decorators = [ + { type: Directive, args: [{ selector: 'ng-template[ngbPaginationFirst]' },] } +]; +/** @nocollapse */ +NgbPaginationFirst.ctorParameters = () => [ + { type: TemplateRef } +]; +if (false) { + /** @type {?} */ + NgbPaginationFirst.prototype.templateRef; +} +/** + * A directive to match the 'last' link template + * + * \@since 4.1.0 + */ +export class NgbPaginationLast { + /** + * @param {?} templateRef + */ + constructor(templateRef) { + this.templateRef = templateRef; + } +} +NgbPaginationLast.decorators = [ + { type: Directive, args: [{ selector: 'ng-template[ngbPaginationLast]' },] } +]; +/** @nocollapse */ +NgbPaginationLast.ctorParameters = () => [ + { type: TemplateRef } +]; +if (false) { + /** @type {?} */ + NgbPaginationLast.prototype.templateRef; +} +/** + * A directive to match the 'next' link template + * + * \@since 4.1.0 + */ +export class NgbPaginationNext { + /** + * @param {?} templateRef + */ + constructor(templateRef) { + this.templateRef = templateRef; + } +} +NgbPaginationNext.decorators = [ + { type: Directive, args: [{ selector: 'ng-template[ngbPaginationNext]' },] } +]; +/** @nocollapse */ +NgbPaginationNext.ctorParameters = () => [ + { type: TemplateRef } +]; +if (false) { + /** @type {?} */ + NgbPaginationNext.prototype.templateRef; +} +/** + * A directive to match the page 'number' link template + * + * \@since 4.1.0 + */ +export class NgbPaginationNumber { + /** + * @param {?} templateRef + */ + constructor(templateRef) { + this.templateRef = templateRef; + } +} +NgbPaginationNumber.decorators = [ + { type: Directive, args: [{ selector: 'ng-template[ngbPaginationNumber]' },] } +]; +/** @nocollapse */ +NgbPaginationNumber.ctorParameters = () => [ + { type: TemplateRef } +]; +if (false) { + /** @type {?} */ + NgbPaginationNumber.prototype.templateRef; +} +/** + * A directive to match the 'previous' link template + * + * \@since 4.1.0 + */ +export class NgbPaginationPrevious { + /** + * @param {?} templateRef + */ + constructor(templateRef) { + this.templateRef = templateRef; + } +} +NgbPaginationPrevious.decorators = [ + { type: Directive, args: [{ selector: 'ng-template[ngbPaginationPrevious]' },] } +]; +/** @nocollapse */ +NgbPaginationPrevious.ctorParameters = () => [ + { type: TemplateRef } +]; +if (false) { + /** @type {?} */ + NgbPaginationPrevious.prototype.templateRef; +} +/** + * A component that displays page numbers and allows to customize them in several ways. + */ +export class NgbPagination { + /** + * @param {?} config + */ + constructor(config) { + this.pageCount = 0; + this.pages = []; + /** + * The current page. + * + * Page numbers start with `1`. + */ + this.page = 1; + /** + * An event fired when the page is changed. Will fire only if collection size is set and all values are valid. + * + * Event payload is the number of the newly selected page. + * + * Page numbers start with `1`. + */ + this.pageChange = new EventEmitter(true); + this.disabled = config.disabled; + this.boundaryLinks = config.boundaryLinks; + this.directionLinks = config.directionLinks; + this.ellipses = config.ellipses; + this.maxSize = config.maxSize; + this.pageSize = config.pageSize; + this.rotate = config.rotate; + this.size = config.size; + } + /** + * @return {?} + */ + hasPrevious() { return this.page > 1; } + /** + * @return {?} + */ + hasNext() { return this.page < this.pageCount; } + /** + * @return {?} + */ + nextDisabled() { return !this.hasNext() || this.disabled; } + /** + * @return {?} + */ + previousDisabled() { return !this.hasPrevious() || this.disabled; } + /** + * @param {?} pageNumber + * @return {?} + */ + selectPage(pageNumber) { this._updatePages(pageNumber); } + /** + * @param {?} changes + * @return {?} + */ + ngOnChanges(changes) { this._updatePages(this.page); } + /** + * @param {?} pageNumber + * @return {?} + */ + isEllipsis(pageNumber) { return pageNumber === -1; } + /** + * Appends ellipses and first/last page number to the displayed pages + * @private + * @param {?} start + * @param {?} end + * @return {?} + */ + _applyEllipses(start, end) { + if (this.ellipses) { + if (start > 0) { + if (start > 1) { + this.pages.unshift(-1); + } + this.pages.unshift(1); + } + if (end < this.pageCount) { + if (end < (this.pageCount - 1)) { + this.pages.push(-1); + } + this.pages.push(this.pageCount); + } + } + } + /** + * Rotates page numbers based on maxSize items visible. + * Currently selected page stays in the middle: + * + * Ex. for selected page = 6: + * [5,*6*,7] for maxSize = 3 + * [4,5,*6*,7] for maxSize = 4 + * @private + * @return {?} + */ + _applyRotation() { + /** @type {?} */ + let start = 0; + /** @type {?} */ + let end = this.pageCount; + /** @type {?} */ + let leftOffset = Math.floor(this.maxSize / 2); + /** @type {?} */ + let rightOffset = this.maxSize % 2 === 0 ? leftOffset - 1 : leftOffset; + if (this.page <= leftOffset) { + // very beginning, no rotation -> [0..maxSize] + end = this.maxSize; + } + else if (this.pageCount - this.page < leftOffset) { + // very end, no rotation -> [len-maxSize..len] + start = this.pageCount - this.maxSize; + } + else { + // rotate + start = this.page - leftOffset - 1; + end = this.page + rightOffset; + } + return [start, end]; + } + /** + * Paginates page numbers based on maxSize items per page. + * @private + * @return {?} + */ + _applyPagination() { + /** @type {?} */ + let page = Math.ceil(this.page / this.maxSize) - 1; + /** @type {?} */ + let start = page * this.maxSize; + /** @type {?} */ + let end = start + this.maxSize; + return [start, end]; + } + /** + * @private + * @param {?} newPageNo + * @return {?} + */ + _setPageInRange(newPageNo) { + /** @type {?} */ + const prevPageNo = this.page; + this.page = getValueInRange(newPageNo, this.pageCount, 1); + if (this.page !== prevPageNo && isNumber(this.collectionSize)) { + this.pageChange.emit(this.page); + } + } + /** + * @private + * @param {?} newPage + * @return {?} + */ + _updatePages(newPage) { + this.pageCount = Math.ceil(this.collectionSize / this.pageSize); + if (!isNumber(this.pageCount)) { + this.pageCount = 0; + } + // fill-in model needed to render pages + this.pages.length = 0; + for (let i = 1; i <= this.pageCount; i++) { + this.pages.push(i); + } + // set page within 1..max range + this._setPageInRange(newPage); + // apply maxSize if necessary + if (this.maxSize > 0 && this.pageCount > this.maxSize) { + /** @type {?} */ + let start = 0; + /** @type {?} */ + let end = this.pageCount; + // either paginating or rotating page numbers + if (this.rotate) { + [start, end] = this._applyRotation(); + } + else { + [start, end] = this._applyPagination(); + } + this.pages = this.pages.slice(start, end); + // adding ellipses + this._applyEllipses(start, end); + } + } +} +NgbPagination.decorators = [ + { type: Component, args: [{ + selector: 'ngb-pagination', + changeDetection: ChangeDetectionStrategy.OnPush, + host: { 'role': 'navigation' }, + template: ` + + + + + ... + + {{ page }} + (current) + + + ` + }] } +]; +/** @nocollapse */ +NgbPagination.ctorParameters = () => [ + { type: NgbPaginationConfig } +]; +NgbPagination.propDecorators = { + tplEllipsis: [{ type: ContentChild, args: [NgbPaginationEllipsis, { static: false },] }], + tplFirst: [{ type: ContentChild, args: [NgbPaginationFirst, { static: false },] }], + tplLast: [{ type: ContentChild, args: [NgbPaginationLast, { static: false },] }], + tplNext: [{ type: ContentChild, args: [NgbPaginationNext, { static: false },] }], + tplNumber: [{ type: ContentChild, args: [NgbPaginationNumber, { static: false },] }], + tplPrevious: [{ type: ContentChild, args: [NgbPaginationPrevious, { static: false },] }], + disabled: [{ type: Input }], + boundaryLinks: [{ type: Input }], + directionLinks: [{ type: Input }], + ellipses: [{ type: Input }], + rotate: [{ type: Input }], + collectionSize: [{ type: Input }], + maxSize: [{ type: Input }], + page: [{ type: Input }], + pageSize: [{ type: Input }], + pageChange: [{ type: Output }], + size: [{ type: Input }] +}; +if (false) { + /** @type {?} */ + NgbPagination.prototype.pageCount; + /** @type {?} */ + NgbPagination.prototype.pages; + /** @type {?} */ + NgbPagination.prototype.tplEllipsis; + /** @type {?} */ + NgbPagination.prototype.tplFirst; + /** @type {?} */ + NgbPagination.prototype.tplLast; + /** @type {?} */ + NgbPagination.prototype.tplNext; + /** @type {?} */ + NgbPagination.prototype.tplNumber; + /** @type {?} */ + NgbPagination.prototype.tplPrevious; + /** + * If `true`, pagination links will be disabled. + * @type {?} + */ + NgbPagination.prototype.disabled; + /** + * If `true`, the "First" and "Last" page links are shown. + * @type {?} + */ + NgbPagination.prototype.boundaryLinks; + /** + * If `true`, the "Next" and "Previous" page links are shown. + * @type {?} + */ + NgbPagination.prototype.directionLinks; + /** + * If `true`, the ellipsis symbols and first/last page numbers will be shown when `maxSize` > number of pages. + * @type {?} + */ + NgbPagination.prototype.ellipses; + /** + * Whether to rotate pages when `maxSize` > number of pages. + * + * The current page always stays in the middle if `true`. + * @type {?} + */ + NgbPagination.prototype.rotate; + /** + * The number of items in your paginated collection. + * + * Note, that this is not the number of pages. Page numbers are calculated dynamically based on + * `collectionSize` and `pageSize`. Ex. if you have 100 items in your collection and displaying 20 items per page, + * you'll end up with 5 pages. + * @type {?} + */ + NgbPagination.prototype.collectionSize; + /** + * The maximum number of pages to display. + * @type {?} + */ + NgbPagination.prototype.maxSize; + /** + * The current page. + * + * Page numbers start with `1`. + * @type {?} + */ + NgbPagination.prototype.page; + /** + * The number of items per page. + * @type {?} + */ + NgbPagination.prototype.pageSize; + /** + * An event fired when the page is changed. Will fire only if collection size is set and all values are valid. + * + * Event payload is the number of the newly selected page. + * + * Page numbers start with `1`. + * @type {?} + */ + NgbPagination.prototype.pageChange; + /** + * The pagination display size. + * + * Bootstrap currently supports small and large sizes. + * @type {?} + */ + NgbPagination.prototype.size; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbInBhZ2luYXRpb24vcGFnaW5hdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUVOLHVCQUF1QixFQUV2QixXQUFXLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGVBQWUsRUFBRSxRQUFRLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDdkQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBY3hELDhDQVVDOzs7Ozs7SUFOQywrQ0FBb0I7Ozs7O0lBS3BCLDRDQUFrQjs7Ozs7Ozs7OztBQVVwQixnREFLQzs7Ozs7O0lBREMsK0NBQWtCOzs7Ozs7O0FBU3BCLE1BQU0sT0FBTyxxQkFBcUI7Ozs7SUFDaEMsWUFBbUIsV0FBa0Q7UUFBbEQsZ0JBQVcsR0FBWCxXQUFXLENBQXVDO0lBQUcsQ0FBQzs7O1lBRjFFLFNBQVMsU0FBQyxFQUFDLFFBQVEsRUFBRSxvQ0FBb0MsRUFBQzs7OztZQWhEekQsV0FBVzs7OztJQWtEQyw0Q0FBeUQ7Ozs7Ozs7QUFTdkUsTUFBTSxPQUFPLGtCQUFrQjs7OztJQUM3QixZQUFtQixXQUFrRDtRQUFsRCxnQkFBVyxHQUFYLFdBQVcsQ0FBdUM7SUFBRyxDQUFDOzs7WUFGMUUsU0FBUyxTQUFDLEVBQUMsUUFBUSxFQUFFLGlDQUFpQyxFQUFDOzs7O1lBMUR0RCxXQUFXOzs7O0lBNERDLHlDQUF5RDs7Ozs7OztBQVN2RSxNQUFNLE9BQU8saUJBQWlCOzs7O0lBQzVCLFlBQW1CLFdBQWtEO1FBQWxELGdCQUFXLEdBQVgsV0FBVyxDQUF1QztJQUFHLENBQUM7OztZQUYxRSxTQUFTLFNBQUMsRUFBQyxRQUFRLEVBQUUsZ0NBQWdDLEVBQUM7Ozs7WUFwRXJELFdBQVc7Ozs7SUFzRUMsd0NBQXlEOzs7Ozs7O0FBU3ZFLE1BQU0sT0FBTyxpQkFBaUI7Ozs7SUFDNUIsWUFBbUIsV0FBa0Q7UUFBbEQsZ0JBQVcsR0FBWCxXQUFXLENBQXVDO0lBQUcsQ0FBQzs7O1lBRjFFLFNBQVMsU0FBQyxFQUFDLFFBQVEsRUFBRSxnQ0FBZ0MsRUFBQzs7OztZQTlFckQsV0FBVzs7OztJQWdGQyx3Q0FBeUQ7Ozs7Ozs7QUFTdkUsTUFBTSxPQUFPLG1CQUFtQjs7OztJQUM5QixZQUFtQixXQUFvRDtRQUFwRCxnQkFBVyxHQUFYLFdBQVcsQ0FBeUM7SUFBRyxDQUFDOzs7WUFGNUUsU0FBUyxTQUFDLEVBQUMsUUFBUSxFQUFFLGtDQUFrQyxFQUFDOzs7O1lBeEZ2RCxXQUFXOzs7O0lBMEZDLDBDQUEyRDs7Ozs7OztBQVN6RSxNQUFNLE9BQU8scUJBQXFCOzs7O0lBQ2hDLFlBQW1CLFdBQWtEO1FBQWxELGdCQUFXLEdBQVgsV0FBVyxDQUF1QztJQUFHLENBQUM7OztZQUYxRSxTQUFTLFNBQUMsRUFBQyxRQUFRLEVBQUUsb0NBQW9DLEVBQUM7Ozs7WUFsR3pELFdBQVc7Ozs7SUFvR0MsNENBQXlEOzs7OztBQW1FdkUsTUFBTSxPQUFPLGFBQWE7Ozs7SUFnRnhCLFlBQVksTUFBMkI7UUEvRXZDLGNBQVMsR0FBRyxDQUFDLENBQUM7UUFDZCxVQUFLLEdBQWEsRUFBRSxDQUFDOzs7Ozs7UUF1RFosU0FBSSxHQUFHLENBQUMsQ0FBQzs7Ozs7Ozs7UUFjUixlQUFVLEdBQUcsSUFBSSxZQUFZLENBQVMsSUFBSSxDQUFDLENBQUM7UUFVcEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQztRQUMxQyxJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUM7UUFDNUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUM5QixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDaEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQzVCLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztJQUMxQixDQUFDOzs7O0lBRUQsV0FBVyxLQUFjLE9BQU8sSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7O0lBRWhELE9BQU8sS0FBYyxPQUFPLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7Ozs7SUFFekQsWUFBWSxLQUFjLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Ozs7SUFFcEUsZ0JBQWdCLEtBQWMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQzs7Ozs7SUFFNUUsVUFBVSxDQUFDLFVBQWtCLElBQVUsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7Ozs7O0lBRXZFLFdBQVcsQ0FBQyxPQUFzQixJQUFVLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzs7Ozs7SUFFM0UsVUFBVSxDQUFDLFVBQVUsSUFBYSxPQUFPLFVBQVUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Ozs7Ozs7O0lBS3JELGNBQWMsQ0FBQyxLQUFhLEVBQUUsR0FBVztRQUMvQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO2dCQUNiLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtvQkFDYixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUN4QjtnQkFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN2QjtZQUNELElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ3hCLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsRUFBRTtvQkFDOUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDckI7Z0JBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQ2pDO1NBQ0Y7SUFDSCxDQUFDOzs7Ozs7Ozs7OztJQVVPLGNBQWM7O1lBQ2hCLEtBQUssR0FBRyxDQUFDOztZQUNULEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUzs7WUFDcEIsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7O1lBQ3pDLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVU7UUFFdEUsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLFVBQVUsRUFBRTtZQUMzQiw4Q0FBOEM7WUFDOUMsR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7U0FDcEI7YUFBTSxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLEVBQUU7WUFDbEQsOENBQThDO1lBQzlDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7U0FDdkM7YUFBTTtZQUNMLFNBQVM7WUFDVCxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLEdBQUcsQ0FBQyxDQUFDO1lBQ25DLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQztTQUMvQjtRQUVELE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDdEIsQ0FBQzs7Ozs7O0lBS08sZ0JBQWdCOztZQUNsQixJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDOztZQUM5QyxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPOztZQUMzQixHQUFHLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPO1FBRTlCLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDdEIsQ0FBQzs7Ozs7O0lBRU8sZUFBZSxDQUFDLFNBQVM7O2NBQ3pCLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSTtRQUM1QixJQUFJLENBQUMsSUFBSSxHQUFHLGVBQWUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUUxRCxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssVUFBVSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFDN0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQzs7Ozs7O0lBRU8sWUFBWSxDQUFDLE9BQWU7UUFDbEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRWhFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQzdCLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1NBQ3BCO1FBRUQsdUNBQXVDO1FBQ3ZDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUN0QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4QyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNwQjtRQUVELCtCQUErQjtRQUMvQixJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTlCLDZCQUE2QjtRQUM3QixJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRTs7Z0JBQ2pELEtBQUssR0FBRyxDQUFDOztnQkFDVCxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVM7WUFFeEIsNkNBQTZDO1lBQzdDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDZixDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7YUFDdEM7aUJBQU07Z0JBQ0wsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7YUFDeEM7WUFFRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztZQUUxQyxrQkFBa0I7WUFDbEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDakM7SUFDSCxDQUFDOzs7WUE1UUYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxnQkFBZ0I7Z0JBQzFCLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2dCQUMvQyxJQUFJLEVBQUUsRUFBQyxNQUFNLEVBQUUsWUFBWSxFQUFDO2dCQUM1QixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1RFQ7YUFDRjs7OztZQW5LTyxtQkFBbUI7OzswQkF3S3hCLFlBQVksU0FBQyxxQkFBcUIsRUFBRSxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUM7dUJBQ25ELFlBQVksU0FBQyxrQkFBa0IsRUFBRSxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUM7c0JBQ2hELFlBQVksU0FBQyxpQkFBaUIsRUFBRSxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUM7c0JBQy9DLFlBQVksU0FBQyxpQkFBaUIsRUFBRSxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUM7d0JBQy9DLFlBQVksU0FBQyxtQkFBbUIsRUFBRSxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUM7MEJBQ2pELFlBQVksU0FBQyxxQkFBcUIsRUFBRSxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUM7dUJBS25ELEtBQUs7NEJBS0wsS0FBSzs2QkFLTCxLQUFLO3VCQUtMLEtBQUs7cUJBT0wsS0FBSzs2QkFTTCxLQUFLO3NCQUtMLEtBQUs7bUJBT0wsS0FBSzt1QkFLTCxLQUFLO3lCQVNMLE1BQU07bUJBT04sS0FBSzs7OztJQTdFTixrQ0FBYzs7SUFDZCw4QkFBcUI7O0lBRXJCLG9DQUF5Rjs7SUFDekYsaUNBQWdGOztJQUNoRixnQ0FBNkU7O0lBQzdFLGdDQUE2RTs7SUFDN0Usa0NBQW1GOztJQUNuRixvQ0FBeUY7Ozs7O0lBS3pGLGlDQUEyQjs7Ozs7SUFLM0Isc0NBQWdDOzs7OztJQUtoQyx1Q0FBaUM7Ozs7O0lBS2pDLGlDQUEyQjs7Ozs7OztJQU8zQiwrQkFBeUI7Ozs7Ozs7OztJQVN6Qix1Q0FBZ0M7Ozs7O0lBS2hDLGdDQUF5Qjs7Ozs7OztJQU96Qiw2QkFBa0I7Ozs7O0lBS2xCLGlDQUEwQjs7Ozs7Ozs7O0lBUzFCLG1DQUFzRDs7Ozs7OztJQU90RCw2QkFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRGlyZWN0aXZlLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIE9uQ2hhbmdlcyxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtnZXRWYWx1ZUluUmFuZ2UsIGlzTnVtYmVyfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IHtOZ2JQYWdpbmF0aW9uQ29uZmlnfSBmcm9tICcuL3BhZ2luYXRpb24tY29uZmlnJztcblxuLyoqXG4gKiBBIGNvbnRleHQgZm9yIHRoZVxuICogKiBgTmdiUGFnaW5hdGlvbkZpcnN0YFxuICogKiBgTmdiUGFnaW5hdGlvblByZXZpb3VzYFxuICogKiBgTmdiUGFnaW5hdGlvbk5leHRgXG4gKiAqIGBOZ2JQYWdpbmF0aW9uTGFzdGBcbiAqICogYE5nYlBhZ2luYXRpb25FbGxpcHNpc2BcbiAqXG4gKiBsaW5rIHRlbXBsYXRlcyBpbiBjYXNlIHlvdSB3YW50IHRvIG92ZXJyaWRlIG9uZS5cbiAqXG4gKiBAc2luY2UgNC4xLjBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZ2JQYWdpbmF0aW9uTGlua0NvbnRleHQge1xuICAvKipcbiAgICogVGhlIGN1cnJlbnRseSBzZWxlY3RlZCBwYWdlIG51bWJlclxuICAgKi9cbiAgY3VycmVudFBhZ2U6IG51bWJlcjtcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY3VycmVudCBsaW5rIGlzIGRpc2FibGVkXG4gICAqL1xuICBkaXNhYmxlZDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBBIGNvbnRleHQgZm9yIHRoZSBgTmdiUGFnaW5hdGlvbk51bWJlcmAgbGluayB0ZW1wbGF0ZSBpbiBjYXNlIHlvdSB3YW50IHRvIG92ZXJyaWRlIG9uZS5cbiAqXG4gKiBFeHRlbmRzIGBOZ2JQYWdpbmF0aW9uTGlua0NvbnRleHRgLlxuICpcbiAqIEBzaW5jZSA0LjEuMFxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5nYlBhZ2luYXRpb25OdW1iZXJDb250ZXh0IGV4dGVuZHMgTmdiUGFnaW5hdGlvbkxpbmtDb250ZXh0IHtcbiAgLyoqXG4gICAqIFRoZSBwYWdlIG51bWJlciwgZGlzcGxheWVkIGJ5IHRoZSBjdXJyZW50IHBhZ2UgbGluay5cbiAgICovXG4gICRpbXBsaWNpdDogbnVtYmVyO1xufVxuXG4vKipcbiAqIEEgZGlyZWN0aXZlIHRvIG1hdGNoIHRoZSAnZWxsaXBzaXMnIGxpbmsgdGVtcGxhdGVcbiAqXG4gKiBAc2luY2UgNC4xLjBcbiAqL1xuQERpcmVjdGl2ZSh7c2VsZWN0b3I6ICduZy10ZW1wbGF0ZVtuZ2JQYWdpbmF0aW9uRWxsaXBzaXNdJ30pXG5leHBvcnQgY2xhc3MgTmdiUGFnaW5hdGlvbkVsbGlwc2lzIHtcbiAgY29uc3RydWN0b3IocHVibGljIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxOZ2JQYWdpbmF0aW9uTGlua0NvbnRleHQ+KSB7fVxufVxuXG4vKipcbiAqIEEgZGlyZWN0aXZlIHRvIG1hdGNoIHRoZSAnZmlyc3QnIGxpbmsgdGVtcGxhdGVcbiAqXG4gKiBAc2luY2UgNC4xLjBcbiAqL1xuQERpcmVjdGl2ZSh7c2VsZWN0b3I6ICduZy10ZW1wbGF0ZVtuZ2JQYWdpbmF0aW9uRmlyc3RdJ30pXG5leHBvcnQgY2xhc3MgTmdiUGFnaW5hdGlvbkZpcnN0IHtcbiAgY29uc3RydWN0b3IocHVibGljIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxOZ2JQYWdpbmF0aW9uTGlua0NvbnRleHQ+KSB7fVxufVxuXG4vKipcbiAqIEEgZGlyZWN0aXZlIHRvIG1hdGNoIHRoZSAnbGFzdCcgbGluayB0ZW1wbGF0ZVxuICpcbiAqIEBzaW5jZSA0LjEuMFxuICovXG5ARGlyZWN0aXZlKHtzZWxlY3RvcjogJ25nLXRlbXBsYXRlW25nYlBhZ2luYXRpb25MYXN0XSd9KVxuZXhwb3J0IGNsYXNzIE5nYlBhZ2luYXRpb25MYXN0IHtcbiAgY29uc3RydWN0b3IocHVibGljIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxOZ2JQYWdpbmF0aW9uTGlua0NvbnRleHQ+KSB7fVxufVxuXG4vKipcbiAqIEEgZGlyZWN0aXZlIHRvIG1hdGNoIHRoZSAnbmV4dCcgbGluayB0ZW1wbGF0ZVxuICpcbiAqIEBzaW5jZSA0LjEuMFxuICovXG5ARGlyZWN0aXZlKHtzZWxlY3RvcjogJ25nLXRlbXBsYXRlW25nYlBhZ2luYXRpb25OZXh0XSd9KVxuZXhwb3J0IGNsYXNzIE5nYlBhZ2luYXRpb25OZXh0IHtcbiAgY29uc3RydWN0b3IocHVibGljIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxOZ2JQYWdpbmF0aW9uTGlua0NvbnRleHQ+KSB7fVxufVxuXG4vKipcbiAqIEEgZGlyZWN0aXZlIHRvIG1hdGNoIHRoZSBwYWdlICdudW1iZXInIGxpbmsgdGVtcGxhdGVcbiAqXG4gKiBAc2luY2UgNC4xLjBcbiAqL1xuQERpcmVjdGl2ZSh7c2VsZWN0b3I6ICduZy10ZW1wbGF0ZVtuZ2JQYWdpbmF0aW9uTnVtYmVyXSd9KVxuZXhwb3J0IGNsYXNzIE5nYlBhZ2luYXRpb25OdW1iZXIge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPE5nYlBhZ2luYXRpb25OdW1iZXJDb250ZXh0Pikge31cbn1cblxuLyoqXG4gKiBBIGRpcmVjdGl2ZSB0byBtYXRjaCB0aGUgJ3ByZXZpb3VzJyBsaW5rIHRlbXBsYXRlXG4gKlxuICogQHNpbmNlIDQuMS4wXG4gKi9cbkBEaXJlY3RpdmUoe3NlbGVjdG9yOiAnbmctdGVtcGxhdGVbbmdiUGFnaW5hdGlvblByZXZpb3VzXSd9KVxuZXhwb3J0IGNsYXNzIE5nYlBhZ2luYXRpb25QcmV2aW91cyB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8TmdiUGFnaW5hdGlvbkxpbmtDb250ZXh0Pikge31cbn1cblxuLyoqXG4gKiBBIGNvbXBvbmVudCB0aGF0IGRpc3BsYXlzIHBhZ2UgbnVtYmVycyBhbmQgYWxsb3dzIHRvIGN1c3RvbWl6ZSB0aGVtIGluIHNldmVyYWwgd2F5cy5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmdiLXBhZ2luYXRpb24nLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaG9zdDogeydyb2xlJzogJ25hdmlnYXRpb24nfSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bmctdGVtcGxhdGUgI2ZpcnN0PjxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGkxOG49XCJAQG5nYi5wYWdpbmF0aW9uLmZpcnN0XCI+JmxhcXVvOyZsYXF1bzs8L3NwYW4+PC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgI3ByZXZpb3VzPjxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGkxOG49XCJAQG5nYi5wYWdpbmF0aW9uLnByZXZpb3VzXCI+JmxhcXVvOzwvc3Bhbj48L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSAjbmV4dD48c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIiBpMThuPVwiQEBuZ2IucGFnaW5hdGlvbi5uZXh0XCI+JnJhcXVvOzwvc3Bhbj48L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSAjbGFzdD48c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIiBpMThuPVwiQEBuZ2IucGFnaW5hdGlvbi5sYXN0XCI+JnJhcXVvOyZyYXF1bzs8L3NwYW4+PC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgI2VsbGlwc2lzPi4uLjwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0TnVtYmVyIGxldC1wYWdlIGxldC1jdXJyZW50UGFnZT1cImN1cnJlbnRQYWdlXCI+XG4gICAgICB7eyBwYWdlIH19XG4gICAgICA8c3BhbiAqbmdJZj1cInBhZ2UgPT09IGN1cnJlbnRQYWdlXCIgY2xhc3M9XCJzci1vbmx5XCI+KGN1cnJlbnQpPC9zcGFuPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPHVsIFtjbGFzc109XCIncGFnaW5hdGlvbicgKyAoc2l6ZSA/ICcgcGFnaW5hdGlvbi0nICsgc2l6ZSA6ICcnKVwiPlxuICAgICAgPGxpICpuZ0lmPVwiYm91bmRhcnlMaW5rc1wiIGNsYXNzPVwicGFnZS1pdGVtXCJcbiAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cInByZXZpb3VzRGlzYWJsZWQoKVwiPlxuICAgICAgICA8YSBhcmlhLWxhYmVsPVwiRmlyc3RcIiBpMThuLWFyaWEtbGFiZWw9XCJAQG5nYi5wYWdpbmF0aW9uLmZpcnN0LWFyaWFcIiBjbGFzcz1cInBhZ2UtbGlua1wiIGhyZWZcbiAgICAgICAgICAoY2xpY2spPVwic2VsZWN0UGFnZSgxKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIiBbYXR0ci50YWJpbmRleF09XCIoaGFzUHJldmlvdXMoKSA/IG51bGwgOiAnLTEnKVwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJ0cGxGaXJzdD8udGVtcGxhdGVSZWYgfHwgZmlyc3RcIlxuICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2Rpc2FibGVkOiBwcmV2aW91c0Rpc2FibGVkKCksIGN1cnJlbnRQYWdlOiBwYWdlfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvYT5cbiAgICAgIDwvbGk+XG5cbiAgICAgIDxsaSAqbmdJZj1cImRpcmVjdGlvbkxpbmtzXCIgY2xhc3M9XCJwYWdlLWl0ZW1cIlxuICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwicHJldmlvdXNEaXNhYmxlZCgpXCI+XG4gICAgICAgIDxhIGFyaWEtbGFiZWw9XCJQcmV2aW91c1wiIGkxOG4tYXJpYS1sYWJlbD1cIkBAbmdiLnBhZ2luYXRpb24ucHJldmlvdXMtYXJpYVwiIGNsYXNzPVwicGFnZS1saW5rXCIgaHJlZlxuICAgICAgICAgIChjbGljayk9XCJzZWxlY3RQYWdlKHBhZ2UtMSk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCIgW2F0dHIudGFiaW5kZXhdPVwiKGhhc1ByZXZpb3VzKCkgPyBudWxsIDogJy0xJylcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwidHBsUHJldmlvdXM/LnRlbXBsYXRlUmVmIHx8IHByZXZpb3VzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntkaXNhYmxlZDogcHJldmlvdXNEaXNhYmxlZCgpfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvYT5cbiAgICAgIDwvbGk+XG4gICAgICA8bGkgKm5nRm9yPVwibGV0IHBhZ2VOdW1iZXIgb2YgcGFnZXNcIiBjbGFzcz1cInBhZ2UtaXRlbVwiIFtjbGFzcy5hY3RpdmVdPVwicGFnZU51bWJlciA9PT0gcGFnZVwiXG4gICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJpc0VsbGlwc2lzKHBhZ2VOdW1iZXIpIHx8IGRpc2FibGVkXCI+XG4gICAgICAgIDxhICpuZ0lmPVwiaXNFbGxpcHNpcyhwYWdlTnVtYmVyKVwiIGNsYXNzPVwicGFnZS1saW5rXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRwbEVsbGlwc2lzPy50ZW1wbGF0ZVJlZiB8fCBlbGxpcHNpc1wiXG4gICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ZGlzYWJsZWQ6IHRydWUsIGN1cnJlbnRQYWdlOiBwYWdlfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvYT5cbiAgICAgICAgPGEgKm5nSWY9XCIhaXNFbGxpcHNpcyhwYWdlTnVtYmVyKVwiIGNsYXNzPVwicGFnZS1saW5rXCIgaHJlZiAoY2xpY2spPVwic2VsZWN0UGFnZShwYWdlTnVtYmVyKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwidHBsTnVtYmVyPy50ZW1wbGF0ZVJlZiB8fCBkZWZhdWx0TnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntkaXNhYmxlZDogZGlzYWJsZWQsICRpbXBsaWNpdDogcGFnZU51bWJlciwgY3VycmVudFBhZ2U6IHBhZ2V9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9hPlxuICAgICAgPC9saT5cbiAgICAgIDxsaSAqbmdJZj1cImRpcmVjdGlvbkxpbmtzXCIgY2xhc3M9XCJwYWdlLWl0ZW1cIiBbY2xhc3MuZGlzYWJsZWRdPVwibmV4dERpc2FibGVkKClcIj5cbiAgICAgICAgPGEgYXJpYS1sYWJlbD1cIk5leHRcIiBpMThuLWFyaWEtbGFiZWw9XCJAQG5nYi5wYWdpbmF0aW9uLm5leHQtYXJpYVwiIGNsYXNzPVwicGFnZS1saW5rXCIgaHJlZlxuICAgICAgICAgIChjbGljayk9XCJzZWxlY3RQYWdlKHBhZ2UrMSk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCIgW2F0dHIudGFiaW5kZXhdPVwiKGhhc05leHQoKSA/IG51bGwgOiAnLTEnKVwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJ0cGxOZXh0Py50ZW1wbGF0ZVJlZiB8fCBuZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntkaXNhYmxlZDogbmV4dERpc2FibGVkKCksIGN1cnJlbnRQYWdlOiBwYWdlfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvYT5cbiAgICAgIDwvbGk+XG5cbiAgICAgIDxsaSAqbmdJZj1cImJvdW5kYXJ5TGlua3NcIiBjbGFzcz1cInBhZ2UtaXRlbVwiIFtjbGFzcy5kaXNhYmxlZF09XCJuZXh0RGlzYWJsZWQoKVwiPlxuICAgICAgICA8YSBhcmlhLWxhYmVsPVwiTGFzdFwiIGkxOG4tYXJpYS1sYWJlbD1cIkBAbmdiLnBhZ2luYXRpb24ubGFzdC1hcmlhXCIgY2xhc3M9XCJwYWdlLWxpbmtcIiBocmVmXG4gICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFBhZ2UocGFnZUNvdW50KTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIiBbYXR0ci50YWJpbmRleF09XCIoaGFzTmV4dCgpID8gbnVsbCA6ICctMScpXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRwbExhc3Q/LnRlbXBsYXRlUmVmIHx8IGxhc3RcIlxuICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2Rpc2FibGVkOiBuZXh0RGlzYWJsZWQoKSwgY3VycmVudFBhZ2U6IHBhZ2V9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9hPlxuICAgICAgPC9saT5cbiAgICA8L3VsPlxuICBgXG59KVxuZXhwb3J0IGNsYXNzIE5nYlBhZ2luYXRpb24gaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICBwYWdlQ291bnQgPSAwO1xuICBwYWdlczogbnVtYmVyW10gPSBbXTtcblxuICBAQ29udGVudENoaWxkKE5nYlBhZ2luYXRpb25FbGxpcHNpcywge3N0YXRpYzogZmFsc2V9KSB0cGxFbGxpcHNpczogTmdiUGFnaW5hdGlvbkVsbGlwc2lzO1xuICBAQ29udGVudENoaWxkKE5nYlBhZ2luYXRpb25GaXJzdCwge3N0YXRpYzogZmFsc2V9KSB0cGxGaXJzdDogTmdiUGFnaW5hdGlvbkZpcnN0O1xuICBAQ29udGVudENoaWxkKE5nYlBhZ2luYXRpb25MYXN0LCB7c3RhdGljOiBmYWxzZX0pIHRwbExhc3Q6IE5nYlBhZ2luYXRpb25MYXN0O1xuICBAQ29udGVudENoaWxkKE5nYlBhZ2luYXRpb25OZXh0LCB7c3RhdGljOiBmYWxzZX0pIHRwbE5leHQ6IE5nYlBhZ2luYXRpb25OZXh0O1xuICBAQ29udGVudENoaWxkKE5nYlBhZ2luYXRpb25OdW1iZXIsIHtzdGF0aWM6IGZhbHNlfSkgdHBsTnVtYmVyOiBOZ2JQYWdpbmF0aW9uTnVtYmVyO1xuICBAQ29udGVudENoaWxkKE5nYlBhZ2luYXRpb25QcmV2aW91cywge3N0YXRpYzogZmFsc2V9KSB0cGxQcmV2aW91czogTmdiUGFnaW5hdGlvblByZXZpb3VzO1xuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHBhZ2luYXRpb24gbGlua3Mgd2lsbCBiZSBkaXNhYmxlZC5cbiAgICovXG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBcIkZpcnN0XCIgYW5kIFwiTGFzdFwiIHBhZ2UgbGlua3MgYXJlIHNob3duLlxuICAgKi9cbiAgQElucHV0KCkgYm91bmRhcnlMaW5rczogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgXCJOZXh0XCIgYW5kIFwiUHJldmlvdXNcIiBwYWdlIGxpbmtzIGFyZSBzaG93bi5cbiAgICovXG4gIEBJbnB1dCgpIGRpcmVjdGlvbkxpbmtzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBlbGxpcHNpcyBzeW1ib2xzIGFuZCBmaXJzdC9sYXN0IHBhZ2UgbnVtYmVycyB3aWxsIGJlIHNob3duIHdoZW4gYG1heFNpemVgID4gbnVtYmVyIG9mIHBhZ2VzLlxuICAgKi9cbiAgQElucHV0KCkgZWxsaXBzZXM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcm90YXRlIHBhZ2VzIHdoZW4gYG1heFNpemVgID4gbnVtYmVyIG9mIHBhZ2VzLlxuICAgKlxuICAgKiBUaGUgY3VycmVudCBwYWdlIGFsd2F5cyBzdGF5cyBpbiB0aGUgbWlkZGxlIGlmIGB0cnVlYC5cbiAgICovXG4gIEBJbnB1dCgpIHJvdGF0ZTogYm9vbGVhbjtcblxuICAvKipcbiAgICogIFRoZSBudW1iZXIgb2YgaXRlbXMgaW4geW91ciBwYWdpbmF0ZWQgY29sbGVjdGlvbi5cbiAgICpcbiAgICogIE5vdGUsIHRoYXQgdGhpcyBpcyBub3QgdGhlIG51bWJlciBvZiBwYWdlcy4gUGFnZSBudW1iZXJzIGFyZSBjYWxjdWxhdGVkIGR5bmFtaWNhbGx5IGJhc2VkIG9uXG4gICAqICBgY29sbGVjdGlvblNpemVgIGFuZCBgcGFnZVNpemVgLiBFeC4gaWYgeW91IGhhdmUgMTAwIGl0ZW1zIGluIHlvdXIgY29sbGVjdGlvbiBhbmQgZGlzcGxheWluZyAyMCBpdGVtcyBwZXIgcGFnZSxcbiAgICogIHlvdSdsbCBlbmQgdXAgd2l0aCA1IHBhZ2VzLlxuICAgKi9cbiAgQElucHV0KCkgY29sbGVjdGlvblNpemU6IG51bWJlcjtcblxuICAvKipcbiAgICogIFRoZSBtYXhpbXVtIG51bWJlciBvZiBwYWdlcyB0byBkaXNwbGF5LlxuICAgKi9cbiAgQElucHV0KCkgbWF4U2l6ZTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiAgVGhlIGN1cnJlbnQgcGFnZS5cbiAgICpcbiAgICogIFBhZ2UgbnVtYmVycyBzdGFydCB3aXRoIGAxYC5cbiAgICovXG4gIEBJbnB1dCgpIHBhZ2UgPSAxO1xuXG4gIC8qKlxuICAgKiAgVGhlIG51bWJlciBvZiBpdGVtcyBwZXIgcGFnZS5cbiAgICovXG4gIEBJbnB1dCgpIHBhZ2VTaXplOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqICBBbiBldmVudCBmaXJlZCB3aGVuIHRoZSBwYWdlIGlzIGNoYW5nZWQuIFdpbGwgZmlyZSBvbmx5IGlmIGNvbGxlY3Rpb24gc2l6ZSBpcyBzZXQgYW5kIGFsbCB2YWx1ZXMgYXJlIHZhbGlkLlxuICAgKlxuICAgKiAgRXZlbnQgcGF5bG9hZCBpcyB0aGUgbnVtYmVyIG9mIHRoZSBuZXdseSBzZWxlY3RlZCBwYWdlLlxuICAgKlxuICAgKiAgUGFnZSBudW1iZXJzIHN0YXJ0IHdpdGggYDFgLlxuICAgKi9cbiAgQE91dHB1dCgpIHBhZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4odHJ1ZSk7XG5cbiAgLyoqXG4gICAqIFRoZSBwYWdpbmF0aW9uIGRpc3BsYXkgc2l6ZS5cbiAgICpcbiAgICogQm9vdHN0cmFwIGN1cnJlbnRseSBzdXBwb3J0cyBzbWFsbCBhbmQgbGFyZ2Ugc2l6ZXMuXG4gICAqL1xuICBASW5wdXQoKSBzaXplOiAnc20nIHwgJ2xnJztcblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IE5nYlBhZ2luYXRpb25Db25maWcpIHtcbiAgICB0aGlzLmRpc2FibGVkID0gY29uZmlnLmRpc2FibGVkO1xuICAgIHRoaXMuYm91bmRhcnlMaW5rcyA9IGNvbmZpZy5ib3VuZGFyeUxpbmtzO1xuICAgIHRoaXMuZGlyZWN0aW9uTGlua3MgPSBjb25maWcuZGlyZWN0aW9uTGlua3M7XG4gICAgdGhpcy5lbGxpcHNlcyA9IGNvbmZpZy5lbGxpcHNlcztcbiAgICB0aGlzLm1heFNpemUgPSBjb25maWcubWF4U2l6ZTtcbiAgICB0aGlzLnBhZ2VTaXplID0gY29uZmlnLnBhZ2VTaXplO1xuICAgIHRoaXMucm90YXRlID0gY29uZmlnLnJvdGF0ZTtcbiAgICB0aGlzLnNpemUgPSBjb25maWcuc2l6ZTtcbiAgfVxuXG4gIGhhc1ByZXZpb3VzKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5wYWdlID4gMTsgfVxuXG4gIGhhc05leHQoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLnBhZ2UgPCB0aGlzLnBhZ2VDb3VudDsgfVxuXG4gIG5leHREaXNhYmxlZCgpOiBib29sZWFuIHsgcmV0dXJuICF0aGlzLmhhc05leHQoKSB8fCB0aGlzLmRpc2FibGVkOyB9XG5cbiAgcHJldmlvdXNEaXNhYmxlZCgpOiBib29sZWFuIHsgcmV0dXJuICF0aGlzLmhhc1ByZXZpb3VzKCkgfHwgdGhpcy5kaXNhYmxlZDsgfVxuXG4gIHNlbGVjdFBhZ2UocGFnZU51bWJlcjogbnVtYmVyKTogdm9pZCB7IHRoaXMuX3VwZGF0ZVBhZ2VzKHBhZ2VOdW1iZXIpOyB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQgeyB0aGlzLl91cGRhdGVQYWdlcyh0aGlzLnBhZ2UpOyB9XG5cbiAgaXNFbGxpcHNpcyhwYWdlTnVtYmVyKTogYm9vbGVhbiB7IHJldHVybiBwYWdlTnVtYmVyID09PSAtMTsgfVxuXG4gIC8qKlxuICAgKiBBcHBlbmRzIGVsbGlwc2VzIGFuZCBmaXJzdC9sYXN0IHBhZ2UgbnVtYmVyIHRvIHRoZSBkaXNwbGF5ZWQgcGFnZXNcbiAgICovXG4gIHByaXZhdGUgX2FwcGx5RWxsaXBzZXMoc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5lbGxpcHNlcykge1xuICAgICAgaWYgKHN0YXJ0ID4gMCkge1xuICAgICAgICBpZiAoc3RhcnQgPiAxKSB7XG4gICAgICAgICAgdGhpcy5wYWdlcy51bnNoaWZ0KC0xKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBhZ2VzLnVuc2hpZnQoMSk7XG4gICAgICB9XG4gICAgICBpZiAoZW5kIDwgdGhpcy5wYWdlQ291bnQpIHtcbiAgICAgICAgaWYgKGVuZCA8ICh0aGlzLnBhZ2VDb3VudCAtIDEpKSB7XG4gICAgICAgICAgdGhpcy5wYWdlcy5wdXNoKC0xKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBhZ2VzLnB1c2godGhpcy5wYWdlQ291bnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSb3RhdGVzIHBhZ2UgbnVtYmVycyBiYXNlZCBvbiBtYXhTaXplIGl0ZW1zIHZpc2libGUuXG4gICAqIEN1cnJlbnRseSBzZWxlY3RlZCBwYWdlIHN0YXlzIGluIHRoZSBtaWRkbGU6XG4gICAqXG4gICAqIEV4LiBmb3Igc2VsZWN0ZWQgcGFnZSA9IDY6XG4gICAqIFs1LCo2Kiw3XSBmb3IgbWF4U2l6ZSA9IDNcbiAgICogWzQsNSwqNiosN10gZm9yIG1heFNpemUgPSA0XG4gICAqL1xuICBwcml2YXRlIF9hcHBseVJvdGF0aW9uKCk6IFtudW1iZXIsIG51bWJlcl0ge1xuICAgIGxldCBzdGFydCA9IDA7XG4gICAgbGV0IGVuZCA9IHRoaXMucGFnZUNvdW50O1xuICAgIGxldCBsZWZ0T2Zmc2V0ID0gTWF0aC5mbG9vcih0aGlzLm1heFNpemUgLyAyKTtcbiAgICBsZXQgcmlnaHRPZmZzZXQgPSB0aGlzLm1heFNpemUgJSAyID09PSAwID8gbGVmdE9mZnNldCAtIDEgOiBsZWZ0T2Zmc2V0O1xuXG4gICAgaWYgKHRoaXMucGFnZSA8PSBsZWZ0T2Zmc2V0KSB7XG4gICAgICAvLyB2ZXJ5IGJlZ2lubmluZywgbm8gcm90YXRpb24gLT4gWzAuLm1heFNpemVdXG4gICAgICBlbmQgPSB0aGlzLm1heFNpemU7XG4gICAgfSBlbHNlIGlmICh0aGlzLnBhZ2VDb3VudCAtIHRoaXMucGFnZSA8IGxlZnRPZmZzZXQpIHtcbiAgICAgIC8vIHZlcnkgZW5kLCBubyByb3RhdGlvbiAtPiBbbGVuLW1heFNpemUuLmxlbl1cbiAgICAgIHN0YXJ0ID0gdGhpcy5wYWdlQ291bnQgLSB0aGlzLm1heFNpemU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHJvdGF0ZVxuICAgICAgc3RhcnQgPSB0aGlzLnBhZ2UgLSBsZWZ0T2Zmc2V0IC0gMTtcbiAgICAgIGVuZCA9IHRoaXMucGFnZSArIHJpZ2h0T2Zmc2V0O1xuICAgIH1cblxuICAgIHJldHVybiBbc3RhcnQsIGVuZF07XG4gIH1cblxuICAvKipcbiAgICogUGFnaW5hdGVzIHBhZ2UgbnVtYmVycyBiYXNlZCBvbiBtYXhTaXplIGl0ZW1zIHBlciBwYWdlLlxuICAgKi9cbiAgcHJpdmF0ZSBfYXBwbHlQYWdpbmF0aW9uKCk6IFtudW1iZXIsIG51bWJlcl0ge1xuICAgIGxldCBwYWdlID0gTWF0aC5jZWlsKHRoaXMucGFnZSAvIHRoaXMubWF4U2l6ZSkgLSAxO1xuICAgIGxldCBzdGFydCA9IHBhZ2UgKiB0aGlzLm1heFNpemU7XG4gICAgbGV0IGVuZCA9IHN0YXJ0ICsgdGhpcy5tYXhTaXplO1xuXG4gICAgcmV0dXJuIFtzdGFydCwgZW5kXTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldFBhZ2VJblJhbmdlKG5ld1BhZ2VObykge1xuICAgIGNvbnN0IHByZXZQYWdlTm8gPSB0aGlzLnBhZ2U7XG4gICAgdGhpcy5wYWdlID0gZ2V0VmFsdWVJblJhbmdlKG5ld1BhZ2VObywgdGhpcy5wYWdlQ291bnQsIDEpO1xuXG4gICAgaWYgKHRoaXMucGFnZSAhPT0gcHJldlBhZ2VObyAmJiBpc051bWJlcih0aGlzLmNvbGxlY3Rpb25TaXplKSkge1xuICAgICAgdGhpcy5wYWdlQ2hhbmdlLmVtaXQodGhpcy5wYWdlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVQYWdlcyhuZXdQYWdlOiBudW1iZXIpIHtcbiAgICB0aGlzLnBhZ2VDb3VudCA9IE1hdGguY2VpbCh0aGlzLmNvbGxlY3Rpb25TaXplIC8gdGhpcy5wYWdlU2l6ZSk7XG5cbiAgICBpZiAoIWlzTnVtYmVyKHRoaXMucGFnZUNvdW50KSkge1xuICAgICAgdGhpcy5wYWdlQ291bnQgPSAwO1xuICAgIH1cblxuICAgIC8vIGZpbGwtaW4gbW9kZWwgbmVlZGVkIHRvIHJlbmRlciBwYWdlc1xuICAgIHRoaXMucGFnZXMubGVuZ3RoID0gMDtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSB0aGlzLnBhZ2VDb3VudDsgaSsrKSB7XG4gICAgICB0aGlzLnBhZ2VzLnB1c2goaSk7XG4gICAgfVxuXG4gICAgLy8gc2V0IHBhZ2Ugd2l0aGluIDEuLm1heCByYW5nZVxuICAgIHRoaXMuX3NldFBhZ2VJblJhbmdlKG5ld1BhZ2UpO1xuXG4gICAgLy8gYXBwbHkgbWF4U2l6ZSBpZiBuZWNlc3NhcnlcbiAgICBpZiAodGhpcy5tYXhTaXplID4gMCAmJiB0aGlzLnBhZ2VDb3VudCA+IHRoaXMubWF4U2l6ZSkge1xuICAgICAgbGV0IHN0YXJ0ID0gMDtcbiAgICAgIGxldCBlbmQgPSB0aGlzLnBhZ2VDb3VudDtcblxuICAgICAgLy8gZWl0aGVyIHBhZ2luYXRpbmcgb3Igcm90YXRpbmcgcGFnZSBudW1iZXJzXG4gICAgICBpZiAodGhpcy5yb3RhdGUpIHtcbiAgICAgICAgW3N0YXJ0LCBlbmRdID0gdGhpcy5fYXBwbHlSb3RhdGlvbigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgW3N0YXJ0LCBlbmRdID0gdGhpcy5fYXBwbHlQYWdpbmF0aW9uKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucGFnZXMgPSB0aGlzLnBhZ2VzLnNsaWNlKHN0YXJ0LCBlbmQpO1xuXG4gICAgICAvLyBhZGRpbmcgZWxsaXBzZXNcbiAgICAgIHRoaXMuX2FwcGx5RWxsaXBzZXMoc3RhcnQsIGVuZCk7XG4gICAgfVxuICB9XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/pagination/pagination.module.js b/dist/sunbird-ui-components/esm2015/pagination/pagination.module.js new file mode 100644 index 0000000..4ed7497 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/pagination/pagination.module.js @@ -0,0 +1,20 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { NgbPagination, NgbPaginationEllipsis, NgbPaginationFirst, NgbPaginationLast, NgbPaginationNext, NgbPaginationNumber, NgbPaginationPrevious } from './pagination'; +export { NgbPagination, NgbPaginationEllipsis, NgbPaginationFirst, NgbPaginationLast, NgbPaginationNext, NgbPaginationNumber, NgbPaginationPrevious } from './pagination'; +export { NgbPaginationConfig } from './pagination-config'; +/** @type {?} */ +const DIRECTIVES = [ + NgbPagination, NgbPaginationEllipsis, NgbPaginationFirst, NgbPaginationLast, NgbPaginationNext, NgbPaginationNumber, + NgbPaginationPrevious +]; +export class NgbPaginationModule { +} +NgbPaginationModule.decorators = [ + { type: NgModule, args: [{ declarations: DIRECTIVES, exports: DIRECTIVES, imports: [CommonModule] },] } +]; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5tb2R1bGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJwYWdpbmF0aW9uL3BhZ2luYXRpb24ubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUU3QyxPQUFPLEVBQ0wsYUFBYSxFQUNiLHFCQUFxQixFQUNyQixrQkFBa0IsRUFDbEIsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixtQkFBbUIsRUFDbkIscUJBQXFCLEVBQ3RCLE1BQU0sY0FBYyxDQUFDO0FBRXRCLE9BQU8sRUFDTCxhQUFhLEVBQ2IscUJBQXFCLEVBQ3JCLGtCQUFrQixFQUNsQixpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQixxQkFBcUIsRUFDdEIsTUFBTSxjQUFjLENBQUM7QUFDdEIsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0scUJBQXFCLENBQUM7O01BRWxELFVBQVUsR0FBRztJQUNqQixhQUFhLEVBQUUscUJBQXFCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CO0lBQ25ILHFCQUFxQjtDQUN0QjtBQUdELE1BQU0sT0FBTyxtQkFBbUI7OztZQUQvQixRQUFRLFNBQUMsRUFBQyxZQUFZLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge05nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQge1xuICBOZ2JQYWdpbmF0aW9uLFxuICBOZ2JQYWdpbmF0aW9uRWxsaXBzaXMsXG4gIE5nYlBhZ2luYXRpb25GaXJzdCxcbiAgTmdiUGFnaW5hdGlvbkxhc3QsXG4gIE5nYlBhZ2luYXRpb25OZXh0LFxuICBOZ2JQYWdpbmF0aW9uTnVtYmVyLFxuICBOZ2JQYWdpbmF0aW9uUHJldmlvdXNcbn0gZnJvbSAnLi9wYWdpbmF0aW9uJztcblxuZXhwb3J0IHtcbiAgTmdiUGFnaW5hdGlvbixcbiAgTmdiUGFnaW5hdGlvbkVsbGlwc2lzLFxuICBOZ2JQYWdpbmF0aW9uRmlyc3QsXG4gIE5nYlBhZ2luYXRpb25MYXN0LFxuICBOZ2JQYWdpbmF0aW9uTmV4dCxcbiAgTmdiUGFnaW5hdGlvbk51bWJlcixcbiAgTmdiUGFnaW5hdGlvblByZXZpb3VzXG59IGZyb20gJy4vcGFnaW5hdGlvbic7XG5leHBvcnQge05nYlBhZ2luYXRpb25Db25maWd9IGZyb20gJy4vcGFnaW5hdGlvbi1jb25maWcnO1xuXG5jb25zdCBESVJFQ1RJVkVTID0gW1xuICBOZ2JQYWdpbmF0aW9uLCBOZ2JQYWdpbmF0aW9uRWxsaXBzaXMsIE5nYlBhZ2luYXRpb25GaXJzdCwgTmdiUGFnaW5hdGlvbkxhc3QsIE5nYlBhZ2luYXRpb25OZXh0LCBOZ2JQYWdpbmF0aW9uTnVtYmVyLFxuICBOZ2JQYWdpbmF0aW9uUHJldmlvdXNcbl07XG5cbkBOZ01vZHVsZSh7ZGVjbGFyYXRpb25zOiBESVJFQ1RJVkVTLCBleHBvcnRzOiBESVJFQ1RJVkVTLCBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXX0pXG5leHBvcnQgY2xhc3MgTmdiUGFnaW5hdGlvbk1vZHVsZSB7XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/popover/popover-config.js b/dist/sunbird-ui-components/esm2015/popover/popover-config.js new file mode 100644 index 0000000..af58cb1 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/popover/popover-config.js @@ -0,0 +1,45 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Injectable } from '@angular/core'; +import * as i0 from "@angular/core"; +/** + * A configuration service for the [`NgbPopover`](#/components/popover/api#NgbPopover) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the popovers used in the application. + */ +export class NgbPopoverConfig { + constructor() { + this.autoClose = true; + this.placement = 'auto'; + this.triggers = 'click'; + this.disablePopover = false; + this.openDelay = 0; + this.closeDelay = 0; + } +} +NgbPopoverConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } +]; +/** @nocollapse */ NgbPopoverConfig.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function NgbPopoverConfig_Factory() { return new NgbPopoverConfig(); }, token: NgbPopoverConfig, providedIn: "root" }); +if (false) { + /** @type {?} */ + NgbPopoverConfig.prototype.autoClose; + /** @type {?} */ + NgbPopoverConfig.prototype.placement; + /** @type {?} */ + NgbPopoverConfig.prototype.triggers; + /** @type {?} */ + NgbPopoverConfig.prototype.container; + /** @type {?} */ + NgbPopoverConfig.prototype.disablePopover; + /** @type {?} */ + NgbPopoverConfig.prototype.popoverClass; + /** @type {?} */ + NgbPopoverConfig.prototype.openDelay; + /** @type {?} */ + NgbPopoverConfig.prototype.closeDelay; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci1jb25maWcuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJwb3BvdmVyL3BvcG92ZXItY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQVV6QyxNQUFNLE9BQU8sZ0JBQWdCO0lBRDdCO1FBRUUsY0FBUyxHQUFtQyxJQUFJLENBQUM7UUFDakQsY0FBUyxHQUFtQixNQUFNLENBQUM7UUFDbkMsYUFBUSxHQUFHLE9BQU8sQ0FBQztRQUVuQixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUV2QixjQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsZUFBVSxHQUFHLENBQUMsQ0FBQztLQUNoQjs7O1lBVkEsVUFBVSxTQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQzs7Ozs7SUFFOUIscUNBQWlEOztJQUNqRCxxQ0FBbUM7O0lBQ25DLG9DQUFtQjs7SUFDbkIscUNBQWtCOztJQUNsQiwwQ0FBdUI7O0lBQ3ZCLHdDQUFxQjs7SUFDckIscUNBQWM7O0lBQ2Qsc0NBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtQbGFjZW1lbnRBcnJheX0gZnJvbSAnLi4vdXRpbC9wb3NpdGlvbmluZyc7XG5cbi8qKlxuICogQSBjb25maWd1cmF0aW9uIHNlcnZpY2UgZm9yIHRoZSBbYE5nYlBvcG92ZXJgXSgjL2NvbXBvbmVudHMvcG9wb3Zlci9hcGkjTmdiUG9wb3ZlcikgY29tcG9uZW50LlxuICpcbiAqIFlvdSBjYW4gaW5qZWN0IHRoaXMgc2VydmljZSwgdHlwaWNhbGx5IGluIHlvdXIgcm9vdCBjb21wb25lbnQsIGFuZCBjdXN0b21pemUgdGhlIHZhbHVlcyBvZiBpdHMgcHJvcGVydGllcyBpblxuICogb3JkZXIgdG8gcHJvdmlkZSBkZWZhdWx0IHZhbHVlcyBmb3IgYWxsIHRoZSBwb3BvdmVycyB1c2VkIGluIHRoZSBhcHBsaWNhdGlvbi5cbiAqL1xuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgTmdiUG9wb3ZlckNvbmZpZyB7XG4gIGF1dG9DbG9zZTogYm9vbGVhbiB8ICdpbnNpZGUnIHwgJ291dHNpZGUnID0gdHJ1ZTtcbiAgcGxhY2VtZW50OiBQbGFjZW1lbnRBcnJheSA9ICdhdXRvJztcbiAgdHJpZ2dlcnMgPSAnY2xpY2snO1xuICBjb250YWluZXI6IHN0cmluZztcbiAgZGlzYWJsZVBvcG92ZXIgPSBmYWxzZTtcbiAgcG9wb3ZlckNsYXNzOiBzdHJpbmc7XG4gIG9wZW5EZWxheSA9IDA7XG4gIGNsb3NlRGVsYXkgPSAwO1xufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/popover/popover.js b/dist/sunbird-ui-components/esm2015/popover/popover.js new file mode 100644 index 0000000..4350f3d --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/popover/popover.js @@ -0,0 +1,396 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Component, Directive, Input, Output, EventEmitter, ChangeDetectionStrategy, Inject, Injector, Renderer2, ElementRef, TemplateRef, ViewContainerRef, ComponentFactoryResolver, NgZone, ViewEncapsulation, ChangeDetectorRef, ApplicationRef } from '@angular/core'; +import { DOCUMENT } from '@angular/common'; +import { listenToTriggers } from '../util/triggers'; +import { ngbAutoClose } from '../util/autoclose'; +import { positionElements } from '../util/positioning'; +import { PopupService } from '../util/popup'; +import { NgbPopoverConfig } from './popover-config'; +/** @type {?} */ +let nextId = 0; +export class NgbPopoverWindow { + /** + * @return {?} + */ + isTitleTemplate() { return this.title instanceof TemplateRef; } +} +NgbPopoverWindow.decorators = [ + { type: Component, args: [{ + selector: 'ngb-popover-window', + changeDetection: ChangeDetectionStrategy.OnPush, + encapsulation: ViewEncapsulation.None, + host: { '[class]': '"popover" + (popoverClass ? " " + popoverClass : "")', 'role': 'tooltip', '[id]': 'id' }, + template: ` +
+

+ {{title}} + +

+
`, + styles: ["ngb-popover-window.bs-popover-bottom>.arrow,ngb-popover-window.bs-popover-top>.arrow{left:50%;margin-left:-.5rem}ngb-popover-window.bs-popover-bottom-left>.arrow,ngb-popover-window.bs-popover-top-left>.arrow{left:2em}ngb-popover-window.bs-popover-bottom-right>.arrow,ngb-popover-window.bs-popover-top-right>.arrow{left:auto;right:2em}ngb-popover-window.bs-popover-left>.arrow,ngb-popover-window.bs-popover-right>.arrow{top:50%;margin-top:-.5rem}ngb-popover-window.bs-popover-left-top>.arrow,ngb-popover-window.bs-popover-right-top>.arrow{top:.7em}ngb-popover-window.bs-popover-left-bottom>.arrow,ngb-popover-window.bs-popover-right-bottom>.arrow{top:auto;bottom:.7em}"] + }] } +]; +NgbPopoverWindow.propDecorators = { + title: [{ type: Input }], + id: [{ type: Input }], + popoverClass: [{ type: Input }], + context: [{ type: Input }] +}; +if (false) { + /** @type {?} */ + NgbPopoverWindow.prototype.title; + /** @type {?} */ + NgbPopoverWindow.prototype.id; + /** @type {?} */ + NgbPopoverWindow.prototype.popoverClass; + /** @type {?} */ + NgbPopoverWindow.prototype.context; +} +/** + * A lightweight and extensible directive for fancy popover creation. + */ +export class NgbPopover { + /** + * @param {?} _elementRef + * @param {?} _renderer + * @param {?} injector + * @param {?} componentFactoryResolver + * @param {?} viewContainerRef + * @param {?} config + * @param {?} _ngZone + * @param {?} _document + * @param {?} _changeDetector + * @param {?} _applicationRef + */ + constructor(_elementRef, _renderer, injector, componentFactoryResolver, viewContainerRef, config, _ngZone, _document, _changeDetector, _applicationRef) { + this._elementRef = _elementRef; + this._renderer = _renderer; + this._ngZone = _ngZone; + this._document = _document; + this._changeDetector = _changeDetector; + this._applicationRef = _applicationRef; + /** + * An event emitted when the popover is shown. Contains no payload. + */ + this.shown = new EventEmitter(); + /** + * An event emitted when the popover is hidden. Contains no payload. + */ + this.hidden = new EventEmitter(); + this._ngbPopoverWindowId = `ngb-popover-${nextId++}`; + this.autoClose = config.autoClose; + this.placement = config.placement; + this.triggers = config.triggers; + this.container = config.container; + this.disablePopover = config.disablePopover; + this.popoverClass = config.popoverClass; + this.openDelay = config.openDelay; + this.closeDelay = config.closeDelay; + this._popupService = new PopupService(NgbPopoverWindow, injector, viewContainerRef, _renderer, componentFactoryResolver, _applicationRef); + this._zoneSubscription = _ngZone.onStable.subscribe((/** + * @return {?} + */ + () => { + if (this._windowRef) { + positionElements(this._elementRef.nativeElement, this._windowRef.location.nativeElement, this.placement, this.container === 'body', 'bs-popover'); + } + })); + } + /** + * @private + * @return {?} + */ + _isDisabled() { + if (this.disablePopover) { + return true; + } + if (!this.ngbPopover && !this.popoverTitle) { + return true; + } + return false; + } + /** + * Opens the popover. + * + * This is considered to be a "manual" triggering. + * The `context` is an optional value to be injected into the popover template when it is created. + * @param {?=} context + * @return {?} + */ + open(context) { + if (!this._windowRef && !this._isDisabled()) { + this._windowRef = this._popupService.open(this.ngbPopover, context); + this._windowRef.instance.title = this.popoverTitle; + this._windowRef.instance.context = context; + this._windowRef.instance.popoverClass = this.popoverClass; + this._windowRef.instance.id = this._ngbPopoverWindowId; + this._renderer.setAttribute(this._elementRef.nativeElement, 'aria-describedby', this._ngbPopoverWindowId); + if (this.container === 'body') { + this._document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement); + } + // We need to detect changes, because we don't know where .open() might be called from. + // Ex. opening popover from one of lifecycle hooks that run after the CD + // (say from ngAfterViewInit) will result in 'ExpressionHasChanged' exception + this._windowRef.changeDetectorRef.detectChanges(); + // We need to mark for check, because popover won't work inside the OnPush component. + // Ex. when we use expression like `{{ popover.isOpen() : 'opened' : 'closed' }}` + // inside the template of an OnPush component and we change the popover from + // open -> closed, the expression in question won't be updated unless we explicitly + // mark the parent component to be checked. + this._windowRef.changeDetectorRef.markForCheck(); + ngbAutoClose(this._ngZone, this._document, this.autoClose, (/** + * @return {?} + */ + () => this.close()), this.hidden, [this._windowRef.location.nativeElement]); + this.shown.emit(); + } + } + /** + * Closes the popover. + * + * This is considered to be a "manual" triggering of the popover. + * @return {?} + */ + close() { + if (this._windowRef) { + this._renderer.removeAttribute(this._elementRef.nativeElement, 'aria-describedby'); + this._popupService.close(); + this._windowRef = null; + this.hidden.emit(); + this._changeDetector.markForCheck(); + } + } + /** + * Toggles the popover. + * + * This is considered to be a "manual" triggering of the popover. + * @return {?} + */ + toggle() { + if (this._windowRef) { + this.close(); + } + else { + this.open(); + } + } + /** + * Returns `true`, if the popover is currently shown. + * @return {?} + */ + isOpen() { return this._windowRef != null; } + /** + * @return {?} + */ + ngOnInit() { + this._unregisterListenersFn = listenToTriggers(this._renderer, this._elementRef.nativeElement, this.triggers, this.isOpen.bind(this), this.open.bind(this), this.close.bind(this), +this.openDelay, +this.closeDelay); + } + /** + * @param {?} changes + * @return {?} + */ + ngOnChanges(changes) { + // close popover if title and content become empty, or disablePopover set to true + if ((changes['ngbPopover'] || changes['popoverTitle'] || changes['disablePopover']) && this._isDisabled()) { + this.close(); + } + } + /** + * @return {?} + */ + ngOnDestroy() { + this.close(); + // This check is needed as it might happen that ngOnDestroy is called before ngOnInit + // under certain conditions, see: https://github.com/ng-bootstrap/ng-bootstrap/issues/2199 + if (this._unregisterListenersFn) { + this._unregisterListenersFn(); + } + this._zoneSubscription.unsubscribe(); + } +} +NgbPopover.decorators = [ + { type: Directive, args: [{ selector: '[ngbPopover]', exportAs: 'ngbPopover' },] } +]; +/** @nocollapse */ +NgbPopover.ctorParameters = () => [ + { type: ElementRef }, + { type: Renderer2 }, + { type: Injector }, + { type: ComponentFactoryResolver }, + { type: ViewContainerRef }, + { type: NgbPopoverConfig }, + { type: NgZone }, + { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }, + { type: ChangeDetectorRef }, + { type: ApplicationRef } +]; +NgbPopover.propDecorators = { + autoClose: [{ type: Input }], + ngbPopover: [{ type: Input }], + popoverTitle: [{ type: Input }], + placement: [{ type: Input }], + triggers: [{ type: Input }], + container: [{ type: Input }], + disablePopover: [{ type: Input }], + popoverClass: [{ type: Input }], + openDelay: [{ type: Input }], + closeDelay: [{ type: Input }], + shown: [{ type: Output }], + hidden: [{ type: Output }] +}; +if (false) { + /** + * Indicates whether the popover should be closed on `Escape` key and inside/outside clicks: + * + * * `true` - closes on both outside and inside clicks as well as `Escape` presses + * * `false` - disables the autoClose feature (NB: triggers still apply) + * * `"inside"` - closes on inside clicks as well as Escape presses + * * `"outside"` - closes on outside clicks (sometimes also achievable through triggers) + * as well as `Escape` presses + * + * \@since 3.0.0 + * @type {?} + */ + NgbPopover.prototype.autoClose; + /** + * The string content or a `TemplateRef` for the content to be displayed in the popover. + * + * If the title and the content are empty, the popover won't open. + * @type {?} + */ + NgbPopover.prototype.ngbPopover; + /** + * The title of the popover. + * + * If the title and the content are empty, the popover won't open. + * @type {?} + */ + NgbPopover.prototype.popoverTitle; + /** + * The preferred placement of the popover. + * + * Possible values are `"top"`, `"top-left"`, `"top-right"`, `"bottom"`, `"bottom-left"`, + * `"bottom-right"`, `"left"`, `"left-top"`, `"left-bottom"`, `"right"`, `"right-top"`, + * `"right-bottom"` + * + * Accepts an array of strings or a string with space separated possible values. + * + * The default order of preference is `"auto"` (same as the sequence above). + * + * Please see the [positioning overview](#/positioning) for more details. + * @type {?} + */ + NgbPopover.prototype.placement; + /** + * Specifies events that should trigger the tooltip. + * + * Supports a space separated list of event names. + * For more details see the [triggers demo](#/components/popover/examples#triggers). + * @type {?} + */ + NgbPopover.prototype.triggers; + /** + * A selector specifying the element the popover should be appended to. + * + * Currently only supports `body`. + * @type {?} + */ + NgbPopover.prototype.container; + /** + * If `true`, popover is disabled and won't be displayed. + * + * \@since 1.1.0 + * @type {?} + */ + NgbPopover.prototype.disablePopover; + /** + * An optional class applied to the popover window element. + * + * \@since 2.2.0 + * @type {?} + */ + NgbPopover.prototype.popoverClass; + /** + * The opening delay in ms. Works only for "non-manual" opening triggers defined by the `triggers` input. + * + * \@since 4.1.0 + * @type {?} + */ + NgbPopover.prototype.openDelay; + /** + * The closing delay in ms. Works only for "non-manual" opening triggers defined by the `triggers` input. + * + * \@since 4.1.0 + * @type {?} + */ + NgbPopover.prototype.closeDelay; + /** + * An event emitted when the popover is shown. Contains no payload. + * @type {?} + */ + NgbPopover.prototype.shown; + /** + * An event emitted when the popover is hidden. Contains no payload. + * @type {?} + */ + NgbPopover.prototype.hidden; + /** + * @type {?} + * @private + */ + NgbPopover.prototype._ngbPopoverWindowId; + /** + * @type {?} + * @private + */ + NgbPopover.prototype._popupService; + /** + * @type {?} + * @private + */ + NgbPopover.prototype._windowRef; + /** + * @type {?} + * @private + */ + NgbPopover.prototype._unregisterListenersFn; + /** + * @type {?} + * @private + */ + NgbPopover.prototype._zoneSubscription; + /** + * @type {?} + * @private + */ + NgbPopover.prototype._elementRef; + /** + * @type {?} + * @private + */ + NgbPopover.prototype._renderer; + /** + * @type {?} + * @private + */ + NgbPopover.prototype._ngZone; + /** + * @type {?} + * @private + */ + NgbPopover.prototype._document; + /** + * @type {?} + * @private + */ + NgbPopover.prototype._changeDetector; + /** + * @type {?} + * @private + */ + NgbPopover.prototype._applicationRef; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbInBvcG92ZXIvcG9wb3Zlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osdUJBQXVCLEVBSXZCLE1BQU0sRUFDTixRQUFRLEVBQ1IsU0FBUyxFQUVULFVBQVUsRUFDVixXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2hCLHdCQUF3QixFQUN4QixNQUFNLEVBRU4saUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixjQUFjLEVBQ2YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRXpDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQ2xELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUMvQyxPQUFPLEVBQUMsZ0JBQWdCLEVBQWlCLE1BQU0scUJBQXFCLENBQUM7QUFDckUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQzs7SUFFOUMsTUFBTSxHQUFHLENBQUM7QUFnQmQsTUFBTSxPQUFPLGdCQUFnQjs7OztJQU0zQixlQUFlLEtBQUssT0FBTyxJQUFJLENBQUMsS0FBSyxZQUFZLFdBQVcsQ0FBQyxDQUFDLENBQUM7OztZQXBCaEUsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxvQkFBb0I7Z0JBQzlCLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2dCQUMvQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtnQkFDckMsSUFBSSxFQUFFLEVBQUMsU0FBUyxFQUFFLHNEQUFzRCxFQUFFLE1BQU0sRUFBRSxT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NEI7Ozs7O0lBSzVCLDJCQUEyQzs7Ozs7SUFLM0MsNEJBQTRDOzs7OztJQUU1Qyx5Q0FBd0Q7Ozs7O0lBQ3hELG1DQUFzRDs7Ozs7SUFDdEQsZ0NBQW1EOzs7OztJQUNuRCw0Q0FBK0I7Ozs7O0lBQy9CLHVDQUErQjs7Ozs7SUFZM0IsaUNBQTRDOzs7OztJQUFFLCtCQUE0Qjs7Ozs7SUFFMUUsNkJBQXVCOzs7OztJQUFFLCtCQUF3Qzs7Ozs7SUFBRSxxQ0FBMEM7Ozs7O0lBQzdHLHFDQUF1QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRGlyZWN0aXZlLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBPbkluaXQsXG4gIE9uRGVzdHJveSxcbiAgT25DaGFuZ2VzLFxuICBJbmplY3QsXG4gIEluamVjdG9yLFxuICBSZW5kZXJlcjIsXG4gIENvbXBvbmVudFJlZixcbiAgRWxlbWVudFJlZixcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgTmdab25lLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIEFwcGxpY2F0aW9uUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtET0NVTUVOVH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHtsaXN0ZW5Ub1RyaWdnZXJzfSBmcm9tICcuLi91dGlsL3RyaWdnZXJzJztcbmltcG9ydCB7bmdiQXV0b0Nsb3NlfSBmcm9tICcuLi91dGlsL2F1dG9jbG9zZSc7XG5pbXBvcnQge3Bvc2l0aW9uRWxlbWVudHMsIFBsYWNlbWVudEFycmF5fSBmcm9tICcuLi91dGlsL3Bvc2l0aW9uaW5nJztcbmltcG9ydCB7UG9wdXBTZXJ2aWNlfSBmcm9tICcuLi91dGlsL3BvcHVwJztcblxuaW1wb3J0IHtOZ2JQb3BvdmVyQ29uZmlnfSBmcm9tICcuL3BvcG92ZXItY29uZmlnJztcblxubGV0IG5leHRJZCA9IDA7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25nYi1wb3BvdmVyLXdpbmRvdycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBob3N0OiB7J1tjbGFzc10nOiAnXCJwb3BvdmVyXCIgKyAocG9wb3ZlckNsYXNzID8gXCIgXCIgKyBwb3BvdmVyQ2xhc3MgOiBcIlwiKScsICdyb2xlJzogJ3Rvb2x0aXAnLCAnW2lkXSc6ICdpZCd9LFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJhcnJvd1wiPjwvZGl2PlxuICAgIDxoMyBjbGFzcz1cInBvcG92ZXItaGVhZGVyXCIgKm5nSWY9XCJ0aXRsZSAhPSBudWxsXCI+XG4gICAgICA8bmctdGVtcGxhdGUgI3NpbXBsZVRpdGxlPnt7dGl0bGV9fTwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiaXNUaXRsZVRlbXBsYXRlKCkgPyB0aXRsZSA6IHNpbXBsZVRpdGxlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImNvbnRleHRcIj48L25nLXRlbXBsYXRlPlxuICAgIDwvaDM+XG4gICAgPGRpdiBjbGFzcz1cInBvcG92ZXItYm9keVwiPjxuZy1jb250ZW50PjwvbmctY29udGVudD48L2Rpdj5gLFxuICBzdHlsZVVybHM6IFsnLi9wb3BvdmVyLnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBOZ2JQb3BvdmVyV2luZG93IHtcbiAgQElucHV0KCkgdGl0bGU6IHVuZGVmaW5lZCB8IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT47XG4gIEBJbnB1dCgpIGlkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHBvcG92ZXJDbGFzczogc3RyaW5nO1xuICBASW5wdXQoKSBjb250ZXh0OiBhbnk7XG5cbiAgaXNUaXRsZVRlbXBsYXRlKCkgeyByZXR1cm4gdGhpcy50aXRsZSBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmOyB9XG59XG5cbi8qKlxuICogQSBsaWdodHdlaWdodCBhbmQgZXh0ZW5zaWJsZSBkaXJlY3RpdmUgZm9yIGZhbmN5IHBvcG92ZXIgY3JlYXRpb24uXG4gKi9cbkBEaXJlY3RpdmUoe3NlbGVjdG9yOiAnW25nYlBvcG92ZXJdJywgZXhwb3J0QXM6ICduZ2JQb3BvdmVyJ30pXG5leHBvcnQgY2xhc3MgTmdiUG9wb3ZlciBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHBvcG92ZXIgc2hvdWxkIGJlIGNsb3NlZCBvbiBgRXNjYXBlYCBrZXkgYW5kIGluc2lkZS9vdXRzaWRlIGNsaWNrczpcbiAgICpcbiAgICogKiBgdHJ1ZWAgLSBjbG9zZXMgb24gYm90aCBvdXRzaWRlIGFuZCBpbnNpZGUgY2xpY2tzIGFzIHdlbGwgYXMgYEVzY2FwZWAgcHJlc3Nlc1xuICAgKiAqIGBmYWxzZWAgLSBkaXNhYmxlcyB0aGUgYXV0b0Nsb3NlIGZlYXR1cmUgKE5COiB0cmlnZ2VycyBzdGlsbCBhcHBseSlcbiAgICogKiBgXCJpbnNpZGVcImAgLSBjbG9zZXMgb24gaW5zaWRlIGNsaWNrcyBhcyB3ZWxsIGFzIEVzY2FwZSBwcmVzc2VzXG4gICAqICogYFwib3V0c2lkZVwiYCAtIGNsb3NlcyBvbiBvdXRzaWRlIGNsaWNrcyAoc29tZXRpbWVzIGFsc28gYWNoaWV2YWJsZSB0aHJvdWdoIHRyaWdnZXJzKVxuICAgKiBhcyB3ZWxsIGFzIGBFc2NhcGVgIHByZXNzZXNcbiAgICpcbiAgICogQHNpbmNlIDMuMC4wXG4gICAqL1xuICBASW5wdXQoKSBhdXRvQ2xvc2U6IGJvb2xlYW4gfCAnaW5zaWRlJyB8ICdvdXRzaWRlJztcblxuICAvKipcbiAgICogVGhlIHN0cmluZyBjb250ZW50IG9yIGEgYFRlbXBsYXRlUmVmYCBmb3IgdGhlIGNvbnRlbnQgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBwb3BvdmVyLlxuICAgKlxuICAgKiBJZiB0aGUgdGl0bGUgYW5kIHRoZSBjb250ZW50IGFyZSBlbXB0eSwgdGhlIHBvcG92ZXIgd29uJ3Qgb3Blbi5cbiAgICovXG4gIEBJbnB1dCgpIG5nYlBvcG92ZXI6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgLyoqXG4gICAqIFRoZSB0aXRsZSBvZiB0aGUgcG9wb3Zlci5cbiAgICpcbiAgICogSWYgdGhlIHRpdGxlIGFuZCB0aGUgY29udGVudCBhcmUgZW1wdHksIHRoZSBwb3BvdmVyIHdvbid0IG9wZW4uXG4gICAqL1xuICBASW5wdXQoKSBwb3BvdmVyVGl0bGU6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgLyoqXG4gICAqIFRoZSBwcmVmZXJyZWQgcGxhY2VtZW50IG9mIHRoZSBwb3BvdmVyLlxuICAgKlxuICAgKiBQb3NzaWJsZSB2YWx1ZXMgYXJlIGBcInRvcFwiYCwgYFwidG9wLWxlZnRcImAsIGBcInRvcC1yaWdodFwiYCwgYFwiYm90dG9tXCJgLCBgXCJib3R0b20tbGVmdFwiYCxcbiAgICogYFwiYm90dG9tLXJpZ2h0XCJgLCBgXCJsZWZ0XCJgLCBgXCJsZWZ0LXRvcFwiYCwgYFwibGVmdC1ib3R0b21cImAsIGBcInJpZ2h0XCJgLCBgXCJyaWdodC10b3BcImAsXG4gICAqIGBcInJpZ2h0LWJvdHRvbVwiYFxuICAgKlxuICAgKiBBY2NlcHRzIGFuIGFycmF5IG9mIHN0cmluZ3Mgb3IgYSBzdHJpbmcgd2l0aCBzcGFjZSBzZXBhcmF0ZWQgcG9zc2libGUgdmFsdWVzLlxuICAgKlxuICAgKiBUaGUgZGVmYXVsdCBvcmRlciBvZiBwcmVmZXJlbmNlIGlzIGBcImF1dG9cImAgKHNhbWUgYXMgdGhlIHNlcXVlbmNlIGFib3ZlKS5cbiAgICpcbiAgICogUGxlYXNlIHNlZSB0aGUgW3Bvc2l0aW9uaW5nIG92ZXJ2aWV3XSgjL3Bvc2l0aW9uaW5nKSBmb3IgbW9yZSBkZXRhaWxzLlxuICAgKi9cbiAgQElucHV0KCkgcGxhY2VtZW50OiBQbGFjZW1lbnRBcnJheTtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIGV2ZW50cyB0aGF0IHNob3VsZCB0cmlnZ2VyIHRoZSB0b29sdGlwLlxuICAgKlxuICAgKiBTdXBwb3J0cyBhIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGV2ZW50IG5hbWVzLlxuICAgKiBGb3IgbW9yZSBkZXRhaWxzIHNlZSB0aGUgW3RyaWdnZXJzIGRlbW9dKCMvY29tcG9uZW50cy9wb3BvdmVyL2V4YW1wbGVzI3RyaWdnZXJzKS5cbiAgICovXG4gIEBJbnB1dCgpIHRyaWdnZXJzOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgc2VsZWN0b3Igc3BlY2lmeWluZyB0aGUgZWxlbWVudCB0aGUgcG9wb3ZlciBzaG91bGQgYmUgYXBwZW5kZWQgdG8uXG4gICAqXG4gICAqIEN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIGBib2R5YC5cbiAgICovXG4gIEBJbnB1dCgpIGNvbnRhaW5lcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHBvcG92ZXIgaXMgZGlzYWJsZWQgYW5kIHdvbid0IGJlIGRpc3BsYXllZC5cbiAgICpcbiAgICogQHNpbmNlIDEuMS4wXG4gICAqL1xuICBASW5wdXQoKSBkaXNhYmxlUG9wb3ZlcjogYm9vbGVhbjtcblxuICAvKipcbiAgICogQW4gb3B0aW9uYWwgY2xhc3MgYXBwbGllZCB0byB0aGUgcG9wb3ZlciB3aW5kb3cgZWxlbWVudC5cbiAgICpcbiAgICogQHNpbmNlIDIuMi4wXG4gICAqL1xuICBASW5wdXQoKSBwb3BvdmVyQ2xhc3M6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG9wZW5pbmcgZGVsYXkgaW4gbXMuIFdvcmtzIG9ubHkgZm9yIFwibm9uLW1hbnVhbFwiIG9wZW5pbmcgdHJpZ2dlcnMgZGVmaW5lZCBieSB0aGUgYHRyaWdnZXJzYCBpbnB1dC5cbiAgICpcbiAgICogQHNpbmNlIDQuMS4wXG4gICAqL1xuICBASW5wdXQoKSBvcGVuRGVsYXk6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGNsb3NpbmcgZGVsYXkgaW4gbXMuIFdvcmtzIG9ubHkgZm9yIFwibm9uLW1hbnVhbFwiIG9wZW5pbmcgdHJpZ2dlcnMgZGVmaW5lZCBieSB0aGUgYHRyaWdnZXJzYCBpbnB1dC5cbiAgICpcbiAgICogQHNpbmNlIDQuMS4wXG4gICAqL1xuICBASW5wdXQoKSBjbG9zZURlbGF5OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEFuIGV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgcG9wb3ZlciBpcyBzaG93bi4gQ29udGFpbnMgbm8gcGF5bG9hZC5cbiAgICovXG4gIEBPdXRwdXQoKSBzaG93biA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKipcbiAgICogQW4gZXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBwb3BvdmVyIGlzIGhpZGRlbi4gQ29udGFpbnMgbm8gcGF5bG9hZC5cbiAgICovXG4gIEBPdXRwdXQoKSBoaWRkZW4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgcHJpdmF0ZSBfbmdiUG9wb3ZlcldpbmRvd0lkID0gYG5nYi1wb3BvdmVyLSR7bmV4dElkKyt9YDtcbiAgcHJpdmF0ZSBfcG9wdXBTZXJ2aWNlOiBQb3B1cFNlcnZpY2U8TmdiUG9wb3ZlcldpbmRvdz47XG4gIHByaXZhdGUgX3dpbmRvd1JlZjogQ29tcG9uZW50UmVmPE5nYlBvcG92ZXJXaW5kb3c+O1xuICBwcml2YXRlIF91bnJlZ2lzdGVyTGlzdGVuZXJzRm47XG4gIHByaXZhdGUgX3pvbmVTdWJzY3JpcHRpb246IGFueTtcbiAgcHJpdmF0ZSBfaXNEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlUG9wb3Zlcikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICghdGhpcy5uZ2JQb3BvdmVyICYmICF0aGlzLnBvcG92ZXJUaXRsZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sIHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjIsIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLCBjb25maWc6IE5nYlBvcG92ZXJDb25maWcsXG4gICAgICBwcml2YXRlIF9uZ1pvbmU6IE5nWm9uZSwgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBfZG9jdW1lbnQ6IGFueSwgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgcHJpdmF0ZSBfYXBwbGljYXRpb25SZWY6IEFwcGxpY2F0aW9uUmVmKSB7XG4gICAgdGhpcy5hdXRvQ2xvc2UgPSBjb25maWcuYXV0b0Nsb3NlO1xuICAgIHRoaXMucGxhY2VtZW50ID0gY29uZmlnLnBsYWNlbWVudDtcbiAgICB0aGlzLnRyaWdnZXJzID0gY29uZmlnLnRyaWdnZXJzO1xuICAgIHRoaXMuY29udGFpbmVyID0gY29uZmlnLmNvbnRhaW5lcjtcbiAgICB0aGlzLmRpc2FibGVQb3BvdmVyID0gY29uZmlnLmRpc2FibGVQb3BvdmVyO1xuICAgIHRoaXMucG9wb3ZlckNsYXNzID0gY29uZmlnLnBvcG92ZXJDbGFzcztcbiAgICB0aGlzLm9wZW5EZWxheSA9IGNvbmZpZy5vcGVuRGVsYXk7XG4gICAgdGhpcy5jbG9zZURlbGF5ID0gY29uZmlnLmNsb3NlRGVsYXk7XG4gICAgdGhpcy5fcG9wdXBTZXJ2aWNlID0gbmV3IFBvcHVwU2VydmljZTxOZ2JQb3BvdmVyV2luZG93PihcbiAgICAgICAgTmdiUG9wb3ZlcldpbmRvdywgaW5qZWN0b3IsIHZpZXdDb250YWluZXJSZWYsIF9yZW5kZXJlciwgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBfYXBwbGljYXRpb25SZWYpO1xuXG4gICAgdGhpcy5fem9uZVN1YnNjcmlwdGlvbiA9IF9uZ1pvbmUub25TdGFibGUuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLl93aW5kb3dSZWYpIHtcbiAgICAgICAgcG9zaXRpb25FbGVtZW50cyhcbiAgICAgICAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgdGhpcy5fd2luZG93UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQsIHRoaXMucGxhY2VtZW50LFxuICAgICAgICAgICAgdGhpcy5jb250YWluZXIgPT09ICdib2R5JywgJ2JzLXBvcG92ZXInKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVucyB0aGUgcG9wb3Zlci5cbiAgICpcbiAgICogVGhpcyBpcyBjb25zaWRlcmVkIHRvIGJlIGEgXCJtYW51YWxcIiB0cmlnZ2VyaW5nLlxuICAgKiBUaGUgYGNvbnRleHRgIGlzIGFuIG9wdGlvbmFsIHZhbHVlIHRvIGJlIGluamVjdGVkIGludG8gdGhlIHBvcG92ZXIgdGVtcGxhdGUgd2hlbiBpdCBpcyBjcmVhdGVkLlxuICAgKi9cbiAgb3Blbihjb250ZXh0PzogYW55KSB7XG4gICAgaWYgKCF0aGlzLl93aW5kb3dSZWYgJiYgIXRoaXMuX2lzRGlzYWJsZWQoKSkge1xuICAgICAgdGhpcy5fd2luZG93UmVmID0gdGhpcy5fcG9wdXBTZXJ2aWNlLm9wZW4odGhpcy5uZ2JQb3BvdmVyLCBjb250ZXh0KTtcbiAgICAgIHRoaXMuX3dpbmRvd1JlZi5pbnN0YW5jZS50aXRsZSA9IHRoaXMucG9wb3ZlclRpdGxlO1xuICAgICAgdGhpcy5fd2luZG93UmVmLmluc3RhbmNlLmNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgdGhpcy5fd2luZG93UmVmLmluc3RhbmNlLnBvcG92ZXJDbGFzcyA9IHRoaXMucG9wb3ZlckNsYXNzO1xuICAgICAgdGhpcy5fd2luZG93UmVmLmluc3RhbmNlLmlkID0gdGhpcy5fbmdiUG9wb3ZlcldpbmRvd0lkO1xuXG4gICAgICB0aGlzLl9yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnYXJpYS1kZXNjcmliZWRieScsIHRoaXMuX25nYlBvcG92ZXJXaW5kb3dJZCk7XG5cbiAgICAgIGlmICh0aGlzLmNvbnRhaW5lciA9PT0gJ2JvZHknKSB7XG4gICAgICAgIHRoaXMuX2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5jb250YWluZXIpLmFwcGVuZENoaWxkKHRoaXMuX3dpbmRvd1JlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgLy8gV2UgbmVlZCB0byBkZXRlY3QgY2hhbmdlcywgYmVjYXVzZSB3ZSBkb24ndCBrbm93IHdoZXJlIC5vcGVuKCkgbWlnaHQgYmUgY2FsbGVkIGZyb20uXG4gICAgICAvLyBFeC4gb3BlbmluZyBwb3BvdmVyIGZyb20gb25lIG9mIGxpZmVjeWNsZSBob29rcyB0aGF0IHJ1biBhZnRlciB0aGUgQ0RcbiAgICAgIC8vIChzYXkgZnJvbSBuZ0FmdGVyVmlld0luaXQpIHdpbGwgcmVzdWx0IGluICdFeHByZXNzaW9uSGFzQ2hhbmdlZCcgZXhjZXB0aW9uXG4gICAgICB0aGlzLl93aW5kb3dSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAvLyBXZSBuZWVkIHRvIG1hcmsgZm9yIGNoZWNrLCBiZWNhdXNlIHBvcG92ZXIgd29uJ3Qgd29yayBpbnNpZGUgdGhlIE9uUHVzaCBjb21wb25lbnQuXG4gICAgICAvLyBFeC4gd2hlbiB3ZSB1c2UgZXhwcmVzc2lvbiBsaWtlIGB7eyBwb3BvdmVyLmlzT3BlbigpIDogJ29wZW5lZCcgOiAnY2xvc2VkJyB9fWBcbiAgICAgIC8vIGluc2lkZSB0aGUgdGVtcGxhdGUgb2YgYW4gT25QdXNoIGNvbXBvbmVudCBhbmQgd2UgY2hhbmdlIHRoZSBwb3BvdmVyIGZyb21cbiAgICAgIC8vIG9wZW4gLT4gY2xvc2VkLCB0aGUgZXhwcmVzc2lvbiBpbiBxdWVzdGlvbiB3b24ndCBiZSB1cGRhdGVkIHVubGVzcyB3ZSBleHBsaWNpdGx5XG4gICAgICAvLyBtYXJrIHRoZSBwYXJlbnQgY29tcG9uZW50IHRvIGJlIGNoZWNrZWQuXG4gICAgICB0aGlzLl93aW5kb3dSZWYuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG5cbiAgICAgIG5nYkF1dG9DbG9zZShcbiAgICAgICAgICB0aGlzLl9uZ1pvbmUsIHRoaXMuX2RvY3VtZW50LCB0aGlzLmF1dG9DbG9zZSwgKCkgPT4gdGhpcy5jbG9zZSgpLCB0aGlzLmhpZGRlbixcbiAgICAgICAgICBbdGhpcy5fd2luZG93UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnRdKTtcbiAgICAgIHRoaXMuc2hvd24uZW1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIHBvcG92ZXIuXG4gICAqXG4gICAqIFRoaXMgaXMgY29uc2lkZXJlZCB0byBiZSBhIFwibWFudWFsXCIgdHJpZ2dlcmluZyBvZiB0aGUgcG9wb3Zlci5cbiAgICovXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl93aW5kb3dSZWYpIHtcbiAgICAgIHRoaXMuX3JlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdhcmlhLWRlc2NyaWJlZGJ5Jyk7XG4gICAgICB0aGlzLl9wb3B1cFNlcnZpY2UuY2xvc2UoKTtcbiAgICAgIHRoaXMuX3dpbmRvd1JlZiA9IG51bGw7XG4gICAgICB0aGlzLmhpZGRlbi5lbWl0KCk7XG4gICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlcyB0aGUgcG9wb3Zlci5cbiAgICpcbiAgICogVGhpcyBpcyBjb25zaWRlcmVkIHRvIGJlIGEgXCJtYW51YWxcIiB0cmlnZ2VyaW5nIG9mIHRoZSBwb3BvdmVyLlxuICAgKi9cbiAgdG9nZ2xlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl93aW5kb3dSZWYpIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcGVuKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgLCBpZiB0aGUgcG9wb3ZlciBpcyBjdXJyZW50bHkgc2hvd24uXG4gICAqL1xuICBpc09wZW4oKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl93aW5kb3dSZWYgIT0gbnVsbDsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuX3VucmVnaXN0ZXJMaXN0ZW5lcnNGbiA9IGxpc3RlblRvVHJpZ2dlcnMoXG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLCB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHRoaXMudHJpZ2dlcnMsIHRoaXMuaXNPcGVuLmJpbmQodGhpcyksIHRoaXMub3Blbi5iaW5kKHRoaXMpLFxuICAgICAgICB0aGlzLmNsb3NlLmJpbmQodGhpcyksICt0aGlzLm9wZW5EZWxheSwgK3RoaXMuY2xvc2VEZWxheSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgLy8gY2xvc2UgcG9wb3ZlciBpZiB0aXRsZSBhbmQgY29udGVudCBiZWNvbWUgZW1wdHksIG9yIGRpc2FibGVQb3BvdmVyIHNldCB0byB0cnVlXG4gICAgaWYgKChjaGFuZ2VzWyduZ2JQb3BvdmVyJ10gfHwgY2hhbmdlc1sncG9wb3ZlclRpdGxlJ10gfHwgY2hhbmdlc1snZGlzYWJsZVBvcG92ZXInXSkgJiYgdGhpcy5faXNEaXNhYmxlZCgpKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5jbG9zZSgpO1xuICAgIC8vIFRoaXMgY2hlY2sgaXMgbmVlZGVkIGFzIGl0IG1pZ2h0IGhhcHBlbiB0aGF0IG5nT25EZXN0cm95IGlzIGNhbGxlZCBiZWZvcmUgbmdPbkluaXRcbiAgICAvLyB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMsIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL25nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAvaXNzdWVzLzIxOTlcbiAgICBpZiAodGhpcy5fdW5yZWdpc3Rlckxpc3RlbmVyc0ZuKSB7XG4gICAgICB0aGlzLl91bnJlZ2lzdGVyTGlzdGVuZXJzRm4oKTtcbiAgICB9XG4gICAgdGhpcy5fem9uZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/popover/popover.module.js b/dist/sunbird-ui-components/esm2015/popover/popover.module.js new file mode 100644 index 0000000..ca0bf40 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/popover/popover.module.js @@ -0,0 +1,20 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgModule } from '@angular/core'; +import { NgbPopover, NgbPopoverWindow } from './popover'; +import { CommonModule } from '@angular/common'; +export { NgbPopover } from './popover'; +export { NgbPopoverConfig } from './popover-config'; +export class NgbPopoverModule { +} +NgbPopoverModule.decorators = [ + { type: NgModule, args: [{ + declarations: [NgbPopover, NgbPopoverWindow], + exports: [NgbPopover], + imports: [CommonModule], + entryComponents: [NgbPopoverWindow] + },] } +]; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5tb2R1bGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJwb3BvdmVyL3BvcG92ZXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXZDLE9BQU8sRUFBQyxVQUFVLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDdkQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRTdDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDckMsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFTbEQsTUFBTSxPQUFPLGdCQUFnQjs7O1lBTjVCLFFBQVEsU0FBQztnQkFDUixZQUFZLEVBQUUsQ0FBQyxVQUFVLEVBQUUsZ0JBQWdCLENBQUM7Z0JBQzVDLE9BQU8sRUFBRSxDQUFDLFVBQVUsQ0FBQztnQkFDckIsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO2dCQUN2QixlQUFlLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQzthQUNwQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge05nYlBvcG92ZXIsIE5nYlBvcG92ZXJXaW5kb3d9IGZyb20gJy4vcG9wb3Zlcic7XG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuZXhwb3J0IHtOZ2JQb3BvdmVyfSBmcm9tICcuL3BvcG92ZXInO1xuZXhwb3J0IHtOZ2JQb3BvdmVyQ29uZmlnfSBmcm9tICcuL3BvcG92ZXItY29uZmlnJztcbmV4cG9ydCB7UGxhY2VtZW50fSBmcm9tICcuLi91dGlsL3Bvc2l0aW9uaW5nJztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbTmdiUG9wb3ZlciwgTmdiUG9wb3ZlcldpbmRvd10sXG4gIGV4cG9ydHM6IFtOZ2JQb3BvdmVyXSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIGVudHJ5Q29tcG9uZW50czogW05nYlBvcG92ZXJXaW5kb3ddXG59KVxuZXhwb3J0IGNsYXNzIE5nYlBvcG92ZXJNb2R1bGUge1xufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/progressbar/progressbar-config.js b/dist/sunbird-ui-components/esm2015/progressbar/progressbar-config.js new file mode 100644 index 0000000..c465847 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/progressbar/progressbar-config.js @@ -0,0 +1,39 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Injectable } from '@angular/core'; +import * as i0 from "@angular/core"; +/** + * A configuration service for the [`NgbProgressbar`](#/components/progressbar/api#NgbProgressbar) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the progress bars used in the application. + */ +export class NgbProgressbarConfig { + constructor() { + this.max = 100; + this.animated = false; + this.striped = false; + this.showValue = false; + } +} +NgbProgressbarConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } +]; +/** @nocollapse */ NgbProgressbarConfig.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function NgbProgressbarConfig_Factory() { return new NgbProgressbarConfig(); }, token: NgbProgressbarConfig, providedIn: "root" }); +if (false) { + /** @type {?} */ + NgbProgressbarConfig.prototype.max; + /** @type {?} */ + NgbProgressbarConfig.prototype.animated; + /** @type {?} */ + NgbProgressbarConfig.prototype.striped; + /** @type {?} */ + NgbProgressbarConfig.prototype.type; + /** @type {?} */ + NgbProgressbarConfig.prototype.showValue; + /** @type {?} */ + NgbProgressbarConfig.prototype.height; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3NiYXItY29uZmlnLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsicHJvZ3Jlc3NiYXIvcHJvZ3Jlc3NiYXItY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQVN6QyxNQUFNLE9BQU8sb0JBQW9CO0lBRGpDO1FBRUUsUUFBRyxHQUFHLEdBQUcsQ0FBQztRQUNWLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUVoQixjQUFTLEdBQUcsS0FBSyxDQUFDO0tBRW5COzs7WUFSQSxVQUFVLFNBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDOzs7OztJQUU5QixtQ0FBVTs7SUFDVix3Q0FBaUI7O0lBQ2pCLHVDQUFnQjs7SUFDaEIsb0NBQWE7O0lBQ2IseUNBQWtCOztJQUNsQixzQ0FBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogQSBjb25maWd1cmF0aW9uIHNlcnZpY2UgZm9yIHRoZSBbYE5nYlByb2dyZXNzYmFyYF0oIy9jb21wb25lbnRzL3Byb2dyZXNzYmFyL2FwaSNOZ2JQcm9ncmVzc2JhcikgY29tcG9uZW50LlxuICpcbiAqIFlvdSBjYW4gaW5qZWN0IHRoaXMgc2VydmljZSwgdHlwaWNhbGx5IGluIHlvdXIgcm9vdCBjb21wb25lbnQsIGFuZCBjdXN0b21pemUgdGhlIHZhbHVlcyBvZiBpdHMgcHJvcGVydGllcyBpblxuICogb3JkZXIgdG8gcHJvdmlkZSBkZWZhdWx0IHZhbHVlcyBmb3IgYWxsIHRoZSBwcm9ncmVzcyBiYXJzIHVzZWQgaW4gdGhlIGFwcGxpY2F0aW9uLlxuICovXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBOZ2JQcm9ncmVzc2JhckNvbmZpZyB7XG4gIG1heCA9IDEwMDtcbiAgYW5pbWF0ZWQgPSBmYWxzZTtcbiAgc3RyaXBlZCA9IGZhbHNlO1xuICB0eXBlOiBzdHJpbmc7XG4gIHNob3dWYWx1ZSA9IGZhbHNlO1xuICBoZWlnaHQ6IHN0cmluZztcbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/progressbar/progressbar.js b/dist/sunbird-ui-components/esm2015/progressbar/progressbar.js new file mode 100644 index 0000000..45cc12d --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/progressbar/progressbar.js @@ -0,0 +1,111 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Component, Input, ChangeDetectionStrategy } from '@angular/core'; +import { getValueInRange } from '../util/util'; +import { NgbProgressbarConfig } from './progressbar-config'; +/** + * A directive that provides feedback on the progress of a workflow or an action. + */ +export class NgbProgressbar { + /** + * @param {?} config + */ + constructor(config) { + /** + * The current value for the progress bar. + * + * Should be in the `[0, max]` range. + */ + this.value = 0; + this.max = config.max; + this.animated = config.animated; + this.striped = config.striped; + this.type = config.type; + this.showValue = config.showValue; + this.height = config.height; + } + /** + * @return {?} + */ + getValue() { return getValueInRange(this.value, this.max); } + /** + * @return {?} + */ + getPercentValue() { return 100 * this.getValue() / this.max; } +} +NgbProgressbar.decorators = [ + { type: Component, args: [{ + selector: 'ngb-progressbar', + changeDetection: ChangeDetectionStrategy.OnPush, + template: ` +
+
+ {{getPercentValue()}}% +
+
+ ` + }] } +]; +/** @nocollapse */ +NgbProgressbar.ctorParameters = () => [ + { type: NgbProgressbarConfig } +]; +NgbProgressbar.propDecorators = { + max: [{ type: Input }], + animated: [{ type: Input }], + striped: [{ type: Input }], + showValue: [{ type: Input }], + type: [{ type: Input }], + value: [{ type: Input }], + height: [{ type: Input }] +}; +if (false) { + /** + * The maximal value to be displayed in the progressbar. + * @type {?} + */ + NgbProgressbar.prototype.max; + /** + * If `true`, the stripes on the progressbar are animated. + * + * Takes effect only for browsers supporting CSS3 animations, and if `striped` is `true`. + * @type {?} + */ + NgbProgressbar.prototype.animated; + /** + * If `true`, the progress bars will be displayed as striped. + * @type {?} + */ + NgbProgressbar.prototype.striped; + /** + * If `true`, the current percentage will be shown in the `xx%` format. + * @type {?} + */ + NgbProgressbar.prototype.showValue; + /** + * The type of the progress bar. + * + * Currently Bootstrap supports `"success"`, `"info"`, `"warning"` or `"danger"`. + * @type {?} + */ + NgbProgressbar.prototype.type; + /** + * The current value for the progress bar. + * + * Should be in the `[0, max]` range. + * @type {?} + */ + NgbProgressbar.prototype.value; + /** + * THe height of the progress bar. + * + * Accepts any valid CSS height values, ex. `"2rem"` + * @type {?} + */ + NgbProgressbar.prototype.height; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3NiYXIuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJwcm9ncmVzc2Jhci9wcm9ncmVzc2Jhci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsdUJBQXVCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUM3QyxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQzs7OztBQWtCMUQsTUFBTSxPQUFPLGNBQWM7Ozs7SUE0Q3pCLFlBQVksTUFBNEI7Ozs7OztRQVQvQixVQUFLLEdBQUcsQ0FBQyxDQUFDO1FBVWpCLElBQUksQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztRQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDaEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQzlCLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUM7UUFDbEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQzlCLENBQUM7Ozs7SUFFRCxRQUFRLEtBQUssT0FBTyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7O0lBRTVELGVBQWUsS0FBSyxPQUFPLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7OztZQXBFL0QsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxpQkFBaUI7Z0JBQzNCLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2dCQUMvQyxRQUFRLEVBQUU7Ozs7Ozs7O0dBUVQ7YUFDRjs7OztZQWpCTyxvQkFBb0I7OztrQkFzQnpCLEtBQUs7dUJBT0wsS0FBSztzQkFLTCxLQUFLO3dCQUtMLEtBQUs7bUJBT0wsS0FBSztvQkFPTCxLQUFLO3FCQU9MLEtBQUs7Ozs7Ozs7SUF0Q04sNkJBQXFCOzs7Ozs7O0lBT3JCLGtDQUEyQjs7Ozs7SUFLM0IsaUNBQTBCOzs7OztJQUsxQixtQ0FBNEI7Ozs7Ozs7SUFPNUIsOEJBQXNCOzs7Ozs7O0lBT3RCLCtCQUFtQjs7Ozs7OztJQU9uQixnQ0FBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5wdXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Z2V0VmFsdWVJblJhbmdlfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IHtOZ2JQcm9ncmVzc2JhckNvbmZpZ30gZnJvbSAnLi9wcm9ncmVzc2Jhci1jb25maWcnO1xuXG4vKipcbiAqIEEgZGlyZWN0aXZlIHRoYXQgcHJvdmlkZXMgZmVlZGJhY2sgb24gdGhlIHByb2dyZXNzIG9mIGEgd29ya2Zsb3cgb3IgYW4gYWN0aW9uLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ2ItcHJvZ3Jlc3NiYXInLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3NcIiBbc3R5bGUuaGVpZ2h0XT1cImhlaWdodFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWJhcnt7dHlwZSA/ICcgYmctJyArIHR5cGUgOiAnJ319e3thbmltYXRlZCA/ICcgcHJvZ3Jlc3MtYmFyLWFuaW1hdGVkJyA6ICcnfX17e3N0cmlwZWQgP1xuICAgICcgcHJvZ3Jlc3MtYmFyLXN0cmlwZWQnIDogJyd9fVwiIHJvbGU9XCJwcm9ncmVzc2JhclwiIFtzdHlsZS53aWR0aC4lXT1cImdldFBlcmNlbnRWYWx1ZSgpXCJcbiAgICBbYXR0ci5hcmlhLXZhbHVlbm93XT1cImdldFZhbHVlKClcIiBhcmlhLXZhbHVlbWluPVwiMFwiIFthdHRyLmFyaWEtdmFsdWVtYXhdPVwibWF4XCI+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwic2hvd1ZhbHVlXCIgaTE4bj1cIkBAbmdiLnByb2dyZXNzYmFyLnZhbHVlXCI+e3tnZXRQZXJjZW50VmFsdWUoKX19JTwvc3Bhbj48bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYFxufSlcbmV4cG9ydCBjbGFzcyBOZ2JQcm9ncmVzc2JhciB7XG4gIC8qKlxuICAgKiBUaGUgbWF4aW1hbCB2YWx1ZSB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHByb2dyZXNzYmFyLlxuICAgKi9cbiAgQElucHV0KCkgbWF4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHN0cmlwZXMgb24gdGhlIHByb2dyZXNzYmFyIGFyZSBhbmltYXRlZC5cbiAgICpcbiAgICogVGFrZXMgZWZmZWN0IG9ubHkgZm9yIGJyb3dzZXJzIHN1cHBvcnRpbmcgQ1NTMyBhbmltYXRpb25zLCBhbmQgaWYgYHN0cmlwZWRgIGlzIGB0cnVlYC5cbiAgICovXG4gIEBJbnB1dCgpIGFuaW1hdGVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBwcm9ncmVzcyBiYXJzIHdpbGwgYmUgZGlzcGxheWVkIGFzIHN0cmlwZWQuXG4gICAqL1xuICBASW5wdXQoKSBzdHJpcGVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjdXJyZW50IHBlcmNlbnRhZ2Ugd2lsbCBiZSBzaG93biBpbiB0aGUgYHh4JWAgZm9ybWF0LlxuICAgKi9cbiAgQElucHV0KCkgc2hvd1ZhbHVlOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0aGUgcHJvZ3Jlc3MgYmFyLlxuICAgKlxuICAgKiBDdXJyZW50bHkgQm9vdHN0cmFwIHN1cHBvcnRzIGBcInN1Y2Nlc3NcImAsIGBcImluZm9cImAsIGBcIndhcm5pbmdcImAgb3IgYFwiZGFuZ2VyXCJgLlxuICAgKi9cbiAgQElucHV0KCkgdHlwZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCB2YWx1ZSBmb3IgdGhlIHByb2dyZXNzIGJhci5cbiAgICpcbiAgICogU2hvdWxkIGJlIGluIHRoZSBgWzAsIG1heF1gIHJhbmdlLlxuICAgKi9cbiAgQElucHV0KCkgdmFsdWUgPSAwO1xuXG4gIC8qKlxuICAgKiBUSGUgaGVpZ2h0IG9mIHRoZSBwcm9ncmVzcyBiYXIuXG4gICAqXG4gICAqIEFjY2VwdHMgYW55IHZhbGlkIENTUyBoZWlnaHQgdmFsdWVzLCBleC4gYFwiMnJlbVwiYFxuICAgKi9cbiAgQElucHV0KCkgaGVpZ2h0OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBOZ2JQcm9ncmVzc2JhckNvbmZpZykge1xuICAgIHRoaXMubWF4ID0gY29uZmlnLm1heDtcbiAgICB0aGlzLmFuaW1hdGVkID0gY29uZmlnLmFuaW1hdGVkO1xuICAgIHRoaXMuc3RyaXBlZCA9IGNvbmZpZy5zdHJpcGVkO1xuICAgIHRoaXMudHlwZSA9IGNvbmZpZy50eXBlO1xuICAgIHRoaXMuc2hvd1ZhbHVlID0gY29uZmlnLnNob3dWYWx1ZTtcbiAgICB0aGlzLmhlaWdodCA9IGNvbmZpZy5oZWlnaHQ7XG4gIH1cblxuICBnZXRWYWx1ZSgpIHsgcmV0dXJuIGdldFZhbHVlSW5SYW5nZSh0aGlzLnZhbHVlLCB0aGlzLm1heCk7IH1cblxuICBnZXRQZXJjZW50VmFsdWUoKSB7IHJldHVybiAxMDAgKiB0aGlzLmdldFZhbHVlKCkgLyB0aGlzLm1heDsgfVxufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/progressbar/progressbar.module.js b/dist/sunbird-ui-components/esm2015/progressbar/progressbar.module.js new file mode 100644 index 0000000..ce9ef9a --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/progressbar/progressbar.module.js @@ -0,0 +1,15 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { NgbProgressbar } from './progressbar'; +export { NgbProgressbar } from './progressbar'; +export { NgbProgressbarConfig } from './progressbar-config'; +export class NgbProgressbarModule { +} +NgbProgressbarModule.decorators = [ + { type: NgModule, args: [{ declarations: [NgbProgressbar], exports: [NgbProgressbar], imports: [CommonModule] },] } +]; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3NiYXIubW9kdWxlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsicHJvZ3Jlc3NiYXIvcHJvZ3Jlc3NiYXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUU3QyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRTdDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDN0MsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFHMUQsTUFBTSxPQUFPLG9CQUFvQjs7O1lBRGhDLFFBQVEsU0FBQyxFQUFDLFlBQVksRUFBRSxDQUFDLGNBQWMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLGNBQWMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHtOZ2JQcm9ncmVzc2Jhcn0gZnJvbSAnLi9wcm9ncmVzc2Jhcic7XG5cbmV4cG9ydCB7TmdiUHJvZ3Jlc3NiYXJ9IGZyb20gJy4vcHJvZ3Jlc3NiYXInO1xuZXhwb3J0IHtOZ2JQcm9ncmVzc2JhckNvbmZpZ30gZnJvbSAnLi9wcm9ncmVzc2Jhci1jb25maWcnO1xuXG5ATmdNb2R1bGUoe2RlY2xhcmF0aW9uczogW05nYlByb2dyZXNzYmFyXSwgZXhwb3J0czogW05nYlByb2dyZXNzYmFyXSwgaW1wb3J0czogW0NvbW1vbk1vZHVsZV19KVxuZXhwb3J0IGNsYXNzIE5nYlByb2dyZXNzYmFyTW9kdWxlIHtcbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/rating/rating-config.js b/dist/sunbird-ui-components/esm2015/rating/rating-config.js new file mode 100644 index 0000000..867e041 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/rating/rating-config.js @@ -0,0 +1,32 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Injectable } from '@angular/core'; +import * as i0 from "@angular/core"; +/** + * A configuration service for the [`NgbRating`](#/components/rating/api#NgbRating) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the ratings used in the application. + */ +export class NgbRatingConfig { + constructor() { + this.max = 10; + this.readonly = false; + this.resettable = false; + } +} +NgbRatingConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } +]; +/** @nocollapse */ NgbRatingConfig.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function NgbRatingConfig_Factory() { return new NgbRatingConfig(); }, token: NgbRatingConfig, providedIn: "root" }); +if (false) { + /** @type {?} */ + NgbRatingConfig.prototype.max; + /** @type {?} */ + NgbRatingConfig.prototype.readonly; + /** @type {?} */ + NgbRatingConfig.prototype.resettable; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF0aW5nLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbInJhdGluZy9yYXRpbmctY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQVN6QyxNQUFNLE9BQU8sZUFBZTtJQUQ1QjtRQUVFLFFBQUcsR0FBRyxFQUFFLENBQUM7UUFDVCxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGVBQVUsR0FBRyxLQUFLLENBQUM7S0FDcEI7OztZQUxBLFVBQVUsU0FBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUM7Ozs7O0lBRTlCLDhCQUFTOztJQUNULG1DQUFpQjs7SUFDakIscUNBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBBIGNvbmZpZ3VyYXRpb24gc2VydmljZSBmb3IgdGhlIFtgTmdiUmF0aW5nYF0oIy9jb21wb25lbnRzL3JhdGluZy9hcGkjTmdiUmF0aW5nKSBjb21wb25lbnQuXG4gKlxuICogWW91IGNhbiBpbmplY3QgdGhpcyBzZXJ2aWNlLCB0eXBpY2FsbHkgaW4geW91ciByb290IGNvbXBvbmVudCwgYW5kIGN1c3RvbWl6ZSB0aGUgdmFsdWVzIG9mIGl0cyBwcm9wZXJ0aWVzIGluXG4gKiBvcmRlciB0byBwcm92aWRlIGRlZmF1bHQgdmFsdWVzIGZvciBhbGwgdGhlIHJhdGluZ3MgdXNlZCBpbiB0aGUgYXBwbGljYXRpb24uXG4gKi9cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIE5nYlJhdGluZ0NvbmZpZyB7XG4gIG1heCA9IDEwO1xuICByZWFkb25seSA9IGZhbHNlO1xuICByZXNldHRhYmxlID0gZmFsc2U7XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/rating/rating.js b/dist/sunbird-ui-components/esm2015/rating/rating.js new file mode 100644 index 0000000..76bbb22 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/rating/rating.js @@ -0,0 +1,341 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Component, ChangeDetectionStrategy, Input, Output, EventEmitter, TemplateRef, ContentChild, forwardRef, ChangeDetectorRef } from '@angular/core'; +import { NgbRatingConfig } from './rating-config'; +import { getValueInRange } from '../util/util'; +import { Key } from '../util/key'; +import { NG_VALUE_ACCESSOR } from '@angular/forms'; +/** + * The context for the custom star display template defined in the `starTemplate`. + * @record + */ +export function StarTemplateContext() { } +if (false) { + /** + * The star fill percentage, an integer in the `[0, 100]` range. + * @type {?} + */ + StarTemplateContext.prototype.fill; + /** + * Index of the star, starts with `0`. + * @type {?} + */ + StarTemplateContext.prototype.index; +} +/** @type {?} */ +const NGB_RATING_VALUE_ACCESSOR = { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef((/** + * @return {?} + */ + () => NgbRating)), + multi: true +}; +/** + * A directive that helps visualising and interacting with a star rating bar. + */ +export class NgbRating { + /** + * @param {?} config + * @param {?} _changeDetectorRef + */ + constructor(config, _changeDetectorRef) { + this._changeDetectorRef = _changeDetectorRef; + this.contexts = []; + this.disabled = false; + /** + * An event emitted when the user is hovering over a given rating. + * + * Event payload equals to the rating being hovered over. + */ + this.hover = new EventEmitter(); + /** + * An event emitted when the user stops hovering over a given rating. + * + * Event payload equals to the rating of the last item being hovered over. + */ + this.leave = new EventEmitter(); + /** + * An event emitted when the user selects a new rating. + * + * Event payload equals to the newly selected rating. + */ + this.rateChange = new EventEmitter(true); + this.onChange = (/** + * @param {?} _ + * @return {?} + */ + (_) => { }); + this.onTouched = (/** + * @return {?} + */ + () => { }); + this.max = config.max; + this.readonly = config.readonly; + } + /** + * @return {?} + */ + ariaValueText() { return `${this.nextRate} out of ${this.max}`; } + /** + * @param {?} value + * @return {?} + */ + enter(value) { + if (!this.readonly && !this.disabled) { + this._updateState(value); + } + this.hover.emit(value); + } + /** + * @return {?} + */ + handleBlur() { this.onTouched(); } + /** + * @param {?} value + * @return {?} + */ + handleClick(value) { this.update(this.resettable && this.rate === value ? 0 : value); } + /** + * @param {?} event + * @return {?} + */ + handleKeyDown(event) { + // tslint:disable-next-line:deprecation + switch (event.which) { + case Key.ArrowDown: + case Key.ArrowLeft: + this.update(this.rate - 1); + break; + case Key.ArrowUp: + case Key.ArrowRight: + this.update(this.rate + 1); + break; + case Key.Home: + this.update(0); + break; + case Key.End: + this.update(this.max); + break; + default: + return; + } + // note 'return' in default case + event.preventDefault(); + } + /** + * @param {?} changes + * @return {?} + */ + ngOnChanges(changes) { + if (changes['rate']) { + this.update(this.rate); + } + } + /** + * @return {?} + */ + ngOnInit() { + this.contexts = Array.from({ length: this.max }, (/** + * @param {?} v + * @param {?} k + * @return {?} + */ + (v, k) => ({ fill: 0, index: k }))); + this._updateState(this.rate); + } + /** + * @param {?} fn + * @return {?} + */ + registerOnChange(fn) { this.onChange = fn; } + /** + * @param {?} fn + * @return {?} + */ + registerOnTouched(fn) { this.onTouched = fn; } + /** + * @return {?} + */ + reset() { + this.leave.emit(this.nextRate); + this._updateState(this.rate); + } + /** + * @param {?} isDisabled + * @return {?} + */ + setDisabledState(isDisabled) { this.disabled = isDisabled; } + /** + * @param {?} value + * @param {?=} internalChange + * @return {?} + */ + update(value, internalChange = true) { + /** @type {?} */ + const newRate = getValueInRange(value, this.max, 0); + if (!this.readonly && !this.disabled && this.rate !== newRate) { + this.rate = newRate; + this.rateChange.emit(this.rate); + } + if (internalChange) { + this.onChange(this.rate); + this.onTouched(); + } + this._updateState(this.rate); + } + /** + * @param {?} value + * @return {?} + */ + writeValue(value) { + this.update(value, false); + this._changeDetectorRef.markForCheck(); + } + /** + * @private + * @param {?} index + * @return {?} + */ + _getFillValue(index) { + /** @type {?} */ + const diff = this.nextRate - index; + if (diff >= 1) { + return 100; + } + if (diff < 1 && diff > 0) { + return parseInt((diff * 100).toFixed(2), 10); + } + return 0; + } + /** + * @private + * @param {?} nextValue + * @return {?} + */ + _updateState(nextValue) { + this.nextRate = nextValue; + this.contexts.forEach((/** + * @param {?} context + * @param {?} index + * @return {?} + */ + (context, index) => context.fill = this._getFillValue(index))); + } +} +NgbRating.decorators = [ + { type: Component, args: [{ + selector: 'ngb-rating', + changeDetection: ChangeDetectionStrategy.OnPush, + host: { + 'class': 'd-inline-flex', + 'tabindex': '0', + 'role': 'slider', + 'aria-valuemin': '0', + '[attr.aria-valuemax]': 'max', + '[attr.aria-valuenow]': 'nextRate', + '[attr.aria-valuetext]': 'ariaValueText()', + '[attr.aria-disabled]': 'readonly ? true : null', + '(blur)': 'handleBlur()', + '(keydown)': 'handleKeyDown($event)', + '(mouseleave)': 'reset()' + }, + template: ` + {{ fill === 100 ? '★' : '☆' }} + + ({{ index < nextRate ? '*' : ' ' }}) + + + + + + `, + providers: [NGB_RATING_VALUE_ACCESSOR] + }] } +]; +/** @nocollapse */ +NgbRating.ctorParameters = () => [ + { type: NgbRatingConfig }, + { type: ChangeDetectorRef } +]; +NgbRating.propDecorators = { + max: [{ type: Input }], + rate: [{ type: Input }], + readonly: [{ type: Input }], + resettable: [{ type: Input }], + starTemplate: [{ type: Input }], + starTemplateFromContent: [{ type: ContentChild, args: [TemplateRef, { static: false },] }], + hover: [{ type: Output }], + leave: [{ type: Output }], + rateChange: [{ type: Output }] +}; +if (false) { + /** @type {?} */ + NgbRating.prototype.contexts; + /** @type {?} */ + NgbRating.prototype.disabled; + /** @type {?} */ + NgbRating.prototype.nextRate; + /** + * The maximal rating that can be given. + * @type {?} + */ + NgbRating.prototype.max; + /** + * The current rating. Could be a decimal value like `3.75`. + * @type {?} + */ + NgbRating.prototype.rate; + /** + * If `true`, the rating can't be changed. + * @type {?} + */ + NgbRating.prototype.readonly; + /** + * If `true`, the rating can be reset to `0` by mouse clicking currently set rating. + * @type {?} + */ + NgbRating.prototype.resettable; + /** + * The template to override the way each star is displayed. + * + * Alternatively put an `` as the only child of your `` element + * @type {?} + */ + NgbRating.prototype.starTemplate; + /** @type {?} */ + NgbRating.prototype.starTemplateFromContent; + /** + * An event emitted when the user is hovering over a given rating. + * + * Event payload equals to the rating being hovered over. + * @type {?} + */ + NgbRating.prototype.hover; + /** + * An event emitted when the user stops hovering over a given rating. + * + * Event payload equals to the rating of the last item being hovered over. + * @type {?} + */ + NgbRating.prototype.leave; + /** + * An event emitted when the user selects a new rating. + * + * Event payload equals to the newly selected rating. + * @type {?} + */ + NgbRating.prototype.rateChange; + /** @type {?} */ + NgbRating.prototype.onChange; + /** @type {?} */ + NgbRating.prototype.onTouched; + /** + * @type {?} + * @private + */ + NgbRating.prototype._changeDetectorRef; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF0aW5nLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsicmF0aW5nL3JhdGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCx1QkFBdUIsRUFDdkIsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBRVosV0FBVyxFQUdYLFlBQVksRUFDWixVQUFVLEVBQ1YsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQzdDLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDaEMsT0FBTyxFQUF1QixpQkFBaUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7OztBQUt2RSx5Q0FVQzs7Ozs7O0lBTkMsbUNBQWE7Ozs7O0lBS2Isb0NBQWM7OztNQUdWLHlCQUF5QixHQUFHO0lBQ2hDLE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVU7OztJQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBQztJQUN4QyxLQUFLLEVBQUUsSUFBSTtDQUNaOzs7O0FBaUNELE1BQU0sT0FBTyxTQUFTOzs7OztJQTJEcEIsWUFBWSxNQUF1QixFQUFVLGtCQUFxQztRQUFyQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW1CO1FBekRsRixhQUFRLEdBQTBCLEVBQUUsQ0FBQztRQUNyQyxhQUFRLEdBQUcsS0FBSyxDQUFDOzs7Ozs7UUFxQ1AsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7Ozs7OztRQU9uQyxVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQzs7Ozs7O1FBT25DLGVBQVUsR0FBRyxJQUFJLFlBQVksQ0FBUyxJQUFJLENBQUMsQ0FBQztRQUV0RCxhQUFROzs7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QUFLO3NDQUNMLFlBQVksU0FBQyxXQUFXLEVBQUUsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFDO29CQU96QyxNQUFNO29CQU9OLE1BQU07eUJBT04sTUFBTTs7OztJQXBEUCw2QkFBcUM7O0lBQ3JDLDZCQUFpQjs7SUFDakIsNkJBQWlCOzs7OztJQU1qQix3QkFBcUI7Ozs7O0lBS3JCLHlCQUFzQjs7Ozs7SUFLdEIsNkJBQTJCOzs7OztJQUszQiwrQkFBNkI7Ozs7Ozs7SUFPN0IsaUNBQXdEOztJQUN4RCw0Q0FBc0c7Ozs7Ozs7SUFPdEcsMEJBQTZDOzs7Ozs7O0lBTzdDLDBCQUE2Qzs7Ozs7OztJQU83QywrQkFBc0Q7O0lBRXRELDZCQUEwQjs7SUFDMUIsOEJBQXFCOzs7OztJQUVnQix1Q0FBNkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIE9uSW5pdCxcbiAgVGVtcGxhdGVSZWYsXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgQ29udGVudENoaWxkLFxuICBmb3J3YXJkUmVmLFxuICBDaGFuZ2VEZXRlY3RvclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TmdiUmF0aW5nQ29uZmlnfSBmcm9tICcuL3JhdGluZy1jb25maWcnO1xuaW1wb3J0IHtnZXRWYWx1ZUluUmFuZ2V9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQge0tleX0gZnJvbSAnLi4vdXRpbC9rZXknO1xuaW1wb3J0IHtDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1J9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuLyoqXG4gKiBUaGUgY29udGV4dCBmb3IgdGhlIGN1c3RvbSBzdGFyIGRpc3BsYXkgdGVtcGxhdGUgZGVmaW5lZCBpbiB0aGUgYHN0YXJUZW1wbGF0ZWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RhclRlbXBsYXRlQ29udGV4dCB7XG4gIC8qKlxuICAgKiBUaGUgc3RhciBmaWxsIHBlcmNlbnRhZ2UsIGFuIGludGVnZXIgaW4gdGhlIGBbMCwgMTAwXWAgcmFuZ2UuXG4gICAqL1xuICBmaWxsOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEluZGV4IG9mIHRoZSBzdGFyLCBzdGFydHMgd2l0aCBgMGAuXG4gICAqL1xuICBpbmRleDogbnVtYmVyO1xufVxuXG5jb25zdCBOR0JfUkFUSU5HX1ZBTFVFX0FDQ0VTU09SID0ge1xuICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTmdiUmF0aW5nKSxcbiAgbXVsdGk6IHRydWVcbn07XG5cbi8qKlxuICogQSBkaXJlY3RpdmUgdGhhdCBoZWxwcyB2aXN1YWxpc2luZyBhbmQgaW50ZXJhY3Rpbmcgd2l0aCBhIHN0YXIgcmF0aW5nIGJhci5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmdiLXJhdGluZycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7XG4gICAgJ2NsYXNzJzogJ2QtaW5saW5lLWZsZXgnLFxuICAgICd0YWJpbmRleCc6ICcwJyxcbiAgICAncm9sZSc6ICdzbGlkZXInLFxuICAgICdhcmlhLXZhbHVlbWluJzogJzAnLFxuICAgICdbYXR0ci5hcmlhLXZhbHVlbWF4XSc6ICdtYXgnLFxuICAgICdbYXR0ci5hcmlhLXZhbHVlbm93XSc6ICduZXh0UmF0ZScsXG4gICAgJ1thdHRyLmFyaWEtdmFsdWV0ZXh0XSc6ICdhcmlhVmFsdWVUZXh0KCknLFxuICAgICdbYXR0ci5hcmlhLWRpc2FibGVkXSc6ICdyZWFkb25seSA/IHRydWUgOiBudWxsJyxcbiAgICAnKGJsdXIpJzogJ2hhbmRsZUJsdXIoKScsXG4gICAgJyhrZXlkb3duKSc6ICdoYW5kbGVLZXlEb3duKCRldmVudCknLFxuICAgICcobW91c2VsZWF2ZSknOiAncmVzZXQoKSdcbiAgfSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bmctdGVtcGxhdGUgI3QgbGV0LWZpbGw9XCJmaWxsXCI+e3sgZmlsbCA9PT0gMTAwID8gJyYjOTczMzsnIDogJyYjOTczNDsnIH19PC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgbmdGb3IgW25nRm9yT2ZdPVwiY29udGV4dHNcIiBsZXQtaW5kZXg9XCJpbmRleFwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+KHt7IGluZGV4IDwgbmV4dFJhdGUgPyAnKicgOiAnICcgfX0pPC9zcGFuPlxuICAgICAgPHNwYW4gKG1vdXNlZW50ZXIpPVwiZW50ZXIoaW5kZXggKyAxKVwiIChjbGljayk9XCJoYW5kbGVDbGljayhpbmRleCArIDEpXCIgW3N0eWxlLmN1cnNvcl09XCJyZWFkb25seSB8fCBkaXNhYmxlZCA/ICdkZWZhdWx0JyA6ICdwb2ludGVyJ1wiPlxuICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwic3RhclRlbXBsYXRlIHx8IHN0YXJUZW1wbGF0ZUZyb21Db250ZW50IHx8IHRcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwiY29udGV4dHNbaW5kZXhdXCI+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L3NwYW4+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgYCxcbiAgcHJvdmlkZXJzOiBbTkdCX1JBVElOR19WQUxVRV9BQ0NFU1NPUl1cbn0pXG5leHBvcnQgY2xhc3MgTmdiUmF0aW5nIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gICAgT25Jbml0LCBPbkNoYW5nZXMge1xuICBjb250ZXh0czogU3RhclRlbXBsYXRlQ29udGV4dFtdID0gW107XG4gIGRpc2FibGVkID0gZmFsc2U7XG4gIG5leHRSYXRlOiBudW1iZXI7XG5cblxuICAvKipcbiAgICogVGhlIG1heGltYWwgcmF0aW5nIHRoYXQgY2FuIGJlIGdpdmVuLlxuICAgKi9cbiAgQElucHV0KCkgbWF4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IHJhdGluZy4gQ291bGQgYmUgYSBkZWNpbWFsIHZhbHVlIGxpa2UgYDMuNzVgLlxuICAgKi9cbiAgQElucHV0KCkgcmF0ZTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSByYXRpbmcgY2FuJ3QgYmUgY2hhbmdlZC5cbiAgICovXG4gIEBJbnB1dCgpIHJlYWRvbmx5OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSByYXRpbmcgY2FuIGJlIHJlc2V0IHRvIGAwYCBieSBtb3VzZSBjbGlja2luZyBjdXJyZW50bHkgc2V0IHJhdGluZy5cbiAgICovXG4gIEBJbnB1dCgpIHJlc2V0dGFibGU6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB0byBvdmVycmlkZSB0aGUgd2F5IGVhY2ggc3RhciBpcyBkaXNwbGF5ZWQuXG4gICAqXG4gICAqIEFsdGVybmF0aXZlbHkgcHV0IGFuIGA8bmctdGVtcGxhdGU+YCBhcyB0aGUgb25seSBjaGlsZCBvZiB5b3VyIGA8bmdiLXJhdGluZz5gIGVsZW1lbnRcbiAgICovXG4gIEBJbnB1dCgpIHN0YXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8U3RhclRlbXBsYXRlQ29udGV4dD47XG4gIEBDb250ZW50Q2hpbGQoVGVtcGxhdGVSZWYsIHtzdGF0aWM6IGZhbHNlfSkgc3RhclRlbXBsYXRlRnJvbUNvbnRlbnQ6IFRlbXBsYXRlUmVmPFN0YXJUZW1wbGF0ZUNvbnRleHQ+O1xuXG4gIC8qKlxuICAgKiBBbiBldmVudCBlbWl0dGVkIHdoZW4gdGhlIHVzZXIgaXMgaG92ZXJpbmcgb3ZlciBhIGdpdmVuIHJhdGluZy5cbiAgICpcbiAgICogRXZlbnQgcGF5bG9hZCBlcXVhbHMgdG8gdGhlIHJhdGluZyBiZWluZyBob3ZlcmVkIG92ZXIuXG4gICAqL1xuICBAT3V0cHV0KCkgaG92ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAvKipcbiAgICogQW4gZXZlbnQgZW1pdHRlZCB3aGVuIHRoZSB1c2VyIHN0b3BzIGhvdmVyaW5nIG92ZXIgYSBnaXZlbiByYXRpbmcuXG4gICAqXG4gICAqIEV2ZW50IHBheWxvYWQgZXF1YWxzIHRvIHRoZSByYXRpbmcgb2YgdGhlIGxhc3QgaXRlbSBiZWluZyBob3ZlcmVkIG92ZXIuXG4gICAqL1xuICBAT3V0cHV0KCkgbGVhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAvKipcbiAgICogQW4gZXZlbnQgZW1pdHRlZCB3aGVuIHRoZSB1c2VyIHNlbGVjdHMgYSBuZXcgcmF0aW5nLlxuICAgKlxuICAgKiBFdmVudCBwYXlsb2FkIGVxdWFscyB0byB0aGUgbmV3bHkgc2VsZWN0ZWQgcmF0aW5nLlxuICAgKi9cbiAgQE91dHB1dCgpIHJhdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4odHJ1ZSk7XG5cbiAgb25DaGFuZ2UgPSAoXzogYW55KSA9PiB7fTtcbiAgb25Ub3VjaGVkID0gKCkgPT4ge307XG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBOZ2JSYXRpbmdDb25maWcsIHByaXZhdGUgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHRoaXMubWF4ID0gY29uZmlnLm1heDtcbiAgICB0aGlzLnJlYWRvbmx5ID0gY29uZmlnLnJlYWRvbmx5O1xuICB9XG5cbiAgYXJpYVZhbHVlVGV4dCgpIHsgcmV0dXJuIGAke3RoaXMubmV4dFJhdGV9IG91dCBvZiAke3RoaXMubWF4fWA7IH1cblxuICBlbnRlcih2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnJlYWRvbmx5ICYmICF0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLl91cGRhdGVTdGF0ZSh2YWx1ZSk7XG4gICAgfVxuICAgIHRoaXMuaG92ZXIuZW1pdCh2YWx1ZSk7XG4gIH1cblxuICBoYW5kbGVCbHVyKCkgeyB0aGlzLm9uVG91Y2hlZCgpOyB9XG5cbiAgaGFuZGxlQ2xpY2sodmFsdWU6IG51bWJlcikgeyB0aGlzLnVwZGF0ZSh0aGlzLnJlc2V0dGFibGUgJiYgdGhpcy5yYXRlID09PSB2YWx1ZSA/IDAgOiB2YWx1ZSk7IH1cblxuICBoYW5kbGVLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmRlcHJlY2F0aW9uXG4gICAgc3dpdGNoIChldmVudC53aGljaCkge1xuICAgICAgY2FzZSBLZXkuQXJyb3dEb3duOlxuICAgICAgY2FzZSBLZXkuQXJyb3dMZWZ0OlxuICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLnJhdGUgLSAxKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEtleS5BcnJvd1VwOlxuICAgICAgY2FzZSBLZXkuQXJyb3dSaWdodDpcbiAgICAgICAgdGhpcy51cGRhdGUodGhpcy5yYXRlICsgMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBLZXkuSG9tZTpcbiAgICAgICAgdGhpcy51cGRhdGUoMCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBLZXkuRW5kOlxuICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLm1heCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIG5vdGUgJ3JldHVybicgaW4gZGVmYXVsdCBjYXNlXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlc1sncmF0ZSddKSB7XG4gICAgICB0aGlzLnVwZGF0ZSh0aGlzLnJhdGUpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY29udGV4dHMgPSBBcnJheS5mcm9tKHtsZW5ndGg6IHRoaXMubWF4fSwgKHYsIGspID0+ICh7ZmlsbDogMCwgaW5kZXg6IGt9KSk7XG4gICAgdGhpcy5fdXBkYXRlU3RhdGUodGhpcy5yYXRlKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogYW55KSA9PiBhbnkpOiB2b2lkIHsgdGhpcy5vbkNoYW5nZSA9IGZuOyB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IGFueSk6IHZvaWQgeyB0aGlzLm9uVG91Y2hlZCA9IGZuOyB9XG5cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5sZWF2ZS5lbWl0KHRoaXMubmV4dFJhdGUpO1xuICAgIHRoaXMuX3VwZGF0ZVN0YXRlKHRoaXMucmF0ZSk7XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHsgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7IH1cblxuICB1cGRhdGUodmFsdWU6IG51bWJlciwgaW50ZXJuYWxDaGFuZ2UgPSB0cnVlKTogdm9pZCB7XG4gICAgY29uc3QgbmV3UmF0ZSA9IGdldFZhbHVlSW5SYW5nZSh2YWx1ZSwgdGhpcy5tYXgsIDApO1xuICAgIGlmICghdGhpcy5yZWFkb25seSAmJiAhdGhpcy5kaXNhYmxlZCAmJiB0aGlzLnJhdGUgIT09IG5ld1JhdGUpIHtcbiAgICAgIHRoaXMucmF0ZSA9IG5ld1JhdGU7XG4gICAgICB0aGlzLnJhdGVDaGFuZ2UuZW1pdCh0aGlzLnJhdGUpO1xuICAgIH1cbiAgICBpZiAoaW50ZXJuYWxDaGFuZ2UpIHtcbiAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5yYXRlKTtcbiAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgfVxuICAgIHRoaXMuX3VwZGF0ZVN0YXRlKHRoaXMucmF0ZSk7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlKSB7XG4gICAgdGhpcy51cGRhdGUodmFsdWUsIGZhbHNlKTtcbiAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldEZpbGxWYWx1ZShpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBkaWZmID0gdGhpcy5uZXh0UmF0ZSAtIGluZGV4O1xuXG4gICAgaWYgKGRpZmYgPj0gMSkge1xuICAgICAgcmV0dXJuIDEwMDtcbiAgICB9XG4gICAgaWYgKGRpZmYgPCAxICYmIGRpZmYgPiAwKSB7XG4gICAgICByZXR1cm4gcGFyc2VJbnQoKGRpZmYgKiAxMDApLnRvRml4ZWQoMiksIDEwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZVN0YXRlKG5leHRWYWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5uZXh0UmF0ZSA9IG5leHRWYWx1ZTtcbiAgICB0aGlzLmNvbnRleHRzLmZvckVhY2goKGNvbnRleHQsIGluZGV4KSA9PiBjb250ZXh0LmZpbGwgPSB0aGlzLl9nZXRGaWxsVmFsdWUoaW5kZXgpKTtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/rating/rating.module.js b/dist/sunbird-ui-components/esm2015/rating/rating.module.js new file mode 100644 index 0000000..8e56c11 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/rating/rating.module.js @@ -0,0 +1,15 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { NgbRating } from './rating'; +export { NgbRating } from './rating'; +export { NgbRatingConfig } from './rating-config'; +export class NgbRatingModule { +} +NgbRatingModule.decorators = [ + { type: NgModule, args: [{ declarations: [NgbRating], exports: [NgbRating], imports: [CommonModule] },] } +]; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF0aW5nLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbInJhdGluZy9yYXRpbmcubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUU3QyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBRW5DLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDbkMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBR2hELE1BQU0sT0FBTyxlQUFlOzs7WUFEM0IsUUFBUSxTQUFDLEVBQUMsWUFBWSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge05nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQge05nYlJhdGluZ30gZnJvbSAnLi9yYXRpbmcnO1xuXG5leHBvcnQge05nYlJhdGluZ30gZnJvbSAnLi9yYXRpbmcnO1xuZXhwb3J0IHtOZ2JSYXRpbmdDb25maWd9IGZyb20gJy4vcmF0aW5nLWNvbmZpZyc7XG5cbkBOZ01vZHVsZSh7ZGVjbGFyYXRpb25zOiBbTmdiUmF0aW5nXSwgZXhwb3J0czogW05nYlJhdGluZ10sIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdfSlcbmV4cG9ydCBjbGFzcyBOZ2JSYXRpbmdNb2R1bGUge1xufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/sunbird-ui-components.js b/dist/sunbird-ui-components/esm2015/sunbird-ui-components.js new file mode 100644 index 0000000..a6c87d0 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/sunbird-ui-components.js @@ -0,0 +1,33 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * Generated bundle index. Do not edit. + */ +export { NgbAccordion, NgbAccordionConfig, NgbAccordionModule, NgbPanel, NgbPanelContent, NgbPanelHeader, NgbPanelTitle, NgbPanelToggle, SbCard, SbCardConfig, SbCardModule, NgbAlert, NgbAlertConfig, NgbAlertModule, NgbButtonLabel, NgbButtonsModule, NgbCheckBox, NgbRadio, NgbRadioGroup, NgbCarousel, NgbCarouselConfig, NgbCarouselModule, NgbSlide, NgbSlideEventDirection, NgbSlideEventSource, NgbCollapse, NgbCollapseModule, NgbCalendar, NgbCalendarGregorian, NgbCalendarHebrew, NgbCalendarIslamicCivil, NgbCalendarIslamicUmalqura, NgbCalendarPersian, NgbDate, NgbDateAdapter, NgbDateNativeAdapter, NgbDateNativeUTCAdapter, NgbDateParserFormatter, NgbDatepicker, NgbDatepickerConfig, NgbDatepickerI18n, NgbDatepickerI18nHebrew, NgbDatepickerModule, NgbInputDatepicker, NgbDropdown, NgbDropdownAnchor, NgbDropdownConfig, NgbDropdownItem, NgbDropdownMenu, NgbDropdownModule, NgbDropdownToggle, ModalDismissReasons, NgbActiveModal, NgbModal, NgbModalConfig, NgbModalModule, NgbModalRef, NgbPagination, NgbPaginationConfig, NgbPaginationEllipsis, NgbPaginationFirst, NgbPaginationLast, NgbPaginationModule, NgbPaginationNext, NgbPaginationNumber, NgbPaginationPrevious, NgbPopover, NgbPopoverConfig, NgbPopoverModule, NgbProgressbar, NgbProgressbarConfig, NgbProgressbarModule, NgbRating, NgbRatingConfig, NgbRatingModule, NgbTab, NgbTabContent, NgbTabset, NgbTabsetConfig, NgbTabsetModule, NgbTabTitle, NgbTimeAdapter, NgbTimepickerI18n, NgbTimepicker, NgbTimepickerConfig, NgbTimepickerModule, NgbToast, NgbToastConfig, NgbToastHeader, NgbToastModule, NgbTooltip, NgbTooltipConfig, NgbTooltipModule, NgbHighlight, NgbTypeahead, NgbTypeaheadConfig, NgbTypeaheadModule, NgbModule } from './index'; +export { NGB_CAROUSEL_DIRECTIVES as ɵa } from './carousel/carousel'; +export { NGB_DATEPICKER_DATE_ADAPTER_FACTORY as ɵi, NgbDateStructAdapter as ɵj } from './datepicker/adapters/ngb-date-adapter'; +export { NgbDatepickerDayView as ɵd } from './datepicker/datepicker-day-view'; +export { NGB_DATEPICKER_18N_FACTORY as ɵg, NgbDatepickerI18nDefault as ɵh } from './datepicker/datepicker-i18n'; +export { NgbDatepickerKeyMapService as ɵv } from './datepicker/datepicker-keymap-service'; +export { NgbDatepickerMonthView as ɵc } from './datepicker/datepicker-month-view'; +export { NgbDatepickerNavigation as ɵe } from './datepicker/datepicker-navigation'; +export { NgbDatepickerNavigationSelect as ɵf } from './datepicker/datepicker-navigation-select'; +export { NgbDatepickerService as ɵu } from './datepicker/datepicker-service'; +export { NgbCalendarHijri as ɵbd } from './datepicker/hijri/ngb-calendar-hijri'; +export { NGB_DATEPICKER_CALENDAR_FACTORY as ɵb } from './datepicker/ngb-calendar'; +export { NGB_DATEPICKER_PARSER_FORMATTER_FACTORY as ɵk, NgbDateISOParserFormatter as ɵl } from './datepicker/ngb-date-parser-formatter'; +export { NgbNavbar as ɵm } from './dropdown/dropdown'; +export { NgbModalBackdrop as ɵw } from './modal/modal-backdrop'; +export { NgbModalStack as ɵy } from './modal/modal-stack'; +export { NgbModalWindow as ɵx } from './modal/modal-window'; +export { NgbPopoverWindow as ɵn } from './popover/popover'; +export { NGB_DATEPICKER_TIME_ADAPTER_FACTORY as ɵo, NgbTimeStructAdapter as ɵp } from './timepicker/ngb-time-adapter'; +export { NGB_TIMEPICKER_I18N_FACTORY as ɵq, NgbTimepickerI18nDefault as ɵr } from './timepicker/timepicker-i18n'; +export { NgbTooltipWindow as ɵs } from './tooltip/tooltip'; +export { NgbTypeaheadWindow as ɵt } from './typeahead/typeahead-window'; +export { ARIA_LIVE_DELAY as ɵba, ARIA_LIVE_DELAY_FACTORY as ɵbb, Live as ɵbc } from './util/accessibility/live'; +export { ContentRef as ɵbe } from './util/popup'; +export { ScrollBar as ɵz } from './util/scrollbar'; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VuYmlyZC11aS1jb21wb25lbnRzLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsic3VuYmlyZC11aS1jb21wb25lbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFJQSxtcERBQWMsU0FBUyxDQUFDO0FBRXhCLE9BQU8sRUFBQyx1QkFBdUIsSUFBSSxFQUFFLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRSxPQUFPLEVBQUMsbUNBQW1DLElBQUksRUFBRSxFQUFDLG9CQUFvQixJQUFJLEVBQUUsRUFBQyxNQUFNLHdDQUF3QyxDQUFDO0FBQzVILE9BQU8sRUFBQyxvQkFBb0IsSUFBSSxFQUFFLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUM1RSxPQUFPLEVBQUMsMEJBQTBCLElBQUksRUFBRSxFQUFDLHdCQUF3QixJQUFJLEVBQUUsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQzdHLE9BQU8sRUFBQywwQkFBMEIsSUFBSSxFQUFFLEVBQUMsTUFBTSx3Q0FBd0MsQ0FBQztBQUN4RixPQUFPLEVBQUMsc0JBQXNCLElBQUksRUFBRSxFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDaEYsT0FBTyxFQUFDLHVCQUF1QixJQUFJLEVBQUUsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBQ2pGLE9BQU8sRUFBQyw2QkFBNkIsSUFBSSxFQUFFLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUM5RixPQUFPLEVBQUMsb0JBQW9CLElBQUksRUFBRSxFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDM0UsT0FBTyxFQUFDLGdCQUFnQixJQUFJLEdBQUcsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBQzlFLE9BQU8sRUFBQywrQkFBK0IsSUFBSSxFQUFFLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRixPQUFPLEVBQUMsdUNBQXVDLElBQUksRUFBRSxFQUFDLHlCQUF5QixJQUFJLEVBQUUsRUFBQyxNQUFNLHdDQUF3QyxDQUFDO0FBQ3JJLE9BQU8sRUFBQyxTQUFTLElBQUksRUFBRSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFDLGdCQUFnQixJQUFJLEVBQUUsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQzlELE9BQU8sRUFBQyxhQUFhLElBQUksRUFBRSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDeEQsT0FBTyxFQUFDLGNBQWMsSUFBSSxFQUFFLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRCxPQUFPLEVBQUMsZ0JBQWdCLElBQUksRUFBRSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDekQsT0FBTyxFQUFDLG1DQUFtQyxJQUFJLEVBQUUsRUFBQyxvQkFBb0IsSUFBSSxFQUFFLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUNuSCxPQUFPLEVBQUMsMkJBQTJCLElBQUksRUFBRSxFQUFDLHdCQUF3QixJQUFJLEVBQUUsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQzlHLE9BQU8sRUFBQyxnQkFBZ0IsSUFBSSxFQUFFLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsa0JBQWtCLElBQUksRUFBRSxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDdEUsT0FBTyxFQUFDLGVBQWUsSUFBSSxHQUFHLEVBQUMsdUJBQXVCLElBQUksR0FBRyxFQUFDLElBQUksSUFBSSxHQUFHLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RyxPQUFPLEVBQUMsVUFBVSxJQUFJLEdBQUcsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUMvQyxPQUFPLEVBQUMsU0FBUyxJQUFJLEVBQUUsRUFBQyxNQUFNLGtCQUFrQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcblxuZXhwb3J0IHtOR0JfQ0FST1VTRUxfRElSRUNUSVZFUyBhcyDJtWF9IGZyb20gJy4vY2Fyb3VzZWwvY2Fyb3VzZWwnO1xuZXhwb3J0IHtOR0JfREFURVBJQ0tFUl9EQVRFX0FEQVBURVJfRkFDVE9SWSBhcyDJtWksTmdiRGF0ZVN0cnVjdEFkYXB0ZXIgYXMgybVqfSBmcm9tICcuL2RhdGVwaWNrZXIvYWRhcHRlcnMvbmdiLWRhdGUtYWRhcHRlcic7XG5leHBvcnQge05nYkRhdGVwaWNrZXJEYXlWaWV3IGFzIMm1ZH0gZnJvbSAnLi9kYXRlcGlja2VyL2RhdGVwaWNrZXItZGF5LXZpZXcnO1xuZXhwb3J0IHtOR0JfREFURVBJQ0tFUl8xOE5fRkFDVE9SWSBhcyDJtWcsTmdiRGF0ZXBpY2tlckkxOG5EZWZhdWx0IGFzIMm1aH0gZnJvbSAnLi9kYXRlcGlja2VyL2RhdGVwaWNrZXItaTE4bic7XG5leHBvcnQge05nYkRhdGVwaWNrZXJLZXlNYXBTZXJ2aWNlIGFzIMm1dn0gZnJvbSAnLi9kYXRlcGlja2VyL2RhdGVwaWNrZXIta2V5bWFwLXNlcnZpY2UnO1xuZXhwb3J0IHtOZ2JEYXRlcGlja2VyTW9udGhWaWV3IGFzIMm1Y30gZnJvbSAnLi9kYXRlcGlja2VyL2RhdGVwaWNrZXItbW9udGgtdmlldyc7XG5leHBvcnQge05nYkRhdGVwaWNrZXJOYXZpZ2F0aW9uIGFzIMm1ZX0gZnJvbSAnLi9kYXRlcGlja2VyL2RhdGVwaWNrZXItbmF2aWdhdGlvbic7XG5leHBvcnQge05nYkRhdGVwaWNrZXJOYXZpZ2F0aW9uU2VsZWN0IGFzIMm1Zn0gZnJvbSAnLi9kYXRlcGlja2VyL2RhdGVwaWNrZXItbmF2aWdhdGlvbi1zZWxlY3QnO1xuZXhwb3J0IHtOZ2JEYXRlcGlja2VyU2VydmljZSBhcyDJtXV9IGZyb20gJy4vZGF0ZXBpY2tlci9kYXRlcGlja2VyLXNlcnZpY2UnO1xuZXhwb3J0IHtOZ2JDYWxlbmRhckhpanJpIGFzIMm1YmR9IGZyb20gJy4vZGF0ZXBpY2tlci9oaWpyaS9uZ2ItY2FsZW5kYXItaGlqcmknO1xuZXhwb3J0IHtOR0JfREFURVBJQ0tFUl9DQUxFTkRBUl9GQUNUT1JZIGFzIMm1Yn0gZnJvbSAnLi9kYXRlcGlja2VyL25nYi1jYWxlbmRhcic7XG5leHBvcnQge05HQl9EQVRFUElDS0VSX1BBUlNFUl9GT1JNQVRURVJfRkFDVE9SWSBhcyDJtWssTmdiRGF0ZUlTT1BhcnNlckZvcm1hdHRlciBhcyDJtWx9IGZyb20gJy4vZGF0ZXBpY2tlci9uZ2ItZGF0ZS1wYXJzZXItZm9ybWF0dGVyJztcbmV4cG9ydCB7TmdiTmF2YmFyIGFzIMm1bX0gZnJvbSAnLi9kcm9wZG93bi9kcm9wZG93bic7XG5leHBvcnQge05nYk1vZGFsQmFja2Ryb3AgYXMgybV3fSBmcm9tICcuL21vZGFsL21vZGFsLWJhY2tkcm9wJztcbmV4cG9ydCB7TmdiTW9kYWxTdGFjayBhcyDJtXl9IGZyb20gJy4vbW9kYWwvbW9kYWwtc3RhY2snO1xuZXhwb3J0IHtOZ2JNb2RhbFdpbmRvdyBhcyDJtXh9IGZyb20gJy4vbW9kYWwvbW9kYWwtd2luZG93JztcbmV4cG9ydCB7TmdiUG9wb3ZlcldpbmRvdyBhcyDJtW59IGZyb20gJy4vcG9wb3Zlci9wb3BvdmVyJztcbmV4cG9ydCB7TkdCX0RBVEVQSUNLRVJfVElNRV9BREFQVEVSX0ZBQ1RPUlkgYXMgybVvLE5nYlRpbWVTdHJ1Y3RBZGFwdGVyIGFzIMm1cH0gZnJvbSAnLi90aW1lcGlja2VyL25nYi10aW1lLWFkYXB0ZXInO1xuZXhwb3J0IHtOR0JfVElNRVBJQ0tFUl9JMThOX0ZBQ1RPUlkgYXMgybVxLE5nYlRpbWVwaWNrZXJJMThuRGVmYXVsdCBhcyDJtXJ9IGZyb20gJy4vdGltZXBpY2tlci90aW1lcGlja2VyLWkxOG4nO1xuZXhwb3J0IHtOZ2JUb29sdGlwV2luZG93IGFzIMm1c30gZnJvbSAnLi90b29sdGlwL3Rvb2x0aXAnO1xuZXhwb3J0IHtOZ2JUeXBlYWhlYWRXaW5kb3cgYXMgybV0fSBmcm9tICcuL3R5cGVhaGVhZC90eXBlYWhlYWQtd2luZG93JztcbmV4cG9ydCB7QVJJQV9MSVZFX0RFTEFZIGFzIMm1YmEsQVJJQV9MSVZFX0RFTEFZX0ZBQ1RPUlkgYXMgybViYixMaXZlIGFzIMm1YmN9IGZyb20gJy4vdXRpbC9hY2Nlc3NpYmlsaXR5L2xpdmUnO1xuZXhwb3J0IHtDb250ZW50UmVmIGFzIMm1YmV9IGZyb20gJy4vdXRpbC9wb3B1cCc7XG5leHBvcnQge1Njcm9sbEJhciBhcyDJtXp9IGZyb20gJy4vdXRpbC9zY3JvbGxiYXInOyJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/tabset/tabset-config.js b/dist/sunbird-ui-components/esm2015/tabset/tabset-config.js new file mode 100644 index 0000000..44c72a2 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/tabset/tabset-config.js @@ -0,0 +1,32 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Injectable } from '@angular/core'; +import * as i0 from "@angular/core"; +/** + * A configuration service for the [`NgbTabset`](#/components/tabset/api#NgbTabset) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the tabsets used in the application. + */ +export class NgbTabsetConfig { + constructor() { + this.justify = 'start'; + this.orientation = 'horizontal'; + this.type = 'tabs'; + } +} +NgbTabsetConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } +]; +/** @nocollapse */ NgbTabsetConfig.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function NgbTabsetConfig_Factory() { return new NgbTabsetConfig(); }, token: NgbTabsetConfig, providedIn: "root" }); +if (false) { + /** @type {?} */ + NgbTabsetConfig.prototype.justify; + /** @type {?} */ + NgbTabsetConfig.prototype.orientation; + /** @type {?} */ + NgbTabsetConfig.prototype.type; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFic2V0LWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbInRhYnNldC90YWJzZXQtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQVN6QyxNQUFNLE9BQU8sZUFBZTtJQUQ1QjtRQUVFLFlBQU8sR0FBc0QsT0FBTyxDQUFDO1FBQ3JFLGdCQUFXLEdBQThCLFlBQVksQ0FBQztRQUN0RCxTQUFJLEdBQXFCLE1BQU0sQ0FBQztLQUNqQzs7O1lBTEEsVUFBVSxTQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQzs7Ozs7SUFFOUIsa0NBQXFFOztJQUNyRSxzQ0FBc0Q7O0lBQ3RELCtCQUFnQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogQSBjb25maWd1cmF0aW9uIHNlcnZpY2UgZm9yIHRoZSBbYE5nYlRhYnNldGBdKCMvY29tcG9uZW50cy90YWJzZXQvYXBpI05nYlRhYnNldCkgY29tcG9uZW50LlxuICpcbiAqIFlvdSBjYW4gaW5qZWN0IHRoaXMgc2VydmljZSwgdHlwaWNhbGx5IGluIHlvdXIgcm9vdCBjb21wb25lbnQsIGFuZCBjdXN0b21pemUgdGhlIHZhbHVlcyBvZiBpdHMgcHJvcGVydGllcyBpblxuICogb3JkZXIgdG8gcHJvdmlkZSBkZWZhdWx0IHZhbHVlcyBmb3IgYWxsIHRoZSB0YWJzZXRzIHVzZWQgaW4gdGhlIGFwcGxpY2F0aW9uLlxuICovXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBOZ2JUYWJzZXRDb25maWcge1xuICBqdXN0aWZ5OiAnc3RhcnQnIHwgJ2NlbnRlcicgfCAnZW5kJyB8ICdmaWxsJyB8ICdqdXN0aWZpZWQnID0gJ3N0YXJ0JztcbiAgb3JpZW50YXRpb246ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCcgPSAnaG9yaXpvbnRhbCc7XG4gIHR5cGU6ICd0YWJzJyB8ICdwaWxscycgPSAndGFicyc7XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/tabset/tabset.js b/dist/sunbird-ui-components/esm2015/tabset/tabset.js new file mode 100644 index 0000000..0c8185b --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/tabset/tabset.js @@ -0,0 +1,307 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Component, Input, ContentChildren, QueryList, Directive, TemplateRef, Output, EventEmitter } from '@angular/core'; +import { NgbTabsetConfig } from './tabset-config'; +/** @type {?} */ +let nextId = 0; +/** + * A directive to wrap tab titles that need to contain HTML markup or other directives. + * + * Alternatively you could use the `NgbTab.title` input for string titles. + */ +export class NgbTabTitle { + /** + * @param {?} templateRef + */ + constructor(templateRef) { + this.templateRef = templateRef; + } +} +NgbTabTitle.decorators = [ + { type: Directive, args: [{ selector: 'ng-template[ngbTabTitle]' },] } +]; +/** @nocollapse */ +NgbTabTitle.ctorParameters = () => [ + { type: TemplateRef } +]; +if (false) { + /** @type {?} */ + NgbTabTitle.prototype.templateRef; +} +/** + * A directive to wrap content to be displayed in a tab. + */ +export class NgbTabContent { + /** + * @param {?} templateRef + */ + constructor(templateRef) { + this.templateRef = templateRef; + } +} +NgbTabContent.decorators = [ + { type: Directive, args: [{ selector: 'ng-template[ngbTabContent]' },] } +]; +/** @nocollapse */ +NgbTabContent.ctorParameters = () => [ + { type: TemplateRef } +]; +if (false) { + /** @type {?} */ + NgbTabContent.prototype.templateRef; +} +/** + * A directive representing an individual tab. + */ +export class NgbTab { + constructor() { + /** + * The tab identifier. + * + * Must be unique for the entire document for proper accessibility support. + */ + this.id = `ngb-tab-${nextId++}`; + /** + * If `true`, the current tab is disabled and can't be toggled. + */ + this.disabled = false; + } + /** + * @return {?} + */ + ngAfterContentChecked() { + // We are using @ContentChildren instead of @ContentChild as in the Angular version being used + // only @ContentChildren allows us to specify the {descendants: false} option. + // Without {descendants: false} we are hitting bugs described in: + // https://github.com/ng-bootstrap/ng-bootstrap/issues/2240 + this.titleTpl = this.titleTpls.first; + this.contentTpl = this.contentTpls.first; + } +} +NgbTab.decorators = [ + { type: Directive, args: [{ selector: 'ngb-tab' },] } +]; +NgbTab.propDecorators = { + id: [{ type: Input }], + title: [{ type: Input }], + disabled: [{ type: Input }], + titleTpls: [{ type: ContentChildren, args: [NgbTabTitle, { descendants: false },] }], + contentTpls: [{ type: ContentChildren, args: [NgbTabContent, { descendants: false },] }] +}; +if (false) { + /** + * The tab identifier. + * + * Must be unique for the entire document for proper accessibility support. + * @type {?} + */ + NgbTab.prototype.id; + /** + * The tab title. + * + * Use the [`NgbTabTitle`](#/components/tabset/api#NgbTabTitle) directive for non-string titles. + * @type {?} + */ + NgbTab.prototype.title; + /** + * If `true`, the current tab is disabled and can't be toggled. + * @type {?} + */ + NgbTab.prototype.disabled; + /** @type {?} */ + NgbTab.prototype.titleTpl; + /** @type {?} */ + NgbTab.prototype.contentTpl; + /** @type {?} */ + NgbTab.prototype.titleTpls; + /** @type {?} */ + NgbTab.prototype.contentTpls; +} +/** + * The payload of the change event fired right before the tab change. + * @record + */ +export function NgbTabChangeEvent() { } +if (false) { + /** + * The id of the currently active tab. + * @type {?} + */ + NgbTabChangeEvent.prototype.activeId; + /** + * The id of the newly selected tab. + * @type {?} + */ + NgbTabChangeEvent.prototype.nextId; + /** + * Calling this function will prevent tab switching. + * @type {?} + */ + NgbTabChangeEvent.prototype.preventDefault; +} +/** + * A component that makes it easy to create tabbed interface. + */ +export class NgbTabset { + /** + * @param {?} config + */ + constructor(config) { + /** + * If `true`, non-visible tabs content will be removed from DOM. Otherwise it will just be hidden. + */ + this.destroyOnHide = true; + /** + * A tab change event emitted right before the tab change happens. + * + * See [`NgbTabChangeEvent`](#/components/tabset/api#NgbTabChangeEvent) for payload details. + */ + this.tabChange = new EventEmitter(); + this.type = config.type; + this.justify = config.justify; + this.orientation = config.orientation; + } + /** + * The horizontal alignment of the tabs with flexbox utilities. + * @param {?} className + * @return {?} + */ + set justify(className) { + if (className === 'fill' || className === 'justified') { + this.justifyClass = `nav-${className}`; + } + else { + this.justifyClass = `justify-content-${className}`; + } + } + /** + * Selects the tab with the given id and shows its associated content panel. + * + * Any other tab that was previously selected becomes unselected and its associated pane is removed from DOM or + * hidden depending on the `destroyOnHide` value. + * @param {?} tabId + * @return {?} + */ + select(tabId) { + /** @type {?} */ + let selectedTab = this._getTabById(tabId); + if (selectedTab && !selectedTab.disabled && this.activeId !== selectedTab.id) { + /** @type {?} */ + let defaultPrevented = false; + this.tabChange.emit({ activeId: this.activeId, nextId: selectedTab.id, preventDefault: (/** + * @return {?} + */ + () => { defaultPrevented = true; }) }); + if (!defaultPrevented) { + this.activeId = selectedTab.id; + } + } + } + /** + * @return {?} + */ + ngAfterContentChecked() { + // auto-correct activeId that might have been set incorrectly as input + /** @type {?} */ + let activeTab = this._getTabById(this.activeId); + this.activeId = activeTab ? activeTab.id : (this.tabs.length ? this.tabs.first.id : null); + } + /** + * @private + * @param {?} id + * @return {?} + */ + _getTabById(id) { + /** @type {?} */ + let tabsWithId = this.tabs.filter((/** + * @param {?} tab + * @return {?} + */ + tab => tab.id === id)); + return tabsWithId.length ? tabsWithId[0] : null; + } +} +NgbTabset.decorators = [ + { type: Component, args: [{ + selector: 'ngb-tabset', + exportAs: 'ngbTabset', + template: ` + +
+ +
+ +
+
+
+ ` + }] } +]; +/** @nocollapse */ +NgbTabset.ctorParameters = () => [ + { type: NgbTabsetConfig } +]; +NgbTabset.propDecorators = { + tabs: [{ type: ContentChildren, args: [NgbTab,] }], + activeId: [{ type: Input }], + destroyOnHide: [{ type: Input }], + justify: [{ type: Input }], + orientation: [{ type: Input }], + type: [{ type: Input }], + tabChange: [{ type: Output }] +}; +if (false) { + /** @type {?} */ + NgbTabset.prototype.justifyClass; + /** @type {?} */ + NgbTabset.prototype.tabs; + /** + * The identifier of the tab that should be opened **initially**. + * + * For subsequent tab switches use the `.select()` method and the `(tabChange)` event. + * @type {?} + */ + NgbTabset.prototype.activeId; + /** + * If `true`, non-visible tabs content will be removed from DOM. Otherwise it will just be hidden. + * @type {?} + */ + NgbTabset.prototype.destroyOnHide; + /** + * The orientation of the tabset. + * @type {?} + */ + NgbTabset.prototype.orientation; + /** + * Type of navigation to be used for tabs. + * + * Currently Bootstrap supports only `"tabs"` and `"pills"`. + * + * Since `3.0.0` can also be an arbitrary string (ex. for custom themes). + * @type {?} + */ + NgbTabset.prototype.type; + /** + * A tab change event emitted right before the tab change happens. + * + * See [`NgbTabChangeEvent`](#/components/tabset/api#NgbTabChangeEvent) for payload details. + * @type {?} + */ + NgbTabset.prototype.tabChange; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFic2V0LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsidGFic2V0L3RhYnNldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsZUFBZSxFQUNmLFNBQVMsRUFDVCxTQUFTLEVBQ1QsV0FBVyxFQUVYLE1BQU0sRUFDTixZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLGlCQUFpQixDQUFDOztJQUU1QyxNQUFNLEdBQUcsQ0FBQzs7Ozs7O0FBUWQsTUFBTSxPQUFPLFdBQVc7Ozs7SUFDdEIsWUFBbUIsV0FBNkI7UUFBN0IsZ0JBQVcsR0FBWCxXQUFXLENBQWtCO0lBQUcsQ0FBQzs7O1lBRnJELFNBQVMsU0FBQyxFQUFDLFFBQVEsRUFBRSwwQkFBMEIsRUFBQzs7OztZQWQvQyxXQUFXOzs7O0lBZ0JDLGtDQUFvQzs7Ozs7QUFPbEQsTUFBTSxPQUFPLGFBQWE7Ozs7SUFDeEIsWUFBbUIsV0FBNkI7UUFBN0IsZ0JBQVcsR0FBWCxXQUFXLENBQWtCO0lBQUcsQ0FBQzs7O1lBRnJELFNBQVMsU0FBQyxFQUFDLFFBQVEsRUFBRSw0QkFBNEIsRUFBQzs7OztZQXRCakQsV0FBVzs7OztJQXdCQyxvQ0FBb0M7Ozs7O0FBT2xELE1BQU0sT0FBTyxNQUFNO0lBRG5COzs7Ozs7UUFPVyxPQUFFLEdBQUcsV0FBVyxNQUFNLEVBQUUsRUFBRSxDQUFDOzs7O1FBWTNCLGFBQVEsR0FBRyxLQUFLLENBQUM7SUFnQjVCLENBQUM7Ozs7SUFSQyxxQkFBcUI7UUFDbkIsOEZBQThGO1FBQzlGLDhFQUE4RTtRQUM5RSxpRUFBaUU7UUFDakUsMkRBQTJEO1FBQzNELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7UUFDckMsSUFBSSxDQUFDLFVBQVUs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QUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDbEQsQ0FBQzs7O1lBaEhGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsWUFBWTtnQkFDdEIsUUFBUSxFQUFFLFdBQVc7Z0JBQ3JCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCVDthQUNGOzs7O1lBL0dPLGVBQWU7OzttQkFtSHBCLGVBQWUsU0FBQyxNQUFNO3VCQU90QixLQUFLOzRCQUtMLEtBQUs7c0JBS0wsS0FBSzswQkFZTCxLQUFLO21CQVNMLEtBQUs7d0JBT0wsTUFBTTs7OztJQS9DUCxpQ0FBcUI7O0lBRXJCLHlCQUFpRDs7Ozs7OztJQU9qRCw2QkFBMEI7Ozs7O0lBSzFCLGtDQUE4Qjs7Ozs7SUFpQjlCLGdDQUFnRDs7Ozs7Ozs7O0lBU2hELHlCQUF5Qzs7Ozs7OztJQU96Qyw4QkFBNEQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIFF1ZXJ5TGlzdCxcbiAgRGlyZWN0aXZlLFxuICBUZW1wbGF0ZVJlZixcbiAgQWZ0ZXJDb250ZW50Q2hlY2tlZCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge05nYlRhYnNldENvbmZpZ30gZnJvbSAnLi90YWJzZXQtY29uZmlnJztcblxubGV0IG5leHRJZCA9IDA7XG5cbi8qKlxuICogQSBkaXJlY3RpdmUgdG8gd3JhcCB0YWIgdGl0bGVzIHRoYXQgbmVlZCB0byBjb250YWluIEhUTUwgbWFya3VwIG9yIG90aGVyIGRpcmVjdGl2ZXMuXG4gKlxuICogQWx0ZXJuYXRpdmVseSB5b3UgY291bGQgdXNlIHRoZSBgTmdiVGFiLnRpdGxlYCBpbnB1dCBmb3Igc3RyaW5nIHRpdGxlcy5cbiAqL1xuQERpcmVjdGl2ZSh7c2VsZWN0b3I6ICduZy10ZW1wbGF0ZVtuZ2JUYWJUaXRsZV0nfSlcbmV4cG9ydCBjbGFzcyBOZ2JUYWJUaXRsZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55Pikge31cbn1cblxuLyoqXG4gKiBBIGRpcmVjdGl2ZSB0byB3cmFwIGNvbnRlbnQgdG8gYmUgZGlzcGxheWVkIGluIGEgdGFiLlxuICovXG5ARGlyZWN0aXZlKHtzZWxlY3RvcjogJ25nLXRlbXBsYXRlW25nYlRhYkNvbnRlbnRdJ30pXG5leHBvcnQgY2xhc3MgTmdiVGFiQ29udGVudCB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55Pikge31cbn1cblxuLyoqXG4gKiBBIGRpcmVjdGl2ZSByZXByZXNlbnRpbmcgYW4gaW5kaXZpZHVhbCB0YWIuXG4gKi9cbkBEaXJlY3RpdmUoe3NlbGVjdG9yOiAnbmdiLXRhYid9KVxuZXhwb3J0IGNsYXNzIE5nYlRhYiBpbXBsZW1lbnRzIEFmdGVyQ29udGVudENoZWNrZWQge1xuICAvKipcbiAgICogVGhlIHRhYiBpZGVudGlmaWVyLlxuICAgKlxuICAgKiBNdXN0IGJlIHVuaXF1ZSBmb3IgdGhlIGVudGlyZSBkb2N1bWVudCBmb3IgcHJvcGVyIGFjY2Vzc2liaWxpdHkgc3VwcG9ydC5cbiAgICovXG4gIEBJbnB1dCgpIGlkID0gYG5nYi10YWItJHtuZXh0SWQrK31gO1xuXG4gIC8qKlxuICAgKiBUaGUgdGFiIHRpdGxlLlxuICAgKlxuICAgKiBVc2UgdGhlIFtgTmdiVGFiVGl0bGVgXSgjL2NvbXBvbmVudHMvdGFic2V0L2FwaSNOZ2JUYWJUaXRsZSkgZGlyZWN0aXZlIGZvciBub24tc3RyaW5nIHRpdGxlcy5cbiAgICovXG4gIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGN1cnJlbnQgdGFiIGlzIGRpc2FibGVkIGFuZCBjYW4ndCBiZSB0b2dnbGVkLlxuICAgKi9cbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcblxuICB0aXRsZVRwbDogTmdiVGFiVGl0bGUgfCBudWxsO1xuICBjb250ZW50VHBsOiBOZ2JUYWJDb250ZW50IHwgbnVsbDtcblxuICBAQ29udGVudENoaWxkcmVuKE5nYlRhYlRpdGxlLCB7ZGVzY2VuZGFudHM6IGZhbHNlfSkgdGl0bGVUcGxzOiBRdWVyeUxpc3Q8TmdiVGFiVGl0bGU+O1xuICBAQ29udGVudENoaWxkcmVuKE5nYlRhYkNvbnRlbnQsIHtkZXNjZW5kYW50czogZmFsc2V9KSBjb250ZW50VHBsczogUXVlcnlMaXN0PE5nYlRhYkNvbnRlbnQ+O1xuXG4gIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpIHtcbiAgICAvLyBXZSBhcmUgdXNpbmcgQENvbnRlbnRDaGlsZHJlbiBpbnN0ZWFkIG9mIEBDb250ZW50Q2hpbGQgYXMgaW4gdGhlIEFuZ3VsYXIgdmVyc2lvbiBiZWluZyB1c2VkXG4gICAgLy8gb25seSBAQ29udGVudENoaWxkcmVuIGFsbG93cyB1cyB0byBzcGVjaWZ5IHRoZSB7ZGVzY2VuZGFudHM6IGZhbHNlfSBvcHRpb24uXG4gICAgLy8gV2l0aG91dCB7ZGVzY2VuZGFudHM6IGZhbHNlfSB3ZSBhcmUgaGl0dGluZyBidWdzIGRlc2NyaWJlZCBpbjpcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcC9pc3N1ZXMvMjI0MFxuICAgIHRoaXMudGl0bGVUcGwgPSB0aGlzLnRpdGxlVHBscy5maXJzdDtcbiAgICB0aGlzLmNvbnRlbnRUcGwgPSB0aGlzLmNvbnRlbnRUcGxzLmZpcnN0O1xuICB9XG59XG5cbi8qKlxuICogVGhlIHBheWxvYWQgb2YgdGhlIGNoYW5nZSBldmVudCBmaXJlZCByaWdodCBiZWZvcmUgdGhlIHRhYiBjaGFuZ2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmdiVGFiQ2hhbmdlRXZlbnQge1xuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBjdXJyZW50bHkgYWN0aXZlIHRhYi5cbiAgICovXG4gIGFjdGl2ZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgbmV3bHkgc2VsZWN0ZWQgdGFiLlxuICAgKi9cbiAgbmV4dElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aWxsIHByZXZlbnQgdGFiIHN3aXRjaGluZy5cbiAgICovXG4gIHByZXZlbnREZWZhdWx0OiAoKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIEEgY29tcG9uZW50IHRoYXQgbWFrZXMgaXQgZWFzeSB0byBjcmVhdGUgdGFiYmVkIGludGVyZmFjZS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmdiLXRhYnNldCcsXG4gIGV4cG9ydEFzOiAnbmdiVGFic2V0JyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8dWwgW2NsYXNzXT1cIiduYXYgbmF2LScgKyB0eXBlICsgKG9yaWVudGF0aW9uID09ICdob3Jpem9udGFsJz8gICcgJyArIGp1c3RpZnlDbGFzcyA6ICcgZmxleC1jb2x1bW4nKVwiIHJvbGU9XCJ0YWJsaXN0XCI+XG4gICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiICpuZ0Zvcj1cImxldCB0YWIgb2YgdGFic1wiPlxuICAgICAgICA8YSBbaWRdPVwidGFiLmlkXCIgY2xhc3M9XCJuYXYtbGlua1wiIFtjbGFzcy5hY3RpdmVdPVwidGFiLmlkID09PSBhY3RpdmVJZFwiIFtjbGFzcy5kaXNhYmxlZF09XCJ0YWIuZGlzYWJsZWRcIlxuICAgICAgICAgIGhyZWYgKGNsaWNrKT1cInNlbGVjdCh0YWIuaWQpOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiIHJvbGU9XCJ0YWJcIiBbYXR0ci50YWJpbmRleF09XCIodGFiLmRpc2FibGVkID8gJy0xJzogdW5kZWZpbmVkKVwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1jb250cm9sc109XCIoIWRlc3Ryb3lPbkhpZGUgfHwgdGFiLmlkID09PSBhY3RpdmVJZCA/IHRhYi5pZCArICctcGFuZWwnIDogbnVsbClcIlxuICAgICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwidGFiLmlkID09PSBhY3RpdmVJZFwiIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwidGFiLmRpc2FibGVkXCI+XG4gICAgICAgICAge3t0YWIudGl0bGV9fTxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJ0YWIudGl0bGVUcGw/LnRlbXBsYXRlUmVmXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9hPlxuICAgICAgPC9saT5cbiAgICA8L3VsPlxuICAgIDxkaXYgY2xhc3M9XCJ0YWItY29udGVudFwiPlxuICAgICAgPG5nLXRlbXBsYXRlIG5nRm9yIGxldC10YWIgW25nRm9yT2ZdPVwidGFic1wiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJ0YWItcGFuZSB7e3RhYi5pZCA9PT0gYWN0aXZlSWQgPyAnYWN0aXZlJyA6IG51bGx9fVwiXG4gICAgICAgICAgKm5nSWY9XCIhZGVzdHJveU9uSGlkZSB8fCB0YWIuaWQgPT09IGFjdGl2ZUlkXCJcbiAgICAgICAgICByb2xlPVwidGFicGFuZWxcIlxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJ0YWIuaWRcIiBpZD1cInt7dGFiLmlkfX0tcGFuZWxcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwidGFiLmNvbnRlbnRUcGw/LnRlbXBsYXRlUmVmXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuICBgXG59KVxuZXhwb3J0IGNsYXNzIE5nYlRhYnNldCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudENoZWNrZWQge1xuICBqdXN0aWZ5Q2xhc3M6IHN0cmluZztcblxuICBAQ29udGVudENoaWxkcmVuKE5nYlRhYikgdGFiczogUXVlcnlMaXN0PE5nYlRhYj47XG5cbiAgLyoqXG4gICAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSB0YWIgdGhhdCBzaG91bGQgYmUgb3BlbmVkICoqaW5pdGlhbGx5KiouXG4gICAqXG4gICAqIEZvciBzdWJzZXF1ZW50IHRhYiBzd2l0Y2hlcyB1c2UgdGhlIGAuc2VsZWN0KClgIG1ldGhvZCBhbmQgdGhlIGAodGFiQ2hhbmdlKWAgZXZlbnQuXG4gICAqL1xuICBASW5wdXQoKSBhY3RpdmVJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIG5vbi12aXNpYmxlIHRhYnMgY29udGVudCB3aWxsIGJlIHJlbW92ZWQgZnJvbSBET00uIE90aGVyd2lzZSBpdCB3aWxsIGp1c3QgYmUgaGlkZGVuLlxuICAgKi9cbiAgQElucHV0KCkgZGVzdHJveU9uSGlkZSA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFRoZSBob3Jpem9udGFsIGFsaWdubWVudCBvZiB0aGUgdGFicyB3aXRoIGZsZXhib3ggdXRpbGl0aWVzLlxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IGp1c3RpZnkoY2xhc3NOYW1lOiAnc3RhcnQnIHwgJ2NlbnRlcicgfCAnZW5kJyB8ICdmaWxsJyB8ICdqdXN0aWZpZWQnKSB7XG4gICAgaWYgKGNsYXNzTmFtZSA9PT0gJ2ZpbGwnIHx8IGNsYXNzTmFtZSA9PT0gJ2p1c3RpZmllZCcpIHtcbiAgICAgIHRoaXMuanVzdGlmeUNsYXNzID0gYG5hdi0ke2NsYXNzTmFtZX1gO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmp1c3RpZnlDbGFzcyA9IGBqdXN0aWZ5LWNvbnRlbnQtJHtjbGFzc05hbWV9YDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhlIG9yaWVudGF0aW9uIG9mIHRoZSB0YWJzZXQuXG4gICAqL1xuICBASW5wdXQoKSBvcmllbnRhdGlvbjogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJztcblxuICAvKipcbiAgICogVHlwZSBvZiBuYXZpZ2F0aW9uIHRvIGJlIHVzZWQgZm9yIHRhYnMuXG4gICAqXG4gICAqIEN1cnJlbnRseSBCb290c3RyYXAgc3VwcG9ydHMgb25seSBgXCJ0YWJzXCJgIGFuZCBgXCJwaWxsc1wiYC5cbiAgICpcbiAgICogU2luY2UgYDMuMC4wYCBjYW4gYWxzbyBiZSBhbiBhcmJpdHJhcnkgc3RyaW5nIChleC4gZm9yIGN1c3RvbSB0aGVtZXMpLlxuICAgKi9cbiAgQElucHV0KCkgdHlwZTogJ3RhYnMnIHwgJ3BpbGxzJyB8IHN0cmluZztcblxuICAvKipcbiAgICogQSB0YWIgY2hhbmdlIGV2ZW50IGVtaXR0ZWQgcmlnaHQgYmVmb3JlIHRoZSB0YWIgY2hhbmdlIGhhcHBlbnMuXG4gICAqXG4gICAqIFNlZSBbYE5nYlRhYkNoYW5nZUV2ZW50YF0oIy9jb21wb25lbnRzL3RhYnNldC9hcGkjTmdiVGFiQ2hhbmdlRXZlbnQpIGZvciBwYXlsb2FkIGRldGFpbHMuXG4gICAqL1xuICBAT3V0cHV0KCkgdGFiQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxOZ2JUYWJDaGFuZ2VFdmVudD4oKTtcblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IE5nYlRhYnNldENvbmZpZykge1xuICAgIHRoaXMudHlwZSA9IGNvbmZpZy50eXBlO1xuICAgIHRoaXMuanVzdGlmeSA9IGNvbmZpZy5qdXN0aWZ5O1xuICAgIHRoaXMub3JpZW50YXRpb24gPSBjb25maWcub3JpZW50YXRpb247XG4gIH1cblxuICAvKipcbiAgICogU2VsZWN0cyB0aGUgdGFiIHdpdGggdGhlIGdpdmVuIGlkIGFuZCBzaG93cyBpdHMgYXNzb2NpYXRlZCBjb250ZW50IHBhbmVsLlxuICAgKlxuICAgKiBBbnkgb3RoZXIgdGFiIHRoYXQgd2FzIHByZXZpb3VzbHkgc2VsZWN0ZWQgYmVjb21lcyB1bnNlbGVjdGVkIGFuZCBpdHMgYXNzb2NpYXRlZCBwYW5lIGlzIHJlbW92ZWQgZnJvbSBET00gb3JcbiAgICogaGlkZGVuIGRlcGVuZGluZyBvbiB0aGUgYGRlc3Ryb3lPbkhpZGVgIHZhbHVlLlxuICAgKi9cbiAgc2VsZWN0KHRhYklkOiBzdHJpbmcpIHtcbiAgICBsZXQgc2VsZWN0ZWRUYWIgPSB0aGlzLl9nZXRUYWJCeUlkKHRhYklkKTtcbiAgICBpZiAoc2VsZWN0ZWRUYWIgJiYgIXNlbGVjdGVkVGFiLmRpc2FibGVkICYmIHRoaXMuYWN0aXZlSWQgIT09IHNlbGVjdGVkVGFiLmlkKSB7XG4gICAgICBsZXQgZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNlO1xuXG4gICAgICB0aGlzLnRhYkNoYW5nZS5lbWl0KFxuICAgICAgICAgIHthY3RpdmVJZDogdGhpcy5hY3RpdmVJZCwgbmV4dElkOiBzZWxlY3RlZFRhYi5pZCwgcHJldmVudERlZmF1bHQ6ICgpID0+IHsgZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7IH19KTtcblxuICAgICAgaWYgKCFkZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlSWQgPSBzZWxlY3RlZFRhYi5pZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudENoZWNrZWQoKSB7XG4gICAgLy8gYXV0by1jb3JyZWN0IGFjdGl2ZUlkIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIHNldCBpbmNvcnJlY3RseSBhcyBpbnB1dFxuICAgIGxldCBhY3RpdmVUYWIgPSB0aGlzLl9nZXRUYWJCeUlkKHRoaXMuYWN0aXZlSWQpO1xuICAgIHRoaXMuYWN0aXZlSWQgPSBhY3RpdmVUYWIgPyBhY3RpdmVUYWIuaWQgOiAodGhpcy50YWJzLmxlbmd0aCA/IHRoaXMudGFicy5maXJzdC5pZCA6IG51bGwpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0VGFiQnlJZChpZDogc3RyaW5nKTogTmdiVGFiIHtcbiAgICBsZXQgdGFic1dpdGhJZDogTmdiVGFiW10gPSB0aGlzLnRhYnMuZmlsdGVyKHRhYiA9PiB0YWIuaWQgPT09IGlkKTtcbiAgICByZXR1cm4gdGFic1dpdGhJZC5sZW5ndGggPyB0YWJzV2l0aElkWzBdIDogbnVsbDtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/tabset/tabset.module.js b/dist/sunbird-ui-components/esm2015/tabset/tabset.module.js new file mode 100644 index 0000000..1b3b3b4 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/tabset/tabset.module.js @@ -0,0 +1,17 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { NgbTabset, NgbTab, NgbTabContent, NgbTabTitle } from './tabset'; +export { NgbTabset, NgbTab, NgbTabContent, NgbTabTitle } from './tabset'; +export { NgbTabsetConfig } from './tabset-config'; +/** @type {?} */ +const NGB_TABSET_DIRECTIVES = [NgbTabset, NgbTab, NgbTabContent, NgbTabTitle]; +export class NgbTabsetModule { +} +NgbTabsetModule.decorators = [ + { type: NgModule, args: [{ declarations: NGB_TABSET_DIRECTIVES, exports: NGB_TABSET_DIRECTIVES, imports: [CommonModule] },] } +]; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFic2V0Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbInRhYnNldC90YWJzZXQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUU3QyxPQUFPLEVBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBRXZFLE9BQU8sRUFBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQW9CLE1BQU0sVUFBVSxDQUFDO0FBQzFGLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQzs7TUFFMUMscUJBQXFCLEdBQUcsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxXQUFXLENBQUM7QUFHN0UsTUFBTSxPQUFPLGVBQWU7OztZQUQzQixRQUFRLFNBQUMsRUFBQyxZQUFZLEVBQUUscUJBQXFCLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHtOZ2JUYWJzZXQsIE5nYlRhYiwgTmdiVGFiQ29udGVudCwgTmdiVGFiVGl0bGV9IGZyb20gJy4vdGFic2V0JztcblxuZXhwb3J0IHtOZ2JUYWJzZXQsIE5nYlRhYiwgTmdiVGFiQ29udGVudCwgTmdiVGFiVGl0bGUsIE5nYlRhYkNoYW5nZUV2ZW50fSBmcm9tICcuL3RhYnNldCc7XG5leHBvcnQge05nYlRhYnNldENvbmZpZ30gZnJvbSAnLi90YWJzZXQtY29uZmlnJztcblxuY29uc3QgTkdCX1RBQlNFVF9ESVJFQ1RJVkVTID0gW05nYlRhYnNldCwgTmdiVGFiLCBOZ2JUYWJDb250ZW50LCBOZ2JUYWJUaXRsZV07XG5cbkBOZ01vZHVsZSh7ZGVjbGFyYXRpb25zOiBOR0JfVEFCU0VUX0RJUkVDVElWRVMsIGV4cG9ydHM6IE5HQl9UQUJTRVRfRElSRUNUSVZFUywgaW1wb3J0czogW0NvbW1vbk1vZHVsZV19KVxuZXhwb3J0IGNsYXNzIE5nYlRhYnNldE1vZHVsZSB7XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/timepicker/ngb-time-adapter.js b/dist/sunbird-ui-components/esm2015/timepicker/ngb-time-adapter.js new file mode 100644 index 0000000..2f3ccf9 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/timepicker/ngb-time-adapter.js @@ -0,0 +1,76 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Injectable } from '@angular/core'; +import { isInteger } from '../util/util'; +import * as i0 from "@angular/core"; +/** + * @return {?} + */ +export function NGB_DATEPICKER_TIME_ADAPTER_FACTORY() { + return new NgbTimeStructAdapter(); +} +/** + * An abstract service that does the conversion between the internal timepicker `NgbTimeStruct` model and + * any provided user time model `T`, ex. a string, a native date, etc. + * + * The adapter is used **only** for conversion when binding timepicker to a form control, + * ex. `[(ngModel)]="userTimeModel"`. Here `userTimeModel` can be of any type. + * + * The default timepicker implementation assumes we use `NgbTimeStruct` as a user model. + * + * See the [custom time adapter demo](#/components/timepicker/examples#adapter) for an example. + * + * \@since 2.2.0 + * @abstract + * @template T + */ +export class NgbTimeAdapter { +} +NgbTimeAdapter.decorators = [ + { type: Injectable, args: [{ providedIn: 'root', useFactory: NGB_DATEPICKER_TIME_ADAPTER_FACTORY },] } +]; +/** @nocollapse */ NgbTimeAdapter.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: NGB_DATEPICKER_TIME_ADAPTER_FACTORY, token: NgbTimeAdapter, providedIn: "root" }); +if (false) { + /** + * Converts a user-model time of type `T` to an `NgbTimeStruct` for internal use. + * @abstract + * @param {?} value + * @return {?} + */ + NgbTimeAdapter.prototype.fromModel = function (value) { }; + /** + * Converts an internal `NgbTimeStruct` time to a user-model time of type `T`. + * @abstract + * @param {?} time + * @return {?} + */ + NgbTimeAdapter.prototype.toModel = function (time) { }; +} +export class NgbTimeStructAdapter extends NgbTimeAdapter { + /** + * Converts a NgbTimeStruct value into NgbTimeStruct value + * @param {?} time + * @return {?} + */ + fromModel(time) { + return (time && isInteger(time.hour) && isInteger(time.minute)) ? + { hour: time.hour, minute: time.minute, second: isInteger(time.second) ? time.second : null } : + null; + } + /** + * Converts a NgbTimeStruct value into NgbTimeStruct value + * @param {?} time + * @return {?} + */ + toModel(time) { + return (time && isInteger(time.hour) && isInteger(time.minute)) ? + { hour: time.hour, minute: time.minute, second: isInteger(time.second) ? time.second : null } : + null; + } +} +NgbTimeStructAdapter.decorators = [ + { type: Injectable } +]; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdiLXRpbWUtYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbInRpbWVwaWNrZXIvbmdiLXRpbWUtYWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sY0FBYyxDQUFDOzs7OztBQUV2QyxNQUFNLFVBQVUsbUNBQW1DO0lBQ2pELE9BQU8sSUFBSSxvQkFBb0IsRUFBRSxDQUFDO0FBQ3BDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnQkQsTUFBTSxPQUFnQixjQUFjOzs7WUFEbkMsVUFBVSxTQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsbUNBQW1DLEVBQUM7Ozs7Ozs7Ozs7SUFLL0UsMERBQTRDOzs7Ozs7O0lBSzVDLHVEQUF5Qzs7QUFJM0MsTUFBTSxPQUFPLG9CQUFxQixTQUFRLGNBQTZCOzs7Ozs7SUFJckUsU0FBUyxDQUFDLElBQW1CO1FBQzNCLE9BQU8sQ0FBQyxJQUFJLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3RCxFQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDO1lBQzdGLElBQUksQ0FBQztJQUNYLENBQUM7Ozs7OztJQUtELE9BQU8sQ0FBQyxJQUFtQjtRQUN6QixPQUFPLENBQUMsSUFBSSxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0QsRUFBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQztZQUM3RixJQUFJLENBQUM7SUFDWCxDQUFDOzs7WUFsQkYsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge05nYlRpbWVTdHJ1Y3R9IGZyb20gJy4vbmdiLXRpbWUtc3RydWN0JztcbmltcG9ydCB7aXNJbnRlZ2VyfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuXG5leHBvcnQgZnVuY3Rpb24gTkdCX0RBVEVQSUNLRVJfVElNRV9BREFQVEVSX0ZBQ1RPUlkoKSB7XG4gIHJldHVybiBuZXcgTmdiVGltZVN0cnVjdEFkYXB0ZXIoKTtcbn1cblxuLyoqXG4gKiBBbiBhYnN0cmFjdCBzZXJ2aWNlIHRoYXQgZG9lcyB0aGUgY29udmVyc2lvbiBiZXR3ZWVuIHRoZSBpbnRlcm5hbCB0aW1lcGlja2VyIGBOZ2JUaW1lU3RydWN0YCBtb2RlbCBhbmRcbiAqIGFueSBwcm92aWRlZCB1c2VyIHRpbWUgbW9kZWwgYFRgLCBleC4gYSBzdHJpbmcsIGEgbmF0aXZlIGRhdGUsIGV0Yy5cbiAqXG4gKiBUaGUgYWRhcHRlciBpcyB1c2VkICoqb25seSoqIGZvciBjb252ZXJzaW9uIHdoZW4gYmluZGluZyB0aW1lcGlja2VyIHRvIGEgZm9ybSBjb250cm9sLFxuICogZXguIGBbKG5nTW9kZWwpXT1cInVzZXJUaW1lTW9kZWxcImAuIEhlcmUgYHVzZXJUaW1lTW9kZWxgIGNhbiBiZSBvZiBhbnkgdHlwZS5cbiAqXG4gKiBUaGUgZGVmYXVsdCB0aW1lcGlja2VyIGltcGxlbWVudGF0aW9uIGFzc3VtZXMgd2UgdXNlIGBOZ2JUaW1lU3RydWN0YCBhcyBhIHVzZXIgbW9kZWwuXG4gKlxuICogU2VlIHRoZSBbY3VzdG9tIHRpbWUgYWRhcHRlciBkZW1vXSgjL2NvbXBvbmVudHMvdGltZXBpY2tlci9leGFtcGxlcyNhZGFwdGVyKSBmb3IgYW4gZXhhbXBsZS5cbiAqXG4gKiBAc2luY2UgMi4yLjBcbiAqL1xuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290JywgdXNlRmFjdG9yeTogTkdCX0RBVEVQSUNLRVJfVElNRV9BREFQVEVSX0ZBQ1RPUll9KVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE5nYlRpbWVBZGFwdGVyPFQ+IHtcbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgdXNlci1tb2RlbCB0aW1lIG9mIHR5cGUgYFRgIHRvIGFuIGBOZ2JUaW1lU3RydWN0YCBmb3IgaW50ZXJuYWwgdXNlLlxuICAgKi9cbiAgYWJzdHJhY3QgZnJvbU1vZGVsKHZhbHVlOiBUKTogTmdiVGltZVN0cnVjdDtcblxuICAvKipcbiAgICogQ29udmVydHMgYW4gaW50ZXJuYWwgYE5nYlRpbWVTdHJ1Y3RgIHRpbWUgdG8gYSB1c2VyLW1vZGVsIHRpbWUgb2YgdHlwZSBgVGAuXG4gICAqL1xuICBhYnN0cmFjdCB0b01vZGVsKHRpbWU6IE5nYlRpbWVTdHJ1Y3QpOiBUO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTmdiVGltZVN0cnVjdEFkYXB0ZXIgZXh0ZW5kcyBOZ2JUaW1lQWRhcHRlcjxOZ2JUaW1lU3RydWN0PiB7XG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIE5nYlRpbWVTdHJ1Y3QgdmFsdWUgaW50byBOZ2JUaW1lU3RydWN0IHZhbHVlXG4gICAqL1xuICBmcm9tTW9kZWwodGltZTogTmdiVGltZVN0cnVjdCk6IE5nYlRpbWVTdHJ1Y3Qge1xuICAgIHJldHVybiAodGltZSAmJiBpc0ludGVnZXIodGltZS5ob3VyKSAmJiBpc0ludGVnZXIodGltZS5taW51dGUpKSA/XG4gICAgICAgIHtob3VyOiB0aW1lLmhvdXIsIG1pbnV0ZTogdGltZS5taW51dGUsIHNlY29uZDogaXNJbnRlZ2VyKHRpbWUuc2Vjb25kKSA/IHRpbWUuc2Vjb25kIDogbnVsbH0gOlxuICAgICAgICBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgTmdiVGltZVN0cnVjdCB2YWx1ZSBpbnRvIE5nYlRpbWVTdHJ1Y3QgdmFsdWVcbiAgICovXG4gIHRvTW9kZWwodGltZTogTmdiVGltZVN0cnVjdCk6IE5nYlRpbWVTdHJ1Y3Qge1xuICAgIHJldHVybiAodGltZSAmJiBpc0ludGVnZXIodGltZS5ob3VyKSAmJiBpc0ludGVnZXIodGltZS5taW51dGUpKSA/XG4gICAgICAgIHtob3VyOiB0aW1lLmhvdXIsIG1pbnV0ZTogdGltZS5taW51dGUsIHNlY29uZDogaXNJbnRlZ2VyKHRpbWUuc2Vjb25kKSA/IHRpbWUuc2Vjb25kIDogbnVsbH0gOlxuICAgICAgICBudWxsO1xuICB9XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/timepicker/ngb-time-struct.js b/dist/sunbird-ui-components/esm2015/timepicker/ngb-time-struct.js new file mode 100644 index 0000000..3bdb2c7 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/timepicker/ngb-time-struct.js @@ -0,0 +1,27 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * An interface for the time model used by the timepicker. + * @record + */ +export function NgbTimeStruct() { } +if (false) { + /** + * The hour in the `[0, 23]` range. + * @type {?} + */ + NgbTimeStruct.prototype.hour; + /** + * The minute in the `[0, 59]` range. + * @type {?} + */ + NgbTimeStruct.prototype.minute; + /** + * The second in the `[0, 59]` range. + * @type {?} + */ + NgbTimeStruct.prototype.second; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdiLXRpbWUtc3RydWN0LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsidGltZXBpY2tlci9uZ2ItdGltZS1zdHJ1Y3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFHQSxtQ0FlQzs7Ozs7O0lBWEMsNkJBQWE7Ozs7O0lBS2IsK0JBQWU7Ozs7O0lBS2YsK0JBQWUiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEFuIGludGVyZmFjZSBmb3IgdGhlIHRpbWUgbW9kZWwgdXNlZCBieSB0aGUgdGltZXBpY2tlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZ2JUaW1lU3RydWN0IHtcbiAgLyoqXG4gICAqIFRoZSBob3VyIGluIHRoZSBgWzAsIDIzXWAgcmFuZ2UuXG4gICAqL1xuICBob3VyOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBtaW51dGUgaW4gdGhlIGBbMCwgNTldYCByYW5nZS5cbiAgICovXG4gIG1pbnV0ZTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgc2Vjb25kIGluIHRoZSBgWzAsIDU5XWAgcmFuZ2UuXG4gICAqL1xuICBzZWNvbmQ6IG51bWJlcjtcbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/timepicker/ngb-time.js b/dist/sunbird-ui-components/esm2015/timepicker/ngb-time.js new file mode 100644 index 0000000..a4da703 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/timepicker/ngb-time.js @@ -0,0 +1,90 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { isNumber, toInteger } from '../util/util'; +export class NgbTime { + /** + * @param {?=} hour + * @param {?=} minute + * @param {?=} second + */ + constructor(hour, minute, second) { + this.hour = toInteger(hour); + this.minute = toInteger(minute); + this.second = toInteger(second); + } + /** + * @param {?=} step + * @return {?} + */ + changeHour(step = 1) { this.updateHour((isNaN(this.hour) ? 0 : this.hour) + step); } + /** + * @param {?} hour + * @return {?} + */ + updateHour(hour) { + if (isNumber(hour)) { + this.hour = (hour < 0 ? 24 + hour : hour) % 24; + } + else { + this.hour = NaN; + } + } + /** + * @param {?=} step + * @return {?} + */ + changeMinute(step = 1) { this.updateMinute((isNaN(this.minute) ? 0 : this.minute) + step); } + /** + * @param {?} minute + * @return {?} + */ + updateMinute(minute) { + if (isNumber(minute)) { + this.minute = minute % 60 < 0 ? 60 + minute % 60 : minute % 60; + this.changeHour(Math.floor(minute / 60)); + } + else { + this.minute = NaN; + } + } + /** + * @param {?=} step + * @return {?} + */ + changeSecond(step = 1) { this.updateSecond((isNaN(this.second) ? 0 : this.second) + step); } + /** + * @param {?} second + * @return {?} + */ + updateSecond(second) { + if (isNumber(second)) { + this.second = second < 0 ? 60 + second % 60 : second % 60; + this.changeMinute(Math.floor(second / 60)); + } + else { + this.second = NaN; + } + } + /** + * @param {?=} checkSecs + * @return {?} + */ + isValid(checkSecs = true) { + return isNumber(this.hour) && isNumber(this.minute) && (checkSecs ? isNumber(this.second) : true); + } + /** + * @return {?} + */ + toString() { return `${this.hour || 0}:${this.minute || 0}:${this.second || 0}`; } +} +if (false) { + /** @type {?} */ + NgbTime.prototype.hour; + /** @type {?} */ + NgbTime.prototype.minute; + /** @type {?} */ + NgbTime.prototype.second; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdiLXRpbWUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJ0aW1lcGlja2VyL25nYi10aW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFFLFNBQVMsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUVqRCxNQUFNLE9BQU8sT0FBTzs7Ozs7O0lBS2xCLFlBQVksSUFBYSxFQUFFLE1BQWUsRUFBRSxNQUFlO1FBQ3pELElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLENBQUM7Ozs7O0lBRUQsVUFBVSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzs7Ozs7SUFFcEYsVUFBVSxDQUFDLElBQVk7UUFDckIsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbEIsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUNoRDthQUFNO1lBQ0wsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7U0FDakI7SUFDSCxDQUFDOzs7OztJQUVELFlBQVksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Ozs7O0lBRTVGLFlBQVksQ0FBQyxNQUFjO1FBQ3pCLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1lBQy9ELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUMxQzthQUFNO1lBQ0wsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7U0FDbkI7SUFDSCxDQUFDOzs7OztJQUVELFlBQVksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Ozs7O0lBRTVGLFlBQVksQ0FBQyxNQUFjO1FBQ3pCLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDMUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQzVDO2FBQU07WUFDTCxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztTQUNuQjtJQUNILENBQUM7Ozs7O0lBRUQsT0FBTyxDQUFDLFNBQVMsR0FBRyxJQUFJO1FBQ3RCLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwRyxDQUFDOzs7O0lBRUQsUUFBUSxLQUFLLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUNuRjs7O0lBL0NDLHVCQUFhOztJQUNiLHlCQUFlOztJQUNmLHlCQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpc051bWJlciwgdG9JbnRlZ2VyfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuXG5leHBvcnQgY2xhc3MgTmdiVGltZSB7XG4gIGhvdXI6IG51bWJlcjtcbiAgbWludXRlOiBudW1iZXI7XG4gIHNlY29uZDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKGhvdXI/OiBudW1iZXIsIG1pbnV0ZT86IG51bWJlciwgc2Vjb25kPzogbnVtYmVyKSB7XG4gICAgdGhpcy5ob3VyID0gdG9JbnRlZ2VyKGhvdXIpO1xuICAgIHRoaXMubWludXRlID0gdG9JbnRlZ2VyKG1pbnV0ZSk7XG4gICAgdGhpcy5zZWNvbmQgPSB0b0ludGVnZXIoc2Vjb25kKTtcbiAgfVxuXG4gIGNoYW5nZUhvdXIoc3RlcCA9IDEpIHsgdGhpcy51cGRhdGVIb3VyKChpc05hTih0aGlzLmhvdXIpID8gMCA6IHRoaXMuaG91cikgKyBzdGVwKTsgfVxuXG4gIHVwZGF0ZUhvdXIoaG91cjogbnVtYmVyKSB7XG4gICAgaWYgKGlzTnVtYmVyKGhvdXIpKSB7XG4gICAgICB0aGlzLmhvdXIgPSAoaG91ciA8IDAgPyAyNCArIGhvdXIgOiBob3VyKSAlIDI0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhvdXIgPSBOYU47XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlTWludXRlKHN0ZXAgPSAxKSB7IHRoaXMudXBkYXRlTWludXRlKChpc05hTih0aGlzLm1pbnV0ZSkgPyAwIDogdGhpcy5taW51dGUpICsgc3RlcCk7IH1cblxuICB1cGRhdGVNaW51dGUobWludXRlOiBudW1iZXIpIHtcbiAgICBpZiAoaXNOdW1iZXIobWludXRlKSkge1xuICAgICAgdGhpcy5taW51dGUgPSBtaW51dGUgJSA2MCA8IDAgPyA2MCArIG1pbnV0ZSAlIDYwIDogbWludXRlICUgNjA7XG4gICAgICB0aGlzLmNoYW5nZUhvdXIoTWF0aC5mbG9vcihtaW51dGUgLyA2MCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1pbnV0ZSA9IE5hTjtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VTZWNvbmQoc3RlcCA9IDEpIHsgdGhpcy51cGRhdGVTZWNvbmQoKGlzTmFOKHRoaXMuc2Vjb25kKSA/IDAgOiB0aGlzLnNlY29uZCkgKyBzdGVwKTsgfVxuXG4gIHVwZGF0ZVNlY29uZChzZWNvbmQ6IG51bWJlcikge1xuICAgIGlmIChpc051bWJlcihzZWNvbmQpKSB7XG4gICAgICB0aGlzLnNlY29uZCA9IHNlY29uZCA8IDAgPyA2MCArIHNlY29uZCAlIDYwIDogc2Vjb25kICUgNjA7XG4gICAgICB0aGlzLmNoYW5nZU1pbnV0ZShNYXRoLmZsb29yKHNlY29uZCAvIDYwKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2Vjb25kID0gTmFOO1xuICAgIH1cbiAgfVxuXG4gIGlzVmFsaWQoY2hlY2tTZWNzID0gdHJ1ZSkge1xuICAgIHJldHVybiBpc051bWJlcih0aGlzLmhvdXIpICYmIGlzTnVtYmVyKHRoaXMubWludXRlKSAmJiAoY2hlY2tTZWNzID8gaXNOdW1iZXIodGhpcy5zZWNvbmQpIDogdHJ1ZSk7XG4gIH1cblxuICB0b1N0cmluZygpIHsgcmV0dXJuIGAke3RoaXMuaG91ciB8fCAwfToke3RoaXMubWludXRlIHx8IDB9OiR7dGhpcy5zZWNvbmQgfHwgMH1gOyB9XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/timepicker/timepicker-config.js b/dist/sunbird-ui-components/esm2015/timepicker/timepicker-config.js new file mode 100644 index 0000000..21ed430 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/timepicker/timepicker-config.js @@ -0,0 +1,50 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Injectable } from '@angular/core'; +import * as i0 from "@angular/core"; +/** + * A configuration service for the [`NgbTimepicker`](#/components/timepicker/api#NgbTimepicker) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the timepickers used in the application. + */ +export class NgbTimepickerConfig { + constructor() { + this.meridian = false; + this.spinners = true; + this.seconds = false; + this.hourStep = 1; + this.minuteStep = 1; + this.secondStep = 1; + this.disabled = false; + this.readonlyInputs = false; + this.size = 'medium'; + } +} +NgbTimepickerConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } +]; +/** @nocollapse */ NgbTimepickerConfig.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function NgbTimepickerConfig_Factory() { return new NgbTimepickerConfig(); }, token: NgbTimepickerConfig, providedIn: "root" }); +if (false) { + /** @type {?} */ + NgbTimepickerConfig.prototype.meridian; + /** @type {?} */ + NgbTimepickerConfig.prototype.spinners; + /** @type {?} */ + NgbTimepickerConfig.prototype.seconds; + /** @type {?} */ + NgbTimepickerConfig.prototype.hourStep; + /** @type {?} */ + NgbTimepickerConfig.prototype.minuteStep; + /** @type {?} */ + NgbTimepickerConfig.prototype.secondStep; + /** @type {?} */ + NgbTimepickerConfig.prototype.disabled; + /** @type {?} */ + NgbTimepickerConfig.prototype.readonlyInputs; + /** @type {?} */ + NgbTimepickerConfig.prototype.size; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXBpY2tlci1jb25maWcuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJ0aW1lcGlja2VyL3RpbWVwaWNrZXItY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQVN6QyxNQUFNLE9BQU8sbUJBQW1CO0lBRGhDO1FBRUUsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixhQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsYUFBUSxHQUFHLENBQUMsQ0FBQztRQUNiLGVBQVUsR0FBRyxDQUFDLENBQUM7UUFDZixlQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUN2QixTQUFJLEdBQWlDLFFBQVEsQ0FBQztLQUMvQzs7O1lBWEEsVUFBVSxTQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQzs7Ozs7SUFFOUIsdUNBQWlCOztJQUNqQix1Q0FBZ0I7O0lBQ2hCLHNDQUFnQjs7SUFDaEIsdUNBQWE7O0lBQ2IseUNBQWU7O0lBQ2YseUNBQWU7O0lBQ2YsdUNBQWlCOztJQUNqQiw2Q0FBdUI7O0lBQ3ZCLG1DQUE4QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogQSBjb25maWd1cmF0aW9uIHNlcnZpY2UgZm9yIHRoZSBbYE5nYlRpbWVwaWNrZXJgXSgjL2NvbXBvbmVudHMvdGltZXBpY2tlci9hcGkjTmdiVGltZXBpY2tlcikgY29tcG9uZW50LlxuICpcbiAqIFlvdSBjYW4gaW5qZWN0IHRoaXMgc2VydmljZSwgdHlwaWNhbGx5IGluIHlvdXIgcm9vdCBjb21wb25lbnQsIGFuZCBjdXN0b21pemUgdGhlIHZhbHVlcyBvZiBpdHMgcHJvcGVydGllcyBpblxuICogb3JkZXIgdG8gcHJvdmlkZSBkZWZhdWx0IHZhbHVlcyBmb3IgYWxsIHRoZSB0aW1lcGlja2VycyB1c2VkIGluIHRoZSBhcHBsaWNhdGlvbi5cbiAqL1xuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgTmdiVGltZXBpY2tlckNvbmZpZyB7XG4gIG1lcmlkaWFuID0gZmFsc2U7XG4gIHNwaW5uZXJzID0gdHJ1ZTtcbiAgc2Vjb25kcyA9IGZhbHNlO1xuICBob3VyU3RlcCA9IDE7XG4gIG1pbnV0ZVN0ZXAgPSAxO1xuICBzZWNvbmRTdGVwID0gMTtcbiAgZGlzYWJsZWQgPSBmYWxzZTtcbiAgcmVhZG9ubHlJbnB1dHMgPSBmYWxzZTtcbiAgc2l6ZTogJ3NtYWxsJyB8ICdtZWRpdW0nIHwgJ2xhcmdlJyA9ICdtZWRpdW0nO1xufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/timepicker/timepicker-i18n.js b/dist/sunbird-ui-components/esm2015/timepicker/timepicker-i18n.js new file mode 100644 index 0000000..a4da349 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/timepicker/timepicker-i18n.js @@ -0,0 +1,72 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Inject, Injectable, LOCALE_ID } from '@angular/core'; +import { FormStyle, getLocaleDayPeriods, TranslationWidth } from '@angular/common'; +import * as i0 from "@angular/core"; +/** + * @param {?} locale + * @return {?} + */ +export function NGB_TIMEPICKER_I18N_FACTORY(locale) { + return new NgbTimepickerI18nDefault(locale); +} +/** + * Type of the service supplying day periods (for example, 'AM' and 'PM') to NgbTimepicker component. + * The default implementation of this service honors the Angular locale, and uses the registered locale data, + * as explained in the Angular i18n guide. + * @abstract + */ +export class NgbTimepickerI18n { +} +NgbTimepickerI18n.decorators = [ + { type: Injectable, args: [{ providedIn: 'root', useFactory: NGB_TIMEPICKER_I18N_FACTORY, deps: [LOCALE_ID] },] } +]; +/** @nocollapse */ NgbTimepickerI18n.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function NgbTimepickerI18n_Factory() { return NGB_TIMEPICKER_I18N_FACTORY(i0.ɵɵinject(i0.LOCALE_ID)); }, token: NgbTimepickerI18n, providedIn: "root" }); +if (false) { + /** + * Returns the name for the period before midday. + * @abstract + * @return {?} + */ + NgbTimepickerI18n.prototype.getMorningPeriod = function () { }; + /** + * Returns the name for the period after midday. + * @abstract + * @return {?} + */ + NgbTimepickerI18n.prototype.getAfternoonPeriod = function () { }; +} +export class NgbTimepickerI18nDefault extends NgbTimepickerI18n { + /** + * @param {?} locale + */ + constructor(locale) { + super(); + this._periods = getLocaleDayPeriods(locale, FormStyle.Standalone, TranslationWidth.Narrow); + } + /** + * @return {?} + */ + getMorningPeriod() { return this._periods[0]; } + /** + * @return {?} + */ + getAfternoonPeriod() { return this._periods[1]; } +} +NgbTimepickerI18nDefault.decorators = [ + { type: Injectable } +]; +/** @nocollapse */ +NgbTimepickerI18nDefault.ctorParameters = () => [ + { type: String, decorators: [{ type: Inject, args: [LOCALE_ID,] }] } +]; +if (false) { + /** + * @type {?} + * @private + */ + NgbTimepickerI18nDefault.prototype._periods; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXBpY2tlci1pMThuLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsidGltZXBpY2tlci90aW1lcGlja2VyLWkxOG4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUM1RCxPQUFPLEVBQUMsU0FBUyxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFDLE1BQU0saUJBQWlCLENBQUM7Ozs7OztBQUVqRixNQUFNLFVBQVUsMkJBQTJCLENBQUMsTUFBTTtJQUNoRCxPQUFPLElBQUksd0JBQXdCLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDOUMsQ0FBQzs7Ozs7OztBQVFELE1BQU0sT0FBZ0IsaUJBQWlCOzs7WUFEdEMsVUFBVSxTQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsMkJBQTJCLEVBQUUsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUM7Ozs7Ozs7OztJQUsxRiwrREFBb0M7Ozs7OztJQUtwQyxpRUFBc0M7O0FBSXhDLE1BQU0sT0FBTyx3QkFBeUIsU0FBUSxpQkFBaUI7Ozs7SUFHN0QsWUFBK0IsTUFBYztRQUMzQyxLQUFLLEVBQUUsQ0FBQztRQUVSLElBQUksQ0FBQyxRQUFRLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0YsQ0FBQzs7OztJQUVELGdCQUFnQixLQUFhLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Ozs7SUFFdkQsa0JBQWtCLEtBQWEsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O1lBWjFELFVBQVU7Ozs7eUNBSUksTUFBTSxTQUFDLFNBQVM7Ozs7Ozs7SUFGN0IsNENBQW1DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGUsIExPQ0FMRV9JRH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Zvcm1TdHlsZSwgZ2V0TG9jYWxlRGF5UGVyaW9kcywgVHJhbnNsYXRpb25XaWR0aH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuZXhwb3J0IGZ1bmN0aW9uIE5HQl9USU1FUElDS0VSX0kxOE5fRkFDVE9SWShsb2NhbGUpIHtcbiAgcmV0dXJuIG5ldyBOZ2JUaW1lcGlja2VySTE4bkRlZmF1bHQobG9jYWxlKTtcbn1cblxuLyoqXG4gKiBUeXBlIG9mIHRoZSBzZXJ2aWNlIHN1cHBseWluZyBkYXkgcGVyaW9kcyAoZm9yIGV4YW1wbGUsICdBTScgYW5kICdQTScpIHRvIE5nYlRpbWVwaWNrZXIgY29tcG9uZW50LlxuICogVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBzZXJ2aWNlIGhvbm9ycyB0aGUgQW5ndWxhciBsb2NhbGUsIGFuZCB1c2VzIHRoZSByZWdpc3RlcmVkIGxvY2FsZSBkYXRhLFxuICogYXMgZXhwbGFpbmVkIGluIHRoZSBBbmd1bGFyIGkxOG4gZ3VpZGUuXG4gKi9cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCcsIHVzZUZhY3Rvcnk6IE5HQl9USU1FUElDS0VSX0kxOE5fRkFDVE9SWSwgZGVwczogW0xPQ0FMRV9JRF19KVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE5nYlRpbWVwaWNrZXJJMThuIHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG5hbWUgZm9yIHRoZSBwZXJpb2QgYmVmb3JlIG1pZGRheS5cbiAgICovXG4gIGFic3RyYWN0IGdldE1vcm5pbmdQZXJpb2QoKTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBuYW1lIGZvciB0aGUgcGVyaW9kIGFmdGVyIG1pZGRheS5cbiAgICovXG4gIGFic3RyYWN0IGdldEFmdGVybm9vblBlcmlvZCgpOiBzdHJpbmc7XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBOZ2JUaW1lcGlja2VySTE4bkRlZmF1bHQgZXh0ZW5kcyBOZ2JUaW1lcGlja2VySTE4biB7XG4gIHByaXZhdGUgX3BlcmlvZHM6IFtzdHJpbmcsIHN0cmluZ107XG5cbiAgY29uc3RydWN0b3IoQEluamVjdChMT0NBTEVfSUQpIGxvY2FsZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuX3BlcmlvZHMgPSBnZXRMb2NhbGVEYXlQZXJpb2RzKGxvY2FsZSwgRm9ybVN0eWxlLlN0YW5kYWxvbmUsIFRyYW5zbGF0aW9uV2lkdGguTmFycm93KTtcbiAgfVxuXG4gIGdldE1vcm5pbmdQZXJpb2QoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuX3BlcmlvZHNbMF07IH1cblxuICBnZXRBZnRlcm5vb25QZXJpb2QoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuX3BlcmlvZHNbMV07IH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/timepicker/timepicker.js b/dist/sunbird-ui-components/esm2015/timepicker/timepicker.js new file mode 100644 index 0000000..ed2c139 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/timepicker/timepicker.js @@ -0,0 +1,410 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { ChangeDetectorRef, Component, forwardRef, Input, ViewEncapsulation } from '@angular/core'; +import { NG_VALUE_ACCESSOR } from '@angular/forms'; +import { isInteger, isNumber, padNumber, toInteger } from '../util/util'; +import { NgbTime } from './ngb-time'; +import { NgbTimepickerConfig } from './timepicker-config'; +import { NgbTimeAdapter } from './ngb-time-adapter'; +import { NgbTimepickerI18n } from './timepicker-i18n'; +/** @type {?} */ +const NGB_TIMEPICKER_VALUE_ACCESSOR = { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef((/** + * @return {?} + */ + () => NgbTimepicker)), + multi: true +}; +/** + * A directive that helps with wth picking hours, minutes and seconds. + */ +export class NgbTimepicker { + /** + * @param {?} _config + * @param {?} _ngbTimeAdapter + * @param {?} _cd + * @param {?} i18n + */ + constructor(_config, _ngbTimeAdapter, _cd, i18n) { + this._config = _config; + this._ngbTimeAdapter = _ngbTimeAdapter; + this._cd = _cd; + this.i18n = i18n; + this.onChange = (/** + * @param {?} _ + * @return {?} + */ + (_) => { }); + this.onTouched = (/** + * @return {?} + */ + () => { }); + this.meridian = _config.meridian; + this.spinners = _config.spinners; + this.seconds = _config.seconds; + this.hourStep = _config.hourStep; + this.minuteStep = _config.minuteStep; + this.secondStep = _config.secondStep; + this.disabled = _config.disabled; + this.readonlyInputs = _config.readonlyInputs; + this.size = _config.size; + } + /** + * The number of hours to add/subtract when clicking hour spinners. + * @param {?} step + * @return {?} + */ + set hourStep(step) { + this._hourStep = isInteger(step) ? step : this._config.hourStep; + } + /** + * @return {?} + */ + get hourStep() { return this._hourStep; } + /** + * The number of minutes to add/subtract when clicking minute spinners. + * @param {?} step + * @return {?} + */ + set minuteStep(step) { + this._minuteStep = isInteger(step) ? step : this._config.minuteStep; + } + /** + * @return {?} + */ + get minuteStep() { return this._minuteStep; } + /** + * The number of seconds to add/subtract when clicking second spinners. + * @param {?} step + * @return {?} + */ + set secondStep(step) { + this._secondStep = isInteger(step) ? step : this._config.secondStep; + } + /** + * @return {?} + */ + get secondStep() { return this._secondStep; } + /** + * @param {?} value + * @return {?} + */ + writeValue(value) { + /** @type {?} */ + const structValue = this._ngbTimeAdapter.fromModel(value); + this.model = structValue ? new NgbTime(structValue.hour, structValue.minute, structValue.second) : new NgbTime(); + if (!this.seconds && (!structValue || !isNumber(structValue.second))) { + this.model.second = 0; + } + this._cd.markForCheck(); + } + /** + * @param {?} fn + * @return {?} + */ + registerOnChange(fn) { this.onChange = fn; } + /** + * @param {?} fn + * @return {?} + */ + registerOnTouched(fn) { this.onTouched = fn; } + /** + * @param {?} isDisabled + * @return {?} + */ + setDisabledState(isDisabled) { this.disabled = isDisabled; } + /** + * @param {?} step + * @return {?} + */ + changeHour(step) { + this.model.changeHour(step); + this.propagateModelChange(); + } + /** + * @param {?} step + * @return {?} + */ + changeMinute(step) { + this.model.changeMinute(step); + this.propagateModelChange(); + } + /** + * @param {?} step + * @return {?} + */ + changeSecond(step) { + this.model.changeSecond(step); + this.propagateModelChange(); + } + /** + * @param {?} newVal + * @return {?} + */ + updateHour(newVal) { + /** @type {?} */ + const isPM = this.model.hour >= 12; + /** @type {?} */ + const enteredHour = toInteger(newVal); + if (this.meridian && (isPM && enteredHour < 12 || !isPM && enteredHour === 12)) { + this.model.updateHour(enteredHour + 12); + } + else { + this.model.updateHour(enteredHour); + } + this.propagateModelChange(); + } + /** + * @param {?} newVal + * @return {?} + */ + updateMinute(newVal) { + this.model.updateMinute(toInteger(newVal)); + this.propagateModelChange(); + } + /** + * @param {?} newVal + * @return {?} + */ + updateSecond(newVal) { + this.model.updateSecond(toInteger(newVal)); + this.propagateModelChange(); + } + /** + * @return {?} + */ + toggleMeridian() { + if (this.meridian) { + this.changeHour(12); + } + } + /** + * @param {?} value + * @return {?} + */ + formatHour(value) { + if (isNumber(value)) { + if (this.meridian) { + return padNumber(value % 12 === 0 ? 12 : value % 12); + } + else { + return padNumber(value % 24); + } + } + else { + return padNumber(NaN); + } + } + /** + * @param {?} value + * @return {?} + */ + formatMinSec(value) { return padNumber(value); } + /** + * @return {?} + */ + get isSmallSize() { return this.size === 'small'; } + /** + * @return {?} + */ + get isLargeSize() { return this.size === 'large'; } + /** + * @param {?} changes + * @return {?} + */ + ngOnChanges(changes) { + if (changes['seconds'] && !this.seconds && this.model && !isNumber(this.model.second)) { + this.model.second = 0; + this.propagateModelChange(false); + } + } + /** + * @private + * @param {?=} touched + * @return {?} + */ + propagateModelChange(touched = true) { + if (touched) { + this.onTouched(); + } + if (this.model.isValid(this.seconds)) { + this.onChange(this._ngbTimeAdapter.toModel({ hour: this.model.hour, minute: this.model.minute, second: this.model.second })); + } + else { + this.onChange(this._ngbTimeAdapter.toModel(null)); + } + } +} +NgbTimepicker.decorators = [ + { type: Component, args: [{ + selector: 'ngb-timepicker', + encapsulation: ViewEncapsulation.None, + template: ` +
+
+
+ + + +
+
:
+
+ + + +
+
:
+
+ + + +
+
+
+ +
+
+
+ `, + providers: [NGB_TIMEPICKER_VALUE_ACCESSOR], + styles: ["ngb-timepicker{font-size:1rem}.ngb-tp{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.ngb-tp-input-container{width:4em}.ngb-tp-chevron::before{border-style:solid;border-width:.29em .29em 0 0;content:\"\";display:inline-block;height:.69em;left:.05em;position:relative;top:.15em;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);vertical-align:middle;width:.69em}.ngb-tp-chevron.bottom:before{top:-.3em;-webkit-transform:rotate(135deg);transform:rotate(135deg)}.ngb-tp-input{text-align:center}.ngb-tp-hour,.ngb-tp-meridian,.ngb-tp-minute,.ngb-tp-second{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-align:center;align-items:center;-ms-flex-pack:distribute;justify-content:space-around}.ngb-tp-spacer{width:1em;text-align:center}"] + }] } +]; +/** @nocollapse */ +NgbTimepicker.ctorParameters = () => [ + { type: NgbTimepickerConfig }, + { type: NgbTimeAdapter }, + { type: ChangeDetectorRef }, + { type: NgbTimepickerI18n } +]; +NgbTimepicker.propDecorators = { + meridian: [{ type: Input }], + spinners: [{ type: Input }], + seconds: [{ type: Input }], + hourStep: [{ type: Input }], + minuteStep: [{ type: Input }], + secondStep: [{ type: Input }], + readonlyInputs: [{ type: Input }], + size: [{ type: Input }] +}; +if (false) { + /** @type {?} */ + NgbTimepicker.prototype.disabled; + /** @type {?} */ + NgbTimepicker.prototype.model; + /** + * @type {?} + * @private + */ + NgbTimepicker.prototype._hourStep; + /** + * @type {?} + * @private + */ + NgbTimepicker.prototype._minuteStep; + /** + * @type {?} + * @private + */ + NgbTimepicker.prototype._secondStep; + /** + * Whether to display 12H or 24H mode. + * @type {?} + */ + NgbTimepicker.prototype.meridian; + /** + * If `true`, the spinners above and below inputs are visible. + * @type {?} + */ + NgbTimepicker.prototype.spinners; + /** + * If `true`, it is possible to select seconds. + * @type {?} + */ + NgbTimepicker.prototype.seconds; + /** + * If `true`, the timepicker is readonly and can't be changed. + * @type {?} + */ + NgbTimepicker.prototype.readonlyInputs; + /** + * The size of inputs and buttons. + * @type {?} + */ + NgbTimepicker.prototype.size; + /** @type {?} */ + NgbTimepicker.prototype.onChange; + /** @type {?} */ + NgbTimepicker.prototype.onTouched; + /** + * @type {?} + * @private + */ + NgbTimepicker.prototype._config; + /** + * @type {?} + * @private + */ + NgbTimepicker.prototype._ngbTimeAdapter; + /** + * @type {?} + * @private + */ + NgbTimepicker.prototype._cd; + /** @type {?} */ + NgbTimepicker.prototype.i18n; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXBpY2tlci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbInRpbWVwaWNrZXIvdGltZXBpY2tlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLEtBQUssRUFHTCxpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF1QixpQkFBaUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXZFLE9BQU8sRUFBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDdkUsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFlBQVksQ0FBQztBQUNuQyxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7O01BRTlDLDZCQUE2QixHQUFHO0lBQ3BDLE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVU7OztJQUFDLEdBQUcsRUFBRSxDQUFDLGFBQWEsRUFBQztJQUM1QyxLQUFLLEVBQUUsSUFBSTtDQUNaOzs7O0FBd0ZELE1BQU0sT0FBTyxhQUFhOzs7Ozs7O0lBZ0V4QixZQUNxQixPQUE0QixFQUFVLGVBQW9DLEVBQ25GLEdBQXNCLEVBQVMsSUFBdUI7UUFEN0MsWUFBTyxHQUFQLE9BQU8sQ0FBcUI7UUFBVSxvQkFBZSxHQUFmLGVBQWUsQ0FBcUI7UUFDbkYsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFBUyxTQUFJLEdBQUosSUFBSSxDQUFtQjtRQVlsRSxhQUFROzs7O1FBQUcsQ0FBQyxDQUFNLEVBQUUsRUFBRSxHQUFFLENBQUMsRUFBQztR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Q2xCLDhCQUFlOzs7OztJQUVmLGtDQUEwQjs7Ozs7SUFDMUIsb0NBQTRCOzs7OztJQUM1QixvQ0FBNEI7Ozs7O0lBSzVCLGlDQUEyQjs7Ozs7SUFLM0IsaUNBQTJCOzs7OztJQUszQixnQ0FBMEI7Ozs7O0lBbUMxQix1Q0FBaUM7Ozs7O0lBS2pDLDZCQUE0Qzs7SUFnQjVDLGlDQUEwQjs7SUFDMUIsa0NBQXFCOzs7OztJQWRqQixnQ0FBNkM7Ozs7O0lBQUUsd0NBQTRDOzs7OztJQUMzRiw0QkFBOEI7O0lBQUUsNkJBQThCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgZm9yd2FyZFJlZixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQge2lzSW50ZWdlciwgaXNOdW1iZXIsIHBhZE51bWJlciwgdG9JbnRlZ2VyfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IHtOZ2JUaW1lfSBmcm9tICcuL25nYi10aW1lJztcbmltcG9ydCB7TmdiVGltZXBpY2tlckNvbmZpZ30gZnJvbSAnLi90aW1lcGlja2VyLWNvbmZpZyc7XG5pbXBvcnQge05nYlRpbWVBZGFwdGVyfSBmcm9tICcuL25nYi10aW1lLWFkYXB0ZXInO1xuaW1wb3J0IHtOZ2JUaW1lcGlja2VySTE4bn0gZnJvbSAnLi90aW1lcGlja2VyLWkxOG4nO1xuXG5jb25zdCBOR0JfVElNRVBJQ0tFUl9WQUxVRV9BQ0NFU1NPUiA9IHtcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE5nYlRpbWVwaWNrZXIpLFxuICBtdWx0aTogdHJ1ZVxufTtcblxuLyoqXG4gKiBBIGRpcmVjdGl2ZSB0aGF0IGhlbHBzIHdpdGggd3RoIHBpY2tpbmcgaG91cnMsIG1pbnV0ZXMgYW5kIHNlY29uZHMuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25nYi10aW1lcGlja2VyJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgc3R5bGVVcmxzOiBbJy4vdGltZXBpY2tlci5zY3NzJ10sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGZpZWxkc2V0IFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFtjbGFzcy5kaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm5nYi10cFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibmdiLXRwLWlucHV0LWNvbnRhaW5lciBuZ2ItdHAtaG91clwiPlxuICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJzcGlubmVyc1wiIHRhYmluZGV4PVwiLTFcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNoYW5nZUhvdXIoaG91clN0ZXApXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCIgW2NsYXNzLmJ0bi1zbV09XCJpc1NtYWxsU2l6ZVwiIFtjbGFzcy5idG4tbGddPVwiaXNMYXJnZVNpemVcIiBbY2xhc3MuZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoZXZyb24gbmdiLXRwLWNoZXZyb25cIj48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIiBpMThuPVwiQEBuZ2IudGltZXBpY2tlci5pbmNyZW1lbnQtaG91cnNcIj5JbmNyZW1lbnQgaG91cnM8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJuZ2ItdHAtaW5wdXQgZm9ybS1jb250cm9sXCIgW2NsYXNzLmZvcm0tY29udHJvbC1zbV09XCJpc1NtYWxsU2l6ZVwiIFtjbGFzcy5mb3JtLWNvbnRyb2wtbGddPVwiaXNMYXJnZVNpemVcIlxuICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMlwiIHBsYWNlaG9sZGVyPVwiSEhcIiBpMThuLXBsYWNlaG9sZGVyPVwiQEBuZ2IudGltZXBpY2tlci5ISFwiXG4gICAgICAgICAgICBbdmFsdWVdPVwiZm9ybWF0SG91cihtb2RlbD8uaG91cilcIiAoY2hhbmdlKT1cInVwZGF0ZUhvdXIoJGV2ZW50LnRhcmdldC52YWx1ZSlcIlxuICAgICAgICAgICAgW3JlYWRPbmx5XT1cInJlYWRvbmx5SW5wdXRzXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgYXJpYS1sYWJlbD1cIkhvdXJzXCIgaTE4bi1hcmlhLWxhYmVsPVwiQEBuZ2IudGltZXBpY2tlci5ob3Vyc1wiXG4gICAgICAgICAgICAoa2V5ZG93bi5BcnJvd1VwKT1cImNoYW5nZUhvdXIoaG91clN0ZXApOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgICAgICAoa2V5ZG93bi5BcnJvd0Rvd24pPVwiY2hhbmdlSG91cigtaG91clN0ZXApOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiPlxuICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJzcGlubmVyc1wiIHRhYmluZGV4PVwiLTFcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNoYW5nZUhvdXIoLWhvdXJTdGVwKVwiXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tbGlua1wiIFtjbGFzcy5idG4tc21dPVwiaXNTbWFsbFNpemVcIiBbY2xhc3MuYnRuLWxnXT1cImlzTGFyZ2VTaXplXCIgW2NsYXNzLmRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGV2cm9uIG5nYi10cC1jaGV2cm9uIGJvdHRvbVwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiIGkxOG49XCJAQG5nYi50aW1lcGlja2VyLmRlY3JlbWVudC1ob3Vyc1wiPkRlY3JlbWVudCBob3Vyczwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJuZ2ItdHAtc3BhY2VyXCI+OjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibmdiLXRwLWlucHV0LWNvbnRhaW5lciBuZ2ItdHAtbWludXRlXCI+XG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInNwaW5uZXJzXCIgdGFiaW5kZXg9XCItMVwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiY2hhbmdlTWludXRlKG1pbnV0ZVN0ZXApXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCIgW2NsYXNzLmJ0bi1zbV09XCJpc1NtYWxsU2l6ZVwiIFtjbGFzcy5idG4tbGddPVwiaXNMYXJnZVNpemVcIiBbY2xhc3MuZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoZXZyb24gbmdiLXRwLWNoZXZyb25cIj48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIiBpMThuPVwiQEBuZ2IudGltZXBpY2tlci5pbmNyZW1lbnQtbWludXRlc1wiPkluY3JlbWVudCBtaW51dGVzPC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwibmdiLXRwLWlucHV0IGZvcm0tY29udHJvbFwiIFtjbGFzcy5mb3JtLWNvbnRyb2wtc21dPVwiaXNTbWFsbFNpemVcIiBbY2xhc3MuZm9ybS1jb250cm9sLWxnXT1cImlzTGFyZ2VTaXplXCJcbiAgICAgICAgICAgIG1heGxlbmd0aD1cIjJcIiBwbGFjZWhvbGRlcj1cIk1NXCIgaTE4bi1wbGFjZWhvbGRlcj1cIkBAbmdiLnRpbWVwaWNrZXIuTU1cIlxuICAgICAgICAgICAgW3ZhbHVlXT1cImZvcm1hdE1pblNlYyhtb2RlbD8ubWludXRlKVwiIChjaGFuZ2UpPVwidXBkYXRlTWludXRlKCRldmVudC50YXJnZXQudmFsdWUpXCJcbiAgICAgICAgICAgIFtyZWFkT25seV09XCJyZWFkb25seUlucHV0c1wiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIGFyaWEtbGFiZWw9XCJNaW51dGVzXCIgaTE4bi1hcmlhLWxhYmVsPVwiQEBuZ2IudGltZXBpY2tlci5taW51dGVzXCJcbiAgICAgICAgICAgIChrZXlkb3duLkFycm93VXApPVwiY2hhbmdlTWludXRlKG1pbnV0ZVN0ZXApOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgICAgICAoa2V5ZG93bi5BcnJvd0Rvd24pPVwiY2hhbmdlTWludXRlKC1taW51dGVTdGVwKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIj5cbiAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwic3Bpbm5lcnNcIiB0YWJpbmRleD1cIi0xXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJjaGFuZ2VNaW51dGUoLW1pbnV0ZVN0ZXApXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCIgW2NsYXNzLmJ0bi1zbV09XCJpc1NtYWxsU2l6ZVwiIFtjbGFzcy5idG4tbGddPVwiaXNMYXJnZVNpemVcIiAgW2NsYXNzLmRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGV2cm9uIG5nYi10cC1jaGV2cm9uIGJvdHRvbVwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiICBpMThuPVwiQEBuZ2IudGltZXBpY2tlci5kZWNyZW1lbnQtbWludXRlc1wiPkRlY3JlbWVudCBtaW51dGVzPC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cInNlY29uZHNcIiBjbGFzcz1cIm5nYi10cC1zcGFjZXJcIj46PC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzZWNvbmRzXCIgY2xhc3M9XCJuZ2ItdHAtaW5wdXQtY29udGFpbmVyIG5nYi10cC1zZWNvbmRcIj5cbiAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwic3Bpbm5lcnNcIiB0YWJpbmRleD1cIi0xXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJjaGFuZ2VTZWNvbmQoc2Vjb25kU3RlcClcIlxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWxpbmtcIiBbY2xhc3MuYnRuLXNtXT1cImlzU21hbGxTaXplXCIgW2NsYXNzLmJ0bi1sZ109XCJpc0xhcmdlU2l6ZVwiIFtjbGFzcy5kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hldnJvbiBuZ2ItdHAtY2hldnJvblwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiIGkxOG49XCJAQG5nYi50aW1lcGlja2VyLmluY3JlbWVudC1zZWNvbmRzXCI+SW5jcmVtZW50IHNlY29uZHM8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJuZ2ItdHAtaW5wdXQgZm9ybS1jb250cm9sXCIgW2NsYXNzLmZvcm0tY29udHJvbC1zbV09XCJpc1NtYWxsU2l6ZVwiIFtjbGFzcy5mb3JtLWNvbnRyb2wtbGddPVwiaXNMYXJnZVNpemVcIlxuICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMlwiIHBsYWNlaG9sZGVyPVwiU1NcIiBpMThuLXBsYWNlaG9sZGVyPVwiQEBuZ2IudGltZXBpY2tlci5TU1wiXG4gICAgICAgICAgICBbdmFsdWVdPVwiZm9ybWF0TWluU2VjKG1vZGVsPy5zZWNvbmQpXCIgKGNoYW5nZSk9XCJ1cGRhdGVTZWNvbmQoJGV2ZW50LnRhcmdldC52YWx1ZSlcIlxuICAgICAgICAgICAgW3JlYWRPbmx5XT1cInJlYWRvbmx5SW5wdXRzXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgYXJpYS1sYWJlbD1cIlNlY29uZHNcIiBpMThuLWFyaWEtbGFiZWw9XCJAQG5nYi50aW1lcGlja2VyLnNlY29uZHNcIlxuICAgICAgICAgICAgKGtleWRvd24uQXJyb3dVcCk9XCJjaGFuZ2VTZWNvbmQoc2Vjb25kU3RlcCk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAgIChrZXlkb3duLkFycm93RG93bik9XCJjaGFuZ2VTZWNvbmQoLXNlY29uZFN0ZXApOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiPlxuICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJzcGlubmVyc1wiIHRhYmluZGV4PVwiLTFcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNoYW5nZVNlY29uZCgtc2Vjb25kU3RlcClcIlxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWxpbmtcIiBbY2xhc3MuYnRuLXNtXT1cImlzU21hbGxTaXplXCIgW2NsYXNzLmJ0bi1sZ109XCJpc0xhcmdlU2l6ZVwiICBbY2xhc3MuZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoZXZyb24gbmdiLXRwLWNoZXZyb24gYm90dG9tXCI+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCIgaTE4bj1cIkBAbmdiLnRpbWVwaWNrZXIuZGVjcmVtZW50LXNlY29uZHNcIj5EZWNyZW1lbnQgc2Vjb25kczwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJtZXJpZGlhblwiIGNsYXNzPVwibmdiLXRwLXNwYWNlclwiPjwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwibWVyaWRpYW5cIiBjbGFzcz1cIm5nYi10cC1tZXJpZGlhblwiPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnlcIiBbY2xhc3MuYnRuLXNtXT1cImlzU21hbGxTaXplXCIgW2NsYXNzLmJ0bi1sZ109XCJpc0xhcmdlU2l6ZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbY2xhc3MuZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZU1lcmlkaWFuKClcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb2RlbD8uaG91ciA+PSAxMjsgZWxzZSBhbVwiIGkxOG49XCJAQG5nYi50aW1lcGlja2VyLlBNXCI+e3sgaTE4bi5nZXRBZnRlcm5vb25QZXJpb2QoKSB9fTwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNhbSBpMThuPVwiQEBuZ2IudGltZXBpY2tlci5BTVwiPnt7IGkxOG4uZ2V0TW9ybmluZ1BlcmlvZCgpIH19PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2ZpZWxkc2V0PlxuICBgLFxuICBwcm92aWRlcnM6IFtOR0JfVElNRVBJQ0tFUl9WQUxVRV9BQ0NFU1NPUl1cbn0pXG5leHBvcnQgY2xhc3MgTmdiVGltZXBpY2tlciBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICAgIE9uQ2hhbmdlcyB7XG4gIGRpc2FibGVkOiBib29sZWFuO1xuICBtb2RlbDogTmdiVGltZTtcblxuICBwcml2YXRlIF9ob3VyU3RlcDogbnVtYmVyO1xuICBwcml2YXRlIF9taW51dGVTdGVwOiBudW1iZXI7XG4gIHByaXZhdGUgX3NlY29uZFN0ZXA6IG51bWJlcjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBkaXNwbGF5IDEySCBvciAyNEggbW9kZS5cbiAgICovXG4gIEBJbnB1dCgpIG1lcmlkaWFuOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBzcGlubmVycyBhYm92ZSBhbmQgYmVsb3cgaW5wdXRzIGFyZSB2aXNpYmxlLlxuICAgKi9cbiAgQElucHV0KCkgc3Bpbm5lcnM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgaXQgaXMgcG9zc2libGUgdG8gc2VsZWN0IHNlY29uZHMuXG4gICAqL1xuICBASW5wdXQoKSBzZWNvbmRzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIGhvdXJzIHRvIGFkZC9zdWJ0cmFjdCB3aGVuIGNsaWNraW5nIGhvdXIgc3Bpbm5lcnMuXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgaG91clN0ZXAoc3RlcDogbnVtYmVyKSB7XG4gICAgdGhpcy5faG91clN0ZXAgPSBpc0ludGVnZXIoc3RlcCkgPyBzdGVwIDogdGhpcy5fY29uZmlnLmhvdXJTdGVwO1xuICB9XG5cbiAgZ2V0IGhvdXJTdGVwKCk6IG51bWJlciB7IHJldHVybiB0aGlzLl9ob3VyU3RlcDsgfVxuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIG1pbnV0ZXMgdG8gYWRkL3N1YnRyYWN0IHdoZW4gY2xpY2tpbmcgbWludXRlIHNwaW5uZXJzLlxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IG1pbnV0ZVN0ZXAoc3RlcDogbnVtYmVyKSB7XG4gICAgdGhpcy5fbWludXRlU3RlcCA9IGlzSW50ZWdlcihzdGVwKSA/IHN0ZXAgOiB0aGlzLl9jb25maWcubWludXRlU3RlcDtcbiAgfVxuXG4gIGdldCBtaW51dGVTdGVwKCk6IG51bWJlciB7IHJldHVybiB0aGlzLl9taW51dGVTdGVwOyB9XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyB0byBhZGQvc3VidHJhY3Qgd2hlbiBjbGlja2luZyBzZWNvbmQgc3Bpbm5lcnMuXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgc2Vjb25kU3RlcChzdGVwOiBudW1iZXIpIHtcbiAgICB0aGlzLl9zZWNvbmRTdGVwID0gaXNJbnRlZ2VyKHN0ZXApID8gc3RlcCA6IHRoaXMuX2NvbmZpZy5zZWNvbmRTdGVwO1xuICB9XG5cbiAgZ2V0IHNlY29uZFN0ZXAoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuX3NlY29uZFN0ZXA7IH1cblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgdGltZXBpY2tlciBpcyByZWFkb25seSBhbmQgY2FuJ3QgYmUgY2hhbmdlZC5cbiAgICovXG4gIEBJbnB1dCgpIHJlYWRvbmx5SW5wdXRzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiBpbnB1dHMgYW5kIGJ1dHRvbnMuXG4gICAqL1xuICBASW5wdXQoKSBzaXplOiAnc21hbGwnIHwgJ21lZGl1bScgfCAnbGFyZ2UnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgcHJpdmF0ZSByZWFkb25seSBfY29uZmlnOiBOZ2JUaW1lcGlja2VyQ29uZmlnLCBwcml2YXRlIF9uZ2JUaW1lQWRhcHRlcjogTmdiVGltZUFkYXB0ZXI8YW55PixcbiAgICAgIHByaXZhdGUgX2NkOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHVibGljIGkxOG46IE5nYlRpbWVwaWNrZXJJMThuKSB7XG4gICAgdGhpcy5tZXJpZGlhbiA9IF9jb25maWcubWVyaWRpYW47XG4gICAgdGhpcy5zcGlubmVycyA9IF9jb25maWcuc3Bpbm5lcnM7XG4gICAgdGhpcy5zZWNvbmRzID0gX2NvbmZpZy5zZWNvbmRzO1xuICAgIHRoaXMuaG91clN0ZXAgPSBfY29uZmlnLmhvdXJTdGVwO1xuICAgIHRoaXMubWludXRlU3RlcCA9IF9jb25maWcubWludXRlU3RlcDtcbiAgICB0aGlzLnNlY29uZFN0ZXAgPSBfY29uZmlnLnNlY29uZFN0ZXA7XG4gICAgdGhpcy5kaXNhYmxlZCA9IF9jb25maWcuZGlzYWJsZWQ7XG4gICAgdGhpcy5yZWFkb25seUlucHV0cyA9IF9jb25maWcucmVhZG9ubHlJbnB1dHM7XG4gICAgdGhpcy5zaXplID0gX2NvbmZpZy5zaXplO1xuICB9XG5cbiAgb25DaGFuZ2UgPSAoXzogYW55KSA9PiB7fTtcbiAgb25Ub3VjaGVkID0gKCkgPT4ge307XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZSkge1xuICAgIGNvbnN0IHN0cnVjdFZhbHVlID0gdGhpcy5fbmdiVGltZUFkYXB0ZXIuZnJvbU1vZGVsKHZhbHVlKTtcbiAgICB0aGlzLm1vZGVsID0gc3RydWN0VmFsdWUgPyBuZXcgTmdiVGltZShzdHJ1Y3RWYWx1ZS5ob3VyLCBzdHJ1Y3RWYWx1ZS5taW51dGUsIHN0cnVjdFZhbHVlLnNlY29uZCkgOiBuZXcgTmdiVGltZSgpO1xuICAgIGlmICghdGhpcy5zZWNvbmRzICYmICghc3RydWN0VmFsdWUgfHwgIWlzTnVtYmVyKHN0cnVjdFZhbHVlLnNlY29uZCkpKSB7XG4gICAgICB0aGlzLm1vZGVsLnNlY29uZCA9IDA7XG4gICAgfVxuICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBhbnkpID0+IGFueSk6IHZvaWQgeyB0aGlzLm9uQ2hhbmdlID0gZm47IH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gYW55KTogdm9pZCB7IHRoaXMub25Ub3VjaGVkID0gZm47IH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHsgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7IH1cblxuICBjaGFuZ2VIb3VyKHN0ZXA6IG51bWJlcikge1xuICAgIHRoaXMubW9kZWwuY2hhbmdlSG91cihzdGVwKTtcbiAgICB0aGlzLnByb3BhZ2F0ZU1vZGVsQ2hhbmdlKCk7XG4gIH1cblxuICBjaGFuZ2VNaW51dGUoc3RlcDogbnVtYmVyKSB7XG4gICAgdGhpcy5tb2RlbC5jaGFuZ2VNaW51dGUoc3RlcCk7XG4gICAgdGhpcy5wcm9wYWdhdGVNb2RlbENoYW5nZSgpO1xuICB9XG5cbiAgY2hhbmdlU2Vjb25kKHN0ZXA6IG51bWJlcikge1xuICAgIHRoaXMubW9kZWwuY2hhbmdlU2Vjb25kKHN0ZXApO1xuICAgIHRoaXMucHJvcGFnYXRlTW9kZWxDaGFuZ2UoKTtcbiAgfVxuXG4gIHVwZGF0ZUhvdXIobmV3VmFsOiBzdHJpbmcpIHtcbiAgICBjb25zdCBpc1BNID0gdGhpcy5tb2RlbC5ob3VyID49IDEyO1xuICAgIGNvbnN0IGVudGVyZWRIb3VyID0gdG9JbnRlZ2VyKG5ld1ZhbCk7XG4gICAgaWYgKHRoaXMubWVyaWRpYW4gJiYgKGlzUE0gJiYgZW50ZXJlZEhvdXIgPCAxMiB8fCAhaXNQTSAmJiBlbnRlcmVkSG91ciA9PT0gMTIpKSB7XG4gICAgICB0aGlzLm1vZGVsLnVwZGF0ZUhvdXIoZW50ZXJlZEhvdXIgKyAxMik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubW9kZWwudXBkYXRlSG91cihlbnRlcmVkSG91cik7XG4gICAgfVxuICAgIHRoaXMucHJvcGFnYXRlTW9kZWxDaGFuZ2UoKTtcbiAgfVxuXG4gIHVwZGF0ZU1pbnV0ZShuZXdWYWw6IHN0cmluZykge1xuICAgIHRoaXMubW9kZWwudXBkYXRlTWludXRlKHRvSW50ZWdlcihuZXdWYWwpKTtcbiAgICB0aGlzLnByb3BhZ2F0ZU1vZGVsQ2hhbmdlKCk7XG4gIH1cblxuICB1cGRhdGVTZWNvbmQobmV3VmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLm1vZGVsLnVwZGF0ZVNlY29uZCh0b0ludGVnZXIobmV3VmFsKSk7XG4gICAgdGhpcy5wcm9wYWdhdGVNb2RlbENoYW5nZSgpO1xuICB9XG5cbiAgdG9nZ2xlTWVyaWRpYW4oKSB7XG4gICAgaWYgKHRoaXMubWVyaWRpYW4pIHtcbiAgICAgIHRoaXMuY2hhbmdlSG91cigxMik7XG4gICAgfVxuICB9XG5cbiAgZm9ybWF0SG91cih2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKGlzTnVtYmVyKHZhbHVlKSkge1xuICAgICAgaWYgKHRoaXMubWVyaWRpYW4pIHtcbiAgICAgICAgcmV0dXJuIHBhZE51bWJlcih2YWx1ZSAlIDEyID09PSAwID8gMTIgOiB2YWx1ZSAlIDEyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBwYWROdW1iZXIodmFsdWUgJSAyNCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBwYWROdW1iZXIoTmFOKTtcbiAgICB9XG4gIH1cblxuICBmb3JtYXRNaW5TZWModmFsdWU6IG51bWJlcikgeyByZXR1cm4gcGFkTnVtYmVyKHZhbHVlKTsgfVxuXG4gIGdldCBpc1NtYWxsU2l6ZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuc2l6ZSA9PT0gJ3NtYWxsJzsgfVxuXG4gIGdldCBpc0xhcmdlU2l6ZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuc2l6ZSA9PT0gJ2xhcmdlJzsgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snc2Vjb25kcyddICYmICF0aGlzLnNlY29uZHMgJiYgdGhpcy5tb2RlbCAmJiAhaXNOdW1iZXIodGhpcy5tb2RlbC5zZWNvbmQpKSB7XG4gICAgICB0aGlzLm1vZGVsLnNlY29uZCA9IDA7XG4gICAgICB0aGlzLnByb3BhZ2F0ZU1vZGVsQ2hhbmdlKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHByb3BhZ2F0ZU1vZGVsQ2hhbmdlKHRvdWNoZWQgPSB0cnVlKSB7XG4gICAgaWYgKHRvdWNoZWQpIHtcbiAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLm1vZGVsLmlzVmFsaWQodGhpcy5zZWNvbmRzKSkge1xuICAgICAgdGhpcy5vbkNoYW5nZShcbiAgICAgICAgICB0aGlzLl9uZ2JUaW1lQWRhcHRlci50b01vZGVsKHtob3VyOiB0aGlzLm1vZGVsLmhvdXIsIG1pbnV0ZTogdGhpcy5tb2RlbC5taW51dGUsIHNlY29uZDogdGhpcy5tb2RlbC5zZWNvbmR9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5fbmdiVGltZUFkYXB0ZXIudG9Nb2RlbChudWxsKSk7XG4gICAgfVxuICB9XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/timepicker/timepicker.module.js b/dist/sunbird-ui-components/esm2015/timepicker/timepicker.module.js new file mode 100644 index 0000000..e7fdf48 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/timepicker/timepicker.module.js @@ -0,0 +1,17 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { NgbTimepicker } from './timepicker'; +export { NgbTimepicker } from './timepicker'; +export { NgbTimepickerConfig } from './timepicker-config'; +export { NgbTimeAdapter } from './ngb-time-adapter'; +export { NgbTimepickerI18n } from './timepicker-i18n'; +export class NgbTimepickerModule { +} +NgbTimepickerModule.decorators = [ + { type: NgModule, args: [{ declarations: [NgbTimepicker], exports: [NgbTimepicker], imports: [CommonModule] },] } +]; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXBpY2tlci5tb2R1bGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJ0aW1lcGlja2VyL3RpbWVwaWNrZXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUU3QyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRTNDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDM0MsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFeEQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBR3BELE1BQU0sT0FBTyxtQkFBbUI7OztZQUQvQixRQUFRLFNBQUMsRUFBQyxZQUFZLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmltcG9ydCB7TmdiVGltZXBpY2tlcn0gZnJvbSAnLi90aW1lcGlja2VyJztcblxuZXhwb3J0IHtOZ2JUaW1lcGlja2VyfSBmcm9tICcuL3RpbWVwaWNrZXInO1xuZXhwb3J0IHtOZ2JUaW1lcGlja2VyQ29uZmlnfSBmcm9tICcuL3RpbWVwaWNrZXItY29uZmlnJztcbmV4cG9ydCB7TmdiVGltZVN0cnVjdH0gZnJvbSAnLi9uZ2ItdGltZS1zdHJ1Y3QnO1xuZXhwb3J0IHtOZ2JUaW1lQWRhcHRlcn0gZnJvbSAnLi9uZ2ItdGltZS1hZGFwdGVyJztcbmV4cG9ydCB7TmdiVGltZXBpY2tlckkxOG59IGZyb20gJy4vdGltZXBpY2tlci1pMThuJztcblxuQE5nTW9kdWxlKHtkZWNsYXJhdGlvbnM6IFtOZ2JUaW1lcGlja2VyXSwgZXhwb3J0czogW05nYlRpbWVwaWNrZXJdLCBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXX0pXG5leHBvcnQgY2xhc3MgTmdiVGltZXBpY2tlck1vZHVsZSB7XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/toast/toast-config.js b/dist/sunbird-ui-components/esm2015/toast/toast-config.js new file mode 100644 index 0000000..4287ff0 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/toast/toast-config.js @@ -0,0 +1,62 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Injectable } from '@angular/core'; +import * as i0 from "@angular/core"; +/** + * Interface used to type all toast config options. See `NgbToastConfig`. + * + * \@since 5.0.0 + * @record + */ +export function NgbToastOptions() { } +if (false) { + /** + * Specify if the toast component should emit the `hide()` output + * after a certain `delay` in ms. + * @type {?|undefined} + */ + NgbToastOptions.prototype.autohide; + /** + * Delay in ms after which the `hide()` output should be emitted. + * @type {?|undefined} + */ + NgbToastOptions.prototype.delay; + /** + * Type of aria-live attribute to be used. + * + * Could be one of these 2 values (as string): + * - `polite` (default) + * - `alert` + * @type {?|undefined} + */ + NgbToastOptions.prototype.ariaLive; +} +/** + * Configuration service for the NgbToast component. You can inject this service, typically in your root component, + * and customize the values of its properties in order to provide default values for all the toasts used in the + * application. + * + * \@since 5.0.0 + */ +export class NgbToastConfig { + constructor() { + this.autohide = true; + this.delay = 500; + this.ariaLive = 'polite'; + } +} +NgbToastConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } +]; +/** @nocollapse */ NgbToastConfig.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function NgbToastConfig_Factory() { return new NgbToastConfig(); }, token: NgbToastConfig, providedIn: "root" }); +if (false) { + /** @type {?} */ + NgbToastConfig.prototype.autohide; + /** @type {?} */ + NgbToastConfig.prototype.delay; + /** @type {?} */ + NgbToastConfig.prototype.ariaLive; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3QtY29uZmlnLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsidG9hc3QvdG9hc3QtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQU96QyxxQ0FvQkM7Ozs7Ozs7SUFmQyxtQ0FBbUI7Ozs7O0lBS25CLGdDQUFlOzs7Ozs7Ozs7SUFTZixtQ0FBOEI7Ozs7Ozs7OztBQVdoQyxNQUFNLE9BQU8sY0FBYztJQUQzQjtRQUVFLGFBQVEsR0FBRyxJQUFJLENBQUM7UUFDaEIsVUFBSyxHQUFHLEdBQUcsQ0FBQztRQUNaLGFBQVEsR0FBdUIsUUFBUSxDQUFDO0tBQ3pDOzs7WUFMQSxVQUFVLFNBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDOzs7OztJQUU5QixrQ0FBZ0I7O0lBQ2hCLCtCQUFZOztJQUNaLGtDQUF3QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogSW50ZXJmYWNlIHVzZWQgdG8gdHlwZSBhbGwgdG9hc3QgY29uZmlnIG9wdGlvbnMuIFNlZSBgTmdiVG9hc3RDb25maWdgLlxuICpcbiAqIEBzaW5jZSA1LjAuMFxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5nYlRvYXN0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBTcGVjaWZ5IGlmIHRoZSB0b2FzdCBjb21wb25lbnQgc2hvdWxkIGVtaXQgdGhlIGBoaWRlKClgIG91dHB1dFxuICAgKiBhZnRlciBhIGNlcnRhaW4gYGRlbGF5YCBpbiBtcy5cbiAgICovXG4gIGF1dG9oaWRlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRGVsYXkgaW4gbXMgYWZ0ZXIgd2hpY2ggdGhlIGBoaWRlKClgIG91dHB1dCBzaG91bGQgYmUgZW1pdHRlZC5cbiAgICovXG4gIGRlbGF5PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUeXBlIG9mIGFyaWEtbGl2ZSBhdHRyaWJ1dGUgdG8gYmUgdXNlZC5cbiAgICpcbiAgICogQ291bGQgYmUgb25lIG9mIHRoZXNlIDIgdmFsdWVzIChhcyBzdHJpbmcpOlxuICAgKiAtIGBwb2xpdGVgIChkZWZhdWx0KVxuICAgKiAtIGBhbGVydGBcbiAgICovXG4gIGFyaWFMaXZlPzogJ3BvbGl0ZScgfCAnYWxlcnQnO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gc2VydmljZSBmb3IgdGhlIE5nYlRvYXN0IGNvbXBvbmVudC4gWW91IGNhbiBpbmplY3QgdGhpcyBzZXJ2aWNlLCB0eXBpY2FsbHkgaW4geW91ciByb290IGNvbXBvbmVudCxcbiAqIGFuZCBjdXN0b21pemUgdGhlIHZhbHVlcyBvZiBpdHMgcHJvcGVydGllcyBpbiBvcmRlciB0byBwcm92aWRlIGRlZmF1bHQgdmFsdWVzIGZvciBhbGwgdGhlIHRvYXN0cyB1c2VkIGluIHRoZVxuICogYXBwbGljYXRpb24uXG4gKlxuICogQHNpbmNlIDUuMC4wXG4gKi9cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIE5nYlRvYXN0Q29uZmlnIGltcGxlbWVudHMgTmdiVG9hc3RPcHRpb25zIHtcbiAgYXV0b2hpZGUgPSB0cnVlO1xuICBkZWxheSA9IDUwMDtcbiAgYXJpYUxpdmU6ICdwb2xpdGUnIHwgJ2FsZXJ0JyA9ICdwb2xpdGUnO1xufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/toast/toast.js b/dist/sunbird-ui-components/esm2015/toast/toast.js new file mode 100644 index 0000000..0813a84 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/toast/toast.js @@ -0,0 +1,184 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Attribute, Component, ContentChild, Directive, EventEmitter, Input, Output, TemplateRef, ViewEncapsulation, } from '@angular/core'; +import { NgbToastConfig } from './toast-config'; +/** + * This directive allows the usage of HTML markup or other directives + * inside of the toast's header. + * + * \@since 5.0.0 + */ +export class NgbToastHeader { +} +NgbToastHeader.decorators = [ + { type: Directive, args: [{ selector: '[ngbToastHeader]' },] } +]; +/** + * Toasts provide feedback messages as notifications to the user. + * Goal is to mimic the push notifications available both on mobile and desktop operating systems. + * + * \@since 5.0.0 + */ +export class NgbToast { + /** + * @param {?} ariaLive + * @param {?} config + */ + constructor(ariaLive, config) { + this.ariaLive = ariaLive; + /** + * A template like `` can be + * used in the projected content to allow markup usage. + */ + this.contentHeaderTpl = null; + /** + * An event fired immediately when toast's `hide()` method has been called. + * It can only occur in 2 different scenarios: + * - `autohide` timeout fires + * - user clicks on a closing cross (×) + * + * Additionally this output is purely informative. The toast won't disappear. It's up to the user to take care of + * that. + */ + this.hideOutput = new EventEmitter(); + if (this.ariaLive == null) { + this.ariaLive = config.ariaLive; + } + this.delay = config.delay; + this.autohide = config.autohide; + } + /** + * @return {?} + */ + ngAfterContentInit() { this._init(); } + /** + * @param {?} changes + * @return {?} + */ + ngOnChanges(changes) { + if ('autohide' in changes) { + this._clearTimeout(); + this._init(); + } + } + /** + * @return {?} + */ + hide() { + this._clearTimeout(); + this.hideOutput.emit(); + } + /** + * @private + * @return {?} + */ + _init() { + if (this.autohide && !this._timeoutID) { + this._timeoutID = setTimeout((/** + * @return {?} + */ + () => this.hide()), this.delay); + } + } + /** + * @private + * @return {?} + */ + _clearTimeout() { + if (this._timeoutID) { + clearTimeout(this._timeoutID); + this._timeoutID = null; + } + } +} +NgbToast.decorators = [ + { type: Component, args: [{ + selector: 'ngb-toast', + exportAs: 'ngbToast', + encapsulation: ViewEncapsulation.None, + host: { + 'role': 'alert', + '[attr.aria-live]': 'ariaLive', + 'aria-atomic': 'true', + '[class.toast]': 'true', + '[class.show]': 'true', + '[class.autohide]': 'autohide', + }, + template: ` + + {{header}} + + +
+ + +
+
+
+ +
+ `, + styles: [".ngb-toasts{position:fixed;top:0;right:0;margin:.5em;z-index:1200}ngb-toast .toast-header .close{margin-left:auto;margin-bottom:.25rem}"] + }] } +]; +/** @nocollapse */ +NgbToast.ctorParameters = () => [ + { type: String, decorators: [{ type: Attribute, args: ['aria-live',] }] }, + { type: NgbToastConfig } +]; +NgbToast.propDecorators = { + delay: [{ type: Input }], + autohide: [{ type: Input }], + header: [{ type: Input }], + contentHeaderTpl: [{ type: ContentChild, args: [NgbToastHeader, { read: TemplateRef, static: true },] }], + hideOutput: [{ type: Output, args: ['hide',] }] +}; +if (false) { + /** + * @type {?} + * @private + */ + NgbToast.prototype._timeoutID; + /** + * Delay after which the toast will hide (ms). + * default: `500` (ms) (inherited from NgbToastConfig) + * @type {?} + */ + NgbToast.prototype.delay; + /** + * Auto hide the toast after a delay in ms. + * default: `true` (inherited from NgbToastConfig) + * @type {?} + */ + NgbToast.prototype.autohide; + /** + * Text to be used as toast's header. + * Ignored if a ContentChild template is specified at the same time. + * @type {?} + */ + NgbToast.prototype.header; + /** + * A template like `` can be + * used in the projected content to allow markup usage. + * @type {?} + */ + NgbToast.prototype.contentHeaderTpl; + /** + * An event fired immediately when toast's `hide()` method has been called. + * It can only occur in 2 different scenarios: + * - `autohide` timeout fires + * - user clicks on a closing cross (×) + * + * Additionally this output is purely informative. The toast won't disappear. It's up to the user to take care of + * that. + * @type {?} + */ + NgbToast.prototype.hideOutput; + /** @type {?} */ + NgbToast.prototype.ariaLive; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3QuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJ0b2FzdC90b2FzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFTixXQUFXLEVBQ1gsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7OztBQVM5QyxNQUFNLE9BQU8sY0FBYzs7O1lBRDFCLFNBQVMsU0FBQyxFQUFDLFFBQVEsRUFBRSxrQkFBa0IsRUFBQzs7Ozs7Ozs7QUF3Q3pDLE1BQU0sT0FBTyxRQUFROzs7OztJQXVDbkIsWUFBMkMsUUFBZ0IsRUFBRSxNQUFzQjtRQUF4QyxhQUFRLEdBQVIsUUFBUSxDQUFROzs7OztRQWJNLHFCQUFnQixHQUEyQixJQUFJLENBQUM7Ozs7Ozs7Ozs7UUFXakcsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFHcEQsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksRUFBRTtZQUN6QixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7U0FDakM7UUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO0lBQ2xDLENBQUM7Ozs7SUFFRCxrQkFBa0IsS0FBSyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDOzs7OztJQUV0QyxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxVQUFVLElBQUksT0FBTyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDZDtJQUNILENBQUM7Ozs7SUFFRCxJQUFJO1FBQ0YsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekIsQ0FBQzs7Ozs7SUFFTyxLQUFLO1FBQ1gsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNyQyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVU7OztZQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDN0Q7SUFDSCxDQUFDOzs7OztJQUVPLGFBQWE7UUFDbkIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25CLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDOUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7U0FDeEI7SUFDSCxDQUFDOzs7WUF0R0YsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxXQUFXO2dCQUNyQixRQUFRLEVBQUUsVUFBVTtnQkFDcEIsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7Z0JBQ3JDLElBQUksRUFBRTtvQkFDSixNQUFNLEVBQUUsT0FBTztvQkFDZixrQkFBa0IsRUFBRSxVQUFVO29CQUM5QixhQUFhLEVBQUUsTUFBTTtvQkFDckIsZUFBZSxFQUFFLE1BQU07b0JBQ3ZCLGNBQWMsRUFBRSxNQUFNO29CQUN0QixrQkFBa0IsRUFBRSxVQUFVO2lCQUMvQjtnQkFDRCxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7OztHQWVUOzthQUVGOzs7O3lDQXdDYyxTQUFTLFNBQUMsV0FBVztZQXZGNUIsY0FBYzs7O29CQXdEbkIsS0FBSzt1QkFNTCxLQUFLO3FCQU1MLEtBQUs7K0JBTUwsWUFBWSxTQUFDLGNBQWMsRUFBRSxFQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBQzt5QkFXOUQsTUFBTSxTQUFDLE1BQU07Ozs7Ozs7SUFuQ2QsOEJBQW1COzs7Ozs7SUFNbkIseUJBQXVCOzs7Ozs7SUFNdkIsNEJBQTJCOzs7Ozs7SUFNM0IsMEJBQXdCOzs7Ozs7SUFNeEIsb0NBQWlIOzs7Ozs7Ozs7OztJQVdqSCw4QkFBc0Q7O0lBRTFDLDRCQUErQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIEF0dHJpYnV0ZSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIERpcmVjdGl2ZSxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7TmdiVG9hc3RDb25maWd9IGZyb20gJy4vdG9hc3QtY29uZmlnJztcblxuLyoqXG4gKiBUaGlzIGRpcmVjdGl2ZSBhbGxvd3MgdGhlIHVzYWdlIG9mIEhUTUwgbWFya3VwIG9yIG90aGVyIGRpcmVjdGl2ZXNcbiAqIGluc2lkZSBvZiB0aGUgdG9hc3QncyBoZWFkZXIuXG4gKlxuICogQHNpbmNlIDUuMC4wXG4gKi9cbkBEaXJlY3RpdmUoe3NlbGVjdG9yOiAnW25nYlRvYXN0SGVhZGVyXSd9KVxuZXhwb3J0IGNsYXNzIE5nYlRvYXN0SGVhZGVyIHtcbn1cblxuLyoqXG4gKiBUb2FzdHMgcHJvdmlkZSBmZWVkYmFjayBtZXNzYWdlcyBhcyBub3RpZmljYXRpb25zIHRvIHRoZSB1c2VyLlxuICogR29hbCBpcyB0byBtaW1pYyB0aGUgcHVzaCBub3RpZmljYXRpb25zIGF2YWlsYWJsZSBib3RoIG9uIG1vYmlsZSBhbmQgZGVza3RvcCBvcGVyYXRpbmcgc3lzdGVtcy5cbiAqXG4gKiBAc2luY2UgNS4wLjBcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmdiLXRvYXN0JyxcbiAgZXhwb3J0QXM6ICduZ2JUb2FzdCcsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGhvc3Q6IHtcbiAgICAncm9sZSc6ICdhbGVydCcsXG4gICAgJ1thdHRyLmFyaWEtbGl2ZV0nOiAnYXJpYUxpdmUnLFxuICAgICdhcmlhLWF0b21pYyc6ICd0cnVlJyxcbiAgICAnW2NsYXNzLnRvYXN0XSc6ICd0cnVlJyxcbiAgICAnW2NsYXNzLnNob3ddJzogJ3RydWUnLFxuICAgICdbY2xhc3MuYXV0b2hpZGVdJzogJ2F1dG9oaWRlJyxcbiAgfSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bmctdGVtcGxhdGUgI2hlYWRlclRwbD5cbiAgICAgIDxzdHJvbmcgY2xhc3M9XCJtci1hdXRvXCI+e3toZWFkZXJ9fTwvc3Ryb25nPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cImNvbnRlbnRIZWFkZXJUcGwgfHwgaGVhZGVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidG9hc3QtaGVhZGVyXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJjb250ZW50SGVhZGVyVHBsIHx8IGhlYWRlclRwbFwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2xvc2VcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBpMThuLWFyaWEtbGFiZWw9XCJAQG5nYi50b2FzdC5jbG9zZS1hcmlhXCIgKGNsaWNrKT1cImhpZGUoKVwiPlxuICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8ZGl2IGNsYXNzPVwidG9hc3QtYm9keVwiPlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZVVybHM6IFsnLi90b2FzdC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTmdiVG9hc3QgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LFxuICAgIE9uQ2hhbmdlcyB7XG4gIHByaXZhdGUgX3RpbWVvdXRJRDtcblxuICAvKipcbiAgICogRGVsYXkgYWZ0ZXIgd2hpY2ggdGhlIHRvYXN0IHdpbGwgaGlkZSAobXMpLlxuICAgKiBkZWZhdWx0OiBgNTAwYCAobXMpIChpbmhlcml0ZWQgZnJvbSBOZ2JUb2FzdENvbmZpZylcbiAgICovXG4gIEBJbnB1dCgpIGRlbGF5OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEF1dG8gaGlkZSB0aGUgdG9hc3QgYWZ0ZXIgYSBkZWxheSBpbiBtcy5cbiAgICogZGVmYXVsdDogYHRydWVgIChpbmhlcml0ZWQgZnJvbSBOZ2JUb2FzdENvbmZpZylcbiAgICovXG4gIEBJbnB1dCgpIGF1dG9oaWRlOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUZXh0IHRvIGJlIHVzZWQgYXMgdG9hc3QncyBoZWFkZXIuXG4gICAqIElnbm9yZWQgaWYgYSBDb250ZW50Q2hpbGQgdGVtcGxhdGUgaXMgc3BlY2lmaWVkIGF0IHRoZSBzYW1lIHRpbWUuXG4gICAqL1xuICBASW5wdXQoKSBoZWFkZXI6IHN0cmluZztcblxuICAvKipcbiAgICogQSB0ZW1wbGF0ZSBsaWtlIGA8bmctdGVtcGxhdGUgbmdiVG9hc3RIZWFkZXI+PC9uZy10ZW1wbGF0ZT5gIGNhbiBiZVxuICAgKiB1c2VkIGluIHRoZSBwcm9qZWN0ZWQgY29udGVudCB0byBhbGxvdyBtYXJrdXAgdXNhZ2UuXG4gICAqL1xuICBAQ29udGVudENoaWxkKE5nYlRvYXN0SGVhZGVyLCB7cmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZX0pIGNvbnRlbnRIZWFkZXJUcGw6IFRlbXBsYXRlUmVmPGFueT58IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBBbiBldmVudCBmaXJlZCBpbW1lZGlhdGVseSB3aGVuIHRvYXN0J3MgYGhpZGUoKWAgbWV0aG9kIGhhcyBiZWVuIGNhbGxlZC5cbiAgICogSXQgY2FuIG9ubHkgb2NjdXIgaW4gMiBkaWZmZXJlbnQgc2NlbmFyaW9zOlxuICAgKiAtIGBhdXRvaGlkZWAgdGltZW91dCBmaXJlc1xuICAgKiAtIHVzZXIgY2xpY2tzIG9uIGEgY2xvc2luZyBjcm9zcyAoJnRpbWVzKVxuICAgKlxuICAgKiBBZGRpdGlvbmFsbHkgdGhpcyBvdXRwdXQgaXMgcHVyZWx5IGluZm9ybWF0aXZlLiBUaGUgdG9hc3Qgd29uJ3QgZGlzYXBwZWFyLiBJdCdzIHVwIHRvIHRoZSB1c2VyIHRvIHRha2UgY2FyZSBvZlxuICAgKiB0aGF0LlxuICAgKi9cbiAgQE91dHB1dCgnaGlkZScpIGhpZGVPdXRwdXQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoQEF0dHJpYnV0ZSgnYXJpYS1saXZlJykgcHVibGljIGFyaWFMaXZlOiBzdHJpbmcsIGNvbmZpZzogTmdiVG9hc3RDb25maWcpIHtcbiAgICBpZiAodGhpcy5hcmlhTGl2ZSA9PSBudWxsKSB7XG4gICAgICB0aGlzLmFyaWFMaXZlID0gY29uZmlnLmFyaWFMaXZlO1xuICAgIH1cbiAgICB0aGlzLmRlbGF5ID0gY29uZmlnLmRlbGF5O1xuICAgIHRoaXMuYXV0b2hpZGUgPSBjb25maWcuYXV0b2hpZGU7XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7IHRoaXMuX2luaXQoKTsgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoJ2F1dG9oaWRlJyBpbiBjaGFuZ2VzKSB7XG4gICAgICB0aGlzLl9jbGVhclRpbWVvdXQoKTtcbiAgICAgIHRoaXMuX2luaXQoKTtcbiAgICB9XG4gIH1cblxuICBoaWRlKCkge1xuICAgIHRoaXMuX2NsZWFyVGltZW91dCgpO1xuICAgIHRoaXMuaGlkZU91dHB1dC5lbWl0KCk7XG4gIH1cblxuICBwcml2YXRlIF9pbml0KCkge1xuICAgIGlmICh0aGlzLmF1dG9oaWRlICYmICF0aGlzLl90aW1lb3V0SUQpIHtcbiAgICAgIHRoaXMuX3RpbWVvdXRJRCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5oaWRlKCksIHRoaXMuZGVsYXkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NsZWFyVGltZW91dCgpIHtcbiAgICBpZiAodGhpcy5fdGltZW91dElEKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dElEKTtcbiAgICAgIHRoaXMuX3RpbWVvdXRJRCA9IG51bGw7XG4gICAgfVxuICB9XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/toast/toast.module.js b/dist/sunbird-ui-components/esm2015/toast/toast.module.js new file mode 100644 index 0000000..132e2c1 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/toast/toast.module.js @@ -0,0 +1,15 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { NgbToast, NgbToastHeader } from './toast'; +export { NgbToast, NgbToastHeader } from './toast'; +export { NgbToastConfig } from './toast-config'; +export class NgbToastModule { +} +NgbToastModule.decorators = [ + { type: NgModule, args: [{ declarations: [NgbToast, NgbToastHeader], imports: [CommonModule], exports: [NgbToast, NgbToastHeader] },] } +]; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3QubW9kdWxlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsidG9hc3QvdG9hc3QubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV2QyxPQUFPLEVBQUMsUUFBUSxFQUFFLGNBQWMsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUVqRCxPQUFPLEVBQUMsUUFBUSxFQUFFLGNBQWMsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUNqRCxPQUFPLEVBQUMsY0FBYyxFQUFrQixNQUFNLGdCQUFnQixDQUFDO0FBRy9ELE1BQU0sT0FBTyxjQUFjOzs7WUFEMUIsUUFBUSxTQUFDLEVBQUMsWUFBWSxFQUFFLENBQUMsUUFBUSxFQUFFLGNBQWMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRSxjQUFjLENBQUMsRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7TmdiVG9hc3QsIE5nYlRvYXN0SGVhZGVyfSBmcm9tICcuL3RvYXN0JztcblxuZXhwb3J0IHtOZ2JUb2FzdCwgTmdiVG9hc3RIZWFkZXJ9IGZyb20gJy4vdG9hc3QnO1xuZXhwb3J0IHtOZ2JUb2FzdENvbmZpZywgTmdiVG9hc3RPcHRpb25zfSBmcm9tICcuL3RvYXN0LWNvbmZpZyc7XG5cbkBOZ01vZHVsZSh7ZGVjbGFyYXRpb25zOiBbTmdiVG9hc3QsIE5nYlRvYXN0SGVhZGVyXSwgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sIGV4cG9ydHM6IFtOZ2JUb2FzdCwgTmdiVG9hc3RIZWFkZXJdfSlcbmV4cG9ydCBjbGFzcyBOZ2JUb2FzdE1vZHVsZSB7XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/tooltip/tooltip-config.js b/dist/sunbird-ui-components/esm2015/tooltip/tooltip-config.js new file mode 100644 index 0000000..3de5fbe --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/tooltip/tooltip-config.js @@ -0,0 +1,45 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Injectable } from '@angular/core'; +import * as i0 from "@angular/core"; +/** + * A configuration service for the [`NgbTooltip`](#/components/tooltip/api#NgbTooltip) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the tooltips used in the application. + */ +export class NgbTooltipConfig { + constructor() { + this.autoClose = true; + this.placement = 'auto'; + this.triggers = 'hover focus'; + this.disableTooltip = false; + this.openDelay = 0; + this.closeDelay = 0; + } +} +NgbTooltipConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } +]; +/** @nocollapse */ NgbTooltipConfig.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function NgbTooltipConfig_Factory() { return new NgbTooltipConfig(); }, token: NgbTooltipConfig, providedIn: "root" }); +if (false) { + /** @type {?} */ + NgbTooltipConfig.prototype.autoClose; + /** @type {?} */ + NgbTooltipConfig.prototype.placement; + /** @type {?} */ + NgbTooltipConfig.prototype.triggers; + /** @type {?} */ + NgbTooltipConfig.prototype.container; + /** @type {?} */ + NgbTooltipConfig.prototype.disableTooltip; + /** @type {?} */ + NgbTooltipConfig.prototype.tooltipClass; + /** @type {?} */ + NgbTooltipConfig.prototype.openDelay; + /** @type {?} */ + NgbTooltipConfig.prototype.closeDelay; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC1jb25maWcuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJ0b29sdGlwL3Rvb2x0aXAtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQVV6QyxNQUFNLE9BQU8sZ0JBQWdCO0lBRDdCO1FBRUUsY0FBUyxHQUFtQyxJQUFJLENBQUM7UUFDakQsY0FBUyxHQUFtQixNQUFNLENBQUM7UUFDbkMsYUFBUSxHQUFHLGFBQWEsQ0FBQztRQUV6QixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUV2QixjQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsZUFBVSxHQUFHLENBQUMsQ0FBQztLQUNoQjs7O1lBVkEsVUFBVSxTQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQzs7Ozs7SUFFOUIscUNBQWlEOztJQUNqRCxxQ0FBbUM7O0lBQ25DLG9DQUF5Qjs7SUFDekIscUNBQWtCOztJQUNsQiwwQ0FBdUI7O0lBQ3ZCLHdDQUFxQjs7SUFDckIscUNBQWM7O0lBQ2Qsc0NBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtQbGFjZW1lbnRBcnJheX0gZnJvbSAnLi4vdXRpbC9wb3NpdGlvbmluZyc7XG5cbi8qKlxuICogQSBjb25maWd1cmF0aW9uIHNlcnZpY2UgZm9yIHRoZSBbYE5nYlRvb2x0aXBgXSgjL2NvbXBvbmVudHMvdG9vbHRpcC9hcGkjTmdiVG9vbHRpcCkgY29tcG9uZW50LlxuICpcbiAqIFlvdSBjYW4gaW5qZWN0IHRoaXMgc2VydmljZSwgdHlwaWNhbGx5IGluIHlvdXIgcm9vdCBjb21wb25lbnQsIGFuZCBjdXN0b21pemUgdGhlIHZhbHVlcyBvZiBpdHMgcHJvcGVydGllcyBpblxuICogb3JkZXIgdG8gcHJvdmlkZSBkZWZhdWx0IHZhbHVlcyBmb3IgYWxsIHRoZSB0b29sdGlwcyB1c2VkIGluIHRoZSBhcHBsaWNhdGlvbi5cbiAqL1xuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgTmdiVG9vbHRpcENvbmZpZyB7XG4gIGF1dG9DbG9zZTogYm9vbGVhbiB8ICdpbnNpZGUnIHwgJ291dHNpZGUnID0gdHJ1ZTtcbiAgcGxhY2VtZW50OiBQbGFjZW1lbnRBcnJheSA9ICdhdXRvJztcbiAgdHJpZ2dlcnMgPSAnaG92ZXIgZm9jdXMnO1xuICBjb250YWluZXI6IHN0cmluZztcbiAgZGlzYWJsZVRvb2x0aXAgPSBmYWxzZTtcbiAgdG9vbHRpcENsYXNzOiBzdHJpbmc7XG4gIG9wZW5EZWxheSA9IDA7XG4gIGNsb3NlRGVsYXkgPSAwO1xufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/tooltip/tooltip.js b/dist/sunbird-ui-components/esm2015/tooltip/tooltip.js new file mode 100644 index 0000000..6ad3de7 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/tooltip/tooltip.js @@ -0,0 +1,362 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Component, Directive, Input, Output, EventEmitter, ChangeDetectionStrategy, Inject, Injector, Renderer2, ElementRef, ViewContainerRef, ComponentFactoryResolver, NgZone, ViewEncapsulation, ChangeDetectorRef, ApplicationRef } from '@angular/core'; +import { DOCUMENT } from '@angular/common'; +import { listenToTriggers } from '../util/triggers'; +import { ngbAutoClose } from '../util/autoclose'; +import { positionElements } from '../util/positioning'; +import { PopupService } from '../util/popup'; +import { NgbTooltipConfig } from './tooltip-config'; +/** @type {?} */ +let nextId = 0; +export class NgbTooltipWindow { +} +NgbTooltipWindow.decorators = [ + { type: Component, args: [{ + selector: 'ngb-tooltip-window', + changeDetection: ChangeDetectionStrategy.OnPush, + encapsulation: ViewEncapsulation.None, + host: { '[class]': '"tooltip show" + (tooltipClass ? " " + tooltipClass : "")', 'role': 'tooltip', '[id]': 'id' }, + template: `
`, + styles: ["ngb-tooltip-window.bs-tooltip-bottom .arrow,ngb-tooltip-window.bs-tooltip-top .arrow{left:calc(50% - .4rem)}ngb-tooltip-window.bs-tooltip-bottom-left .arrow,ngb-tooltip-window.bs-tooltip-top-left .arrow{left:1em}ngb-tooltip-window.bs-tooltip-bottom-right .arrow,ngb-tooltip-window.bs-tooltip-top-right .arrow{left:auto;right:.8rem}ngb-tooltip-window.bs-tooltip-left .arrow,ngb-tooltip-window.bs-tooltip-right .arrow{top:calc(50% - .4rem)}ngb-tooltip-window.bs-tooltip-left-top .arrow,ngb-tooltip-window.bs-tooltip-right-top .arrow{top:.4rem}ngb-tooltip-window.bs-tooltip-left-bottom .arrow,ngb-tooltip-window.bs-tooltip-right-bottom .arrow{top:auto;bottom:.4rem}"] + }] } +]; +NgbTooltipWindow.propDecorators = { + id: [{ type: Input }], + tooltipClass: [{ type: Input }] +}; +if (false) { + /** @type {?} */ + NgbTooltipWindow.prototype.id; + /** @type {?} */ + NgbTooltipWindow.prototype.tooltipClass; +} +/** + * A lightweight and extensible directive for fancy tooltip creation. + */ +export class NgbTooltip { + /** + * @param {?} _elementRef + * @param {?} _renderer + * @param {?} injector + * @param {?} componentFactoryResolver + * @param {?} viewContainerRef + * @param {?} config + * @param {?} _ngZone + * @param {?} _document + * @param {?} _changeDetector + * @param {?} _applicationRef + */ + constructor(_elementRef, _renderer, injector, componentFactoryResolver, viewContainerRef, config, _ngZone, _document, _changeDetector, _applicationRef) { + this._elementRef = _elementRef; + this._renderer = _renderer; + this._ngZone = _ngZone; + this._document = _document; + this._changeDetector = _changeDetector; + this._applicationRef = _applicationRef; + /** + * An event emitted when the tooltip is shown. Contains no payload. + */ + this.shown = new EventEmitter(); + /** + * An event emitted when the popover is hidden. Contains no payload. + */ + this.hidden = new EventEmitter(); + this._ngbTooltipWindowId = `ngb-tooltip-${nextId++}`; + this.autoClose = config.autoClose; + this.placement = config.placement; + this.triggers = config.triggers; + this.container = config.container; + this.disableTooltip = config.disableTooltip; + this.tooltipClass = config.tooltipClass; + this.openDelay = config.openDelay; + this.closeDelay = config.closeDelay; + this._popupService = new PopupService(NgbTooltipWindow, injector, viewContainerRef, _renderer, componentFactoryResolver, _applicationRef); + this._zoneSubscription = _ngZone.onStable.subscribe((/** + * @return {?} + */ + () => { + if (this._windowRef) { + positionElements(this._elementRef.nativeElement, this._windowRef.location.nativeElement, this.placement, this.container === 'body', 'bs-tooltip'); + } + })); + } + /** + * The string content or a `TemplateRef` for the content to be displayed in the tooltip. + * + * If the content if falsy, the tooltip won't open. + * @param {?} value + * @return {?} + */ + set ngbTooltip(value) { + this._ngbTooltip = value; + if (!value && this._windowRef) { + this.close(); + } + } + /** + * @return {?} + */ + get ngbTooltip() { return this._ngbTooltip; } + /** + * Opens the tooltip. + * + * This is considered to be a "manual" triggering. + * The `context` is an optional value to be injected into the tooltip template when it is created. + * @param {?=} context + * @return {?} + */ + open(context) { + if (!this._windowRef && this._ngbTooltip && !this.disableTooltip) { + this._windowRef = this._popupService.open(this._ngbTooltip, context); + this._windowRef.instance.tooltipClass = this.tooltipClass; + this._windowRef.instance.id = this._ngbTooltipWindowId; + this._renderer.setAttribute(this._elementRef.nativeElement, 'aria-describedby', this._ngbTooltipWindowId); + if (this.container === 'body') { + this._document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement); + } + // We need to detect changes, because we don't know where .open() might be called from. + // Ex. opening tooltip from one of lifecycle hooks that run after the CD + // (say from ngAfterViewInit) will result in 'ExpressionHasChanged' exception + this._windowRef.changeDetectorRef.detectChanges(); + // We need to mark for check, because tooltip won't work inside the OnPush component. + // Ex. when we use expression like `{{ tooltip.isOpen() : 'opened' : 'closed' }}` + // inside the template of an OnPush component and we change the tooltip from + // open -> closed, the expression in question won't be updated unless we explicitly + // mark the parent component to be checked. + this._windowRef.changeDetectorRef.markForCheck(); + ngbAutoClose(this._ngZone, this._document, this.autoClose, (/** + * @return {?} + */ + () => this.close()), this.hidden, [this._windowRef.location.nativeElement]); + this.shown.emit(); + } + } + /** + * Closes the tooltip. + * + * This is considered to be a "manual" triggering of the tooltip. + * @return {?} + */ + close() { + if (this._windowRef != null) { + this._renderer.removeAttribute(this._elementRef.nativeElement, 'aria-describedby'); + this._popupService.close(); + this._windowRef = null; + this.hidden.emit(); + this._changeDetector.markForCheck(); + } + } + /** + * Toggles the tooltip. + * + * This is considered to be a "manual" triggering of the tooltip. + * @return {?} + */ + toggle() { + if (this._windowRef) { + this.close(); + } + else { + this.open(); + } + } + /** + * Returns `true`, if the popover is currently shown. + * @return {?} + */ + isOpen() { return this._windowRef != null; } + /** + * @return {?} + */ + ngOnInit() { + this._unregisterListenersFn = listenToTriggers(this._renderer, this._elementRef.nativeElement, this.triggers, this.isOpen.bind(this), this.open.bind(this), this.close.bind(this), +this.openDelay, +this.closeDelay); + } + /** + * @return {?} + */ + ngOnDestroy() { + this.close(); + // This check is needed as it might happen that ngOnDestroy is called before ngOnInit + // under certain conditions, see: https://github.com/ng-bootstrap/ng-bootstrap/issues/2199 + if (this._unregisterListenersFn) { + this._unregisterListenersFn(); + } + this._zoneSubscription.unsubscribe(); + } +} +NgbTooltip.decorators = [ + { type: Directive, args: [{ selector: '[ngbTooltip]', exportAs: 'ngbTooltip' },] } +]; +/** @nocollapse */ +NgbTooltip.ctorParameters = () => [ + { type: ElementRef }, + { type: Renderer2 }, + { type: Injector }, + { type: ComponentFactoryResolver }, + { type: ViewContainerRef }, + { type: NgbTooltipConfig }, + { type: NgZone }, + { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }, + { type: ChangeDetectorRef }, + { type: ApplicationRef } +]; +NgbTooltip.propDecorators = { + autoClose: [{ type: Input }], + placement: [{ type: Input }], + triggers: [{ type: Input }], + container: [{ type: Input }], + disableTooltip: [{ type: Input }], + tooltipClass: [{ type: Input }], + openDelay: [{ type: Input }], + closeDelay: [{ type: Input }], + shown: [{ type: Output }], + hidden: [{ type: Output }], + ngbTooltip: [{ type: Input }] +}; +if (false) { + /** + * Indicates whether the tooltip should be closed on `Escape` key and inside/outside clicks: + * + * * `true` - closes on both outside and inside clicks as well as `Escape` presses + * * `false` - disables the autoClose feature (NB: triggers still apply) + * * `"inside"` - closes on inside clicks as well as Escape presses + * * `"outside"` - closes on outside clicks (sometimes also achievable through triggers) + * as well as `Escape` presses + * + * \@since 3.0.0 + * @type {?} + */ + NgbTooltip.prototype.autoClose; + /** + * The preferred placement of the tooltip. + * + * Possible values are `"top"`, `"top-left"`, `"top-right"`, `"bottom"`, `"bottom-left"`, + * `"bottom-right"`, `"left"`, `"left-top"`, `"left-bottom"`, `"right"`, `"right-top"`, + * `"right-bottom"` + * + * Accepts an array of strings or a string with space separated possible values. + * + * The default order of preference is `"auto"` (same as the sequence above). + * + * Please see the [positioning overview](#/positioning) for more details. + * @type {?} + */ + NgbTooltip.prototype.placement; + /** + * Specifies events that should trigger the tooltip. + * + * Supports a space separated list of event names. + * For more details see the [triggers demo](#/components/tooltip/examples#triggers). + * @type {?} + */ + NgbTooltip.prototype.triggers; + /** + * A selector specifying the element the tooltip should be appended to. + * + * Currently only supports `"body"`. + * @type {?} + */ + NgbTooltip.prototype.container; + /** + * If `true`, tooltip is disabled and won't be displayed. + * + * \@since 1.1.0 + * @type {?} + */ + NgbTooltip.prototype.disableTooltip; + /** + * An optional class applied to the tooltip window element. + * + * \@since 3.2.0 + * @type {?} + */ + NgbTooltip.prototype.tooltipClass; + /** + * The opening delay in ms. Works only for "non-manual" opening triggers defined by the `triggers` input. + * + * \@since 4.1.0 + * @type {?} + */ + NgbTooltip.prototype.openDelay; + /** + * The closing delay in ms. Works only for "non-manual" opening triggers defined by the `triggers` input. + * + * \@since 4.1.0 + * @type {?} + */ + NgbTooltip.prototype.closeDelay; + /** + * An event emitted when the tooltip is shown. Contains no payload. + * @type {?} + */ + NgbTooltip.prototype.shown; + /** + * An event emitted when the popover is hidden. Contains no payload. + * @type {?} + */ + NgbTooltip.prototype.hidden; + /** + * @type {?} + * @private + */ + NgbTooltip.prototype._ngbTooltip; + /** + * @type {?} + * @private + */ + NgbTooltip.prototype._ngbTooltipWindowId; + /** + * @type {?} + * @private + */ + NgbTooltip.prototype._popupService; + /** + * @type {?} + * @private + */ + NgbTooltip.prototype._windowRef; + /** + * @type {?} + * @private + */ + NgbTooltip.prototype._unregisterListenersFn; + /** + * @type {?} + * @private + */ + NgbTooltip.prototype._zoneSubscription; + /** + * @type {?} + * @private + */ + NgbTooltip.prototype._elementRef; + /** + * @type {?} + * @private + */ + NgbTooltip.prototype._renderer; + /** + * @type {?} + * @private + */ + NgbTooltip.prototype._ngZone; + /** + * @type {?} + * @private + */ + NgbTooltip.prototype._document; + /** + * @type {?} + * @private + */ + NgbTooltip.prototype._changeDetector; + /** + * @type {?} + * @private + */ + NgbTooltip.prototype._applicationRef; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbInRvb2x0aXAvdG9vbHRpcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osdUJBQXVCLEVBR3ZCLE1BQU0sRUFDTixRQUFRLEVBQ1IsU0FBUyxFQUVULFVBQVUsRUFFVixnQkFBZ0IsRUFDaEIsd0JBQXdCLEVBQ3hCLE1BQU0sRUFDTixpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2pCLGNBQWMsRUFDZixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFekMsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQy9DLE9BQU8sRUFBQyxnQkFBZ0IsRUFBaUIsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGtCQUFrQixDQUFDOztJQUU5QyxNQUFNLEdBQUcsQ0FBQztBQVVkLE1BQU0sT0FBTyxnQkFBZ0I7OztZQVI1QixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLG9CQUFvQjtnQkFDOUIsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07Z0JBQy9DLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO2dCQUNyQyxJQUFJLEVBQUUsRUFBQyxTQUFTLEVBQUUsMkRBQTJELEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFDO2dCQUMvRyxRQUFRLEVBQUUscUZBQXFGOzthQUVoRzs7O2lCQUVFLEtBQUs7MkJBQ0wsS0FBSzs7OztJQUROLDhCQUFvQjs7SUFDcEIsd0NBQThCOzs7OztBQU9oQyxNQUFNLE9BQU8sVUFBVTs7Ozs7Ozs7Ozs7OztJQXdGckIsWUFDWSxXQUFvQyxFQUFVLFNBQW9CLEVBQUUsUUFBa0IsRUFDOUYsd0JBQWtELEVBQUUsZ0JBQWtDLEVBQUUsTUFBd0IsRUFDeEcsT0FBZSxFQUE0QixTQUFjLEVBQVUsZUFBa0MsRUFDckcsZUFBK0I7UUFIL0IsZ0JBQVcsR0FBWCxXQUFXLENBQXlCO1FBQVUsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUVsRSxZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQTRCLGNBQVMsR0FBVCxTQUFTLENBQUs7UUFBVSxvQkFBZSxHQUFmLGVBQWUsQ0FBbUI7UUFDckcsb0JBQWUsR0FBZixlQUFlLENBQWdCOzs7O1FBakJqQyxVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQzs7OztRQUkzQixXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUc5Qix3QkFBbUIsR0FBRyxlQUFlLE1BQU0sRUFBRSxFQUFFLENBQUM7UUFXdEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQztRQUNsQyxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDaEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQztRQUM1QyxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUM7UUFDeEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztRQUNwQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksWUFBWSxDQUNqQyxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLHdCQUF3QixFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBRXhHLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVM7OztRQUFDLEdBQUcsRUFBRTtZQUN2RCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ25CLGdCQUFnQixDQUNaLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUN0RixJQUFJLENBQUMsU0FBUyxLQUFLLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQzthQUM5QztRQUNILENBQUMsRUFBQyxDQUFDO0lBQ0wsQ0FBQzs7Ozs7Ozs7SUFPRCxJQUNJLFVBQVUsQ0FBQyxLQUFnQztRQUM3QyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDN0IsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ2Q7SUFDSCxDQUFDOzs7O0lBRUQsSUFBSSxVQUFVLEtBQUssT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQzs7Ozs7Ozs7O0lBUTdDLElBQUksQ0FBQyxPQUFhO1FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ2hFLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNyRSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUMxRCxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1lBRXZELElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLGtCQUFrQixFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBRTFHLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxNQUFNLEVBQUU7Z0JBQzdCLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDbEc7WUFFRCx1RkFBdUY7WUFDdkYsd0VBQXdFO1lBQ3hFLDZFQUE2RTtZQUM3RSxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO1lBRWxELHFGQUFxRjtZQUNyRixpRkFBaUY7WUFDakYsNEVBQTRFO1lBQzVFLG1GQUFtRjtZQUNuRiwyQ0FBMkM7WUFDM0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUVqRCxZQUFZLENBQ1IsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTOzs7WUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUUsSUFBSSxDQUFDLE1BQU0sRUFDN0UsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBRTlDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDbkI7SUFDSCxDQUFDOzs7Ozs7O0lBT0QsS0FBSztRQUNILElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLEVBQUU7WUFDM0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztZQUNuRixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUNyQztJQUNILENBQUM7Ozs7Ozs7SUFPRCxNQUFNO1FBQ0osSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25CLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNkO2FBQU07WUFDTCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDYjtJQUNILENBQUM7Ozs7O0lBS0QsTUFBTSxLQUFjLE9BQU8sSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDOzs7O0lBRXJELFFBQVE7UUFDTixJQUFJLENBQUMsc0JBQXNCLEdBQUcsZ0JBQWdCLENBQzFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFDM0csSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7Ozs7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2IscUZBQXFGO1FBQ3JGLDBGQUEwRjtRQUMxRixJQUFJLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtZQUMvQixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztTQUMvQjtRQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN2QyxDQUFDOzs7WUF0TkYsU0FBUyxTQUFDLEVBQUMsUUFBUSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFDOzs7O1lBcEMzRCxVQUFVO1lBRlYsU0FBUztZQURULFFBQVE7WUFNUix3QkFBd0I7WUFEeEIsZ0JBQWdCO1lBY1YsZ0JBQWdCO1lBWnRCLE1BQU07NENBNEh3QixNQUFNLFNBQUMsUUFBUTtZQTFIN0MsaUJBQWlCO1lBQ2pCLGNBQWM7Ozt3QkEwQ2IsS0FBSzt3QkFlTCxLQUFLO3VCQVFMLEtBQUs7d0JBT0wsS0FBSzs2QkFPTCxLQUFLOzJCQU9MLEtBQUs7d0JBT0wsS0FBSzt5QkFPTCxLQUFLO29CQUtMLE1BQU07cUJBSU4sTUFBTTt5QkF1Q04sS0FBSzs7Ozs7Ozs7Ozs7Ozs7O0lBMUdOLCtCQUFtRDs7Ozs7Ozs7Ozs7Ozs7O0lBZW5ELCtCQUFtQzs7Ozs7Ozs7SUFRbkMsOEJBQTBCOzs7Ozs7O0lBTzFCLCtCQUEyQjs7Ozs7OztJQU8zQixvQ0FBaUM7Ozs7Ozs7SUFPakMsa0NBQThCOzs7Ozs7O0lBTzlCLCtCQUEyQjs7Ozs7OztJQU8zQixnQ0FBNEI7Ozs7O0lBSzVCLDJCQUFxQzs7Ozs7SUFJckMsNEJBQXNDOzs7OztJQUV0QyxpQ0FBK0M7Ozs7O0lBQy9DLHlDQUF3RDs7Ozs7SUFDeEQsbUNBQXNEOzs7OztJQUN0RCxnQ0FBbUQ7Ozs7O0lBQ25ELDRDQUErQjs7Ozs7SUFDL0IsdUNBQStCOzs7OztJQUczQixpQ0FBNEM7Ozs7O0lBQUUsK0JBQTRCOzs7OztJQUUxRSw2QkFBdUI7Ozs7O0lBQUUsK0JBQXdDOzs7OztJQUFFLHFDQUEwQzs7Ozs7SUFDN0cscUNBQXVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBEaXJlY3RpdmUsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIE9uSW5pdCxcbiAgT25EZXN0cm95LFxuICBJbmplY3QsXG4gIEluamVjdG9yLFxuICBSZW5kZXJlcjIsXG4gIENvbXBvbmVudFJlZixcbiAgRWxlbWVudFJlZixcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgTmdab25lLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIEFwcGxpY2F0aW9uUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtET0NVTUVOVH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHtsaXN0ZW5Ub1RyaWdnZXJzfSBmcm9tICcuLi91dGlsL3RyaWdnZXJzJztcbmltcG9ydCB7bmdiQXV0b0Nsb3NlfSBmcm9tICcuLi91dGlsL2F1dG9jbG9zZSc7XG5pbXBvcnQge3Bvc2l0aW9uRWxlbWVudHMsIFBsYWNlbWVudEFycmF5fSBmcm9tICcuLi91dGlsL3Bvc2l0aW9uaW5nJztcbmltcG9ydCB7UG9wdXBTZXJ2aWNlfSBmcm9tICcuLi91dGlsL3BvcHVwJztcblxuaW1wb3J0IHtOZ2JUb29sdGlwQ29uZmlnfSBmcm9tICcuL3Rvb2x0aXAtY29uZmlnJztcblxubGV0IG5leHRJZCA9IDA7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25nYi10b29sdGlwLXdpbmRvdycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBob3N0OiB7J1tjbGFzc10nOiAnXCJ0b29sdGlwIHNob3dcIiArICh0b29sdGlwQ2xhc3MgPyBcIiBcIiArIHRvb2x0aXBDbGFzcyA6IFwiXCIpJywgJ3JvbGUnOiAndG9vbHRpcCcsICdbaWRdJzogJ2lkJ30sXG4gIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cImFycm93XCI+PC9kaXY+PGRpdiBjbGFzcz1cInRvb2x0aXAtaW5uZXJcIj48bmctY29udGVudD48L25nLWNvbnRlbnQ+PC9kaXY+YCxcbiAgc3R5bGVVcmxzOiBbJy4vdG9vbHRpcC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTmdiVG9vbHRpcFdpbmRvdyB7XG4gIEBJbnB1dCgpIGlkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRvb2x0aXBDbGFzczogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgbGlnaHR3ZWlnaHQgYW5kIGV4dGVuc2libGUgZGlyZWN0aXZlIGZvciBmYW5jeSB0b29sdGlwIGNyZWF0aW9uLlxuICovXG5ARGlyZWN0aXZlKHtzZWxlY3RvcjogJ1tuZ2JUb29sdGlwXScsIGV4cG9ydEFzOiAnbmdiVG9vbHRpcCd9KVxuZXhwb3J0IGNsYXNzIE5nYlRvb2x0aXAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdG9vbHRpcCBzaG91bGQgYmUgY2xvc2VkIG9uIGBFc2NhcGVgIGtleSBhbmQgaW5zaWRlL291dHNpZGUgY2xpY2tzOlxuICAgKlxuICAgKiAqIGB0cnVlYCAtIGNsb3NlcyBvbiBib3RoIG91dHNpZGUgYW5kIGluc2lkZSBjbGlja3MgYXMgd2VsbCBhcyBgRXNjYXBlYCBwcmVzc2VzXG4gICAqICogYGZhbHNlYCAtIGRpc2FibGVzIHRoZSBhdXRvQ2xvc2UgZmVhdHVyZSAoTkI6IHRyaWdnZXJzIHN0aWxsIGFwcGx5KVxuICAgKiAqIGBcImluc2lkZVwiYCAtIGNsb3NlcyBvbiBpbnNpZGUgY2xpY2tzIGFzIHdlbGwgYXMgRXNjYXBlIHByZXNzZXNcbiAgICogKiBgXCJvdXRzaWRlXCJgIC0gY2xvc2VzIG9uIG91dHNpZGUgY2xpY2tzIChzb21ldGltZXMgYWxzbyBhY2hpZXZhYmxlIHRocm91Z2ggdHJpZ2dlcnMpXG4gICAqIGFzIHdlbGwgYXMgYEVzY2FwZWAgcHJlc3Nlc1xuICAgKlxuICAgKiBAc2luY2UgMy4wLjBcbiAgICovXG4gIEBJbnB1dCgpIGF1dG9DbG9zZTogYm9vbGVhbiB8ICdpbnNpZGUnIHwgJ291dHNpZGUnO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJlZmVycmVkIHBsYWNlbWVudCBvZiB0aGUgdG9vbHRpcC5cbiAgICpcbiAgICogUG9zc2libGUgdmFsdWVzIGFyZSBgXCJ0b3BcImAsIGBcInRvcC1sZWZ0XCJgLCBgXCJ0b3AtcmlnaHRcImAsIGBcImJvdHRvbVwiYCwgYFwiYm90dG9tLWxlZnRcImAsXG4gICAqIGBcImJvdHRvbS1yaWdodFwiYCwgYFwibGVmdFwiYCwgYFwibGVmdC10b3BcImAsIGBcImxlZnQtYm90dG9tXCJgLCBgXCJyaWdodFwiYCwgYFwicmlnaHQtdG9wXCJgLFxuICAgKiBgXCJyaWdodC1ib3R0b21cImBcbiAgICpcbiAgICogQWNjZXB0cyBhbiBhcnJheSBvZiBzdHJpbmdzIG9yIGEgc3RyaW5nIHdpdGggc3BhY2Ugc2VwYXJhdGVkIHBvc3NpYmxlIHZhbHVlcy5cbiAgICpcbiAgICogVGhlIGRlZmF1bHQgb3JkZXIgb2YgcHJlZmVyZW5jZSBpcyBgXCJhdXRvXCJgIChzYW1lIGFzIHRoZSBzZXF1ZW5jZSBhYm92ZSkuXG4gICAqXG4gICAqIFBsZWFzZSBzZWUgdGhlIFtwb3NpdGlvbmluZyBvdmVydmlld10oIy9wb3NpdGlvbmluZykgZm9yIG1vcmUgZGV0YWlscy5cbiAgICovXG4gIEBJbnB1dCgpIHBsYWNlbWVudDogUGxhY2VtZW50QXJyYXk7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyBldmVudHMgdGhhdCBzaG91bGQgdHJpZ2dlciB0aGUgdG9vbHRpcC5cbiAgICpcbiAgICogU3VwcG9ydHMgYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBldmVudCBuYW1lcy5cbiAgICogRm9yIG1vcmUgZGV0YWlscyBzZWUgdGhlIFt0cmlnZ2VycyBkZW1vXSgjL2NvbXBvbmVudHMvdG9vbHRpcC9leGFtcGxlcyN0cmlnZ2VycykuXG4gICAqL1xuICBASW5wdXQoKSB0cmlnZ2Vyczogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHNlbGVjdG9yIHNwZWNpZnlpbmcgdGhlIGVsZW1lbnQgdGhlIHRvb2x0aXAgc2hvdWxkIGJlIGFwcGVuZGVkIHRvLlxuICAgKlxuICAgKiBDdXJyZW50bHkgb25seSBzdXBwb3J0cyBgXCJib2R5XCJgLlxuICAgKi9cbiAgQElucHV0KCkgY29udGFpbmVyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdG9vbHRpcCBpcyBkaXNhYmxlZCBhbmQgd29uJ3QgYmUgZGlzcGxheWVkLlxuICAgKlxuICAgKiBAc2luY2UgMS4xLjBcbiAgICovXG4gIEBJbnB1dCgpIGRpc2FibGVUb29sdGlwOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCBjbGFzcyBhcHBsaWVkIHRvIHRoZSB0b29sdGlwIHdpbmRvdyBlbGVtZW50LlxuICAgKlxuICAgKiBAc2luY2UgMy4yLjBcbiAgICovXG4gIEBJbnB1dCgpIHRvb2x0aXBDbGFzczogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgb3BlbmluZyBkZWxheSBpbiBtcy4gV29ya3Mgb25seSBmb3IgXCJub24tbWFudWFsXCIgb3BlbmluZyB0cmlnZ2VycyBkZWZpbmVkIGJ5IHRoZSBgdHJpZ2dlcnNgIGlucHV0LlxuICAgKlxuICAgKiBAc2luY2UgNC4xLjBcbiAgICovXG4gIEBJbnB1dCgpIG9wZW5EZWxheTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgY2xvc2luZyBkZWxheSBpbiBtcy4gV29ya3Mgb25seSBmb3IgXCJub24tbWFudWFsXCIgb3BlbmluZyB0cmlnZ2VycyBkZWZpbmVkIGJ5IHRoZSBgdHJpZ2dlcnNgIGlucHV0LlxuICAgKlxuICAgKiBAc2luY2UgNC4xLjBcbiAgICovXG4gIEBJbnB1dCgpIGNsb3NlRGVsYXk6IG51bWJlcjtcblxuICAvKipcbiAgICogQW4gZXZlbnQgZW1pdHRlZCB3aGVuIHRoZSB0b29sdGlwIGlzIHNob3duLiBDb250YWlucyBubyBwYXlsb2FkLlxuICAgKi9cbiAgQE91dHB1dCgpIHNob3duID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAvKipcbiAgICogQW4gZXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBwb3BvdmVyIGlzIGhpZGRlbi4gQ29udGFpbnMgbm8gcGF5bG9hZC5cbiAgICovXG4gIEBPdXRwdXQoKSBoaWRkZW4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHJpdmF0ZSBfbmdiVG9vbHRpcDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PjtcbiAgcHJpdmF0ZSBfbmdiVG9vbHRpcFdpbmRvd0lkID0gYG5nYi10b29sdGlwLSR7bmV4dElkKyt9YDtcbiAgcHJpdmF0ZSBfcG9wdXBTZXJ2aWNlOiBQb3B1cFNlcnZpY2U8TmdiVG9vbHRpcFdpbmRvdz47XG4gIHByaXZhdGUgX3dpbmRvd1JlZjogQ29tcG9uZW50UmVmPE5nYlRvb2x0aXBXaW5kb3c+O1xuICBwcml2YXRlIF91bnJlZ2lzdGVyTGlzdGVuZXJzRm47XG4gIHByaXZhdGUgX3pvbmVTdWJzY3JpcHRpb246IGFueTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LCBwcml2YXRlIF9yZW5kZXJlcjogUmVuZGVyZXIyLCBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZiwgY29uZmlnOiBOZ2JUb29sdGlwQ29uZmlnLFxuICAgICAgcHJpdmF0ZSBfbmdab25lOiBOZ1pvbmUsIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgX2RvY3VtZW50OiBhbnksIHByaXZhdGUgX2NoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgIHByaXZhdGUgX2FwcGxpY2F0aW9uUmVmOiBBcHBsaWNhdGlvblJlZikge1xuICAgIHRoaXMuYXV0b0Nsb3NlID0gY29uZmlnLmF1dG9DbG9zZTtcbiAgICB0aGlzLnBsYWNlbWVudCA9IGNvbmZpZy5wbGFjZW1lbnQ7XG4gICAgdGhpcy50cmlnZ2VycyA9IGNvbmZpZy50cmlnZ2VycztcbiAgICB0aGlzLmNvbnRhaW5lciA9IGNvbmZpZy5jb250YWluZXI7XG4gICAgdGhpcy5kaXNhYmxlVG9vbHRpcCA9IGNvbmZpZy5kaXNhYmxlVG9vbHRpcDtcbiAgICB0aGlzLnRvb2x0aXBDbGFzcyA9IGNvbmZpZy50b29sdGlwQ2xhc3M7XG4gICAgdGhpcy5vcGVuRGVsYXkgPSBjb25maWcub3BlbkRlbGF5O1xuICAgIHRoaXMuY2xvc2VEZWxheSA9IGNvbmZpZy5jbG9zZURlbGF5O1xuICAgIHRoaXMuX3BvcHVwU2VydmljZSA9IG5ldyBQb3B1cFNlcnZpY2U8TmdiVG9vbHRpcFdpbmRvdz4oXG4gICAgICAgIE5nYlRvb2x0aXBXaW5kb3csIGluamVjdG9yLCB2aWV3Q29udGFpbmVyUmVmLCBfcmVuZGVyZXIsIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgX2FwcGxpY2F0aW9uUmVmKTtcblxuICAgIHRoaXMuX3pvbmVTdWJzY3JpcHRpb24gPSBfbmdab25lLm9uU3RhYmxlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fd2luZG93UmVmKSB7XG4gICAgICAgIHBvc2l0aW9uRWxlbWVudHMoXG4gICAgICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHRoaXMuX3dpbmRvd1JlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LCB0aGlzLnBsYWNlbWVudCxcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyID09PSAnYm9keScsICdicy10b29sdGlwJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHN0cmluZyBjb250ZW50IG9yIGEgYFRlbXBsYXRlUmVmYCBmb3IgdGhlIGNvbnRlbnQgdG8gYmUgZGlzcGxheWVkIGluIHRoZSB0b29sdGlwLlxuICAgKlxuICAgKiBJZiB0aGUgY29udGVudCBpZiBmYWxzeSwgdGhlIHRvb2x0aXAgd29uJ3Qgb3Blbi5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBuZ2JUb29sdGlwKHZhbHVlOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+KSB7XG4gICAgdGhpcy5fbmdiVG9vbHRpcCA9IHZhbHVlO1xuICAgIGlmICghdmFsdWUgJiYgdGhpcy5fd2luZG93UmVmKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IG5nYlRvb2x0aXAoKSB7IHJldHVybiB0aGlzLl9uZ2JUb29sdGlwOyB9XG5cbiAgLyoqXG4gICAqIE9wZW5zIHRoZSB0b29sdGlwLlxuICAgKlxuICAgKiBUaGlzIGlzIGNvbnNpZGVyZWQgdG8gYmUgYSBcIm1hbnVhbFwiIHRyaWdnZXJpbmcuXG4gICAqIFRoZSBgY29udGV4dGAgaXMgYW4gb3B0aW9uYWwgdmFsdWUgdG8gYmUgaW5qZWN0ZWQgaW50byB0aGUgdG9vbHRpcCB0ZW1wbGF0ZSB3aGVuIGl0IGlzIGNyZWF0ZWQuXG4gICAqL1xuICBvcGVuKGNvbnRleHQ/OiBhbnkpIHtcbiAgICBpZiAoIXRoaXMuX3dpbmRvd1JlZiAmJiB0aGlzLl9uZ2JUb29sdGlwICYmICF0aGlzLmRpc2FibGVUb29sdGlwKSB7XG4gICAgICB0aGlzLl93aW5kb3dSZWYgPSB0aGlzLl9wb3B1cFNlcnZpY2Uub3Blbih0aGlzLl9uZ2JUb29sdGlwLCBjb250ZXh0KTtcbiAgICAgIHRoaXMuX3dpbmRvd1JlZi5pbnN0YW5jZS50b29sdGlwQ2xhc3MgPSB0aGlzLnRvb2x0aXBDbGFzcztcbiAgICAgIHRoaXMuX3dpbmRvd1JlZi5pbnN0YW5jZS5pZCA9IHRoaXMuX25nYlRvb2x0aXBXaW5kb3dJZDtcblxuICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2FyaWEtZGVzY3JpYmVkYnknLCB0aGlzLl9uZ2JUb29sdGlwV2luZG93SWQpO1xuXG4gICAgICBpZiAodGhpcy5jb250YWluZXIgPT09ICdib2R5Jykge1xuICAgICAgICB0aGlzLl9kb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuY29udGFpbmVyKS5hcHBlbmRDaGlsZCh0aGlzLl93aW5kb3dSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFdlIG5lZWQgdG8gZGV0ZWN0IGNoYW5nZXMsIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyB3aGVyZSAub3BlbigpIG1pZ2h0IGJlIGNhbGxlZCBmcm9tLlxuICAgICAgLy8gRXguIG9wZW5pbmcgdG9vbHRpcCBmcm9tIG9uZSBvZiBsaWZlY3ljbGUgaG9va3MgdGhhdCBydW4gYWZ0ZXIgdGhlIENEXG4gICAgICAvLyAoc2F5IGZyb20gbmdBZnRlclZpZXdJbml0KSB3aWxsIHJlc3VsdCBpbiAnRXhwcmVzc2lvbkhhc0NoYW5nZWQnIGV4Y2VwdGlvblxuICAgICAgdGhpcy5fd2luZG93UmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgLy8gV2UgbmVlZCB0byBtYXJrIGZvciBjaGVjaywgYmVjYXVzZSB0b29sdGlwIHdvbid0IHdvcmsgaW5zaWRlIHRoZSBPblB1c2ggY29tcG9uZW50LlxuICAgICAgLy8gRXguIHdoZW4gd2UgdXNlIGV4cHJlc3Npb24gbGlrZSBge3sgdG9vbHRpcC5pc09wZW4oKSA6ICdvcGVuZWQnIDogJ2Nsb3NlZCcgfX1gXG4gICAgICAvLyBpbnNpZGUgdGhlIHRlbXBsYXRlIG9mIGFuIE9uUHVzaCBjb21wb25lbnQgYW5kIHdlIGNoYW5nZSB0aGUgdG9vbHRpcCBmcm9tXG4gICAgICAvLyBvcGVuIC0+IGNsb3NlZCwgdGhlIGV4cHJlc3Npb24gaW4gcXVlc3Rpb24gd29uJ3QgYmUgdXBkYXRlZCB1bmxlc3Mgd2UgZXhwbGljaXRseVxuICAgICAgLy8gbWFyayB0aGUgcGFyZW50IGNvbXBvbmVudCB0byBiZSBjaGVja2VkLlxuICAgICAgdGhpcy5fd2luZG93UmVmLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgICBuZ2JBdXRvQ2xvc2UoXG4gICAgICAgICAgdGhpcy5fbmdab25lLCB0aGlzLl9kb2N1bWVudCwgdGhpcy5hdXRvQ2xvc2UsICgpID0+IHRoaXMuY2xvc2UoKSwgdGhpcy5oaWRkZW4sXG4gICAgICAgICAgW3RoaXMuX3dpbmRvd1JlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50XSk7XG5cbiAgICAgIHRoaXMuc2hvd24uZW1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIHRvb2x0aXAuXG4gICAqXG4gICAqIFRoaXMgaXMgY29uc2lkZXJlZCB0byBiZSBhIFwibWFudWFsXCIgdHJpZ2dlcmluZyBvZiB0aGUgdG9vbHRpcC5cbiAgICovXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl93aW5kb3dSZWYgIT0gbnVsbCkge1xuICAgICAgdGhpcy5fcmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2FyaWEtZGVzY3JpYmVkYnknKTtcbiAgICAgIHRoaXMuX3BvcHVwU2VydmljZS5jbG9zZSgpO1xuICAgICAgdGhpcy5fd2luZG93UmVmID0gbnVsbDtcbiAgICAgIHRoaXMuaGlkZGVuLmVtaXQoKTtcbiAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIHRoZSB0b29sdGlwLlxuICAgKlxuICAgKiBUaGlzIGlzIGNvbnNpZGVyZWQgdG8gYmUgYSBcIm1hbnVhbFwiIHRyaWdnZXJpbmcgb2YgdGhlIHRvb2x0aXAuXG4gICAqL1xuICB0b2dnbGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3dpbmRvd1JlZikge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wZW4oKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAsIGlmIHRoZSBwb3BvdmVyIGlzIGN1cnJlbnRseSBzaG93bi5cbiAgICovXG4gIGlzT3BlbigpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX3dpbmRvd1JlZiAhPSBudWxsOyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5fdW5yZWdpc3Rlckxpc3RlbmVyc0ZuID0gbGlzdGVuVG9UcmlnZ2VycyhcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIsIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgdGhpcy50cmlnZ2VycywgdGhpcy5pc09wZW4uYmluZCh0aGlzKSwgdGhpcy5vcGVuLmJpbmQodGhpcyksXG4gICAgICAgIHRoaXMuY2xvc2UuYmluZCh0aGlzKSwgK3RoaXMub3BlbkRlbGF5LCArdGhpcy5jbG9zZURlbGF5KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgICAvLyBUaGlzIGNoZWNrIGlzIG5lZWRlZCBhcyBpdCBtaWdodCBoYXBwZW4gdGhhdCBuZ09uRGVzdHJveSBpcyBjYWxsZWQgYmVmb3JlIG5nT25Jbml0XG4gICAgLy8gdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLCBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9uZy1ib290c3RyYXAvbmctYm9vdHN0cmFwL2lzc3Vlcy8yMTk5XG4gICAgaWYgKHRoaXMuX3VucmVnaXN0ZXJMaXN0ZW5lcnNGbikge1xuICAgICAgdGhpcy5fdW5yZWdpc3Rlckxpc3RlbmVyc0ZuKCk7XG4gICAgfVxuICAgIHRoaXMuX3pvbmVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/tooltip/tooltip.module.js b/dist/sunbird-ui-components/esm2015/tooltip/tooltip.module.js new file mode 100644 index 0000000..f6148e9 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/tooltip/tooltip.module.js @@ -0,0 +1,14 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgModule } from '@angular/core'; +import { NgbTooltip, NgbTooltipWindow } from './tooltip'; +export { NgbTooltipConfig } from './tooltip-config'; +export { NgbTooltip } from './tooltip'; +export class NgbTooltipModule { +} +NgbTooltipModule.decorators = [ + { type: NgModule, args: [{ declarations: [NgbTooltip, NgbTooltipWindow], exports: [NgbTooltip], entryComponents: [NgbTooltipWindow] },] } +]; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC5tb2R1bGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJ0b29sdGlwL3Rvb2x0aXAubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXZDLE9BQU8sRUFBQyxVQUFVLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFdkQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUlyQyxNQUFNLE9BQU8sZ0JBQWdCOzs7WUFENUIsUUFBUSxTQUFDLEVBQUMsWUFBWSxFQUFFLENBQUMsVUFBVSxFQUFFLGdCQUFnQixDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge05nYlRvb2x0aXAsIE5nYlRvb2x0aXBXaW5kb3d9IGZyb20gJy4vdG9vbHRpcCc7XG5cbmV4cG9ydCB7TmdiVG9vbHRpcENvbmZpZ30gZnJvbSAnLi90b29sdGlwLWNvbmZpZyc7XG5leHBvcnQge05nYlRvb2x0aXB9IGZyb20gJy4vdG9vbHRpcCc7XG5leHBvcnQge1BsYWNlbWVudH0gZnJvbSAnLi4vdXRpbC9wb3NpdGlvbmluZyc7XG5cbkBOZ01vZHVsZSh7ZGVjbGFyYXRpb25zOiBbTmdiVG9vbHRpcCwgTmdiVG9vbHRpcFdpbmRvd10sIGV4cG9ydHM6IFtOZ2JUb29sdGlwXSwgZW50cnlDb21wb25lbnRzOiBbTmdiVG9vbHRpcFdpbmRvd119KVxuZXhwb3J0IGNsYXNzIE5nYlRvb2x0aXBNb2R1bGUge1xufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/typeahead/highlight.js b/dist/sunbird-ui-components/esm2015/typeahead/highlight.js new file mode 100644 index 0000000..3964421 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/typeahead/highlight.js @@ -0,0 +1,83 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Component, Input, ChangeDetectionStrategy, ViewEncapsulation } from '@angular/core'; +import { regExpEscape, toString } from '../util/util'; +/** + * A component that helps with text highlighting. + * + * If splits the `result` text into parts that contain the searched `term` and generates the HTML markup to simplify + * highlighting: + * + * Ex. `result="Alaska"` and `term="as"` will produce `Alaska`. + */ +export class NgbHighlight { + constructor() { + /** + * The CSS class for `` elements wrapping the `term` inside the `result`. + */ + this.highlightClass = 'ngb-highlight'; + } + /** + * @param {?} changes + * @return {?} + */ + ngOnChanges(changes) { + /** @type {?} */ + const result = toString(this.result); + /** @type {?} */ + const terms = Array.isArray(this.term) ? this.term : [this.term]; + /** @type {?} */ + const escapedTerms = terms.map((/** + * @param {?} term + * @return {?} + */ + term => regExpEscape(toString(term)))).filter((/** + * @param {?} term + * @return {?} + */ + term => term)); + this.parts = escapedTerms.length ? result.split(new RegExp(`(${escapedTerms.join('|')})`, 'gmi')) : [result]; + } +} +NgbHighlight.decorators = [ + { type: Component, args: [{ + selector: 'ngb-highlight', + changeDetection: ChangeDetectionStrategy.OnPush, + encapsulation: ViewEncapsulation.None, + template: `` + + `{{part}}{{part}}` + + ``, + styles: [".ngb-highlight{font-weight:700}"] + }] } +]; +NgbHighlight.propDecorators = { + highlightClass: [{ type: Input }], + result: [{ type: Input }], + term: [{ type: Input }] +}; +if (false) { + /** @type {?} */ + NgbHighlight.prototype.parts; + /** + * The CSS class for `` elements wrapping the `term` inside the `result`. + * @type {?} + */ + NgbHighlight.prototype.highlightClass; + /** + * The text highlighting is added to. + * + * If the `term` is found inside this text, it will be highlighted. + * If the `term` contains array then all the items from it will be highlighted inside the text. + * @type {?} + */ + NgbHighlight.prototype.result; + /** + * The term or array of terms to be highlighted. + * Since version `v4.2.0` term could be a `string[]` + * @type {?} + */ + NgbHighlight.prototype.term; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlnaGxpZ2h0LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsidHlwZWFoZWFkL2hpZ2hsaWdodC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQWEsdUJBQXVCLEVBQWlCLGlCQUFpQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3JILE9BQU8sRUFBQyxZQUFZLEVBQUUsUUFBUSxFQUFDLE1BQU0sY0FBYyxDQUFDOzs7Ozs7Ozs7QUFtQnBELE1BQU0sT0FBTyxZQUFZO0lBVHpCOzs7O1FBZVcsbUJBQWMsR0FBRyxlQUFlLENBQUM7SUF3QjVDLENBQUM7Ozs7O0lBUkMsV0FBVyxDQUFDLE9BQXNCOztjQUMxQixNQUFNLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7O2NBRTlCLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDOztjQUMxRCxZQUFZLEdBQUcsS0FBSyxDQUFDLEdBQUc7Ozs7UUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQyxDQUFDLE1BQU07Ozs7UUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBQztRQUV6RixJQUFJLENBQUMsS0FBSyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvRyxDQUFDOzs7WUF0Q0YsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxlQUFlO2dCQUN6QixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtnQkFDL0MsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7Z0JBQ3JDLFFBQVEsRUFBRSxnRUFBZ0U7b0JBQ3RFLGtIQUFrSDtvQkFDbEgsZ0JBQWdCOzthQUVyQjs7OzZCQU9FLEtBQUs7cUJBUUwsS0FBSzttQkFNTCxLQUFLOzs7O0lBbkJOLDZCQUFnQjs7Ozs7SUFLaEIsc0NBQTBDOzs7Ozs7OztJQVExQyw4QkFBd0I7Ozs7OztJQU14Qiw0QkFBaUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5wdXQsIE9uQ2hhbmdlcywgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIFNpbXBsZUNoYW5nZXMsIFZpZXdFbmNhcHN1bGF0aW9ufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7cmVnRXhwRXNjYXBlLCB0b1N0cmluZ30gZnJvbSAnLi4vdXRpbC91dGlsJztcblxuLyoqXG4gKiBBIGNvbXBvbmVudCB0aGF0IGhlbHBzIHdpdGggdGV4dCBoaWdobGlnaHRpbmcuXG4gKlxuICogSWYgc3BsaXRzIHRoZSBgcmVzdWx0YCB0ZXh0IGludG8gcGFydHMgdGhhdCBjb250YWluIHRoZSBzZWFyY2hlZCBgdGVybWAgYW5kIGdlbmVyYXRlcyB0aGUgSFRNTCBtYXJrdXAgdG8gc2ltcGxpZnlcbiAqIGhpZ2hsaWdodGluZzpcbiAqXG4gKiBFeC4gYHJlc3VsdD1cIkFsYXNrYVwiYCBhbmQgYHRlcm09XCJhc1wiYCB3aWxsIHByb2R1Y2UgYEFsPHNwYW4gY2xhc3M9XCJuZ2ItaGlnaGxpZ2h0XCI+YXM8L3NwYW4+a2FgLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ2ItaGlnaGxpZ2h0JyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHRlbXBsYXRlOiBgPG5nLXRlbXBsYXRlIG5nRm9yIFtuZ0Zvck9mXT1cInBhcnRzXCIgbGV0LXBhcnQgbGV0LWlzT2RkPVwib2RkXCI+YCArXG4gICAgICBgPHNwYW4gKm5nSWY9XCJpc09kZDsgZWxzZSBldmVuXCIgW2NsYXNzXT1cImhpZ2hsaWdodENsYXNzXCI+e3twYXJ0fX08L3NwYW4+PG5nLXRlbXBsYXRlICNldmVuPnt7cGFydH19PC9uZy10ZW1wbGF0ZT5gICtcbiAgICAgIGA8L25nLXRlbXBsYXRlPmAsICAvLyB0ZW1wbGF0ZSBuZWVkcyB0byBiZSBmb3JtYXR0ZWQgaW4gYSBjZXJ0YWluIHdheSBzbyB3ZSBkb24ndCBhZGQgZW1wdHkgdGV4dCBub2Rlc1xuICBzdHlsZVVybHM6IFsnLi9oaWdobGlnaHQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIE5nYkhpZ2hsaWdodCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIHBhcnRzOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIENTUyBjbGFzcyBmb3IgYDxzcGFuPmAgZWxlbWVudHMgd3JhcHBpbmcgdGhlIGB0ZXJtYCBpbnNpZGUgdGhlIGByZXN1bHRgLlxuICAgKi9cbiAgQElucHV0KCkgaGlnaGxpZ2h0Q2xhc3MgPSAnbmdiLWhpZ2hsaWdodCc7XG5cbiAgLyoqXG4gICAqIFRoZSB0ZXh0IGhpZ2hsaWdodGluZyBpcyBhZGRlZCB0by5cbiAgICpcbiAgICogSWYgdGhlIGB0ZXJtYCBpcyBmb3VuZCBpbnNpZGUgdGhpcyB0ZXh0LCBpdCB3aWxsIGJlIGhpZ2hsaWdodGVkLlxuICAgKiBJZiB0aGUgYHRlcm1gIGNvbnRhaW5zIGFycmF5IHRoZW4gYWxsIHRoZSBpdGVtcyBmcm9tIGl0IHdpbGwgYmUgaGlnaGxpZ2h0ZWQgaW5zaWRlIHRoZSB0ZXh0LlxuICAgKi9cbiAgQElucHV0KCkgcmVzdWx0OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0ZXJtIG9yIGFycmF5IG9mIHRlcm1zIHRvIGJlIGhpZ2hsaWdodGVkLlxuICAgKiBTaW5jZSB2ZXJzaW9uIGB2NC4yLjBgIHRlcm0gY291bGQgYmUgYSBgc3RyaW5nW11gXG4gICAqL1xuICBASW5wdXQoKSB0ZXJtOiBzdHJpbmcgfCBzdHJpbmdbXTtcblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gdG9TdHJpbmcodGhpcy5yZXN1bHQpO1xuXG4gICAgY29uc3QgdGVybXMgPSBBcnJheS5pc0FycmF5KHRoaXMudGVybSkgPyB0aGlzLnRlcm0gOiBbdGhpcy50ZXJtXTtcbiAgICBjb25zdCBlc2NhcGVkVGVybXMgPSB0ZXJtcy5tYXAodGVybSA9PiByZWdFeHBFc2NhcGUodG9TdHJpbmcodGVybSkpKS5maWx0ZXIodGVybSA9PiB0ZXJtKTtcblxuICAgIHRoaXMucGFydHMgPSBlc2NhcGVkVGVybXMubGVuZ3RoID8gcmVzdWx0LnNwbGl0KG5ldyBSZWdFeHAoYCgke2VzY2FwZWRUZXJtcy5qb2luKCd8Jyl9KWAsICdnbWknKSkgOiBbcmVzdWx0XTtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/typeahead/typeahead-config.js b/dist/sunbird-ui-components/esm2015/typeahead/typeahead-config.js new file mode 100644 index 0000000..9bf38aa --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/typeahead/typeahead-config.js @@ -0,0 +1,37 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Injectable } from '@angular/core'; +import * as i0 from "@angular/core"; +/** + * A configuration service for the [`NgbTypeahead`](#/components/typeahead/api#NgbTypeahead) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the typeaheads used in the application. + */ +export class NgbTypeaheadConfig { + constructor() { + this.editable = true; + this.focusFirst = true; + this.showHint = false; + this.placement = ['bottom-left', 'bottom-right', 'top-left', 'top-right']; + } +} +NgbTypeaheadConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } +]; +/** @nocollapse */ NgbTypeaheadConfig.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function NgbTypeaheadConfig_Factory() { return new NgbTypeaheadConfig(); }, token: NgbTypeaheadConfig, providedIn: "root" }); +if (false) { + /** @type {?} */ + NgbTypeaheadConfig.prototype.container; + /** @type {?} */ + NgbTypeaheadConfig.prototype.editable; + /** @type {?} */ + NgbTypeaheadConfig.prototype.focusFirst; + /** @type {?} */ + NgbTypeaheadConfig.prototype.showHint; + /** @type {?} */ + NgbTypeaheadConfig.prototype.placement; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWFoZWFkLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbInR5cGVhaGVhZC90eXBlYWhlYWQtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQVV6QyxNQUFNLE9BQU8sa0JBQWtCO0lBRC9CO1FBR0UsYUFBUSxHQUFHLElBQUksQ0FBQztRQUNoQixlQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsY0FBUyxHQUFtQixDQUFDLGFBQWEsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0tBQ3RGOzs7WUFQQSxVQUFVLFNBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDOzs7OztJQUU5Qix1Q0FBVTs7SUFDVixzQ0FBZ0I7O0lBQ2hCLHdDQUFrQjs7SUFDbEIsc0NBQWlCOztJQUNqQix1Q0FBcUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtQbGFjZW1lbnRBcnJheX0gZnJvbSAnLi4vdXRpbC9wb3NpdGlvbmluZyc7XG5cbi8qKlxuICogQSBjb25maWd1cmF0aW9uIHNlcnZpY2UgZm9yIHRoZSBbYE5nYlR5cGVhaGVhZGBdKCMvY29tcG9uZW50cy90eXBlYWhlYWQvYXBpI05nYlR5cGVhaGVhZCkgY29tcG9uZW50LlxuICpcbiAqIFlvdSBjYW4gaW5qZWN0IHRoaXMgc2VydmljZSwgdHlwaWNhbGx5IGluIHlvdXIgcm9vdCBjb21wb25lbnQsIGFuZCBjdXN0b21pemUgdGhlIHZhbHVlcyBvZiBpdHMgcHJvcGVydGllcyBpblxuICogb3JkZXIgdG8gcHJvdmlkZSBkZWZhdWx0IHZhbHVlcyBmb3IgYWxsIHRoZSB0eXBlYWhlYWRzIHVzZWQgaW4gdGhlIGFwcGxpY2F0aW9uLlxuICovXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBOZ2JUeXBlYWhlYWRDb25maWcge1xuICBjb250YWluZXI7XG4gIGVkaXRhYmxlID0gdHJ1ZTtcbiAgZm9jdXNGaXJzdCA9IHRydWU7XG4gIHNob3dIaW50ID0gZmFsc2U7XG4gIHBsYWNlbWVudDogUGxhY2VtZW50QXJyYXkgPSBbJ2JvdHRvbS1sZWZ0JywgJ2JvdHRvbS1yaWdodCcsICd0b3AtbGVmdCcsICd0b3AtcmlnaHQnXTtcbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/typeahead/typeahead-window.js b/dist/sunbird-ui-components/esm2015/typeahead/typeahead-window.js new file mode 100644 index 0000000..b3d2a31 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/typeahead/typeahead-window.js @@ -0,0 +1,184 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Component, Input, Output, EventEmitter, TemplateRef } from '@angular/core'; +import { toString } from '../util/util'; +/** + * The context for the typeahead result template in case you want to override the default one. + * @record + */ +export function ResultTemplateContext() { } +if (false) { + /** + * Your typeahead result item. + * @type {?} + */ + ResultTemplateContext.prototype.result; + /** + * Search term from the `` used to get current result. + * @type {?} + */ + ResultTemplateContext.prototype.term; +} +export class NgbTypeaheadWindow { + constructor() { + this.activeIdx = 0; + /** + * Flag indicating if the first row should be active initially + */ + this.focusFirst = true; + /** + * A function used to format a given result before display. This function should return a formatted string without any + * HTML markup + */ + this.formatter = toString; + /** + * Event raised when user selects a particular result row + */ + this.selectEvent = new EventEmitter(); + this.activeChangeEvent = new EventEmitter(); + } + /** + * @return {?} + */ + hasActive() { return this.activeIdx > -1 && this.activeIdx < this.results.length; } + /** + * @return {?} + */ + getActive() { return this.results[this.activeIdx]; } + /** + * @param {?} activeIdx + * @return {?} + */ + markActive(activeIdx) { + this.activeIdx = activeIdx; + this._activeChanged(); + } + /** + * @return {?} + */ + next() { + if (this.activeIdx === this.results.length - 1) { + this.activeIdx = this.focusFirst ? (this.activeIdx + 1) % this.results.length : -1; + } + else { + this.activeIdx++; + } + this._activeChanged(); + } + /** + * @return {?} + */ + prev() { + if (this.activeIdx < 0) { + this.activeIdx = this.results.length - 1; + } + else if (this.activeIdx === 0) { + this.activeIdx = this.focusFirst ? this.results.length - 1 : -1; + } + else { + this.activeIdx--; + } + this._activeChanged(); + } + /** + * @return {?} + */ + resetActive() { + this.activeIdx = this.focusFirst ? 0 : -1; + this._activeChanged(); + } + /** + * @param {?} item + * @return {?} + */ + select(item) { this.selectEvent.emit(item); } + /** + * @return {?} + */ + ngOnInit() { this.resetActive(); } + /** + * @private + * @return {?} + */ + _activeChanged() { + this.activeChangeEvent.emit(this.activeIdx >= 0 ? this.id + '-' + this.activeIdx : undefined); + } +} +NgbTypeaheadWindow.decorators = [ + { type: Component, args: [{ + selector: 'ngb-typeahead-window', + exportAs: 'ngbTypeaheadWindow', + host: { '(mousedown)': '$event.preventDefault()', 'class': 'dropdown-menu show', 'role': 'listbox', '[id]': 'id' }, + template: ` + + + + + + + ` + }] } +]; +NgbTypeaheadWindow.propDecorators = { + id: [{ type: Input }], + focusFirst: [{ type: Input }], + results: [{ type: Input }], + term: [{ type: Input }], + formatter: [{ type: Input }], + resultTemplate: [{ type: Input }], + selectEvent: [{ type: Output, args: ['select',] }], + activeChangeEvent: [{ type: Output, args: ['activeChange',] }] +}; +if (false) { + /** @type {?} */ + NgbTypeaheadWindow.prototype.activeIdx; + /** + * The id for the typeahead window. The id should be unique and the same + * as the associated typeahead's id. + * @type {?} + */ + NgbTypeaheadWindow.prototype.id; + /** + * Flag indicating if the first row should be active initially + * @type {?} + */ + NgbTypeaheadWindow.prototype.focusFirst; + /** + * Typeahead match results to be displayed + * @type {?} + */ + NgbTypeaheadWindow.prototype.results; + /** + * Search term used to get current results + * @type {?} + */ + NgbTypeaheadWindow.prototype.term; + /** + * A function used to format a given result before display. This function should return a formatted string without any + * HTML markup + * @type {?} + */ + NgbTypeaheadWindow.prototype.formatter; + /** + * A template to override a matching result default display + * @type {?} + */ + NgbTypeaheadWindow.prototype.resultTemplate; + /** + * Event raised when user selects a particular result row + * @type {?} + */ + NgbTypeaheadWindow.prototype.selectEvent; + /** @type {?} */ + NgbTypeaheadWindow.prototype.activeChangeEvent; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWFoZWFkLXdpbmRvdy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbInR5cGVhaGVhZC90eXBlYWhlYWQtd2luZG93LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBUyxNQUFNLGVBQWUsQ0FBQztBQUUxRixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sY0FBYyxDQUFDOzs7OztBQUt0QywyQ0FVQzs7Ozs7O0lBTkMsdUNBQVk7Ozs7O0lBS1oscUNBQWE7O0FBdUJmLE1BQU0sT0FBTyxrQkFBa0I7SUFwQi9CO1FBcUJFLGNBQVMsR0FBRyxDQUFDLENBQUM7Ozs7UUFXTCxlQUFVLEdBQUcsSUFBSSxDQUFDOzs7OztRQWdCbEIsY0FBUyxHQUFHLFFBQVEsQ0FBQzs7OztRQVVaLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUUzQixzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBMkNqRSxDQUFDOzs7O0lBekNDLFNBQVMsS0FBSyxPQUFPLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Ozs7SUFFbkYsU0FBUyxLQUFLLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7OztJQUVwRCxVQUFVLENBQUMsU0FBaUI7UUFDMUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7Ozs7SUFFRCxJQUFJO1FBQ0YsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM5QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDcEY7YUFBTTtZQUNMLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUNsQjtRQUNELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDOzs7O0lBRUQsSUFBSTtRQUNGLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLEVBQUU7WUFDdEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7U0FDMUM7YUFBTSxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssQ0FBQyxFQUFFO1lBQy9CLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNqRTthQUFNO1lBQ0wsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ2xCO1FBQ0QsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7Ozs7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDOzs7OztJQUVELE1BQU0sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7O0lBRTdDLFFBQVEsS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDOzs7OztJQUUxQixjQUFjO1FBQ3BCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2hHLENBQUM7OztZQXRHRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLHNCQUFzQjtnQkFDaEMsUUFBUSxFQUFFLG9CQUFvQjtnQkFDOUIsSUFBSSxFQUFFLEVBQUMsYUFBYSxFQUFFLHlCQUF5QixFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBQ2hILFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7R0FjVDthQUNGOzs7aUJBUUUsS0FBSzt5QkFLTCxLQUFLO3NCQUtMLEtBQUs7bUJBS0wsS0FBSzt3QkFNTCxLQUFLOzZCQUtMLEtBQUs7MEJBS0wsTUFBTSxTQUFDLFFBQVE7Z0NBRWYsTUFBTSxTQUFDLGNBQWM7Ozs7SUF2Q3RCLHVDQUFjOzs7Ozs7SUFNZCxnQ0FBb0I7Ozs7O0lBS3BCLHdDQUEyQjs7Ozs7SUFLM0IscUNBQWlCOzs7OztJQUtqQixrQ0FBc0I7Ozs7OztJQU10Qix1Q0FBOEI7Ozs7O0lBSzlCLDRDQUE0RDs7Ozs7SUFLNUQseUNBQW1EOztJQUVuRCwrQ0FBK0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBUZW1wbGF0ZVJlZiwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHt0b1N0cmluZ30gZnJvbSAnLi4vdXRpbC91dGlsJztcblxuLyoqXG4gKiBUaGUgY29udGV4dCBmb3IgdGhlIHR5cGVhaGVhZCByZXN1bHQgdGVtcGxhdGUgaW4gY2FzZSB5b3Ugd2FudCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBvbmUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdWx0VGVtcGxhdGVDb250ZXh0IHtcbiAgLyoqXG4gICAqIFlvdXIgdHlwZWFoZWFkIHJlc3VsdCBpdGVtLlxuICAgKi9cbiAgcmVzdWx0OiBhbnk7XG5cbiAgLyoqXG4gICAqIFNlYXJjaCB0ZXJtIGZyb20gdGhlIGA8aW5wdXQ+YCB1c2VkIHRvIGdldCBjdXJyZW50IHJlc3VsdC5cbiAgICovXG4gIHRlcm06IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmdiLXR5cGVhaGVhZC13aW5kb3cnLFxuICBleHBvcnRBczogJ25nYlR5cGVhaGVhZFdpbmRvdycsXG4gIGhvc3Q6IHsnKG1vdXNlZG93biknOiAnJGV2ZW50LnByZXZlbnREZWZhdWx0KCknLCAnY2xhc3MnOiAnZHJvcGRvd24tbWVudSBzaG93JywgJ3JvbGUnOiAnbGlzdGJveCcsICdbaWRdJzogJ2lkJ30sXG4gIHRlbXBsYXRlOiBgXG4gICAgPG5nLXRlbXBsYXRlICNydCBsZXQtcmVzdWx0PVwicmVzdWx0XCIgbGV0LXRlcm09XCJ0ZXJtXCIgbGV0LWZvcm1hdHRlcj1cImZvcm1hdHRlclwiPlxuICAgICAgPG5nYi1oaWdobGlnaHQgW3Jlc3VsdF09XCJmb3JtYXR0ZXIocmVzdWx0KVwiIFt0ZXJtXT1cInRlcm1cIj48L25nYi1oaWdobGlnaHQ+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgbmdGb3IgW25nRm9yT2ZdPVwicmVzdWx0c1wiIGxldC1yZXN1bHQgbGV0LWlkeD1cImluZGV4XCI+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiByb2xlPVwib3B0aW9uXCJcbiAgICAgICAgW2lkXT1cImlkICsgJy0nICsgaWR4XCJcbiAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJpZHggPT09IGFjdGl2ZUlkeFwiXG4gICAgICAgIChtb3VzZWVudGVyKT1cIm1hcmtBY3RpdmUoaWR4KVwiXG4gICAgICAgIChjbGljayk9XCJzZWxlY3QocmVzdWx0KVwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJyZXN1bHRUZW1wbGF0ZSB8fCBydFwiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntyZXN1bHQ6IHJlc3VsdCwgdGVybTogdGVybSwgZm9ybWF0dGVyOiBmb3JtYXR0ZXJ9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIGBcbn0pXG5leHBvcnQgY2xhc3MgTmdiVHlwZWFoZWFkV2luZG93IGltcGxlbWVudHMgT25Jbml0IHtcbiAgYWN0aXZlSWR4ID0gMDtcblxuICAvKipcbiAgICogIFRoZSBpZCBmb3IgdGhlIHR5cGVhaGVhZCB3aW5kb3cuIFRoZSBpZCBzaG91bGQgYmUgdW5pcXVlIGFuZCB0aGUgc2FtZVxuICAgKiAgYXMgdGhlIGFzc29jaWF0ZWQgdHlwZWFoZWFkJ3MgaWQuXG4gICAqL1xuICBASW5wdXQoKSBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGbGFnIGluZGljYXRpbmcgaWYgdGhlIGZpcnN0IHJvdyBzaG91bGQgYmUgYWN0aXZlIGluaXRpYWxseVxuICAgKi9cbiAgQElucHV0KCkgZm9jdXNGaXJzdCA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFR5cGVhaGVhZCBtYXRjaCByZXN1bHRzIHRvIGJlIGRpc3BsYXllZFxuICAgKi9cbiAgQElucHV0KCkgcmVzdWx0cztcblxuICAvKipcbiAgICogU2VhcmNoIHRlcm0gdXNlZCB0byBnZXQgY3VycmVudCByZXN1bHRzXG4gICAqL1xuICBASW5wdXQoKSB0ZXJtOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdXNlZCB0byBmb3JtYXQgYSBnaXZlbiByZXN1bHQgYmVmb3JlIGRpc3BsYXkuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBhIGZvcm1hdHRlZCBzdHJpbmcgd2l0aG91dCBhbnlcbiAgICogSFRNTCBtYXJrdXBcbiAgICovXG4gIEBJbnB1dCgpIGZvcm1hdHRlciA9IHRvU3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHRlbXBsYXRlIHRvIG92ZXJyaWRlIGEgbWF0Y2hpbmcgcmVzdWx0IGRlZmF1bHQgZGlzcGxheVxuICAgKi9cbiAgQElucHV0KCkgcmVzdWx0VGVtcGxhdGU6IFRlbXBsYXRlUmVmPFJlc3VsdFRlbXBsYXRlQ29udGV4dD47XG5cbiAgLyoqXG4gICAqIEV2ZW50IHJhaXNlZCB3aGVuIHVzZXIgc2VsZWN0cyBhIHBhcnRpY3VsYXIgcmVzdWx0IHJvd1xuICAgKi9cbiAgQE91dHB1dCgnc2VsZWN0Jykgc2VsZWN0RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgnYWN0aXZlQ2hhbmdlJykgYWN0aXZlQ2hhbmdlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgaGFzQWN0aXZlKCkgeyByZXR1cm4gdGhpcy5hY3RpdmVJZHggPiAtMSAmJiB0aGlzLmFjdGl2ZUlkeCA8IHRoaXMucmVzdWx0cy5sZW5ndGg7IH1cblxuICBnZXRBY3RpdmUoKSB7IHJldHVybiB0aGlzLnJlc3VsdHNbdGhpcy5hY3RpdmVJZHhdOyB9XG5cbiAgbWFya0FjdGl2ZShhY3RpdmVJZHg6IG51bWJlcikge1xuICAgIHRoaXMuYWN0aXZlSWR4ID0gYWN0aXZlSWR4O1xuICAgIHRoaXMuX2FjdGl2ZUNoYW5nZWQoKTtcbiAgfVxuXG4gIG5leHQoKSB7XG4gICAgaWYgKHRoaXMuYWN0aXZlSWR4ID09PSB0aGlzLnJlc3VsdHMubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5hY3RpdmVJZHggPSB0aGlzLmZvY3VzRmlyc3QgPyAodGhpcy5hY3RpdmVJZHggKyAxKSAlIHRoaXMucmVzdWx0cy5sZW5ndGggOiAtMTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hY3RpdmVJZHgrKztcbiAgICB9XG4gICAgdGhpcy5fYWN0aXZlQ2hhbmdlZCgpO1xuICB9XG5cbiAgcHJldigpIHtcbiAgICBpZiAodGhpcy5hY3RpdmVJZHggPCAwKSB7XG4gICAgICB0aGlzLmFjdGl2ZUlkeCA9IHRoaXMucmVzdWx0cy5sZW5ndGggLSAxO1xuICAgIH0gZWxzZSBpZiAodGhpcy5hY3RpdmVJZHggPT09IDApIHtcbiAgICAgIHRoaXMuYWN0aXZlSWR4ID0gdGhpcy5mb2N1c0ZpcnN0ID8gdGhpcy5yZXN1bHRzLmxlbmd0aCAtIDEgOiAtMTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hY3RpdmVJZHgtLTtcbiAgICB9XG4gICAgdGhpcy5fYWN0aXZlQ2hhbmdlZCgpO1xuICB9XG5cbiAgcmVzZXRBY3RpdmUoKSB7XG4gICAgdGhpcy5hY3RpdmVJZHggPSB0aGlzLmZvY3VzRmlyc3QgPyAwIDogLTE7XG4gICAgdGhpcy5fYWN0aXZlQ2hhbmdlZCgpO1xuICB9XG5cbiAgc2VsZWN0KGl0ZW0pIHsgdGhpcy5zZWxlY3RFdmVudC5lbWl0KGl0ZW0pOyB9XG5cbiAgbmdPbkluaXQoKSB7IHRoaXMucmVzZXRBY3RpdmUoKTsgfVxuXG4gIHByaXZhdGUgX2FjdGl2ZUNoYW5nZWQoKSB7XG4gICAgdGhpcy5hY3RpdmVDaGFuZ2VFdmVudC5lbWl0KHRoaXMuYWN0aXZlSWR4ID49IDAgPyB0aGlzLmlkICsgJy0nICsgdGhpcy5hY3RpdmVJZHggOiB1bmRlZmluZWQpO1xuICB9XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/typeahead/typeahead.js b/dist/sunbird-ui-components/esm2015/typeahead/typeahead.js new file mode 100644 index 0000000..6119f8d --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/typeahead/typeahead.js @@ -0,0 +1,654 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { ChangeDetectorRef, ComponentFactoryResolver, Directive, ElementRef, EventEmitter, forwardRef, Inject, Injector, Input, NgZone, Output, Renderer2, TemplateRef, ViewContainerRef, ApplicationRef } from '@angular/core'; +import { NG_VALUE_ACCESSOR } from '@angular/forms'; +import { DOCUMENT } from '@angular/common'; +import { BehaviorSubject, fromEvent, Subject } from 'rxjs'; +import { map, switchMap, tap } from 'rxjs/operators'; +import { Live } from '../util/accessibility/live'; +import { ngbAutoClose } from '../util/autoclose'; +import { Key } from '../util/key'; +import { PopupService } from '../util/popup'; +import { positionElements } from '../util/positioning'; +import { isDefined, toString } from '../util/util'; +import { NgbTypeaheadConfig } from './typeahead-config'; +import { NgbTypeaheadWindow } from './typeahead-window'; +/** @type {?} */ +const NGB_TYPEAHEAD_VALUE_ACCESSOR = { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef((/** + * @return {?} + */ + () => NgbTypeahead)), + multi: true +}; +/** + * An event emitted right before an item is selected from the result list. + * @record + */ +export function NgbTypeaheadSelectItemEvent() { } +if (false) { + /** + * The item from the result list about to be selected. + * @type {?} + */ + NgbTypeaheadSelectItemEvent.prototype.item; + /** + * Calling this function will prevent item selection from happening. + * @type {?} + */ + NgbTypeaheadSelectItemEvent.prototype.preventDefault; +} +/** @type {?} */ +let nextWindowId = 0; +/** + * A directive providing a simple way of creating powerful typeaheads from any text input. + */ +export class NgbTypeahead { + /** + * @param {?} _elementRef + * @param {?} _viewContainerRef + * @param {?} _renderer + * @param {?} _injector + * @param {?} componentFactoryResolver + * @param {?} config + * @param {?} ngZone + * @param {?} _live + * @param {?} _document + * @param {?} _ngZone + * @param {?} _changeDetector + * @param {?} _applicationRef + */ + constructor(_elementRef, _viewContainerRef, _renderer, _injector, componentFactoryResolver, config, ngZone, _live, _document, _ngZone, _changeDetector, _applicationRef) { + this._elementRef = _elementRef; + this._viewContainerRef = _viewContainerRef; + this._renderer = _renderer; + this._injector = _injector; + this._live = _live; + this._document = _document; + this._ngZone = _ngZone; + this._changeDetector = _changeDetector; + this._applicationRef = _applicationRef; + this._closed$ = new Subject(); + /** + * The value for the `autocomplete` attribute for the `` element. + * + * Defaults to `"off"` to disable the native browser autocomplete, but you can override it if necessary. + * + * \@since 2.1.0 + */ + this.autocomplete = 'off'; + /** + * The preferred placement of the typeahead. + * + * Possible values are `"top"`, `"top-left"`, `"top-right"`, `"bottom"`, `"bottom-left"`, + * `"bottom-right"`, `"left"`, `"left-top"`, `"left-bottom"`, `"right"`, `"right-top"`, + * `"right-bottom"` + * + * Accepts an array of strings or a string with space separated possible values. + * + * The default order of preference is `"bottom-left bottom-right top-left top-right"` + * + * Please see the [positioning overview](#/positioning) for more details. + */ + this.placement = 'bottom-left'; + /** + * An event emitted right before an item is selected from the result list. + * + * Event payload is of type [`NgbTypeaheadSelectItemEvent`](#/components/typeahead/api#NgbTypeaheadSelectItemEvent). + */ + this.selectItem = new EventEmitter(); + this.popupId = `ngb-typeahead-${nextWindowId++}`; + this._onTouched = (/** + * @return {?} + */ + () => { }); + this._onChange = (/** + * @param {?} _ + * @return {?} + */ + (_) => { }); + this.container = config.container; + this.editable = config.editable; + this.focusFirst = config.focusFirst; + this.showHint = config.showHint; + this.placement = config.placement; + this._valueChanges = fromEvent(_elementRef.nativeElement, 'input') + .pipe(map((/** + * @param {?} $event + * @return {?} + */ + $event => ((/** @type {?} */ ($event.target))).value))); + this._resubscribeTypeahead = new BehaviorSubject(null); + this._popupService = new PopupService(NgbTypeaheadWindow, _injector, _viewContainerRef, _renderer, componentFactoryResolver, _applicationRef); + this._zoneSubscription = ngZone.onStable.subscribe((/** + * @return {?} + */ + () => { + if (this.isPopupOpen()) { + positionElements(this._elementRef.nativeElement, this._windowRef.location.nativeElement, this.placement, this.container === 'body'); + } + })); + } + /** + * @return {?} + */ + ngOnInit() { + /** @type {?} */ + const inputValues$ = this._valueChanges.pipe(tap((/** + * @param {?} value + * @return {?} + */ + value => { + this._inputValueBackup = this.showHint ? value : null; + if (this.editable) { + this._onChange(value); + } + }))); + /** @type {?} */ + const results$ = inputValues$.pipe(this.ngbTypeahead); + /** @type {?} */ + const processedResults$ = results$.pipe(tap((/** + * @return {?} + */ + () => { + if (!this.editable) { + this._onChange(undefined); + } + }))); + /** @type {?} */ + const userInput$ = this._resubscribeTypeahead.pipe(switchMap((/** + * @return {?} + */ + () => processedResults$))); + this._subscription = this._subscribeToUserInput(userInput$); + } + /** + * @return {?} + */ + ngOnDestroy() { + this._closePopup(); + this._unsubscribeFromUserInput(); + this._zoneSubscription.unsubscribe(); + } + /** + * @param {?} fn + * @return {?} + */ + registerOnChange(fn) { this._onChange = fn; } + /** + * @param {?} fn + * @return {?} + */ + registerOnTouched(fn) { this._onTouched = fn; } + /** + * @param {?} value + * @return {?} + */ + writeValue(value) { + this._writeInputValue(this._formatItemForInput(value)); + if (this.showHint) { + this._inputValueBackup = value; + } + } + /** + * @param {?} isDisabled + * @return {?} + */ + setDisabledState(isDisabled) { + this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled); + } + /** + * Dismisses typeahead popup window + * @return {?} + */ + dismissPopup() { + if (this.isPopupOpen()) { + this._resubscribeTypeahead.next(null); + this._closePopup(); + if (this.showHint && this._inputValueBackup !== null) { + this._writeInputValue(this._inputValueBackup); + } + this._changeDetector.markForCheck(); + } + } + /** + * Returns true if the typeahead popup window is displayed + * @return {?} + */ + isPopupOpen() { return this._windowRef != null; } + /** + * @return {?} + */ + handleBlur() { + this._resubscribeTypeahead.next(null); + this._onTouched(); + } + /** + * @param {?} event + * @return {?} + */ + handleKeyDown(event) { + if (!this.isPopupOpen()) { + return; + } + // tslint:disable-next-line:deprecation + switch (event.which) { + case Key.ArrowDown: + event.preventDefault(); + this._windowRef.instance.next(); + this._showHint(); + break; + case Key.ArrowUp: + event.preventDefault(); + this._windowRef.instance.prev(); + this._showHint(); + break; + case Key.Enter: + case Key.Tab: + /** @type {?} */ + const result = this._windowRef.instance.getActive(); + if (isDefined(result)) { + event.preventDefault(); + event.stopPropagation(); + this._selectResult(result); + } + this._closePopup(); + break; + } + } + /** + * @private + * @return {?} + */ + _openPopup() { + if (!this.isPopupOpen()) { + this._inputValueBackup = this._elementRef.nativeElement.value; + this._windowRef = this._popupService.open(); + this._windowRef.instance.id = this.popupId; + this._windowRef.instance.selectEvent.subscribe((/** + * @param {?} result + * @return {?} + */ + (result) => this._selectResultClosePopup(result))); + this._windowRef.instance.activeChangeEvent.subscribe((/** + * @param {?} activeId + * @return {?} + */ + (activeId) => this.activeDescendant = activeId)); + if (this.container === 'body') { + window.document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement); + } + this._changeDetector.markForCheck(); + ngbAutoClose(this._ngZone, this._document, 'outside', (/** + * @return {?} + */ + () => this.dismissPopup()), this._closed$, [this._elementRef.nativeElement, this._windowRef.location.nativeElement]); + } + } + /** + * @private + * @return {?} + */ + _closePopup() { + this._closed$.next(); + this._popupService.close(); + this._windowRef = null; + this.activeDescendant = undefined; + } + /** + * @private + * @param {?} result + * @return {?} + */ + _selectResult(result) { + /** @type {?} */ + let defaultPrevented = false; + this.selectItem.emit({ item: result, preventDefault: (/** + * @return {?} + */ + () => { defaultPrevented = true; }) }); + this._resubscribeTypeahead.next(null); + if (!defaultPrevented) { + this.writeValue(result); + this._onChange(result); + } + } + /** + * @private + * @param {?} result + * @return {?} + */ + _selectResultClosePopup(result) { + this._selectResult(result); + this._closePopup(); + } + /** + * @private + * @return {?} + */ + _showHint() { + if (this.showHint && this._windowRef.instance.hasActive() && this._inputValueBackup != null) { + /** @type {?} */ + const userInputLowerCase = this._inputValueBackup.toLowerCase(); + /** @type {?} */ + const formattedVal = this._formatItemForInput(this._windowRef.instance.getActive()); + if (userInputLowerCase === formattedVal.substr(0, this._inputValueBackup.length).toLowerCase()) { + this._writeInputValue(this._inputValueBackup + formattedVal.substr(this._inputValueBackup.length)); + this._elementRef.nativeElement['setSelectionRange'].apply(this._elementRef.nativeElement, [this._inputValueBackup.length, formattedVal.length]); + } + else { + this._writeInputValue(formattedVal); + } + } + } + /** + * @private + * @param {?} item + * @return {?} + */ + _formatItemForInput(item) { + return item != null && this.inputFormatter ? this.inputFormatter(item) : toString(item); + } + /** + * @private + * @param {?} value + * @return {?} + */ + _writeInputValue(value) { + this._renderer.setProperty(this._elementRef.nativeElement, 'value', toString(value)); + } + /** + * @private + * @param {?} userInput$ + * @return {?} + */ + _subscribeToUserInput(userInput$) { + return userInput$.subscribe((/** + * @param {?} results + * @return {?} + */ + (results) => { + if (!results || results.length === 0) { + this._closePopup(); + } + else { + this._openPopup(); + this._windowRef.instance.focusFirst = this.focusFirst; + this._windowRef.instance.results = results; + this._windowRef.instance.term = this._elementRef.nativeElement.value; + if (this.resultFormatter) { + this._windowRef.instance.formatter = this.resultFormatter; + } + if (this.resultTemplate) { + this._windowRef.instance.resultTemplate = this.resultTemplate; + } + this._windowRef.instance.resetActive(); + // The observable stream we are subscribing to might have async steps + // and if a component containing typeahead is using the OnPush strategy + // the change detection turn wouldn't be invoked automatically. + this._windowRef.changeDetectorRef.detectChanges(); + this._showHint(); + } + // live announcer + /** @type {?} */ + const count = results ? results.length : 0; + this._live.say(count === 0 ? 'No results available' : `${count} result${count === 1 ? '' : 's'} available`); + })); + } + /** + * @private + * @return {?} + */ + _unsubscribeFromUserInput() { + if (this._subscription) { + this._subscription.unsubscribe(); + } + this._subscription = null; + } +} +NgbTypeahead.decorators = [ + { type: Directive, args: [{ + selector: 'input[ngbTypeahead]', + exportAs: 'ngbTypeahead', + host: { + '(blur)': 'handleBlur()', + '[class.open]': 'isPopupOpen()', + '(keydown)': 'handleKeyDown($event)', + '[autocomplete]': 'autocomplete', + 'autocapitalize': 'off', + 'autocorrect': 'off', + 'role': 'combobox', + 'aria-multiline': 'false', + '[attr.aria-autocomplete]': 'showHint ? "both" : "list"', + '[attr.aria-activedescendant]': 'activeDescendant', + '[attr.aria-owns]': 'isPopupOpen() ? popupId : null', + '[attr.aria-expanded]': 'isPopupOpen()' + }, + providers: [NGB_TYPEAHEAD_VALUE_ACCESSOR] + },] } +]; +/** @nocollapse */ +NgbTypeahead.ctorParameters = () => [ + { type: ElementRef }, + { type: ViewContainerRef }, + { type: Renderer2 }, + { type: Injector }, + { type: ComponentFactoryResolver }, + { type: NgbTypeaheadConfig }, + { type: NgZone }, + { type: Live }, + { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }, + { type: NgZone }, + { type: ChangeDetectorRef }, + { type: ApplicationRef } +]; +NgbTypeahead.propDecorators = { + autocomplete: [{ type: Input }], + container: [{ type: Input }], + editable: [{ type: Input }], + focusFirst: [{ type: Input }], + inputFormatter: [{ type: Input }], + ngbTypeahead: [{ type: Input }], + resultFormatter: [{ type: Input }], + resultTemplate: [{ type: Input }], + showHint: [{ type: Input }], + placement: [{ type: Input }], + selectItem: [{ type: Output }] +}; +if (false) { + /** + * @type {?} + * @private + */ + NgbTypeahead.prototype._popupService; + /** + * @type {?} + * @private + */ + NgbTypeahead.prototype._subscription; + /** + * @type {?} + * @private + */ + NgbTypeahead.prototype._closed$; + /** + * @type {?} + * @private + */ + NgbTypeahead.prototype._inputValueBackup; + /** + * @type {?} + * @private + */ + NgbTypeahead.prototype._valueChanges; + /** + * @type {?} + * @private + */ + NgbTypeahead.prototype._resubscribeTypeahead; + /** + * @type {?} + * @private + */ + NgbTypeahead.prototype._windowRef; + /** + * @type {?} + * @private + */ + NgbTypeahead.prototype._zoneSubscription; + /** + * The value for the `autocomplete` attribute for the `` element. + * + * Defaults to `"off"` to disable the native browser autocomplete, but you can override it if necessary. + * + * \@since 2.1.0 + * @type {?} + */ + NgbTypeahead.prototype.autocomplete; + /** + * A selector specifying the element the typeahead popup will be appended to. + * + * Currently only supports `"body"`. + * @type {?} + */ + NgbTypeahead.prototype.container; + /** + * If `true`, model values will not be restricted only to items selected from the popup. + * @type {?} + */ + NgbTypeahead.prototype.editable; + /** + * If `true`, the first item in the result list will always stay focused while typing. + * @type {?} + */ + NgbTypeahead.prototype.focusFirst; + /** + * The function that converts an item from the result list to a `string` to display in the `` field. + * + * It is called when the user selects something in the popup or the model value changes, so the input needs to + * be updated. + * @type {?} + */ + NgbTypeahead.prototype.inputFormatter; + /** + * The function that converts a stream of text values from the `` element to the stream of the array of items + * to display in the typeahead popup. + * + * If the resulting observable emits a non-empty array - the popup will be shown. If it emits an empty array - the + * popup will be closed. + * + * See the [basic example](#/components/typeahead/examples#basic) for more details. + * + * Note that the `this` argument is `undefined` so you need to explicitly bind it to a desired "this" target. + * @type {?} + */ + NgbTypeahead.prototype.ngbTypeahead; + /** + * The function that converts an item from the result list to a `string` to display in the popup. + * + * Must be provided, if your `ngbTypeahead` returns something other than `Observable`. + * + * Alternatively for more complex markup in the popup you should use `resultTemplate`. + * @type {?} + */ + NgbTypeahead.prototype.resultFormatter; + /** + * The template to override the way resulting items are displayed in the popup. + * + * See the [ResultTemplateContext](#/components/typeahead/api#ResultTemplateContext) for the template context. + * + * Also see the [template for results demo](#/components/typeahead/examples#template) for more details. + * @type {?} + */ + NgbTypeahead.prototype.resultTemplate; + /** + * If `true`, will show the hint in the `` when an item in the result list matches. + * @type {?} + */ + NgbTypeahead.prototype.showHint; + /** + * The preferred placement of the typeahead. + * + * Possible values are `"top"`, `"top-left"`, `"top-right"`, `"bottom"`, `"bottom-left"`, + * `"bottom-right"`, `"left"`, `"left-top"`, `"left-bottom"`, `"right"`, `"right-top"`, + * `"right-bottom"` + * + * Accepts an array of strings or a string with space separated possible values. + * + * The default order of preference is `"bottom-left bottom-right top-left top-right"` + * + * Please see the [positioning overview](#/positioning) for more details. + * @type {?} + */ + NgbTypeahead.prototype.placement; + /** + * An event emitted right before an item is selected from the result list. + * + * Event payload is of type [`NgbTypeaheadSelectItemEvent`](#/components/typeahead/api#NgbTypeaheadSelectItemEvent). + * @type {?} + */ + NgbTypeahead.prototype.selectItem; + /** @type {?} */ + NgbTypeahead.prototype.activeDescendant; + /** @type {?} */ + NgbTypeahead.prototype.popupId; + /** + * @type {?} + * @private + */ + NgbTypeahead.prototype._onTouched; + /** + * @type {?} + * @private + */ + NgbTypeahead.prototype._onChange; + /** + * @type {?} + * @private + */ + NgbTypeahead.prototype._elementRef; + /** + * @type {?} + * @private + */ + NgbTypeahead.prototype._viewContainerRef; + /** + * @type {?} + * @private + */ + NgbTypeahead.prototype._renderer; + /** + * @type {?} + * @private + */ + NgbTypeahead.prototype._injector; + /** + * @type {?} + * @private + */ + NgbTypeahead.prototype._live; + /** + * @type {?} + * @private + */ + NgbTypeahead.prototype._document; + /** + * @type {?} + * @private + */ + NgbTypeahead.prototype._ngZone; + /** + * @type {?} + * @private + */ + NgbTypeahead.prototype._changeDetector; + /** + * @type {?} + * @private + */ + NgbTypeahead.prototype._applicationRef; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWFoZWFkLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsidHlwZWFoZWFkL3R5cGVhaGVhZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNMLGlCQUFpQixFQUNqQix3QkFBd0IsRUFFeEIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUNMLE1BQU0sRUFHTixNQUFNLEVBQ04sU0FBUyxFQUNULFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsY0FBYyxFQUNmLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBdUIsaUJBQWlCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFDLGVBQWUsRUFBRSxTQUFTLEVBQWMsT0FBTyxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBQ25GLE9BQU8sRUFBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRW5ELE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDL0MsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNoQyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBaUIsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRSxPQUFPLEVBQUMsU0FBUyxFQUFFLFFBQVEsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUVqRCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RCxPQUFPLEVBQUMsa0JBQWtCLEVBQXdCLE1BQU0s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QTJCOzs7OztJQUszQixrQ0FBNkI7Ozs7Ozs7O0lBUTdCLHNDQUErQzs7Ozs7Ozs7Ozs7OztJQWEvQyxvQ0FBdUU7Ozs7Ozs7OztJQVN2RSx1Q0FBZ0Q7Ozs7Ozs7OztJQVNoRCxzQ0FBNEQ7Ozs7O0lBSzVELGdDQUEyQjs7Ozs7Ozs7Ozs7Ozs7O0lBZTNCLGlDQUFtRDs7Ozs7OztJQU9uRCxrQ0FBdUU7O0lBRXZFLHdDQUF5Qjs7SUFDekIsK0JBQTRDOzs7OztJQUU1QyxrQ0FBOEI7Ozs7O0lBQzlCLGlDQUFtQzs7Ozs7SUFHL0IsbUNBQWlEOzs7OztJQUFFLHlDQUEyQzs7Ozs7SUFDOUYsaUNBQTRCOzs7OztJQUFFLGlDQUEyQjs7Ozs7SUFDYiw2QkFBbUI7Ozs7O0lBQUUsaUNBQXdDOzs7OztJQUN6RywrQkFBdUI7Ozs7O0lBQUUsdUNBQTBDOzs7OztJQUFFLHVDQUF1QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gIENvbXBvbmVudFJlZixcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEluamVjdCxcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFJlbmRlcmVyMixcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIEFwcGxpY2F0aW9uUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1J9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7RE9DVU1FTlR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgZnJvbUV2ZW50LCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXAsIHN3aXRjaE1hcCwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7TGl2ZX0gZnJvbSAnLi4vdXRpbC9hY2Nlc3NpYmlsaXR5L2xpdmUnO1xuaW1wb3J0IHtuZ2JBdXRvQ2xvc2V9IGZyb20gJy4uL3V0aWwvYXV0b2Nsb3NlJztcbmltcG9ydCB7S2V5fSBmcm9tICcuLi91dGlsL2tleSc7XG5pbXBvcnQge1BvcHVwU2VydmljZX0gZnJvbSAnLi4vdXRpbC9wb3B1cCc7XG5pbXBvcnQge1BsYWNlbWVudEFycmF5LCBwb3NpdGlvbkVsZW1lbnRzfSBmcm9tICcuLi91dGlsL3Bvc2l0aW9uaW5nJztcbmltcG9ydCB7aXNEZWZpbmVkLCB0b1N0cmluZ30gZnJvbSAnLi4vdXRpbC91dGlsJztcblxuaW1wb3J0IHtOZ2JUeXBlYWhlYWRDb25maWd9IGZyb20gJy4vdHlwZWFoZWFkLWNvbmZpZyc7XG5pbXBvcnQge05nYlR5cGVhaGVhZFdpbmRvdywgUmVzdWx0VGVtcGxhdGVDb250ZXh0fSBmcm9tICcuL3R5cGVhaGVhZC13aW5kb3cnO1xuXG5cbmNvbnN0IE5HQl9UWVBFQUhFQURfVkFMVUVfQUNDRVNTT1IgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBOZ2JUeXBlYWhlYWQpLFxuICBtdWx0aTogdHJ1ZVxufTtcblxuLyoqXG4gKiBBbiBldmVudCBlbWl0dGVkIHJpZ2h0IGJlZm9yZSBhbiBpdGVtIGlzIHNlbGVjdGVkIGZyb20gdGhlIHJlc3VsdCBsaXN0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5nYlR5cGVhaGVhZFNlbGVjdEl0ZW1FdmVudCB7XG4gIC8qKlxuICAgKiBUaGUgaXRlbSBmcm9tIHRoZSByZXN1bHQgbGlzdCBhYm91dCB0byBiZSBzZWxlY3RlZC5cbiAgICovXG4gIGl0ZW06IGFueTtcblxuICAvKipcbiAgICogQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgcHJldmVudCBpdGVtIHNlbGVjdGlvbiBmcm9tIGhhcHBlbmluZy5cbiAgICovXG4gIHByZXZlbnREZWZhdWx0OiAoKSA9PiB2b2lkO1xufVxuXG5sZXQgbmV4dFdpbmRvd0lkID0gMDtcblxuLyoqXG4gKiBBIGRpcmVjdGl2ZSBwcm92aWRpbmcgYSBzaW1wbGUgd2F5IG9mIGNyZWF0aW5nIHBvd2VyZnVsIHR5cGVhaGVhZHMgZnJvbSBhbnkgdGV4dCBpbnB1dC5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnaW5wdXRbbmdiVHlwZWFoZWFkXScsXG4gIGV4cG9ydEFzOiAnbmdiVHlwZWFoZWFkJyxcbiAgaG9zdDoge1xuICAgICcoYmx1ciknOiAnaGFuZGxlQmx1cigpJyxcbiAgICAnW2NsYXNzLm9wZW5dJzogJ2lzUG9wdXBPcGVuKCknLFxuICAgICcoa2V5ZG93biknOiAnaGFuZGxlS2V5RG93bigkZXZlbnQpJyxcbiAgICAnW2F1dG9jb21wbGV0ZV0nOiAnYXV0b2NvbXBsZXRlJyxcbiAgICAnYXV0b2NhcGl0YWxpemUnOiAnb2ZmJyxcbiAgICAnYXV0b2NvcnJlY3QnOiAnb2ZmJyxcbiAgICAncm9sZSc6ICdjb21ib2JveCcsXG4gICAgJ2FyaWEtbXVsdGlsaW5lJzogJ2ZhbHNlJyxcbiAgICAnW2F0dHIuYXJpYS1hdXRvY29tcGxldGVdJzogJ3Nob3dIaW50ID8gXCJib3RoXCIgOiBcImxpc3RcIicsXG4gICAgJ1thdHRyLmFyaWEtYWN0aXZlZGVzY2VuZGFudF0nOiAnYWN0aXZlRGVzY2VuZGFudCcsXG4gICAgJ1thdHRyLmFyaWEtb3duc10nOiAnaXNQb3B1cE9wZW4oKSA/IHBvcHVwSWQgOiBudWxsJyxcbiAgICAnW2F0dHIuYXJpYS1leHBhbmRlZF0nOiAnaXNQb3B1cE9wZW4oKSdcbiAgfSxcbiAgcHJvdmlkZXJzOiBbTkdCX1RZUEVBSEVBRF9WQUxVRV9BQ0NFU1NPUl1cbn0pXG5leHBvcnQgY2xhc3MgTmdiVHlwZWFoZWFkIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gICAgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIF9wb3B1cFNlcnZpY2U6IFBvcHVwU2VydmljZTxOZ2JUeXBlYWhlYWRXaW5kb3c+O1xuICBwcml2YXRlIF9zdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBfY2xvc2VkJCA9IG5ldyBTdWJqZWN0KCk7XG4gIHByaXZhdGUgX2lucHV0VmFsdWVCYWNrdXA6IHN0cmluZztcbiAgcHJpdmF0ZSBfdmFsdWVDaGFuZ2VzOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIHByaXZhdGUgX3Jlc3Vic2NyaWJlVHlwZWFoZWFkOiBCZWhhdmlvclN1YmplY3Q8YW55PjtcbiAgcHJpdmF0ZSBfd2luZG93UmVmOiBDb21wb25lbnRSZWY8TmdiVHlwZWFoZWFkV2luZG93PjtcbiAgcHJpdmF0ZSBfem9uZVN1YnNjcmlwdGlvbjogYW55O1xuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgZm9yIHRoZSBgYXV0b2NvbXBsZXRlYCBhdHRyaWJ1dGUgZm9yIHRoZSBgPGlucHV0PmAgZWxlbWVudC5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gYFwib2ZmXCJgIHRvIGRpc2FibGUgdGhlIG5hdGl2ZSBicm93c2VyIGF1dG9jb21wbGV0ZSwgYnV0IHlvdSBjYW4gb3ZlcnJpZGUgaXQgaWYgbmVjZXNzYXJ5LlxuICAgKlxuICAgKiBAc2luY2UgMi4xLjBcbiAgICovXG4gIEBJbnB1dCgpIGF1dG9jb21wbGV0ZSA9ICdvZmYnO1xuXG4gIC8qKlxuICAgKiBBIHNlbGVjdG9yIHNwZWNpZnlpbmcgdGhlIGVsZW1lbnQgdGhlIHR5cGVhaGVhZCBwb3B1cCB3aWxsIGJlIGFwcGVuZGVkIHRvLlxuICAgKlxuICAgKiBDdXJyZW50bHkgb25seSBzdXBwb3J0cyBgXCJib2R5XCJgLlxuICAgKi9cbiAgQElucHV0KCkgY29udGFpbmVyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgbW9kZWwgdmFsdWVzIHdpbGwgbm90IGJlIHJlc3RyaWN0ZWQgb25seSB0byBpdGVtcyBzZWxlY3RlZCBmcm9tIHRoZSBwb3B1cC5cbiAgICovXG4gIEBJbnB1dCgpIGVkaXRhYmxlOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBmaXJzdCBpdGVtIGluIHRoZSByZXN1bHQgbGlzdCB3aWxsIGFsd2F5cyBzdGF5IGZvY3VzZWQgd2hpbGUgdHlwaW5nLlxuICAgKi9cbiAgQElucHV0KCkgZm9jdXNGaXJzdDogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGZ1bmN0aW9uIHRoYXQgY29udmVydHMgYW4gaXRlbSBmcm9tIHRoZSByZXN1bHQgbGlzdCB0byBhIGBzdHJpbmdgIHRvIGRpc3BsYXkgaW4gdGhlIGA8aW5wdXQ+YCBmaWVsZC5cbiAgICpcbiAgICogSXQgaXMgY2FsbGVkIHdoZW4gdGhlIHVzZXIgc2VsZWN0cyBzb21ldGhpbmcgaW4gdGhlIHBvcHVwIG9yIHRoZSBtb2RlbCB2YWx1ZSBjaGFuZ2VzLCBzbyB0aGUgaW5wdXQgbmVlZHMgdG9cbiAgICogYmUgdXBkYXRlZC5cbiAgICovXG4gIEBJbnB1dCgpIGlucHV0Rm9ybWF0dGVyOiAoaXRlbTogYW55KSA9PiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBmdW5jdGlvbiB0aGF0IGNvbnZlcnRzIGEgc3RyZWFtIG9mIHRleHQgdmFsdWVzIGZyb20gdGhlIGA8aW5wdXQ+YCBlbGVtZW50IHRvIHRoZSBzdHJlYW0gb2YgdGhlIGFycmF5IG9mIGl0ZW1zXG4gICAqIHRvIGRpc3BsYXkgaW4gdGhlIHR5cGVhaGVhZCBwb3B1cC5cbiAgICpcbiAgICogSWYgdGhlIHJlc3VsdGluZyBvYnNlcnZhYmxlIGVtaXRzIGEgbm9uLWVtcHR5IGFycmF5IC0gdGhlIHBvcHVwIHdpbGwgYmUgc2hvd24uIElmIGl0IGVtaXRzIGFuIGVtcHR5IGFycmF5IC0gdGhlXG4gICAqIHBvcHVwIHdpbGwgYmUgY2xvc2VkLlxuICAgKlxuICAgKiBTZWUgdGhlIFtiYXNpYyBleGFtcGxlXSgjL2NvbXBvbmVudHMvdHlwZWFoZWFkL2V4YW1wbGVzI2Jhc2ljKSBmb3IgbW9yZSBkZXRhaWxzLlxuICAgKlxuICAgKiBOb3RlIHRoYXQgdGhlIGB0aGlzYCBhcmd1bWVudCBpcyBgdW5kZWZpbmVkYCBzbyB5b3UgbmVlZCB0byBleHBsaWNpdGx5IGJpbmQgaXQgdG8gYSBkZXNpcmVkIFwidGhpc1wiIHRhcmdldC5cbiAgICovXG4gIEBJbnB1dCgpIG5nYlR5cGVhaGVhZDogKHRleHQ6IE9ic2VydmFibGU8c3RyaW5nPikgPT4gT2JzZXJ2YWJsZTxhbnlbXT47XG5cbiAgLyoqXG4gICAqIFRoZSBmdW5jdGlvbiB0aGF0IGNvbnZlcnRzIGFuIGl0ZW0gZnJvbSB0aGUgcmVzdWx0IGxpc3QgdG8gYSBgc3RyaW5nYCB0byBkaXNwbGF5IGluIHRoZSBwb3B1cC5cbiAgICpcbiAgICogTXVzdCBiZSBwcm92aWRlZCwgaWYgeW91ciBgbmdiVHlwZWFoZWFkYCByZXR1cm5zIHNvbWV0aGluZyBvdGhlciB0aGFuIGBPYnNlcnZhYmxlPHN0cmluZ1tdPmAuXG4gICAqXG4gICAqIEFsdGVybmF0aXZlbHkgZm9yIG1vcmUgY29tcGxleCBtYXJrdXAgaW4gdGhlIHBvcHVwIHlvdSBzaG91bGQgdXNlIGByZXN1bHRUZW1wbGF0ZWAuXG4gICAqL1xuICBASW5wdXQoKSByZXN1bHRGb3JtYXR0ZXI6IChpdGVtOiBhbnkpID0+IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHRvIG92ZXJyaWRlIHRoZSB3YXkgcmVzdWx0aW5nIGl0ZW1zIGFyZSBkaXNwbGF5ZWQgaW4gdGhlIHBvcHVwLlxuICAgKlxuICAgKiBTZWUgdGhlIFtSZXN1bHRUZW1wbGF0ZUNvbnRleHRdKCMvY29tcG9uZW50cy90eXBlYWhlYWQvYXBpI1Jlc3VsdFRlbXBsYXRlQ29udGV4dCkgZm9yIHRoZSB0ZW1wbGF0ZSBjb250ZXh0LlxuICAgKlxuICAgKiBBbHNvIHNlZSB0aGUgW3RlbXBsYXRlIGZvciByZXN1bHRzIGRlbW9dKCMvY29tcG9uZW50cy90eXBlYWhlYWQvZXhhbXBsZXMjdGVtcGxhdGUpIGZvciBtb3JlIGRldGFpbHMuXG4gICAqL1xuICBASW5wdXQoKSByZXN1bHRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8UmVzdWx0VGVtcGxhdGVDb250ZXh0PjtcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB3aWxsIHNob3cgdGhlIGhpbnQgaW4gdGhlIGA8aW5wdXQ+YCB3aGVuIGFuIGl0ZW0gaW4gdGhlIHJlc3VsdCBsaXN0IG1hdGNoZXMuXG4gICAqL1xuICBASW5wdXQoKSBzaG93SGludDogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHByZWZlcnJlZCBwbGFjZW1lbnQgb2YgdGhlIHR5cGVhaGVhZC5cbiAgICpcbiAgICogUG9zc2libGUgdmFsdWVzIGFyZSBgXCJ0b3BcImAsIGBcInRvcC1sZWZ0XCJgLCBgXCJ0b3AtcmlnaHRcImAsIGBcImJvdHRvbVwiYCwgYFwiYm90dG9tLWxlZnRcImAsXG4gICAqIGBcImJvdHRvbS1yaWdodFwiYCwgYFwibGVmdFwiYCwgYFwibGVmdC10b3BcImAsIGBcImxlZnQtYm90dG9tXCJgLCBgXCJyaWdodFwiYCwgYFwicmlnaHQtdG9wXCJgLFxuICAgKiBgXCJyaWdodC1ib3R0b21cImBcbiAgICpcbiAgICogQWNjZXB0cyBhbiBhcnJheSBvZiBzdHJpbmdzIG9yIGEgc3RyaW5nIHdpdGggc3BhY2Ugc2VwYXJhdGVkIHBvc3NpYmxlIHZhbHVlcy5cbiAgICpcbiAgICogVGhlIGRlZmF1bHQgb3JkZXIgb2YgcHJlZmVyZW5jZSBpcyBgXCJib3R0b20tbGVmdCBib3R0b20tcmlnaHQgdG9wLWxlZnQgdG9wLXJpZ2h0XCJgXG4gICAqXG4gICAqIFBsZWFzZSBzZWUgdGhlIFtwb3NpdGlvbmluZyBvdmVydmlld10oIy9wb3NpdGlvbmluZykgZm9yIG1vcmUgZGV0YWlscy5cbiAgICovXG4gIEBJbnB1dCgpIHBsYWNlbWVudDogUGxhY2VtZW50QXJyYXkgPSAnYm90dG9tLWxlZnQnO1xuXG4gIC8qKlxuICAgKiBBbiBldmVudCBlbWl0dGVkIHJpZ2h0IGJlZm9yZSBhbiBpdGVtIGlzIHNlbGVjdGVkIGZyb20gdGhlIHJlc3VsdCBsaXN0LlxuICAgKlxuICAgKiBFdmVudCBwYXlsb2FkIGlzIG9mIHR5cGUgW2BOZ2JUeXBlYWhlYWRTZWxlY3RJdGVtRXZlbnRgXSgjL2NvbXBvbmVudHMvdHlwZWFoZWFkL2FwaSNOZ2JUeXBlYWhlYWRTZWxlY3RJdGVtRXZlbnQpLlxuICAgKi9cbiAgQE91dHB1dCgpIHNlbGVjdEl0ZW0gPSBuZXcgRXZlbnRFbWl0dGVyPE5nYlR5cGVhaGVhZFNlbGVjdEl0ZW1FdmVudD4oKTtcblxuICBhY3RpdmVEZXNjZW5kYW50OiBzdHJpbmc7XG4gIHBvcHVwSWQgPSBgbmdiLXR5cGVhaGVhZC0ke25leHRXaW5kb3dJZCsrfWA7XG5cbiAgcHJpdmF0ZSBfb25Ub3VjaGVkID0gKCkgPT4ge307XG4gIHByaXZhdGUgX29uQ2hhbmdlID0gKF86IGFueSkgPT4ge307XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+LCBwcml2YXRlIF92aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgICAgcHJpdmF0ZSBfcmVuZGVyZXI6IFJlbmRlcmVyMiwgcHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yLCBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICAgIGNvbmZpZzogTmdiVHlwZWFoZWFkQ29uZmlnLCBuZ1pvbmU6IE5nWm9uZSwgcHJpdmF0ZSBfbGl2ZTogTGl2ZSwgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBfZG9jdW1lbnQ6IGFueSxcbiAgICAgIHByaXZhdGUgX25nWm9uZTogTmdab25lLCBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgX2FwcGxpY2F0aW9uUmVmOiBBcHBsaWNhdGlvblJlZikge1xuICAgIHRoaXMuY29udGFpbmVyID0gY29uZmlnLmNvbnRhaW5lcjtcbiAgICB0aGlzLmVkaXRhYmxlID0gY29uZmlnLmVkaXRhYmxlO1xuICAgIHRoaXMuZm9jdXNGaXJzdCA9IGNvbmZpZy5mb2N1c0ZpcnN0O1xuICAgIHRoaXMuc2hvd0hpbnQgPSBjb25maWcuc2hvd0hpbnQ7XG4gICAgdGhpcy5wbGFjZW1lbnQgPSBjb25maWcucGxhY2VtZW50O1xuXG4gICAgdGhpcy5fdmFsdWVDaGFuZ2VzID0gZnJvbUV2ZW50PEV2ZW50PihfZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnaW5wdXQnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucGlwZShtYXAoJGV2ZW50ID0+ICgkZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlKSk7XG5cbiAgICB0aGlzLl9yZXN1YnNjcmliZVR5cGVhaGVhZCA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XG5cbiAgICB0aGlzLl9wb3B1cFNlcnZpY2UgPSBuZXcgUG9wdXBTZXJ2aWNlPE5nYlR5cGVhaGVhZFdpbmRvdz4oXG4gICAgICAgIE5nYlR5cGVhaGVhZFdpbmRvdywgX2luamVjdG9yLCBfdmlld0NvbnRhaW5lclJlZiwgX3JlbmRlcmVyLCBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIF9hcHBsaWNhdGlvblJlZik7XG5cbiAgICB0aGlzLl96b25lU3Vic2NyaXB0aW9uID0gbmdab25lLm9uU3RhYmxlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1BvcHVwT3BlbigpKSB7XG4gICAgICAgIHBvc2l0aW9uRWxlbWVudHMoXG4gICAgICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHRoaXMuX3dpbmRvd1JlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LCB0aGlzLnBsYWNlbWVudCxcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyID09PSAnYm9keScpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXRWYWx1ZXMkID0gdGhpcy5fdmFsdWVDaGFuZ2VzLnBpcGUodGFwKHZhbHVlID0+IHtcbiAgICAgIHRoaXMuX2lucHV0VmFsdWVCYWNrdXAgPSB0aGlzLnNob3dIaW50ID8gdmFsdWUgOiBudWxsO1xuICAgICAgaWYgKHRoaXMuZWRpdGFibGUpIHtcbiAgICAgICAgdGhpcy5fb25DaGFuZ2UodmFsdWUpO1xuICAgICAgfVxuICAgIH0pKTtcbiAgICBjb25zdCByZXN1bHRzJCA9IGlucHV0VmFsdWVzJC5waXBlKHRoaXMubmdiVHlwZWFoZWFkKTtcbiAgICBjb25zdCBwcm9jZXNzZWRSZXN1bHRzJCA9IHJlc3VsdHMkLnBpcGUodGFwKCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5lZGl0YWJsZSkge1xuICAgICAgICB0aGlzLl9vbkNoYW5nZSh1bmRlZmluZWQpO1xuICAgICAgfVxuICAgIH0pKTtcbiAgICBjb25zdCB1c2VySW5wdXQkID0gdGhpcy5fcmVzdWJzY3JpYmVUeXBlYWhlYWQucGlwZShzd2l0Y2hNYXAoKCkgPT4gcHJvY2Vzc2VkUmVzdWx0cyQpKTtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24gPSB0aGlzLl9zdWJzY3JpYmVUb1VzZXJJbnB1dCh1c2VySW5wdXQkKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2Nsb3NlUG9wdXAoKTtcbiAgICB0aGlzLl91bnN1YnNjcmliZUZyb21Vc2VySW5wdXQoKTtcbiAgICB0aGlzLl96b25lU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IGFueSkgPT4gYW55KTogdm9pZCB7IHRoaXMuX29uQ2hhbmdlID0gZm47IH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gYW55KTogdm9pZCB7IHRoaXMuX29uVG91Y2hlZCA9IGZuOyB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZSkge1xuICAgIHRoaXMuX3dyaXRlSW5wdXRWYWx1ZSh0aGlzLl9mb3JtYXRJdGVtRm9ySW5wdXQodmFsdWUpKTtcbiAgICBpZiAodGhpcy5zaG93SGludCkge1xuICAgICAgdGhpcy5faW5wdXRWYWx1ZUJhY2t1cCA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2Rpc2FibGVkJywgaXNEaXNhYmxlZCk7XG4gIH1cblxuICAvKipcbiAgICogRGlzbWlzc2VzIHR5cGVhaGVhZCBwb3B1cCB3aW5kb3dcbiAgICovXG4gIGRpc21pc3NQb3B1cCgpIHtcbiAgICBpZiAodGhpcy5pc1BvcHVwT3BlbigpKSB7XG4gICAgICB0aGlzLl9yZXN1YnNjcmliZVR5cGVhaGVhZC5uZXh0KG51bGwpO1xuICAgICAgdGhpcy5fY2xvc2VQb3B1cCgpO1xuICAgICAgaWYgKHRoaXMuc2hvd0hpbnQgJiYgdGhpcy5faW5wdXRWYWx1ZUJhY2t1cCAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLl93cml0ZUlucHV0VmFsdWUodGhpcy5faW5wdXRWYWx1ZUJhY2t1cCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSB0eXBlYWhlYWQgcG9wdXAgd2luZG93IGlzIGRpc3BsYXllZFxuICAgKi9cbiAgaXNQb3B1cE9wZW4oKSB7IHJldHVybiB0aGlzLl93aW5kb3dSZWYgIT0gbnVsbDsgfVxuXG4gIGhhbmRsZUJsdXIoKSB7XG4gICAgdGhpcy5fcmVzdWJzY3JpYmVUeXBlYWhlYWQubmV4dChudWxsKTtcbiAgICB0aGlzLl9vblRvdWNoZWQoKTtcbiAgfVxuXG4gIGhhbmRsZUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuaXNQb3B1cE9wZW4oKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpkZXByZWNhdGlvblxuICAgIHN3aXRjaCAoZXZlbnQud2hpY2gpIHtcbiAgICAgIGNhc2UgS2V5LkFycm93RG93bjpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5fd2luZG93UmVmLmluc3RhbmNlLm5leHQoKTtcbiAgICAgICAgdGhpcy5fc2hvd0hpbnQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEtleS5BcnJvd1VwOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLl93aW5kb3dSZWYuaW5zdGFuY2UucHJldigpO1xuICAgICAgICB0aGlzLl9zaG93SGludCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgS2V5LkVudGVyOlxuICAgICAgY2FzZSBLZXkuVGFiOlxuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLl93aW5kb3dSZWYuaW5zdGFuY2UuZ2V0QWN0aXZlKCk7XG4gICAgICAgIGlmIChpc0RlZmluZWQocmVzdWx0KSkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgdGhpcy5fc2VsZWN0UmVzdWx0KHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2xvc2VQb3B1cCgpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9vcGVuUG9wdXAoKSB7XG4gICAgaWYgKCF0aGlzLmlzUG9wdXBPcGVuKCkpIHtcbiAgICAgIHRoaXMuX2lucHV0VmFsdWVCYWNrdXAgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gICAgICB0aGlzLl93aW5kb3dSZWYgPSB0aGlzLl9wb3B1cFNlcnZpY2Uub3BlbigpO1xuICAgICAgdGhpcy5fd2luZG93UmVmLmluc3RhbmNlLmlkID0gdGhpcy5wb3B1cElkO1xuICAgICAgdGhpcy5fd2luZG93UmVmLmluc3RhbmNlLnNlbGVjdEV2ZW50LnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHRoaXMuX3NlbGVjdFJlc3VsdENsb3NlUG9wdXAocmVzdWx0KSk7XG4gICAgICB0aGlzLl93aW5kb3dSZWYuaW5zdGFuY2UuYWN0aXZlQ2hhbmdlRXZlbnQuc3Vic2NyaWJlKChhY3RpdmVJZDogc3RyaW5nKSA9PiB0aGlzLmFjdGl2ZURlc2NlbmRhbnQgPSBhY3RpdmVJZCk7XG5cbiAgICAgIGlmICh0aGlzLmNvbnRhaW5lciA9PT0gJ2JvZHknKSB7XG4gICAgICAgIHdpbmRvdy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuY29udGFpbmVyKS5hcHBlbmRDaGlsZCh0aGlzLl93aW5kb3dSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgICBuZ2JBdXRvQ2xvc2UoXG4gICAgICAgICAgdGhpcy5fbmdab25lLCB0aGlzLl9kb2N1bWVudCwgJ291dHNpZGUnLCAoKSA9PiB0aGlzLmRpc21pc3NQb3B1cCgpLCB0aGlzLl9jbG9zZWQkLFxuICAgICAgICAgIFt0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHRoaXMuX3dpbmRvd1JlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50XSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfY2xvc2VQb3B1cCgpIHtcbiAgICB0aGlzLl9jbG9zZWQkLm5leHQoKTtcbiAgICB0aGlzLl9wb3B1cFNlcnZpY2UuY2xvc2UoKTtcbiAgICB0aGlzLl93aW5kb3dSZWYgPSBudWxsO1xuICAgIHRoaXMuYWN0aXZlRGVzY2VuZGFudCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgX3NlbGVjdFJlc3VsdChyZXN1bHQ6IGFueSkge1xuICAgIGxldCBkZWZhdWx0UHJldmVudGVkID0gZmFsc2U7XG4gICAgdGhpcy5zZWxlY3RJdGVtLmVtaXQoe2l0ZW06IHJlc3VsdCwgcHJldmVudERlZmF1bHQ6ICgpID0+IHsgZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7IH19KTtcbiAgICB0aGlzLl9yZXN1YnNjcmliZVR5cGVhaGVhZC5uZXh0KG51bGwpO1xuXG4gICAgaWYgKCFkZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICB0aGlzLndyaXRlVmFsdWUocmVzdWx0KTtcbiAgICAgIHRoaXMuX29uQ2hhbmdlKHJlc3VsdCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc2VsZWN0UmVzdWx0Q2xvc2VQb3B1cChyZXN1bHQ6IGFueSkge1xuICAgIHRoaXMuX3NlbGVjdFJlc3VsdChyZXN1bHQpO1xuICAgIHRoaXMuX2Nsb3NlUG9wdXAoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3Nob3dIaW50KCkge1xuICAgIGlmICh0aGlzLnNob3dIaW50ICYmIHRoaXMuX3dpbmRvd1JlZi5pbnN0YW5jZS5oYXNBY3RpdmUoKSAmJiB0aGlzLl9pbnB1dFZhbHVlQmFja3VwICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IHVzZXJJbnB1dExvd2VyQ2FzZSA9IHRoaXMuX2lucHV0VmFsdWVCYWNrdXAudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IGZvcm1hdHRlZFZhbCA9IHRoaXMuX2Zvcm1hdEl0ZW1Gb3JJbnB1dCh0aGlzLl93aW5kb3dSZWYuaW5zdGFuY2UuZ2V0QWN0aXZlKCkpO1xuXG4gICAgICBpZiAodXNlcklucHV0TG93ZXJDYXNlID09PSBmb3JtYXR0ZWRWYWwuc3Vic3RyKDAsIHRoaXMuX2lucHV0VmFsdWVCYWNrdXAubGVuZ3RoKS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIHRoaXMuX3dyaXRlSW5wdXRWYWx1ZSh0aGlzLl9pbnB1dFZhbHVlQmFja3VwICsgZm9ybWF0dGVkVmFsLnN1YnN0cih0aGlzLl9pbnB1dFZhbHVlQmFja3VwLmxlbmd0aCkpO1xuICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnRbJ3NldFNlbGVjdGlvblJhbmdlJ10uYXBwbHkoXG4gICAgICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIFt0aGlzLl9pbnB1dFZhbHVlQmFja3VwLmxlbmd0aCwgZm9ybWF0dGVkVmFsLmxlbmd0aF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fd3JpdGVJbnB1dFZhbHVlKGZvcm1hdHRlZFZhbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZm9ybWF0SXRlbUZvcklucHV0KGl0ZW06IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGl0ZW0gIT0gbnVsbCAmJiB0aGlzLmlucHV0Rm9ybWF0dGVyID8gdGhpcy5pbnB1dEZvcm1hdHRlcihpdGVtKSA6IHRvU3RyaW5nKGl0ZW0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfd3JpdGVJbnB1dFZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICd2YWx1ZScsIHRvU3RyaW5nKHZhbHVlKSk7XG4gIH1cblxuICBwcml2YXRlIF9zdWJzY3JpYmVUb1VzZXJJbnB1dCh1c2VySW5wdXQkOiBPYnNlcnZhYmxlPGFueVtdPik6IFN1YnNjcmlwdGlvbiB7XG4gICAgcmV0dXJuIHVzZXJJbnB1dCQuc3Vic2NyaWJlKChyZXN1bHRzKSA9PiB7XG4gICAgICBpZiAoIXJlc3VsdHMgfHwgcmVzdWx0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5fY2xvc2VQb3B1cCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fb3BlblBvcHVwKCk7XG4gICAgICAgIHRoaXMuX3dpbmRvd1JlZi5pbnN0YW5jZS5mb2N1c0ZpcnN0ID0gdGhpcy5mb2N1c0ZpcnN0O1xuICAgICAgICB0aGlzLl93aW5kb3dSZWYuaW5zdGFuY2UucmVzdWx0cyA9IHJlc3VsdHM7XG4gICAgICAgIHRoaXMuX3dpbmRvd1JlZi5pbnN0YW5jZS50ZXJtID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlO1xuICAgICAgICBpZiAodGhpcy5yZXN1bHRGb3JtYXR0ZXIpIHtcbiAgICAgICAgICB0aGlzLl93aW5kb3dSZWYuaW5zdGFuY2UuZm9ybWF0dGVyID0gdGhpcy5yZXN1bHRGb3JtYXR0ZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucmVzdWx0VGVtcGxhdGUpIHtcbiAgICAgICAgICB0aGlzLl93aW5kb3dSZWYuaW5zdGFuY2UucmVzdWx0VGVtcGxhdGUgPSB0aGlzLnJlc3VsdFRlbXBsYXRlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3dpbmRvd1JlZi5pbnN0YW5jZS5yZXNldEFjdGl2ZSgpO1xuXG4gICAgICAgIC8vIFRoZSBvYnNlcnZhYmxlIHN0cmVhbSB3ZSBhcmUgc3Vic2NyaWJpbmcgdG8gbWlnaHQgaGF2ZSBhc3luYyBzdGVwc1xuICAgICAgICAvLyBhbmQgaWYgYSBjb21wb25lbnQgY29udGFpbmluZyB0eXBlYWhlYWQgaXMgdXNpbmcgdGhlIE9uUHVzaCBzdHJhdGVneVxuICAgICAgICAvLyB0aGUgY2hhbmdlIGRldGVjdGlvbiB0dXJuIHdvdWxkbid0IGJlIGludm9rZWQgYXV0b21hdGljYWxseS5cbiAgICAgICAgdGhpcy5fd2luZG93UmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICB0aGlzLl9zaG93SGludCgpO1xuICAgICAgfVxuXG4gICAgICAvLyBsaXZlIGFubm91bmNlclxuICAgICAgY29uc3QgY291bnQgPSByZXN1bHRzID8gcmVzdWx0cy5sZW5ndGggOiAwO1xuICAgICAgdGhpcy5fbGl2ZS5zYXkoY291bnQgPT09IDAgPyAnTm8gcmVzdWx0cyBhdmFpbGFibGUnIDogYCR7Y291bnR9IHJlc3VsdCR7Y291bnQgPT09IDEgPyAnJyA6ICdzJ30gYXZhaWxhYmxlYCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF91bnN1YnNjcmliZUZyb21Vc2VySW5wdXQoKSB7XG4gICAgaWYgKHRoaXMuX3N1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbiA9IG51bGw7XG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/typeahead/typeahead.module.js b/dist/sunbird-ui-components/esm2015/typeahead/typeahead.module.js new file mode 100644 index 0000000..c3fc879 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/typeahead/typeahead.module.js @@ -0,0 +1,24 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { NgbHighlight } from './highlight'; +import { NgbTypeaheadWindow } from './typeahead-window'; +import { NgbTypeahead } from './typeahead'; +export { NgbHighlight } from './highlight'; +export { NgbTypeaheadWindow } from './typeahead-window'; +export { NgbTypeaheadConfig } from './typeahead-config'; +export { NgbTypeahead } from './typeahead'; +export class NgbTypeaheadModule { +} +NgbTypeaheadModule.decorators = [ + { type: NgModule, args: [{ + declarations: [NgbTypeahead, NgbHighlight, NgbTypeaheadWindow], + exports: [NgbTypeahead, NgbHighlight], + imports: [CommonModule], + entryComponents: [NgbTypeaheadWindow] + },] } +]; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWFoZWFkLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbInR5cGVhaGVhZC90eXBlYWhlYWQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUU3QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQ3RELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFekMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RCxPQUFPLEVBQUMsWUFBWSxFQUE4QixNQUFNLGFBQWEsQ0FBQztBQVF0RSxNQUFNLE9BQU8sa0JBQWtCOzs7WUFOOUIsUUFBUSxTQUFDO2dCQUNSLFlBQVksRUFBRSxDQUFDLFlBQVksRUFBRSxZQUFZLEVBQUUsa0JBQWtCLENBQUM7Z0JBQzlELE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUM7Z0JBQ3JDLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztnQkFDdkIsZUFBZSxFQUFFLENBQUMsa0JBQWtCLENBQUM7YUFDdEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge05nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQge05nYkhpZ2hsaWdodH0gZnJvbSAnLi9oaWdobGlnaHQnO1xuaW1wb3J0IHtOZ2JUeXBlYWhlYWRXaW5kb3d9IGZyb20gJy4vdHlwZWFoZWFkLXdpbmRvdyc7XG5pbXBvcnQge05nYlR5cGVhaGVhZH0gZnJvbSAnLi90eXBlYWhlYWQnO1xuXG5leHBvcnQge05nYkhpZ2hsaWdodH0gZnJvbSAnLi9oaWdobGlnaHQnO1xuZXhwb3J0IHtOZ2JUeXBlYWhlYWRXaW5kb3d9IGZyb20gJy4vdHlwZWFoZWFkLXdpbmRvdyc7XG5leHBvcnQge05nYlR5cGVhaGVhZENvbmZpZ30gZnJvbSAnLi90eXBlYWhlYWQtY29uZmlnJztcbmV4cG9ydCB7TmdiVHlwZWFoZWFkLCBOZ2JUeXBlYWhlYWRTZWxlY3RJdGVtRXZlbnR9IGZyb20gJy4vdHlwZWFoZWFkJztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbTmdiVHlwZWFoZWFkLCBOZ2JIaWdobGlnaHQsIE5nYlR5cGVhaGVhZFdpbmRvd10sXG4gIGV4cG9ydHM6IFtOZ2JUeXBlYWhlYWQsIE5nYkhpZ2hsaWdodF0sXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBlbnRyeUNvbXBvbmVudHM6IFtOZ2JUeXBlYWhlYWRXaW5kb3ddXG59KVxuZXhwb3J0IGNsYXNzIE5nYlR5cGVhaGVhZE1vZHVsZSB7XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/util/accessibility/live.js b/dist/sunbird-ui-components/esm2015/util/accessibility/live.js new file mode 100644 index 0000000..3893a22 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/util/accessibility/live.js @@ -0,0 +1,98 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Injectable, Inject, InjectionToken } from '@angular/core'; +import { DOCUMENT } from '@angular/common'; +import * as i0 from "@angular/core"; +import * as i1 from "@angular/common"; +/** @type {?} */ +export const ARIA_LIVE_DELAY = new InjectionToken('live announcer delay', { providedIn: 'root', factory: ARIA_LIVE_DELAY_FACTORY }); +/** + * @return {?} + */ +export function ARIA_LIVE_DELAY_FACTORY() { + return 100; +} +/** + * @param {?} document + * @param {?=} lazyCreate + * @return {?} + */ +function getLiveElement(document, lazyCreate = false) { + /** @type {?} */ + let element = (/** @type {?} */ (document.body.querySelector('#ngb-live'))); + if (element == null && lazyCreate) { + element = document.createElement('div'); + element.setAttribute('id', 'ngb-live'); + element.setAttribute('aria-live', 'polite'); + element.setAttribute('aria-atomic', 'true'); + element.classList.add('sr-only'); + document.body.appendChild(element); + } + return element; +} +export class Live { + /** + * @param {?} _document + * @param {?} _delay + */ + constructor(_document, _delay) { + this._document = _document; + this._delay = _delay; + } + /** + * @return {?} + */ + ngOnDestroy() { + /** @type {?} */ + const element = getLiveElement(this._document); + if (element) { + element.parentElement.removeChild(element); + } + } + /** + * @param {?} message + * @return {?} + */ + say(message) { + /** @type {?} */ + const element = getLiveElement(this._document, true); + /** @type {?} */ + const delay = this._delay; + element.textContent = ''; + /** @type {?} */ + const setText = (/** + * @return {?} + */ + () => element.textContent = message); + if (delay === null) { + setText(); + } + else { + setTimeout(setText, delay); + } + } +} +Live.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } +]; +/** @nocollapse */ +Live.ctorParameters = () => [ + { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }, + { type: undefined, decorators: [{ type: Inject, args: [ARIA_LIVE_DELAY,] }] } +]; +/** @nocollapse */ Live.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function Live_Factory() { return new Live(i0.ɵɵinject(i1.DOCUMENT), i0.ɵɵinject(ARIA_LIVE_DELAY)); }, token: Live, providedIn: "root" }); +if (false) { + /** + * @type {?} + * @private + */ + Live.prototype._document; + /** + * @type {?} + * @private + */ + Live.prototype._delay; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbInV0aWwvYWNjZXNzaWJpbGl0eS9saXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDNUUsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlCQUFpQixDQUFDOzs7O0FBT3pDLE1BQU0sT0FBTyxlQUFlLEdBQUcsSUFBSSxjQUFjLENBQzdDLHNCQUFzQixFQUFFLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUMsQ0FBQzs7OztBQUNuRixNQUFNLFVBQVUsdUJBQXVCO0lBQ3JDLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQzs7Ozs7O0FBR0QsU0FBUyxjQUFjLENBQUMsUUFBYSxFQUFFLFVBQVUsR0FBRyxLQUFLOztRQUNuRCxPQUFPLEdBQUcsbUJBQUEsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEVBQWU7SUFFckUsSUFBSSxPQUFPLElBQUksSUFBSSxJQUFJLFVBQVUsRUFBRTtRQUNqQyxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV4QyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN2QyxPQUFPLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM1QyxPQUFPLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUU1QyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVqQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUNwQztJQUVELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFLRCxNQUFNLE9BQU8sSUFBSTs7Ozs7SUFDZixZQUFzQyxTQUFjLEVBQW1DLE1BQVc7UUFBNUQsY0FBUyxHQUFULFNBQVMsQ0FBSztRQUFtQyxXQUFNLEdBQU4sTUFBTSxDQUFLO0lBQUcsQ0FBQzs7OztJQUV0RyxXQUFXOztjQUNILE9BQU8sR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUM5QyxJQUFJLE9BQU8sRUFBRTtZQUNYLE9BQU8sQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzVDO0lBQ0gsQ0FBQzs7Ozs7SUFFRCxHQUFHLENBQUMsT0FBZTs7Y0FDWCxPQUFPLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDOztjQUM5QyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU07UUFFekIsT0FBTyxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7O2NBQ25CLE9BQU87OztRQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFBO1FBQ25ELElBQUksS0FBSyxLQUFLLElBQUksRUFBRTtZQUNsQixPQUFPLEVBQUUsQ0FBQztTQUNYO2FBQU07WUFDTCxVQUFVLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQzVCO0lBQ0gsQ0FBQzs7O1lBdEJGLFVBQVUsU0FBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUM7Ozs7NENBRWpCLE1BQU0sU0FBQyxRQUFROzRDQUEyQixNQUFNLFNBQUMsZUFBZTs7Ozs7Ozs7SUFBakUseUJBQXdDOzs7OztJQUFFLHNCQUE0QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgSW5qZWN0LCBJbmplY3Rpb25Ub2tlbiwgT25EZXN0cm95fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RE9DVU1FTlR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cblxuXG4vLyB1c2VmdWxuZXNzIChhbmQgZGVmYXVsdCB2YWx1ZSkgb2YgZGVsYXkgZG9jdW1lbnRlZCBpbiBNYXRlcmlhbCdzIENES1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvbWF0ZXJpYWwyL2Jsb2IvNjQwNWRhOWI4ZTg1MzJhN2U1Yzg1NGM5MjBlZTE4MTVjMjc1ZDczNC9zcmMvY2RrL2ExMXkvbGl2ZS1hbm5vdW5jZXIvbGl2ZS1hbm5vdW5jZXIudHMjTDUwXG5leHBvcnQgdHlwZSBBUklBX0xJVkVfREVMQVlfVFlQRSA9IG51bWJlciB8IG51bGw7XG5leHBvcnQgY29uc3QgQVJJQV9MSVZFX0RFTEFZID0gbmV3IEluamVjdGlvblRva2VuPEFSSUFfTElWRV9ERUxBWV9UWVBFPihcbiAgICAnbGl2ZSBhbm5vdW5jZXIgZGVsYXknLCB7cHJvdmlkZWRJbjogJ3Jvb3QnLCBmYWN0b3J5OiBBUklBX0xJVkVfREVMQVlfRkFDVE9SWX0pO1xuZXhwb3J0IGZ1bmN0aW9uIEFSSUFfTElWRV9ERUxBWV9GQUNUT1JZKCk6IG51bWJlciB7XG4gIHJldHVybiAxMDA7XG59XG5cblxuZnVuY3Rpb24gZ2V0TGl2ZUVsZW1lbnQoZG9jdW1lbnQ6IGFueSwgbGF6eUNyZWF0ZSA9IGZhbHNlKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3IoJyNuZ2ItbGl2ZScpIGFzIEhUTUxFbGVtZW50O1xuXG4gIGlmIChlbGVtZW50ID09IG51bGwgJiYgbGF6eUNyZWF0ZSkge1xuICAgIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdpZCcsICduZ2ItbGl2ZScpO1xuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWxpdmUnLCAncG9saXRlJyk7XG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtYXRvbWljJywgJ3RydWUnKTtcblxuICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnc3Itb25seScpO1xuXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbGVtZW50KTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50O1xufVxuXG5cblxuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgTGl2ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgX2RvY3VtZW50OiBhbnksIEBJbmplY3QoQVJJQV9MSVZFX0RFTEFZKSBwcml2YXRlIF9kZWxheTogYW55KSB7fVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBnZXRMaXZlRWxlbWVudCh0aGlzLl9kb2N1bWVudCk7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIGVsZW1lbnQucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChlbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICBzYXkobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGdldExpdmVFbGVtZW50KHRoaXMuX2RvY3VtZW50LCB0cnVlKTtcbiAgICBjb25zdCBkZWxheSA9IHRoaXMuX2RlbGF5O1xuXG4gICAgZWxlbWVudC50ZXh0Q29udGVudCA9ICcnO1xuICAgIGNvbnN0IHNldFRleHQgPSAoKSA9PiBlbGVtZW50LnRleHRDb250ZW50ID0gbWVzc2FnZTtcbiAgICBpZiAoZGVsYXkgPT09IG51bGwpIHtcbiAgICAgIHNldFRleHQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0VGltZW91dChzZXRUZXh0LCBkZWxheSk7XG4gICAgfVxuICB9XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/util/autoclose.js b/dist/sunbird-ui-components/esm2015/util/autoclose.js new file mode 100644 index 0000000..6ce1ea8 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/util/autoclose.js @@ -0,0 +1,105 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { fromEvent, race } from 'rxjs'; +import { delay, filter, map, takeUntil, withLatestFrom } from 'rxjs/operators'; +import { Key } from './key'; +import { closest } from './util'; +/** @type {?} */ +const isContainedIn = (/** + * @param {?} element + * @param {?=} array + * @return {?} + */ +(element, array) => array ? array.some((/** + * @param {?} item + * @return {?} + */ +item => item.contains(element))) : false); +const ɵ0 = isContainedIn; +/** @type {?} */ +const matchesSelectorIfAny = (/** + * @param {?} element + * @param {?=} selector + * @return {?} + */ +(element, selector) => !selector || closest(element, selector) != null); +const ɵ1 = matchesSelectorIfAny; +// we'll have to use 'touch' events instead of 'mouse' events on iOS and add a more significant delay +// to avoid re-opening when handling (click) on a toggling element +// TODO: use proper Angular platform detection when NgbAutoClose becomes a service and we can inject PLATFORM_ID +/** @type {?} */ +let iOS = false; +if (typeof navigator !== 'undefined') { + iOS = !!navigator.userAgent && /iPad|iPhone|iPod/.test(navigator.userAgent); +} +/** + * @param {?} zone + * @param {?} document + * @param {?} type + * @param {?} close + * @param {?} closed$ + * @param {?} insideElements + * @param {?=} ignoreElements + * @param {?=} insideSelector + * @return {?} + */ +export function ngbAutoClose(zone, document, type, close, closed$, insideElements, ignoreElements, insideSelector) { + // closing on ESC and outside clicks + if (type) { + zone.runOutsideAngular((/** + * @return {?} + */ + () => { + /** @type {?} */ + const shouldCloseOnClick = (/** + * @param {?} event + * @return {?} + */ + (event) => { + /** @type {?} */ + const element = (/** @type {?} */ (event.target)); + if ((event instanceof MouseEvent && event.button === 2) || isContainedIn(element, ignoreElements)) { + return false; + } + if (type === 'inside') { + return isContainedIn(element, insideElements) && matchesSelectorIfAny(element, insideSelector); + } + else if (type === 'outside') { + return !isContainedIn(element, insideElements); + } + else /* if (type === true) */ { + return matchesSelectorIfAny(element, insideSelector) || !isContainedIn(element, insideElements); + } + }); + /** @type {?} */ + const escapes$ = fromEvent(document, 'keydown') + .pipe(takeUntil(closed$), + // tslint:disable-next-line:deprecation + filter((/** + * @param {?} e + * @return {?} + */ + e => e.which === Key.Escape))); + // we have to pre-calculate 'shouldCloseOnClick' on 'mousedown/touchstart', + // because on 'mouseup/touchend' DOM nodes might be detached + /** @type {?} */ + const mouseDowns$ = fromEvent(document, iOS ? 'touchstart' : 'mousedown') + .pipe(map(shouldCloseOnClick), takeUntil(closed$)); + /** @type {?} */ + const closeableClicks$ = (/** @type {?} */ (fromEvent(document, iOS ? 'touchend' : 'mouseup') + .pipe(withLatestFrom(mouseDowns$), filter((/** + * @param {?} __0 + * @return {?} + */ + ([_, shouldClose]) => shouldClose)), delay(iOS ? 16 : 0), takeUntil(closed$)))); + race([escapes$, closeableClicks$]).subscribe((/** + * @return {?} + */ + () => zone.run(close))); + })); + } +} +export { ɵ0, ɵ1 }; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2Nsb3NlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsidXRpbC9hdXRvY2xvc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUNBLE9BQU8sRUFBQyxTQUFTLEVBQWMsSUFBSSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2pELE9BQU8sRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0UsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sUUFBUSxDQUFDOztNQUV6QixhQUFhOzs7OztBQUFHLENBQUMsT0FBb0IsRUFBRSxLQUFxQixFQUFFLEVBQUUsQ0FDbEUsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSTs7OztBQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUE7OztNQUV4RCxvQkFBb0I7Ozs7O0FBQUcsQ0FBQyxPQUFvQixFQUFFLFFBQWlCLEVBQUUsRUFBRSxDQUNyRSxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQTs7Ozs7O0lBSy9DLEdBQUcsR0FBRyxLQUFLO0FBQ2YsSUFBSSxPQUFPLFNBQVMsS0FBSyxXQUFXLEVBQUU7SUFDcEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7Q0FDN0U7Ozs7Ozs7Ozs7OztBQUVELE1BQU0sVUFBVSxZQUFZLENBQ3hCLElBQVksRUFBRSxRQUFhLEVBQUUsSUFBb0MsRUFBRSxLQUFpQixFQUFFLE9BQXdCLEVBQzlHLGNBQTZCLEVBQUUsY0FBOEIsRUFBRSxjQUF1QjtJQUN4RixvQ0FBb0M7SUFDcEMsSUFBSSxJQUFJLEVBQUU7UUFDUixJQUFJLENBQUMsaUJBQWlCOzs7UUFBQyxHQUFHLEVBQUU7O2tCQUVwQixrQkFBa0I7Ozs7WUFBRyxDQUFDLEtBQThCLEVBQUUsRUFBRTs7c0JBQ3RELE9BQU8sR0FBRyxtQkFBQSxLQUFLLENBQUMsTUFBTSxFQUFlO2dCQUMzQyxJQUFJLENBQUMsS0FBSyxZQUFZLFVBQVUsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLEVBQUU7b0JBQ2pHLE9BQU8sS0FBSyxDQUFDO2lCQUNkO2dCQUNELElBQUksSUFBSSxLQUFLLFFBQVEsRUFBRTtvQkFDckIsT0FBTyxhQUFhLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxJQUFJLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztpQkFDaEc7cUJBQU0sSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFO29CQUM3QixPQUFPLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztpQkFDaEQ7cUJBQU0sd0JBQXdCLENBQUM7b0JBQzlCLE9BQU8sb0JBQW9CLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztpQkFDakc7WUFDSCxDQUFDLENBQUE7O2tCQUVLLFFBQVEsR0FBRyxTQUFTLENBQWdCLFFBQVEsRUFBRSxTQUFTLENBQUM7aUJBQ3hDLElBQUksQ0FDRCxTQUFTLENBQUMsT0FBTyxDQUFDO1lBQ2xCLHVDQUF1QztZQUN2QyxNQUFNOzs7O1lBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEdBQUcsQ0FBQyxNQUFNLEVBQUMsQ0FBQzs7OztrQkFLdkQsV0FBVyxHQUFHLFNBQVMsQ0FBYSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztpQkFDNUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQzs7a0JBRXBFLGdCQUFnQixHQUFHLG1CQUFBLFNBQVMsQ0FBYSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztpQkFDeEQsSUFBSSxDQUNELGNBQWMsQ0FBQyxXQUFXLENBQUMsRUFBRSxNQUFNOzs7O1lBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxFQUFFLENBQUMsV0FBVyxFQUFDLEVBQ3RFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQTBCO1lBR25HLElBQUksQ0FBUSxDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsU0FBUzs7O1lBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBQyxDQUFDO1FBQzdFLENBQUMsRUFBQyxDQUFDO0tBQ0o7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOZ1pvbmV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtmcm9tRXZlbnQsIE9ic2VydmFibGUsIHJhY2V9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtkZWxheSwgZmlsdGVyLCBtYXAsIHRha2VVbnRpbCwgd2l0aExhdGVzdEZyb219IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7S2V5fSBmcm9tICcuL2tleSc7XG5pbXBvcnQge2Nsb3Nlc3R9IGZyb20gJy4vdXRpbCc7XG5cbmNvbnN0IGlzQ29udGFpbmVkSW4gPSAoZWxlbWVudDogSFRNTEVsZW1lbnQsIGFycmF5PzogSFRNTEVsZW1lbnRbXSkgPT5cbiAgICBhcnJheSA/IGFycmF5LnNvbWUoaXRlbSA9PiBpdGVtLmNvbnRhaW5zKGVsZW1lbnQpKSA6IGZhbHNlO1xuXG5jb25zdCBtYXRjaGVzU2VsZWN0b3JJZkFueSA9IChlbGVtZW50OiBIVE1MRWxlbWVudCwgc2VsZWN0b3I/OiBzdHJpbmcpID0+XG4gICAgIXNlbGVjdG9yIHx8IGNsb3Nlc3QoZWxlbWVudCwgc2VsZWN0b3IpICE9IG51bGw7XG5cbi8vIHdlJ2xsIGhhdmUgdG8gdXNlICd0b3VjaCcgZXZlbnRzIGluc3RlYWQgb2YgJ21vdXNlJyBldmVudHMgb24gaU9TIGFuZCBhZGQgYSBtb3JlIHNpZ25pZmljYW50IGRlbGF5XG4vLyB0byBhdm9pZCByZS1vcGVuaW5nIHdoZW4gaGFuZGxpbmcgKGNsaWNrKSBvbiBhIHRvZ2dsaW5nIGVsZW1lbnRcbi8vIFRPRE86IHVzZSBwcm9wZXIgQW5ndWxhciBwbGF0Zm9ybSBkZXRlY3Rpb24gd2hlbiBOZ2JBdXRvQ2xvc2UgYmVjb21lcyBhIHNlcnZpY2UgYW5kIHdlIGNhbiBpbmplY3QgUExBVEZPUk1fSURcbmxldCBpT1MgPSBmYWxzZTtcbmlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJykge1xuICBpT1MgPSAhIW5hdmlnYXRvci51c2VyQWdlbnQgJiYgL2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZ2JBdXRvQ2xvc2UoXG4gICAgem9uZTogTmdab25lLCBkb2N1bWVudDogYW55LCB0eXBlOiBib29sZWFuIHwgJ2luc2lkZScgfCAnb3V0c2lkZScsIGNsb3NlOiAoKSA9PiB2b2lkLCBjbG9zZWQkOiBPYnNlcnZhYmxlPGFueT4sXG4gICAgaW5zaWRlRWxlbWVudHM6IEhUTUxFbGVtZW50W10sIGlnbm9yZUVsZW1lbnRzPzogSFRNTEVsZW1lbnRbXSwgaW5zaWRlU2VsZWN0b3I/OiBzdHJpbmcpIHtcbiAgLy8gY2xvc2luZyBvbiBFU0MgYW5kIG91dHNpZGUgY2xpY2tzXG4gIGlmICh0eXBlKSB7XG4gICAgem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG5cbiAgICAgIGNvbnN0IHNob3VsZENsb3NlT25DbGljayA9IChldmVudDogTW91c2VFdmVudCB8IFRvdWNoRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgaWYgKChldmVudCBpbnN0YW5jZW9mIE1vdXNlRXZlbnQgJiYgZXZlbnQuYnV0dG9uID09PSAyKSB8fCBpc0NvbnRhaW5lZEluKGVsZW1lbnQsIGlnbm9yZUVsZW1lbnRzKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZSA9PT0gJ2luc2lkZScpIHtcbiAgICAgICAgICByZXR1cm4gaXNDb250YWluZWRJbihlbGVtZW50LCBpbnNpZGVFbGVtZW50cykgJiYgbWF0Y2hlc1NlbGVjdG9ySWZBbnkoZWxlbWVudCwgaW5zaWRlU2VsZWN0b3IpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvdXRzaWRlJykge1xuICAgICAgICAgIHJldHVybiAhaXNDb250YWluZWRJbihlbGVtZW50LCBpbnNpZGVFbGVtZW50cyk7XG4gICAgICAgIH0gZWxzZSAvKiBpZiAodHlwZSA9PT0gdHJ1ZSkgKi8ge1xuICAgICAgICAgIHJldHVybiBtYXRjaGVzU2VsZWN0b3JJZkFueShlbGVtZW50LCBpbnNpZGVTZWxlY3RvcikgfHwgIWlzQ29udGFpbmVkSW4oZWxlbWVudCwgaW5zaWRlRWxlbWVudHMpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBlc2NhcGVzJCA9IGZyb21FdmVudDxLZXlib2FyZEV2ZW50Pihkb2N1bWVudCwgJ2tleWRvd24nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFrZVVudGlsKGNsb3NlZCQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpkZXByZWNhdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihlID0+IGUud2hpY2ggPT09IEtleS5Fc2NhcGUpKTtcblxuXG4gICAgICAvLyB3ZSBoYXZlIHRvIHByZS1jYWxjdWxhdGUgJ3Nob3VsZENsb3NlT25DbGljaycgb24gJ21vdXNlZG93bi90b3VjaHN0YXJ0JyxcbiAgICAgIC8vIGJlY2F1c2Ugb24gJ21vdXNldXAvdG91Y2hlbmQnIERPTSBub2RlcyBtaWdodCBiZSBkZXRhY2hlZFxuICAgICAgY29uc3QgbW91c2VEb3ducyQgPSBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZG9jdW1lbnQsIGlPUyA/ICd0b3VjaHN0YXJ0JyA6ICdtb3VzZWRvd24nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUobWFwKHNob3VsZENsb3NlT25DbGljayksIHRha2VVbnRpbChjbG9zZWQkKSk7XG5cbiAgICAgIGNvbnN0IGNsb3NlYWJsZUNsaWNrcyQgPSBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZG9jdW1lbnQsIGlPUyA/ICd0b3VjaGVuZCcgOiAnbW91c2V1cCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aExhdGVzdEZyb20obW91c2VEb3ducyQpLCBmaWx0ZXIoKFtfLCBzaG91bGRDbG9zZV0pID0+IHNob3VsZENsb3NlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5KGlPUyA/IDE2IDogMCksIHRha2VVbnRpbChjbG9zZWQkKSkgYXMgT2JzZXJ2YWJsZTxNb3VzZUV2ZW50PjtcblxuXG4gICAgICByYWNlPEV2ZW50PihbZXNjYXBlcyQsIGNsb3NlYWJsZUNsaWNrcyRdKS5zdWJzY3JpYmUoKCkgPT4gem9uZS5ydW4oY2xvc2UpKTtcbiAgICB9KTtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/util/focus-trap.js b/dist/sunbird-ui-components/esm2015/util/focus-trap.js new file mode 100644 index 0000000..86bd80d --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/util/focus-trap.js @@ -0,0 +1,95 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { fromEvent } from 'rxjs'; +import { filter, map, takeUntil, withLatestFrom } from 'rxjs/operators'; +import { Key } from '../util/key'; +/** @type {?} */ +const FOCUSABLE_ELEMENTS_SELECTOR = [ + 'a[href]', 'button:not([disabled])', 'input:not([disabled]):not([type="hidden"])', 'select:not([disabled])', + 'textarea:not([disabled])', '[contenteditable]', '[tabindex]:not([tabindex="-1"])' +].join(', '); +/** + * Returns first and last focusable elements inside of a given element based on specific CSS selector + * @param {?} element + * @return {?} + */ +export function getFocusableBoundaryElements(element) { + /** @type {?} */ + const list = Array.from((/** @type {?} */ (element.querySelectorAll(FOCUSABLE_ELEMENTS_SELECTOR)))) + .filter((/** + * @param {?} el + * @return {?} + */ + el => el.tabIndex !== -1)); + return [list[0], list[list.length - 1]]; +} +/** + * Function that enforces browser focus to be trapped inside a DOM element. + * + * Works only for clicks inside the element and navigation with 'Tab', ignoring clicks outside of the element + * + * \@param element The element around which focus will be trapped inside + * \@param stopFocusTrap$ The observable stream. When completed the focus trap will clean up listeners + * and free internal resources + * \@param refocusOnClick Put the focus back to the last focused element whenever a click occurs on element (default to + * false) + * @type {?} + */ +export const ngbFocusTrap = (/** + * @param {?} element + * @param {?} stopFocusTrap$ + * @param {?=} refocusOnClick + * @return {?} + */ +(element, stopFocusTrap$, refocusOnClick = false) => { + // last focused element + /** @type {?} */ + const lastFocusedElement$ = fromEvent(element, 'focusin').pipe(takeUntil(stopFocusTrap$), map((/** + * @param {?} e + * @return {?} + */ + e => e.target))); + // 'tab' / 'shift+tab' stream + fromEvent(element, 'keydown') + .pipe(takeUntil(stopFocusTrap$), + // tslint:disable:deprecation + filter((/** + * @param {?} e + * @return {?} + */ + e => e.which === Key.Tab)), + // tslint:enable:deprecation + withLatestFrom(lastFocusedElement$)) + .subscribe((/** + * @param {?} __0 + * @return {?} + */ + ([tabEvent, focusedElement]) => { + const [first, last] = getFocusableBoundaryElements(element); + if ((focusedElement === first || focusedElement === element) && tabEvent.shiftKey) { + last.focus(); + tabEvent.preventDefault(); + } + if (focusedElement === last && !tabEvent.shiftKey) { + first.focus(); + tabEvent.preventDefault(); + } + })); + // inside click + if (refocusOnClick) { + fromEvent(element, 'click') + .pipe(takeUntil(stopFocusTrap$), withLatestFrom(lastFocusedElement$), map((/** + * @param {?} arr + * @return {?} + */ + arr => (/** @type {?} */ (arr[1]))))) + .subscribe((/** + * @param {?} lastFocusedElement + * @return {?} + */ + lastFocusedElement => lastFocusedElement.focus())); + } +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9jdXMtdHJhcC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbInV0aWwvZm9jdXMtdHJhcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBYSxNQUFNLE1BQU0sQ0FBQztBQUMzQyxPQUFPLEVBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEUsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGFBQWEsQ0FBQzs7TUFHMUIsMkJBQTJCLEdBQUc7SUFDbEMsU0FBUyxFQUFFLHdCQUF3QixFQUFFLDRDQUE0QyxFQUFFLHdCQUF3QjtJQUMzRywwQkFBMEIsRUFBRSxtQkFBbUIsRUFBRSxpQ0FBaUM7Q0FDbkYsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDOzs7Ozs7QUFLWixNQUFNLFVBQVUsNEJBQTRCLENBQUMsT0FBb0I7O1VBQ3pELElBQUksR0FDTixLQUFLLENBQUMsSUFBSSxDQUFDLG1CQUFBLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQywyQkFBMkIsQ0FBQyxFQUEyQixDQUFDO1NBQ3ZGLE1BQU07Ozs7SUFBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEtBQUssQ0FBQyxDQUFDLEVBQUM7SUFDekMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFDLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFhRCxNQUFNLE9BQU8sWUFBWTs7Ozs7O0FBQUcsQ0FBQyxPQUFvQixFQUFFLGNBQStCLEVBQUUsY0FBYyxHQUFHLEtBQUssRUFBRSxFQUFFOzs7VUFFdEcsbUJBQW1CLEdBQ3JCLFNBQVMsQ0FBYSxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsRUFBRSxHQUFHOzs7O0lBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFDLENBQUM7SUFFakcsNkJBQTZCO0lBQzdCLFNBQVMsQ0FBZ0IsT0FBTyxFQUFFLFNBQVMsQ0FBQztTQUN2QyxJQUFJLENBQ0QsU0FBUyxDQUFDLGNBQWMsQ0FBQztJQUN6Qiw2QkFBNkI7SUFDN0IsTUFBTTs7OztJQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxHQUFHLENBQUMsR0FBRyxFQUFDO0lBQ2hDLDRCQUE0QjtJQUM1QixjQUFjLENBQUMsbUJBQW1CLENBQUMsQ0FBQztTQUN2QyxTQUFTOzs7O0lBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxjQUFjLENBQUMsRUFBRSxFQUFFO2NBQ25DLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLDRCQUE0QixDQUFDLE9BQU8sQ0FBQztRQUUxRCxJQUFJLENBQUMsY0FBYyxLQUFLLEtBQUssSUFBSSxjQUFjLEtBQUssT0FBTyxDQUFDLElBQUksUUFBUSxDQUFDLFFBQVEsRUFBRTtZQUNqRixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDYixRQUFRLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDM0I7UUFFRCxJQUFJLGNBQWMsS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFO1lBQ2pELEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNkLFFBQVEsQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUMzQjtJQUNILENBQUMsRUFBQyxDQUFDO0lBRVAsZUFBZTtJQUNmLElBQUksY0FBYyxFQUFFO1FBQ2xCLFNBQVMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDO2FBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLEVBQUUsY0FBYyxDQUFDLG1CQUFtQixDQUFDLEVBQUUsR0FBRzs7OztRQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsbUJBQUEsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFlLEVBQUMsQ0FBQzthQUN2RyxTQUFTOzs7O1FBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxFQUFDLENBQUM7S0FDbEU7QUFDSCxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2Zyb21FdmVudCwgT2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2ZpbHRlciwgbWFwLCB0YWtlVW50aWwsIHdpdGhMYXRlc3RGcm9tfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7S2V5fSBmcm9tICcuLi91dGlsL2tleSc7XG5cblxuY29uc3QgRk9DVVNBQkxFX0VMRU1FTlRTX1NFTEVDVE9SID0gW1xuICAnYVtocmVmXScsICdidXR0b246bm90KFtkaXNhYmxlZF0pJywgJ2lucHV0Om5vdChbZGlzYWJsZWRdKTpub3QoW3R5cGU9XCJoaWRkZW5cIl0pJywgJ3NlbGVjdDpub3QoW2Rpc2FibGVkXSknLFxuICAndGV4dGFyZWE6bm90KFtkaXNhYmxlZF0pJywgJ1tjb250ZW50ZWRpdGFibGVdJywgJ1t0YWJpbmRleF06bm90KFt0YWJpbmRleD1cIi0xXCJdKSdcbl0uam9pbignLCAnKTtcblxuLyoqXG4gKiBSZXR1cm5zIGZpcnN0IGFuZCBsYXN0IGZvY3VzYWJsZSBlbGVtZW50cyBpbnNpZGUgb2YgYSBnaXZlbiBlbGVtZW50IGJhc2VkIG9uIHNwZWNpZmljIENTUyBzZWxlY3RvclxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9jdXNhYmxlQm91bmRhcnlFbGVtZW50cyhlbGVtZW50OiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50W10ge1xuICBjb25zdCBsaXN0OiBIVE1MRWxlbWVudFtdID1cbiAgICAgIEFycmF5LmZyb20oZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKEZPQ1VTQUJMRV9FTEVNRU5UU19TRUxFQ1RPUikgYXMgTm9kZUxpc3RPZjxIVE1MRWxlbWVudD4pXG4gICAgICAgICAgLmZpbHRlcihlbCA9PiBlbC50YWJJbmRleCAhPT0gLTEpO1xuICByZXR1cm4gW2xpc3RbMF0sIGxpc3RbbGlzdC5sZW5ndGggLSAxXV07XG59XG5cbi8qKlxuICogRnVuY3Rpb24gdGhhdCBlbmZvcmNlcyBicm93c2VyIGZvY3VzIHRvIGJlIHRyYXBwZWQgaW5zaWRlIGEgRE9NIGVsZW1lbnQuXG4gKlxuICogV29ya3Mgb25seSBmb3IgY2xpY2tzIGluc2lkZSB0aGUgZWxlbWVudCBhbmQgbmF2aWdhdGlvbiB3aXRoICdUYWInLCBpZ25vcmluZyBjbGlja3Mgb3V0c2lkZSBvZiB0aGUgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBlbGVtZW50IFRoZSBlbGVtZW50IGFyb3VuZCB3aGljaCBmb2N1cyB3aWxsIGJlIHRyYXBwZWQgaW5zaWRlXG4gKiBAcGFyYW0gc3RvcEZvY3VzVHJhcCQgVGhlIG9ic2VydmFibGUgc3RyZWFtLiBXaGVuIGNvbXBsZXRlZCB0aGUgZm9jdXMgdHJhcCB3aWxsIGNsZWFuIHVwIGxpc3RlbmVyc1xuICogYW5kIGZyZWUgaW50ZXJuYWwgcmVzb3VyY2VzXG4gKiBAcGFyYW0gcmVmb2N1c09uQ2xpY2sgUHV0IHRoZSBmb2N1cyBiYWNrIHRvIHRoZSBsYXN0IGZvY3VzZWQgZWxlbWVudCB3aGVuZXZlciBhIGNsaWNrIG9jY3VycyBvbiBlbGVtZW50IChkZWZhdWx0IHRvXG4gKiBmYWxzZSlcbiAqL1xuZXhwb3J0IGNvbnN0IG5nYkZvY3VzVHJhcCA9IChlbGVtZW50OiBIVE1MRWxlbWVudCwgc3RvcEZvY3VzVHJhcCQ6IE9ic2VydmFibGU8YW55PiwgcmVmb2N1c09uQ2xpY2sgPSBmYWxzZSkgPT4ge1xuICAvLyBsYXN0IGZvY3VzZWQgZWxlbWVudFxuICBjb25zdCBsYXN0Rm9jdXNlZEVsZW1lbnQkID1cbiAgICAgIGZyb21FdmVudDxGb2N1c0V2ZW50PihlbGVtZW50LCAnZm9jdXNpbicpLnBpcGUodGFrZVVudGlsKHN0b3BGb2N1c1RyYXAkKSwgbWFwKGUgPT4gZS50YXJnZXQpKTtcblxuICAvLyAndGFiJyAvICdzaGlmdCt0YWInIHN0cmVhbVxuICBmcm9tRXZlbnQ8S2V5Ym9hcmRFdmVudD4oZWxlbWVudCwgJ2tleWRvd24nKVxuICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFrZVVudGlsKHN0b3BGb2N1c1RyYXAkKSxcbiAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZTpkZXByZWNhdGlvblxuICAgICAgICAgIGZpbHRlcihlID0+IGUud2hpY2ggPT09IEtleS5UYWIpLFxuICAgICAgICAgIC8vIHRzbGludDplbmFibGU6ZGVwcmVjYXRpb25cbiAgICAgICAgICB3aXRoTGF0ZXN0RnJvbShsYXN0Rm9jdXNlZEVsZW1lbnQkKSlcbiAgICAgIC5zdWJzY3JpYmUoKFt0YWJFdmVudCwgZm9jdXNlZEVsZW1lbnRdKSA9PiB7XG4gICAgICAgIGNvbnN0W2ZpcnN0LCBsYXN0XSA9IGdldEZvY3VzYWJsZUJvdW5kYXJ5RWxlbWVudHMoZWxlbWVudCk7XG5cbiAgICAgICAgaWYgKChmb2N1c2VkRWxlbWVudCA9PT0gZmlyc3QgfHwgZm9jdXNlZEVsZW1lbnQgPT09IGVsZW1lbnQpICYmIHRhYkV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgbGFzdC5mb2N1cygpO1xuICAgICAgICAgIHRhYkV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm9jdXNlZEVsZW1lbnQgPT09IGxhc3QgJiYgIXRhYkV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgZmlyc3QuZm9jdXMoKTtcbiAgICAgICAgICB0YWJFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAvLyBpbnNpZGUgY2xpY2tcbiAgaWYgKHJlZm9jdXNPbkNsaWNrKSB7XG4gICAgZnJvbUV2ZW50KGVsZW1lbnQsICdjbGljaycpXG4gICAgICAgIC5waXBlKHRha2VVbnRpbChzdG9wRm9jdXNUcmFwJCksIHdpdGhMYXRlc3RGcm9tKGxhc3RGb2N1c2VkRWxlbWVudCQpLCBtYXAoYXJyID0+IGFyclsxXSBhcyBIVE1MRWxlbWVudCkpXG4gICAgICAgIC5zdWJzY3JpYmUobGFzdEZvY3VzZWRFbGVtZW50ID0+IGxhc3RGb2N1c2VkRWxlbWVudC5mb2N1cygpKTtcbiAgfVxufTtcbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/util/key.js b/dist/sunbird-ui-components/esm2015/util/key.js new file mode 100644 index 0000000..9d8f928 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/util/key.js @@ -0,0 +1,33 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @enum {number} */ +const Key = { + Tab: 9, + Enter: 13, + Escape: 27, + Space: 32, + PageUp: 33, + PageDown: 34, + End: 35, + Home: 36, + ArrowLeft: 37, + ArrowUp: 38, + ArrowRight: 39, + ArrowDown: 40, +}; +export { Key }; +Key[Key.Tab] = 'Tab'; +Key[Key.Enter] = 'Enter'; +Key[Key.Escape] = 'Escape'; +Key[Key.Space] = 'Space'; +Key[Key.PageUp] = 'PageUp'; +Key[Key.PageDown] = 'PageDown'; +Key[Key.End] = 'End'; +Key[Key.Home] = 'Home'; +Key[Key.ArrowLeft] = 'ArrowLeft'; +Key[Key.ArrowUp] = 'ArrowUp'; +Key[Key.ArrowRight] = 'ArrowRight'; +Key[Key.ArrowDown] = 'ArrowDown'; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsidXRpbC9rZXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0lBQ0UsTUFBTztJQUNQLFNBQVU7SUFDVixVQUFXO0lBQ1gsU0FBVTtJQUNWLFVBQVc7SUFDWCxZQUFhO0lBQ2IsT0FBUTtJQUNSLFFBQVM7SUFDVCxhQUFjO0lBQ2QsV0FBWTtJQUNaLGNBQWU7SUFDZixhQUFjIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGVudW0gS2V5IHtcbiAgVGFiID0gOSxcbiAgRW50ZXIgPSAxMyxcbiAgRXNjYXBlID0gMjcsXG4gIFNwYWNlID0gMzIsXG4gIFBhZ2VVcCA9IDMzLFxuICBQYWdlRG93biA9IDM0LFxuICBFbmQgPSAzNSxcbiAgSG9tZSA9IDM2LFxuICBBcnJvd0xlZnQgPSAzNyxcbiAgQXJyb3dVcCA9IDM4LFxuICBBcnJvd1JpZ2h0ID0gMzksXG4gIEFycm93RG93biA9IDQwXG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/util/popup.js b/dist/sunbird-ui-components/esm2015/util/popup.js new file mode 100644 index 0000000..60508a6 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/util/popup.js @@ -0,0 +1,135 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { TemplateRef } from '@angular/core'; +export class ContentRef { + /** + * @param {?} nodes + * @param {?=} viewRef + * @param {?=} componentRef + */ + constructor(nodes, viewRef, componentRef) { + this.nodes = nodes; + this.viewRef = viewRef; + this.componentRef = componentRef; + } +} +if (false) { + /** @type {?} */ + ContentRef.prototype.nodes; + /** @type {?} */ + ContentRef.prototype.viewRef; + /** @type {?} */ + ContentRef.prototype.componentRef; +} +/** + * @template T + */ +export class PopupService { + /** + * @param {?} _type + * @param {?} _injector + * @param {?} _viewContainerRef + * @param {?} _renderer + * @param {?} _componentFactoryResolver + * @param {?} _applicationRef + */ + constructor(_type, _injector, _viewContainerRef, _renderer, _componentFactoryResolver, _applicationRef) { + this._type = _type; + this._injector = _injector; + this._viewContainerRef = _viewContainerRef; + this._renderer = _renderer; + this._componentFactoryResolver = _componentFactoryResolver; + this._applicationRef = _applicationRef; + } + /** + * @param {?=} content + * @param {?=} context + * @return {?} + */ + open(content, context) { + if (!this._windowRef) { + this._contentRef = this._getContentRef(content, context); + this._windowRef = this._viewContainerRef.createComponent(this._componentFactoryResolver.resolveComponentFactory(this._type), 0, this._injector, this._contentRef.nodes); + } + return this._windowRef; + } + /** + * @return {?} + */ + close() { + if (this._windowRef) { + this._viewContainerRef.remove(this._viewContainerRef.indexOf(this._windowRef.hostView)); + this._windowRef = null; + if (this._contentRef.viewRef) { + this._applicationRef.detachView(this._contentRef.viewRef); + this._contentRef.viewRef.destroy(); + this._contentRef = null; + } + } + } + /** + * @private + * @param {?} content + * @param {?=} context + * @return {?} + */ + _getContentRef(content, context) { + if (!content) { + return new ContentRef([]); + } + else if (content instanceof TemplateRef) { + /** @type {?} */ + const viewRef = content.createEmbeddedView(context); + this._applicationRef.attachView(viewRef); + return new ContentRef([viewRef.rootNodes], viewRef); + } + else { + return new ContentRef([[this._renderer.createText(`${content}`)]]); + } + } +} +if (false) { + /** + * @type {?} + * @private + */ + PopupService.prototype._windowRef; + /** + * @type {?} + * @private + */ + PopupService.prototype._contentRef; + /** + * @type {?} + * @private + */ + PopupService.prototype._type; + /** + * @type {?} + * @private + */ + PopupService.prototype._injector; + /** + * @type {?} + * @private + */ + PopupService.prototype._viewContainerRef; + /** + * @type {?} + * @private + */ + PopupService.prototype._renderer; + /** + * @type {?} + * @private + */ + PopupService.prototype._componentFactoryResolver; + /** + * @type {?} + * @private + */ + PopupService.prototype._applicationRef; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wdXAuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJ1dGlsL3BvcHVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBRUwsV0FBVyxFQU9aLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE1BQU0sT0FBTyxVQUFVOzs7Ozs7SUFDckIsWUFBbUIsS0FBWSxFQUFTLE9BQWlCLEVBQVMsWUFBZ0M7UUFBL0UsVUFBSyxHQUFMLEtBQUssQ0FBTztRQUFTLFlBQU8sR0FBUCxPQUFPLENBQVU7UUFBUyxpQkFBWSxHQUFaLFlBQVksQ0FBb0I7SUFBRyxDQUFDO0NBQ3ZHOzs7SUFEYSwyQkFBbUI7O0lBQUUsNkJBQXdCOztJQUFFLGtDQUF1Qzs7Ozs7QUFHcEcsTUFBTSxPQUFPLFlBQVk7Ozs7Ozs7OztJQUl2QixZQUNZLEtBQVUsRUFBVSxTQUFtQixFQUFVLGlCQUFtQyxFQUNwRixTQUFvQixFQUFVLHlCQUFtRCxFQUNqRixlQUErQjtRQUYvQixVQUFLLEdBQUwsS0FBSyxDQUFLO1FBQVUsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUFVLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBa0I7UUFDcEYsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUFVLDhCQUF5QixHQUF6Qix5QkFBeUIsQ0FBMEI7UUFDakYsb0JBQWUsR0FBZixlQUFlLENBQWdCO0lBQUcsQ0FBQzs7Ozs7O0lBRS9DLElBQUksQ0FBQyxPQUFtQyxFQUFFLE9BQWE7UUFDckQsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDcEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQ3BELElBQUksQ0FBQyx5QkFBeUIsQ0FBQyx1QkFBdUIsQ0FBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQ3hGLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDN0I7UUFFRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQzs7OztJQUVELEtBQUs7UUFDSCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUN4RixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUV2QixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFO2dCQUM1QixJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUMxRCxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7YUFDekI7U0FDRjtJQUNILENBQUM7Ozs7Ozs7SUFFTyxjQUFjLENBQUMsT0FBa0MsRUFBRSxPQUFhO1FBQ3RFLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDWixPQUFPLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQzNCO2FBQU0sSUFBSSxPQUFPLFlBQVksV0FBVyxFQUFFOztrQkFDbkMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUM7WUFDbkQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDekMsT0FBTyxJQUFJLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztTQUNyRDthQUFNO1lBQ0wsT0FBTyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3BFO0lBQ0gsQ0FBQztDQUNGOzs7Ozs7SUEzQ0Msa0NBQW9DOzs7OztJQUNwQyxtQ0FBZ0M7Ozs7O0lBRzVCLDZCQUFrQjs7Ozs7SUFBRSxpQ0FBMkI7Ozs7O0lBQUUseUNBQTJDOzs7OztJQUM1RixpQ0FBNEI7Ozs7O0lBQUUsaURBQTJEOzs7OztJQUN6Rix1Q0FBdUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBJbmplY3RvcixcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdSZWYsXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIFJlbmRlcmVyMixcbiAgQ29tcG9uZW50UmVmLFxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gIEFwcGxpY2F0aW9uUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgY2xhc3MgQ29udGVudFJlZiB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBub2RlczogYW55W10sIHB1YmxpYyB2aWV3UmVmPzogVmlld1JlZiwgcHVibGljIGNvbXBvbmVudFJlZj86IENvbXBvbmVudFJlZjxhbnk+KSB7fVxufVxuXG5leHBvcnQgY2xhc3MgUG9wdXBTZXJ2aWNlPFQ+IHtcbiAgcHJpdmF0ZSBfd2luZG93UmVmOiBDb21wb25lbnRSZWY8VD47XG4gIHByaXZhdGUgX2NvbnRlbnRSZWY6IENvbnRlbnRSZWY7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICBwcml2YXRlIF90eXBlOiBhbnksIHByaXZhdGUgX2luamVjdG9yOiBJbmplY3RvciwgcHJpdmF0ZSBfdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICAgIHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjIsIHByaXZhdGUgX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgICAgcHJpdmF0ZSBfYXBwbGljYXRpb25SZWY6IEFwcGxpY2F0aW9uUmVmKSB7fVxuXG4gIG9wZW4oY29udGVudD86IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4sIGNvbnRleHQ/OiBhbnkpOiBDb21wb25lbnRSZWY8VD4ge1xuICAgIGlmICghdGhpcy5fd2luZG93UmVmKSB7XG4gICAgICB0aGlzLl9jb250ZW50UmVmID0gdGhpcy5fZ2V0Q29udGVudFJlZihjb250ZW50LCBjb250ZXh0KTtcbiAgICAgIHRoaXMuX3dpbmRvd1JlZiA9IHRoaXMuX3ZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KFxuICAgICAgICAgIHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeTxUPih0aGlzLl90eXBlKSwgMCwgdGhpcy5faW5qZWN0b3IsXG4gICAgICAgICAgdGhpcy5fY29udGVudFJlZi5ub2Rlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3dpbmRvd1JlZjtcbiAgfVxuXG4gIGNsb3NlKCkge1xuICAgIGlmICh0aGlzLl93aW5kb3dSZWYpIHtcbiAgICAgIHRoaXMuX3ZpZXdDb250YWluZXJSZWYucmVtb3ZlKHRoaXMuX3ZpZXdDb250YWluZXJSZWYuaW5kZXhPZih0aGlzLl93aW5kb3dSZWYuaG9zdFZpZXcpKTtcbiAgICAgIHRoaXMuX3dpbmRvd1JlZiA9IG51bGw7XG5cbiAgICAgIGlmICh0aGlzLl9jb250ZW50UmVmLnZpZXdSZWYpIHtcbiAgICAgICAgdGhpcy5fYXBwbGljYXRpb25SZWYuZGV0YWNoVmlldyh0aGlzLl9jb250ZW50UmVmLnZpZXdSZWYpO1xuICAgICAgICB0aGlzLl9jb250ZW50UmVmLnZpZXdSZWYuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLl9jb250ZW50UmVmID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9nZXRDb250ZW50UmVmKGNvbnRlbnQ6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4sIGNvbnRleHQ/OiBhbnkpOiBDb250ZW50UmVmIHtcbiAgICBpZiAoIWNvbnRlbnQpIHtcbiAgICAgIHJldHVybiBuZXcgQ29udGVudFJlZihbXSk7XG4gICAgfSBlbHNlIGlmIChjb250ZW50IGluc3RhbmNlb2YgVGVtcGxhdGVSZWYpIHtcbiAgICAgIGNvbnN0IHZpZXdSZWYgPSBjb250ZW50LmNyZWF0ZUVtYmVkZGVkVmlldyhjb250ZXh0KTtcbiAgICAgIHRoaXMuX2FwcGxpY2F0aW9uUmVmLmF0dGFjaFZpZXcodmlld1JlZik7XG4gICAgICByZXR1cm4gbmV3IENvbnRlbnRSZWYoW3ZpZXdSZWYucm9vdE5vZGVzXSwgdmlld1JlZik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgQ29udGVudFJlZihbW3RoaXMuX3JlbmRlcmVyLmNyZWF0ZVRleHQoYCR7Y29udGVudH1gKV1dKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/util/positioning.js b/dist/sunbird-ui-components/esm2015/util/positioning.js new file mode 100644 index 0000000..3f382b2 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/util/positioning.js @@ -0,0 +1,317 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +// previous version: +// https://github.com/angular-ui/bootstrap/blob/07c31d0731f7cb068a1932b8e01d2312b796b4ec/src/position/position.js +export class Positioning { + /** + * @private + * @param {?} element + * @return {?} + */ + getAllStyles(element) { return window.getComputedStyle(element); } + /** + * @private + * @param {?} element + * @param {?} prop + * @return {?} + */ + getStyle(element, prop) { return this.getAllStyles(element)[prop]; } + /** + * @private + * @param {?} element + * @return {?} + */ + isStaticPositioned(element) { + return (this.getStyle(element, 'position') || 'static') === 'static'; + } + /** + * @private + * @param {?} element + * @return {?} + */ + offsetParent(element) { + /** @type {?} */ + let offsetParentEl = (/** @type {?} */ (element.offsetParent)) || document.documentElement; + while (offsetParentEl && offsetParentEl !== document.documentElement && this.isStaticPositioned(offsetParentEl)) { + offsetParentEl = (/** @type {?} */ (offsetParentEl.offsetParent)); + } + return offsetParentEl || document.documentElement; + } + /** + * @param {?} element + * @param {?=} round + * @return {?} + */ + position(element, round = true) { + /** @type {?} */ + let elPosition; + /** @type {?} */ + let parentOffset = { width: 0, height: 0, top: 0, bottom: 0, left: 0, right: 0 }; + if (this.getStyle(element, 'position') === 'fixed') { + elPosition = element.getBoundingClientRect(); + elPosition = { + top: elPosition.top, + bottom: elPosition.bottom, + left: elPosition.left, + right: elPosition.right, + height: elPosition.height, + width: elPosition.width + }; + } + else { + /** @type {?} */ + const offsetParentEl = this.offsetParent(element); + elPosition = this.offset(element, false); + if (offsetParentEl !== document.documentElement) { + parentOffset = this.offset(offsetParentEl, false); + } + parentOffset.top += offsetParentEl.clientTop; + parentOffset.left += offsetParentEl.clientLeft; + } + elPosition.top -= parentOffset.top; + elPosition.bottom -= parentOffset.top; + elPosition.left -= parentOffset.left; + elPosition.right -= parentOffset.left; + if (round) { + elPosition.top = Math.round(elPosition.top); + elPosition.bottom = Math.round(elPosition.bottom); + elPosition.left = Math.round(elPosition.left); + elPosition.right = Math.round(elPosition.right); + } + return elPosition; + } + /** + * @param {?} element + * @param {?=} round + * @return {?} + */ + offset(element, round = true) { + /** @type {?} */ + const elBcr = element.getBoundingClientRect(); + /** @type {?} */ + const viewportOffset = { + top: window.pageYOffset - document.documentElement.clientTop, + left: window.pageXOffset - document.documentElement.clientLeft + }; + /** @type {?} */ + let elOffset = { + height: elBcr.height || element.offsetHeight, + width: elBcr.width || element.offsetWidth, + top: elBcr.top + viewportOffset.top, + bottom: elBcr.bottom + viewportOffset.top, + left: elBcr.left + viewportOffset.left, + right: elBcr.right + viewportOffset.left + }; + if (round) { + elOffset.height = Math.round(elOffset.height); + elOffset.width = Math.round(elOffset.width); + elOffset.top = Math.round(elOffset.top); + elOffset.bottom = Math.round(elOffset.bottom); + elOffset.left = Math.round(elOffset.left); + elOffset.right = Math.round(elOffset.right); + } + return elOffset; + } + /* + Return false if the element to position is outside the viewport + */ + /** + * @param {?} hostElement + * @param {?} targetElement + * @param {?} placement + * @param {?=} appendToBody + * @return {?} + */ + positionElements(hostElement, targetElement, placement, appendToBody) { + const [placementPrimary = 'top', placementSecondary = 'center'] = placement.split('-'); + /** @type {?} */ + const hostElPosition = appendToBody ? this.offset(hostElement, false) : this.position(hostElement, false); + /** @type {?} */ + const targetElStyles = this.getAllStyles(targetElement); + /** @type {?} */ + const marginTop = parseFloat(targetElStyles.marginTop); + /** @type {?} */ + const marginBottom = parseFloat(targetElStyles.marginBottom); + /** @type {?} */ + const marginLeft = parseFloat(targetElStyles.marginLeft); + /** @type {?} */ + const marginRight = parseFloat(targetElStyles.marginRight); + /** @type {?} */ + let topPosition = 0; + /** @type {?} */ + let leftPosition = 0; + switch (placementPrimary) { + case 'top': + topPosition = (hostElPosition.top - (targetElement.offsetHeight + marginTop + marginBottom)); + break; + case 'bottom': + topPosition = (hostElPosition.top + hostElPosition.height); + break; + case 'left': + leftPosition = (hostElPosition.left - (targetElement.offsetWidth + marginLeft + marginRight)); + break; + case 'right': + leftPosition = (hostElPosition.left + hostElPosition.width); + break; + } + switch (placementSecondary) { + case 'top': + topPosition = hostElPosition.top; + break; + case 'bottom': + topPosition = hostElPosition.top + hostElPosition.height - targetElement.offsetHeight; + break; + case 'left': + leftPosition = hostElPosition.left; + break; + case 'right': + leftPosition = hostElPosition.left + hostElPosition.width - targetElement.offsetWidth; + break; + case 'center': + if (placementPrimary === 'top' || placementPrimary === 'bottom') { + leftPosition = (hostElPosition.left + hostElPosition.width / 2 - targetElement.offsetWidth / 2); + } + else { + topPosition = (hostElPosition.top + hostElPosition.height / 2 - targetElement.offsetHeight / 2); + } + break; + } + /// The translate3d/gpu acceleration render a blurry text on chrome, the next line is commented until a browser fix + // targetElement.style.transform = `translate3d(${Math.round(leftPosition)}px, ${Math.floor(topPosition)}px, 0px)`; + targetElement.style.transform = `translate(${Math.round(leftPosition)}px, ${Math.round(topPosition)}px)`; + // Check if the targetElement is inside the viewport + /** @type {?} */ + const targetElBCR = targetElement.getBoundingClientRect(); + /** @type {?} */ + const html = document.documentElement; + /** @type {?} */ + const windowHeight = window.innerHeight || html.clientHeight; + /** @type {?} */ + const windowWidth = window.innerWidth || html.clientWidth; + return targetElBCR.left >= 0 && targetElBCR.top >= 0 && targetElBCR.right <= windowWidth && + targetElBCR.bottom <= windowHeight; + } +} +/** @type {?} */ +const placementSeparator = /\s+/; +/** @type {?} */ +const positionService = new Positioning(); +/* + * Accept the placement array and applies the appropriate placement dependent on the viewport. + * Returns the applied placement. + * In case of auto placement, placements are selected in order + * 'top', 'bottom', 'left', 'right', + * 'top-left', 'top-right', + * 'bottom-left', 'bottom-right', + * 'left-top', 'left-bottom', + * 'right-top', 'right-bottom'. + * */ +/** + * @param {?} hostElement + * @param {?} targetElement + * @param {?} placement + * @param {?=} appendToBody + * @param {?=} baseClass + * @return {?} + */ +export function positionElements(hostElement, targetElement, placement, appendToBody, baseClass) { + /** @type {?} */ + let placementVals = Array.isArray(placement) ? placement : (/** @type {?} */ (placement.split(placementSeparator))); + /** @type {?} */ + const allowedPlacements = [ + 'top', 'bottom', 'left', 'right', 'top-left', 'top-right', 'bottom-left', 'bottom-right', 'left-top', 'left-bottom', + 'right-top', 'right-bottom' + ]; + /** @type {?} */ + const classList = targetElement.classList; + /** @type {?} */ + const addClassesToTarget = (/** + * @param {?} targetPlacement + * @return {?} + */ + (targetPlacement) => { + const [primary, secondary] = targetPlacement.split('-'); + /** @type {?} */ + const classes = []; + if (baseClass) { + classes.push(`${baseClass}-${primary}`); + if (secondary) { + classes.push(`${baseClass}-${primary}-${secondary}`); + } + classes.forEach((/** + * @param {?} classname + * @return {?} + */ + (classname) => { classList.add(classname); })); + } + return classes; + }); + // Remove old placement classes to avoid issues + if (baseClass) { + allowedPlacements.forEach((/** + * @param {?} placementToRemove + * @return {?} + */ + (placementToRemove) => { classList.remove(`${baseClass}-${placementToRemove}`); })); + } + // replace auto placement with other placements + /** @type {?} */ + let hasAuto = placementVals.findIndex((/** + * @param {?} val + * @return {?} + */ + val => val === 'auto')); + if (hasAuto >= 0) { + allowedPlacements.forEach((/** + * @param {?} obj + * @return {?} + */ + function (obj) { + if (placementVals.find((/** + * @param {?} val + * @return {?} + */ + val => val.search('^' + obj) !== -1)) == null) { + placementVals.splice(hasAuto++, 1, (/** @type {?} */ (obj))); + } + })); + } + // coordinates where to position + // Required for transform: + /** @type {?} */ + const style = targetElement.style; + style.position = 'absolute'; + style.top = '0'; + style.left = '0'; + style['will-change'] = 'transform'; + /** @type {?} */ + let testPlacement; + /** @type {?} */ + let isInViewport = false; + for (testPlacement of placementVals) { + /** @type {?} */ + let addedClasses = addClassesToTarget(testPlacement); + if (positionService.positionElements(hostElement, targetElement, testPlacement, appendToBody)) { + isInViewport = true; + break; + } + // Remove the baseClasses for further calculation + if (baseClass) { + addedClasses.forEach((/** + * @param {?} classname + * @return {?} + */ + (classname) => { classList.remove(classname); })); + } + } + if (!isInViewport) { + // If nothing match, the first placement is the default one + testPlacement = placementVals[0]; + addClassesToTarget(testPlacement); + positionService.positionElements(hostElement, targetElement, testPlacement, appendToBody); + } + return testPlacement; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zaXRpb25pbmcuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJ1dGlsL3Bvc2l0aW9uaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUVBLE1BQU0sT0FBTyxXQUFXOzs7Ozs7SUFDZCxZQUFZLENBQUMsT0FBb0IsSUFBSSxPQUFPLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Ozs7Ozs7SUFFL0UsUUFBUSxDQUFDLE9BQW9CLEVBQUUsSUFBWSxJQUFZLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Ozs7OztJQUVqRyxrQkFBa0IsQ0FBQyxPQUFvQjtRQUM3QyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLElBQUksUUFBUSxDQUFDLEtBQUssUUFBUSxDQUFDO0lBQ3ZFLENBQUM7Ozs7OztJQUVPLFlBQVksQ0FBQyxPQUFvQjs7WUFDbkMsY0FBYyxHQUFHLG1CQUFhLE9BQU8sQ0FBQyxZQUFZLEVBQUEsSUFBSSxRQUFRLENBQUMsZUFBZTtRQUVsRixPQUFPLGNBQWMsSUFBSSxjQUFjLEtBQUssUUFBUSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFDL0csY0FBYyxHQUFHLG1CQUFhLGNBQWMsQ0FBQyxZQUFZLEVBQUEsQ0FBQztTQUMzRDtRQUVELE9BQU8sY0FBYyxJQUFJLFFBQVEsQ0FBQyxlQUFlLENBQUM7SUFDcEQsQ0FBQzs7Ozs7O0lBRUQsUUFBUSxDQUFDLE9BQW9CLEVBQUUsS0FBSyxHQUFHLElBQUk7O1lBQ3JDLFVBQXNCOztZQUN0QixZQUFZLEdBQWUsRUFBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxF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WUFDN0YsWUFBWSxHQUFHLElBQUksQ0FBQztZQUNwQixNQUFNO1NBQ1A7UUFFRCxpREFBaUQ7UUFDakQsSUFBSSxTQUFTLEVBQUU7WUFDYixZQUFZLENBQUMsT0FBTzs7OztZQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUM7U0FDdkU7S0FDRjtJQUVELElBQUksQ0FBQyxZQUFZLEVBQUU7UUFDakIsMkRBQTJEO1FBQzNELGFBQWEsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDbEMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFlBQVksQ0FBQyxDQUFDO0tBQzNGO0lBRUQsT0FBTyxhQUFhLENBQUM7QUFDdkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIHByZXZpb3VzIHZlcnNpb246XG4vLyBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci11aS9ib290c3RyYXAvYmxvYi8wN2MzMWQwNzMxZjdjYjA2OGExOTMyYjhlMDFkMjMxMmI3OTZiNGVjL3NyYy9wb3NpdGlvbi9wb3NpdGlvbi5qc1xuZXhwb3J0IGNsYXNzIFBvc2l0aW9uaW5nIHtcbiAgcHJpdmF0ZSBnZXRBbGxTdHlsZXMoZWxlbWVudDogSFRNTEVsZW1lbnQpIHsgcmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpOyB9XG5cbiAgcHJpdmF0ZSBnZXRTdHlsZShlbGVtZW50OiBIVE1MRWxlbWVudCwgcHJvcDogc3RyaW5nKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuZ2V0QWxsU3R5bGVzKGVsZW1lbnQpW3Byb3BdOyB9XG5cbiAgcHJpdmF0ZSBpc1N0YXRpY1Bvc2l0aW9uZWQoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMuZ2V0U3R5bGUoZWxlbWVudCwgJ3Bvc2l0aW9uJykgfHwgJ3N0YXRpYycpID09PSAnc3RhdGljJztcbiAgfVxuXG4gIHByaXZhdGUgb2Zmc2V0UGFyZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnQge1xuICAgIGxldCBvZmZzZXRQYXJlbnRFbCA9IDxIVE1MRWxlbWVudD5lbGVtZW50Lm9mZnNldFBhcmVudCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgICB3aGlsZSAob2Zmc2V0UGFyZW50RWwgJiYgb2Zmc2V0UGFyZW50RWwgIT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiB0aGlzLmlzU3RhdGljUG9zaXRpb25lZChvZmZzZXRQYXJlbnRFbCkpIHtcbiAgICAgIG9mZnNldFBhcmVudEVsID0gPEhUTUxFbGVtZW50Pm9mZnNldFBhcmVudEVsLm9mZnNldFBhcmVudDtcbiAgICB9XG5cbiAgICByZXR1cm4gb2Zmc2V0UGFyZW50RWwgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICB9XG5cbiAgcG9zaXRpb24oZWxlbWVudDogSFRNTEVsZW1lbnQsIHJvdW5kID0gdHJ1ZSk6IENsaWVudFJlY3Qge1xuICAgIGxldCBlbFBvc2l0aW9uOiBDbGllbnRSZWN0O1xuICAgIGxldCBwYXJlbnRPZmZzZXQ6IENsaWVudFJlY3QgPSB7d2lkdGg6IDAsIGhlaWdodDogMCwgdG9wOiAwLCBib3R0b206IDAsIGxlZnQ6IDAsIHJpZ2h0OiAwfTtcblxuICAgIGlmICh0aGlzLmdldFN0eWxlKGVsZW1lbnQsICdwb3NpdGlvbicpID09PSAnZml4ZWQnKSB7XG4gICAgICBlbFBvc2l0aW9uID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGVsUG9zaXRpb24gPSB7XG4gICAgICAgIHRvcDogZWxQb3NpdGlvbi50b3AsXG4gICAgICAgIGJvdHRvbTogZWxQb3NpdGlvbi5ib3R0b20sXG4gICAgICAgIGxlZnQ6IGVsUG9zaXRpb24ubGVmdCxcbiAgICAgICAgcmlnaHQ6IGVsUG9zaXRpb24ucmlnaHQsXG4gICAgICAgIGhlaWdodDogZWxQb3NpdGlvbi5oZWlnaHQsXG4gICAgICAgIHdpZHRoOiBlbFBvc2l0aW9uLndpZHRoXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBvZmZzZXRQYXJlbnRFbCA9IHRoaXMub2Zmc2V0UGFyZW50KGVsZW1lbnQpO1xuXG4gICAgICBlbFBvc2l0aW9uID0gdGhpcy5vZmZzZXQoZWxlbWVudCwgZmFsc2UpO1xuXG4gICAgICBpZiAob2Zmc2V0UGFyZW50RWwgIT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgICAgICBwYXJlbnRPZmZzZXQgPSB0aGlzLm9mZnNldChvZmZzZXRQYXJlbnRFbCwgZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICBwYXJlbnRPZmZzZXQudG9wICs9IG9mZnNldFBhcmVudEVsLmNsaWVudFRvcDtcbiAgICAgIHBhcmVudE9mZnNldC5sZWZ0ICs9IG9mZnNldFBhcmVudEVsLmNsaWVudExlZnQ7XG4gICAgfVxuXG4gICAgZWxQb3NpdGlvbi50b3AgLT0gcGFyZW50T2Zmc2V0LnRvcDtcbiAgICBlbFBvc2l0aW9uLmJvdHRvbSAtPSBwYXJlbnRPZmZzZXQudG9wO1xuICAgIGVsUG9zaXRpb24ubGVmdCAtPSBwYXJlbnRPZmZzZXQubGVmdDtcbiAgICBlbFBvc2l0aW9uLnJpZ2h0IC09IHBhcmVudE9mZnNldC5sZWZ0O1xuXG4gICAgaWYgKHJvdW5kKSB7XG4gICAgICBlbFBvc2l0aW9uLnRvcCA9IE1hdGgucm91bmQoZWxQb3NpdGlvbi50b3ApO1xuICAgICAgZWxQb3NpdGlvbi5ib3R0b20gPSBNYXRoLnJvdW5kKGVsUG9zaXRpb24uYm90dG9tKTtcbiAgICAgIGVsUG9zaXRpb24ubGVmdCA9IE1hdGgucm91bmQoZWxQb3NpdGlvbi5sZWZ0KTtcbiAgICAgIGVsUG9zaXRpb24ucmlnaHQgPSBNYXRoLnJvdW5kKGVsUG9zaXRpb24ucmlnaHQpO1xuICAgIH1cblxuICAgIHJldHVybiBlbFBvc2l0aW9uO1xuICB9XG5cbiAgb2Zmc2V0KGVsZW1lbnQ6IEhUTUxFbGVtZW50LCByb3VuZCA9IHRydWUpOiBDbGllbnRSZWN0IHtcbiAgICBjb25zdCBlbEJjciA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3Qgdmlld3BvcnRPZmZzZXQgPSB7XG4gICAgICB0b3A6IHdpbmRvdy5wYWdlWU9mZnNldCAtIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRUb3AsXG4gICAgICBsZWZ0OiB3aW5kb3cucGFnZVhPZmZzZXQgLSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50TGVmdFxuICAgIH07XG5cbiAgICBsZXQgZWxPZmZzZXQgPSB7XG4gICAgICBoZWlnaHQ6IGVsQmNyLmhlaWdodCB8fCBlbGVtZW50Lm9mZnNldEhlaWdodCxcbiAgICAgIHdpZHRoOiBlbEJjci53aWR0aCB8fCBlbGVtZW50Lm9mZnNldFdpZHRoLFxuICAgICAgdG9wOiBlbEJjci50b3AgKyB2aWV3cG9ydE9mZnNldC50b3AsXG4gICAgICBib3R0b206IGVsQmNyLmJvdHRvbSArIHZpZXdwb3J0T2Zmc2V0LnRvcCxcbiAgICAgIGxlZnQ6IGVsQmNyLmxlZnQgKyB2aWV3cG9ydE9mZnNldC5sZWZ0LFxuICAgICAgcmlnaHQ6IGVsQmNyLnJpZ2h0ICsgdmlld3BvcnRPZmZzZXQubGVmdFxuICAgIH07XG5cbiAgICBpZiAocm91bmQpIHtcbiAgICAgIGVsT2Zmc2V0LmhlaWdodCA9IE1hdGgucm91bmQoZWxPZmZzZXQuaGVpZ2h0KTtcbiAgICAgIGVsT2Zmc2V0LndpZHRoID0gTWF0aC5yb3VuZChlbE9mZnNldC53aWR0aCk7XG4gICAgICBlbE9mZnNldC50b3AgPSBNYXRoLnJvdW5kKGVsT2Zmc2V0LnRvcCk7XG4gICAgICBlbE9mZnNldC5ib3R0b20gPSBNYXRoLnJvdW5kKGVsT2Zmc2V0LmJvdHRvbSk7XG4gICAgICBlbE9mZnNldC5sZWZ0ID0gTWF0aC5yb3VuZChlbE9mZnNldC5sZWZ0KTtcbiAgICAgIGVsT2Zmc2V0LnJpZ2h0ID0gTWF0aC5yb3VuZChlbE9mZnNldC5yaWdodCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVsT2Zmc2V0O1xuICB9XG5cbiAgLypcbiAgICBSZXR1cm4gZmFsc2UgaWYgdGhlIGVsZW1lbnQgdG8gcG9zaXRpb24gaXMgb3V0c2lkZSB0aGUgdmlld3BvcnRcbiAgKi9cbiAgcG9zaXRpb25FbGVtZW50cyhob3N0RWxlbWVudDogSFRNTEVsZW1lbnQsIHRhcmdldEVsZW1lbnQ6IEhUTUxFbGVtZW50LCBwbGFjZW1lbnQ6IHN0cmluZywgYXBwZW5kVG9Cb2R5PzogYm9vbGVhbik6XG4gICAgICBib29sZWFuIHtcbiAgICBjb25zdFtwbGFjZW1lbnRQcmltYXJ5ID0gJ3RvcCcsIHBsYWNlbWVudFNlY29uZGFyeSA9ICdjZW50ZXInXSA9IHBsYWNlbWVudC5zcGxpdCgnLScpO1xuXG4gICAgY29uc3QgaG9zdEVsUG9zaXRpb24gPSBhcHBlbmRUb0JvZHkgPyB0aGlzLm9mZnNldChob3N0RWxlbWVudCwgZmFsc2UpIDogdGhpcy5wb3NpdGlvbihob3N0RWxlbWVudCwgZmFsc2UpO1xuICAgIGNvbnN0IHRhcmdldEVsU3R5bGVzID0gdGhpcy5nZXRBbGxTdHlsZXModGFyZ2V0RWxlbWVudCk7XG5cbiAgICBjb25zdCBtYXJnaW5Ub3AgPSBwYXJzZUZsb2F0KHRhcmdldEVsU3R5bGVzLm1hcmdpblRvcCk7XG4gICAgY29uc3QgbWFyZ2luQm90dG9tID0gcGFyc2VGbG9hdCh0YXJnZXRFbFN0eWxlcy5tYXJnaW5Cb3R0b20pO1xuICAgIGNvbnN0IG1hcmdpbkxlZnQgPSBwYXJzZUZsb2F0KHRhcmdldEVsU3R5bGVzLm1hcmdpbkxlZnQpO1xuICAgIGNvbnN0IG1hcmdpblJpZ2h0ID0gcGFyc2VGbG9hdCh0YXJnZXRFbFN0eWxlcy5tYXJnaW5SaWdodCk7XG5cbiAgICBsZXQgdG9wUG9zaXRpb24gPSAwO1xuICAgIGxldCBsZWZ0UG9zaXRpb24gPSAwO1xuXG4gICAgc3dpdGNoIChwbGFjZW1lbnRQcmltYXJ5KSB7XG4gICAgICBjYXNlICd0b3AnOlxuICAgICAgICB0b3BQb3NpdGlvbiA9IChob3N0RWxQb3NpdGlvbi50b3AgLSAodGFyZ2V0RWxlbWVudC5vZmZzZXRIZWlnaHQgKyBtYXJnaW5Ub3AgKyBtYXJnaW5Cb3R0b20pKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICB0b3BQb3NpdGlvbiA9IChob3N0RWxQb3NpdGlvbi50b3AgKyBob3N0RWxQb3NpdGlvbi5oZWlnaHQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICBsZWZ0UG9zaXRpb24gPSAoaG9zdEVsUG9zaXRpb24ubGVmdCAtICh0YXJnZXRFbGVtZW50Lm9mZnNldFdpZHRoICsgbWFyZ2luTGVmdCArIG1hcmdpblJpZ2h0KSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICBsZWZ0UG9zaXRpb24gPSAoaG9zdEVsUG9zaXRpb24ubGVmdCArIGhvc3RFbFBvc2l0aW9uLndpZHRoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgc3dpdGNoIChwbGFjZW1lbnRTZWNvbmRhcnkpIHtcbiAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgIHRvcFBvc2l0aW9uID0gaG9zdEVsUG9zaXRpb24udG9wO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgIHRvcFBvc2l0aW9uID0gaG9zdEVsUG9zaXRpb24udG9wICsgaG9zdEVsUG9zaXRpb24uaGVpZ2h0IC0gdGFyZ2V0RWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgIGxlZnRQb3NpdGlvbiA9IGhvc3RFbFBvc2l0aW9uLmxlZnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICBsZWZ0UG9zaXRpb24gPSBob3N0RWxQb3NpdGlvbi5sZWZ0ICsgaG9zdEVsUG9zaXRpb24ud2lkdGggLSB0YXJnZXRFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgIGlmIChwbGFjZW1lbnRQcmltYXJ5ID09PSAndG9wJyB8fCBwbGFjZW1lbnRQcmltYXJ5ID09PSAnYm90dG9tJykge1xuICAgICAgICAgIGxlZnRQb3NpdGlvbiA9IChob3N0RWxQb3NpdGlvbi5sZWZ0ICsgaG9zdEVsUG9zaXRpb24ud2lkdGggLyAyIC0gdGFyZ2V0RWxlbWVudC5vZmZzZXRXaWR0aCAvIDIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRvcFBvc2l0aW9uID0gKGhvc3RFbFBvc2l0aW9uLnRvcCArIGhvc3RFbFBvc2l0aW9uLmhlaWdodCAvIDIgLSB0YXJnZXRFbGVtZW50Lm9mZnNldEhlaWdodCAvIDIpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vLyBUaGUgdHJhbnNsYXRlM2QvZ3B1IGFjY2VsZXJhdGlvbiByZW5kZXIgYSBibHVycnkgdGV4dCBvbiBjaHJvbWUsIHRoZSBuZXh0IGxpbmUgaXMgY29tbWVudGVkIHVudGlsIGEgYnJvd3NlciBmaXhcbiAgICAvLyB0YXJnZXRFbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUzZCgke01hdGgucm91bmQobGVmdFBvc2l0aW9uKX1weCwgJHtNYXRoLmZsb29yKHRvcFBvc2l0aW9uKX1weCwgMHB4KWA7XG4gICAgdGFyZ2V0RWxlbWVudC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlKCR7TWF0aC5yb3VuZChsZWZ0UG9zaXRpb24pfXB4LCAke01hdGgucm91bmQodG9wUG9zaXRpb24pfXB4KWA7XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgdGFyZ2V0RWxlbWVudCBpcyBpbnNpZGUgdGhlIHZpZXdwb3J0XG4gICAgY29uc3QgdGFyZ2V0RWxCQ1IgPSB0YXJnZXRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IGh0bWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgY29uc3Qgd2luZG93SGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0IHx8IGh0bWwuY2xpZW50SGVpZ2h0O1xuICAgIGNvbnN0IHdpbmRvd1dpZHRoID0gd2luZG93LmlubmVyV2lkdGggfHwgaHRtbC5jbGllbnRXaWR0aDtcblxuICAgIHJldHVybiB0YXJnZXRFbEJDUi5sZWZ0ID49IDAgJiYgdGFyZ2V0RWxCQ1IudG9wID49IDAgJiYgdGFyZ2V0RWxCQ1IucmlnaHQgPD0gd2luZG93V2lkdGggJiZcbiAgICAgICAgdGFyZ2V0RWxCQ1IuYm90dG9tIDw9IHdpbmRvd0hlaWdodDtcbiAgfVxufVxuXG5jb25zdCBwbGFjZW1lbnRTZXBhcmF0b3IgPSAvXFxzKy87XG5jb25zdCBwb3NpdGlvblNlcnZpY2UgPSBuZXcgUG9zaXRpb25pbmcoKTtcblxuLypcbiAqIEFjY2VwdCB0aGUgcGxhY2VtZW50IGFycmF5IGFuZCBhcHBsaWVzIHRoZSBhcHByb3ByaWF0ZSBwbGFjZW1lbnQgZGVwZW5kZW50IG9uIHRoZSB2aWV3cG9ydC5cbiAqIFJldHVybnMgdGhlIGFwcGxpZWQgcGxhY2VtZW50LlxuICogSW4gY2FzZSBvZiBhdXRvIHBsYWNlbWVudCwgcGxhY2VtZW50cyBhcmUgc2VsZWN0ZWQgaW4gb3JkZXJcbiAqICAgJ3RvcCcsICdib3R0b20nLCAnbGVmdCcsICdyaWdodCcsXG4gKiAgICd0b3AtbGVmdCcsICd0b3AtcmlnaHQnLFxuICogICAnYm90dG9tLWxlZnQnLCAnYm90dG9tLXJpZ2h0JyxcbiAqICAgJ2xlZnQtdG9wJywgJ2xlZnQtYm90dG9tJyxcbiAqICAgJ3JpZ2h0LXRvcCcsICdyaWdodC1ib3R0b20nLlxuICogKi9cbmV4cG9ydCBmdW5jdGlvbiBwb3NpdGlvbkVsZW1lbnRzKFxuICAgIGhvc3RFbGVtZW50OiBIVE1MRWxlbWVudCwgdGFyZ2V0RWxlbWVudDogSFRNTEVsZW1lbnQsIHBsYWNlbWVudDogc3RyaW5nIHwgUGxhY2VtZW50IHwgUGxhY2VtZW50QXJyYXksXG4gICAgYXBwZW5kVG9Cb2R5PzogYm9vbGVhbiwgYmFzZUNsYXNzPzogc3RyaW5nKTogUGxhY2VtZW50IHtcbiAgbGV0IHBsYWNlbWVudFZhbHM6IEFycmF5PFBsYWNlbWVudD4gPVxuICAgICAgQXJyYXkuaXNBcnJheShwbGFjZW1lbnQpID8gcGxhY2VtZW50IDogcGxhY2VtZW50LnNwbGl0KHBsYWNlbWVudFNlcGFyYXRvcikgYXMgQXJyYXk8UGxhY2VtZW50PjtcblxuICBjb25zdCBhbGxvd2VkUGxhY2VtZW50cyA9IFtcbiAgICAndG9wJywgJ2JvdHRvbScsICdsZWZ0JywgJ3JpZ2h0JywgJ3RvcC1sZWZ0JywgJ3RvcC1yaWdodCcsICdib3R0b20tbGVmdCcsICdib3R0b20tcmlnaHQnLCAnbGVmdC10b3AnLCAnbGVmdC1ib3R0b20nLFxuICAgICdyaWdodC10b3AnLCAncmlnaHQtYm90dG9tJ1xuICBdO1xuXG4gIGNvbnN0IGNsYXNzTGlzdCA9IHRhcmdldEVsZW1lbnQuY2xhc3NMaXN0O1xuICBjb25zdCBhZGRDbGFzc2VzVG9UYXJnZXQgPSAodGFyZ2V0UGxhY2VtZW50OiBQbGFjZW1lbnQpOiBBcnJheTxzdHJpbmc+ID0+IHtcbiAgICBjb25zdFtwcmltYXJ5LCBzZWNvbmRhcnldID0gdGFyZ2V0UGxhY2VtZW50LnNwbGl0KCctJyk7XG4gICAgY29uc3QgY2xhc3NlcyA9IFtdO1xuICAgIGlmIChiYXNlQ2xhc3MpIHtcbiAgICAgIGNsYXNzZXMucHVzaChgJHtiYXNlQ2xhc3N9LSR7cHJpbWFyeX1gKTtcbiAgICAgIGlmIChzZWNvbmRhcnkpIHtcbiAgICAgICAgY2xhc3Nlcy5wdXNoKGAke2Jhc2VDbGFzc30tJHtwcmltYXJ5fS0ke3NlY29uZGFyeX1gKTtcbiAgICAgIH1cblxuICAgICAgY2xhc3Nlcy5mb3JFYWNoKChjbGFzc25hbWUpID0+IHsgY2xhc3NMaXN0LmFkZChjbGFzc25hbWUpOyB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGNsYXNzZXM7XG4gIH07XG5cbiAgLy8gUmVtb3ZlIG9sZCBwbGFjZW1lbnQgY2xhc3NlcyB0byBhdm9pZCBpc3N1ZXNcbiAgaWYgKGJhc2VDbGFzcykge1xuICAgIGFsbG93ZWRQbGFjZW1lbnRzLmZvckVhY2goKHBsYWNlbWVudFRvUmVtb3ZlKSA9PiB7IGNsYXNzTGlzdC5yZW1vdmUoYCR7YmFzZUNsYXNzfS0ke3BsYWNlbWVudFRvUmVtb3ZlfWApOyB9KTtcbiAgfVxuXG4gIC8vIHJlcGxhY2UgYXV0byBwbGFjZW1lbnQgd2l0aCBvdGhlciBwbGFjZW1lbnRzXG4gIGxldCBoYXNBdXRvID0gcGxhY2VtZW50VmFscy5maW5kSW5kZXgodmFsID0+IHZhbCA9PT0gJ2F1dG8nKTtcbiAgaWYgKGhhc0F1dG8gPj0gMCkge1xuICAgIGFsbG93ZWRQbGFjZW1lbnRzLmZvckVhY2goZnVuY3Rpb24ob2JqKSB7XG4gICAgICBpZiAocGxhY2VtZW50VmFscy5maW5kKHZhbCA9PiB2YWwuc2VhcmNoKCdeJyArIG9iaikgIT09IC0xKSA9PSBudWxsKSB7XG4gICAgICAgIHBsYWNlbWVudFZhbHMuc3BsaWNlKGhhc0F1dG8rKywgMSwgb2JqIGFzIFBsYWNlbWVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBjb29yZGluYXRlcyB3aGVyZSB0byBwb3NpdGlvblxuXG4gIC8vIFJlcXVpcmVkIGZvciB0cmFuc2Zvcm06XG4gIGNvbnN0IHN0eWxlID0gdGFyZ2V0RWxlbWVudC5zdHlsZTtcbiAgc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICBzdHlsZS50b3AgPSAnMCc7XG4gIHN0eWxlLmxlZnQgPSAnMCc7XG4gIHN0eWxlWyd3aWxsLWNoYW5nZSddID0gJ3RyYW5zZm9ybSc7XG5cbiAgbGV0IHRlc3RQbGFjZW1lbnQ6IFBsYWNlbWVudDtcbiAgbGV0IGlzSW5WaWV3cG9ydCA9IGZhbHNlO1xuICBmb3IgKHRlc3RQbGFjZW1lbnQgb2YgcGxhY2VtZW50VmFscykge1xuICAgIGxldCBhZGRlZENsYXNzZXMgPSBhZGRDbGFzc2VzVG9UYXJnZXQodGVzdFBsYWNlbWVudCk7XG5cbiAgICBpZiAocG9zaXRpb25TZXJ2aWNlLnBvc2l0aW9uRWxlbWVudHMoaG9zdEVsZW1lbnQsIHRhcmdldEVsZW1lbnQsIHRlc3RQbGFjZW1lbnQsIGFwcGVuZFRvQm9keSkpIHtcbiAgICAgIGlzSW5WaWV3cG9ydCA9IHRydWU7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgdGhlIGJhc2VDbGFzc2VzIGZvciBmdXJ0aGVyIGNhbGN1bGF0aW9uXG4gICAgaWYgKGJhc2VDbGFzcykge1xuICAgICAgYWRkZWRDbGFzc2VzLmZvckVhY2goKGNsYXNzbmFtZSkgPT4geyBjbGFzc0xpc3QucmVtb3ZlKGNsYXNzbmFtZSk7IH0pO1xuICAgIH1cbiAgfVxuXG4gIGlmICghaXNJblZpZXdwb3J0KSB7XG4gICAgLy8gSWYgbm90aGluZyBtYXRjaCwgdGhlIGZpcnN0IHBsYWNlbWVudCBpcyB0aGUgZGVmYXVsdCBvbmVcbiAgICB0ZXN0UGxhY2VtZW50ID0gcGxhY2VtZW50VmFsc1swXTtcbiAgICBhZGRDbGFzc2VzVG9UYXJnZXQodGVzdFBsYWNlbWVudCk7XG4gICAgcG9zaXRpb25TZXJ2aWNlLnBvc2l0aW9uRWxlbWVudHMoaG9zdEVsZW1lbnQsIHRhcmdldEVsZW1lbnQsIHRlc3RQbGFjZW1lbnQsIGFwcGVuZFRvQm9keSk7XG4gIH1cblxuICByZXR1cm4gdGVzdFBsYWNlbWVudDtcbn1cblxuZXhwb3J0IHR5cGUgUGxhY2VtZW50ID0gJ2F1dG8nIHwgJ3RvcCcgfCAnYm90dG9tJyB8ICdsZWZ0JyB8ICdyaWdodCcgfCAndG9wLWxlZnQnIHwgJ3RvcC1yaWdodCcgfCAnYm90dG9tLWxlZnQnIHxcbiAgICAnYm90dG9tLXJpZ2h0JyB8ICdsZWZ0LXRvcCcgfCAnbGVmdC1ib3R0b20nIHwgJ3JpZ2h0LXRvcCcgfCAncmlnaHQtYm90dG9tJztcblxuZXhwb3J0IHR5cGUgUGxhY2VtZW50QXJyYXkgPSBQbGFjZW1lbnQgfCBBcnJheTxQbGFjZW1lbnQ+fCBzdHJpbmc7XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/util/scrollbar.js b/dist/sunbird-ui-components/esm2015/util/scrollbar.js new file mode 100644 index 0000000..0a23365 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/util/scrollbar.js @@ -0,0 +1,102 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Injectable, Inject } from '@angular/core'; +import { DOCUMENT } from '@angular/common'; +import * as i0 from "@angular/core"; +import * as i1 from "@angular/common"; +/** @type {?} */ +const noop = (/** + * @return {?} + */ +() => { }); +const ɵ0 = noop; +/** + * Utility to handle the scrollbar. + * + * It allows to compensate the lack of a vertical scrollbar by adding an + * equivalent padding on the right of the body, and to remove this compensation. + */ +export class ScrollBar { + /** + * @param {?} _document + */ + constructor(_document) { + this._document = _document; + } + /** + * Detects if a scrollbar is present and if yes, already compensates for its + * removal by adding an equivalent padding on the right of the body. + * + * @return {?} a callback used to revert the compensation (noop if there was none, + * otherwise a function removing the padding) + */ + compensate() { return !this._isPresent() ? noop : this._adjustBody(this._getWidth()); } + /** + * Adds a padding of the given width on the right of the body. + * + * @private + * @param {?} width + * @return {?} a callback used to revert the padding to its previous value + */ + _adjustBody(width) { + /** @type {?} */ + const body = this._document.body; + /** @type {?} */ + const userSetPadding = body.style.paddingRight; + /** @type {?} */ + const paddingAmount = parseFloat(window.getComputedStyle(body)['padding-right']); + body.style['padding-right'] = `${paddingAmount + width}px`; + return (/** + * @return {?} + */ + () => body.style['padding-right'] = userSetPadding); + } + /** + * Tells whether a scrollbar is currently present on the body. + * + * @private + * @return {?} true if scrollbar is present, false otherwise + */ + _isPresent() { + /** @type {?} */ + const rect = this._document.body.getBoundingClientRect(); + return rect.left + rect.right < window.innerWidth; + } + /** + * Calculates and returns the width of a scrollbar. + * + * @private + * @return {?} the width of a scrollbar on this page + */ + _getWidth() { + /** @type {?} */ + const measurer = this._document.createElement('div'); + measurer.className = 'modal-scrollbar-measure'; + /** @type {?} */ + const body = this._document.body; + body.appendChild(measurer); + /** @type {?} */ + const width = measurer.getBoundingClientRect().width - measurer.clientWidth; + body.removeChild(measurer); + return width; + } +} +ScrollBar.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } +]; +/** @nocollapse */ +ScrollBar.ctorParameters = () => [ + { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] } +]; +/** @nocollapse */ ScrollBar.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function ScrollBar_Factory() { return new ScrollBar(i0.ɵɵinject(i1.DOCUMENT)); }, token: ScrollBar, providedIn: "root" }); +if (false) { + /** + * @type {?} + * @private + */ + ScrollBar.prototype._document; +} +export { ɵ0 }; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsYmFyLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsidXRpbC9zY3JvbGxiYXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQzs7OztNQUduQyxJQUFJOzs7QUFBRyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUE7Ozs7Ozs7O0FBZ0JyQixNQUFNLE9BQU8sU0FBUzs7OztJQUNwQixZQUFzQyxTQUFjO1FBQWQsY0FBUyxHQUFULFNBQVMsQ0FBSztJQUFHLENBQUM7Ozs7Ozs7O0lBU3hELFVBQVUsS0FBMkIsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7Ozs7Ozs7SUFPckcsV0FBVyxDQUFDLEtBQWE7O2NBQ3pCLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUk7O2NBQzFCLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVk7O2NBQ3hDLGFBQWEsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2hGLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxhQUFhLEdBQUcsS0FBSyxJQUFJLENBQUM7UUFDM0Q7OztRQUFPLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLEdBQUcsY0FBYyxFQUFDO0lBQzVELENBQUM7Ozs7Ozs7SUFPTyxVQUFVOztjQUNWLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtRQUN4RCxPQUFPLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO0lBQ3BELENBQUM7Ozs7Ozs7SUFPTyxTQUFTOztjQUNULFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7UUFDcEQsUUFBUSxDQUFDLFNBQVMsR0FBRyx5QkFBeUIsQ0FBQzs7Y0FFekMsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSTtRQUNoQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDOztjQUNyQixLQUFLLEdBQUcsUUFBUSxDQUFDLHFCQUFxQixFQUFFLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxXQUFXO1FBQzNFLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFM0IsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOzs7WUFuREYsVUFBVSxTQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQzs7Ozs0Q0FFakIsTUFBTSxTQUFDLFFBQVE7Ozs7Ozs7O0lBQWhCLDhCQUF3QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgSW5qZWN0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RE9DVU1FTlR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuXG5cblxuLyoqIFR5cGUgZm9yIHRoZSBjYWxsYmFjayB1c2VkIHRvIHJldmVydCB0aGUgc2Nyb2xsYmFyIGNvbXBlbnNhdGlvbi4gKi9cbmV4cG9ydCB0eXBlIENvbXBlbnNhdGlvblJldmVydGVyID0gKCkgPT4gdm9pZDtcblxuXG5cbi8qKlxuICogVXRpbGl0eSB0byBoYW5kbGUgdGhlIHNjcm9sbGJhci5cbiAqXG4gKiBJdCBhbGxvd3MgdG8gY29tcGVuc2F0ZSB0aGUgbGFjayBvZiBhIHZlcnRpY2FsIHNjcm9sbGJhciBieSBhZGRpbmcgYW5cbiAqIGVxdWl2YWxlbnQgcGFkZGluZyBvbiB0aGUgcmlnaHQgb2YgdGhlIGJvZHksIGFuZCB0byByZW1vdmUgdGhpcyBjb21wZW5zYXRpb24uXG4gKi9cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIFNjcm9sbEJhciB7XG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgX2RvY3VtZW50OiBhbnkpIHt9XG5cbiAgLyoqXG4gICAqIERldGVjdHMgaWYgYSBzY3JvbGxiYXIgaXMgcHJlc2VudCBhbmQgaWYgeWVzLCBhbHJlYWR5IGNvbXBlbnNhdGVzIGZvciBpdHNcbiAgICogcmVtb3ZhbCBieSBhZGRpbmcgYW4gZXF1aXZhbGVudCBwYWRkaW5nIG9uIHRoZSByaWdodCBvZiB0aGUgYm9keS5cbiAgICpcbiAgICogQHJldHVybiBhIGNhbGxiYWNrIHVzZWQgdG8gcmV2ZXJ0IHRoZSBjb21wZW5zYXRpb24gKG5vb3AgaWYgdGhlcmUgd2FzIG5vbmUsXG4gICAqIG90aGVyd2lzZSBhIGZ1bmN0aW9uIHJlbW92aW5nIHRoZSBwYWRkaW5nKVxuICAgKi9cbiAgY29tcGVuc2F0ZSgpOiBDb21wZW5zYXRpb25SZXZlcnRlciB7IHJldHVybiAhdGhpcy5faXNQcmVzZW50KCkgPyBub29wIDogdGhpcy5fYWRqdXN0Qm9keSh0aGlzLl9nZXRXaWR0aCgpKTsgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgcGFkZGluZyBvZiB0aGUgZ2l2ZW4gd2lkdGggb24gdGhlIHJpZ2h0IG9mIHRoZSBib2R5LlxuICAgKlxuICAgKiBAcmV0dXJuIGEgY2FsbGJhY2sgdXNlZCB0byByZXZlcnQgdGhlIHBhZGRpbmcgdG8gaXRzIHByZXZpb3VzIHZhbHVlXG4gICAqL1xuICBwcml2YXRlIF9hZGp1c3RCb2R5KHdpZHRoOiBudW1iZXIpOiBDb21wZW5zYXRpb25SZXZlcnRlciB7XG4gICAgY29uc3QgYm9keSA9IHRoaXMuX2RvY3VtZW50LmJvZHk7XG4gICAgY29uc3QgdXNlclNldFBhZGRpbmcgPSBib2R5LnN0eWxlLnBhZGRpbmdSaWdodDtcbiAgICBjb25zdCBwYWRkaW5nQW1vdW50ID0gcGFyc2VGbG9hdCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShib2R5KVsncGFkZGluZy1yaWdodCddKTtcbiAgICBib2R5LnN0eWxlWydwYWRkaW5nLXJpZ2h0J10gPSBgJHtwYWRkaW5nQW1vdW50ICsgd2lkdGh9cHhgO1xuICAgIHJldHVybiAoKSA9PiBib2R5LnN0eWxlWydwYWRkaW5nLXJpZ2h0J10gPSB1c2VyU2V0UGFkZGluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBUZWxscyB3aGV0aGVyIGEgc2Nyb2xsYmFyIGlzIGN1cnJlbnRseSBwcmVzZW50IG9uIHRoZSBib2R5LlxuICAgKlxuICAgKiBAcmV0dXJuIHRydWUgaWYgc2Nyb2xsYmFyIGlzIHByZXNlbnQsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgcHJpdmF0ZSBfaXNQcmVzZW50KCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHJlY3QgPSB0aGlzLl9kb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHJldHVybiByZWN0LmxlZnQgKyByZWN0LnJpZ2h0IDwgd2luZG93LmlubmVyV2lkdGg7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyBhbmQgcmV0dXJucyB0aGUgd2lkdGggb2YgYSBzY3JvbGxiYXIuXG4gICAqXG4gICAqIEByZXR1cm4gdGhlIHdpZHRoIG9mIGEgc2Nyb2xsYmFyIG9uIHRoaXMgcGFnZVxuICAgKi9cbiAgcHJpdmF0ZSBfZ2V0V2lkdGgoKTogbnVtYmVyIHtcbiAgICBjb25zdCBtZWFzdXJlciA9IHRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIG1lYXN1cmVyLmNsYXNzTmFtZSA9ICdtb2RhbC1zY3JvbGxiYXItbWVhc3VyZSc7XG5cbiAgICBjb25zdCBib2R5ID0gdGhpcy5fZG9jdW1lbnQuYm9keTtcbiAgICBib2R5LmFwcGVuZENoaWxkKG1lYXN1cmVyKTtcbiAgICBjb25zdCB3aWR0aCA9IG1lYXN1cmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIC0gbWVhc3VyZXIuY2xpZW50V2lkdGg7XG4gICAgYm9keS5yZW1vdmVDaGlsZChtZWFzdXJlcik7XG5cbiAgICByZXR1cm4gd2lkdGg7XG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/util/triggers.js b/dist/sunbird-ui-components/esm2015/util/triggers.js new file mode 100644 index 0000000..d39b7f4 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/util/triggers.js @@ -0,0 +1,237 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Observable, merge } from 'rxjs'; +import { share, filter, delay, map } from 'rxjs/operators'; +export class Trigger { + /** + * @param {?} open + * @param {?=} close + */ + constructor(open, close) { + this.open = open; + this.close = close; + if (!close) { + this.close = open; + } + } + /** + * @return {?} + */ + isManual() { return this.open === 'manual' || this.close === 'manual'; } +} +if (false) { + /** @type {?} */ + Trigger.prototype.open; + /** @type {?} */ + Trigger.prototype.close; +} +/** @type {?} */ +const DEFAULT_ALIASES = { + 'hover': ['mouseenter', 'mouseleave'], + 'focus': ['focusin', 'focusout'], +}; +/** + * @param {?} triggers + * @param {?=} aliases + * @return {?} + */ +export function parseTriggers(triggers, aliases = DEFAULT_ALIASES) { + /** @type {?} */ + const trimmedTriggers = (triggers || '').trim(); + if (trimmedTriggers.length === 0) { + return []; + } + /** @type {?} */ + const parsedTriggers = trimmedTriggers.split(/\s+/).map((/** + * @param {?} trigger + * @return {?} + */ + trigger => trigger.split(':'))).map((/** + * @param {?} triggerPair + * @return {?} + */ + (triggerPair) => { + /** @type {?} */ + let alias = aliases[triggerPair[0]] || triggerPair; + return new Trigger(alias[0], alias[1]); + })); + /** @type {?} */ + const manualTriggers = parsedTriggers.filter((/** + * @param {?} triggerPair + * @return {?} + */ + triggerPair => triggerPair.isManual())); + if (manualTriggers.length > 1) { + throw 'Triggers parse error: only one manual trigger is allowed'; + } + if (manualTriggers.length === 1 && parsedTriggers.length > 1) { + throw 'Triggers parse error: manual trigger can\'t be mixed with other triggers'; + } + return parsedTriggers; +} +/** + * @param {?} renderer + * @param {?} nativeElement + * @param {?} triggers + * @param {?} isOpenedFn + * @return {?} + */ +export function observeTriggers(renderer, nativeElement, triggers, isOpenedFn) { + return new Observable((/** + * @param {?} subscriber + * @return {?} + */ + subscriber => { + /** @type {?} */ + const listeners = []; + /** @type {?} */ + const openFn = (/** + * @return {?} + */ + () => subscriber.next(true)); + /** @type {?} */ + const closeFn = (/** + * @return {?} + */ + () => subscriber.next(false)); + /** @type {?} */ + const toggleFn = (/** + * @return {?} + */ + () => subscriber.next(!isOpenedFn())); + triggers.forEach((/** + * @param {?} trigger + * @return {?} + */ + (trigger) => { + if (trigger.open === trigger.close) { + listeners.push(renderer.listen(nativeElement, trigger.open, toggleFn)); + } + else { + listeners.push(renderer.listen(nativeElement, trigger.open, openFn), renderer.listen(nativeElement, trigger.close, closeFn)); + } + })); + return (/** + * @return {?} + */ + () => { listeners.forEach((/** + * @param {?} unsubscribeFn + * @return {?} + */ + unsubscribeFn => unsubscribeFn())); }); + })); +} +/** @type {?} */ +const delayOrNoop = (/** + * @template T + * @param {?} time + * @return {?} + */ +(time) => time > 0 ? delay(time) : (/** + * @param {?} a + * @return {?} + */ +(a) => a)); +const ɵ0 = delayOrNoop; +/** + * @param {?} openDelay + * @param {?} closeDelay + * @param {?} isOpenedFn + * @return {?} + */ +export function triggerDelay(openDelay, closeDelay, isOpenedFn) { + return (/** + * @param {?} input$ + * @return {?} + */ + (input$) => { + /** @type {?} */ + let pending = null; + /** @type {?} */ + const filteredInput$ = input$.pipe(map((/** + * @param {?} open + * @return {?} + */ + open => ({ open }))), filter((/** + * @param {?} event + * @return {?} + */ + event => { + /** @type {?} */ + const currentlyOpen = isOpenedFn(); + if (currentlyOpen !== event.open && (!pending || pending.open === currentlyOpen)) { + pending = event; + return true; + } + if (pending && pending.open !== event.open) { + pending = null; + } + return false; + })), share()); + /** @type {?} */ + const delayedOpen$ = filteredInput$.pipe(filter((/** + * @param {?} event + * @return {?} + */ + event => event.open)), delayOrNoop(openDelay)); + /** @type {?} */ + const delayedClose$ = filteredInput$.pipe(filter((/** + * @param {?} event + * @return {?} + */ + event => !event.open)), delayOrNoop(closeDelay)); + return merge(delayedOpen$, delayedClose$) + .pipe(filter((/** + * @param {?} event + * @return {?} + */ + event => { + if (event === pending) { + pending = null; + return event.open !== isOpenedFn(); + } + return false; + })), map((/** + * @param {?} event + * @return {?} + */ + event => event.open))); + }); +} +/** + * @param {?} renderer + * @param {?} nativeElement + * @param {?} triggers + * @param {?} isOpenedFn + * @param {?} openFn + * @param {?} closeFn + * @param {?=} openDelay + * @param {?=} closeDelay + * @return {?} + */ +export function listenToTriggers(renderer, nativeElement, triggers, isOpenedFn, openFn, closeFn, openDelay = 0, closeDelay = 0) { + /** @type {?} */ + const parsedTriggers = parseTriggers(triggers); + if (parsedTriggers.length === 1 && parsedTriggers[0].isManual()) { + return (/** + * @return {?} + */ + () => { }); + } + /** @type {?} */ + const subscription = observeTriggers(renderer, nativeElement, parsedTriggers, isOpenedFn) + .pipe(triggerDelay(openDelay, closeDelay, isOpenedFn)) + .subscribe((/** + * @param {?} open + * @return {?} + */ + open => (open ? openFn() : closeFn()))); + return (/** + * @return {?} + */ + () => subscription.unsubscribe()); +} +export { ɵ0 }; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJpZ2dlcnMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJ1dGlsL3RyaWdnZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLEtBQUssRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFekQsTUFBTSxPQUFPLE9BQU87Ozs7O0lBQ2xCLFlBQW1CLElBQVksRUFBUyxLQUFjO1FBQW5DLFNBQUksR0FBSixJQUFJLENBQVE7UUFBUyxVQUFLLEdBQUwsS0FBSyxDQUFTO1FBQ3BELElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDVixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztTQUNuQjtJQUNILENBQUM7Ozs7SUFFRCxRQUFRLEtBQUssT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUM7Q0FDekU7OztJQVBhLHVCQUFtQjs7SUFBRSx3QkFBcUI7OztNQVNsRCxlQUFlLEdBQUc7SUFDdEIsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQztJQUNyQyxPQUFPLEVBQUUsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDO0NBQ2pDOzs7Ozs7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFDLFFBQWdCLEVBQUUsT0FBTyxHQUFHLGVBQWU7O1VBQ2pFLGVBQWUsR0FBRyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUU7SUFFL0MsSUFBSSxlQUFlLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUNoQyxPQUFPLEVBQUUsQ0FBQztLQUNYOztVQUVLLGNBQWMsR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUc7Ozs7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUMsQ0FBQyxHQUFHOzs7O0lBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTs7WUFDckcsS0FBSyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxXQUFXO1FBQ2xELE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLENBQUMsRUFBQzs7VUFFSSxjQUFjLEdBQUcsY0FBYyxDQUFDLE1BQU07Ozs7SUFBQyxXQUFXLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsRUFBQztJQUVuRixJQUFJLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQzdCLE1BQU0sMERBQTBELENBQUM7S0FDbEU7SUFFRCxJQUFJLGNBQWMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQzVELE1BQU0sMEVBQTBFLENBQUM7S0FDbEY7SUFFRCxPQUFPLGNBQWMsQ0FBQztBQUN4QixDQUFDOzs7Ozs7OztBQUVELE1BQU0sVUFBVSxlQUFlLENBQUMsUUFBYSxFQUFFLGFBQWtCLEVBQUUsUUFBbUIsRUFBRSxVQUF5QjtJQUMvRyxPQUFPLElBQUksVUFBVTs7OztJQUFVLFVBQVUsQ0FBQyxFQUFFOztjQUNwQyxTQUFTLEdBQUcsRUFBRTs7Y0FDZCxNQUFNOzs7UUFBRyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBOztjQUNwQyxPQUFPOzs7UUFBRyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBOztjQUN0QyxRQUFROzs7UUFBRyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQTtRQUVyRCxRQUFRLENBQUMsT0FBTzs7OztRQUFDLENBQUMsT0FBZ0IsRUFBRSxFQUFFO1lBQ3BDLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsS0FBSyxFQUFFO2dCQUNsQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQzthQUN4RTtpQkFBTTtnQkFDTCxTQUFTLENBQUMsSUFBSSxDQUNWLFFBQVEsQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEVBQ3BELFFBQVEsQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQzthQUM3RDtRQUNILENBQUMsRUFBQyxDQUFDO1FBRUg7OztRQUFPLEdBQUcsRUFBRSxHQUFHLFNBQVMsQ0FBQyxPQUFPOzs7O1FBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO0lBQ3hFLENBQUMsRUFBQyxDQUFDO0FBQ0wsQ0FBQzs7TUFFSyxXQUFXOzs7OztBQUFHLENBQUksSUFBWSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUksSUFBSSxDQUFDLENBQUMsQ0FBQzs7OztBQUFDLENBQUMsQ0FBZ0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFBLENBQUE7Ozs7Ozs7O0FBRTVGLE1BQU0sVUFBVSxZQUFZLENBQUMsU0FBaUIsRUFBRSxVQUFrQixFQUFFLFVBQXlCO0lBQzNGOzs7O0lBQU8sQ0FBQyxNQUEyQixFQUFFLEVBQUU7O1lBQ2pDLE9BQU8sR0FBRyxJQUFJOztjQUNaLGNBQWMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUM5QixHQUFHOzs7O1FBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsSUFBSSxFQUFDLENBQUMsRUFBQyxFQUFFLE1BQU07Ozs7UUFBQyxLQUFLLENBQUMsRUFBRTs7a0JBQzlCLGFBQWEsR0FBRyxVQUFVLEVBQUU7WUFDbEMsSUFBSSxhQUFhLEtBQUssS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssYUFBYSxDQUFDLEVBQUU7Z0JBQ2hGLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQ2hCLE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFDRCxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJLEVBQUU7Z0JBQzFDLE9BQU8sR0FBRyxJQUFJLENBQUM7YUFDaEI7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsRUFBQyxFQUNGLEtBQUssRUFBRSxDQUFDOztjQUNOLFlBQVksR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU07Ozs7UUFBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUMsRUFBRSxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7O2NBQ3ZGLGFBQWEsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU07Ozs7UUFBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBQyxFQUFFLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoRyxPQUFPLEtBQUssQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDO2FBQ3BDLElBQUksQ0FDRCxNQUFNOzs7O1FBQUMsS0FBSyxDQUFDLEVBQUU7WUFDYixJQUFJLEtBQUssS0FBSyxPQUFPLEVBQUU7Z0JBQ3JCLE9BQU8sR0FBRyxJQUFJLENBQUM7Z0JBQ2YsT0FBTyxLQUFLLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRSxDQUFDO2FBQ3BDO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLEVBQUMsRUFDRixHQUFHOzs7O1FBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQztJQUNwQyxDQUFDLEVBQUM7QUFDSixDQUFDOzs7Ozs7Ozs7Ozs7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCLENBQzVCLFFBQWEsRUFBRSxhQUFrQixFQUFFLFFBQWdCLEVBQUUsVUFBeUIsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFNBQVMsR0FBRyxDQUFDLEVBQzlHLFVBQVUsR0FBRyxDQUFDOztVQUNWLGNBQWMsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDO0lBRTlDLElBQUksY0FBYyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1FBQy9EOzs7UUFBTyxHQUFHLEVBQUUsR0FBRSxDQUFDLEVBQUM7S0FDakI7O1VBRUssWUFBWSxHQUFHLGVBQWUsQ0FBQyxRQUFRLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxVQUFVLENBQUM7U0FDL0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1NBQ3JELFNBQVM7Ozs7SUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBQztJQUUxRTs7O0lBQU8sR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxFQUFDO0FBQzFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge09ic2VydmFibGUsIG1lcmdlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7c2hhcmUsIGZpbHRlciwgZGVsYXksIG1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5leHBvcnQgY2xhc3MgVHJpZ2dlciB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBvcGVuOiBzdHJpbmcsIHB1YmxpYyBjbG9zZT86IHN0cmluZykge1xuICAgIGlmICghY2xvc2UpIHtcbiAgICAgIHRoaXMuY2xvc2UgPSBvcGVuO1xuICAgIH1cbiAgfVxuXG4gIGlzTWFudWFsKCkgeyByZXR1cm4gdGhpcy5vcGVuID09PSAnbWFudWFsJyB8fCB0aGlzLmNsb3NlID09PSAnbWFudWFsJzsgfVxufVxuXG5jb25zdCBERUZBVUxUX0FMSUFTRVMgPSB7XG4gICdob3Zlcic6IFsnbW91c2VlbnRlcicsICdtb3VzZWxlYXZlJ10sXG4gICdmb2N1cyc6IFsnZm9jdXNpbicsICdmb2N1c291dCddLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVHJpZ2dlcnModHJpZ2dlcnM6IHN0cmluZywgYWxpYXNlcyA9IERFRkFVTFRfQUxJQVNFUyk6IFRyaWdnZXJbXSB7XG4gIGNvbnN0IHRyaW1tZWRUcmlnZ2VycyA9ICh0cmlnZ2VycyB8fCAnJykudHJpbSgpO1xuXG4gIGlmICh0cmltbWVkVHJpZ2dlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgcGFyc2VkVHJpZ2dlcnMgPSB0cmltbWVkVHJpZ2dlcnMuc3BsaXQoL1xccysvKS5tYXAodHJpZ2dlciA9PiB0cmlnZ2VyLnNwbGl0KCc6JykpLm1hcCgodHJpZ2dlclBhaXIpID0+IHtcbiAgICBsZXQgYWxpYXMgPSBhbGlhc2VzW3RyaWdnZXJQYWlyWzBdXSB8fCB0cmlnZ2VyUGFpcjtcbiAgICByZXR1cm4gbmV3IFRyaWdnZXIoYWxpYXNbMF0sIGFsaWFzWzFdKTtcbiAgfSk7XG5cbiAgY29uc3QgbWFudWFsVHJpZ2dlcnMgPSBwYXJzZWRUcmlnZ2Vycy5maWx0ZXIodHJpZ2dlclBhaXIgPT4gdHJpZ2dlclBhaXIuaXNNYW51YWwoKSk7XG5cbiAgaWYgKG1hbnVhbFRyaWdnZXJzLmxlbmd0aCA+IDEpIHtcbiAgICB0aHJvdyAnVHJpZ2dlcnMgcGFyc2UgZXJyb3I6IG9ubHkgb25lIG1hbnVhbCB0cmlnZ2VyIGlzIGFsbG93ZWQnO1xuICB9XG5cbiAgaWYgKG1hbnVhbFRyaWdnZXJzLmxlbmd0aCA9PT0gMSAmJiBwYXJzZWRUcmlnZ2Vycy5sZW5ndGggPiAxKSB7XG4gICAgdGhyb3cgJ1RyaWdnZXJzIHBhcnNlIGVycm9yOiBtYW51YWwgdHJpZ2dlciBjYW5cXCd0IGJlIG1peGVkIHdpdGggb3RoZXIgdHJpZ2dlcnMnO1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlZFRyaWdnZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb2JzZXJ2ZVRyaWdnZXJzKHJlbmRlcmVyOiBhbnksIG5hdGl2ZUVsZW1lbnQ6IGFueSwgdHJpZ2dlcnM6IFRyaWdnZXJbXSwgaXNPcGVuZWRGbjogKCkgPT4gYm9vbGVhbikge1xuICByZXR1cm4gbmV3IE9ic2VydmFibGU8Ym9vbGVhbj4oc3Vic2NyaWJlciA9PiB7XG4gICAgY29uc3QgbGlzdGVuZXJzID0gW107XG4gICAgY29uc3Qgb3BlbkZuID0gKCkgPT4gc3Vic2NyaWJlci5uZXh0KHRydWUpO1xuICAgIGNvbnN0IGNsb3NlRm4gPSAoKSA9PiBzdWJzY3JpYmVyLm5leHQoZmFsc2UpO1xuICAgIGNvbnN0IHRvZ2dsZUZuID0gKCkgPT4gc3Vic2NyaWJlci5uZXh0KCFpc09wZW5lZEZuKCkpO1xuXG4gICAgdHJpZ2dlcnMuZm9yRWFjaCgodHJpZ2dlcjogVHJpZ2dlcikgPT4ge1xuICAgICAgaWYgKHRyaWdnZXIub3BlbiA9PT0gdHJpZ2dlci5jbG9zZSkge1xuICAgICAgICBsaXN0ZW5lcnMucHVzaChyZW5kZXJlci5saXN0ZW4obmF0aXZlRWxlbWVudCwgdHJpZ2dlci5vcGVuLCB0b2dnbGVGbikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGlzdGVuZXJzLnB1c2goXG4gICAgICAgICAgICByZW5kZXJlci5saXN0ZW4obmF0aXZlRWxlbWVudCwgdHJpZ2dlci5vcGVuLCBvcGVuRm4pLFxuICAgICAgICAgICAgcmVuZGVyZXIubGlzdGVuKG5hdGl2ZUVsZW1lbnQsIHRyaWdnZXIuY2xvc2UsIGNsb3NlRm4pKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiAoKSA9PiB7IGxpc3RlbmVycy5mb3JFYWNoKHVuc3Vic2NyaWJlRm4gPT4gdW5zdWJzY3JpYmVGbigpKTsgfTtcbiAgfSk7XG59XG5cbmNvbnN0IGRlbGF5T3JOb29wID0gPFQ+KHRpbWU6IG51bWJlcikgPT4gdGltZSA+IDAgPyBkZWxheTxUPih0aW1lKSA6IChhOiBPYnNlcnZhYmxlPFQ+KSA9PiBhO1xuXG5leHBvcnQgZnVuY3Rpb24gdHJpZ2dlckRlbGF5KG9wZW5EZWxheTogbnVtYmVyLCBjbG9zZURlbGF5OiBudW1iZXIsIGlzT3BlbmVkRm46ICgpID0+IGJvb2xlYW4pIHtcbiAgcmV0dXJuIChpbnB1dCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4pID0+IHtcbiAgICBsZXQgcGVuZGluZyA9IG51bGw7XG4gICAgY29uc3QgZmlsdGVyZWRJbnB1dCQgPSBpbnB1dCQucGlwZShcbiAgICAgICAgbWFwKG9wZW4gPT4gKHtvcGVufSkpLCBmaWx0ZXIoZXZlbnQgPT4ge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRseU9wZW4gPSBpc09wZW5lZEZuKCk7XG4gICAgICAgICAgaWYgKGN1cnJlbnRseU9wZW4gIT09IGV2ZW50Lm9wZW4gJiYgKCFwZW5kaW5nIHx8IHBlbmRpbmcub3BlbiA9PT0gY3VycmVudGx5T3BlbikpIHtcbiAgICAgICAgICAgIHBlbmRpbmcgPSBldmVudDtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocGVuZGluZyAmJiBwZW5kaW5nLm9wZW4gIT09IGV2ZW50Lm9wZW4pIHtcbiAgICAgICAgICAgIHBlbmRpbmcgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pLFxuICAgICAgICBzaGFyZSgpKTtcbiAgICBjb25zdCBkZWxheWVkT3BlbiQgPSBmaWx0ZXJlZElucHV0JC5waXBlKGZpbHRlcihldmVudCA9PiBldmVudC5vcGVuKSwgZGVsYXlPck5vb3Aob3BlbkRlbGF5KSk7XG4gICAgY29uc3QgZGVsYXllZENsb3NlJCA9IGZpbHRlcmVkSW5wdXQkLnBpcGUoZmlsdGVyKGV2ZW50ID0+ICFldmVudC5vcGVuKSwgZGVsYXlPck5vb3AoY2xvc2VEZWxheSkpO1xuICAgIHJldHVybiBtZXJnZShkZWxheWVkT3BlbiQsIGRlbGF5ZWRDbG9zZSQpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgICAgZmlsdGVyKGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgaWYgKGV2ZW50ID09PSBwZW5kaW5nKSB7XG4gICAgICAgICAgICAgICAgcGVuZGluZyA9IG51bGw7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50Lm9wZW4gIT09IGlzT3BlbmVkRm4oKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG1hcChldmVudCA9PiBldmVudC5vcGVuKSk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsaXN0ZW5Ub1RyaWdnZXJzKFxuICAgIHJlbmRlcmVyOiBhbnksIG5hdGl2ZUVsZW1lbnQ6IGFueSwgdHJpZ2dlcnM6IHN0cmluZywgaXNPcGVuZWRGbjogKCkgPT4gYm9vbGVhbiwgb3BlbkZuLCBjbG9zZUZuLCBvcGVuRGVsYXkgPSAwLFxuICAgIGNsb3NlRGVsYXkgPSAwKSB7XG4gIGNvbnN0IHBhcnNlZFRyaWdnZXJzID0gcGFyc2VUcmlnZ2Vycyh0cmlnZ2Vycyk7XG5cbiAgaWYgKHBhcnNlZFRyaWdnZXJzLmxlbmd0aCA9PT0gMSAmJiBwYXJzZWRUcmlnZ2Vyc1swXS5pc01hbnVhbCgpKSB7XG4gICAgcmV0dXJuICgpID0+IHt9O1xuICB9XG5cbiAgY29uc3Qgc3Vic2NyaXB0aW9uID0gb2JzZXJ2ZVRyaWdnZXJzKHJlbmRlcmVyLCBuYXRpdmVFbGVtZW50LCBwYXJzZWRUcmlnZ2VycywgaXNPcGVuZWRGbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKHRyaWdnZXJEZWxheShvcGVuRGVsYXksIGNsb3NlRGVsYXksIGlzT3BlbmVkRm4pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZShvcGVuID0+IChvcGVuID8gb3BlbkZuKCkgOiBjbG9zZUZuKCkpKTtcblxuICByZXR1cm4gKCkgPT4gc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm2015/util/util.js b/dist/sunbird-ui-components/esm2015/util/util.js new file mode 100644 index 0000000..2778576 --- /dev/null +++ b/dist/sunbird-ui-components/esm2015/util/util.js @@ -0,0 +1,120 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * @param {?} value + * @return {?} + */ +export function toInteger(value) { + return parseInt(`${value}`, 10); +} +/** + * @param {?} value + * @return {?} + */ +export function toString(value) { + return (value !== undefined && value !== null) ? `${value}` : ''; +} +/** + * @param {?} value + * @param {?} max + * @param {?=} min + * @return {?} + */ +export function getValueInRange(value, max, min = 0) { + return Math.max(Math.min(value, max), min); +} +/** + * @param {?} value + * @return {?} + */ +export function isString(value) { + return typeof value === 'string'; +} +/** + * @param {?} value + * @return {?} + */ +export function isNumber(value) { + return !isNaN(toInteger(value)); +} +/** + * @param {?} value + * @return {?} + */ +export function isInteger(value) { + return typeof value === 'number' && isFinite(value) && Math.floor(value) === value; +} +/** + * @param {?} value + * @return {?} + */ +export function isDefined(value) { + return value !== undefined && value !== null; +} +/** + * @param {?} value + * @return {?} + */ +export function padNumber(value) { + if (isNumber(value)) { + return `0${value}`.slice(-2); + } + else { + return ''; + } +} +/** + * @param {?} text + * @return {?} + */ +export function regExpEscape(text) { + return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); +} +/** + * @param {?} element + * @param {?} className + * @return {?} + */ +export function hasClassName(element, className) { + return element && element.className && element.className.split && + element.className.split(/\s+/).indexOf(className) >= 0; +} +if (typeof Element !== 'undefined' && !Element.prototype.closest) { + // Polyfill for ie10+ + if (!Element.prototype.matches) { + // IE uses the non-standard name: msMatchesSelector + Element.prototype.matches = ((/** @type {?} */ (Element.prototype))).msMatchesSelector || Element.prototype.webkitMatchesSelector; + } + Element.prototype.closest = (/** + * @param {?} s + * @return {?} + */ + function (s) { + /** @type {?} */ + let el = this; + if (!document.documentElement.contains(el)) { + return null; + } + do { + if (el.matches(s)) { + return el; + } + el = el.parentElement || el.parentNode; + } while (el !== null && el.nodeType === 1); + return null; + }); +} +/** + * @param {?} element + * @param {?} selector + * @return {?} + */ +export function closest(element, selector) { + if (!selector) { + return null; + } + return element.closest(selector); +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbInV0aWwvdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLE1BQU0sVUFBVSxTQUFTLENBQUMsS0FBVTtJQUNsQyxPQUFPLFFBQVEsQ0FBQyxHQUFHLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ2xDLENBQUM7Ozs7O0FBRUQsTUFBTSxVQUFVLFFBQVEsQ0FBQyxLQUFVO0lBQ2pDLE9BQU8sQ0FBQyxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ25FLENBQUM7Ozs7Ozs7QUFFRCxNQUFNLFVBQVUsZUFBZSxDQUFDLEtBQWEsRUFBRSxHQUFXLEVBQUUsR0FBRyxHQUFHLENBQUM7SUFDakUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzdDLENBQUM7Ozs7O0FBRUQsTUFBTSxVQUFVLFFBQVEsQ0FBQyxLQUFVO0lBQ2pDLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDO0FBQ25DLENBQUM7Ozs7O0FBRUQsTUFBTSxVQUFVLFFBQVEsQ0FBQyxLQUFVO0lBQ2pDLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDbEMsQ0FBQzs7Ozs7QUFFRCxNQUFNLFVBQVUsU0FBUyxDQUFDLEtBQVU7SUFDbEMsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxDQUFDO0FBQ3JGLENBQUM7Ozs7O0FBRUQsTUFBTSxVQUFVLFNBQVMsQ0FBQyxLQUFVO0lBQ2xDLE9BQU8sS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDO0FBQy9DLENBQUM7Ozs7O0FBRUQsTUFBTSxVQUFVLFNBQVMsQ0FBQyxLQUFhO0lBQ3JDLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ25CLE9BQU8sSUFBSSxLQUFLLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUM5QjtTQUFNO1FBQ0wsT0FBTyxFQUFFLENBQUM7S0FDWDtBQUNILENBQUM7Ozs7O0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FBQyxJQUFJO0lBQy9CLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQywwQkFBMEIsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMxRCxDQUFDOzs7Ozs7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLE9BQVksRUFBRSxTQUFpQjtJQUMxRCxPQUFPLE9BQU8sSUFBSSxPQUFPLENBQUMsU0FBUyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSztRQUMxRCxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzdELENBQUM7QUFFRCxJQUFJLE9BQU8sT0FBTyxLQUFLLFdBQVcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFO0lBQ2hFLHFCQUFxQjtJQUVyQixJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUU7UUFDOUIsbURBQW1EO1FBQ25ELE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxHQUFHLENBQUMsbUJBQUEsT0FBTyxDQUFDLFNBQVMsRUFBTyxDQUFDLENBQUMsaUJBQWlCLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQztLQUNySDtJQUVELE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTzs7OztJQUFHLFVBQVMsQ0FBUzs7WUFDeEMsRUFBRSxHQUFHLElBQUk7UUFDYixJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDMUMsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELEdBQUc7WUFDRCxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2pCLE9BQU8sRUFBRSxDQUFDO2FBQ1g7WUFDRCxFQUFFLEdBQUcsRUFBRSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDO1NBQ3hDLFFBQVEsRUFBRSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUMsUUFBUSxLQUFLLENBQUMsRUFBRTtRQUMzQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUMsQ0FBQSxDQUFDO0NBQ0g7Ozs7OztBQUVELE1BQU0sVUFBVSxPQUFPLENBQUMsT0FBb0IsRUFBRSxRQUFRO0lBQ3BELElBQUksQ0FBQyxRQUFRLEVBQUU7UUFDYixPQUFPLElBQUksQ0FBQztLQUNiO0lBRUQsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ25DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gdG9JbnRlZ2VyKHZhbHVlOiBhbnkpOiBudW1iZXIge1xuICByZXR1cm4gcGFyc2VJbnQoYCR7dmFsdWV9YCwgMTApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9TdHJpbmcodmFsdWU6IGFueSk6IHN0cmluZyB7XG4gIHJldHVybiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCkgPyBgJHt2YWx1ZX1gIDogJyc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWYWx1ZUluUmFuZ2UodmFsdWU6IG51bWJlciwgbWF4OiBudW1iZXIsIG1pbiA9IDApOiBudW1iZXIge1xuICByZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4odmFsdWUsIG1heCksIG1pbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1N0cmluZyh2YWx1ZTogYW55KTogdmFsdWUgaXMgc3RyaW5nIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZyc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlcih2YWx1ZTogYW55KTogdmFsdWUgaXMgbnVtYmVyIHtcbiAgcmV0dXJuICFpc05hTih0b0ludGVnZXIodmFsdWUpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSW50ZWdlcih2YWx1ZTogYW55KTogdmFsdWUgaXMgbnVtYmVyIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUodmFsdWUpICYmIE1hdGguZmxvb3IodmFsdWUpID09PSB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGVmaW5lZCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFkTnVtYmVyKHZhbHVlOiBudW1iZXIpIHtcbiAgaWYgKGlzTnVtYmVyKHZhbHVlKSkge1xuICAgIHJldHVybiBgMCR7dmFsdWV9YC5zbGljZSgtMik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdFeHBFc2NhcGUodGV4dCkge1xuICByZXR1cm4gdGV4dC5yZXBsYWNlKC9bLVtcXF17fSgpKis/LixcXFxcXiR8I1xcc10vZywgJ1xcXFwkJicpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzQ2xhc3NOYW1lKGVsZW1lbnQ6IGFueSwgY2xhc3NOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGVsZW1lbnQgJiYgZWxlbWVudC5jbGFzc05hbWUgJiYgZWxlbWVudC5jbGFzc05hbWUuc3BsaXQgJiZcbiAgICAgIGVsZW1lbnQuY2xhc3NOYW1lLnNwbGl0KC9cXHMrLykuaW5kZXhPZihjbGFzc05hbWUpID49IDA7XG59XG5cbmlmICh0eXBlb2YgRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgIUVsZW1lbnQucHJvdG90eXBlLmNsb3Nlc3QpIHtcbiAgLy8gUG9seWZpbGwgZm9yIGllMTArXG5cbiAgaWYgKCFFbGVtZW50LnByb3RvdHlwZS5tYXRjaGVzKSB7XG4gICAgLy8gSUUgdXNlcyB0aGUgbm9uLXN0YW5kYXJkIG5hbWU6IG1zTWF0Y2hlc1NlbGVjdG9yXG4gICAgRWxlbWVudC5wcm90b3R5cGUubWF0Y2hlcyA9IChFbGVtZW50LnByb3RvdHlwZSBhcyBhbnkpLm1zTWF0Y2hlc1NlbGVjdG9yIHx8IEVsZW1lbnQucHJvdG90eXBlLndlYmtpdE1hdGNoZXNTZWxlY3RvcjtcbiAgfVxuXG4gIEVsZW1lbnQucHJvdG90eXBlLmNsb3Nlc3QgPSBmdW5jdGlvbihzOiBzdHJpbmcpIHtcbiAgICBsZXQgZWwgPSB0aGlzO1xuICAgIGlmICghZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNvbnRhaW5zKGVsKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGRvIHtcbiAgICAgIGlmIChlbC5tYXRjaGVzKHMpKSB7XG4gICAgICAgIHJldHVybiBlbDtcbiAgICAgIH1cbiAgICAgIGVsID0gZWwucGFyZW50RWxlbWVudCB8fCBlbC5wYXJlbnROb2RlO1xuICAgIH0gd2hpbGUgKGVsICE9PSBudWxsICYmIGVsLm5vZGVUeXBlID09PSAxKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsb3Nlc3QoZWxlbWVudDogSFRNTEVsZW1lbnQsIHNlbGVjdG9yKTogSFRNTEVsZW1lbnQge1xuICBpZiAoIXNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudC5jbG9zZXN0KHNlbGVjdG9yKTtcbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/accordion/accordion-config.js b/dist/sunbird-ui-components/esm5/accordion/accordion-config.js new file mode 100644 index 0000000..d083961 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/accordion/accordion-config.js @@ -0,0 +1,30 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Injectable } from '@angular/core'; +import * as i0 from "@angular/core"; +/** + * A configuration service for the [NgbAccordion](#/components/accordion/api#NgbAccordion) component. + * + * You can inject this service, typically in your root component, and customize its properties + * to provide default values for all accordions used in the application. + */ +var NgbAccordionConfig = /** @class */ (function () { + function NgbAccordionConfig() { + this.closeOthers = false; + } + NgbAccordionConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ NgbAccordionConfig.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function NgbAccordionConfig_Factory() { return new NgbAccordionConfig(); }, token: NgbAccordionConfig, providedIn: "root" }); + return NgbAccordionConfig; +}()); +export { NgbAccordionConfig }; +if (false) { + /** @type {?} */ + NgbAccordionConfig.prototype.closeOthers; + /** @type {?} */ + NgbAccordionConfig.prototype.type; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3JkaW9uLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImFjY29yZGlvbi9hY2NvcmRpb24tY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQVF6QztJQUFBO1FBRUUsZ0JBQVcsR0FBRyxLQUFLLENBQUM7S0FFckI7O2dCQUpBLFVBQVUsU0FBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUM7Ozs2QkFSaEM7Q0FZQyxBQUpELElBSUM7U0FIWSxrQkFBa0I7OztJQUM3Qix5Q0FBb0I7O0lBQ3BCLGtDQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBBIGNvbmZpZ3VyYXRpb24gc2VydmljZSBmb3IgdGhlIFtOZ2JBY2NvcmRpb25dKCMvY29tcG9uZW50cy9hY2NvcmRpb24vYXBpI05nYkFjY29yZGlvbikgY29tcG9uZW50LlxuICpcbiAqIFlvdSBjYW4gaW5qZWN0IHRoaXMgc2VydmljZSwgdHlwaWNhbGx5IGluIHlvdXIgcm9vdCBjb21wb25lbnQsIGFuZCBjdXN0b21pemUgaXRzIHByb3BlcnRpZXNcbiAqIHRvIHByb3ZpZGUgZGVmYXVsdCB2YWx1ZXMgZm9yIGFsbCBhY2NvcmRpb25zIHVzZWQgaW4gdGhlIGFwcGxpY2F0aW9uLlxuICovXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBOZ2JBY2NvcmRpb25Db25maWcge1xuICBjbG9zZU90aGVycyA9IGZhbHNlO1xuICB0eXBlOiBzdHJpbmc7XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/accordion/accordion.js b/dist/sunbird-ui-components/esm5/accordion/accordion.js new file mode 100644 index 0000000..7a1c2e8 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/accordion/accordion.js @@ -0,0 +1,593 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Component, ContentChildren, Directive, EventEmitter, Host, Input, Optional, Output, QueryList, TemplateRef } from '@angular/core'; +import { isString } from '../util/util'; +import { NgbAccordionConfig } from './accordion-config'; +/** @type {?} */ +var nextId = 0; +/** + * The context for the [NgbPanelHeader](#/components/accordion/api#NgbPanelHeader) template + * + * \@since 4.1.0 + * @record + */ +export function NgbPanelHeaderContext() { } +if (false) { + /** + * `True` if current panel is opened + * @type {?} + */ + NgbPanelHeaderContext.prototype.opened; +} +/** + * A directive that wraps an accordion panel header with any HTML markup and a toggling button + * marked with [`NgbPanelToggle`](#/components/accordion/api#NgbPanelToggle). + * See the [header customization demo](#/components/accordion/examples#header) for more details. + * + * You can also use [`NgbPanelTitle`](#/components/accordion/api#NgbPanelTitle) to customize only the panel title. + * + * \@since 4.1.0 + */ +var NgbPanelHeader = /** @class */ (function () { + function NgbPanelHeader(templateRef) { + this.templateRef = templateRef; + } + NgbPanelHeader.decorators = [ + { type: Directive, args: [{ selector: 'ng-template[ngbPanelHeader]' },] } + ]; + /** @nocollapse */ + NgbPanelHeader.ctorParameters = function () { return [ + { type: TemplateRef } + ]; }; + return NgbPanelHeader; +}()); +export { NgbPanelHeader }; +if (false) { + /** @type {?} */ + NgbPanelHeader.prototype.templateRef; +} +/** + * A directive that wraps only the panel title with HTML markup inside. + * + * You can also use [`NgbPanelHeader`](#/components/accordion/api#NgbPanelHeader) to customize the full panel header. + */ +var NgbPanelTitle = /** @class */ (function () { + function NgbPanelTitle(templateRef) { + this.templateRef = templateRef; + } + NgbPanelTitle.decorators = [ + { type: Directive, args: [{ selector: 'ng-template[ngbPanelTitle]' },] } + ]; + /** @nocollapse */ + NgbPanelTitle.ctorParameters = function () { return [ + { type: TemplateRef } + ]; }; + return NgbPanelTitle; +}()); +export { NgbPanelTitle }; +if (false) { + /** @type {?} */ + NgbPanelTitle.prototype.templateRef; +} +/** + * A directive that wraps the accordion panel content. + */ +var NgbPanelContent = /** @class */ (function () { + function NgbPanelContent(templateRef) { + this.templateRef = templateRef; + } + NgbPanelContent.decorators = [ + { type: Directive, args: [{ selector: 'ng-template[ngbPanelContent]' },] } + ]; + /** @nocollapse */ + NgbPanelContent.ctorParameters = function () { return [ + { type: TemplateRef } + ]; }; + return NgbPanelContent; +}()); +export { NgbPanelContent }; +if (false) { + /** @type {?} */ + NgbPanelContent.prototype.templateRef; +} +/** + * A directive that wraps an individual accordion panel with title and collapsible content. + */ +var NgbPanel = /** @class */ (function () { + function NgbPanel() { + /** + * If `true`, the panel is disabled an can't be toggled. + */ + this.disabled = false; + /** + * An optional id for the panel that must be unique on the page. + * + * If not provided, it will be auto-generated in the `ngb-panel-xxx` format. + */ + this.id = "ngb-panel-" + nextId++; + this.isOpen = false; + } + /** + * @return {?} + */ + NgbPanel.prototype.ngAfterContentChecked = /** + * @return {?} + */ + function () { + // We are using @ContentChildren instead of @ContentChild as in the Angular version being used + // only @ContentChildren allows us to specify the {descendants: false} option. + // Without {descendants: false} we are hitting bugs described in: + // https://github.com/ng-bootstrap/ng-bootstrap/issues/2240 + this.titleTpl = this.titleTpls.first; + this.headerTpl = this.headerTpls.first; + this.contentTpl = this.contentTpls.first; + }; + NgbPanel.decorators = [ + { type: Directive, args: [{ selector: 'ngb-panel' },] } + ]; + NgbPanel.propDecorators = { + disabled: [{ type: Input }], + id: [{ type: Input }], + title: [{ type: Input }], + type: [{ type: Input }], + titleTpls: [{ type: ContentChildren, args: [NgbPanelTitle, { descendants: false },] }], + headerTpls: [{ type: ContentChildren, args: [NgbPanelHeader, { descendants: false },] }], + contentTpls: [{ type: ContentChildren, args: [NgbPanelContent, { descendants: false },] }] + }; + return NgbPanel; +}()); +export { NgbPanel }; +if (false) { + /** + * If `true`, the panel is disabled an can't be toggled. + * @type {?} + */ + NgbPanel.prototype.disabled; + /** + * An optional id for the panel that must be unique on the page. + * + * If not provided, it will be auto-generated in the `ngb-panel-xxx` format. + * @type {?} + */ + NgbPanel.prototype.id; + /** @type {?} */ + NgbPanel.prototype.isOpen; + /** + * The panel title. + * + * You can alternatively use [`NgbPanelTitle`](#/components/accordion/api#NgbPanelTitle) to set panel title. + * @type {?} + */ + NgbPanel.prototype.title; + /** + * Type of the current panel. + * + * Bootstrap provides styles for the following types: `'success'`, `'info'`, `'warning'`, `'danger'`, `'primary'`, + * `'secondary'`, `'light'` and `'dark'`. + * @type {?} + */ + NgbPanel.prototype.type; + /** @type {?} */ + NgbPanel.prototype.titleTpl; + /** @type {?} */ + NgbPanel.prototype.headerTpl; + /** @type {?} */ + NgbPanel.prototype.contentTpl; + /** @type {?} */ + NgbPanel.prototype.titleTpls; + /** @type {?} */ + NgbPanel.prototype.headerTpls; + /** @type {?} */ + NgbPanel.prototype.contentTpls; +} +/** + * An event emitted right before toggling an accordion panel. + * @record + */ +export function NgbPanelChangeEvent() { } +if (false) { + /** + * The id of the accordion panel that is being toggled. + * @type {?} + */ + NgbPanelChangeEvent.prototype.panelId; + /** + * The next state of the panel. + * + * `true` if it will be opened, `false` if closed. + * @type {?} + */ + NgbPanelChangeEvent.prototype.nextState; + /** + * Calling this function will prevent panel toggling. + * @type {?} + */ + NgbPanelChangeEvent.prototype.preventDefault; +} +/** + * Accordion is a collection of collapsible panels (bootstrap cards). + * + * It can ensure only one panel is opened at a time and allows to customize panel + * headers. + */ +var NgbAccordion = /** @class */ (function () { + function NgbAccordion(config) { + /** + * An array or comma separated strings of panel ids that should be opened **initially**. + * + * For subsequent changes use methods like `expand()`, `collapse()`, etc. and + * the `(panelChange)` event. + */ + this.activeIds = []; + /** + * If `true`, panel content will be detached from DOM and not simply hidden when the panel is collapsed. + */ + this.destroyOnHide = true; + /** + * Event emitted right before the panel toggle happens. + * + * See [NgbPanelChangeEvent](#/components/accordion/api#NgbPanelChangeEvent) for payload details. + */ + this.panelChange = new EventEmitter(); + this.type = config.type; + this.closeOtherPanels = config.closeOthers; + } + /** + * Checks if a panel with a given id is expanded. + */ + /** + * Checks if a panel with a given id is expanded. + * @param {?} panelId + * @return {?} + */ + NgbAccordion.prototype.isExpanded = /** + * Checks if a panel with a given id is expanded. + * @param {?} panelId + * @return {?} + */ + function (panelId) { return this.activeIds.indexOf(panelId) > -1; }; + /** + * Expands a panel with a given id. + * + * Has no effect if the panel is already expanded or disabled. + */ + /** + * Expands a panel with a given id. + * + * Has no effect if the panel is already expanded or disabled. + * @param {?} panelId + * @return {?} + */ + NgbAccordion.prototype.expand = /** + * Expands a panel with a given id. + * + * Has no effect if the panel is already expanded or disabled. + * @param {?} panelId + * @return {?} + */ + function (panelId) { this._changeOpenState(this._findPanelById(panelId), true); }; + /** + * Expands all panels, if `[closeOthers]` is `false`. + * + * If `[closeOthers]` is `true`, it will expand the first panel, unless there is already a panel opened. + */ + /** + * Expands all panels, if `[closeOthers]` is `false`. + * + * If `[closeOthers]` is `true`, it will expand the first panel, unless there is already a panel opened. + * @return {?} + */ + NgbAccordion.prototype.expandAll = /** + * Expands all panels, if `[closeOthers]` is `false`. + * + * If `[closeOthers]` is `true`, it will expand the first panel, unless there is already a panel opened. + * @return {?} + */ + function () { + var _this = this; + if (this.closeOtherPanels) { + if (this.activeIds.length === 0 && this.panels.length) { + this._changeOpenState(this.panels.first, true); + } + } + else { + this.panels.forEach((/** + * @param {?} panel + * @return {?} + */ + function (panel) { return _this._changeOpenState(panel, true); })); + } + }; + /** + * Collapses a panel with the given id. + * + * Has no effect if the panel is already collapsed or disabled. + */ + /** + * Collapses a panel with the given id. + * + * Has no effect if the panel is already collapsed or disabled. + * @param {?} panelId + * @return {?} + */ + NgbAccordion.prototype.collapse = /** + * Collapses a panel with the given id. + * + * Has no effect if the panel is already collapsed or disabled. + * @param {?} panelId + * @return {?} + */ + function (panelId) { this._changeOpenState(this._findPanelById(panelId), false); }; + /** + * Collapses all opened panels. + */ + /** + * Collapses all opened panels. + * @return {?} + */ + NgbAccordion.prototype.collapseAll = /** + * Collapses all opened panels. + * @return {?} + */ + function () { + var _this = this; + this.panels.forEach((/** + * @param {?} panel + * @return {?} + */ + function (panel) { _this._changeOpenState(panel, false); })); + }; + /** + * Toggles a panel with the given id. + * + * Has no effect if the panel is disabled. + */ + /** + * Toggles a panel with the given id. + * + * Has no effect if the panel is disabled. + * @param {?} panelId + * @return {?} + */ + NgbAccordion.prototype.toggle = /** + * Toggles a panel with the given id. + * + * Has no effect if the panel is disabled. + * @param {?} panelId + * @return {?} + */ + function (panelId) { + /** @type {?} */ + var panel = this._findPanelById(panelId); + if (panel) { + this._changeOpenState(panel, !panel.isOpen); + } + }; + /** + * @return {?} + */ + NgbAccordion.prototype.ngAfterContentChecked = /** + * @return {?} + */ + function () { + var _this = this; + // active id updates + if (isString(this.activeIds)) { + this.activeIds = this.activeIds.split(/\s*,\s*/); + } + // update panels open states + this.panels.forEach((/** + * @param {?} panel + * @return {?} + */ + function (panel) { return panel.isOpen = !panel.disabled && _this.activeIds.indexOf(panel.id) > -1; })); + // closeOthers updates + if (this.activeIds.length > 1 && this.closeOtherPanels) { + this._closeOthers(this.activeIds[0]); + this._updateActiveIds(); + } + }; + /** + * @private + * @param {?} panel + * @param {?} nextState + * @return {?} + */ + NgbAccordion.prototype._changeOpenState = /** + * @private + * @param {?} panel + * @param {?} nextState + * @return {?} + */ + function (panel, nextState) { + if (panel && !panel.disabled && panel.isOpen !== nextState) { + /** @type {?} */ + var defaultPrevented_1 = false; + this.panelChange.emit({ panelId: panel.id, nextState: nextState, preventDefault: (/** + * @return {?} + */ + function () { defaultPrevented_1 = true; }) }); + if (!defaultPrevented_1) { + panel.isOpen = nextState; + if (nextState && this.closeOtherPanels) { + this._closeOthers(panel.id); + } + this._updateActiveIds(); + } + } + }; + /** + * @private + * @param {?} panelId + * @return {?} + */ + NgbAccordion.prototype._closeOthers = /** + * @private + * @param {?} panelId + * @return {?} + */ + function (panelId) { + this.panels.forEach((/** + * @param {?} panel + * @return {?} + */ + function (panel) { + if (panel.id !== panelId) { + panel.isOpen = false; + } + })); + }; + /** + * @private + * @param {?} panelId + * @return {?} + */ + NgbAccordion.prototype._findPanelById = /** + * @private + * @param {?} panelId + * @return {?} + */ + function (panelId) { return this.panels.find((/** + * @param {?} p + * @return {?} + */ + function (p) { return p.id === panelId; })); }; + /** + * @private + * @return {?} + */ + NgbAccordion.prototype._updateActiveIds = /** + * @private + * @return {?} + */ + function () { + this.activeIds = this.panels.filter((/** + * @param {?} panel + * @return {?} + */ + function (panel) { return panel.isOpen && !panel.disabled; })).map((/** + * @param {?} panel + * @return {?} + */ + function (panel) { return panel.id; })); + }; + NgbAccordion.decorators = [ + { type: Component, args: [{ + selector: 'ngb-accordion', + exportAs: 'ngbAccordion', + host: { 'class': 'accordion', 'role': 'tablist', '[attr.aria-multiselectable]': '!closeOtherPanels' }, + template: "\n \n \n \n \n
\n
\n \n
\n
\n
\n \n
\n
\n
\n
\n " + }] } + ]; + /** @nocollapse */ + NgbAccordion.ctorParameters = function () { return [ + { type: NgbAccordionConfig } + ]; }; + NgbAccordion.propDecorators = { + panels: [{ type: ContentChildren, args: [NgbPanel,] }], + activeIds: [{ type: Input }], + closeOtherPanels: [{ type: Input, args: ['closeOthers',] }], + destroyOnHide: [{ type: Input }], + type: [{ type: Input }], + panelChange: [{ type: Output }] + }; + return NgbAccordion; +}()); +export { NgbAccordion }; +if (false) { + /** @type {?} */ + NgbAccordion.prototype.panels; + /** + * An array or comma separated strings of panel ids that should be opened **initially**. + * + * For subsequent changes use methods like `expand()`, `collapse()`, etc. and + * the `(panelChange)` event. + * @type {?} + */ + NgbAccordion.prototype.activeIds; + /** + * If `true`, only one panel could be opened at a time. + * + * Opening a new panel will close others. + * @type {?} + */ + NgbAccordion.prototype.closeOtherPanels; + /** + * If `true`, panel content will be detached from DOM and not simply hidden when the panel is collapsed. + * @type {?} + */ + NgbAccordion.prototype.destroyOnHide; + /** + * Type of panels. + * + * Bootstrap provides styles for the following types: `'success'`, `'info'`, `'warning'`, `'danger'`, `'primary'`, + * `'secondary'`, `'light'` and `'dark'`. + * @type {?} + */ + NgbAccordion.prototype.type; + /** + * Event emitted right before the panel toggle happens. + * + * See [NgbPanelChangeEvent](#/components/accordion/api#NgbPanelChangeEvent) for payload details. + * @type {?} + */ + NgbAccordion.prototype.panelChange; +} +/** + * A directive to put on a button that toggles panel opening and closing. + * + * To be used inside the [`NgbPanelHeader`](#/components/accordion/api#NgbPanelHeader) + * + * \@since 4.1.0 + */ +var NgbPanelToggle = /** @class */ (function () { + function NgbPanelToggle(accordion, panel) { + this.accordion = accordion; + this.panel = panel; + } + Object.defineProperty(NgbPanelToggle.prototype, "ngbPanelToggle", { + set: /** + * @param {?} panel + * @return {?} + */ + function (panel) { + if (panel) { + this.panel = panel; + } + }, + enumerable: true, + configurable: true + }); + NgbPanelToggle.decorators = [ + { type: Directive, args: [{ + selector: 'button[ngbPanelToggle]', + host: { + 'type': 'button', + '[disabled]': 'panel.disabled', + '[class.collapsed]': '!panel.isOpen', + '[attr.aria-expanded]': 'panel.isOpen', + '[attr.aria-controls]': 'panel.id', + '(click)': 'accordion.toggle(panel.id)' + } + },] } + ]; + /** @nocollapse */ + NgbPanelToggle.ctorParameters = function () { return [ + { type: NgbAccordion }, + { type: NgbPanel, decorators: [{ type: Optional }, { type: Host }] } + ]; }; + NgbPanelToggle.propDecorators = { + ngbPanelToggle: [{ type: Input }] + }; + return NgbPanelToggle; +}()); +export { NgbPanelToggle }; +if (false) { + /** @type {?} */ + NgbPanelToggle.prototype.accordion; + /** @type {?} */ + NgbPanelToggle.prototype.panel; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3JkaW9uLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiYWNjb3JkaW9uL2FjY29yZGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxlQUFlLEVBQ2YsU0FBUyxFQUNULFlBQVksRUFDWixJQUFJLEVBQ0osS0FBSyxFQUNMLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNULFdBQVcsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRXRDLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLG9CQUFvQixDQUFDOztJQUVsRCxNQUFNLEdBQUcsQ0FBQzs7Ozs7OztBQU9kLDJDQUtDOzs7Ozs7SUFEQyx1Q0FBZ0I7Ozs7Ozs7Ozs7O0FBWWxCO0lBRUUsd0JBQW1CLFdBQTZCO1FBQTdCLGdCQUFXLEdBQVgsV0FBVyxDQUFrQjtJQUFHLENBQUM7O2dCQUZyRCxTQUFTLFNBQUMsRUFBQyxRQUFRLEVBQUUsNkJBQTZCLEVBQUM7Ozs7Z0JBOUJsRCxXQUFXOztJQWlDYixxQkFBQztDQUFBLEFBSEQsSUFHQztTQUZZLGNBQWM7OztJQUNiLHFDQUFvQzs7Ozs7OztBQVFsRDtJQUVFLHVCQUFtQixXQUE2QjtRQUE3QixnQkFBVyxHQUFYLFdBQVcsQ0FBa0I7SUFBRyxDQUFDOztnQkFGckQsU0FBUyxTQUFDLEVBQUMsUUFBUSxFQUFFLDRCQUE0QixFQUFDOzs7O2dCQXhDakQsV0FBVzs7SUEyQ2Isb0JBQUM7Q0FBQSxBQUhELElBR0M7U0FGWSxhQUFhOzs7SUFDWixvQ0FBb0M7Ozs7O0FBTWxEO0lBRUUseUJBQW1CLFdBQTZCO1FBQTdCLGdCQUFXLEdBQVgsV0FBVyxDQUFrQjtJQUFHLENBQUM7O2dCQUZyRCxTQUFTLFNBQUMsRUFBQyxRQUFRLEVBQUUsOEJBQThCLEVB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Q0FBOEI7Ozs7Ozs7O0lBUTlCLDRCQUFzQjs7Ozs7OztJQU90QixtQ0FBZ0U7Ozs7Ozs7OztBQW9IbEU7SUFtQkUsd0JBQW1CLFNBQXVCLEVBQTZCLEtBQWU7UUFBbkUsY0FBUyxHQUFULFNBQVMsQ0FBYztRQUE2QixVQUFLLEdBQUwsS0FBSyxDQUFVO0lBQUcsQ0FBQztJQVAxRixzQkFDSSwwQ0FBYzs7Ozs7UUFEbEIsVUFDbUIsS0FBZTtZQUNoQyxJQUFJLEtBQUssRUFBRTtnQkFDVCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQzthQUNwQjtRQUNILENBQUM7OztPQUFBOztnQkFqQkYsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSx3QkFBd0I7b0JBQ2xDLElBQUksRUFBRTt3QkFDSixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsWUFBWSxFQUFFLGdCQUFnQjt3QkFDOUIsbUJBQW1CLEVBQUUsZUFBZTt3QkFDcEMsc0JBQXNCLEVBQUUsY0FBYzt3QkFDdEMsc0JBQXNCLEVBQUUsVUFBVTt3QkFDbEMsU0FBUyxFQUFFLDRCQUE0QjtxQkFDeEM7aUJBQ0Y7Ozs7Z0JBUytCLFlBQVk7Z0JBQW9DLFFBQVEsdUJBQXpDLFFBQVEsWUFBSSxJQUFJOzs7aUNBUDVELEtBQUs7O0lBUVIscUJBQUM7Q0FBQSxBQXBCRCxJQW9CQztTQVRZLGNBQWM7OztJQVFiLG1DQUE4Qjs7SUFBRSwrQkFBMEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRDaGVja2VkLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRGlyZWN0aXZlLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3QsXG4gIElucHV0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFRlbXBsYXRlUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge2lzU3RyaW5nfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuXG5pbXBvcnQge05nYkFjY29yZGlvbkNvbmZpZ30gZnJvbSAnLi9hY2NvcmRpb24tY29uZmlnJztcblxubGV0IG5leHRJZCA9IDA7XG5cbi8qKlxuICogVGhlIGNvbnRleHQgZm9yIHRoZSBbTmdiUGFuZWxIZWFkZXJdKCMvY29tcG9uZW50cy9hY2NvcmRpb24vYXBpI05nYlBhbmVsSGVhZGVyKSB0ZW1wbGF0ZVxuICpcbiAqIEBzaW5jZSA0LjEuMFxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5nYlBhbmVsSGVhZGVyQ29udGV4dCB7XG4gIC8qKlxuICAgKiBgVHJ1ZWAgaWYgY3VycmVudCBwYW5lbCBpcyBvcGVuZWRcbiAgICovXG4gIG9wZW5lZDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBBIGRpcmVjdGl2ZSB0aGF0IHdyYXBzIGFuIGFjY29yZGlvbiBwYW5lbCBoZWFkZXIgd2l0aCBhbnkgSFRNTCBtYXJrdXAgYW5kIGEgdG9nZ2xpbmcgYnV0dG9uXG4gKiBtYXJrZWQgd2l0aCBbYE5nYlBhbmVsVG9nZ2xlYF0oIy9jb21wb25lbnRzL2FjY29yZGlvbi9hcGkjTmdiUGFuZWxUb2dnbGUpLlxuICogU2VlIHRoZSBbaGVhZGVyIGN1c3RvbWl6YXRpb24gZGVtb10oIy9jb21wb25lbnRzL2FjY29yZGlvbi9leGFtcGxlcyNoZWFkZXIpIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogWW91IGNhbiBhbHNvIHVzZSBbYE5nYlBhbmVsVGl0bGVgXSgjL2NvbXBvbmVudHMvYWNjb3JkaW9uL2FwaSNOZ2JQYW5lbFRpdGxlKSB0byBjdXN0b21pemUgb25seSB0aGUgcGFuZWwgdGl0bGUuXG4gKlxuICogQHNpbmNlIDQuMS4wXG4gKi9cbkBEaXJlY3RpdmUoe3NlbGVjdG9yOiAnbmctdGVtcGxhdGVbbmdiUGFuZWxIZWFkZXJdJ30pXG5leHBvcnQgY2xhc3MgTmdiUGFuZWxIZWFkZXIge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4pIHt9XG59XG5cbi8qKlxuICogQSBkaXJlY3RpdmUgdGhhdCB3cmFwcyBvbmx5IHRoZSBwYW5lbCB0aXRsZSB3aXRoIEhUTUwgbWFya3VwIGluc2lkZS5cbiAqXG4gKiBZb3UgY2FuIGFsc28gdXNlIFtgTmdiUGFuZWxIZWFkZXJgXSgjL2NvbXBvbmVudHMvYWNjb3JkaW9uL2FwaSNOZ2JQYW5lbEhlYWRlcikgdG8gY3VzdG9taXplIHRoZSBmdWxsIHBhbmVsIGhlYWRlci5cbiAqL1xuQERpcmVjdGl2ZSh7c2VsZWN0b3I6ICduZy10ZW1wbGF0ZVtuZ2JQYW5lbFRpdGxlXSd9KVxuZXhwb3J0IGNsYXNzIE5nYlBhbmVsVGl0bGUge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4pIHt9XG59XG5cbi8qKlxuICogQSBkaXJlY3RpdmUgdGhhdCB3cmFwcyB0aGUgYWNjb3JkaW9uIHBhbmVsIGNvbnRlbnQuXG4gKi9cbkBEaXJlY3RpdmUoe3NlbGVjdG9yOiAnbmctdGVtcGxhdGVbbmdiUGFuZWxDb250ZW50XSd9KVxuZXhwb3J0IGNsYXNzIE5nYlBhbmVsQ29udGVudCB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55Pikge31cbn1cblxuLyoqXG4gKiBBIGRpcmVjdGl2ZSB0aGF0IHdyYXBzIGFuIGluZGl2aWR1YWwgYWNjb3JkaW9uIHBhbmVsIHdpdGggdGl0bGUgYW5kIGNvbGxhcHNpYmxlIGNvbnRlbnQuXG4gKi9cbkBEaXJlY3RpdmUoe3NlbGVjdG9yOiAnbmdiLXBhbmVsJ30pXG5leHBvcnQgY2xhc3MgTmdiUGFuZWwgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRDaGVja2VkIHtcbiAgLyoqXG4gICAqICBJZiBgdHJ1ZWAsIHRoZSBwYW5lbCBpcyBkaXNhYmxlZCBhbiBjYW4ndCBiZSB0b2dnbGVkLlxuICAgKi9cbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogIEFuIG9wdGlvbmFsIGlkIGZvciB0aGUgcGFuZWwgdGhhdCBtdXN0IGJlIHVuaXF1ZSBvbiB0aGUgcGFnZS5cbiAgICpcbiAgICogIElmIG5vdCBwcm92aWRlZCwgaXQgd2lsbCBiZSBhdXRvLWdlbmVyYXRlZCBpbiB0aGUgYG5nYi1wYW5lbC14eHhgIGZvcm1hdC5cbiAgICovXG4gIEBJbnB1dCgpIGlkID0gYG5nYi1wYW5lbC0ke25leHRJZCsrfWA7XG5cbiAgaXNPcGVuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqICBUaGUgcGFuZWwgdGl0bGUuXG4gICAqXG4gICAqICBZb3UgY2FuIGFsdGVybmF0aXZlbHkgdXNlIFtgTmdiUGFuZWxUaXRsZWBdKCMvY29tcG9uZW50cy9hY2NvcmRpb24vYXBpI05nYlBhbmVsVGl0bGUpIHRvIHNldCBwYW5lbCB0aXRsZS5cbiAgICovXG4gIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFR5cGUgb2YgdGhlIGN1cnJlbnQgcGFuZWwuXG4gICAqXG4gICAqIEJvb3RzdHJhcCBwcm92aWRlcyBzdHlsZXMgZm9yIHRoZSBmb2xsb3dpbmcgdHlwZXM6IGAnc3VjY2VzcydgLCBgJ2luZm8nYCwgYCd3YXJuaW5nJ2AsIGAnZGFuZ2VyJ2AsIGAncHJpbWFyeSdgLFxuICAgKiBgJ3NlY29uZGFyeSdgLCBgJ2xpZ2h0J2AgYW5kIGAnZGFyaydgLlxuICAgKi9cbiAgQElucHV0KCkgdHlwZTogc3RyaW5nO1xuXG4gIHRpdGxlVHBsOiBOZ2JQYW5lbFRpdGxlIHwgbnVsbDtcbiAgaGVhZGVyVHBsOiBOZ2JQYW5lbEhlYWRlciB8IG51bGw7XG4gIGNvbnRlbnRUcGw6IE5nYlBhbmVsQ29udGVudCB8IG51bGw7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihOZ2JQYW5lbFRpdGxlLCB7ZGVzY2VuZGFudHM6IGZhbHNlfSkgdGl0bGVUcGxzOiBRdWVyeUxpc3Q8TmdiUGFuZWxUaXRsZT47XG4gIEBDb250ZW50Q2hpbGRyZW4oTmdiUGFuZWxIZWFkZXIsIHtkZXNjZW5kYW50czogZmFsc2V9KSBoZWFkZXJUcGxzOiBRdWVyeUxpc3Q8TmdiUGFuZWxIZWFkZXI+O1xuICBAQ29udGVudENoaWxkcmVuKE5nYlBhbmVsQ29udGVudCwge2Rlc2NlbmRhbnRzOiBmYWxzZX0pIGNvbnRlbnRUcGxzOiBRdWVyeUxpc3Q8TmdiUGFuZWxDb250ZW50PjtcblxuICBuZ0FmdGVyQ29udGVudENoZWNrZWQoKSB7XG4gICAgLy8gV2UgYXJlIHVzaW5nIEBDb250ZW50Q2hpbGRyZW4gaW5zdGVhZCBvZiBAQ29udGVudENoaWxkIGFzIGluIHRoZSBBbmd1bGFyIHZlcnNpb24gYmVpbmcgdXNlZFxuICAgIC8vIG9ubHkgQENvbnRlbnRDaGlsZHJlbiBhbGxvd3MgdXMgdG8gc3BlY2lmeSB0aGUge2Rlc2NlbmRhbnRzOiBmYWxzZX0gb3B0aW9uLlxuICAgIC8vIFdpdGhvdXQge2Rlc2NlbmRhbnRzOiBmYWxzZX0gd2UgYXJlIGhpdHRpbmcgYnVncyBkZXNjcmliZWQgaW46XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAvaXNzdWVzLzIyNDBcbiAgICB0aGlzLnRpdGxlVHBsID0gdGhpcy50aXRsZVRwbHMuZmlyc3Q7XG4gICAgdGhpcy5oZWFkZXJUcGwgPSB0aGlzLmhlYWRlclRwbHMuZmlyc3Q7XG4gICAgdGhpcy5jb250ZW50VHBsID0gdGhpcy5jb250ZW50VHBscy5maXJzdDtcbiAgfVxufVxuXG4vKipcbiAqIEFuIGV2ZW50IGVtaXR0ZWQgcmlnaHQgYmVmb3JlIHRvZ2dsaW5nIGFuIGFjY29yZGlvbiBwYW5lbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZ2JQYW5lbENoYW5nZUV2ZW50IHtcbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgYWNjb3JkaW9uIHBhbmVsIHRoYXQgaXMgYmVpbmcgdG9nZ2xlZC5cbiAgICovXG4gIHBhbmVsSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5leHQgc3RhdGUgb2YgdGhlIHBhbmVsLlxuICAgKlxuICAgKiBgdHJ1ZWAgaWYgaXQgd2lsbCBiZSBvcGVuZWQsIGBmYWxzZWAgaWYgY2xvc2VkLlxuICAgKi9cbiAgbmV4dFN0YXRlOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBwcmV2ZW50IHBhbmVsIHRvZ2dsaW5nLlxuICAgKi9cbiAgcHJldmVudERlZmF1bHQ6ICgpID0+IHZvaWQ7XG59XG5cbi8qKlxuICogQWNjb3JkaW9uIGlzIGEgY29sbGVjdGlvbiBvZiBjb2xsYXBzaWJsZSBwYW5lbHMgKGJvb3RzdHJhcCBjYXJkcykuXG4gKlxuICogSXQgY2FuIGVuc3VyZSBvbmx5IG9uZSBwYW5lbCBpcyBvcGVuZWQgYXQgYSB0aW1lIGFuZCBhbGxvd3MgdG8gY3VzdG9taXplIHBhbmVsXG4gKiBoZWFkZXJzLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ2ItYWNjb3JkaW9uJyxcbiAgZXhwb3J0QXM6ICduZ2JBY2NvcmRpb24nLFxuICBob3N0OiB7J2NsYXNzJzogJ2FjY29yZGlvbicsICdyb2xlJzogJ3RhYmxpc3QnLCAnW2F0dHIuYXJpYS1tdWx0aXNlbGVjdGFibGVdJzogJyFjbG9zZU90aGVyUGFuZWxzJ30sXG4gIHRlbXBsYXRlOiBgXG4gICAgPG5nLXRlbXBsYXRlICN0IG5nYlBhbmVsSGVhZGVyIGxldC1wYW5lbD5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWxpbmtcIiBbbmdiUGFuZWxUb2dnbGVdPVwicGFuZWxcIj5cbiAgICAgICAge3twYW5lbC50aXRsZX19PG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInBhbmVsLnRpdGxlVHBsPy50ZW1wbGF0ZVJlZlwiPjwvbmctdGVtcGxhdGU+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSBuZ0ZvciBsZXQtcGFuZWwgW25nRm9yT2ZdPVwicGFuZWxzXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxuICAgICAgICA8ZGl2IHJvbGU9XCJ0YWJcIiBpZD1cInt7cGFuZWwuaWR9fS1oZWFkZXJcIiBbY2xhc3NdPVwiJ2NhcmQtaGVhZGVyICcgKyAocGFuZWwudHlwZSA/ICdiZy0nK3BhbmVsLnR5cGU6IHR5cGUgPyAnYmctJyt0eXBlIDogJycpXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInBhbmVsLmhlYWRlclRwbD8udGVtcGxhdGVSZWYgfHwgdFwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7JGltcGxpY2l0OiBwYW5lbCwgb3BlbmVkOiBwYW5lbC5pc09wZW59XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgaWQ9XCJ7e3BhbmVsLmlkfX1cIiByb2xlPVwidGFicGFuZWxcIiBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwicGFuZWwuaWQgKyAnLWhlYWRlcidcIlxuICAgICAgICAgICAgIGNsYXNzPVwiY29sbGFwc2VcIiBbY2xhc3Muc2hvd109XCJwYW5lbC5pc09wZW5cIiAqbmdJZj1cIiFkZXN0cm95T25IaWRlIHx8IHBhbmVsLmlzT3BlblwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJwYW5lbC5jb250ZW50VHBsPy50ZW1wbGF0ZVJlZlwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgYFxufSlcbmV4cG9ydCBjbGFzcyBOZ2JBY2NvcmRpb24gaW1wbGVtZW50cyBBZnRlckNvbnRlbnRDaGVja2VkIHtcbiAgQENvbnRlbnRDaGlsZHJlbihOZ2JQYW5lbCkgcGFuZWxzOiBRdWVyeUxpc3Q8TmdiUGFuZWw+O1xuXG4gIC8qKlxuICAgKiBBbiBhcnJheSBvciBjb21tYSBzZXBhcmF0ZWQgc3RyaW5ncyBvZiBwYW5lbCBpZHMgdGhhdCBzaG91bGQgYmUgb3BlbmVkICoqaW5pdGlhbGx5KiouXG4gICAqXG4gICAqIEZvciBzdWJzZXF1ZW50IGNoYW5nZXMgdXNlIG1ldGhvZHMgbGlrZSBgZXhwYW5kKClgLCBgY29sbGFwc2UoKWAsIGV0Yy4gYW5kXG4gICAqIHRoZSBgKHBhbmVsQ2hhbmdlKWAgZXZlbnQuXG4gICAqL1xuICBASW5wdXQoKSBhY3RpdmVJZHM6IHN0cmluZyB8IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqICBJZiBgdHJ1ZWAsIG9ubHkgb25lIHBhbmVsIGNvdWxkIGJlIG9wZW5lZCBhdCBhIHRpbWUuXG4gICAqXG4gICAqICBPcGVuaW5nIGEgbmV3IHBhbmVsIHdpbGwgY2xvc2Ugb3RoZXJzLlxuICAgKi9cbiAgQElucHV0KCdjbG9zZU90aGVycycpIGNsb3NlT3RoZXJQYW5lbHM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgcGFuZWwgY29udGVudCB3aWxsIGJlIGRldGFjaGVkIGZyb20gRE9NIGFuZCBub3Qgc2ltcGx5IGhpZGRlbiB3aGVuIHRoZSBwYW5lbCBpcyBjb2xsYXBzZWQuXG4gICAqL1xuICBASW5wdXQoKSBkZXN0cm95T25IaWRlID0gdHJ1ZTtcblxuICAvKipcbiAgICogVHlwZSBvZiBwYW5lbHMuXG4gICAqXG4gICAqIEJvb3RzdHJhcCBwcm92aWRlcyBzdHlsZXMgZm9yIHRoZSBmb2xsb3dpbmcgdHlwZXM6IGAnc3VjY2VzcydgLCBgJ2luZm8nYCwgYCd3YXJuaW5nJ2AsIGAnZGFuZ2VyJ2AsIGAncHJpbWFyeSdgLFxuICAgKiBgJ3NlY29uZGFyeSdgLCBgJ2xpZ2h0J2AgYW5kIGAnZGFyaydgLlxuICAgKi9cbiAgQElucHV0KCkgdHlwZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFdmVudCBlbWl0dGVkIHJpZ2h0IGJlZm9yZSB0aGUgcGFuZWwgdG9nZ2xlIGhhcHBlbnMuXG4gICAqXG4gICAqIFNlZSBbTmdiUGFuZWxDaGFuZ2VFdmVudF0oIy9jb21wb25lbnRzL2FjY29yZGlvbi9hcGkjTmdiUGFuZWxDaGFuZ2VFdmVudCkgZm9yIHBheWxvYWQgZGV0YWlscy5cbiAgICovXG4gIEBPdXRwdXQoKSBwYW5lbENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8TmdiUGFuZWxDaGFuZ2VFdmVudD4oKTtcblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IE5nYkFjY29yZGlvbkNvbmZpZykge1xuICAgIHRoaXMudHlwZSA9IGNvbmZpZy50eXBlO1xuICAgIHRoaXMuY2xvc2VPdGhlclBhbmVscyA9IGNvbmZpZy5jbG9zZU90aGVycztcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSBwYW5lbCB3aXRoIGEgZ2l2ZW4gaWQgaXMgZXhwYW5kZWQuXG4gICAqL1xuICBpc0V4cGFuZGVkKHBhbmVsSWQ6IHN0cmluZyk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5hY3RpdmVJZHMuaW5kZXhPZihwYW5lbElkKSA+IC0xOyB9XG5cbiAgLyoqXG4gICAqIEV4cGFuZHMgYSBwYW5lbCB3aXRoIGEgZ2l2ZW4gaWQuXG4gICAqXG4gICAqIEhhcyBubyBlZmZlY3QgaWYgdGhlIHBhbmVsIGlzIGFscmVhZHkgZXhwYW5kZWQgb3IgZGlzYWJsZWQuXG4gICAqL1xuICBleHBhbmQocGFuZWxJZDogc3RyaW5nKTogdm9pZCB7IHRoaXMuX2NoYW5nZU9wZW5TdGF0ZSh0aGlzLl9maW5kUGFuZWxCeUlkKHBhbmVsSWQpLCB0cnVlKTsgfVxuXG4gIC8qKlxuICAgKiBFeHBhbmRzIGFsbCBwYW5lbHMsIGlmIGBbY2xvc2VPdGhlcnNdYCBpcyBgZmFsc2VgLlxuICAgKlxuICAgKiBJZiBgW2Nsb3NlT3RoZXJzXWAgaXMgYHRydWVgLCBpdCB3aWxsIGV4cGFuZCB0aGUgZmlyc3QgcGFuZWwsIHVubGVzcyB0aGVyZSBpcyBhbHJlYWR5IGEgcGFuZWwgb3BlbmVkLlxuICAgKi9cbiAgZXhwYW5kQWxsKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNsb3NlT3RoZXJQYW5lbHMpIHtcbiAgICAgIGlmICh0aGlzLmFjdGl2ZUlkcy5sZW5ndGggPT09IDAgJiYgdGhpcy5wYW5lbHMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuX2NoYW5nZU9wZW5TdGF0ZSh0aGlzLnBhbmVscy5maXJzdCwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFuZWxzLmZvckVhY2gocGFuZWwgPT4gdGhpcy5fY2hhbmdlT3BlblN0YXRlKHBhbmVsLCB0cnVlKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbGxhcHNlcyBhIHBhbmVsIHdpdGggdGhlIGdpdmVuIGlkLlxuICAgKlxuICAgKiBIYXMgbm8gZWZmZWN0IGlmIHRoZSBwYW5lbCBpcyBhbHJlYWR5IGNvbGxhcHNlZCBvciBkaXNhYmxlZC5cbiAgICovXG4gIGNvbGxhcHNlKHBhbmVsSWQ6IHN0cmluZykgeyB0aGlzLl9jaGFuZ2VPcGVuU3RhdGUodGhpcy5fZmluZFBhbmVsQnlJZChwYW5lbElkKSwgZmFsc2UpOyB9XG5cbiAgLyoqXG4gICAqIENvbGxhcHNlcyBhbGwgb3BlbmVkIHBhbmVscy5cbiAgICovXG4gIGNvbGxhcHNlQWxsKCkge1xuICAgIHRoaXMucGFuZWxzLmZvckVhY2goKHBhbmVsKSA9PiB7IHRoaXMuX2NoYW5nZU9wZW5TdGF0ZShwYW5lbCwgZmFsc2UpOyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIGEgcGFuZWwgd2l0aCB0aGUgZ2l2ZW4gaWQuXG4gICAqXG4gICAqIEhhcyBubyBlZmZlY3QgaWYgdGhlIHBhbmVsIGlzIGRpc2FibGVkLlxuICAgKi9cbiAgdG9nZ2xlKHBhbmVsSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IHBhbmVsID0gdGhpcy5fZmluZFBhbmVsQnlJZChwYW5lbElkKTtcbiAgICBpZiAocGFuZWwpIHtcbiAgICAgIHRoaXMuX2NoYW5nZU9wZW5TdGF0ZShwYW5lbCwgIXBhbmVsLmlzT3Blbik7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCkge1xuICAgIC8vIGFjdGl2ZSBpZCB1cGRhdGVzXG4gICAgaWYgKGlzU3RyaW5nKHRoaXMuYWN0aXZlSWRzKSkge1xuICAgICAgdGhpcy5hY3RpdmVJZHMgPSB0aGlzLmFjdGl2ZUlkcy5zcGxpdCgvXFxzKixcXHMqLyk7XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIHBhbmVscyBvcGVuIHN0YXRlc1xuICAgIHRoaXMucGFuZWxzLmZvckVhY2gocGFuZWwgPT4gcGFuZWwuaXNPcGVuID0gIXBhbmVsLmRpc2FibGVkICYmIHRoaXMuYWN0aXZlSWRzLmluZGV4T2YocGFuZWwuaWQpID4gLTEpO1xuXG4gICAgLy8gY2xvc2VPdGhlcnMgdXBkYXRlc1xuICAgIGlmICh0aGlzLmFjdGl2ZUlkcy5sZW5ndGggPiAxICYmIHRoaXMuY2xvc2VPdGhlclBhbmVscykge1xuICAgICAgdGhpcy5fY2xvc2VPdGhlcnModGhpcy5hY3RpdmVJZHNbMF0pO1xuICAgICAgdGhpcy5fdXBkYXRlQWN0aXZlSWRzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfY2hhbmdlT3BlblN0YXRlKHBhbmVsOiBOZ2JQYW5lbCwgbmV4dFN0YXRlOiBib29sZWFuKSB7XG4gICAgaWYgKHBhbmVsICYmICFwYW5lbC5kaXNhYmxlZCAmJiBwYW5lbC5pc09wZW4gIT09IG5leHRTdGF0ZSkge1xuICAgICAgbGV0IGRlZmF1bHRQcmV2ZW50ZWQgPSBmYWxzZTtcblxuICAgICAgdGhpcy5wYW5lbENoYW5nZS5lbWl0KFxuICAgICAgICAgIHtwYW5lbElkOiBwYW5lbC5pZCwgbmV4dFN0YXRlOiBuZXh0U3RhdGUsIHByZXZlbnREZWZhdWx0OiAoKSA9PiB7IGRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlOyB9fSk7XG5cbiAgICAgIGlmICghZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICBwYW5lbC5pc09wZW4gPSBuZXh0U3RhdGU7XG5cbiAgICAgICAgaWYgKG5leHRTdGF0ZSAmJiB0aGlzLmNsb3NlT3RoZXJQYW5lbHMpIHtcbiAgICAgICAgICB0aGlzLl9jbG9zZU90aGVycyhwYW5lbC5pZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdXBkYXRlQWN0aXZlSWRzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfY2xvc2VPdGhlcnMocGFuZWxJZDogc3RyaW5nKSB7XG4gICAgdGhpcy5wYW5lbHMuZm9yRWFjaChwYW5lbCA9PiB7XG4gICAgICBpZiAocGFuZWwuaWQgIT09IHBhbmVsSWQpIHtcbiAgICAgICAgcGFuZWwuaXNPcGVuID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9maW5kUGFuZWxCeUlkKHBhbmVsSWQ6IHN0cmluZyk6IE5nYlBhbmVsIHwgbnVsbCB7IHJldHVybiB0aGlzLnBhbmVscy5maW5kKHAgPT4gcC5pZCA9PT0gcGFuZWxJZCk7IH1cblxuICBwcml2YXRlIF91cGRhdGVBY3RpdmVJZHMoKSB7XG4gICAgdGhpcy5hY3RpdmVJZHMgPSB0aGlzLnBhbmVscy5maWx0ZXIocGFuZWwgPT4gcGFuZWwuaXNPcGVuICYmICFwYW5lbC5kaXNhYmxlZCkubWFwKHBhbmVsID0+IHBhbmVsLmlkKTtcbiAgfVxufVxuXG4vKipcbiAqIEEgZGlyZWN0aXZlIHRvIHB1dCBvbiBhIGJ1dHRvbiB0aGF0IHRvZ2dsZXMgcGFuZWwgb3BlbmluZyBhbmQgY2xvc2luZy5cbiAqXG4gKiBUbyBiZSB1c2VkIGluc2lkZSB0aGUgW2BOZ2JQYW5lbEhlYWRlcmBdKCMvY29tcG9uZW50cy9hY2NvcmRpb24vYXBpI05nYlBhbmVsSGVhZGVyKVxuICpcbiAqIEBzaW5jZSA0LjEuMFxuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdidXR0b25bbmdiUGFuZWxUb2dnbGVdJyxcbiAgaG9zdDoge1xuICAgICd0eXBlJzogJ2J1dHRvbicsXG4gICAgJ1tkaXNhYmxlZF0nOiAncGFuZWwuZGlzYWJsZWQnLFxuICAgICdbY2xhc3MuY29sbGFwc2VkXSc6ICchcGFuZWwuaXNPcGVuJyxcbiAgICAnW2F0dHIuYXJpYS1leHBhbmRlZF0nOiAncGFuZWwuaXNPcGVuJyxcbiAgICAnW2F0dHIuYXJpYS1jb250cm9sc10nOiAncGFuZWwuaWQnLFxuICAgICcoY2xpY2spJzogJ2FjY29yZGlvbi50b2dnbGUocGFuZWwuaWQpJ1xuICB9XG59KVxuZXhwb3J0IGNsYXNzIE5nYlBhbmVsVG9nZ2xlIHtcbiAgQElucHV0KClcbiAgc2V0IG5nYlBhbmVsVG9nZ2xlKHBhbmVsOiBOZ2JQYW5lbCkge1xuICAgIGlmIChwYW5lbCkge1xuICAgICAgdGhpcy5wYW5lbCA9IHBhbmVsO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBhY2NvcmRpb246IE5nYkFjY29yZGlvbiwgQE9wdGlvbmFsKCkgQEhvc3QoKSBwdWJsaWMgcGFuZWw6IE5nYlBhbmVsKSB7fVxufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/accordion/accordion.module.js b/dist/sunbird-ui-components/esm5/accordion/accordion.module.js new file mode 100644 index 0000000..399ff0d --- /dev/null +++ b/dist/sunbird-ui-components/esm5/accordion/accordion.module.js @@ -0,0 +1,21 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { NgbAccordion, NgbPanel, NgbPanelTitle, NgbPanelContent, NgbPanelHeader, NgbPanelToggle } from './accordion'; +export { NgbAccordion, NgbPanel, NgbPanelTitle, NgbPanelContent, NgbPanelHeader, NgbPanelToggle } from './accordion'; +export { NgbAccordionConfig } from './accordion-config'; +/** @type {?} */ +var NGB_ACCORDION_DIRECTIVES = [NgbAccordion, NgbPanel, NgbPanelTitle, NgbPanelContent, NgbPanelHeader, NgbPanelToggle]; +var NgbAccordionModule = /** @class */ (function () { + function NgbAccordionModule() { + } + NgbAccordionModule.decorators = [ + { type: NgModule, args: [{ declarations: NGB_ACCORDION_DIRECTIVES, exports: NGB_ACCORDION_DIRECTIVES, imports: [CommonModule] },] } + ]; + return NgbAccordionModule; +}()); +export { NgbAccordionModule }; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3JkaW9uLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImFjY29yZGlvbi9hY2NvcmRpb24ubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUU3QyxPQUFPLEVBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFbkgsT0FBTyxFQUNMLFlBQVksRUFDWixRQUFRLEVBQ1IsYUFBYSxFQUNiLGVBQWUsRUFFZixjQUFjLEVBRWQsY0FBYyxFQUNmLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLG9CQUFvQixDQUFDOztJQUVoRCx3QkFBd0IsR0FDMUIsQ0FBQyxZQUFZLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGNBQWMsQ0FBQztBQUU1RjtJQUFBO0lBRUEsQ0FBQzs7Z0JBRkEsUUFBUSxTQUFDLEVBQUMsWUFBWSxFQUFFLHdCQUF3QixFQUFFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBQzs7SUFFOUcseUJBQUM7Q0FBQSxBQUZELElBRUM7U0FEWSxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge05nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQge05nYkFjY29yZGlvbiwgTmdiUGFuZWwsIE5nYlBhbmVsVGl0bGUsIE5nYlBhbmVsQ29udGVudCwgTmdiUGFuZWxIZWFkZXIsIE5nYlBhbmVsVG9nZ2xlfSBmcm9tICcuL2FjY29yZGlvbic7XG5cbmV4cG9ydCB7XG4gIE5nYkFjY29yZGlvbixcbiAgTmdiUGFuZWwsXG4gIE5nYlBhbmVsVGl0bGUsXG4gIE5nYlBhbmVsQ29udGVudCxcbiAgTmdiUGFuZWxDaGFuZ2VFdmVudCxcbiAgTmdiUGFuZWxIZWFkZXIsXG4gIE5nYlBhbmVsSGVhZGVyQ29udGV4dCxcbiAgTmdiUGFuZWxUb2dnbGVcbn0gZnJvbSAnLi9hY2NvcmRpb24nO1xuZXhwb3J0IHtOZ2JBY2NvcmRpb25Db25maWd9IGZyb20gJy4vYWNjb3JkaW9uLWNvbmZpZyc7XG5cbmNvbnN0IE5HQl9BQ0NPUkRJT05fRElSRUNUSVZFUyA9XG4gICAgW05nYkFjY29yZGlvbiwgTmdiUGFuZWwsIE5nYlBhbmVsVGl0bGUsIE5nYlBhbmVsQ29udGVudCwgTmdiUGFuZWxIZWFkZXIsIE5nYlBhbmVsVG9nZ2xlXTtcblxuQE5nTW9kdWxlKHtkZWNsYXJhdGlvbnM6IE5HQl9BQ0NPUkRJT05fRElSRUNUSVZFUywgZXhwb3J0czogTkdCX0FDQ09SRElPTl9ESVJFQ1RJVkVTLCBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXX0pXG5leHBvcnQgY2xhc3MgTmdiQWNjb3JkaW9uTW9kdWxlIHtcbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/alert/alert-config.js b/dist/sunbird-ui-components/esm5/alert/alert-config.js new file mode 100644 index 0000000..6b6b2f3 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/alert/alert-config.js @@ -0,0 +1,31 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Injectable } from '@angular/core'; +import * as i0 from "@angular/core"; +/** + * A configuration service for the [NgbAlert](#/components/alert/api#NgbAlert) component. + * + * You can inject this service, typically in your root component, and customize its properties + * to provide default values for all alerts used in the application. + */ +var NgbAlertConfig = /** @class */ (function () { + function NgbAlertConfig() { + this.dismissible = true; + this.type = 'warning'; + } + NgbAlertConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ NgbAlertConfig.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function NgbAlertConfig_Factory() { return new NgbAlertConfig(); }, token: NgbAlertConfig, providedIn: "root" }); + return NgbAlertConfig; +}()); +export { NgbAlertConfig }; +if (false) { + /** @type {?} */ + NgbAlertConfig.prototype.dismissible; + /** @type {?} */ + NgbAlertConfig.prototype.type; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQtY29uZmlnLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiYWxlcnQvYWxlcnQtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQVF6QztJQUFBO1FBRUUsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFDbkIsU0FBSSxHQUFHLFNBQVMsQ0FBQztLQUNsQjs7Z0JBSkEsVUFBVSxTQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQzs7O3lCQVJoQztDQVlDLEFBSkQsSUFJQztTQUhZLGNBQWM7OztJQUN6QixxQ0FBbUI7O0lBQ25CLDhCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogQSBjb25maWd1cmF0aW9uIHNlcnZpY2UgZm9yIHRoZSBbTmdiQWxlcnRdKCMvY29tcG9uZW50cy9hbGVydC9hcGkjTmdiQWxlcnQpIGNvbXBvbmVudC5cbiAqXG4gKiBZb3UgY2FuIGluamVjdCB0aGlzIHNlcnZpY2UsIHR5cGljYWxseSBpbiB5b3VyIHJvb3QgY29tcG9uZW50LCBhbmQgY3VzdG9taXplIGl0cyBwcm9wZXJ0aWVzXG4gKiB0byBwcm92aWRlIGRlZmF1bHQgdmFsdWVzIGZvciBhbGwgYWxlcnRzIHVzZWQgaW4gdGhlIGFwcGxpY2F0aW9uLlxuICovXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBOZ2JBbGVydENvbmZpZyB7XG4gIGRpc21pc3NpYmxlID0gdHJ1ZTtcbiAgdHlwZSA9ICd3YXJuaW5nJztcbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/alert/alert.js b/dist/sunbird-ui-components/esm5/alert/alert.js new file mode 100644 index 0000000..ca8d2f5 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/alert/alert.js @@ -0,0 +1,110 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, Renderer2, ElementRef, ViewEncapsulation } from '@angular/core'; +import { NgbAlertConfig } from './alert-config'; +/** + * Alert is a component to provide contextual feedback messages for user. + * + * It supports several alert types and can be dismissed. + */ +var NgbAlert = /** @class */ (function () { + function NgbAlert(config, _renderer, _element) { + this._renderer = _renderer; + this._element = _element; + /** + * An event emitted when the close button is clicked. It has no payload and only relevant for dismissible alerts. + */ + this.close = new EventEmitter(); + this.dismissible = config.dismissible; + this.type = config.type; + } + /** + * @return {?} + */ + NgbAlert.prototype.closeHandler = /** + * @return {?} + */ + function () { this.close.emit(null); }; + /** + * @param {?} changes + * @return {?} + */ + NgbAlert.prototype.ngOnChanges = /** + * @param {?} changes + * @return {?} + */ + function (changes) { + /** @type {?} */ + var typeChange = changes['type']; + if (typeChange && !typeChange.firstChange) { + this._renderer.removeClass(this._element.nativeElement, "alert-" + typeChange.previousValue); + this._renderer.addClass(this._element.nativeElement, "alert-" + typeChange.currentValue); + } + }; + /** + * @return {?} + */ + NgbAlert.prototype.ngOnInit = /** + * @return {?} + */ + function () { this._renderer.addClass(this._element.nativeElement, "alert-" + this.type); }; + NgbAlert.decorators = [ + { type: Component, args: [{ + selector: 'ngb-alert', + changeDetection: ChangeDetectionStrategy.OnPush, + encapsulation: ViewEncapsulation.None, + host: { 'role': 'alert', 'class': 'alert', '[class.alert-dismissible]': 'dismissible' }, + template: "\n \n \n ", + styles: ["ngb-alert{display:block}"] + }] } + ]; + /** @nocollapse */ + NgbAlert.ctorParameters = function () { return [ + { type: NgbAlertConfig }, + { type: Renderer2 }, + { type: ElementRef } + ]; }; + NgbAlert.propDecorators = { + dismissible: [{ type: Input }], + type: [{ type: Input }], + close: [{ type: Output }] + }; + return NgbAlert; +}()); +export { NgbAlert }; +if (false) { + /** + * If `true`, alert can be dismissed by the user. + * + * The close button (×) will be displayed and you can be notified + * of the event with the `(close)` output. + * @type {?} + */ + NgbAlert.prototype.dismissible; + /** + * Type of the alert. + * + * Bootstrap provides styles for the following types: `'success'`, `'info'`, `'warning'`, `'danger'`, `'primary'`, + * `'secondary'`, `'light'` and `'dark'`. + * @type {?} + */ + NgbAlert.prototype.type; + /** + * An event emitted when the close button is clicked. It has no payload and only relevant for dismissible alerts. + * @type {?} + */ + NgbAlert.prototype.close; + /** + * @type {?} + * @private + */ + NgbAlert.prototype._renderer; + /** + * @type {?} + * @private + */ + NgbAlert.prototype._element; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJhbGVydC9hbGVydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFJVixpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7QUFPOUM7SUFtQ0Usa0JBQVksTUFBc0IsRUFBVSxTQUFvQixFQUFVLFFBQW9CO1FBQWxELGNBQVMsR0FBVCxTQUFTLENBQVc7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFZOzs7O1FBRnBGLFVBQUssR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBR3pDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUN0QyxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDMUIsQ0FBQzs7OztJQUVELCtCQUFZOzs7SUFBWixjQUFpQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Ozs7O0lBRXpDLDhCQUFXOzs7O0lBQVgsVUFBWSxPQUFzQjs7WUFDMUIsVUFBVSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDbEMsSUFBSSxVQUFVLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFO1lBQ3pDLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLFdBQVMsVUFBVSxDQUFDLGFBQWUsQ0FBQyxDQUFDO1lBQzdGLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLFdBQVMsVUFBVSxDQUFDLFlBQWMsQ0FBQyxDQUFDO1NBQzFGO0lBQ0gsQ0FBQzs7OztJQUVELDJCQUFROzs7SUFBUixjQUFhLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLFdBQVMsSUFBSSxDQUFDLElBQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzs7Z0JBbEQzRixTQUFTLFNBQUM7b0JBQ1QsUUFBUSxFQUFFLFdBQVc7b0JBQ3JCLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtvQkFDckMsSUFBSSxFQUFFLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLGFBQWEsRUFBQztvQkFDckYsUUFBUSxFQUFFLHdRQU1QOztpQkFFSjs7OztnQkFwQk8sY0FBYztnQkFScEIsU0FBUztnQkFDVCxVQUFVOzs7OEJBb0NULEtBQUs7dUJBT0wsS0FBSzt3QkFJTCxNQUFNOztJQWtCVCxlQUFDO0NBQUEsQUFuREQsSUFtREM7U0FyQ1ksUUFBUTs7Ozs7Ozs7O0lBUW5CLCtCQUE4Qjs7Ozs7Ozs7SUFPOUIsd0JBQXNCOzs7OztJQUl0Qix5QkFBMkM7Ozs7O0lBRVAsNkJBQTRCOzs7OztJQUFFLDRCQUE0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgUmVuZGVyZXIyLFxuICBFbGVtZW50UmVmLFxuICBPbkNoYW5nZXMsXG4gIE9uSW5pdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7TmdiQWxlcnRDb25maWd9IGZyb20gJy4vYWxlcnQtY29uZmlnJztcblxuLyoqXG4gKiBBbGVydCBpcyBhIGNvbXBvbmVudCB0byBwcm92aWRlIGNvbnRleHR1YWwgZmVlZGJhY2sgbWVzc2FnZXMgZm9yIHVzZXIuXG4gKlxuICogSXQgc3VwcG9ydHMgc2V2ZXJhbCBhbGVydCB0eXBlcyBhbmQgY2FuIGJlIGRpc21pc3NlZC5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmdiLWFsZXJ0JyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGhvc3Q6IHsncm9sZSc6ICdhbGVydCcsICdjbGFzcyc6ICdhbGVydCcsICdbY2xhc3MuYWxlcnQtZGlzbWlzc2libGVdJzogJ2Rpc21pc3NpYmxlJ30sXG4gIHRlbXBsYXRlOiBgXG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDxidXR0b24gKm5nSWY9XCJkaXNtaXNzaWJsZVwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsb3NlXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgaTE4bi1hcmlhLWxhYmVsPVwiQEBuZ2IuYWxlcnQuY2xvc2VcIlxuICAgICAgKGNsaWNrKT1cImNsb3NlSGFuZGxlcigpXCI+XG4gICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICAgIGAsXG4gIHN0eWxlVXJsczogWycuL2FsZXJ0LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBOZ2JBbGVydCBpbXBsZW1lbnRzIE9uSW5pdCxcbiAgICBPbkNoYW5nZXMge1xuICAvKipcbiAgICogSWYgYHRydWVgLCBhbGVydCBjYW4gYmUgZGlzbWlzc2VkIGJ5IHRoZSB1c2VyLlxuICAgKlxuICAgKiBUaGUgY2xvc2UgYnV0dG9uICjDlykgd2lsbCBiZSBkaXNwbGF5ZWQgYW5kIHlvdSBjYW4gYmUgbm90aWZpZWRcbiAgICogb2YgdGhlIGV2ZW50IHdpdGggdGhlIGAoY2xvc2UpYCBvdXRwdXQuXG4gICAqL1xuICBASW5wdXQoKSBkaXNtaXNzaWJsZTogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFR5cGUgb2YgdGhlIGFsZXJ0LlxuICAgKlxuICAgKiBCb290c3RyYXAgcHJvdmlkZXMgc3R5bGVzIGZvciB0aGUgZm9sbG93aW5nIHR5cGVzOiBgJ3N1Y2Nlc3MnYCwgYCdpbmZvJ2AsIGAnd2FybmluZydgLCBgJ2RhbmdlcidgLCBgJ3ByaW1hcnknYCxcbiAgICogYCdzZWNvbmRhcnknYCwgYCdsaWdodCdgIGFuZCBgJ2RhcmsnYC5cbiAgICovXG4gIEBJbnB1dCgpIHR5cGU6IHN0cmluZztcbiAgLyoqXG4gICAqIEFuIGV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgY2xvc2UgYnV0dG9uIGlzIGNsaWNrZWQuIEl0IGhhcyBubyBwYXlsb2FkIGFuZCBvbmx5IHJlbGV2YW50IGZvciBkaXNtaXNzaWJsZSBhbGVydHMuXG4gICAqL1xuICBAT3V0cHV0KCkgY2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBOZ2JBbGVydENvbmZpZywgcHJpdmF0ZSBfcmVuZGVyZXI6IFJlbmRlcmVyMiwgcHJpdmF0ZSBfZWxlbWVudDogRWxlbWVudFJlZikge1xuICAgIHRoaXMuZGlzbWlzc2libGUgPSBjb25maWcuZGlzbWlzc2libGU7XG4gICAgdGhpcy50eXBlID0gY29uZmlnLnR5cGU7XG4gIH1cblxuICBjbG9zZUhhbmRsZXIoKSB7IHRoaXMuY2xvc2UuZW1pdChudWxsKTsgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBjb25zdCB0eXBlQ2hhbmdlID0gY2hhbmdlc1sndHlwZSddO1xuICAgIGlmICh0eXBlQ2hhbmdlICYmICF0eXBlQ2hhbmdlLmZpcnN0Q2hhbmdlKSB7XG4gICAgICB0aGlzLl9yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIGBhbGVydC0ke3R5cGVDaGFuZ2UucHJldmlvdXNWYWx1ZX1gKTtcbiAgICAgIHRoaXMuX3JlbmRlcmVyLmFkZENsYXNzKHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCwgYGFsZXJ0LSR7dHlwZUNoYW5nZS5jdXJyZW50VmFsdWV9YCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7IHRoaXMuX3JlbmRlcmVyLmFkZENsYXNzKHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCwgYGFsZXJ0LSR7dGhpcy50eXBlfWApOyB9XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/alert/alert.module.js b/dist/sunbird-ui-components/esm5/alert/alert.module.js new file mode 100644 index 0000000..35a4e69 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/alert/alert.module.js @@ -0,0 +1,19 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { NgbAlert } from './alert'; +export { NgbAlert } from './alert'; +export { NgbAlertConfig } from './alert-config'; +var NgbAlertModule = /** @class */ (function () { + function NgbAlertModule() { + } + NgbAlertModule.decorators = [ + { type: NgModule, args: [{ declarations: [NgbAlert], exports: [NgbAlert], imports: [CommonModule], entryComponents: [NgbAlert] },] } + ]; + return NgbAlertModule; +}()); +export { NgbAlertModule }; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQubW9kdWxlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiYWxlcnQvYWxlcnQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUU3QyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRWpDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDakMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTlDO0lBQUE7SUFFQSxDQUFDOztnQkFGQSxRQUFRLFNBQUMsRUFBQyxZQUFZLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBQzs7SUFFL0cscUJBQUM7Q0FBQSxBQUZELElBRUM7U0FEWSxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHtOZ2JBbGVydH0gZnJvbSAnLi9hbGVydCc7XG5cbmV4cG9ydCB7TmdiQWxlcnR9IGZyb20gJy4vYWxlcnQnO1xuZXhwb3J0IHtOZ2JBbGVydENvbmZpZ30gZnJvbSAnLi9hbGVydC1jb25maWcnO1xuXG5ATmdNb2R1bGUoe2RlY2xhcmF0aW9uczogW05nYkFsZXJ0XSwgZXhwb3J0czogW05nYkFsZXJ0XSwgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sIGVudHJ5Q29tcG9uZW50czogW05nYkFsZXJ0XX0pXG5leHBvcnQgY2xhc3MgTmdiQWxlcnRNb2R1bGUge1xufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/buttons/buttons.module.js b/dist/sunbird-ui-components/esm5/buttons/buttons.module.js new file mode 100644 index 0000000..9c0e39e --- /dev/null +++ b/dist/sunbird-ui-components/esm5/buttons/buttons.module.js @@ -0,0 +1,23 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgModule } from '@angular/core'; +import { NgbButtonLabel } from './label'; +import { NgbCheckBox } from './checkbox'; +import { NgbRadio, NgbRadioGroup } from './radio'; +export { NgbButtonLabel } from './label'; +export { NgbCheckBox } from './checkbox'; +export { NgbRadio, NgbRadioGroup } from './radio'; +/** @type {?} */ +var NGB_BUTTON_DIRECTIVES = [NgbButtonLabel, NgbCheckBox, NgbRadioGroup, NgbRadio]; +var NgbButtonsModule = /** @class */ (function () { + function NgbButtonsModule() { + } + NgbButtonsModule.decorators = [ + { type: NgModule, args: [{ declarations: NGB_BUTTON_DIRECTIVES, exports: NGB_BUTTON_DIRECTIVES },] } + ]; + return NgbButtonsModule; +}()); +export { NgbButtonsModule }; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9ucy5tb2R1bGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJidXR0b25zL2J1dHRvbnMubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDdkMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUN2QyxPQUFPLEVBQUMsUUFBUSxFQUFFLGFBQWEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUVoRCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDdkMsT0FBTyxFQUFDLFFBQVEsRUFBRSxhQUFhLEVBQUMsTUFBTSxTQUFTLENBQUM7O0lBRzFDLHFCQUFxQixHQUFHLENBQUMsY0FBYyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsUUFBUSxDQUFDO0FBRXBGO0lBQUE7SUFFQSxDQUFDOztnQkFGQSxRQUFRLFNBQUMsRUFBQyxZQUFZLEVBQUUscUJBQXFCLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFDOztJQUUvRSx1QkFBQztDQUFBLEFBRkQsSUFFQztTQURZLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtOZ2JCdXR0b25MYWJlbH0gZnJvbSAnLi9sYWJlbCc7XG5pbXBvcnQge05nYkNoZWNrQm94fSBmcm9tICcuL2NoZWNrYm94JztcbmltcG9ydCB7TmdiUmFkaW8sIE5nYlJhZGlvR3JvdXB9IGZyb20gJy4vcmFkaW8nO1xuXG5leHBvcnQge05nYkJ1dHRvbkxhYmVsfSBmcm9tICcuL2xhYmVsJztcbmV4cG9ydCB7TmdiQ2hlY2tCb3h9IGZyb20gJy4vY2hlY2tib3gnO1xuZXhwb3J0IHtOZ2JSYWRpbywgTmdiUmFkaW9Hcm91cH0gZnJvbSAnLi9yYWRpbyc7XG5cblxuY29uc3QgTkdCX0JVVFRPTl9ESVJFQ1RJVkVTID0gW05nYkJ1dHRvbkxhYmVsLCBOZ2JDaGVja0JveCwgTmdiUmFkaW9Hcm91cCwgTmdiUmFkaW9dO1xuXG5ATmdNb2R1bGUoe2RlY2xhcmF0aW9uczogTkdCX0JVVFRPTl9ESVJFQ1RJVkVTLCBleHBvcnRzOiBOR0JfQlVUVE9OX0RJUkVDVElWRVN9KVxuZXhwb3J0IGNsYXNzIE5nYkJ1dHRvbnNNb2R1bGUge1xufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/buttons/checkbox.js b/dist/sunbird-ui-components/esm5/buttons/checkbox.js new file mode 100644 index 0000000..5f2ebc4 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/buttons/checkbox.js @@ -0,0 +1,182 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { ChangeDetectorRef, Directive, forwardRef, Input } from '@angular/core'; +import { NG_VALUE_ACCESSOR } from '@angular/forms'; +import { NgbButtonLabel } from './label'; +/** @type {?} */ +var NGB_CHECKBOX_VALUE_ACCESSOR = { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef((/** + * @return {?} + */ + function () { return NgbCheckBox; })), + multi: true +}; +/** + * Allows to easily create Bootstrap-style checkbox buttons. + * + * Integrates with forms, so the value of a checked button is bound to the underlying form control + * either in a reactive or template-driven way. + */ +var NgbCheckBox = /** @class */ (function () { + function NgbCheckBox(_label, _cd) { + this._label = _label; + this._cd = _cd; + /** + * If `true`, the checkbox button will be disabled + */ + this.disabled = false; + /** + * The form control value when the checkbox is checked. + */ + this.valueChecked = true; + /** + * The form control value when the checkbox is unchecked. + */ + this.valueUnChecked = false; + this.onChange = (/** + * @param {?} _ + * @return {?} + */ + function (_) { }); + this.onTouched = (/** + * @return {?} + */ + function () { }); + } + Object.defineProperty(NgbCheckBox.prototype, "focused", { + set: /** + * @param {?} isFocused + * @return {?} + */ + function (isFocused) { + this._label.focused = isFocused; + if (!isFocused) { + this.onTouched(); + } + }, + enumerable: true, + configurable: true + }); + /** + * @param {?} $event + * @return {?} + */ + NgbCheckBox.prototype.onInputChange = /** + * @param {?} $event + * @return {?} + */ + function ($event) { + /** @type {?} */ + var modelToPropagate = $event.target.checked ? this.valueChecked : this.valueUnChecked; + this.onChange(modelToPropagate); + this.onTouched(); + this.writeValue(modelToPropagate); + }; + /** + * @param {?} fn + * @return {?} + */ + NgbCheckBox.prototype.registerOnChange = /** + * @param {?} fn + * @return {?} + */ + function (fn) { this.onChange = fn; }; + /** + * @param {?} fn + * @return {?} + */ + NgbCheckBox.prototype.registerOnTouched = /** + * @param {?} fn + * @return {?} + */ + function (fn) { this.onTouched = fn; }; + /** + * @param {?} isDisabled + * @return {?} + */ + NgbCheckBox.prototype.setDisabledState = /** + * @param {?} isDisabled + * @return {?} + */ + function (isDisabled) { + this.disabled = isDisabled; + this._label.disabled = isDisabled; + }; + /** + * @param {?} value + * @return {?} + */ + NgbCheckBox.prototype.writeValue = /** + * @param {?} value + * @return {?} + */ + function (value) { + this.checked = value === this.valueChecked; + this._label.active = this.checked; + // label won't be updated, if it is inside the OnPush component when [ngModel] changes + this._cd.markForCheck(); + }; + NgbCheckBox.decorators = [ + { type: Directive, args: [{ + selector: '[ngbButton][type=checkbox]', + host: { + 'autocomplete': 'off', + '[checked]': 'checked', + '[disabled]': 'disabled', + '(change)': 'onInputChange($event)', + '(focus)': 'focused = true', + '(blur)': 'focused = false' + }, + providers: [NGB_CHECKBOX_VALUE_ACCESSOR] + },] } + ]; + /** @nocollapse */ + NgbCheckBox.ctorParameters = function () { return [ + { type: NgbButtonLabel }, + { type: ChangeDetectorRef } + ]; }; + NgbCheckBox.propDecorators = { + disabled: [{ type: Input }], + valueChecked: [{ type: Input }], + valueUnChecked: [{ type: Input }] + }; + return NgbCheckBox; +}()); +export { NgbCheckBox }; +if (false) { + /** @type {?} */ + NgbCheckBox.prototype.checked; + /** + * If `true`, the checkbox button will be disabled + * @type {?} + */ + NgbCheckBox.prototype.disabled; + /** + * The form control value when the checkbox is checked. + * @type {?} + */ + NgbCheckBox.prototype.valueChecked; + /** + * The form control value when the checkbox is unchecked. + * @type {?} + */ + NgbCheckBox.prototype.valueUnChecked; + /** @type {?} */ + NgbCheckBox.prototype.onChange; + /** @type {?} */ + NgbCheckBox.prototype.onTouched; + /** + * @type {?} + * @private + */ + NgbCheckBox.prototype._label; + /** + * @type {?} + * @private + */ + NgbCheckBox.prototype._cd; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3guanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJidXR0b25zL2NoZWNrYm94LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDOUUsT0FBTyxFQUF1QixpQkFBaUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXZFLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxTQUFTLENBQUM7O0lBRWpDLDJCQUEyQixHQUFHO0lBQ2xDLE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVU7OztJQUFDLGNBQU0sT0FBQSxXQUFXLEVBQVgsQ0FBVyxFQUFDO0lBQzFDLEtBQUssRUFBRSxJQUFJO0NBQ1o7Ozs7Ozs7QUFTRDtJQXdDRSxxQkFBb0IsTUFBc0IsRUFBVSxHQUFzQjtRQUF0RCxXQUFNLEdBQU4sTUFBTSxDQUFnQjtRQUFVLFFBQUcsR0FBSCxHQUFHLENBQW1COzs7O1FBdEJqRSxhQUFRLEdBQUcsS0FBSyxDQUFDOzs7O1FBS2pCLGlCQUFZLEdBQUcsSUFBSSxDQUFDOzs7O1FBS3BCLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBRWhDLGFBQVE7Ozs7UUFBRyxVQUFDLENBQU0sSUFBTSxDQUFDLEVBQUM7UUFDMUIsY0FBUzs7O1FBQUcsY0FBTyxDQUFDLEVBQUM7SUFTd0QsQ0FBQztJQVA5RSxzQkFBSSxnQ0FBTzs7Ozs7UUFBWCxVQUFZLFNBQWtCO1lBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQztZQUNoQyxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNkLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQzthQUNsQjtRQUNILENBQUM7OztPQUFBOzs7OztJQUlELG1DQUFhOzs7O0lBQWIsVUFBYyxNQUFNOztZQUNaLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYztRQUN4RixJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNwQyxDQUFDOzs7OztJQUVELHNDQUFnQjs7OztJQUFoQixVQUFpQixFQUF1QixJQUFVLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQzs7Ozs7SUFFdkUsdUNBQWlCOzs7O0lBQWpCLFVBQWtCLEVBQWEsSUFBVSxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7Ozs7O0lBRS9ELHNDQUFnQjs7OztJQUFoQixVQUFpQixVQUFtQjtRQUNsQyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztRQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7SUFDcEMsQ0FBQzs7Ozs7SUFFRCxnQ0FBVTs7OztJQUFWLFVBQVcsS0FBSztRQUNkLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDM0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUVsQyxzRkFBc0Y7UUFDdEYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDOztnQkFoRUYsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSw0QkFBNEI7b0JBQ3RDLElBQUksRUFBRTt3QkFDSixjQUFjLEVBQUUsS0FBSzt3QkFDckIsV0FBVyxFQUFFLFNBQVM7d0JBQ3RCLFlBQVksRUFBRSxVQUFVO3dCQUN4QixVQUFVLEVBQUUsdUJBQXVCO3dCQUNuQyxTQUFTLEVBQUUsZ0JBQWdCO3dCQUMzQixRQUFRLEVBQUUsaUJBQWlCO3FCQUM1QjtvQkFDRCxTQUFTLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQztpQkFDekM7Ozs7Z0JBMUJPLGNBQWM7Z0JBSGQsaUJBQWlCOzs7MkJBb0N0QixLQUFLOytCQUtMLEtBQUs7aUNBS0wsS0FBSzs7SUFxQ1Isa0JBQUM7Q0FBQSxBQWpFRCxJQWlFQztTQXJEWSxXQUFXOzs7SUFDdEIsOEJBQVE7Ozs7O0lBS1IsK0JBQTBCOzs7OztJQUsxQixtQ0FBNkI7Ozs7O0lBSzdCLHFDQUFnQzs7SUFFaEMsK0JBQTBCOztJQUMxQixnQ0FBcUI7Ozs7O0lBU1QsNkJBQThCOzs7OztJQUFFLDBCQUE4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2hhbmdlRGV0ZWN0b3JSZWYsIERpcmVjdGl2ZSwgZm9yd2FyZFJlZiwgSW5wdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1J9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHtOZ2JCdXR0b25MYWJlbH0gZnJvbSAnLi9sYWJlbCc7XG5cbmNvbnN0IE5HQl9DSEVDS0JPWF9WQUxVRV9BQ0NFU1NPUiA9IHtcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE5nYkNoZWNrQm94KSxcbiAgbXVsdGk6IHRydWVcbn07XG5cblxuLyoqXG4gKiBBbGxvd3MgdG8gZWFzaWx5IGNyZWF0ZSBCb290c3RyYXAtc3R5bGUgY2hlY2tib3ggYnV0dG9ucy5cbiAqXG4gKiBJbnRlZ3JhdGVzIHdpdGggZm9ybXMsIHNvIHRoZSB2YWx1ZSBvZiBhIGNoZWNrZWQgYnV0dG9uIGlzIGJvdW5kIHRvIHRoZSB1bmRlcmx5aW5nIGZvcm0gY29udHJvbFxuICogZWl0aGVyIGluIGEgcmVhY3RpdmUgb3IgdGVtcGxhdGUtZHJpdmVuIHdheS5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW25nYkJ1dHRvbl1bdHlwZT1jaGVja2JveF0nLFxuICBob3N0OiB7XG4gICAgJ2F1dG9jb21wbGV0ZSc6ICdvZmYnLFxuICAgICdbY2hlY2tlZF0nOiAnY2hlY2tlZCcsXG4gICAgJ1tkaXNhYmxlZF0nOiAnZGlzYWJsZWQnLFxuICAgICcoY2hhbmdlKSc6ICdvbklucHV0Q2hhbmdlKCRldmVudCknLFxuICAgICcoZm9jdXMpJzogJ2ZvY3VzZWQgPSB0cnVlJyxcbiAgICAnKGJsdXIpJzogJ2ZvY3VzZWQgPSBmYWxzZSdcbiAgfSxcbiAgcHJvdmlkZXJzOiBbTkdCX0NIRUNLQk9YX1ZBTFVFX0FDQ0VTU09SXVxufSlcbmV4cG9ydCBjbGFzcyBOZ2JDaGVja0JveCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgY2hlY2tlZDtcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY2hlY2tib3ggYnV0dG9uIHdpbGwgYmUgZGlzYWJsZWRcbiAgICovXG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFRoZSBmb3JtIGNvbnRyb2wgdmFsdWUgd2hlbiB0aGUgY2hlY2tib3ggaXMgY2hlY2tlZC5cbiAgICovXG4gIEBJbnB1dCgpIHZhbHVlQ2hlY2tlZCA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFRoZSBmb3JtIGNvbnRyb2wgdmFsdWUgd2hlbiB0aGUgY2hlY2tib3ggaXMgdW5jaGVja2VkLlxuICAgKi9cbiAgQElucHV0KCkgdmFsdWVVbkNoZWNrZWQgPSBmYWxzZTtcblxuICBvbkNoYW5nZSA9IChfOiBhbnkpID0+IHt9O1xuICBvblRvdWNoZWQgPSAoKSA9PiB7fTtcblxuICBzZXQgZm9jdXNlZChpc0ZvY3VzZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9sYWJlbC5mb2N1c2VkID0gaXNGb2N1c2VkO1xuICAgIGlmICghaXNGb2N1c2VkKSB7XG4gICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2xhYmVsOiBOZ2JCdXR0b25MYWJlbCwgcHJpdmF0ZSBfY2Q6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIG9uSW5wdXRDaGFuZ2UoJGV2ZW50KSB7XG4gICAgY29uc3QgbW9kZWxUb1Byb3BhZ2F0ZSA9ICRldmVudC50YXJnZXQuY2hlY2tlZCA/IHRoaXMudmFsdWVDaGVja2VkIDogdGhpcy52YWx1ZVVuQ2hlY2tlZDtcbiAgICB0aGlzLm9uQ2hhbmdlKG1vZGVsVG9Qcm9wYWdhdGUpO1xuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgdGhpcy53cml0ZVZhbHVlKG1vZGVsVG9Qcm9wYWdhdGUpO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBhbnkpID0+IGFueSk6IHZvaWQgeyB0aGlzLm9uQ2hhbmdlID0gZm47IH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gYW55KTogdm9pZCB7IHRoaXMub25Ub3VjaGVkID0gZm47IH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB0aGlzLl9sYWJlbC5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlKSB7XG4gICAgdGhpcy5jaGVja2VkID0gdmFsdWUgPT09IHRoaXMudmFsdWVDaGVja2VkO1xuICAgIHRoaXMuX2xhYmVsLmFjdGl2ZSA9IHRoaXMuY2hlY2tlZDtcblxuICAgIC8vIGxhYmVsIHdvbid0IGJlIHVwZGF0ZWQsIGlmIGl0IGlzIGluc2lkZSB0aGUgT25QdXNoIGNvbXBvbmVudCB3aGVuIFtuZ01vZGVsXSBjaGFuZ2VzXG4gICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/buttons/label.js b/dist/sunbird-ui-components/esm5/buttons/label.js new file mode 100644 index 0000000..53423b4 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/buttons/label.js @@ -0,0 +1,26 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Directive } from '@angular/core'; +var NgbButtonLabel = /** @class */ (function () { + function NgbButtonLabel() { + } + NgbButtonLabel.decorators = [ + { type: Directive, args: [{ + selector: '[ngbButtonLabel]', + host: { '[class.btn]': 'true', '[class.active]': 'active', '[class.disabled]': 'disabled', '[class.focus]': 'focused' } + },] } + ]; + return NgbButtonLabel; +}()); +export { NgbButtonLabel }; +if (false) { + /** @type {?} */ + NgbButtonLabel.prototype.active; + /** @type {?} */ + NgbButtonLabel.prototype.disabled; + /** @type {?} */ + NgbButtonLabel.prototype.focused; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFiZWwuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJidXR0b25zL2xhYmVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXhDO0lBQUE7SUFTQSxDQUFDOztnQkFUQSxTQUFTLFNBQUM7b0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsSUFBSSxFQUNBLEVBQUMsYUFBYSxFQUFFLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUM7aUJBQ3BIOztJQUtELHFCQUFDO0NBQUEsQUFURCxJQVNDO1NBSlksY0FBYzs7O0lBQ3pCLGdDQUFnQjs7SUFDaEIsa0NBQWtCOztJQUNsQixpQ0FBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RpcmVjdGl2ZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tuZ2JCdXR0b25MYWJlbF0nLFxuICBob3N0OlxuICAgICAgeydbY2xhc3MuYnRuXSc6ICd0cnVlJywgJ1tjbGFzcy5hY3RpdmVdJzogJ2FjdGl2ZScsICdbY2xhc3MuZGlzYWJsZWRdJzogJ2Rpc2FibGVkJywgJ1tjbGFzcy5mb2N1c10nOiAnZm9jdXNlZCd9XG59KVxuZXhwb3J0IGNsYXNzIE5nYkJ1dHRvbkxhYmVsIHtcbiAgYWN0aXZlOiBib29sZWFuO1xuICBkaXNhYmxlZDogYm9vbGVhbjtcbiAgZm9jdXNlZDogYm9vbGVhbjtcbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/buttons/radio.js b/dist/sunbird-ui-components/esm5/buttons/radio.js new file mode 100644 index 0000000..d20a535 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/buttons/radio.js @@ -0,0 +1,415 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { ChangeDetectorRef, Directive, ElementRef, forwardRef, Input, Renderer2 } from '@angular/core'; +import { NG_VALUE_ACCESSOR } from '@angular/forms'; +import { NgbButtonLabel } from './label'; +/** @type {?} */ +var NGB_RADIO_VALUE_ACCESSOR = { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef((/** + * @return {?} + */ + function () { return NgbRadioGroup; })), + multi: true +}; +/** @type {?} */ +var nextId = 0; +/** + * Allows to easily create Bootstrap-style radio buttons. + * + * Integrates with forms, so the value of a checked button is bound to the underlying form control + * either in a reactive or template-driven way. + */ +var NgbRadioGroup = /** @class */ (function () { + function NgbRadioGroup() { + this._radios = new Set(); + this._value = null; + /** + * Name of the radio group applied to radio input elements. + * + * Will be applied to all radio input elements inside the group, + * unless [`NgbRadio`](#/components/buttons/api#NgbRadio)'s specify names themselves. + * + * If not provided, will be generated in the `ngb-radio-xx` format. + */ + this.name = "ngb-radio-" + nextId++; + this.onChange = (/** + * @param {?} _ + * @return {?} + */ + function (_) { }); + this.onTouched = (/** + * @return {?} + */ + function () { }); + } + Object.defineProperty(NgbRadioGroup.prototype, "disabled", { + get: /** + * @return {?} + */ + function () { return this._disabled; }, + set: /** + * @param {?} isDisabled + * @return {?} + */ + function (isDisabled) { this.setDisabledState(isDisabled); }, + enumerable: true, + configurable: true + }); + /** + * @param {?} radio + * @return {?} + */ + NgbRadioGroup.prototype.onRadioChange = /** + * @param {?} radio + * @return {?} + */ + function (radio) { + this.writeValue(radio.value); + this.onChange(radio.value); + }; + /** + * @return {?} + */ + NgbRadioGroup.prototype.onRadioValueUpdate = /** + * @return {?} + */ + function () { this._updateRadiosValue(); }; + /** + * @param {?} radio + * @return {?} + */ + NgbRadioGroup.prototype.register = /** + * @param {?} radio + * @return {?} + */ + function (radio) { this._radios.add(radio); }; + /** + * @param {?} fn + * @return {?} + */ + NgbRadioGroup.prototype.registerOnChange = /** + * @param {?} fn + * @return {?} + */ + function (fn) { this.onChange = fn; }; + /** + * @param {?} fn + * @return {?} + */ + NgbRadioGroup.prototype.registerOnTouched = /** + * @param {?} fn + * @return {?} + */ + function (fn) { this.onTouched = fn; }; + /** + * @param {?} isDisabled + * @return {?} + */ + NgbRadioGroup.prototype.setDisabledState = /** + * @param {?} isDisabled + * @return {?} + */ + function (isDisabled) { + this._disabled = isDisabled; + this._updateRadiosDisabled(); + }; + /** + * @param {?} radio + * @return {?} + */ + NgbRadioGroup.prototype.unregister = /** + * @param {?} radio + * @return {?} + */ + function (radio) { this._radios.delete(radio); }; + /** + * @param {?} value + * @return {?} + */ + NgbRadioGroup.prototype.writeValue = /** + * @param {?} value + * @return {?} + */ + function (value) { + this._value = value; + this._updateRadiosValue(); + }; + /** + * @private + * @return {?} + */ + NgbRadioGroup.prototype._updateRadiosValue = /** + * @private + * @return {?} + */ + function () { + var _this = this; + this._radios.forEach((/** + * @param {?} radio + * @return {?} + */ + function (radio) { return radio.updateValue(_this._value); })); + }; + /** + * @private + * @return {?} + */ + NgbRadioGroup.prototype._updateRadiosDisabled = /** + * @private + * @return {?} + */ + function () { this._radios.forEach((/** + * @param {?} radio + * @return {?} + */ + function (radio) { return radio.updateDisabled(); })); }; + NgbRadioGroup.decorators = [ + { type: Directive, args: [{ selector: '[ngbRadioGroup]', host: { 'role': 'radiogroup' }, providers: [NGB_RADIO_VALUE_ACCESSOR] },] } + ]; + NgbRadioGroup.propDecorators = { + name: [{ type: Input }] + }; + return NgbRadioGroup; +}()); +export { NgbRadioGroup }; +if (false) { + /** + * @type {?} + * @private + */ + NgbRadioGroup.prototype._radios; + /** + * @type {?} + * @private + */ + NgbRadioGroup.prototype._value; + /** + * @type {?} + * @private + */ + NgbRadioGroup.prototype._disabled; + /** + * Name of the radio group applied to radio input elements. + * + * Will be applied to all radio input elements inside the group, + * unless [`NgbRadio`](#/components/buttons/api#NgbRadio)'s specify names themselves. + * + * If not provided, will be generated in the `ngb-radio-xx` format. + * @type {?} + */ + NgbRadioGroup.prototype.name; + /** @type {?} */ + NgbRadioGroup.prototype.onChange; + /** @type {?} */ + NgbRadioGroup.prototype.onTouched; +} +/** + * A directive that marks an input of type "radio" as a part of the + * [`NgbRadioGroup`](#/components/buttons/api#NgbRadioGroup). + */ +var NgbRadio = /** @class */ (function () { + function NgbRadio(_group, _label, _renderer, _element, _cd) { + this._group = _group; + this._label = _label; + this._renderer = _renderer; + this._element = _element; + this._cd = _cd; + this._value = null; + this._group.register(this); + this.updateDisabled(); + } + Object.defineProperty(NgbRadio.prototype, "value", { + get: /** + * @return {?} + */ + function () { return this._value; }, + /** + * The form control value when current radio button is checked. + */ + set: /** + * The form control value when current radio button is checked. + * @param {?} value + * @return {?} + */ + function (value) { + this._value = value; + /** @type {?} */ + var stringValue = value ? value.toString() : ''; + this._renderer.setProperty(this._element.nativeElement, 'value', stringValue); + this._group.onRadioValueUpdate(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbRadio.prototype, "disabled", { + get: /** + * @return {?} + */ + function () { return this._group.disabled || this._disabled; }, + /** + * If `true`, current radio button will be disabled. + */ + set: /** + * If `true`, current radio button will be disabled. + * @param {?} isDisabled + * @return {?} + */ + function (isDisabled) { + this._disabled = isDisabled !== false; + this.updateDisabled(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbRadio.prototype, "focused", { + set: /** + * @param {?} isFocused + * @return {?} + */ + function (isFocused) { + if (this._label) { + this._label.focused = isFocused; + } + if (!isFocused) { + this._group.onTouched(); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbRadio.prototype, "checked", { + get: /** + * @return {?} + */ + function () { return this._checked; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbRadio.prototype, "nameAttr", { + get: /** + * @return {?} + */ + function () { return this.name || this._group.name; }, + enumerable: true, + configurable: true + }); + /** + * @return {?} + */ + NgbRadio.prototype.ngOnDestroy = /** + * @return {?} + */ + function () { this._group.unregister(this); }; + /** + * @return {?} + */ + NgbRadio.prototype.onChange = /** + * @return {?} + */ + function () { this._group.onRadioChange(this); }; + /** + * @param {?} value + * @return {?} + */ + NgbRadio.prototype.updateValue = /** + * @param {?} value + * @return {?} + */ + function (value) { + // label won't be updated, if it is inside the OnPush component when [ngModel] changes + if (this.value !== value) { + this._cd.markForCheck(); + } + this._checked = this.value === value; + this._label.active = this._checked; + }; + /** + * @return {?} + */ + NgbRadio.prototype.updateDisabled = /** + * @return {?} + */ + function () { this._label.disabled = this.disabled; }; + NgbRadio.decorators = [ + { type: Directive, args: [{ + selector: '[ngbButton][type=radio]', + host: { + '[checked]': 'checked', + '[disabled]': 'disabled', + '[name]': 'nameAttr', + '(change)': 'onChange()', + '(focus)': 'focused = true', + '(blur)': 'focused = false' + } + },] } + ]; + /** @nocollapse */ + NgbRadio.ctorParameters = function () { return [ + { type: NgbRadioGroup }, + { type: NgbButtonLabel }, + { type: Renderer2 }, + { type: ElementRef }, + { type: ChangeDetectorRef } + ]; }; + NgbRadio.propDecorators = { + name: [{ type: Input }], + value: [{ type: Input, args: ['value',] }], + disabled: [{ type: Input, args: ['disabled',] }] + }; + return NgbRadio; +}()); +export { NgbRadio }; +if (false) { + /** + * @type {?} + * @private + */ + NgbRadio.prototype._checked; + /** + * @type {?} + * @private + */ + NgbRadio.prototype._disabled; + /** + * @type {?} + * @private + */ + NgbRadio.prototype._value; + /** + * The value for the 'name' property of the input element. + * + * All inputs of the radio group should have the same name. If not specified, + * the name of the enclosing group is used. + * @type {?} + */ + NgbRadio.prototype.name; + /** + * @type {?} + * @private + */ + NgbRadio.prototype._group; + /** + * @type {?} + * @private + */ + NgbRadio.prototype._label; + /** + * @type {?} + * @private + */ + NgbRadio.prototype._renderer; + /** + * @type {?} + * @private + */ + NgbRadio.prototype._element; + /** + * @type {?} + * @private + */ + NgbRadio.prototype._cd; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8uanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJidXR0b25zL3JhZGlvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFhLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNoSCxPQUFPLEVBQXVCLGlCQUFpQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLFNBQVMsQ0FBQzs7SUFFakMsd0JBQXdCLEdBQUc7SUFDL0IsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixXQUFXLEVBQUUsVUFBVTs7O0lBQUMsY0FBTSxPQUFBLGFBQWEsRUFBYixDQUFhLEVBQUM7SUFDNUMsS0FBSyxFQUFFLElBQUk7Q0FDWjs7SUFFRyxNQUFNLEdBQUcsQ0FBQzs7Ozs7OztBQVFkO0lBQUE7UUFFVSxZQUFPLEdBQWtCLElBQUksR0FBRyxFQUFZLENBQUM7UUFDN0MsV0FBTSxHQUFHLElBQUksQ0FBQzs7Ozs7Ozs7O1FBY2IsU0FBSSxHQUFHLGVBQWEsTUFBTSxFQUFJLENBQUM7UUFFeEMsYUFBUTs7OztRQUFHLFVBQUMsQ0FBTSxJQUFNLENBQUMsRUFBQztRQUMxQixjQUFTOzs7UUFBRyxjQUFPLENBQUMsRUFBQztJQTZCdkIsQ0FBQztJQTNDQyxzQkFBSSxtQ0FBUTs7OztRQUFaLGNBQWlCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7Ozs7O1FBQ3pDLFVBQWEsVUFBbUIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7T0FEL0I7Ozs7O0lBZ0J6QyxxQ0FBYTs7OztJQUFiLFVBQWMsS0FBZTtRQUMzQixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxL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QUFFLDZCQUE0Qjs7Ozs7SUFDM0YsNEJBQThDOzs7OztJQUFFLHVCQUE4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2hhbmdlRGV0ZWN0b3JSZWYsIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgZm9yd2FyZFJlZiwgSW5wdXQsIE9uRGVzdHJveSwgUmVuZGVyZXIyfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7TmdiQnV0dG9uTGFiZWx9IGZyb20gJy4vbGFiZWwnO1xuXG5jb25zdCBOR0JfUkFESU9fVkFMVUVfQUNDRVNTT1IgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBOZ2JSYWRpb0dyb3VwKSxcbiAgbXVsdGk6IHRydWVcbn07XG5cbmxldCBuZXh0SWQgPSAwO1xuXG4vKipcbiAqIEFsbG93cyB0byBlYXNpbHkgY3JlYXRlIEJvb3RzdHJhcC1zdHlsZSByYWRpbyBidXR0b25zLlxuICpcbiAqIEludGVncmF0ZXMgd2l0aCBmb3Jtcywgc28gdGhlIHZhbHVlIG9mIGEgY2hlY2tlZCBidXR0b24gaXMgYm91bmQgdG8gdGhlIHVuZGVybHlpbmcgZm9ybSBjb250cm9sXG4gKiBlaXRoZXIgaW4gYSByZWFjdGl2ZSBvciB0ZW1wbGF0ZS1kcml2ZW4gd2F5LlxuICovXG5ARGlyZWN0aXZlKHtzZWxlY3RvcjogJ1tuZ2JSYWRpb0dyb3VwXScsIGhvc3Q6IHsncm9sZSc6ICdyYWRpb2dyb3VwJ30sIHByb3ZpZGVyczogW05HQl9SQURJT19WQUxVRV9BQ0NFU1NPUl19KVxuZXhwb3J0IGNsYXNzIE5nYlJhZGlvR3JvdXAgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIHByaXZhdGUgX3JhZGlvczogU2V0PE5nYlJhZGlvPiA9IG5ldyBTZXQ8TmdiUmFkaW8+KCk7XG4gIHByaXZhdGUgX3ZhbHVlID0gbnVsbDtcbiAgcHJpdmF0ZSBfZGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgZ2V0IGRpc2FibGVkKCkgeyByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7IH1cbiAgc2V0IGRpc2FibGVkKGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHsgdGhpcy5zZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQpOyB9XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIHJhZGlvIGdyb3VwIGFwcGxpZWQgdG8gcmFkaW8gaW5wdXQgZWxlbWVudHMuXG4gICAqXG4gICAqIFdpbGwgYmUgYXBwbGllZCB0byBhbGwgcmFkaW8gaW5wdXQgZWxlbWVudHMgaW5zaWRlIHRoZSBncm91cCxcbiAgICogdW5sZXNzIFtgTmdiUmFkaW9gXSgjL2NvbXBvbmVudHMvYnV0dG9ucy9hcGkjTmdiUmFkaW8pJ3Mgc3BlY2lmeSBuYW1lcyB0aGVtc2VsdmVzLlxuICAgKlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIHdpbGwgYmUgZ2VuZXJhdGVkIGluIHRoZSBgbmdiLXJhZGlvLXh4YCBmb3JtYXQuXG4gICAqL1xuICBASW5wdXQoKSBuYW1lID0gYG5nYi1yYWRpby0ke25leHRJZCsrfWA7XG5cbiAgb25DaGFuZ2UgPSAoXzogYW55KSA9PiB7fTtcbiAgb25Ub3VjaGVkID0gKCkgPT4ge307XG5cbiAgb25SYWRpb0NoYW5nZShyYWRpbzogTmdiUmFkaW8pIHtcbiAgICB0aGlzLndyaXRlVmFsdWUocmFkaW8udmFsdWUpO1xuICAgIHRoaXMub25DaGFuZ2UocmFkaW8udmFsdWUpO1xuICB9XG5cbiAgb25SYWRpb1ZhbHVlVXBkYXRlKCkgeyB0aGlzLl91cGRhdGVSYWRpb3NWYWx1ZSgpOyB9XG5cbiAgcmVnaXN0ZXIocmFkaW86IE5nYlJhZGlvKSB7IHRoaXMuX3JhZGlvcy5hZGQocmFkaW8pOyB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBhbnkpID0+IGFueSk6IHZvaWQgeyB0aGlzLm9uQ2hhbmdlID0gZm47IH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gYW55KTogdm9pZCB7IHRoaXMub25Ub3VjaGVkID0gZm47IH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgdGhpcy5fdXBkYXRlUmFkaW9zRGlzYWJsZWQoKTtcbiAgfVxuXG4gIHVucmVnaXN0ZXIocmFkaW86IE5nYlJhZGlvKSB7IHRoaXMuX3JhZGlvcy5kZWxldGUocmFkaW8pOyB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZSkge1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5fdXBkYXRlUmFkaW9zVmFsdWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZVJhZGlvc1ZhbHVlKCkgeyB0aGlzLl9yYWRpb3MuZm9yRWFjaCgocmFkaW8pID0+IHJhZGlvLnVwZGF0ZVZhbHVlKHRoaXMuX3ZhbHVlKSk7IH1cbiAgcHJpdmF0ZSBfdXBkYXRlUmFkaW9zRGlzYWJsZWQoKSB7IHRoaXMuX3JhZGlvcy5mb3JFYWNoKChyYWRpbykgPT4gcmFkaW8udXBkYXRlRGlzYWJsZWQoKSk7IH1cbn1cblxuXG4vKipcbiAqIEEgZGlyZWN0aXZlIHRoYXQgbWFya3MgYW4gaW5wdXQgb2YgdHlwZSBcInJhZGlvXCIgYXMgYSBwYXJ0IG9mIHRoZVxuICogW2BOZ2JSYWRpb0dyb3VwYF0oIy9jb21wb25lbnRzL2J1dHRvbnMvYXBpI05nYlJhZGlvR3JvdXApLlxuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbbmdiQnV0dG9uXVt0eXBlPXJhZGlvXScsXG4gIGhvc3Q6IHtcbiAgICAnW2NoZWNrZWRdJzogJ2NoZWNrZWQnLFxuICAgICdbZGlzYWJsZWRdJzogJ2Rpc2FibGVkJyxcbiAgICAnW25hbWVdJzogJ25hbWVBdHRyJyxcbiAgICAnKGNoYW5nZSknOiAnb25DaGFuZ2UoKScsXG4gICAgJyhmb2N1cyknOiAnZm9jdXNlZCA9IHRydWUnLFxuICAgICcoYmx1ciknOiAnZm9jdXNlZCA9IGZhbHNlJ1xuICB9XG59KVxuZXhwb3J0IGNsYXNzIE5nYlJhZGlvIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBfY2hlY2tlZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZGlzYWJsZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgX3ZhbHVlOiBhbnkgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgZm9yIHRoZSAnbmFtZScgcHJvcGVydHkgb2YgdGhlIGlucHV0IGVsZW1lbnQuXG4gICAqXG4gICAqIEFsbCBpbnB1dHMgb2YgdGhlIHJhZGlvIGdyb3VwIHNob3VsZCBoYXZlIHRoZSBzYW1lIG5hbWUuIElmIG5vdCBzcGVjaWZpZWQsXG4gICAqIHRoZSBuYW1lIG9mIHRoZSBlbmNsb3NpbmcgZ3JvdXAgaXMgdXNlZC5cbiAgICovXG4gIEBJbnB1dCgpIG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGZvcm0gY29udHJvbCB2YWx1ZSB3aGVuIGN1cnJlbnQgcmFkaW8gYnV0dG9uIGlzIGNoZWNrZWQuXG4gICAqL1xuICBASW5wdXQoJ3ZhbHVlJylcbiAgc2V0IHZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgIGNvbnN0IHN0cmluZ1ZhbHVlID0gdmFsdWUgPyB2YWx1ZS50b1N0cmluZygpIDogJyc7XG4gICAgdGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LCAndmFsdWUnLCBzdHJpbmdWYWx1ZSk7XG4gICAgdGhpcy5fZ3JvdXAub25SYWRpb1ZhbHVlVXBkYXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogSWYgYHRydWVgLCBjdXJyZW50IHJhZGlvIGJ1dHRvbiB3aWxsIGJlIGRpc2FibGVkLlxuICAgKi9cbiAgQElucHV0KCdkaXNhYmxlZCcpXG4gIHNldCBkaXNhYmxlZChpc0Rpc2FibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSBpc0Rpc2FibGVkICE9PSBmYWxzZTtcbiAgICB0aGlzLnVwZGF0ZURpc2FibGVkKCk7XG4gIH1cblxuICBzZXQgZm9jdXNlZChpc0ZvY3VzZWQ6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5fbGFiZWwpIHtcbiAgICAgIHRoaXMuX2xhYmVsLmZvY3VzZWQgPSBpc0ZvY3VzZWQ7XG4gICAgfVxuICAgIGlmICghaXNGb2N1c2VkKSB7XG4gICAgICB0aGlzLl9ncm91cC5vblRvdWNoZWQoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgY2hlY2tlZCgpIHsgcmV0dXJuIHRoaXMuX2NoZWNrZWQ7IH1cblxuICBnZXQgZGlzYWJsZWQoKSB7IHJldHVybiB0aGlzLl9ncm91cC5kaXNhYmxlZCB8fCB0aGlzLl9kaXNhYmxlZDsgfVxuXG4gIGdldCB2YWx1ZSgpIHsgcmV0dXJuIHRoaXMuX3ZhbHVlOyB9XG5cbiAgZ2V0IG5hbWVBdHRyKCkgeyByZXR1cm4gdGhpcy5uYW1lIHx8IHRoaXMuX2dyb3VwLm5hbWU7IH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICAgIHByaXZhdGUgX2dyb3VwOiBOZ2JSYWRpb0dyb3VwLCBwcml2YXRlIF9sYWJlbDogTmdiQnV0dG9uTGFiZWwsIHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICBwcml2YXRlIF9lbGVtZW50OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+LCBwcml2YXRlIF9jZDogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICB0aGlzLl9ncm91cC5yZWdpc3Rlcih0aGlzKTtcbiAgICB0aGlzLnVwZGF0ZURpc2FibGVkKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHsgdGhpcy5fZ3JvdXAudW5yZWdpc3Rlcih0aGlzKTsgfVxuXG4gIG9uQ2hhbmdlKCkgeyB0aGlzLl9ncm91cC5vblJhZGlvQ2hhbmdlKHRoaXMpOyB9XG5cbiAgdXBkYXRlVmFsdWUodmFsdWUpIHtcbiAgICAvLyBsYWJlbCB3b24ndCBiZSB1cGRhdGVkLCBpZiBpdCBpcyBpbnNpZGUgdGhlIE9uUHVzaCBjb21wb25lbnQgd2hlbiBbbmdNb2RlbF0gY2hhbmdlc1xuICAgIGlmICh0aGlzLnZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fY2hlY2tlZCA9IHRoaXMudmFsdWUgPT09IHZhbHVlO1xuICAgIHRoaXMuX2xhYmVsLmFjdGl2ZSA9IHRoaXMuX2NoZWNrZWQ7XG4gIH1cblxuICB1cGRhdGVEaXNhYmxlZCgpIHsgdGhpcy5fbGFiZWwuZGlzYWJsZWQgPSB0aGlzLmRpc2FibGVkOyB9XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/card/card-config.js b/dist/sunbird-ui-components/esm5/card/card-config.js new file mode 100644 index 0000000..ac9052a --- /dev/null +++ b/dist/sunbird-ui-components/esm5/card/card-config.js @@ -0,0 +1,31 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Injectable } from '@angular/core'; +import * as i0 from "@angular/core"; +/** + * A configuration service for the [SbCard](#/components/alert/api#SbCard) component. + * + * You can inject this service, typically in your root component, and customize its properties + * to provide default values for all alerts used in the application. + */ +var SbCardConfig = /** @class */ (function () { + function SbCardConfig() { + this.dismissible = true; + this.type = 'warning'; + } + SbCardConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ SbCardConfig.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function SbCardConfig_Factory() { return new SbCardConfig(); }, token: SbCardConfig, providedIn: "root" }); + return SbCardConfig; +}()); +export { SbCardConfig }; +if (false) { + /** @type {?} */ + SbCardConfig.prototype.dismissible; + /** @type {?} */ + SbCardConfig.prototype.type; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC1jb25maWcuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjYXJkL2NhcmQtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQVF6QztJQUFBO1FBRUUsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFDbkIsU0FBSSxHQUFHLFNBQVMsQ0FBQztLQUNsQjs7Z0JBSkEsVUFBVSxTQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQzs7O3VCQVJoQztDQVlDLEFBSkQsSUFJQztTQUhZLFlBQVk7OztJQUN2QixtQ0FBbUI7O0lBQ25CLDRCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogQSBjb25maWd1cmF0aW9uIHNlcnZpY2UgZm9yIHRoZSBbU2JDYXJkXSgjL2NvbXBvbmVudHMvYWxlcnQvYXBpI1NiQ2FyZCkgY29tcG9uZW50LlxuICpcbiAqIFlvdSBjYW4gaW5qZWN0IHRoaXMgc2VydmljZSwgdHlwaWNhbGx5IGluIHlvdXIgcm9vdCBjb21wb25lbnQsIGFuZCBjdXN0b21pemUgaXRzIHByb3BlcnRpZXNcbiAqIHRvIHByb3ZpZGUgZGVmYXVsdCB2YWx1ZXMgZm9yIGFsbCBhbGVydHMgdXNlZCBpbiB0aGUgYXBwbGljYXRpb24uXG4gKi9cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIFNiQ2FyZENvbmZpZyB7XG4gIGRpc21pc3NpYmxlID0gdHJ1ZTtcbiAgdHlwZSA9ICd3YXJuaW5nJztcbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/card/card.js b/dist/sunbird-ui-components/esm5/card/card.js new file mode 100644 index 0000000..6d1986b --- /dev/null +++ b/dist/sunbird-ui-components/esm5/card/card.js @@ -0,0 +1,110 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, Renderer2, ElementRef, ViewEncapsulation } from '@angular/core'; +import { SbCardConfig } from './card-config'; +/** + * Alert is a component to provide contextual feedback messages for user. + * + * It supports several alert types and can be dismissed. + */ +var SbCard = /** @class */ (function () { + function SbCard(config, _renderer, _element) { + this._renderer = _renderer; + this._element = _element; + /** + * An event emitted when the close button is clicked. It has no payload and only relevant for dismissible alerts. + */ + this.close = new EventEmitter(); + this.dismissible = config.dismissible; + this.type = config.type; + } + /** + * @return {?} + */ + SbCard.prototype.closeHandler = /** + * @return {?} + */ + function () { this.close.emit(null); }; + /** + * @param {?} changes + * @return {?} + */ + SbCard.prototype.ngOnChanges = /** + * @param {?} changes + * @return {?} + */ + function (changes) { + /** @type {?} */ + var typeChange = changes['type']; + if (typeChange && !typeChange.firstChange) { + this._renderer.removeClass(this._element.nativeElement, "alert-" + typeChange.previousValue); + this._renderer.addClass(this._element.nativeElement, "alert-" + typeChange.currentValue); + } + }; + /** + * @return {?} + */ + SbCard.prototype.ngOnInit = /** + * @return {?} + */ + function () { this._renderer.addClass(this._element.nativeElement, "alert-" + this.type); }; + SbCard.decorators = [ + { type: Component, args: [{ + selector: 'sb-card', + changeDetection: ChangeDetectionStrategy.OnPush, + encapsulation: ViewEncapsulation.None, + host: { 'role': 'alert', 'class': 'alert', '[class.alert-dismissible]': 'dismissible' }, + template: "\n \n \n ", + styles: ["ngb-alert{display:block}"] + }] } + ]; + /** @nocollapse */ + SbCard.ctorParameters = function () { return [ + { type: SbCardConfig }, + { type: Renderer2 }, + { type: ElementRef } + ]; }; + SbCard.propDecorators = { + dismissible: [{ type: Input }], + type: [{ type: Input }], + close: [{ type: Output }] + }; + return SbCard; +}()); +export { SbCard }; +if (false) { + /** + * If `true`, alert can be dismissed by the user. + * + * The close button (×) will be displayed and you can be notified + * of the event with the `(close)` output. + * @type {?} + */ + SbCard.prototype.dismissible; + /** + * Type of the alert. + * + * Bootstrap provides styles for the following types: `'success'`, `'info'`, `'warning'`, `'danger'`, `'primary'`, + * `'secondary'`, `'light'` and `'dark'`. + * @type {?} + */ + SbCard.prototype.type; + /** + * An event emitted when the close button is clicked. It has no payload and only relevant for dismissible alerts. + * @type {?} + */ + SbCard.prototype.close; + /** + * @type {?} + * @private + */ + SbCard.prototype._renderer; + /** + * @type {?} + * @private + */ + SbCard.prototype._element; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImNhcmQvY2FyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFJVixpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGVBQWUsQ0FBQzs7Ozs7O0FBTzNDO0lBbUNFLGdCQUFZLE1BQW9CLEVBQVUsU0FBb0IsRUFBVSxRQUFvQjtRQUFsRCxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBWTs7OztRQUZsRixVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUd6QyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUM7UUFDdEMsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQzFCLENBQUM7Ozs7SUFFRCw2QkFBWTs7O0lBQVosY0FBaUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7OztJQUV6Qyw0QkFBVzs7OztJQUFYLFVBQVksT0FBc0I7O1lBQzFCLFVBQVUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQ2xDLElBQUksVUFBVSxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRTtZQUN6QyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxXQUFTLFVBQVUsQ0FBQyxhQUFlLENBQUMsQ0FBQztZQUM3RixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxXQUFTLFVBQVUsQ0FBQyxZQUFjLENBQUMsQ0FBQztTQUMxRjtJQUNILENBQUM7Ozs7SUFFRCx5QkFBUTs7O0lBQVIsY0FBYSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxXQUFTLElBQUksQ0FBQyxJQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7O2dCQWxEM0YsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxTQUFTO29CQUNuQixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7b0JBQ3JDLElBQUksRUFBRSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxhQUFhLEVBQUM7b0JBQ3JGLFFBQVEsRUFBRSx3UUFNUDs7aUJBRUo7Ozs7Z0JBcEJPLFlBQVk7Z0JBUmxCLFNBQVM7Z0JBQ1QsVUFBVTs7OzhCQW9DVCxLQUFLO3VCQU9MLEtBQUs7d0JBSUwsTUFBTTs7SUFrQlQsYUFBQztDQUFBLEFBbkRELElBbURDO1NBckNZLE1BQU07Ozs7Ozs7OztJQVFqQiw2QkFBOEI7Ozs7Ozs7O0lBTzlCLHNCQUFzQjs7Ozs7SUFJdEIsdUJBQTJDOzs7OztJQUVULDJCQUE0Qjs7Ozs7SUFBRSwwQkFBNEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIFJlbmRlcmVyMixcbiAgRWxlbWVudFJlZixcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1NiQ2FyZENvbmZpZ30gZnJvbSAnLi9jYXJkLWNvbmZpZyc7XG5cbi8qKlxuICogQWxlcnQgaXMgYSBjb21wb25lbnQgdG8gcHJvdmlkZSBjb250ZXh0dWFsIGZlZWRiYWNrIG1lc3NhZ2VzIGZvciB1c2VyLlxuICpcbiAqIEl0IHN1cHBvcnRzIHNldmVyYWwgYWxlcnQgdHlwZXMgYW5kIGNhbiBiZSBkaXNtaXNzZWQuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NiLWNhcmQnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaG9zdDogeydyb2xlJzogJ2FsZXJ0JywgJ2NsYXNzJzogJ2FsZXJ0JywgJ1tjbGFzcy5hbGVydC1kaXNtaXNzaWJsZV0nOiAnZGlzbWlzc2libGUnfSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPGJ1dHRvbiAqbmdJZj1cImRpc21pc3NpYmxlXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2xvc2VcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBpMThuLWFyaWEtbGFiZWw9XCJAQG5nYi5hbGVydC5jbG9zZVwiXG4gICAgICAoY2xpY2spPVwiY2xvc2VIYW5kbGVyKClcIj5cbiAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICAgYCxcbiAgc3R5bGVVcmxzOiBbJy4vY2FyZC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgU2JDYXJkIGltcGxlbWVudHMgT25Jbml0LFxuICAgIE9uQ2hhbmdlcyB7XG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGFsZXJ0IGNhbiBiZSBkaXNtaXNzZWQgYnkgdGhlIHVzZXIuXG4gICAqXG4gICAqIFRoZSBjbG9zZSBidXR0b24gKMOXKSB3aWxsIGJlIGRpc3BsYXllZCBhbmQgeW91IGNhbiBiZSBub3RpZmllZFxuICAgKiBvZiB0aGUgZXZlbnQgd2l0aCB0aGUgYChjbG9zZSlgIG91dHB1dC5cbiAgICovXG4gIEBJbnB1dCgpIGRpc21pc3NpYmxlOiBib29sZWFuO1xuICAvKipcbiAgICogVHlwZSBvZiB0aGUgYWxlcnQuXG4gICAqXG4gICAqIEJvb3RzdHJhcCBwcm92aWRlcyBzdHlsZXMgZm9yIHRoZSBmb2xsb3dpbmcgdHlwZXM6IGAnc3VjY2VzcydgLCBgJ2luZm8nYCwgYCd3YXJuaW5nJ2AsIGAnZGFuZ2VyJ2AsIGAncHJpbWFyeSdgLFxuICAgKiBgJ3NlY29uZGFyeSdgLCBgJ2xpZ2h0J2AgYW5kIGAnZGFyaydgLlxuICAgKi9cbiAgQElucHV0KCkgdHlwZTogc3RyaW5nO1xuICAvKipcbiAgICogQW4gZXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBjbG9zZSBidXR0b24gaXMgY2xpY2tlZC4gSXQgaGFzIG5vIHBheWxvYWQgYW5kIG9ubHkgcmVsZXZhbnQgZm9yIGRpc21pc3NpYmxlIGFsZXJ0cy5cbiAgICovXG4gIEBPdXRwdXQoKSBjbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IFNiQ2FyZENvbmZpZywgcHJpdmF0ZSBfcmVuZGVyZXI6IFJlbmRlcmVyMiwgcHJpdmF0ZSBfZWxlbWVudDogRWxlbWVudFJlZikge1xuICAgIHRoaXMuZGlzbWlzc2libGUgPSBjb25maWcuZGlzbWlzc2libGU7XG4gICAgdGhpcy50eXBlID0gY29uZmlnLnR5cGU7XG4gIH1cblxuICBjbG9zZUhhbmRsZXIoKSB7IHRoaXMuY2xvc2UuZW1pdChudWxsKTsgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBjb25zdCB0eXBlQ2hhbmdlID0gY2hhbmdlc1sndHlwZSddO1xuICAgIGlmICh0eXBlQ2hhbmdlICYmICF0eXBlQ2hhbmdlLmZpcnN0Q2hhbmdlKSB7XG4gICAgICB0aGlzLl9yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIGBhbGVydC0ke3R5cGVDaGFuZ2UucHJldmlvdXNWYWx1ZX1gKTtcbiAgICAgIHRoaXMuX3JlbmRlcmVyLmFkZENsYXNzKHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCwgYGFsZXJ0LSR7dHlwZUNoYW5nZS5jdXJyZW50VmFsdWV9YCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7IHRoaXMuX3JlbmRlcmVyLmFkZENsYXNzKHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCwgYGFsZXJ0LSR7dGhpcy50eXBlfWApOyB9XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/card/card.module.js b/dist/sunbird-ui-components/esm5/card/card.module.js new file mode 100644 index 0000000..581584e --- /dev/null +++ b/dist/sunbird-ui-components/esm5/card/card.module.js @@ -0,0 +1,19 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { SbCard } from './card'; +export { SbCard } from './card'; +export { SbCardConfig } from './card-config'; +var SbCardModule = /** @class */ (function () { + function SbCardModule() { + } + SbCardModule.decorators = [ + { type: NgModule, args: [{ declarations: [SbCard], exports: [SbCard], imports: [CommonModule], entryComponents: [SbCard] },] } + ]; + return SbCardModule; +}()); +export { SbCardModule }; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC5tb2R1bGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjYXJkL2NhcmQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUU3QyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBRTlCLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDOUIsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUUzQztJQUFBO0lBRUEsQ0FBQzs7Z0JBRkEsUUFBUSxTQUFDLEVBQUMsWUFBWSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUM7O0lBRXpHLG1CQUFDO0NBQUEsQUFGRCxJQUVDO1NBRFksWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmltcG9ydCB7U2JDYXJkfSBmcm9tICcuL2NhcmQnO1xuXG5leHBvcnQge1NiQ2FyZH0gZnJvbSAnLi9jYXJkJztcbmV4cG9ydCB7U2JDYXJkQ29uZmlnfSBmcm9tICcuL2NhcmQtY29uZmlnJztcblxuQE5nTW9kdWxlKHtkZWNsYXJhdGlvbnM6IFtTYkNhcmRdLCBleHBvcnRzOiBbU2JDYXJkXSwgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sIGVudHJ5Q29tcG9uZW50czogW1NiQ2FyZF19KVxuZXhwb3J0IGNsYXNzIFNiQ2FyZE1vZHVsZSB7XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/carousel/carousel-config.js b/dist/sunbird-ui-components/esm5/carousel/carousel-config.js new file mode 100644 index 0000000..91f5f6c --- /dev/null +++ b/dist/sunbird-ui-components/esm5/carousel/carousel-config.js @@ -0,0 +1,43 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Injectable } from '@angular/core'; +import * as i0 from "@angular/core"; +/** + * A configuration service for the [NgbCarousel](#/components/carousel/api#NgbCarousel) component. + * + * You can inject this service, typically in your root component, and customize its properties + * to provide default values for all carousels used in the application. + */ +var NgbCarouselConfig = /** @class */ (function () { + function NgbCarouselConfig() { + this.interval = 5000; + this.wrap = true; + this.keyboard = true; + this.pauseOnHover = true; + this.showNavigationArrows = true; + this.showNavigationIndicators = true; + } + NgbCarouselConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ NgbCarouselConfig.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function NgbCarouselConfig_Factory() { return new NgbCarouselConfig(); }, token: NgbCarouselConfig, providedIn: "root" }); + return NgbCarouselConfig; +}()); +export { NgbCarouselConfig }; +if (false) { + /** @type {?} */ + NgbCarouselConfig.prototype.interval; + /** @type {?} */ + NgbCarouselConfig.prototype.wrap; + /** @type {?} */ + NgbCarouselConfig.prototype.keyboard; + /** @type {?} */ + NgbCarouselConfig.prototype.pauseOnHover; + /** @type {?} */ + NgbCarouselConfig.prototype.showNavigationArrows; + /** @type {?} */ + NgbCarouselConfig.prototype.showNavigationIndicators; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwtY29uZmlnLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY2Fyb3VzZWwvY2Fyb3VzZWwtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQVF6QztJQUFBO1FBRUUsYUFBUSxHQUFHLElBQUksQ0FBQztRQUNoQixTQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ1osYUFBUSxHQUFHLElBQUksQ0FBQztRQUNoQixpQkFBWSxHQUFHLElBQUksQ0FBQztRQUNwQix5QkFBb0IsR0FBRyxJQUFJLENBQUM7UUFDNUIsNkJBQXdCLEdBQUcsSUFBSSxDQUFDO0tBQ2pDOztnQkFSQSxVQUFVLFNBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDOzs7NEJBUmhDO0NBZ0JDLEFBUkQsSUFRQztTQVBZLGlCQUFpQjs7O0lBQzVCLHFDQUFnQjs7SUFDaEIsaUNBQVk7O0lBQ1oscUNBQWdCOztJQUNoQix5Q0FBb0I7O0lBQ3BCLGlEQUE0Qjs7SUFDNUIscURBQWdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBBIGNvbmZpZ3VyYXRpb24gc2VydmljZSBmb3IgdGhlIFtOZ2JDYXJvdXNlbF0oIy9jb21wb25lbnRzL2Nhcm91c2VsL2FwaSNOZ2JDYXJvdXNlbCkgY29tcG9uZW50LlxuICpcbiAqIFlvdSBjYW4gaW5qZWN0IHRoaXMgc2VydmljZSwgdHlwaWNhbGx5IGluIHlvdXIgcm9vdCBjb21wb25lbnQsIGFuZCBjdXN0b21pemUgaXRzIHByb3BlcnRpZXNcbiAqIHRvIHByb3ZpZGUgZGVmYXVsdCB2YWx1ZXMgZm9yIGFsbCBjYXJvdXNlbHMgdXNlZCBpbiB0aGUgYXBwbGljYXRpb24uXG4gKi9cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIE5nYkNhcm91c2VsQ29uZmlnIHtcbiAgaW50ZXJ2YWwgPSA1MDAwO1xuICB3cmFwID0gdHJ1ZTtcbiAga2V5Ym9hcmQgPSB0cnVlO1xuICBwYXVzZU9uSG92ZXIgPSB0cnVlO1xuICBzaG93TmF2aWdhdGlvbkFycm93cyA9IHRydWU7XG4gIHNob3dOYXZpZ2F0aW9uSW5kaWNhdG9ycyA9IHRydWU7XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/carousel/carousel.js b/dist/sunbird-ui-components/esm5/carousel/carousel.js new file mode 100644 index 0000000..fda57b8 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/carousel/carousel.js @@ -0,0 +1,600 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import * as tslib_1 from "tslib"; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, Directive, EventEmitter, Inject, Input, NgZone, Output, PLATFORM_ID, QueryList, TemplateRef, HostListener } from '@angular/core'; +import { isPlatformBrowser } from '@angular/common'; +import { NgbCarouselConfig } from './carousel-config'; +import { Subject, timer, BehaviorSubject, combineLatest, NEVER } from 'rxjs'; +import { startWith, map, switchMap, takeUntil, distinctUntilChanged } from 'rxjs/operators'; +/** @type {?} */ +var nextId = 0; +/** + * A directive that wraps the individual carousel slide. + */ +var NgbSlide = /** @class */ (function () { + function NgbSlide(tplRef) { + this.tplRef = tplRef; + /** + * Slide id that must be unique for the entire document. + * + * If not provided, will be generated in the `ngb-slide-xx` format. + */ + this.id = "ngb-slide-" + nextId++; + } + NgbSlide.decorators = [ + { type: Directive, args: [{ selector: 'ng-template[ngbSlide]' },] } + ]; + /** @nocollapse */ + NgbSlide.ctorParameters = function () { return [ + { type: TemplateRef } + ]; }; + NgbSlide.propDecorators = { + id: [{ type: Input }] + }; + return NgbSlide; +}()); +export { NgbSlide }; +if (false) { + /** + * Slide id that must be unique for the entire document. + * + * If not provided, will be generated in the `ngb-slide-xx` format. + * @type {?} + */ + NgbSlide.prototype.id; + /** @type {?} */ + NgbSlide.prototype.tplRef; +} +/** + * Carousel is a component to easily create and control slideshows. + * + * Allows to set intervals, change the way user interacts with the slides and provides a programmatic API. + */ +var NgbCarousel = /** @class */ (function () { + function NgbCarousel(config, _platformId, _ngZone, _cd) { + this._platformId = _platformId; + this._ngZone = _ngZone; + this._cd = _cd; + this.NgbSlideEventSource = NgbSlideEventSource; + this._destroy$ = new Subject(); + this._interval$ = new BehaviorSubject(0); + this._mouseHover$ = new BehaviorSubject(false); + this._pauseOnHover$ = new BehaviorSubject(false); + this._pause$ = new BehaviorSubject(false); + this._wrap$ = new BehaviorSubject(false); + /** + * An event emitted right after the slide transition is completed. + * + * See [`NgbSlideEvent`](#/components/carousel/api#NgbSlideEvent) for payload details. + */ + this.slide = new EventEmitter(); + this.interval = config.interval; + this.wrap = config.wrap; + this.keyboard = config.keyboard; + this.pauseOnHover = config.pauseOnHover; + this.showNavigationArrows = config.showNavigationArrows; + this.showNavigationIndicators = config.showNavigationIndicators; + } + Object.defineProperty(NgbCarousel.prototype, "interval", { + get: /** + * @return {?} + */ + function () { return this._interval$.value; }, + /** + * Time in milliseconds before the next slide is shown. + */ + set: /** + * Time in milliseconds before the next slide is shown. + * @param {?} value + * @return {?} + */ + function (value) { + this._interval$.next(value); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbCarousel.prototype, "wrap", { + get: /** + * @return {?} + */ + function () { return this._wrap$.value; }, + /** + * If `true`, will 'wrap' the carousel by switching from the last slide back to the first. + */ + set: /** + * If `true`, will 'wrap' the carousel by switching from the last slide back to the first. + * @param {?} value + * @return {?} + */ + function (value) { + this._wrap$.next(value); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbCarousel.prototype, "pauseOnHover", { + get: /** + * @return {?} + */ + function () { return this._pauseOnHover$.value; }, + /** + * If `true`, will pause slide switching when mouse cursor hovers the slide. + * + * @since 2.2.0 + */ + set: /** + * If `true`, will pause slide switching when mouse cursor hovers the slide. + * + * \@since 2.2.0 + * @param {?} value + * @return {?} + */ + function (value) { + this._pauseOnHover$.next(value); + }, + enumerable: true, + configurable: true + }); + /** + * @return {?} + */ + NgbCarousel.prototype.mouseEnter = /** + * @return {?} + */ + function () { + this._mouseHover$.next(true); + }; + /** + * @return {?} + */ + NgbCarousel.prototype.mouseLeave = /** + * @return {?} + */ + function () { + this._mouseHover$.next(false); + }; + /** + * @return {?} + */ + NgbCarousel.prototype.ngAfterContentInit = /** + * @return {?} + */ + function () { + var _this = this; + // setInterval() doesn't play well with SSR and protractor, + // so we should run it in the browser and outside Angular + if (isPlatformBrowser(this._platformId)) { + this._ngZone.runOutsideAngular((/** + * @return {?} + */ + function () { + /** @type {?} */ + var hasNextSlide$ = combineLatest(_this.slide.pipe(map((/** + * @param {?} slideEvent + * @return {?} + */ + function (slideEvent) { return slideEvent.current; })), startWith(_this.activeId)), _this._wrap$, _this.slides.changes.pipe(startWith(null))) + .pipe(map((/** + * @param {?} __0 + * @return {?} + */ + function (_a) { + var _b = tslib_1.__read(_a, 2), currentSlideId = _b[0], wrap = _b[1]; + /** @type {?} */ + var slideArr = _this.slides.toArray(); + /** @type {?} */ + var currentSlideIdx = _this._getSlideIdxById(currentSlideId); + return wrap ? slideArr.length > 1 : currentSlideIdx < slideArr.length - 1; + })), distinctUntilChanged()); + combineLatest(_this._pause$, _this._pauseOnHover$, _this._mouseHover$, _this._interval$, hasNextSlide$) + .pipe(map((/** + * @param {?} __0 + * @return {?} + */ + function (_a) { + var _b = tslib_1.__read(_a, 5), pause = _b[0], pauseOnHover = _b[1], mouseHover = _b[2], interval = _b[3], hasNextSlide = _b[4]; + return ((pause || (pauseOnHover && mouseHover) || !hasNextSlide) ? 0 : interval); + })), distinctUntilChanged(), switchMap((/** + * @param {?} interval + * @return {?} + */ + function (interval) { return interval > 0 ? timer(interval, interval) : NEVER; })), takeUntil(_this._destroy$)) + .subscribe((/** + * @return {?} + */ + function () { return _this._ngZone.run((/** + * @return {?} + */ + function () { return _this.next(NgbSlideEventSource.TIMER); })); })); + })); + } + this.slides.changes.pipe(takeUntil(this._destroy$)).subscribe((/** + * @return {?} + */ + function () { return _this._cd.markForCheck(); })); + }; + /** + * @return {?} + */ + NgbCarousel.prototype.ngAfterContentChecked = /** + * @return {?} + */ + function () { + /** @type {?} */ + var activeSlide = this._getSlideById(this.activeId); + this.activeId = activeSlide ? activeSlide.id : (this.slides.length ? this.slides.first.id : null); + }; + /** + * @return {?} + */ + NgbCarousel.prototype.ngOnDestroy = /** + * @return {?} + */ + function () { this._destroy$.next(); }; + /** + * Navigates to a slide with the specified identifier. + */ + /** + * Navigates to a slide with the specified identifier. + * @param {?} slideId + * @param {?=} source + * @return {?} + */ + NgbCarousel.prototype.select = /** + * Navigates to a slide with the specified identifier. + * @param {?} slideId + * @param {?=} source + * @return {?} + */ + function (slideId, source) { + this._cycleToSelected(slideId, this._getSlideEventDirection(this.activeId, slideId), source); + }; + /** + * Navigates to the previous slide. + */ + /** + * Navigates to the previous slide. + * @param {?=} source + * @return {?} + */ + NgbCarousel.prototype.prev = /** + * Navigates to the previous slide. + * @param {?=} source + * @return {?} + */ + function (source) { + this._cycleToSelected(this._getPrevSlide(this.activeId), NgbSlideEventDirection.RIGHT, source); + }; + /** + * Navigates to the next slide. + */ + /** + * Navigates to the next slide. + * @param {?=} source + * @return {?} + */ + NgbCarousel.prototype.next = /** + * Navigates to the next slide. + * @param {?=} source + * @return {?} + */ + function (source) { + this._cycleToSelected(this._getNextSlide(this.activeId), NgbSlideEventDirection.LEFT, source); + }; + /** + * Pauses cycling through the slides. + */ + /** + * Pauses cycling through the slides. + * @return {?} + */ + NgbCarousel.prototype.pause = /** + * Pauses cycling through the slides. + * @return {?} + */ + function () { this._pause$.next(true); }; + /** + * Restarts cycling through the slides from left to right. + */ + /** + * Restarts cycling through the slides from left to right. + * @return {?} + */ + NgbCarousel.prototype.cycle = /** + * Restarts cycling through the slides from left to right. + * @return {?} + */ + function () { this._pause$.next(false); }; + /** + * @private + * @param {?} slideIdx + * @param {?} direction + * @param {?=} source + * @return {?} + */ + NgbCarousel.prototype._cycleToSelected = /** + * @private + * @param {?} slideIdx + * @param {?} direction + * @param {?=} source + * @return {?} + */ + function (slideIdx, direction, source) { + /** @type {?} */ + var selectedSlide = this._getSlideById(slideIdx); + if (selectedSlide && selectedSlide.id !== this.activeId) { + this.slide.emit({ prev: this.activeId, current: selectedSlide.id, direction: direction, paused: this._pause$.value, source: source }); + this.activeId = selectedSlide.id; + } + // we get here after the interval fires or any external API call like next(), prev() or select() + this._cd.markForCheck(); + }; + /** + * @private + * @param {?} currentActiveSlideId + * @param {?} nextActiveSlideId + * @return {?} + */ + NgbCarousel.prototype._getSlideEventDirection = /** + * @private + * @param {?} currentActiveSlideId + * @param {?} nextActiveSlideId + * @return {?} + */ + function (currentActiveSlideId, nextActiveSlideId) { + /** @type {?} */ + var currentActiveSlideIdx = this._getSlideIdxById(currentActiveSlideId); + /** @type {?} */ + var nextActiveSlideIdx = this._getSlideIdxById(nextActiveSlideId); + return currentActiveSlideIdx > nextActiveSlideIdx ? NgbSlideEventDirection.RIGHT : NgbSlideEventDirection.LEFT; + }; + /** + * @private + * @param {?} slideId + * @return {?} + */ + NgbCarousel.prototype._getSlideById = /** + * @private + * @param {?} slideId + * @return {?} + */ + function (slideId) { return this.slides.find((/** + * @param {?} slide + * @return {?} + */ + function (slide) { return slide.id === slideId; })); }; + /** + * @private + * @param {?} slideId + * @return {?} + */ + NgbCarousel.prototype._getSlideIdxById = /** + * @private + * @param {?} slideId + * @return {?} + */ + function (slideId) { + return this.slides.toArray().indexOf(this._getSlideById(slideId)); + }; + /** + * @private + * @param {?} currentSlideId + * @return {?} + */ + NgbCarousel.prototype._getNextSlide = /** + * @private + * @param {?} currentSlideId + * @return {?} + */ + function (currentSlideId) { + /** @type {?} */ + var slideArr = this.slides.toArray(); + /** @type {?} */ + var currentSlideIdx = this._getSlideIdxById(currentSlideId); + /** @type {?} */ + var isLastSlide = currentSlideIdx === slideArr.length - 1; + return isLastSlide ? (this.wrap ? slideArr[0].id : slideArr[slideArr.length - 1].id) : + slideArr[currentSlideIdx + 1].id; + }; + /** + * @private + * @param {?} currentSlideId + * @return {?} + */ + NgbCarousel.prototype._getPrevSlide = /** + * @private + * @param {?} currentSlideId + * @return {?} + */ + function (currentSlideId) { + /** @type {?} */ + var slideArr = this.slides.toArray(); + /** @type {?} */ + var currentSlideIdx = this._getSlideIdxById(currentSlideId); + /** @type {?} */ + var isFirstSlide = currentSlideIdx === 0; + return isFirstSlide ? (this.wrap ? slideArr[slideArr.length - 1].id : slideArr[0].id) : + slideArr[currentSlideIdx - 1].id; + }; + NgbCarousel.decorators = [ + { type: Component, args: [{ + selector: 'ngb-carousel', + exportAs: 'ngbCarousel', + changeDetection: ChangeDetectionStrategy.OnPush, + host: { + 'class': 'carousel slide', + '[style.display]': '"block"', + 'tabIndex': '0', + '(keydown.arrowLeft)': 'keyboard && prev(NgbSlideEventSource.ARROW_LEFT)', + '(keydown.arrowRight)': 'keyboard && next(NgbSlideEventSource.ARROW_RIGHT)' + }, + template: "\n
    \n
  1. \n
\n
\n
\n \n
\n
\n \n \n Previous\n \n \n \n Next\n \n " + }] } + ]; + /** @nocollapse */ + NgbCarousel.ctorParameters = function () { return [ + { type: NgbCarouselConfig }, + { type: undefined, decorators: [{ type: Inject, args: [PLATFORM_ID,] }] }, + { type: NgZone }, + { type: ChangeDetectorRef } + ]; }; + NgbCarousel.propDecorators = { + slides: [{ type: ContentChildren, args: [NgbSlide,] }], + activeId: [{ type: Input }], + interval: [{ type: Input }], + wrap: [{ type: Input }], + keyboard: [{ type: Input }], + pauseOnHover: [{ type: Input }], + showNavigationArrows: [{ type: Input }], + showNavigationIndicators: [{ type: Input }], + slide: [{ type: Output }], + mouseEnter: [{ type: HostListener, args: ['mouseenter',] }], + mouseLeave: [{ type: HostListener, args: ['mouseleave',] }] + }; + return NgbCarousel; +}()); +export { NgbCarousel }; +if (false) { + /** @type {?} */ + NgbCarousel.prototype.slides; + /** @type {?} */ + NgbCarousel.prototype.NgbSlideEventSource; + /** + * @type {?} + * @private + */ + NgbCarousel.prototype._destroy$; + /** + * @type {?} + * @private + */ + NgbCarousel.prototype._interval$; + /** + * @type {?} + * @private + */ + NgbCarousel.prototype._mouseHover$; + /** + * @type {?} + * @private + */ + NgbCarousel.prototype._pauseOnHover$; + /** + * @type {?} + * @private + */ + NgbCarousel.prototype._pause$; + /** + * @type {?} + * @private + */ + NgbCarousel.prototype._wrap$; + /** + * The slide id that should be displayed **initially**. + * + * For subsequent interactions use methods `select()`, `next()`, etc. and the `(slide)` output. + * @type {?} + */ + NgbCarousel.prototype.activeId; + /** + * If `true`, allows to interact with carousel using keyboard 'arrow left' and 'arrow right'. + * @type {?} + */ + NgbCarousel.prototype.keyboard; + /** + * If `true`, 'previous' and 'next' navigation arrows will be visible on the slide. + * + * \@since 2.2.0 + * @type {?} + */ + NgbCarousel.prototype.showNavigationArrows; + /** + * If `true`, navigation indicators at the bottom of the slide will be visible. + * + * \@since 2.2.0 + * @type {?} + */ + NgbCarousel.prototype.showNavigationIndicators; + /** + * An event emitted right after the slide transition is completed. + * + * See [`NgbSlideEvent`](#/components/carousel/api#NgbSlideEvent) for payload details. + * @type {?} + */ + NgbCarousel.prototype.slide; + /** + * @type {?} + * @private + */ + NgbCarousel.prototype._platformId; + /** + * @type {?} + * @private + */ + NgbCarousel.prototype._ngZone; + /** + * @type {?} + * @private + */ + NgbCarousel.prototype._cd; +} +/** + * A slide change event emitted right after the slide transition is completed. + * @record + */ +export function NgbSlideEvent() { } +if (false) { + /** + * The previous slide id. + * @type {?} + */ + NgbSlideEvent.prototype.prev; + /** + * The current slide id. + * @type {?} + */ + NgbSlideEvent.prototype.current; + /** + * The slide event direction. + * + * Possible values are `'left' | 'right'`. + * @type {?} + */ + NgbSlideEvent.prototype.direction; + /** + * Whether the pause() method was called (and no cycle() call was done afterwards). + * + * \@since 5.1.0 + * @type {?} + */ + NgbSlideEvent.prototype.paused; + /** + * Source triggering the slide change event. + * + * Possible values are `'timer' | 'arrowLeft' | 'arrowRight' | 'indicator'` + * + * \@since 5.1.0 + * @type {?|undefined} + */ + NgbSlideEvent.prototype.source; +} +/** @enum {string} */ +var NgbSlideEventDirection = { + LEFT: (/** @type {?} */ ('left')), + RIGHT: (/** @type {?} */ ('right')), +}; +export { NgbSlideEventDirection }; +/** @enum {string} */ +var NgbSlideEventSource = { + TIMER: 'timer', + ARROW_LEFT: 'arrowLeft', + ARROW_RIGHT: 'arrowRight', + INDICATOR: 'indicator', +}; +export { NgbSlideEventSource }; +/** @type {?} */ +export var NGB_CAROUSEL_DIRECTIVES = [NgbCarousel, NgbSlide]; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjYXJvdXNlbC9jYXJvdXNlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFHTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFFTixNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsRUFDVCxXQUFXLEVBQ1gsWUFBWSxFQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRWxELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRXBELE9BQU8sRUFBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzNFLE9BQU8sRUFBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsb0JBQW9CLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7SUFFdEYsTUFBTSxHQUFHLENBQUM7Ozs7QUFLZDtJQVFFLGtCQUFtQixNQUF3QjtRQUF4QixXQUFNLEdBQU4sTUFBTSxDQUFrQjs7Ozs7O1FBRGxDLE9BQUUsR0FBRyxlQUFhLE1BQU0sRUFBSSxDQUFDO0lBQ1EsQ0FBQzs7Z0JBUmhELFNBQVMsU0FBQyxFQUFDLFFBQVEsRUFBRSx1QkFBdUIsRUFBQzs7OztnQkFmNUMsV0FBVzs7O3FCQXNCVixLQUFLOztJQUVSLGVBQUM7Q0FBQSxBQVRELElBU0M7U0FSWSxRQUFROzs7Ozs7OztJQU1uQixzQkFBc0M7O0lBQzFCLDBCQUErQjs7Ozs7OztBQVE3QztJQTZHRSxxQkFDSSxNQUF5QixFQUErQixXQUFXLEVBQVUs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QU0sU0FBQyxXQUFXO2dCQWxKbEQsTUFBTTtnQkFQTixpQkFBaUI7Ozt5QkE0RWhCLGVBQWUsU0FBQyxRQUFROzJCQWdCeEIsS0FBSzsyQkFLTCxLQUFLO3VCQVVMLEtBQUs7MkJBVUwsS0FBSzsrQkFPTCxLQUFLO3VDQVlMLEtBQUs7MkNBT0wsS0FBSzt3QkFPTCxNQUFNOzZCQWFOLFlBQVksU0FBQyxZQUFZOzZCQUt6QixZQUFZLFNBQUMsWUFBWTs7SUFrSDVCLGtCQUFDO0NBQUEsQUEvT0QsSUErT0M7U0FoTlksV0FBVzs7O0lBRXRCLDZCQUF1RDs7SUFFdkQsMENBQWlEOzs7OztJQUVqRCxnQ0FBd0M7Ozs7O0lBQ3hDLGlDQUE0Qzs7Ozs7SUFDNUMsbUNBQWtEOzs7OztJQUNsRCxxQ0FBb0Q7Ozs7O0lBQ3BELDhCQUE2Qzs7Ozs7SUFDN0MsNkJBQTRDOzs7Ozs7O0lBTzVDLCtCQUEwQjs7Ozs7SUF5QjFCLCtCQUEyQjs7Ozs7OztJQW1CM0IsMkNBQXVDOzs7Ozs7O0lBT3ZDLCtDQUEyQzs7Ozs7OztJQU8zQyw0QkFBb0Q7Ozs7O0lBR3JCLGtDQUF3Qzs7Ozs7SUFBRSw4QkFBdUI7Ozs7O0lBQzVGLDBCQUE4Qjs7Ozs7O0FBcUlwQyxtQ0FpQ0M7Ozs7OztJQTdCQyw2QkFBYTs7Ozs7SUFLYixnQ0FBZ0I7Ozs7Ozs7SUFPaEIsa0NBQWtDOzs7Ozs7O0lBT2xDLCtCQUFnQjs7Ozs7Ozs7O0lBU2hCLCtCQUE2Qjs7OztJQU83QixNQUFPLG1CQUFLLE1BQU0sRUFBQTtJQUNsQixPQUFRLG1CQUFLLE9BQU8sRUFBQTs7Ozs7SUFJcEIsT0FBUSxPQUFPO0lBQ2YsWUFBYSxXQUFXO0lBQ3hCLGFBQWMsWUFBWTtJQUMxQixXQUFZLFdBQVc7Ozs7QUFHekIsTUFBTSxLQUFPLHVCQUF1QixHQUFHLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyQ29udGVudENoZWNrZWQsXG4gIEFmdGVyQ29udGVudEluaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIERpcmVjdGl2ZSxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBQTEFURk9STV9JRCxcbiAgUXVlcnlMaXN0LFxuICBUZW1wbGF0ZVJlZixcbiAgSG9zdExpc3RlbmVyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtpc1BsYXRmb3JtQnJvd3Nlcn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHtOZ2JDYXJvdXNlbENvbmZpZ30gZnJvbSAnLi9jYXJvdXNlbC1jb25maWcnO1xuXG5pbXBvcnQge1N1YmplY3QsIHRpbWVyLCBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE5FVkVSfSBmcm9tICdyeGpzJztcbmltcG9ydCB7c3RhcnRXaXRoLCBtYXAsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCBkaXN0aW5jdFVudGlsQ2hhbmdlZH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5sZXQgbmV4dElkID0gMDtcblxuLyoqXG4gKiBBIGRpcmVjdGl2ZSB0aGF0IHdyYXBzIHRoZSBpbmRpdmlkdWFsIGNhcm91c2VsIHNsaWRlLlxuICovXG5ARGlyZWN0aXZlKHtzZWxlY3RvcjogJ25nLXRlbXBsYXRlW25nYlNsaWRlXSd9KVxuZXhwb3J0IGNsYXNzIE5nYlNsaWRlIHtcbiAgLyoqXG4gICAqIFNsaWRlIGlkIHRoYXQgbXVzdCBiZSB1bmlxdWUgZm9yIHRoZSBlbnRpcmUgZG9jdW1lbnQuXG4gICAqXG4gICAqIElmIG5vdCBwcm92aWRlZCwgd2lsbCBiZSBnZW5lcmF0ZWQgaW4gdGhlIGBuZ2Itc2xpZGUteHhgIGZvcm1hdC5cbiAgICovXG4gIEBJbnB1dCgpIGlkID0gYG5nYi1zbGlkZS0ke25leHRJZCsrfWA7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0cGxSZWY6IFRlbXBsYXRlUmVmPGFueT4pIHt9XG59XG5cbi8qKlxuICogQ2Fyb3VzZWwgaXMgYSBjb21wb25lbnQgdG8gZWFzaWx5IGNyZWF0ZSBhbmQgY29udHJvbCBzbGlkZXNob3dzLlxuICpcbiAqIEFsbG93cyB0byBzZXQgaW50ZXJ2YWxzLCBjaGFuZ2UgdGhlIHdheSB1c2VyIGludGVyYWN0cyB3aXRoIHRoZSBzbGlkZXMgYW5kIHByb3ZpZGVzIGEgcHJvZ3JhbW1hdGljIEFQSS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmdiLWNhcm91c2VsJyxcbiAgZXhwb3J0QXM6ICduZ2JDYXJvdXNlbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7XG4gICAgJ2NsYXNzJzogJ2Nhcm91c2VsIHNsaWRlJyxcbiAgICAnW3N0eWxlLmRpc3BsYXldJzogJ1wiYmxvY2tcIicsXG4gICAgJ3RhYkluZGV4JzogJzAnLFxuICAgICcoa2V5ZG93bi5hcnJvd0xlZnQpJzogJ2tleWJvYXJkICYmIHByZXYoTmdiU2xpZGVFdmVudFNvdXJjZS5BUlJPV19MRUZUKScsXG4gICAgJyhrZXlkb3duLmFycm93UmlnaHQpJzogJ2tleWJvYXJkICYmIG5leHQoTmdiU2xpZGVFdmVudFNvdXJjZS5BUlJPV19SSUdIVCknXG4gIH0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPG9sIGNsYXNzPVwiY2Fyb3VzZWwtaW5kaWNhdG9yc1wiICpuZ0lmPVwic2hvd05hdmlnYXRpb25JbmRpY2F0b3JzXCI+XG4gICAgICA8bGkgKm5nRm9yPVwibGV0IHNsaWRlIG9mIHNsaWRlc1wiIFtpZF09XCJzbGlkZS5pZFwiIFtjbGFzcy5hY3RpdmVdPVwic2xpZGUuaWQgPT09IGFjdGl2ZUlkXCJcbiAgICAgICAgICAoY2xpY2spPVwic2VsZWN0KHNsaWRlLmlkLCBOZ2JTbGlkZUV2ZW50U291cmNlLklORElDQVRPUilcIj48L2xpPlxuICAgIDwvb2w+XG4gICAgPGRpdiBjbGFzcz1cImNhcm91c2VsLWlubmVyXCI+XG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBzbGlkZSBvZiBzbGlkZXNcIiBjbGFzcz1cImNhcm91c2VsLWl0ZW1cIiBbY2xhc3MuYWN0aXZlXT1cInNsaWRlLmlkID09PSBhY3RpdmVJZFwiPlxuICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwic2xpZGUudHBsUmVmXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxhIGNsYXNzPVwiY2Fyb3VzZWwtY29udHJvbC1wcmV2XCIgcm9sZT1cImJ1dHRvblwiIChjbGljayk9XCJwcmV2KE5nYlNsaWRlRXZlbnRTb3VyY2UuQVJST1dfTEVGVClcIiAqbmdJZj1cInNob3dOYXZpZ2F0aW9uQXJyb3dzXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImNhcm91c2VsLWNvbnRyb2wtcHJldi1pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCIgaTE4bj1cIkBAbmdiLmNhcm91c2VsLnByZXZpb3VzXCI+UHJldmlvdXM8L3NwYW4+XG4gICAgPC9hPlxuICAgIDxhIGNsYXNzPVwiY2Fyb3VzZWwtY29udHJvbC1uZXh0XCIgcm9sZT1cImJ1dHRvblwiIChjbGljayk9XCJuZXh0KE5nYlNsaWRlRXZlbnRTb3VyY2UuQVJST1dfUklHSFQpXCIgKm5nSWY9XCJzaG93TmF2aWdhdGlvbkFycm93c1wiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjYXJvdXNlbC1jb250cm9sLW5leHQtaWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiIGkxOG49XCJAQG5nYi5jYXJvdXNlbC5uZXh0XCI+TmV4dDwvc3Bhbj5cbiAgICA8L2E+XG4gIGBcbn0pXG5leHBvcnQgY2xhc3MgTmdiQ2Fyb3VzZWwgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRDaGVja2VkLFxuICAgIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG4gIEBDb250ZW50Q2hpbGRyZW4oTmdiU2xpZGUpIHNsaWRlczogUXVlcnlMaXN0PE5nYlNsaWRlPjtcblxuICBwdWJsaWMgTmdiU2xpZGVFdmVudFNvdXJjZSA9IE5nYlNsaWRlRXZlbnRTb3VyY2U7XG5cbiAgcHJpdmF0ZSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIF9pbnRlcnZhbCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KDApO1xuICBwcml2YXRlIF9tb3VzZUhvdmVyJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICBwcml2YXRlIF9wYXVzZU9uSG92ZXIkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gIHByaXZhdGUgX3BhdXNlJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICBwcml2YXRlIF93cmFwJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gIC8qKlxuICAgKiBUaGUgc2xpZGUgaWQgdGhhdCBzaG91bGQgYmUgZGlzcGxheWVkICoqaW5pdGlhbGx5KiouXG4gICAqXG4gICAqIEZvciBzdWJzZXF1ZW50IGludGVyYWN0aW9ucyB1c2UgbWV0aG9kcyBgc2VsZWN0KClgLCBgbmV4dCgpYCwgZXRjLiBhbmQgdGhlIGAoc2xpZGUpYCBvdXRwdXQuXG4gICAqL1xuICBASW5wdXQoKSBhY3RpdmVJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaW1lIGluIG1pbGxpc2Vjb25kcyBiZWZvcmUgdGhlIG5leHQgc2xpZGUgaXMgc2hvd24uXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgaW50ZXJ2YWwodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2ludGVydmFsJC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIGdldCBpbnRlcnZhbCgpIHsgcmV0dXJuIHRoaXMuX2ludGVydmFsJC52YWx1ZTsgfVxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHdpbGwgJ3dyYXAnIHRoZSBjYXJvdXNlbCBieSBzd2l0Y2hpbmcgZnJvbSB0aGUgbGFzdCBzbGlkZSBiYWNrIHRvIHRoZSBmaXJzdC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCB3cmFwKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fd3JhcCQubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBnZXQgd3JhcCgpIHsgcmV0dXJuIHRoaXMuX3dyYXAkLnZhbHVlOyB9XG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgYWxsb3dzIHRvIGludGVyYWN0IHdpdGggY2Fyb3VzZWwgdXNpbmcga2V5Ym9hcmQgJ2Fycm93IGxlZnQnIGFuZCAnYXJyb3cgcmlnaHQnLlxuICAgKi9cbiAgQElucHV0KCkga2V5Ym9hcmQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgd2lsbCBwYXVzZSBzbGlkZSBzd2l0Y2hpbmcgd2hlbiBtb3VzZSBjdXJzb3IgaG92ZXJzIHRoZSBzbGlkZS5cbiAgICpcbiAgICogQHNpbmNlIDIuMi4wXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgcGF1c2VPbkhvdmVyKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fcGF1c2VPbkhvdmVyJC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIGdldCBwYXVzZU9uSG92ZXIoKSB7IHJldHVybiB0aGlzLl9wYXVzZU9uSG92ZXIkLnZhbHVlOyB9XG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgJ3ByZXZpb3VzJyBhbmQgJ25leHQnIG5hdmlnYXRpb24gYXJyb3dzIHdpbGwgYmUgdmlzaWJsZSBvbiB0aGUgc2xpZGUuXG4gICAqXG4gICAqIEBzaW5jZSAyLjIuMFxuICAgKi9cbiAgQElucHV0KCkgc2hvd05hdmlnYXRpb25BcnJvd3M6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgbmF2aWdhdGlvbiBpbmRpY2F0b3JzIGF0IHRoZSBib3R0b20gb2YgdGhlIHNsaWRlIHdpbGwgYmUgdmlzaWJsZS5cbiAgICpcbiAgICogQHNpbmNlIDIuMi4wXG4gICAqL1xuICBASW5wdXQoKSBzaG93TmF2aWdhdGlvbkluZGljYXRvcnM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEFuIGV2ZW50IGVtaXR0ZWQgcmlnaHQgYWZ0ZXIgdGhlIHNsaWRlIHRyYW5zaXRpb24gaXMgY29tcGxldGVkLlxuICAgKlxuICAgKiBTZWUgW2BOZ2JTbGlkZUV2ZW50YF0oIy9jb21wb25lbnRzL2Nhcm91c2VsL2FwaSNOZ2JTbGlkZUV2ZW50KSBmb3IgcGF5bG9hZCBkZXRhaWxzLlxuICAgKi9cbiAgQE91dHB1dCgpIHNsaWRlID0gbmV3IEV2ZW50RW1pdHRlcjxOZ2JTbGlkZUV2ZW50PigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgY29uZmlnOiBOZ2JDYXJvdXNlbENvbmZpZywgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSBfcGxhdGZvcm1JZCwgcHJpdmF0ZSBfbmdab25lOiBOZ1pvbmUsXG4gICAgICBwcml2YXRlIF9jZDogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICB0aGlzLmludGVydmFsID0gY29uZmlnLmludGVydmFsO1xuICAgIHRoaXMud3JhcCA9IGNvbmZpZy53cmFwO1xuICAgIHRoaXMua2V5Ym9hcmQgPSBjb25maWcua2V5Ym9hcmQ7XG4gICAgdGhpcy5wYXVzZU9uSG92ZXIgPSBjb25maWcucGF1c2VPbkhvdmVyO1xuICAgIHRoaXMuc2hvd05hdmlnYXRpb25BcnJvd3MgPSBjb25maWcuc2hvd05hdmlnYXRpb25BcnJvd3M7XG4gICAgdGhpcy5zaG93TmF2aWdhdGlvbkluZGljYXRvcnMgPSBjb25maWcuc2hvd05hdmlnYXRpb25JbmRpY2F0b3JzO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2VlbnRlcicpXG4gIG1vdXNlRW50ZXIoKSB7XG4gICAgdGhpcy5fbW91c2VIb3ZlciQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlbGVhdmUnKVxuICBtb3VzZUxlYXZlKCkge1xuICAgIHRoaXMuX21vdXNlSG92ZXIkLm5leHQoZmFsc2UpO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIC8vIHNldEludGVydmFsKCkgZG9lc24ndCBwbGF5IHdlbGwgd2l0aCBTU1IgYW5kIHByb3RyYWN0b3IsXG4gICAgLy8gc28gd2Ugc2hvdWxkIHJ1biBpdCBpbiB0aGUgYnJvd3NlciBhbmQgb3V0c2lkZSBBbmd1bGFyXG4gICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMuX3BsYXRmb3JtSWQpKSB7XG4gICAgICB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNOZXh0U2xpZGUkID0gY29tYmluZUxhdGVzdChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNsaWRlLnBpcGUobWFwKHNsaWRlRXZlbnQgPT4gc2xpZGVFdmVudC5jdXJyZW50KSwgc3RhcnRXaXRoKHRoaXMuYWN0aXZlSWQpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl93cmFwJCwgdGhpcy5zbGlkZXMuY2hhbmdlcy5waXBlKHN0YXJ0V2l0aChudWxsKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcCgoW2N1cnJlbnRTbGlkZUlkLCB3cmFwXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNsaWRlQXJyID0gdGhpcy5zbGlkZXMudG9BcnJheSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTbGlkZUlkeCA9IHRoaXMuX2dldFNsaWRlSWR4QnlJZChjdXJyZW50U2xpZGVJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXAgPyBzbGlkZUFyci5sZW5ndGggPiAxIDogY3VycmVudFNsaWRlSWR4IDwgc2xpZGVBcnIubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuICAgICAgICBjb21iaW5lTGF0ZXN0KHRoaXMuX3BhdXNlJCwgdGhpcy5fcGF1c2VPbkhvdmVyJCwgdGhpcy5fbW91c2VIb3ZlciQsIHRoaXMuX2ludGVydmFsJCwgaGFzTmV4dFNsaWRlJClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgoW3BhdXNlLCBwYXVzZU9uSG92ZXIsIG1vdXNlSG92ZXIsIGludGVydmFsLCBoYXNOZXh0U2xpZGVdKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgKChwYXVzZSB8fCAocGF1c2VPbkhvdmVyICYmIG1vdXNlSG92ZXIpIHx8ICFoYXNOZXh0U2xpZGUpID8gMCA6IGludGVydmFsKSksXG5cbiAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCBzd2l0Y2hNYXAoaW50ZXJ2YWwgPT4gaW50ZXJ2YWwgPiAwID8gdGltZXIoaW50ZXJ2YWwsIGludGVydmFsKSA6IE5FVkVSKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHRoaXMubmV4dChOZ2JTbGlkZUV2ZW50U291cmNlLlRJTUVSKSkpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5zbGlkZXMuY2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKSk7XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudENoZWNrZWQoKSB7XG4gICAgbGV0IGFjdGl2ZVNsaWRlID0gdGhpcy5fZ2V0U2xpZGVCeUlkKHRoaXMuYWN0aXZlSWQpO1xuICAgIHRoaXMuYWN0aXZlSWQgPSBhY3RpdmVTbGlkZSA/IGFjdGl2ZVNsaWRlLmlkIDogKHRoaXMuc2xpZGVzLmxlbmd0aCA/IHRoaXMuc2xpZGVzLmZpcnN0LmlkIDogbnVsbCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHsgdGhpcy5fZGVzdHJveSQubmV4dCgpOyB9XG5cbiAgLyoqXG4gICAqIE5hdmlnYXRlcyB0byBhIHNsaWRlIHdpdGggdGhlIHNwZWNpZmllZCBpZGVudGlmaWVyLlxuICAgKi9cbiAgc2VsZWN0KHNsaWRlSWQ6IHN0cmluZywgc291cmNlPzogTmdiU2xpZGVFdmVudFNvdXJjZSkge1xuICAgIHRoaXMuX2N5Y2xlVG9TZWxlY3RlZChzbGlkZUlkLCB0aGlzLl9nZXRTbGlkZUV2ZW50RGlyZWN0aW9uKHRoaXMuYWN0aXZlSWQsIHNsaWRlSWQpLCBzb3VyY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIE5hdmlnYXRlcyB0byB0aGUgcHJldmlvdXMgc2xpZGUuXG4gICAqL1xuICBwcmV2KHNvdXJjZT86IE5nYlNsaWRlRXZlbnRTb3VyY2UpIHtcbiAgICB0aGlzLl9jeWNsZVRvU2VsZWN0ZWQodGhpcy5fZ2V0UHJldlNsaWRlKHRoaXMuYWN0aXZlSWQpLCBOZ2JTbGlkZUV2ZW50RGlyZWN0aW9uLlJJR0hULCBzb3VyY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIE5hdmlnYXRlcyB0byB0aGUgbmV4dCBzbGlkZS5cbiAgICovXG4gIG5leHQoc291cmNlPzogTmdiU2xpZGVFdmVudFNvdXJjZSkge1xuICAgIHRoaXMuX2N5Y2xlVG9TZWxlY3RlZCh0aGlzLl9nZXROZXh0U2xpZGUodGhpcy5hY3RpdmVJZCksIE5nYlNsaWRlRXZlbnREaXJlY3Rpb24uTEVGVCwgc291cmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXVzZXMgY3ljbGluZyB0aHJvdWdoIHRoZSBzbGlkZXMuXG4gICAqL1xuICBwYXVzZSgpIHsgdGhpcy5fcGF1c2UkLm5leHQodHJ1ZSk7IH1cblxuICAvKipcbiAgICogUmVzdGFydHMgY3ljbGluZyB0aHJvdWdoIHRoZSBzbGlkZXMgZnJvbSBsZWZ0IHRvIHJpZ2h0LlxuICAgKi9cbiAgY3ljbGUoKSB7IHRoaXMuX3BhdXNlJC5uZXh0KGZhbHNlKTsgfVxuXG4gIHByaXZhdGUgX2N5Y2xlVG9TZWxlY3RlZChzbGlkZUlkeDogc3RyaW5nLCBkaXJlY3Rpb246IE5nYlNsaWRlRXZlbnREaXJlY3Rpb24sIHNvdXJjZT86IE5nYlNsaWRlRXZlbnRTb3VyY2UpIHtcbiAgICBsZXQgc2VsZWN0ZWRTbGlkZSA9IHRoaXMuX2dldFNsaWRlQnlJZChzbGlkZUlkeCk7XG4gICAgaWYgKHNlbGVjdGVkU2xpZGUgJiYgc2VsZWN0ZWRTbGlkZS5pZCAhPT0gdGhpcy5hY3RpdmVJZCkge1xuICAgICAgdGhpcy5zbGlkZS5lbWl0KFxuICAgICAgICAgIHtwcmV2OiB0aGlzLmFjdGl2ZUlkLCBjdXJyZW50OiBzZWxlY3RlZFNsaWRlLmlkLCBkaXJlY3Rpb246IGRpcmVjdGlvbiwgcGF1c2VkOiB0aGlzLl9wYXVzZSQudmFsdWUsIHNvdXJjZX0pO1xuICAgICAgdGhpcy5hY3RpdmVJZCA9IHNlbGVjdGVkU2xpZGUuaWQ7XG4gICAgfVxuXG4gICAgLy8gd2UgZ2V0IGhlcmUgYWZ0ZXIgdGhlIGludGVydmFsIGZpcmVzIG9yIGFueSBleHRlcm5hbCBBUEkgY2FsbCBsaWtlIG5leHQoKSwgcHJldigpIG9yIHNlbGVjdCgpXG4gICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIF9nZXRTbGlkZUV2ZW50RGlyZWN0aW9uKGN1cnJlbnRBY3RpdmVTbGlkZUlkOiBzdHJpbmcsIG5leHRBY3RpdmVTbGlkZUlkOiBzdHJpbmcpOiBOZ2JTbGlkZUV2ZW50RGlyZWN0aW9uIHtcbiAgICBjb25zdCBjdXJyZW50QWN0aXZlU2xpZGVJZHggPSB0aGlzLl9nZXRTbGlkZUlkeEJ5SWQoY3VycmVudEFjdGl2ZVNsaWRlSWQpO1xuICAgIGNvbnN0IG5leHRBY3RpdmVTbGlkZUlkeCA9IHRoaXMuX2dldFNsaWRlSWR4QnlJZChuZXh0QWN0aXZlU2xpZGVJZCk7XG5cbiAgICByZXR1cm4gY3VycmVudEFjdGl2ZVNsaWRlSWR4ID4gbmV4dEFjdGl2ZVNsaWRlSWR4ID8gTmdiU2xpZGVFdmVudERpcmVjdGlvbi5SSUdIVCA6IE5nYlNsaWRlRXZlbnREaXJlY3Rpb24uTEVGVDtcbiAgfVxuXG4gIHByaXZhdGUgX2dldFNsaWRlQnlJZChzbGlkZUlkOiBzdHJpbmcpOiBOZ2JTbGlkZSB7IHJldHVybiB0aGlzLnNsaWRlcy5maW5kKHNsaWRlID0+IHNsaWRlLmlkID09PSBzbGlkZUlkKTsgfVxuXG4gIHByaXZhdGUgX2dldFNsaWRlSWR4QnlJZChzbGlkZUlkOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnNsaWRlcy50b0FycmF5KCkuaW5kZXhPZih0aGlzLl9nZXRTbGlkZUJ5SWQoc2xpZGVJZCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0TmV4dFNsaWRlKGN1cnJlbnRTbGlkZUlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHNsaWRlQXJyID0gdGhpcy5zbGlkZXMudG9BcnJheSgpO1xuICAgIGNvbnN0IGN1cnJlbnRTbGlkZUlkeCA9IHRoaXMuX2dldFNsaWRlSWR4QnlJZChjdXJyZW50U2xpZGVJZCk7XG4gICAgY29uc3QgaXNMYXN0U2xpZGUgPSBjdXJyZW50U2xpZGVJZHggPT09IHNsaWRlQXJyLmxlbmd0aCAtIDE7XG5cbiAgICByZXR1cm4gaXNMYXN0U2xpZGUgPyAodGhpcy53cmFwID8gc2xpZGVBcnJbMF0uaWQgOiBzbGlkZUFycltzbGlkZUFyci5sZW5ndGggLSAxXS5pZCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgIHNsaWRlQXJyW2N1cnJlbnRTbGlkZUlkeCArIDFdLmlkO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0UHJldlNsaWRlKGN1cnJlbnRTbGlkZUlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHNsaWRlQXJyID0gdGhpcy5zbGlkZXMudG9BcnJheSgpO1xuICAgIGNvbnN0IGN1cnJlbnRTbGlkZUlkeCA9IHRoaXMuX2dldFNsaWRlSWR4QnlJZChjdXJyZW50U2xpZGVJZCk7XG4gICAgY29uc3QgaXNGaXJzdFNsaWRlID0gY3VycmVudFNsaWRlSWR4ID09PSAwO1xuXG4gICAgcmV0dXJuIGlzRmlyc3RTbGlkZSA/ICh0aGlzLndyYXAgPyBzbGlkZUFycltzbGlkZUFyci5sZW5ndGggLSAxXS5pZCA6IHNsaWRlQXJyWzBdLmlkKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNsaWRlQXJyW2N1cnJlbnRTbGlkZUlkeCAtIDFdLmlkO1xuICB9XG59XG5cbi8qKlxuICogQSBzbGlkZSBjaGFuZ2UgZXZlbnQgZW1pdHRlZCByaWdodCBhZnRlciB0aGUgc2xpZGUgdHJhbnNpdGlvbiBpcyBjb21wbGV0ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmdiU2xpZGVFdmVudCB7XG4gIC8qKlxuICAgKiBUaGUgcHJldmlvdXMgc2xpZGUgaWQuXG4gICAqL1xuICBwcmV2OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IHNsaWRlIGlkLlxuICAgKi9cbiAgY3VycmVudDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc2xpZGUgZXZlbnQgZGlyZWN0aW9uLlxuICAgKlxuICAgKiBQb3NzaWJsZSB2YWx1ZXMgYXJlIGAnbGVmdCcgfCAncmlnaHQnYC5cbiAgICovXG4gIGRpcmVjdGlvbjogTmdiU2xpZGVFdmVudERpcmVjdGlvbjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgcGF1c2UoKSBtZXRob2Qgd2FzIGNhbGxlZCAoYW5kIG5vIGN5Y2xlKCkgY2FsbCB3YXMgZG9uZSBhZnRlcndhcmRzKS5cbiAgICpcbiAgICogQHNpbmNlIDUuMS4wXG4gICAqL1xuICBwYXVzZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNvdXJjZSB0cmlnZ2VyaW5nIHRoZSBzbGlkZSBjaGFuZ2UgZXZlbnQuXG4gICAqXG4gICAqIFBvc3NpYmxlIHZhbHVlcyBhcmUgYCd0aW1lcicgfCAnYXJyb3dMZWZ0JyB8ICdhcnJvd1JpZ2h0JyB8ICdpbmRpY2F0b3InYFxuICAgKlxuICAgKiBAc2luY2UgNS4xLjBcbiAgICovXG4gIHNvdXJjZT86IE5nYlNsaWRlRXZlbnRTb3VyY2U7XG59XG5cbi8qKlxuICogRGVmaW5lcyB0aGUgY2Fyb3VzZWwgc2xpZGUgdHJhbnNpdGlvbiBkaXJlY3Rpb24uXG4gKi9cbmV4cG9ydCBlbnVtIE5nYlNsaWRlRXZlbnREaXJlY3Rpb24ge1xuICBMRUZUID0gPGFueT4nbGVmdCcsXG4gIFJJR0hUID0gPGFueT4ncmlnaHQnXG59XG5cbmV4cG9ydCBlbnVtIE5nYlNsaWRlRXZlbnRTb3VyY2Uge1xuICBUSU1FUiA9ICd0aW1lcicsXG4gIEFSUk9XX0xFRlQgPSAnYXJyb3dMZWZ0JyxcbiAgQVJST1dfUklHSFQgPSAnYXJyb3dSaWdodCcsXG4gIElORElDQVRPUiA9ICdpbmRpY2F0b3InXG59XG5cbmV4cG9ydCBjb25zdCBOR0JfQ0FST1VTRUxfRElSRUNUSVZFUyA9IFtOZ2JDYXJvdXNlbCwgTmdiU2xpZGVdO1xuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/carousel/carousel.module.js b/dist/sunbird-ui-components/esm5/carousel/carousel.module.js new file mode 100644 index 0000000..68294c4 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/carousel/carousel.module.js @@ -0,0 +1,19 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { NGB_CAROUSEL_DIRECTIVES } from './carousel'; +export { NgbCarousel, NgbSlide, NgbSlideEventDirection, NgbSlideEventSource } from './carousel'; +export { NgbCarouselConfig } from './carousel-config'; +var NgbCarouselModule = /** @class */ (function () { + function NgbCarouselModule() { + } + NgbCarouselModule.decorators = [ + { type: NgModule, args: [{ declarations: NGB_CAROUSEL_DIRECTIVES, exports: NGB_CAROUSEL_DIRECTIVES, imports: [CommonModule] },] } + ]; + return NgbCarouselModule; +}()); +export { NgbCarouselModule }; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwubW9kdWxlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY2Fyb3VzZWwvY2Fyb3VzZWwubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUU3QyxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFFbkQsT0FBTyxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQWlCLHNCQUFzQixFQUFFLG1CQUFtQixFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQzdHLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRXBEO0lBQUE7SUFFQSxDQUFDOztnQkFGQSxRQUFRLFNBQUMsRUFBQyxZQUFZLEVBQUUsdUJBQXVCLEVBQUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFDOztJQUU1Ryx3QkFBQztDQUFBLEFBRkQsSUFFQztTQURZLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmltcG9ydCB7TkdCX0NBUk9VU0VMX0RJUkVDVElWRVN9IGZyb20gJy4vY2Fyb3VzZWwnO1xuXG5leHBvcnQge05nYkNhcm91c2VsLCBOZ2JTbGlkZSwgTmdiU2xpZGVFdmVudCwgTmdiU2xpZGVFdmVudERpcmVjdGlvbiwgTmdiU2xpZGVFdmVudFNvdXJjZX0gZnJvbSAnLi9jYXJvdXNlbCc7XG5leHBvcnQge05nYkNhcm91c2VsQ29uZmlnfSBmcm9tICcuL2Nhcm91c2VsLWNvbmZpZyc7XG5cbkBOZ01vZHVsZSh7ZGVjbGFyYXRpb25zOiBOR0JfQ0FST1VTRUxfRElSRUNUSVZFUywgZXhwb3J0czogTkdCX0NBUk9VU0VMX0RJUkVDVElWRVMsIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdfSlcbmV4cG9ydCBjbGFzcyBOZ2JDYXJvdXNlbE1vZHVsZSB7XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/collapse/collapse.js b/dist/sunbird-ui-components/esm5/collapse/collapse.js new file mode 100644 index 0000000..2816572 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/collapse/collapse.js @@ -0,0 +1,36 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Directive, Input } from '@angular/core'; +/** + * A directive to provide a simple way of hiding and showing elements on the page. + */ +var NgbCollapse = /** @class */ (function () { + function NgbCollapse() { + /** + * If `true`, will collapse the element or show it otherwise. + */ + this.collapsed = false; + } + NgbCollapse.decorators = [ + { type: Directive, args: [{ + selector: '[ngbCollapse]', + exportAs: 'ngbCollapse', + host: { '[class.collapse]': 'true', '[class.show]': '!collapsed' } + },] } + ]; + NgbCollapse.propDecorators = { + collapsed: [{ type: Input, args: ['ngbCollapse',] }] + }; + return NgbCollapse; +}()); +export { NgbCollapse }; +if (false) { + /** + * If `true`, will collapse the element or show it otherwise. + * @type {?} + */ + NgbCollapse.prototype.collapsed; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGFwc2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb2xsYXBzZS9jb2xsYXBzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUMsTUFBTSxlQUFlLENBQUM7Ozs7QUFLL0M7SUFBQTs7OztRQVN3QixjQUFTLEdBQUcsS0FBSyxDQUFDO0lBQzFDLENBQUM7O2dCQVZBLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsZUFBZTtvQkFDekIsUUFBUSxFQUFFLGFBQWE7b0JBQ3ZCLElBQUksRUFBRSxFQUFDLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFDO2lCQUNqRTs7OzRCQUtFLEtBQUssU0FBQyxhQUFhOztJQUN0QixrQkFBQztDQUFBLEFBVkQsSUFVQztTQUxZLFdBQVc7Ozs7OztJQUl0QixnQ0FBd0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RpcmVjdGl2ZSwgSW5wdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIEEgZGlyZWN0aXZlIHRvIHByb3ZpZGUgYSBzaW1wbGUgd2F5IG9mIGhpZGluZyBhbmQgc2hvd2luZyBlbGVtZW50cyBvbiB0aGUgcGFnZS5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW25nYkNvbGxhcHNlXScsXG4gIGV4cG9ydEFzOiAnbmdiQ29sbGFwc2UnLFxuICBob3N0OiB7J1tjbGFzcy5jb2xsYXBzZV0nOiAndHJ1ZScsICdbY2xhc3Muc2hvd10nOiAnIWNvbGxhcHNlZCd9XG59KVxuZXhwb3J0IGNsYXNzIE5nYkNvbGxhcHNlIHtcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgd2lsbCBjb2xsYXBzZSB0aGUgZWxlbWVudCBvciBzaG93IGl0IG90aGVyd2lzZS5cbiAgICovXG4gIEBJbnB1dCgnbmdiQ29sbGFwc2UnKSBjb2xsYXBzZWQgPSBmYWxzZTtcbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/collapse/collapse.module.js b/dist/sunbird-ui-components/esm5/collapse/collapse.module.js new file mode 100644 index 0000000..4fc91b9 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/collapse/collapse.module.js @@ -0,0 +1,17 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgModule } from '@angular/core'; +import { NgbCollapse } from './collapse'; +export { NgbCollapse } from './collapse'; +var NgbCollapseModule = /** @class */ (function () { + function NgbCollapseModule() { + } + NgbCollapseModule.decorators = [ + { type: NgModule, args: [{ declarations: [NgbCollapse], exports: [NgbCollapse] },] } + ]; + return NgbCollapseModule; +}()); +export { NgbCollapseModule }; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGFwc2UubW9kdWxlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY29sbGFwc2UvY29sbGFwc2UubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFFdkMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUV2QztJQUFBO0lBRUEsQ0FBQzs7Z0JBRkEsUUFBUSxTQUFDLEVBQUMsWUFBWSxFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUM7O0lBRS9ELHdCQUFDO0NBQUEsQUFGRCxJQUVDO1NBRFksaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge05nYkNvbGxhcHNlfSBmcm9tICcuL2NvbGxhcHNlJztcblxuZXhwb3J0IHtOZ2JDb2xsYXBzZX0gZnJvbSAnLi9jb2xsYXBzZSc7XG5cbkBOZ01vZHVsZSh7ZGVjbGFyYXRpb25zOiBbTmdiQ29sbGFwc2VdLCBleHBvcnRzOiBbTmdiQ29sbGFwc2VdfSlcbmV4cG9ydCBjbGFzcyBOZ2JDb2xsYXBzZU1vZHVsZSB7XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/datepicker/adapters/ngb-date-adapter.js b/dist/sunbird-ui-components/esm5/datepicker/adapters/ngb-date-adapter.js new file mode 100644 index 0000000..34e9451 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/datepicker/adapters/ngb-date-adapter.js @@ -0,0 +1,102 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import * as tslib_1 from "tslib"; +import { Injectable } from '@angular/core'; +import { isInteger } from '../../util/util'; +import * as i0 from "@angular/core"; +/** + * @return {?} + */ +export function NGB_DATEPICKER_DATE_ADAPTER_FACTORY() { + return new NgbDateStructAdapter(); +} +/** + * An abstract service that does the conversion between the internal datepicker `NgbDateStruct` model and + * any provided user date model `D`, ex. a string, a native date, etc. + * + * The adapter is used **only** for conversion when binding datepicker to a form control, + * ex. `[(ngModel)]="userDateModel"`. Here `userDateModel` can be of any type. + * + * The default datepicker implementation assumes we use `NgbDateStruct` as a user model. + * + * See the [date format overview](#/components/datepicker/overview#date-model) for more details + * and the [custom adapter demo](#/components/datepicker/examples#adapter) for an example. + * @abstract + * @template D + */ +var NgbDateAdapter = /** @class */ (function () { + function NgbDateAdapter() { + } + NgbDateAdapter.decorators = [ + { type: Injectable, args: [{ providedIn: 'root', useFactory: NGB_DATEPICKER_DATE_ADAPTER_FACTORY },] } + ]; + /** @nocollapse */ NgbDateAdapter.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: NGB_DATEPICKER_DATE_ADAPTER_FACTORY, token: NgbDateAdapter, providedIn: "root" }); + return NgbDateAdapter; +}()); +export { NgbDateAdapter }; +if (false) { + /** + * Converts a user-model date of type `D` to an `NgbDateStruct` for internal use. + * @abstract + * @param {?} value + * @return {?} + */ + NgbDateAdapter.prototype.fromModel = function (value) { }; + /** + * Converts an internal `NgbDateStruct` date to a user-model date of type `D`. + * @abstract + * @param {?} date + * @return {?} + */ + NgbDateAdapter.prototype.toModel = function (date) { }; +} +var NgbDateStructAdapter = /** @class */ (function (_super) { + tslib_1.__extends(NgbDateStructAdapter, _super); + function NgbDateStructAdapter() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * Converts a NgbDateStruct value into NgbDateStruct value + */ + /** + * Converts a NgbDateStruct value into NgbDateStruct value + * @param {?} date + * @return {?} + */ + NgbDateStructAdapter.prototype.fromModel = /** + * Converts a NgbDateStruct value into NgbDateStruct value + * @param {?} date + * @return {?} + */ + function (date) { + return (date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day)) ? + { year: date.year, month: date.month, day: date.day } : + null; + }; + /** + * Converts a NgbDateStruct value into NgbDateStruct value + */ + /** + * Converts a NgbDateStruct value into NgbDateStruct value + * @param {?} date + * @return {?} + */ + NgbDateStructAdapter.prototype.toModel = /** + * Converts a NgbDateStruct value into NgbDateStruct value + * @param {?} date + * @return {?} + */ + function (date) { + return (date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day)) ? + { year: date.year, month: date.month, day: date.day } : + null; + }; + NgbDateStructAdapter.decorators = [ + { type: Injectable } + ]; + return NgbDateStructAdapter; +}(NgbDateAdapter)); +export { NgbDateStructAdapter }; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdiLWRhdGUtYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImRhdGVwaWNrZXIvYWRhcHRlcnMvbmdiLWRhdGUtYWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFekMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGlCQUFpQixDQUFDOzs7OztBQUUxQyxNQUFNLFVBQVUsbUNBQW1DO0lBQ2pELE9BQU8sSUFBSSxvQkFBb0IsRUFBRSxDQUFDO0FBQ3BDLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQWNEO0lBQUE7S0FXQzs7Z0JBWEEsVUFBVSxTQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsbUNBQW1DLEVBQUM7Ozt5QkFwQmpGO0NBK0JDLEFBWEQsSUFXQztTQVZxQixjQUFjOzs7Ozs7OztJQUlsQywwREFBNEM7Ozs7Ozs7SUFLNUMsdURBQXlDOztBQUczQztJQUMwQyxnREFBNkI7SUFEdkU7O0lBbUJBLENBQUM7SUFqQkM7O09BRUc7Ozs7OztJQUNILHdDQUFTOzs7OztJQUFULFVBQVUsSUFBbUI7UUFDM0IsT0FBTyxDQUFDLElBQUksSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkYsRUFBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUM7WUFDckQsSUFBSSxDQUFDO0lBQ1gsQ0FBQztJQUVEOztPQUVHOzs7Ozs7SUFDSCxzQ0FBTzs7Ozs7SUFBUCxVQUFRLElBQW1CO1FBQ3pCLE9BQU8sQ0FBQyxJQUFJLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25GLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDO1lBQ3JELElBQUksQ0FBQztJQUNYLENBQUM7O2dCQWxCRixVQUFVOztJQW1CWCwyQkFBQztDQUFBLEFBbkJELENBQzBDLGNBQWMsR0FrQnZEO1NBbEJZLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge05nYkRhdGVTdHJ1Y3R9IGZyb20gJy4uL25nYi1kYXRlLXN0cnVjdCc7XG5pbXBvcnQge2lzSW50ZWdlcn0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcblxuZXhwb3J0IGZ1bmN0aW9uIE5HQl9EQVRFUElDS0VSX0RBVEVfQURBUFRFUl9GQUNUT1JZKCkge1xuICByZXR1cm4gbmV3IE5nYkRhdGVTdHJ1Y3RBZGFwdGVyKCk7XG59XG5cbi8qKlxuICogQW4gYWJzdHJhY3Qgc2VydmljZSB0aGF0IGRvZXMgdGhlIGNvbnZlcnNpb24gYmV0d2VlbiB0aGUgaW50ZXJuYWwgZGF0ZXBpY2tlciBgTmdiRGF0ZVN0cnVjdGAgbW9kZWwgYW5kXG4gKiBhbnkgcHJvdmlkZWQgdXNlciBkYXRlIG1vZGVsIGBEYCwgZXguIGEgc3RyaW5nLCBhIG5hdGl2ZSBkYXRlLCBldGMuXG4gKlxuICogVGhlIGFkYXB0ZXIgaXMgdXNlZCAqKm9ubHkqKiBmb3IgY29udmVyc2lvbiB3aGVuIGJpbmRpbmcgZGF0ZXBpY2tlciB0byBhIGZvcm0gY29udHJvbCxcbiAqIGV4LiBgWyhuZ01vZGVsKV09XCJ1c2VyRGF0ZU1vZGVsXCJgLiBIZXJlIGB1c2VyRGF0ZU1vZGVsYCBjYW4gYmUgb2YgYW55IHR5cGUuXG4gKlxuICogVGhlIGRlZmF1bHQgZGF0ZXBpY2tlciBpbXBsZW1lbnRhdGlvbiBhc3N1bWVzIHdlIHVzZSBgTmdiRGF0ZVN0cnVjdGAgYXMgYSB1c2VyIG1vZGVsLlxuICpcbiAqIFNlZSB0aGUgW2RhdGUgZm9ybWF0IG92ZXJ2aWV3XSgjL2NvbXBvbmVudHMvZGF0ZXBpY2tlci9vdmVydmlldyNkYXRlLW1vZGVsKSBmb3IgbW9yZSBkZXRhaWxzXG4gKiBhbmQgdGhlIFtjdXN0b20gYWRhcHRlciBkZW1vXSgjL2NvbXBvbmVudHMvZGF0ZXBpY2tlci9leGFtcGxlcyNhZGFwdGVyKSBmb3IgYW4gZXhhbXBsZS5cbiAqL1xuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290JywgdXNlRmFjdG9yeTogTkdCX0RBVEVQSUNLRVJfREFURV9BREFQVEVSX0ZBQ1RPUll9KVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE5nYkRhdGVBZGFwdGVyPEQ+IHtcbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgdXNlci1tb2RlbCBkYXRlIG9mIHR5cGUgYERgIHRvIGFuIGBOZ2JEYXRlU3RydWN0YCBmb3IgaW50ZXJuYWwgdXNlLlxuICAgKi9cbiAgYWJzdHJhY3QgZnJvbU1vZGVsKHZhbHVlOiBEKTogTmdiRGF0ZVN0cnVjdDtcblxuICAvKipcbiAgICogQ29udmVydHMgYW4gaW50ZXJuYWwgYE5nYkRhdGVTdHJ1Y3RgIGRhdGUgdG8gYSB1c2VyLW1vZGVsIGRhdGUgb2YgdHlwZSBgRGAuXG4gICAqL1xuICBhYnN0cmFjdCB0b01vZGVsKGRhdGU6IE5nYkRhdGVTdHJ1Y3QpOiBEO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTmdiRGF0ZVN0cnVjdEFkYXB0ZXIgZXh0ZW5kcyBOZ2JEYXRlQWRhcHRlcjxOZ2JEYXRlU3RydWN0PiB7XG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIE5nYkRhdGVTdHJ1Y3QgdmFsdWUgaW50byBOZ2JEYXRlU3RydWN0IHZhbHVlXG4gICAqL1xuICBmcm9tTW9kZWwoZGF0ZTogTmdiRGF0ZVN0cnVjdCk6IE5nYkRhdGVTdHJ1Y3Qge1xuICAgIHJldHVybiAoZGF0ZSAmJiBpc0ludGVnZXIoZGF0ZS55ZWFyKSAmJiBpc0ludGVnZXIoZGF0ZS5tb250aCkgJiYgaXNJbnRlZ2VyKGRhdGUuZGF5KSkgP1xuICAgICAgICB7eWVhcjogZGF0ZS55ZWFyLCBtb250aDogZGF0ZS5tb250aCwgZGF5OiBkYXRlLmRheX0gOlxuICAgICAgICBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgTmdiRGF0ZVN0cnVjdCB2YWx1ZSBpbnRvIE5nYkRhdGVTdHJ1Y3QgdmFsdWVcbiAgICovXG4gIHRvTW9kZWwoZGF0ZTogTmdiRGF0ZVN0cnVjdCk6IE5nYkRhdGVTdHJ1Y3Qge1xuICAgIHJldHVybiAoZGF0ZSAmJiBpc0ludGVnZXIoZGF0ZS55ZWFyKSAmJiBpc0ludGVnZXIoZGF0ZS5tb250aCkgJiYgaXNJbnRlZ2VyKGRhdGUuZGF5KSkgP1xuICAgICAgICB7eWVhcjogZGF0ZS55ZWFyLCBtb250aDogZGF0ZS5tb250aCwgZGF5OiBkYXRlLmRheX0gOlxuICAgICAgICBudWxsO1xuICB9XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/datepicker/adapters/ngb-date-native-adapter.js b/dist/sunbird-ui-components/esm5/datepicker/adapters/ngb-date-native-adapter.js new file mode 100644 index 0000000..ad111ed --- /dev/null +++ b/dist/sunbird-ui-components/esm5/datepicker/adapters/ngb-date-native-adapter.js @@ -0,0 +1,87 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import * as tslib_1 from "tslib"; +import { Injectable } from '@angular/core'; +import { NgbDateAdapter } from './ngb-date-adapter'; +import { isInteger } from '../../util/util'; +/** + * [`NgbDateAdapter`](#/components/datepicker/api#NgbDateAdapter) implementation that uses + * native javascript dates as a user date model. + */ +var NgbDateNativeAdapter = /** @class */ (function (_super) { + tslib_1.__extends(NgbDateNativeAdapter, _super); + function NgbDateNativeAdapter() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * Converts a native `Date` to a `NgbDateStruct`. + */ + /** + * Converts a native `Date` to a `NgbDateStruct`. + * @param {?} date + * @return {?} + */ + NgbDateNativeAdapter.prototype.fromModel = /** + * Converts a native `Date` to a `NgbDateStruct`. + * @param {?} date + * @return {?} + */ + function (date) { + return (date instanceof Date && !isNaN(date.getTime())) ? this._fromNativeDate(date) : null; + }; + /** + * Converts a `NgbDateStruct` to a native `Date`. + */ + /** + * Converts a `NgbDateStruct` to a native `Date`. + * @param {?} date + * @return {?} + */ + NgbDateNativeAdapter.prototype.toModel = /** + * Converts a `NgbDateStruct` to a native `Date`. + * @param {?} date + * @return {?} + */ + function (date) { + return date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day) ? this._toNativeDate(date) : + null; + }; + /** + * @protected + * @param {?} date + * @return {?} + */ + NgbDateNativeAdapter.prototype._fromNativeDate = /** + * @protected + * @param {?} date + * @return {?} + */ + function (date) { + return { year: date.getFullYear(), month: date.getMonth() + 1, day: date.getDate() }; + }; + /** + * @protected + * @param {?} date + * @return {?} + */ + NgbDateNativeAdapter.prototype._toNativeDate = /** + * @protected + * @param {?} date + * @return {?} + */ + function (date) { + /** @type {?} */ + var jsDate = new Date(date.year, date.month - 1, date.day, 12); + // avoid 30 -> 1930 conversion + jsDate.setFullYear(date.year); + return jsDate; + }; + NgbDateNativeAdapter.decorators = [ + { type: Injectable } + ]; + return NgbDateNativeAdapter; +}(NgbDateAdapter)); +export { NgbDateNativeAdapter }; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdiLWRhdGUtbmF0aXZlLWFkYXB0ZXIuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJkYXRlcGlja2VyL2FkYXB0ZXJzL25nYi1kYXRlLW5hdGl2ZS1hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFbEQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGlCQUFpQixDQUFDOzs7OztBQU0xQztJQUMwQyxnREFBb0I7SUFEOUQ7O0lBMkJBLENBQUM7SUF6QkM7O09BRUc7Ozs7OztJQUNILHdDQUFTOzs7OztJQUFULFVBQVUsSUFBVTtRQUNsQixPQUFPLENBQUMsSUFBSSxZQUFZLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDOUYsQ0FBQztJQUVEOztPQUVHOzs7Ozs7SUFDSCxzQ0FBTzs7Ozs7SUFBUCxVQUFRLElBQW1CO1FBQ3pCLE9BQU8sSUFBSSxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDMUIsSUFBSSxDQUFDO0lBQzdGLENBQUM7Ozs7OztJQUVTLDhDQUFlOzs7OztJQUF6QixVQUEwQixJQUFVO1FBQ2xDLE9BQU8sRUFBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUMsQ0FBQztJQUNyRixDQUFDOzs7Ozs7SUFFUyw0Q0FBYTs7Ozs7SUFBdkIsVUFBd0IsSUFBbUI7O1lBQ25DLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO1FBQ2hFLDhCQUE4QjtRQUM5QixNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDOztnQkExQkYsVUFBVTs7SUEyQlgsMkJBQUM7Q0FBQSxBQTNCRCxDQUMwQyxjQUFjLEdBMEJ2RDtTQTFCWSxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtOZ2JEYXRlQWRhcHRlcn0gZnJvbSAnLi9uZ2ItZGF0ZS1hZGFwdGVyJztcbmltcG9ydCB7TmdiRGF0ZVN0cnVjdH0gZnJvbSAnLi4vbmdiLWRhdGUtc3RydWN0JztcbmltcG9ydCB7aXNJbnRlZ2VyfSBmcm9tICcuLi8uLi91dGlsL3V0aWwnO1xuXG4vKipcbiAqIFtgTmdiRGF0ZUFkYXB0ZXJgXSgjL2NvbXBvbmVudHMvZGF0ZXBpY2tlci9hcGkjTmdiRGF0ZUFkYXB0ZXIpIGltcGxlbWVudGF0aW9uIHRoYXQgdXNlc1xuICogbmF0aXZlIGphdmFzY3JpcHQgZGF0ZXMgYXMgYSB1c2VyIGRhdGUgbW9kZWwuXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBOZ2JEYXRlTmF0aXZlQWRhcHRlciBleHRlbmRzIE5nYkRhdGVBZGFwdGVyPERhdGU+IHtcbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgbmF0aXZlIGBEYXRlYCB0byBhIGBOZ2JEYXRlU3RydWN0YC5cbiAgICovXG4gIGZyb21Nb2RlbChkYXRlOiBEYXRlKTogTmdiRGF0ZVN0cnVjdCB7XG4gICAgcmV0dXJuIChkYXRlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSA/IHRoaXMuX2Zyb21OYXRpdmVEYXRlKGRhdGUpIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIGBOZ2JEYXRlU3RydWN0YCB0byBhIG5hdGl2ZSBgRGF0ZWAuXG4gICAqL1xuICB0b01vZGVsKGRhdGU6IE5nYkRhdGVTdHJ1Y3QpOiBEYXRlIHtcbiAgICByZXR1cm4gZGF0ZSAmJiBpc0ludGVnZXIoZGF0ZS55ZWFyKSAmJiBpc0ludGVnZXIoZGF0ZS5tb250aCkgJiYgaXNJbnRlZ2VyKGRhdGUuZGF5KSA/IHRoaXMuX3RvTmF0aXZlRGF0ZShkYXRlKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9mcm9tTmF0aXZlRGF0ZShkYXRlOiBEYXRlKTogTmdiRGF0ZVN0cnVjdCB7XG4gICAgcmV0dXJuIHt5ZWFyOiBkYXRlLmdldEZ1bGxZZWFyKCksIG1vbnRoOiBkYXRlLmdldE1vbnRoKCkgKyAxLCBkYXk6IGRhdGUuZ2V0RGF0ZSgpfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfdG9OYXRpdmVEYXRlKGRhdGU6IE5nYkRhdGVTdHJ1Y3QpOiBEYXRlIHtcbiAgICBjb25zdCBqc0RhdGUgPSBuZXcgRGF0ZShkYXRlLnllYXIsIGRhdGUubW9udGggLSAxLCBkYXRlLmRheSwgMTIpO1xuICAgIC8vIGF2b2lkIDMwIC0+IDE5MzAgY29udmVyc2lvblxuICAgIGpzRGF0ZS5zZXRGdWxsWWVhcihkYXRlLnllYXIpO1xuICAgIHJldHVybiBqc0RhdGU7XG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/datepicker/adapters/ngb-date-native-utc-adapter.js b/dist/sunbird-ui-components/esm5/datepicker/adapters/ngb-date-native-utc-adapter.js new file mode 100644 index 0000000..0b6992d --- /dev/null +++ b/dist/sunbird-ui-components/esm5/datepicker/adapters/ngb-date-native-utc-adapter.js @@ -0,0 +1,54 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import * as tslib_1 from "tslib"; +import { Injectable } from '@angular/core'; +import { NgbDateNativeAdapter } from './ngb-date-native-adapter'; +/** + * Same as [`NgbDateNativeAdapter`](#/components/datepicker/api#NgbDateNativeAdapter), but with UTC dates. + * + * \@since 3.2.0 + */ +var NgbDateNativeUTCAdapter = /** @class */ (function (_super) { + tslib_1.__extends(NgbDateNativeUTCAdapter, _super); + function NgbDateNativeUTCAdapter() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * @protected + * @param {?} date + * @return {?} + */ + NgbDateNativeUTCAdapter.prototype._fromNativeDate = /** + * @protected + * @param {?} date + * @return {?} + */ + function (date) { + return { year: date.getUTCFullYear(), month: date.getUTCMonth() + 1, day: date.getUTCDate() }; + }; + /** + * @protected + * @param {?} date + * @return {?} + */ + NgbDateNativeUTCAdapter.prototype._toNativeDate = /** + * @protected + * @param {?} date + * @return {?} + */ + function (date) { + /** @type {?} */ + var jsDate = new Date(Date.UTC(date.year, date.month - 1, date.day)); + // avoid 30 -> 1930 conversion + jsDate.setUTCFullYear(date.year); + return jsDate; + }; + NgbDateNativeUTCAdapter.decorators = [ + { type: Injectable } + ]; + return NgbDateNativeUTCAdapter; +}(NgbDateNativeAdapter)); +export { NgbDateNativeUTCAdapter }; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdiLWRhdGUtbmF0aXZlLXV0Yy1hZGFwdGVyLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiZGF0ZXBpY2tlci9hZGFwdGVycy9uZ2ItZGF0ZS1uYXRpdmUtdXRjLWFkYXB0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7QUFPL0Q7SUFDNkMsbURBQW9CO0lBRGpFOztJQVlBLENBQUM7Ozs7OztJQVZXLGlEQUFlOzs7OztJQUF6QixVQUEwQixJQUFVO1FBQ2xDLE9BQU8sRUFBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUMsQ0FBQztJQUM5RixDQUFDOzs7Ozs7SUFFUywrQ0FBYTs7Ozs7SUFBdkIsVUFBd0IsSUFBbUI7O1lBQ25DLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RFLDhCQUE4QjtRQUM5QixNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDOztnQkFYRixVQUFVOztJQVlYLDhCQUFDO0NBQUEsQUFaRCxDQUM2QyxvQkFBb0IsR0FXaEU7U0FYWSx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtOZ2JEYXRlU3RydWN0fSBmcm9tICcuLi9uZ2ItZGF0ZS1zdHJ1Y3QnO1xuaW1wb3J0IHtOZ2JEYXRlTmF0aXZlQWRhcHRlcn0gZnJvbSAnLi9uZ2ItZGF0ZS1uYXRpdmUtYWRhcHRlcic7XG5cbi8qKlxuICogU2FtZSBhcyBbYE5nYkRhdGVOYXRpdmVBZGFwdGVyYF0oIy9jb21wb25lbnRzL2RhdGVwaWNrZXIvYXBpI05nYkRhdGVOYXRpdmVBZGFwdGVyKSwgYnV0IHdpdGggVVRDIGRhdGVzLlxuICpcbiAqIEBzaW5jZSAzLjIuMFxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTmdiRGF0ZU5hdGl2ZVVUQ0FkYXB0ZXIgZXh0ZW5kcyBOZ2JEYXRlTmF0aXZlQWRhcHRlciB7XG4gIHByb3RlY3RlZCBfZnJvbU5hdGl2ZURhdGUoZGF0ZTogRGF0ZSk6IE5nYkRhdGVTdHJ1Y3Qge1xuICAgIHJldHVybiB7eWVhcjogZGF0ZS5nZXRVVENGdWxsWWVhcigpLCBtb250aDogZGF0ZS5nZXRVVENNb250aCgpICsgMSwgZGF5OiBkYXRlLmdldFVUQ0RhdGUoKX07XG4gIH1cblxuICBwcm90ZWN0ZWQgX3RvTmF0aXZlRGF0ZShkYXRlOiBOZ2JEYXRlU3RydWN0KTogRGF0ZSB7XG4gICAgY29uc3QganNEYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMoZGF0ZS55ZWFyLCBkYXRlLm1vbnRoIC0gMSwgZGF0ZS5kYXkpKTtcbiAgICAvLyBhdm9pZCAzMCAtPiAxOTMwIGNvbnZlcnNpb25cbiAgICBqc0RhdGUuc2V0VVRDRnVsbFllYXIoZGF0ZS55ZWFyKTtcbiAgICByZXR1cm4ganNEYXRlO1xuICB9XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/datepicker/datepicker-config.js b/dist/sunbird-ui-components/esm5/datepicker/datepicker-config.js new file mode 100644 index 0000000..60e0e38 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/datepicker/datepicker-config.js @@ -0,0 +1,57 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Injectable } from '@angular/core'; +import * as i0 from "@angular/core"; +/** + * A configuration service for the [`NgbDatepicker`](#/components/datepicker/api#NgbDatepicker) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the datepickers used in the application. + */ +var NgbDatepickerConfig = /** @class */ (function () { + function NgbDatepickerConfig() { + this.displayMonths = 1; + this.firstDayOfWeek = 1; + this.navigation = 'select'; + this.outsideDays = 'visible'; + this.showWeekdays = true; + this.showWeekNumbers = false; + } + NgbDatepickerConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ NgbDatepickerConfig.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function NgbDatepickerConfig_Factory() { return new NgbDatepickerConfig(); }, token: NgbDatepickerConfig, providedIn: "root" }); + return NgbDatepickerConfig; +}()); +export { NgbDatepickerConfig }; +if (false) { + /** @type {?} */ + NgbDatepickerConfig.prototype.dayTemplate; + /** @type {?} */ + NgbDatepickerConfig.prototype.dayTemplateData; + /** @type {?} */ + NgbDatepickerConfig.prototype.footerTemplate; + /** @type {?} */ + NgbDatepickerConfig.prototype.displayMonths; + /** @type {?} */ + NgbDatepickerConfig.prototype.firstDayOfWeek; + /** @type {?} */ + NgbDatepickerConfig.prototype.markDisabled; + /** @type {?} */ + NgbDatepickerConfig.prototype.minDate; + /** @type {?} */ + NgbDatepickerConfig.prototype.maxDate; + /** @type {?} */ + NgbDatepickerConfig.prototype.navigation; + /** @type {?} */ + NgbDatepickerConfig.prototype.outsideDays; + /** @type {?} */ + NgbDatepickerConfig.prototype.showWeekdays; + /** @type {?} */ + NgbDatepickerConfig.prototype.showWeekNumbers; + /** @type {?} */ + NgbDatepickerConfig.prototype.startDate; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1jb25maWcuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJkYXRlcGlja2VyL2RhdGVwaWNrZXItY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFjLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQVV0RDtJQUFBO1FBS0Usa0JBQWEsR0FBRyxDQUFDLENBQUM7UUFDbEIsbUJBQWMsR0FBRyxDQUFDLENBQUM7UUFJbkIsZUFBVSxHQUFpQyxRQUFRLENBQUM7UUFDcEQsZ0JBQVcsR0FBdUMsU0FBUyxDQUFDO1FBQzVELGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLG9CQUFlLEdBQUcsS0FBSyxDQUFDO0tBRXpCOztnQkFmQSxVQUFVLFNBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDOzs7OEJBVmhDO0NBeUJDLEFBZkQsSUFlQztTQWRZLG1CQUFtQjs7O0lBQzlCLDBDQUE2Qzs7SUFDN0MsOENBQXNGOztJQUN0Riw2Q0FBaUM7O0lBQ2pDLDRDQUFrQjs7SUFDbEIsNkNBQW1COztJQUNuQiwyQ0FBdUY7O0lBQ3ZGLHNDQUF1Qjs7SUFDdkIsc0NBQXVCOztJQUN2Qix5Q0FBb0Q7O0lBQ3BELDBDQUE0RDs7SUFDNUQsMkNBQW9COztJQUNwQiw4Q0FBd0I7O0lBQ3hCLHdDQUF5QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgVGVtcGxhdGVSZWZ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtEYXlUZW1wbGF0ZUNvbnRleHR9IGZyb20gJy4vZGF0ZXBpY2tlci1kYXktdGVtcGxhdGUtY29udGV4dCc7XG5pbXBvcnQge05nYkRhdGVTdHJ1Y3R9IGZyb20gJy4vbmdiLWRhdGUtc3RydWN0JztcblxuLyoqXG4gKiBBIGNvbmZpZ3VyYXRpb24gc2VydmljZSBmb3IgdGhlIFtgTmdiRGF0ZXBpY2tlcmBdKCMvY29tcG9uZW50cy9kYXRlcGlja2VyL2FwaSNOZ2JEYXRlcGlja2VyKSBjb21wb25lbnQuXG4gKlxuICogWW91IGNhbiBpbmplY3QgdGhpcyBzZXJ2aWNlLCB0eXBpY2FsbHkgaW4geW91ciByb290IGNvbXBvbmVudCwgYW5kIGN1c3RvbWl6ZSB0aGUgdmFsdWVzIG9mIGl0cyBwcm9wZXJ0aWVzIGluXG4gKiBvcmRlciB0byBwcm92aWRlIGRlZmF1bHQgdmFsdWVzIGZvciBhbGwgdGhlIGRhdGVwaWNrZXJzIHVzZWQgaW4gdGhlIGFwcGxpY2F0aW9uLlxuICovXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBOZ2JEYXRlcGlja2VyQ29uZmlnIHtcbiAgZGF5VGVtcGxhdGU6IFRlbXBsYXRlUmVmPERheVRlbXBsYXRlQ29udGV4dD47XG4gIGRheVRlbXBsYXRlRGF0YTogKGRhdGU6IE5nYkRhdGVTdHJ1Y3QsIGN1cnJlbnQ6IHt5ZWFyOiBudW1iZXIsIG1vbnRoOiBudW1iZXJ9KSA9PiBhbnk7XG4gIGZvb3RlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBkaXNwbGF5TW9udGhzID0gMTtcbiAgZmlyc3REYXlPZldlZWsgPSAxO1xuICBtYXJrRGlzYWJsZWQ6IChkYXRlOiBOZ2JEYXRlU3RydWN0LCBjdXJyZW50OiB7eWVhcjogbnVtYmVyLCBtb250aDogbnVtYmVyfSkgPT4gYm9vbGVhbjtcbiAgbWluRGF0ZTogTmdiRGF0ZVN0cnVjdDtcbiAgbWF4RGF0ZTogTmdiRGF0ZVN0cnVjdDtcbiAgbmF2aWdhdGlvbjogJ3NlbGVjdCcgfCAnYXJyb3dzJyB8ICdub25lJyA9ICdzZWxlY3QnO1xuICBvdXRzaWRlRGF5czogJ3Zpc2libGUnIHwgJ2NvbGxhcHNlZCcgfCAnaGlkZGVuJyA9ICd2aXNpYmxlJztcbiAgc2hvd1dlZWtkYXlzID0gdHJ1ZTtcbiAgc2hvd1dlZWtOdW1iZXJzID0gZmFsc2U7XG4gIHN0YXJ0RGF0ZToge3llYXI6IG51bWJlciwgbW9udGg6IG51bWJlcn07XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/datepicker/datepicker-day-template-context.js b/dist/sunbird-ui-components/esm5/datepicker/datepicker-day-template-context.js new file mode 100644 index 0000000..e75b9bf --- /dev/null +++ b/dist/sunbird-ui-components/esm5/datepicker/datepicker-day-template-context.js @@ -0,0 +1,62 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * The context for the datepicker 'day' template. + * + * You can override the way dates are displayed in the datepicker via the `[dayTemplate]` input. + * @record + */ +export function DayTemplateContext() { } +if (false) { + /** + * The date that corresponds to the template. Same as the `date` parameter. + * + * Can be used for convenience as a default template key, ex. `let-d`. + * + * \@since 3.3.0 + * @type {?} + */ + DayTemplateContext.prototype.$implicit; + /** + * The month currently displayed by the datepicker. + * @type {?} + */ + DayTemplateContext.prototype.currentMonth; + /** + * Any data you pass using the `[dayTemplateData]` input in the datepicker. + * + * \@since 3.3.0 + * @type {?|undefined} + */ + DayTemplateContext.prototype.data; + /** + * The date that corresponds to the template. + * @type {?} + */ + DayTemplateContext.prototype.date; + /** + * `True` if the current date is disabled. + * @type {?} + */ + DayTemplateContext.prototype.disabled; + /** + * `True` if the current date is focused. + * @type {?} + */ + DayTemplateContext.prototype.focused; + /** + * `True` if the current date is selected. + * @type {?} + */ + DayTemplateContext.prototype.selected; + /** + * `True` if the current date is today (equal to `NgbCalendar.getToday()`). + * + * \@since 4.1.0 + * @type {?} + */ + DayTemplateContext.prototype.today; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1kYXktdGVtcGxhdGUtY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImRhdGVwaWNrZXIvZGF0ZXBpY2tlci1kYXktdGVtcGxhdGUtY29udGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBTUEsd0NBZ0RDOzs7Ozs7Ozs7O0lBeENDLHVDQUFtQjs7Ozs7SUFLbkIsMENBQXFCOzs7Ozs7O0lBT3JCLGtDQUFXOzs7OztJQUtYLGtDQUFjOzs7OztJQUtkLHNDQUFrQjs7Ozs7SUFLbEIscUNBQWlCOzs7OztJQUtqQixzQ0FBa0I7Ozs7Ozs7SUFPbEIsbUNBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge05nYkRhdGV9IGZyb20gJy4vbmdiLWRhdGUnO1xuLyoqXG4gKiBUaGUgY29udGV4dCBmb3IgdGhlIGRhdGVwaWNrZXIgJ2RheScgdGVtcGxhdGUuXG4gKlxuICogWW91IGNhbiBvdmVycmlkZSB0aGUgd2F5IGRhdGVzIGFyZSBkaXNwbGF5ZWQgaW4gdGhlIGRhdGVwaWNrZXIgdmlhIHRoZSBgW2RheVRlbXBsYXRlXWAgaW5wdXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF5VGVtcGxhdGVDb250ZXh0IHtcbiAgLyoqXG4gICAqIFRoZSBkYXRlIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHRlbXBsYXRlLiBTYW1lIGFzIHRoZSBgZGF0ZWAgcGFyYW1ldGVyLlxuICAgKlxuICAgKiBDYW4gYmUgdXNlZCBmb3IgY29udmVuaWVuY2UgYXMgYSBkZWZhdWx0IHRlbXBsYXRlIGtleSwgZXguIGBsZXQtZGAuXG4gICAqXG4gICAqIEBzaW5jZSAzLjMuMFxuICAgKi9cbiAgJGltcGxpY2l0OiBOZ2JEYXRlO1xuXG4gIC8qKlxuICAgKiBUaGUgbW9udGggY3VycmVudGx5IGRpc3BsYXllZCBieSB0aGUgZGF0ZXBpY2tlci5cbiAgICovXG4gIGN1cnJlbnRNb250aDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBbnkgZGF0YSB5b3UgcGFzcyB1c2luZyB0aGUgYFtkYXlUZW1wbGF0ZURhdGFdYCBpbnB1dCBpbiB0aGUgZGF0ZXBpY2tlci5cbiAgICpcbiAgICogQHNpbmNlIDMuMy4wXG4gICAqL1xuICBkYXRhPzogYW55O1xuXG4gIC8qKlxuICAgKiBUaGUgZGF0ZSB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSB0ZW1wbGF0ZS5cbiAgICovXG4gIGRhdGU6IE5nYkRhdGU7XG5cbiAgLyoqXG4gICAqIGBUcnVlYCBpZiB0aGUgY3VycmVudCBkYXRlIGlzIGRpc2FibGVkLlxuICAgKi9cbiAgZGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIGBUcnVlYCBpZiB0aGUgY3VycmVudCBkYXRlIGlzIGZvY3VzZWQuXG4gICAqL1xuICBmb2N1c2VkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBgVHJ1ZWAgaWYgdGhlIGN1cnJlbnQgZGF0ZSBpcyBzZWxlY3RlZC5cbiAgICovXG4gIHNlbGVjdGVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBgVHJ1ZWAgaWYgdGhlIGN1cnJlbnQgZGF0ZSBpcyB0b2RheSAoZXF1YWwgdG8gYE5nYkNhbGVuZGFyLmdldFRvZGF5KClgKS5cbiAgICpcbiAgICogQHNpbmNlIDQuMS4wXG4gICAqL1xuICB0b2RheTogYm9vbGVhbjtcbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/datepicker/datepicker-day-view.js b/dist/sunbird-ui-components/esm5/datepicker/datepicker-day-view.js new file mode 100644 index 0000000..f71b446 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/datepicker/datepicker-day-view.js @@ -0,0 +1,64 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { ChangeDetectionStrategy, Component, Input, ViewEncapsulation } from '@angular/core'; +import { NgbDate } from './ngb-date'; +import { NgbDatepickerI18n } from './datepicker-i18n'; +var NgbDatepickerDayView = /** @class */ (function () { + function NgbDatepickerDayView(i18n) { + this.i18n = i18n; + } + /** + * @return {?} + */ + NgbDatepickerDayView.prototype.isMuted = /** + * @return {?} + */ + function () { return !this.selected && (this.date.month !== this.currentMonth || this.disabled); }; + NgbDatepickerDayView.decorators = [ + { type: Component, args: [{ + selector: '[ngbDatepickerDayView]', + changeDetection: ChangeDetectionStrategy.OnPush, + encapsulation: ViewEncapsulation.None, + host: { + 'class': 'btn-light', + '[class.bg-primary]': 'selected', + '[class.text-white]': 'selected', + '[class.text-muted]': 'isMuted()', + '[class.outside]': 'isMuted()', + '[class.active]': 'focused' + }, + template: "{{ i18n.getDayNumerals(date) }}", + styles: ["[ngbDatepickerDayView]{text-align:center;width:2rem;height:2rem;line-height:2rem;border-radius:.25rem;background:0 0}[ngbDatepickerDayView].outside{opacity:.5}"] + }] } + ]; + /** @nocollapse */ + NgbDatepickerDayView.ctorParameters = function () { return [ + { type: NgbDatepickerI18n } + ]; }; + NgbDatepickerDayView.propDecorators = { + currentMonth: [{ type: Input }], + date: [{ type: Input }], + disabled: [{ type: Input }], + focused: [{ type: Input }], + selected: [{ type: Input }] + }; + return NgbDatepickerDayView; +}()); +export { NgbDatepickerDayView }; +if (false) { + /** @type {?} */ + NgbDatepickerDayView.prototype.currentMonth; + /** @type {?} */ + NgbDatepickerDayView.prototype.date; + /** @type {?} */ + NgbDatepickerDayView.prototype.disabled; + /** @type {?} */ + NgbDatepickerDayView.prototype.focused; + /** @type {?} */ + NgbDatepickerDayView.prototype.selected; + /** @type {?} */ + NgbDatepickerDayView.prototype.i18n; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1kYXktdmlldy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImRhdGVwaWNrZXIvZGF0ZXBpY2tlci1kYXktdmlldy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFDLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDM0YsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFlBQVksQ0FBQztBQUNuQyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUVwRDtJQXNCRSw4QkFBbUIsSUFBdUI7UUFBdkIsU0FBSSxHQUFKLElBQUksQ0FBbUI7SUFBRyxDQUFDOzs7O0lBRTlDLHNDQUFPOzs7SUFBUCxjQUFZLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDOztnQkF4QmpHLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsd0JBQXdCO29CQUNsQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7b0JBRXJDLElBQUksRUFBRTt3QkFDSixPQUFPLEVBQUUsV0FBVzt3QkFDcEIsb0JBQW9CLEVBQUUsVUFBVTt3QkFDaEMsb0JBQW9CLEVBQUUsVUFBVTt3QkFDaEMsb0JBQW9CLEVBQUUsV0FBVzt3QkFDakMsaUJBQWlCLEVBQUUsV0FBVzt3QkFDOUIsZ0JBQWdCLEVBQUUsU0FBUztxQkFDNUI7b0JBQ0QsUUFBUSxFQUFFLGlDQUFpQzs7aUJBQzVDOzs7O2dCQWhCTyxpQkFBaUI7OzsrQkFrQnRCLEtBQUs7dUJBQ0wsS0FBSzsyQkFDTCxLQUFLOzBCQUNMLEtBQUs7MkJBQ0wsS0FBSzs7SUFLUiwyQkFBQztDQUFBLEFBekJELElBeUJDO1NBVlksb0JBQW9COzs7SUFDL0IsNENBQThCOztJQUM5QixvQ0FBdUI7O0lBQ3ZCLHdDQUEyQjs7SUFDM0IsdUNBQTBCOztJQUMxQix3Q0FBMkI7O0lBRWYsb0NBQThCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCwgVmlld0VuY2Fwc3VsYXRpb259IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtOZ2JEYXRlfSBmcm9tICcuL25nYi1kYXRlJztcbmltcG9ydCB7TmdiRGF0ZXBpY2tlckkxOG59IGZyb20gJy4vZGF0ZXBpY2tlci1pMThuJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnW25nYkRhdGVwaWNrZXJEYXlWaWV3XScsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBzdHlsZVVybHM6IFsnLi9kYXRlcGlja2VyLWRheS12aWV3LnNjc3MnXSxcbiAgaG9zdDoge1xuICAgICdjbGFzcyc6ICdidG4tbGlnaHQnLFxuICAgICdbY2xhc3MuYmctcHJpbWFyeV0nOiAnc2VsZWN0ZWQnLFxuICAgICdbY2xhc3MudGV4dC13aGl0ZV0nOiAnc2VsZWN0ZWQnLFxuICAgICdbY2xhc3MudGV4dC1tdXRlZF0nOiAnaXNNdXRlZCgpJyxcbiAgICAnW2NsYXNzLm91dHNpZGVdJzogJ2lzTXV0ZWQoKScsXG4gICAgJ1tjbGFzcy5hY3RpdmVdJzogJ2ZvY3VzZWQnXG4gIH0sXG4gIHRlbXBsYXRlOiBge3sgaTE4bi5nZXREYXlOdW1lcmFscyhkYXRlKSB9fWBcbn0pXG5leHBvcnQgY2xhc3MgTmdiRGF0ZXBpY2tlckRheVZpZXcge1xuICBASW5wdXQoKSBjdXJyZW50TW9udGg6IG51bWJlcjtcbiAgQElucHV0KCkgZGF0ZTogTmdiRGF0ZTtcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGZvY3VzZWQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHNlbGVjdGVkOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBpMThuOiBOZ2JEYXRlcGlja2VySTE4bikge31cblxuICBpc011dGVkKCkgeyByZXR1cm4gIXRoaXMuc2VsZWN0ZWQgJiYgKHRoaXMuZGF0ZS5tb250aCAhPT0gdGhpcy5jdXJyZW50TW9udGggfHwgdGhpcy5kaXNhYmxlZCk7IH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/datepicker/datepicker-i18n.js b/dist/sunbird-ui-components/esm5/datepicker/datepicker-i18n.js new file mode 100644 index 0000000..e27522e --- /dev/null +++ b/dist/sunbird-ui-components/esm5/datepicker/datepicker-i18n.js @@ -0,0 +1,229 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import * as tslib_1 from "tslib"; +import { Inject, Injectable, LOCALE_ID } from '@angular/core'; +import { FormStyle, getLocaleDayNames, getLocaleMonthNames, TranslationWidth, formatDate } from '@angular/common'; +import * as i0 from "@angular/core"; +/** + * @param {?} locale + * @return {?} + */ +export function NGB_DATEPICKER_18N_FACTORY(locale) { + return new NgbDatepickerI18nDefault(locale); +} +/** + * A service supplying i18n data to the datepicker component. + * + * The default implementation of this service uses the Angular locale and registered locale data for + * weekdays and month names (as explained in the Angular i18n guide). + * + * It also provides a way to i18n data that depends on calendar calculations, like aria labels, day, week and year + * numerals. For other static labels the datepicker uses the default Angular i18n. + * + * See the [i18n demo](#/components/datepicker/examples#i18n) and + * [Hebrew calendar demo](#/components/datepicker/calendars#hebrew) on how to extend this class and define + * a custom provider for i18n. + * @abstract + */ +var NgbDatepickerI18n = /** @class */ (function () { + function NgbDatepickerI18n() { + } + /** + * Returns the textual representation of a day that is rendered in a day cell. + * + * @since 3.0.0 + */ + /** + * Returns the textual representation of a day that is rendered in a day cell. + * + * \@since 3.0.0 + * @param {?} date + * @return {?} + */ + NgbDatepickerI18n.prototype.getDayNumerals = /** + * Returns the textual representation of a day that is rendered in a day cell. + * + * \@since 3.0.0 + * @param {?} date + * @return {?} + */ + function (date) { return "" + date.day; }; + /** + * Returns the textual representation of a week number rendered by datepicker. + * + * @since 3.0.0 + */ + /** + * Returns the textual representation of a week number rendered by datepicker. + * + * \@since 3.0.0 + * @param {?} weekNumber + * @return {?} + */ + NgbDatepickerI18n.prototype.getWeekNumerals = /** + * Returns the textual representation of a week number rendered by datepicker. + * + * \@since 3.0.0 + * @param {?} weekNumber + * @return {?} + */ + function (weekNumber) { return "" + weekNumber; }; + /** + * Returns the textual representation of a year that is rendered in the datepicker year select box. + * + * @since 3.0.0 + */ + /** + * Returns the textual representation of a year that is rendered in the datepicker year select box. + * + * \@since 3.0.0 + * @param {?} year + * @return {?} + */ + NgbDatepickerI18n.prototype.getYearNumerals = /** + * Returns the textual representation of a year that is rendered in the datepicker year select box. + * + * \@since 3.0.0 + * @param {?} year + * @return {?} + */ + function (year) { return "" + year; }; + NgbDatepickerI18n.decorators = [ + { type: Injectable, args: [{ providedIn: 'root', useFactory: NGB_DATEPICKER_18N_FACTORY, deps: [LOCALE_ID] },] } + ]; + /** @nocollapse */ NgbDatepickerI18n.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function NgbDatepickerI18n_Factory() { return NGB_DATEPICKER_18N_FACTORY(i0.ɵɵinject(i0.LOCALE_ID)); }, token: NgbDatepickerI18n, providedIn: "root" }); + return NgbDatepickerI18n; +}()); +export { NgbDatepickerI18n }; +if (false) { + /** + * Returns the short weekday name to display in the heading of the month view. + * + * With default calendar we use ISO 8601: 'weekday' is 1=Mon ... 7=Sun. + * @abstract + * @param {?} weekday + * @return {?} + */ + NgbDatepickerI18n.prototype.getWeekdayShortName = function (weekday) { }; + /** + * Returns the short month name to display in the date picker navigation. + * + * With default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec. + * @abstract + * @param {?} month + * @param {?=} year + * @return {?} + */ + NgbDatepickerI18n.prototype.getMonthShortName = function (month, year) { }; + /** + * Returns the full month name to display in the date picker navigation. + * + * With default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec. + * @abstract + * @param {?} month + * @param {?=} year + * @return {?} + */ + NgbDatepickerI18n.prototype.getMonthFullName = function (month, year) { }; + /** + * Returns the value of the `aria-label` attribute for a specific date. + * + * \@since 2.0.0 + * @abstract + * @param {?} date + * @return {?} + */ + NgbDatepickerI18n.prototype.getDayAriaLabel = function (date) { }; +} +var NgbDatepickerI18nDefault = /** @class */ (function (_super) { + tslib_1.__extends(NgbDatepickerI18nDefault, _super); + function NgbDatepickerI18nDefault(_locale) { + var _this = _super.call(this) || this; + _this._locale = _locale; + /** @type {?} */ + var weekdaysStartingOnSunday = getLocaleDayNames(_locale, FormStyle.Standalone, TranslationWidth.Short); + _this._weekdaysShort = weekdaysStartingOnSunday.map((/** + * @param {?} day + * @param {?} index + * @return {?} + */ + function (day, index) { return weekdaysStartingOnSunday[(index + 1) % 7]; })); + _this._monthsShort = getLocaleMonthNames(_locale, FormStyle.Standalone, TranslationWidth.Abbreviated); + _this._monthsFull = getLocaleMonthNames(_locale, FormStyle.Standalone, TranslationWidth.Wide); + return _this; + } + /** + * @param {?} weekday + * @return {?} + */ + NgbDatepickerI18nDefault.prototype.getWeekdayShortName = /** + * @param {?} weekday + * @return {?} + */ + function (weekday) { return this._weekdaysShort[weekday - 1]; }; + /** + * @param {?} month + * @return {?} + */ + NgbDatepickerI18nDefault.prototype.getMonthShortName = /** + * @param {?} month + * @return {?} + */ + function (month) { return this._monthsShort[month - 1]; }; + /** + * @param {?} month + * @return {?} + */ + NgbDatepickerI18nDefault.prototype.getMonthFullName = /** + * @param {?} month + * @return {?} + */ + function (month) { return this._monthsFull[month - 1]; }; + /** + * @param {?} date + * @return {?} + */ + NgbDatepickerI18nDefault.prototype.getDayAriaLabel = /** + * @param {?} date + * @return {?} + */ + function (date) { + /** @type {?} */ + var jsDate = new Date(date.year, date.month - 1, date.day); + return formatDate(jsDate, 'fullDate', this._locale); + }; + NgbDatepickerI18nDefault.decorators = [ + { type: Injectable } + ]; + /** @nocollapse */ + NgbDatepickerI18nDefault.ctorParameters = function () { return [ + { type: String, decorators: [{ type: Inject, args: [LOCALE_ID,] }] } + ]; }; + return NgbDatepickerI18nDefault; +}(NgbDatepickerI18n)); +export { NgbDatepickerI18nDefault }; +if (false) { + /** + * @type {?} + * @private + */ + NgbDatepickerI18nDefault.prototype._weekdaysShort; + /** + * @type {?} + * @private + */ + NgbDatepickerI18nDefault.prototype._monthsShort; + /** + * @type {?} + * @private + */ + NgbDatepickerI18nDefault.prototype._monthsFull; + /** + * @type {?} + * @private + */ + NgbDatepickerI18nDefault.prototype._locale; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1pMThuLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiZGF0ZXBpY2tlci9kYXRlcGlja2VyLWkxOG4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDNUQsT0FBTyxFQUFDLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7O0FBR2hILE1BQU0sVUFBVSwwQkFBMEIsQ0FBQyxNQUFNO0lBQy9DLE9BQU8sSUFBSSx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM5QyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFlRDtJQUFBO0tBa0RDO0lBcEJDOzs7O09BSUc7Ozs7Ozs7O0lBQ0gsMENBQWM7Ozs7Ozs7SUFBZCxVQUFlLElBQW1CLElBQVksT0FBTyxLQUFHLElBQUksQ0FBQyxHQUFLLENBQUMsQ0FBQyxDQUFDO0lBRXJFOzs7O09BSUc7Ozs7Ozs7O0lBQ0gsMkNBQWU7Ozs7Ozs7SUFBZixVQUFnQixVQUFrQixJQUFZLE9BQU8sS0FBRyxVQUFZLENBQUMsQ0FBQyxDQUFDO0lBRXZFOzs7O09BSUc7Ozs7Ozs7O0lBQ0gsMkNBQWU7Ozs7Ozs7SUFBZixVQUFnQixJQUFZLElBQVksT0FBTyxLQUFHLElBQU0sQ0FBQyxDQUFDLENBQUM7O2dCQWpENUQsVUFBVSxTQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsMEJBQTBCLEVBQUUsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUM7Ozs0QkFyQjNGO0NBdUVDLEFBbERELElBa0RDO1NBakRxQixpQkFBaUI7Ozs7Ozs7Ozs7SUFNckMseUVBQXNEOzs7Ozs7Ozs7O0lBT3RELDJFQUFpRTs7Ozs7Ozs7OztJQU9qRSwwRUFBZ0U7Ozs7Ozs7OztJQU9oRSxrRUFBc0Q7O0FBd0J4RDtJQUM4QyxvREFBaUI7SUFLN0Qsa0NBQXVDLE9BQWU7UUFBdEQsWUFDRSxpQkFBTyxTQU9SO1FBUnNDLGFBQU8sR0FBUCxPQUFPLENBQVE7O1lBRzlDLHdCQUF3QixHQUFHLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsVUFBVSxFQUFFLGdCQUFnQixDQUFDLEtBQUssQ0FBQztRQUN6RyxLQUFJLENBQUMsY0FBYyxHQUFHLHdCQUF3QixDQUFDLEdBQUc7Ozs7O1FBQUMsVUFBQyxHQUFHLEVBQUUsS0FBSyxJQUFLLE9BQUEsd0JBQXdCLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQXpDLENBQXlDLEVBQUMsQ0FBQztRQUU5RyxLQUFJLENBQUMsWUFBWSxHQUFHLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsVUFBVSxFQUFFLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3JHLEtBQUksQ0FBQyxXQUFXLEdBQUcsbUJBQW1CLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7O0lBQy9GLENBQUM7Ozs7O0lBRUQsc0RBQW1COzs7O0lBQW5CLFVBQW9CLE9BQWUsSUFBWSxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7Ozs7SUFFekYsb0RBQWlCOzs7O0lBQWpCLFVBQWtCLEtBQWEsSUFBWSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7Ozs7SUFFakYsbURBQWdCOzs7O0lBQWhCLFVBQWlCLEtBQWEsSUFBWSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7Ozs7SUFFL0Usa0RBQWU7Ozs7SUFBZixVQUFnQixJQUFtQjs7WUFDM0IsTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUM1RCxPQUFPLFVBQVUsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN0RCxDQUFDOztnQkF6QkYsVUFBVTs7Ozs2Q0FNSSxNQUFNLFNBQUMsU0FBUzs7SUFvQi9CLCtCQUFDO0NBQUEsQUExQkQsQ0FDOEMsaUJBQWlCLEdBeUI5RDtTQXpCWSx3QkFBd0I7Ozs7OztJQUNuQyxrREFBc0M7Ozs7O0lBQ3RDLGdEQUFvQzs7Ozs7SUFDcEMsK0NBQW1DOzs7OztJQUV2QiwyQ0FBMEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZSwgTE9DQUxFX0lEfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Rm9ybVN0eWxlLCBnZXRMb2NhbGVEYXlOYW1lcywgZ2V0TG9jYWxlTW9udGhOYW1lcywgVHJhbnNsYXRpb25XaWR0aCwgZm9ybWF0RGF0ZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7TmdiRGF0ZVN0cnVjdH0gZnJvbSAnLi9uZ2ItZGF0ZS1zdHJ1Y3QnO1xuXG5leHBvcnQgZnVuY3Rpb24gTkdCX0RBVEVQSUNLRVJfMThOX0ZBQ1RPUlkobG9jYWxlKSB7XG4gIHJldHVybiBuZXcgTmdiRGF0ZXBpY2tlckkxOG5EZWZhdWx0KGxvY2FsZSk7XG59XG5cbi8qKlxuICogQSBzZXJ2aWNlIHN1cHBseWluZyBpMThuIGRhdGEgdG8gdGhlIGRhdGVwaWNrZXIgY29tcG9uZW50LlxuICpcbiAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoaXMgc2VydmljZSB1c2VzIHRoZSBBbmd1bGFyIGxvY2FsZSBhbmQgcmVnaXN0ZXJlZCBsb2NhbGUgZGF0YSBmb3JcbiAqIHdlZWtkYXlzIGFuZCBtb250aCBuYW1lcyAoYXMgZXhwbGFpbmVkIGluIHRoZSBBbmd1bGFyIGkxOG4gZ3VpZGUpLlxuICpcbiAqIEl0IGFsc28gcHJvdmlkZXMgYSB3YXkgdG8gaTE4biBkYXRhIHRoYXQgZGVwZW5kcyBvbiBjYWxlbmRhciBjYWxjdWxhdGlvbnMsIGxpa2UgYXJpYSBsYWJlbHMsIGRheSwgd2VlayBhbmQgeWVhclxuICogbnVtZXJhbHMuIEZvciBvdGhlciBzdGF0aWMgbGFiZWxzIHRoZSBkYXRlcGlja2VyIHVzZXMgdGhlIGRlZmF1bHQgQW5ndWxhciBpMThuLlxuICpcbiAqIFNlZSB0aGUgW2kxOG4gZGVtb10oIy9jb21wb25lbnRzL2RhdGVwaWNrZXIvZXhhbXBsZXMjaTE4bikgYW5kXG4gKiBbSGVicmV3IGNhbGVuZGFyIGRlbW9dKCMvY29tcG9uZW50cy9kYXRlcGlja2VyL2NhbGVuZGFycyNoZWJyZXcpIG9uIGhvdyB0byBleHRlbmQgdGhpcyBjbGFzcyBhbmQgZGVmaW5lXG4gKiBhIGN1c3RvbSBwcm92aWRlciBmb3IgaTE4bi5cbiAqL1xuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290JywgdXNlRmFjdG9yeTogTkdCX0RBVEVQSUNLRVJfMThOX0ZBQ1RPUlksIGRlcHM6IFtMT0NBTEVfSURdfSlcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOZ2JEYXRlcGlja2VySTE4biB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzaG9ydCB3ZWVrZGF5IG5hbWUgdG8gZGlzcGxheSBpbiB0aGUgaGVhZGluZyBvZiB0aGUgbW9udGggdmlldy5cbiAgICpcbiAgICogV2l0aCBkZWZhdWx0IGNhbGVuZGFyIHdlIHVzZSBJU08gODYwMTogJ3dlZWtkYXknIGlzIDE9TW9uIC4uLiA3PVN1bi5cbiAgICovXG4gIGFic3RyYWN0IGdldFdlZWtkYXlTaG9ydE5hbWUod2Vla2RheTogbnVtYmVyKTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzaG9ydCBtb250aCBuYW1lIHRvIGRpc3BsYXkgaW4gdGhlIGRhdGUgcGlja2VyIG5hdmlnYXRpb24uXG4gICAqXG4gICAqIFdpdGggZGVmYXVsdCBjYWxlbmRhciB3ZSB1c2UgSVNPIDg2MDE6ICdtb250aCcgaXMgMT1KYW4gLi4uIDEyPURlYy5cbiAgICovXG4gIGFic3RyYWN0IGdldE1vbnRoU2hvcnROYW1lKG1vbnRoOiBudW1iZXIsIHllYXI/OiBudW1iZXIpOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGZ1bGwgbW9udGggbmFtZSB0byBkaXNwbGF5IGluIHRoZSBkYXRlIHBpY2tlciBuYXZpZ2F0aW9uLlxuICAgKlxuICAgKiBXaXRoIGRlZmF1bHQgY2FsZW5kYXIgd2UgdXNlIElTTyA4NjAxOiAnbW9udGgnIGlzIDE9SmFuIC4uLiAxMj1EZWMuXG4gICAqL1xuICBhYnN0cmFjdCBnZXRNb250aEZ1bGxOYW1lKG1vbnRoOiBudW1iZXIsIHllYXI/OiBudW1iZXIpOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBgYXJpYS1sYWJlbGAgYXR0cmlidXRlIGZvciBhIHNwZWNpZmljIGRhdGUuXG4gICAqXG4gICAqIEBzaW5jZSAyLjAuMFxuICAgKi9cbiAgYWJzdHJhY3QgZ2V0RGF5QXJpYUxhYmVsKGRhdGU6IE5nYkRhdGVTdHJ1Y3QpOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgYSBkYXkgdGhhdCBpcyByZW5kZXJlZCBpbiBhIGRheSBjZWxsLlxuICAgKlxuICAgKiBAc2luY2UgMy4wLjBcbiAgICovXG4gIGdldERheU51bWVyYWxzKGRhdGU6IE5nYkRhdGVTdHJ1Y3QpOiBzdHJpbmcgeyByZXR1cm4gYCR7ZGF0ZS5kYXl9YDsgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIGEgd2VlayBudW1iZXIgcmVuZGVyZWQgYnkgZGF0ZXBpY2tlci5cbiAgICpcbiAgICogQHNpbmNlIDMuMC4wXG4gICAqL1xuICBnZXRXZWVrTnVtZXJhbHMod2Vla051bWJlcjogbnVtYmVyKTogc3RyaW5nIHsgcmV0dXJuIGAke3dlZWtOdW1iZXJ9YDsgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIGEgeWVhciB0aGF0IGlzIHJlbmRlcmVkIGluIHRoZSBkYXRlcGlja2VyIHllYXIgc2VsZWN0IGJveC5cbiAgICpcbiAgICogQHNpbmNlIDMuMC4wXG4gICAqL1xuICBnZXRZZWFyTnVtZXJhbHMoeWVhcjogbnVtYmVyKTogc3RyaW5nIHsgcmV0dXJuIGAke3llYXJ9YDsgfVxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTmdiRGF0ZXBpY2tlckkxOG5EZWZhdWx0IGV4dGVuZHMgTmdiRGF0ZXBpY2tlckkxOG4ge1xuICBwcml2YXRlIF93ZWVrZGF5c1Nob3J0OiBBcnJheTxzdHJpbmc+O1xuICBwcml2YXRlIF9tb250aHNTaG9ydDogQXJyYXk8c3RyaW5nPjtcbiAgcHJpdmF0ZSBfbW9udGhzRnVsbDogQXJyYXk8c3RyaW5nPjtcblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KExPQ0FMRV9JRCkgcHJpdmF0ZSBfbG9jYWxlOiBzdHJpbmcpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgY29uc3Qgd2Vla2RheXNTdGFydGluZ09uU3VuZGF5ID0gZ2V0TG9jYWxlRGF5TmFtZXMoX2xvY2FsZSwgRm9ybVN0eWxlLlN0YW5kYWxvbmUsIFRyYW5zbGF0aW9uV2lkdGguU2hvcnQpO1xuICAgIHRoaXMuX3dlZWtkYXlzU2hvcnQgPSB3ZWVrZGF5c1N0YXJ0aW5nT25TdW5kYXkubWFwKChkYXksIGluZGV4KSA9PiB3ZWVrZGF5c1N0YXJ0aW5nT25TdW5kYXlbKGluZGV4ICsgMSkgJSA3XSk7XG5cbiAgICB0aGlzLl9tb250aHNTaG9ydCA9IGdldExvY2FsZU1vbnRoTmFtZXMoX2xvY2FsZSwgRm9ybVN0eWxlLlN0YW5kYWxvbmUsIFRyYW5zbGF0aW9uV2lkdGguQWJicmV2aWF0ZWQpO1xuICAgIHRoaXMuX21vbnRoc0Z1bGwgPSBnZXRMb2NhbGVNb250aE5hbWVzKF9sb2NhbGUsIEZvcm1TdHlsZS5TdGFuZGFsb25lLCBUcmFuc2xhdGlvbldpZHRoLldpZGUpO1xuICB9XG5cbiAgZ2V0V2Vla2RheVNob3J0TmFtZSh3ZWVrZGF5OiBudW1iZXIpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5fd2Vla2RheXNTaG9ydFt3ZWVrZGF5IC0gMV07IH1cblxuICBnZXRNb250aFNob3J0TmFtZShtb250aDogbnVtYmVyKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuX21vbnRoc1Nob3J0W21vbnRoIC0gMV07IH1cblxuICBnZXRNb250aEZ1bGxOYW1lKG1vbnRoOiBudW1iZXIpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5fbW9udGhzRnVsbFttb250aCAtIDFdOyB9XG5cbiAgZ2V0RGF5QXJpYUxhYmVsKGRhdGU6IE5nYkRhdGVTdHJ1Y3QpOiBzdHJpbmcge1xuICAgIGNvbnN0IGpzRGF0ZSA9IG5ldyBEYXRlKGRhdGUueWVhciwgZGF0ZS5tb250aCAtIDEsIGRhdGUuZGF5KTtcbiAgICByZXR1cm4gZm9ybWF0RGF0ZShqc0RhdGUsICdmdWxsRGF0ZScsIHRoaXMuX2xvY2FsZSk7XG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/datepicker/datepicker-input.js b/dist/sunbird-ui-components/esm5/datepicker/datepicker-input.js new file mode 100644 index 0000000..7b776ae --- /dev/null +++ b/dist/sunbird-ui-components/esm5/datepicker/datepicker-input.js @@ -0,0 +1,848 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { ChangeDetectorRef, ComponentFactoryResolver, Directive, ElementRef, EventEmitter, forwardRef, Inject, Input, NgZone, Output, Renderer2, TemplateRef, ViewContainerRef } from '@angular/core'; +import { DOCUMENT } from '@angular/common'; +import { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms'; +import { ngbAutoClose } from '../util/autoclose'; +import { ngbFocusTrap } from '../util/focus-trap'; +import { positionElements } from '../util/positioning'; +import { NgbDateAdapter } from './adapters/ngb-date-adapter'; +import { NgbDatepicker } from './datepicker'; +import { NgbDatepickerService } from './datepicker-service'; +import { NgbCalendar } from './ngb-calendar'; +import { NgbDate } from './ngb-date'; +import { NgbDateParserFormatter } from './ngb-date-parser-formatter'; +/** @type {?} */ +var NGB_DATEPICKER_VALUE_ACCESSOR = { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef((/** + * @return {?} + */ + function () { return NgbInputDatepicker; })), + multi: true +}; +/** @type {?} */ +var NGB_DATEPICKER_VALIDATOR = { + provide: NG_VALIDATORS, + useExisting: forwardRef((/** + * @return {?} + */ + function () { return NgbInputDatepicker; })), + multi: true +}; +/** + * A directive that allows to stick a datepicker popup to an input field. + * + * Manages interaction with the input field itself, does value formatting and provides forms integration. + */ +var NgbInputDatepicker = /** @class */ (function () { + function NgbInputDatepicker(_parserFormatter, _elRef, _vcRef, _renderer, _cfr, _ngZone, _service, _calendar, _dateAdapter, _document, _changeDetector) { + var _this = this; + this._parserFormatter = _parserFormatter; + this._elRef = _elRef; + this._vcRef = _vcRef; + this._renderer = _renderer; + this._cfr = _cfr; + this._ngZone = _ngZone; + this._service = _service; + this._calendar = _calendar; + this._dateAdapter = _dateAdapter; + this._document = _document; + this._changeDetector = _changeDetector; + this._cRef = null; + this._disabled = false; + /** + * Indicates whether the datepicker popup should be closed automatically after date selection / outside click or not. + * + * * `true` - the popup will close on both date selection and outside click. + * * `false` - the popup can only be closed manually via `close()` or `toggle()` methods. + * * `"inside"` - the popup will close on date selection, but not outside clicks. + * * `"outside"` - the popup will close only on the outside click and not on date selection/inside clicks. + * + * \@since 3.0.0 + */ + this.autoClose = true; + /** + * The preferred placement of the datepicker popup. + * + * Possible values are `"top"`, `"top-left"`, `"top-right"`, `"bottom"`, `"bottom-left"`, + * `"bottom-right"`, `"left"`, `"left-top"`, `"left-bottom"`, `"right"`, `"right-top"`, + * `"right-bottom"` + * + * Accepts an array of strings or a string with space separated possible values. + * + * The default order of preference is `"bottom-left bottom-right top-left top-right"` + * + * Please see the [positioning overview](#/positioning) for more details. + */ + this.placement = ['bottom-left', 'bottom-right', 'top-left', 'top-right']; + /** + * An event emitted when user selects a date using keyboard or mouse. + * + * The payload of the event is currently selected `NgbDate`. + * + * \@since 1.1.1 + */ + this.dateSelect = new EventEmitter(); + /** + * Event emitted right after the navigation happens and displayed month changes. + * + * See [`NgbDatepickerNavigateEvent`](#/components/datepicker/api#NgbDatepickerNavigateEvent) for the payload info. + */ + this.navigate = new EventEmitter(); + /** + * An event fired after closing datepicker window. + * + * \@since 4.2.0 + */ + this.closed = new EventEmitter(); + this._onChange = (/** + * @param {?} _ + * @return {?} + */ + function (_) { }); + this._onTouched = (/** + * @return {?} + */ + function () { }); + this._validatorChange = (/** + * @return {?} + */ + function () { }); + this._zoneSubscription = _ngZone.onStable.subscribe((/** + * @return {?} + */ + function () { return _this._updatePopupPosition(); })); + } + Object.defineProperty(NgbInputDatepicker.prototype, "disabled", { + get: /** + * @return {?} + */ + function () { + return this._disabled; + }, + set: /** + * @param {?} value + * @return {?} + */ + function (value) { + this._disabled = value === '' || (value && value !== 'false'); + if (this.isOpen()) { + this._cRef.instance.setDisabledState(this._disabled); + } + }, + enumerable: true, + configurable: true + }); + /** + * @param {?} fn + * @return {?} + */ + NgbInputDatepicker.prototype.registerOnChange = /** + * @param {?} fn + * @return {?} + */ + function (fn) { this._onChange = fn; }; + /** + * @param {?} fn + * @return {?} + */ + NgbInputDatepicker.prototype.registerOnTouched = /** + * @param {?} fn + * @return {?} + */ + function (fn) { this._onTouched = fn; }; + /** + * @param {?} fn + * @return {?} + */ + NgbInputDatepicker.prototype.registerOnValidatorChange = /** + * @param {?} fn + * @return {?} + */ + function (fn) { this._validatorChange = fn; }; + /** + * @param {?} isDisabled + * @return {?} + */ + NgbInputDatepicker.prototype.setDisabledState = /** + * @param {?} isDisabled + * @return {?} + */ + function (isDisabled) { this.disabled = isDisabled; }; + /** + * @param {?} c + * @return {?} + */ + NgbInputDatepicker.prototype.validate = /** + * @param {?} c + * @return {?} + */ + function (c) { + /** @type {?} */ + var value = c.value; + if (value === null || value === undefined) { + return null; + } + /** @type {?} */ + var ngbDate = this._fromDateStruct(this._dateAdapter.fromModel(value)); + if (!this._calendar.isValid(ngbDate)) { + return { 'ngbDate': { invalid: c.value } }; + } + if (this.minDate && ngbDate.before(NgbDate.from(this.minDate))) { + return { 'ngbDate': { requiredBefore: this.minDate } }; + } + if (this.maxDate && ngbDate.after(NgbDate.from(this.maxDate))) { + return { 'ngbDate': { requiredAfter: this.maxDate } }; + } + }; + /** + * @param {?} value + * @return {?} + */ + NgbInputDatepicker.prototype.writeValue = /** + * @param {?} value + * @return {?} + */ + function (value) { + this._model = this._fromDateStruct(this._dateAdapter.fromModel(value)); + this._writeModelValue(this._model); + }; + /** + * @param {?} value + * @param {?=} updateView + * @return {?} + */ + NgbInputDatepicker.prototype.manualDateChange = /** + * @param {?} value + * @param {?=} updateView + * @return {?} + */ + function (value, updateView) { + if (updateView === void 0) { updateView = false; } + /** @type {?} */ + var inputValueChanged = value !== this._inputValue; + if (inputValueChanged) { + this._inputValue = value; + this._model = this._fromDateStruct(this._parserFormatter.parse(value)); + } + if (inputValueChanged || !updateView) { + this._onChange(this._model ? this._dateAdapter.toModel(this._model) : (value === '' ? null : value)); + } + if (updateView && this._model) { + this._writeModelValue(this._model); + } + }; + /** + * @return {?} + */ + NgbInputDatepicker.prototype.isOpen = /** + * @return {?} + */ + function () { return !!this._cRef; }; + /** + * Opens the datepicker popup. + * + * If the related form control contains a valid date, the corresponding month will be opened. + */ + /** + * Opens the datepicker popup. + * + * If the related form control contains a valid date, the corresponding month will be opened. + * @return {?} + */ + NgbInputDatepicker.prototype.open = /** + * Opens the datepicker popup. + * + * If the related form control contains a valid date, the corresponding month will be opened. + * @return {?} + */ + function () { + var _this = this; + if (!this.isOpen()) { + /** @type {?} */ + var cf = this._cfr.resolveComponentFactory(NgbDatepicker); + this._cRef = this._vcRef.createComponent(cf); + this._applyPopupStyling(this._cRef.location.nativeElement); + this._applyDatepickerInputs(this._cRef.instance); + this._subscribeForDatepickerOutputs(this._cRef.instance); + this._cRef.instance.ngOnInit(); + this._cRef.instance.writeValue(this._dateAdapter.toModel(this._model)); + // date selection event handling + this._cRef.instance.registerOnChange((/** + * @param {?} selectedDate + * @return {?} + */ + function (selectedDate) { + _this.writeValue(selectedDate); + _this._onChange(selectedDate); + _this._onTouched(); + })); + this._cRef.changeDetectorRef.detectChanges(); + this._cRef.instance.setDisabledState(this.disabled); + if (this.container === 'body') { + window.document.querySelector(this.container).appendChild(this._cRef.location.nativeElement); + } + // focus handling + ngbFocusTrap(this._cRef.location.nativeElement, this.closed, true); + this._cRef.instance.focus(); + ngbAutoClose(this._ngZone, this._document, this.autoClose, (/** + * @return {?} + */ + function () { return _this.close(); }), this.closed, [], [this._elRef.nativeElement, this._cRef.location.nativeElement]); + } + }; + /** + * Closes the datepicker popup. + */ + /** + * Closes the datepicker popup. + * @return {?} + */ + NgbInputDatepicker.prototype.close = /** + * Closes the datepicker popup. + * @return {?} + */ + function () { + if (this.isOpen()) { + this._vcRef.remove(this._vcRef.indexOf(this._cRef.hostView)); + this._cRef = null; + this.closed.emit(); + this._changeDetector.markForCheck(); + } + }; + /** + * Toggles the datepicker popup. + */ + /** + * Toggles the datepicker popup. + * @return {?} + */ + NgbInputDatepicker.prototype.toggle = /** + * Toggles the datepicker popup. + * @return {?} + */ + function () { + if (this.isOpen()) { + this.close(); + } + else { + this.open(); + } + }; + /** + * Navigates to the provided date. + * + * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec. + * If nothing or invalid date provided calendar will open current month. + * + * Use the `[startDate]` input as an alternative. + */ + /** + * Navigates to the provided date. + * + * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec. + * If nothing or invalid date provided calendar will open current month. + * + * Use the `[startDate]` input as an alternative. + * @param {?=} date + * @return {?} + */ + NgbInputDatepicker.prototype.navigateTo = /** + * Navigates to the provided date. + * + * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec. + * If nothing or invalid date provided calendar will open current month. + * + * Use the `[startDate]` input as an alternative. + * @param {?=} date + * @return {?} + */ + function (date) { + if (this.isOpen()) { + this._cRef.instance.navigateTo(date); + } + }; + /** + * @return {?} + */ + NgbInputDatepicker.prototype.onBlur = /** + * @return {?} + */ + function () { this._onTouched(); }; + /** + * @param {?} changes + * @return {?} + */ + NgbInputDatepicker.prototype.ngOnChanges = /** + * @param {?} changes + * @return {?} + */ + function (changes) { + if (changes['minDate'] || changes['maxDate']) { + this._validatorChange(); + } + }; + /** + * @return {?} + */ + NgbInputDatepicker.prototype.ngOnDestroy = /** + * @return {?} + */ + function () { + this.close(); + this._zoneSubscription.unsubscribe(); + }; + /** + * @private + * @param {?} datepickerInstance + * @return {?} + */ + NgbInputDatepicker.prototype._applyDatepickerInputs = /** + * @private + * @param {?} datepickerInstance + * @return {?} + */ + function (datepickerInstance) { + var _this = this; + ['dayTemplate', 'dayTemplateData', 'displayMonths', 'firstDayOfWeek', 'footerTemplate', 'markDisabled', 'minDate', + 'maxDate', 'navigation', 'outsideDays', 'showNavigation', 'showWeekdays', 'showWeekNumbers'] + .forEach((/** + * @param {?} optionName + * @return {?} + */ + function (optionName) { + if (_this[optionName] !== undefined) { + datepickerInstance[optionName] = _this[optionName]; + } + })); + datepickerInstance.startDate = this.startDate || this._model; + }; + /** + * @private + * @param {?} nativeElement + * @return {?} + */ + NgbInputDatepicker.prototype._applyPopupStyling = /** + * @private + * @param {?} nativeElement + * @return {?} + */ + function (nativeElement) { + this._renderer.addClass(nativeElement, 'dropdown-menu'); + this._renderer.addClass(nativeElement, 'show'); + if (this.container === 'body') { + this._renderer.addClass(nativeElement, 'ngb-dp-body'); + } + }; + /** + * @private + * @param {?} datepickerInstance + * @return {?} + */ + NgbInputDatepicker.prototype._subscribeForDatepickerOutputs = /** + * @private + * @param {?} datepickerInstance + * @return {?} + */ + function (datepickerInstance) { + var _this = this; + datepickerInstance.navigate.subscribe((/** + * @param {?} navigateEvent + * @return {?} + */ + function (navigateEvent) { return _this.navigate.emit(navigateEvent); })); + datepickerInstance.select.subscribe((/** + * @param {?} date + * @return {?} + */ + function (date) { + _this.dateSelect.emit(date); + if (_this.autoClose === true || _this.autoClose === 'inside') { + _this.close(); + } + })); + }; + /** + * @private + * @param {?} model + * @return {?} + */ + NgbInputDatepicker.prototype._writeModelValue = /** + * @private + * @param {?} model + * @return {?} + */ + function (model) { + /** @type {?} */ + var value = this._parserFormatter.format(model); + this._inputValue = value; + this._renderer.setProperty(this._elRef.nativeElement, 'value', value); + if (this.isOpen()) { + this._cRef.instance.writeValue(this._dateAdapter.toModel(model)); + this._onTouched(); + } + }; + /** + * @private + * @param {?} date + * @return {?} + */ + NgbInputDatepicker.prototype._fromDateStruct = /** + * @private + * @param {?} date + * @return {?} + */ + function (date) { + /** @type {?} */ + var ngbDate = date ? new NgbDate(date.year, date.month, date.day) : null; + return this._calendar.isValid(ngbDate) ? ngbDate : null; + }; + /** + * @private + * @return {?} + */ + NgbInputDatepicker.prototype._updatePopupPosition = /** + * @private + * @return {?} + */ + function () { + if (!this._cRef) { + return; + } + /** @type {?} */ + var hostElement; + if (typeof this.positionTarget === 'string') { + hostElement = window.document.querySelector(this.positionTarget); + } + else if (this.positionTarget instanceof HTMLElement) { + hostElement = this.positionTarget; + } + else { + hostElement = this._elRef.nativeElement; + } + if (this.positionTarget && !hostElement) { + throw new Error('ngbDatepicker could not find element declared in [positionTarget] to position against.'); + } + positionElements(hostElement, this._cRef.location.nativeElement, this.placement, this.container === 'body'); + }; + NgbInputDatepicker.decorators = [ + { type: Directive, args: [{ + selector: 'input[ngbDatepicker]', + exportAs: 'ngbDatepicker', + host: { + '(input)': 'manualDateChange($event.target.value)', + '(change)': 'manualDateChange($event.target.value, true)', + '(blur)': 'onBlur()', + '[disabled]': 'disabled' + }, + providers: [NGB_DATEPICKER_VALUE_ACCESSOR, NGB_DATEPICKER_VALIDATOR, NgbDatepickerService] + },] } + ]; + /** @nocollapse */ + NgbInputDatepicker.ctorParameters = function () { return [ + { type: NgbDateParserFormatter }, + { type: ElementRef }, + { type: ViewContainerRef }, + { type: Renderer2 }, + { type: ComponentFactoryResolver }, + { type: NgZone }, + { type: NgbDatepickerService }, + { type: NgbCalendar }, + { type: NgbDateAdapter }, + { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }, + { type: ChangeDetectorRef } + ]; }; + NgbInputDatepicker.propDecorators = { + autoClose: [{ type: Input }], + dayTemplate: [{ type: Input }], + dayTemplateData: [{ type: Input }], + displayMonths: [{ type: Input }], + firstDayOfWeek: [{ type: Input }], + footerTemplate: [{ type: Input }], + markDisabled: [{ type: Input }], + minDate: [{ type: Input }], + maxDate: [{ type: Input }], + navigation: [{ type: Input }], + outsideDays: [{ type: Input }], + placement: [{ type: Input }], + showWeekdays: [{ type: Input }], + showWeekNumbers: [{ type: Input }], + startDate: [{ type: Input }], + container: [{ type: Input }], + positionTarget: [{ type: Input }], + dateSelect: [{ type: Output }], + navigate: [{ type: Output }], + closed: [{ type: Output }], + disabled: [{ type: Input }] + }; + return NgbInputDatepicker; +}()); +export { NgbInputDatepicker }; +if (false) { + /** + * @type {?} + * @private + */ + NgbInputDatepicker.prototype._cRef; + /** + * @type {?} + * @private + */ + NgbInputDatepicker.prototype._disabled; + /** + * @type {?} + * @private + */ + NgbInputDatepicker.prototype._model; + /** + * @type {?} + * @private + */ + NgbInputDatepicker.prototype._inputValue; + /** + * @type {?} + * @private + */ + NgbInputDatepicker.prototype._zoneSubscription; + /** + * Indicates whether the datepicker popup should be closed automatically after date selection / outside click or not. + * + * * `true` - the popup will close on both date selection and outside click. + * * `false` - the popup can only be closed manually via `close()` or `toggle()` methods. + * * `"inside"` - the popup will close on date selection, but not outside clicks. + * * `"outside"` - the popup will close only on the outside click and not on date selection/inside clicks. + * + * \@since 3.0.0 + * @type {?} + */ + NgbInputDatepicker.prototype.autoClose; + /** + * The reference to a custom template for the day. + * + * Allows to completely override the way a day 'cell' in the calendar is displayed. + * + * See [`DayTemplateContext`](#/components/datepicker/api#DayTemplateContext) for the data you get inside. + * @type {?} + */ + NgbInputDatepicker.prototype.dayTemplate; + /** + * The callback to pass any arbitrary data to the template cell via the + * [`DayTemplateContext`](#/components/datepicker/api#DayTemplateContext)'s `data` parameter. + * + * `current` is the month that is currently displayed by the datepicker. + * + * \@since 3.3.0 + * @type {?} + */ + NgbInputDatepicker.prototype.dayTemplateData; + /** + * The number of months to display. + * @type {?} + */ + NgbInputDatepicker.prototype.displayMonths; + /** + * The first day of the week. + * + * With default calendar we use ISO 8601: 'weekday' is 1=Mon ... 7=Sun. + * @type {?} + */ + NgbInputDatepicker.prototype.firstDayOfWeek; + /** + * The reference to the custom template for the datepicker footer. + * + * \@since 3.3.0 + * @type {?} + */ + NgbInputDatepicker.prototype.footerTemplate; + /** + * The callback to mark some dates as disabled. + * + * It is called for each new date when navigating to a different month. + * + * `current` is the month that is currently displayed by the datepicker. + * @type {?} + */ + NgbInputDatepicker.prototype.markDisabled; + /** + * The earliest date that can be displayed or selected. Also used for form validation. + * + * If not provided, 'year' select box will display 10 years before the current month. + * @type {?} + */ + NgbInputDatepicker.prototype.minDate; + /** + * The latest date that can be displayed or selected. Also used for form validation. + * + * If not provided, 'year' select box will display 10 years after the current month. + * @type {?} + */ + NgbInputDatepicker.prototype.maxDate; + /** + * Navigation type. + * + * * `"select"` - select boxes for month and navigation arrows + * * `"arrows"` - only navigation arrows + * * `"none"` - no navigation visible at all + * @type {?} + */ + NgbInputDatepicker.prototype.navigation; + /** + * The way of displaying days that don't belong to the current month. + * + * * `"visible"` - days are visible + * * `"hidden"` - days are hidden, white space preserved + * * `"collapsed"` - days are collapsed, so the datepicker height might change between months + * + * For the 2+ months view, days in between months are never shown. + * @type {?} + */ + NgbInputDatepicker.prototype.outsideDays; + /** + * The preferred placement of the datepicker popup. + * + * Possible values are `"top"`, `"top-left"`, `"top-right"`, `"bottom"`, `"bottom-left"`, + * `"bottom-right"`, `"left"`, `"left-top"`, `"left-bottom"`, `"right"`, `"right-top"`, + * `"right-bottom"` + * + * Accepts an array of strings or a string with space separated possible values. + * + * The default order of preference is `"bottom-left bottom-right top-left top-right"` + * + * Please see the [positioning overview](#/positioning) for more details. + * @type {?} + */ + NgbInputDatepicker.prototype.placement; + /** + * If `true`, weekdays will be displayed. + * @type {?} + */ + NgbInputDatepicker.prototype.showWeekdays; + /** + * If `true`, week numbers will be displayed. + * @type {?} + */ + NgbInputDatepicker.prototype.showWeekNumbers; + /** + * The date to open calendar with. + * + * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec. + * If nothing or invalid date is provided, calendar will open with current month. + * + * You could use `navigateTo(date)` method as an alternative. + * @type {?} + */ + NgbInputDatepicker.prototype.startDate; + /** + * A selector specifying the element the datepicker popup should be appended to. + * + * Currently only supports `"body"`. + * @type {?} + */ + NgbInputDatepicker.prototype.container; + /** + * A css selector or html element specifying the element the datepicker popup should be positioned against. + * + * By default the input is used as a target. + * + * \@since 4.2.0 + * @type {?} + */ + NgbInputDatepicker.prototype.positionTarget; + /** + * An event emitted when user selects a date using keyboard or mouse. + * + * The payload of the event is currently selected `NgbDate`. + * + * \@since 1.1.1 + * @type {?} + */ + NgbInputDatepicker.prototype.dateSelect; + /** + * Event emitted right after the navigation happens and displayed month changes. + * + * See [`NgbDatepickerNavigateEvent`](#/components/datepicker/api#NgbDatepickerNavigateEvent) for the payload info. + * @type {?} + */ + NgbInputDatepicker.prototype.navigate; + /** + * An event fired after closing datepicker window. + * + * \@since 4.2.0 + * @type {?} + */ + NgbInputDatepicker.prototype.closed; + /** + * @type {?} + * @private + */ + NgbInputDatepicker.prototype._onChange; + /** + * @type {?} + * @private + */ + NgbInputDatepicker.prototype._onTouched; + /** + * @type {?} + * @private + */ + NgbInputDatepicker.prototype._validatorChange; + /** + * @type {?} + * @private + */ + NgbInputDatepicker.prototype._parserFormatter; + /** + * @type {?} + * @private + */ + NgbInputDatepicker.prototype._elRef; + /** + * @type {?} + * @private + */ + NgbInputDatepicker.prototype._vcRef; + /** + * @type {?} + * @private + */ + NgbInputDatepicker.prototype._renderer; + /** + * @type {?} + * @private + */ + NgbInputDatepicker.prototype._cfr; + /** + * @type {?} + * @private + */ + NgbInputDatepicker.prototype._ngZone; + /** + * @type {?} + * @private + */ + NgbInputDatepicker.prototype._service; + /** + * @type {?} + * @private + */ + NgbInputDatepicker.prototype._calendar; + /** + * @type {?} + * @private + */ + NgbInputDatepicker.prototype._dateAdapter; + /** + * @type {?} + * @private + */ + NgbInputDatepicker.prototype._document; + /** + * @type {?} + * @private + */ + NgbInputDatepicker.prototype._changeDetector; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1pbnB1dC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImRhdGVwaWNrZXIvZGF0ZXBpY2tlci1pbnB1dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNMLGlCQUFpQixFQUNqQix3QkFBd0IsRUFFeEIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUdOLE1BQU0sRUFDTixTQUFTLEVBRVQsV0FBVyxFQUNYLGdCQUFnQixFQUNqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUF3QyxhQUFhLEVBQUUsaUJBQWlCLEVBQVksTUFBTSxnQkFBZ0IsQ0FBQztBQUVsSCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDL0MsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBaUIsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUVyRSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFDLGFBQWEsRUFBNkIsTUFBTSxjQUFjLENBQUM7QUFFdkUsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDMUQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sNkJBQTZCLENBQUM7O0lBRzdELDZCQUE2QixHQUFHO0lBQ3BDLE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVU7OztJQUFDLGNB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SUFDNUIsK0NBQStCOzs7Ozs7Ozs7Ozs7SUFZL0IsdUNBQTBEOzs7Ozs7Ozs7SUFTMUQseUNBQXNEOzs7Ozs7Ozs7O0lBVXRELDZDQUF5Rjs7Ozs7SUFLekYsMkNBQStCOzs7Ozs7O0lBTy9CLDRDQUFnQzs7Ozs7OztJQU9oQyw0Q0FBMEM7Ozs7Ozs7OztJQVMxQywwQ0FBMEY7Ozs7Ozs7SUFPMUYscUNBQWdDOzs7Ozs7O0lBT2hDLHFDQUFnQzs7Ozs7Ozs7O0lBU2hDLHdDQUFrRDs7Ozs7Ozs7Ozs7SUFXbEQseUNBQXlEOzs7Ozs7Ozs7Ozs7Ozs7SUFlekQsdUNBQThGOzs7OztJQUs5RiwwQ0FBK0I7Ozs7O0lBSy9CLDZDQUFrQzs7Ozs7Ozs7OztJQVVsQyx1Q0FBZ0U7Ozs7Ozs7SUFPaEUsdUNBQTJCOzs7Ozs7Ozs7SUFTM0IsNENBQThDOzs7Ozs7Ozs7SUFTOUMsd0NBQW1EOzs7Ozs7O0lBT25ELHNDQUFvRTs7Ozs7OztJQU9wRSxvQ0FBNEM7Ozs7O0lBYzVDLHVDQUFtQzs7Ozs7SUFDbkMsd0NBQThCOzs7OztJQUM5Qiw4Q0FBb0M7Ozs7O0lBSWhDLDhDQUFnRDs7Ozs7SUFBRSxvQ0FBNEM7Ozs7O0lBQzlGLG9DQUFnQzs7Ozs7SUFBRSx1Q0FBNEI7Ozs7O0lBQUUsa0NBQXNDOzs7OztJQUN0RyxxQ0FBdUI7Ozs7O0lBQUUsc0NBQXNDOzs7OztJQUFFLHVDQUE4Qjs7Ozs7SUFDL0YsMENBQXlDOzs7OztJQUFFLHVDQUF3Qzs7Ozs7SUFDbkYsNkNBQTBDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgQ29tcG9uZW50UmVmLFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBSZW5kZXJlcjIsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtET0NVTUVOVH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7QWJzdHJhY3RDb250cm9sLCBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMSURBVE9SUywgTkdfVkFMVUVfQUNDRVNTT1IsIFZhbGlkYXRvcn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQge25nYkF1dG9DbG9zZX0gZnJvbSAnLi4vdXRpbC9hdXRvY2xvc2UnO1xuaW1wb3J0IHtuZ2JGb2N1c1RyYXB9IGZyb20gJy4uL3V0aWwvZm9jdXMtdHJhcCc7XG5pbXBvcnQge1BsYWNlbWVudEFycmF5LCBwb3NpdGlvbkVsZW1lbnRzfSBmcm9tICcuLi91dGlsL3Bvc2l0aW9uaW5nJztcblxuaW1wb3J0IHtOZ2JEYXRlQWRhcHRlcn0gZnJvbSAnLi9hZGFwdGVycy9uZ2ItZGF0ZS1hZGFwdGVyJztcbmltcG9ydCB7TmdiRGF0ZXBpY2tlciwgTmdiRGF0ZXBpY2tlck5hdmlnYXRlRXZlbnR9IGZyb20gJy4vZGF0ZXBpY2tlcic7XG5pbXBvcnQge0RheVRlbXBsYXRlQ29udGV4dH0gZnJvbSAnLi9kYXRlcGlja2VyLWRheS10ZW1wbGF0ZS1jb250ZXh0JztcbmltcG9ydCB7TmdiRGF0ZXBpY2tlclNlcnZpY2V9IGZyb20gJy4vZGF0ZXBpY2tlci1zZXJ2aWNlJztcbmltcG9ydCB7TmdiQ2FsZW5kYXJ9IGZyb20gJy4vbmdiLWNhbGVuZGFyJztcbmltcG9ydCB7TmdiRGF0ZX0gZnJvbSAnLi9uZ2ItZGF0ZSc7XG5pbXBvcnQge05nYkRhdGVQYXJzZXJGb3JtYXR0ZXJ9IGZyb20gJy4vbmdiLWRhdGUtcGFyc2VyLWZvcm1hdHRlcic7XG5pbXBvcnQge05nYkRhdGVTdHJ1Y3R9IGZyb20gJy4vbmdiLWRhdGUtc3RydWN0JztcblxuY29uc3QgTkdCX0RBVEVQSUNLRVJfVkFMVUVfQUNDRVNTT1IgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBOZ2JJbnB1dERhdGVwaWNrZXIpLFxuICBtdWx0aTogdHJ1ZVxufTtcblxuY29uc3QgTkdCX0RBVEVQSUNLRVJfVkFMSURBVE9SID0ge1xuICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBOZ2JJbnB1dERhdGVwaWNrZXIpLFxuICBtdWx0aTogdHJ1ZVxufTtcblxuLyoqXG4gKiBBIGRpcmVjdGl2ZSB0aGF0IGFsbG93cyB0byBzdGljayBhIGRhdGVwaWNrZXIgcG9wdXAgdG8gYW4gaW5wdXQgZmllbGQuXG4gKlxuICogTWFuYWdlcyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBpbnB1dCBmaWVsZCBpdHNlbGYsIGRvZXMgdmFsdWUgZm9ybWF0dGluZyBhbmQgcHJvdmlkZXMgZm9ybXMgaW50ZWdyYXRpb24uXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ2lucHV0W25nYkRhdGVwaWNrZXJdJyxcbiAgZXhwb3J0QXM6ICduZ2JEYXRlcGlja2VyJyxcbiAgaG9zdDoge1xuICAgICcoaW5wdXQpJzogJ21hbnVhbERhdGVDaGFuZ2UoJGV2ZW50LnRhcmdldC52YWx1ZSknLFxuICAgICcoY2hhbmdlKSc6ICdtYW51YWxEYXRlQ2hhbmdlKCRldmVudC50YXJnZXQudmFsdWUsIHRydWUpJyxcbiAgICAnKGJsdXIpJzogJ29uQmx1cigpJyxcbiAgICAnW2Rpc2FibGVkXSc6ICdkaXNhYmxlZCdcbiAgfSxcbiAgcHJvdmlkZXJzOiBbTkdCX0RBVEVQSUNLRVJfVkFMVUVfQUNDRVNTT1IsIE5HQl9EQVRFUElDS0VSX1ZBTElEQVRPUiwgTmdiRGF0ZXBpY2tlclNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIE5nYklucHV0RGF0ZXBpY2tlciBpbXBsZW1lbnRzIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3Ige1xuICBwcml2YXRlIF9jUmVmOiBDb21wb25lbnRSZWY8TmdiRGF0ZXBpY2tlcj4gPSBudWxsO1xuICBwcml2YXRlIF9kaXNhYmxlZCA9IGZhbHNlO1xuICBwcml2YXRlIF9tb2RlbDogTmdiRGF0ZTtcbiAgcHJpdmF0ZSBfaW5wdXRWYWx1ZTogc3RyaW5nO1xuICBwcml2YXRlIF96b25lU3Vic2NyaXB0aW9uOiBhbnk7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBkYXRlcGlja2VyIHBvcHVwIHNob3VsZCBiZSBjbG9zZWQgYXV0b21hdGljYWxseSBhZnRlciBkYXRlIHNlbGVjdGlvbiAvIG91dHNpZGUgY2xpY2sgb3Igbm90LlxuICAgKlxuICAgKiAqIGB0cnVlYCAtIHRoZSBwb3B1cCB3aWxsIGNsb3NlIG9uIGJvdGggZGF0ZSBzZWxlY3Rpb24gYW5kIG91dHNpZGUgY2xpY2suXG4gICAqICogYGZhbHNlYCAtIHRoZSBwb3B1cCBjYW4gb25seSBiZSBjbG9zZWQgbWFudWFsbHkgdmlhIGBjbG9zZSgpYCBvciBgdG9nZ2xlKClgIG1ldGhvZHMuXG4gICAqICogYFwiaW5zaWRlXCJgIC0gdGhlIHBvcHVwIHdpbGwgY2xvc2Ugb24gZGF0ZSBzZWxlY3Rpb24sIGJ1dCBub3Qgb3V0c2lkZSBjbGlja3MuXG4gICAqICogYFwib3V0c2lkZVwiYCAtIHRoZSBwb3B1cCB3aWxsIGNsb3NlIG9ubHkgb24gdGhlIG91dHNpZGUgY2xpY2sgYW5kIG5vdCBvbiBkYXRlIHNlbGVjdGlvbi9pbnNpZGUgY2xpY2tzLlxuICAgKlxuICAgKiBAc2luY2UgMy4wLjBcbiAgICovXG4gIEBJbnB1dCgpIGF1dG9DbG9zZTogYm9vbGVhbiB8ICdpbnNpZGUnIHwgJ291dHNpZGUnID0gdHJ1ZTtcblxuICAvKipcbiAgICogVGhlIHJlZmVyZW5jZSB0byBhIGN1c3RvbSB0ZW1wbGF0ZSBmb3IgdGhlIGRheS5cbiAgICpcbiAgICogQWxsb3dzIHRvIGNvbXBsZXRlbHkgb3ZlcnJpZGUgdGhlIHdheSBhIGRheSAnY2VsbCcgaW4gdGhlIGNhbGVuZGFyIGlzIGRpc3BsYXllZC5cbiAgICpcbiAgICogU2VlIFtgRGF5VGVtcGxhdGVDb250ZXh0YF0oIy9jb21wb25lbnRzL2RhdGVwaWNrZXIvYXBpI0RheVRlbXBsYXRlQ29udGV4dCkgZm9yIHRoZSBkYXRhIHlvdSBnZXQgaW5zaWRlLlxuICAgKi9cbiAgQElucHV0KCkgZGF5VGVtcGxhdGU6IFRlbXBsYXRlUmVmPERheVRlbXBsYXRlQ29udGV4dD47XG5cbiAgLyoqXG4gICAqIFRoZSBjYWxsYmFjayB0byBwYXNzIGFueSBhcmJpdHJhcnkgZGF0YSB0byB0aGUgdGVtcGxhdGUgY2VsbCB2aWEgdGhlXG4gICAqIFtgRGF5VGVtcGxhdGVDb250ZXh0YF0oIy9jb21wb25lbnRzL2RhdGVwaWNrZXIvYXBpI0RheVRlbXBsYXRlQ29udGV4dCkncyBgZGF0YWAgcGFyYW1ldGVyLlxuICAgKlxuICAgKiBgY3VycmVudGAgaXMgdGhlIG1vbnRoIHRoYXQgaXMgY3VycmVudGx5IGRpc3BsYXllZCBieSB0aGUgZGF0ZXBpY2tlci5cbiAgICpcbiAgICogQHNpbmNlIDMuMy4wXG4gICAqL1xuICBASW5wdXQoKSBkYXlUZW1wbGF0ZURhdGE6IChkYXRlOiBOZ2JEYXRlLCBjdXJyZW50OiB7eWVhcjogbnVtYmVyLCBtb250aDogbnVtYmVyfSkgPT4gYW55O1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIG1vbnRocyB0byBkaXNwbGF5LlxuICAgKi9cbiAgQElucHV0KCkgZGlzcGxheU1vbnRoczogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgKlxuICAgKiBXaXRoIGRlZmF1bHQgY2FsZW5kYXIgd2UgdXNlIElTTyA4NjAxOiAnd2Vla2RheScgaXMgMT1Nb24gLi4uIDc9U3VuLlxuICAgKi9cbiAgQElucHV0KCkgZmlyc3REYXlPZldlZWs6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHJlZmVyZW5jZSB0byB0aGUgY3VzdG9tIHRlbXBsYXRlIGZvciB0aGUgZGF0ZXBpY2tlciBmb290ZXIuXG4gICAqXG4gICAqIEBzaW5jZSAzLjMuMFxuICAgKi9cbiAgQElucHV0KCkgZm9vdGVyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgLyoqXG4gICAqIFRoZSBjYWxsYmFjayB0byBtYXJrIHNvbWUgZGF0ZXMgYXMgZGlzYWJsZWQuXG4gICAqXG4gICAqIEl0IGlzIGNhbGxlZCBmb3IgZWFjaCBuZXcgZGF0ZSB3aGVuIG5hdmlnYXRpbmcgdG8gYSBkaWZmZXJlbnQgbW9udGguXG4gICAqXG4gICAqIGBjdXJyZW50YCBpcyB0aGUgbW9udGggdGhhdCBpcyBjdXJyZW50bHkgZGlzcGxheWVkIGJ5IHRoZSBkYXRlcGlja2VyLlxuICAgKi9cbiAgQElucHV0KCkgbWFya0Rpc2FibGVkOiAoZGF0ZTogTmdiRGF0ZSwgY3VycmVudDoge3llYXI6IG51bWJlciwgbW9udGg6IG51bWJlcn0pID0+IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBlYXJsaWVzdCBkYXRlIHRoYXQgY2FuIGJlIGRpc3BsYXllZCBvciBzZWxlY3RlZC4gQWxzbyB1c2VkIGZvciBmb3JtIHZhbGlkYXRpb24uXG4gICAqXG4gICAqIElmIG5vdCBwcm92aWRlZCwgJ3llYXInIHNlbGVjdCBib3ggd2lsbCBkaXNwbGF5IDEwIHllYXJzIGJlZm9yZSB0aGUgY3VycmVudCBtb250aC5cbiAgICovXG4gIEBJbnB1dCgpIG1pbkRhdGU6IE5nYkRhdGVTdHJ1Y3Q7XG5cbiAgLyoqXG4gICAqIFRoZSBsYXRlc3QgZGF0ZSB0aGF0IGNhbiBiZSBkaXNwbGF5ZWQgb3Igc2VsZWN0ZWQuIEFsc28gdXNlZCBmb3IgZm9ybSB2YWxpZGF0aW9uLlxuICAgKlxuICAgKiBJZiBub3QgcHJvdmlkZWQsICd5ZWFyJyBzZWxlY3QgYm94IHdpbGwgZGlzcGxheSAxMCB5ZWFycyBhZnRlciB0aGUgY3VycmVudCBtb250aC5cbiAgICovXG4gIEBJbnB1dCgpIG1heERhdGU6IE5nYkRhdGVTdHJ1Y3Q7XG5cbiAgLyoqXG4gICAqIE5hdmlnYXRpb24gdHlwZS5cbiAgICpcbiAgICogKiBgXCJzZWxlY3RcImAgLSBzZWxlY3QgYm94ZXMgZm9yIG1vbnRoIGFuZCBuYXZpZ2F0aW9uIGFycm93c1xuICAgKiAqIGBcImFycm93c1wiYCAtIG9ubHkgbmF2aWdhdGlvbiBhcnJvd3NcbiAgICogKiBgXCJub25lXCJgIC0gbm8gbmF2aWdhdGlvbiB2aXNpYmxlIGF0IGFsbFxuICAgKi9cbiAgQElucHV0KCkgbmF2aWdhdGlvbjogJ3NlbGVjdCcgfCAnYXJyb3dzJyB8ICdub25lJztcblxuICAvKipcbiAgICogVGhlIHdheSBvZiBkaXNwbGF5aW5nIGRheXMgdGhhdCBkb24ndCBiZWxvbmcgdG8gdGhlIGN1cnJlbnQgbW9udGguXG4gICAqXG4gICAqICogYFwidmlzaWJsZVwiYCAtIGRheXMgYXJlIHZpc2libGVcbiAgICogKiBgXCJoaWRkZW5cImAgLSBkYXlzIGFyZSBoaWRkZW4sIHdoaXRlIHNwYWNlIHByZXNlcnZlZFxuICAgKiAqIGBcImNvbGxhcHNlZFwiYCAtIGRheXMgYXJlIGNvbGxhcHNlZCwgc28gdGhlIGRhdGVwaWNrZXIgaGVpZ2h0IG1pZ2h0IGNoYW5nZSBiZXR3ZWVuIG1vbnRoc1xuICAgKlxuICAgKiBGb3IgdGhlIDIrIG1vbnRocyB2aWV3LCBkYXlzIGluIGJldHdlZW4gbW9udGhzIGFyZSBuZXZlciBzaG93bi5cbiAgICovXG4gIEBJbnB1dCgpIG91dHNpZGVEYXlzOiAndmlzaWJsZScgfCAnY29sbGFwc2VkJyB8ICdoaWRkZW4nO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJlZmVycmVkIHBsYWNlbWVudCBvZiB0aGUgZGF0ZXBpY2tlciBwb3B1cC5cbiAgICpcbiAgICogUG9zc2libGUgdmFsdWVzIGFyZSBgXCJ0b3BcImAsIGBcInRvcC1sZWZ0XCJgLCBgXCJ0b3AtcmlnaHRcImAsIGBcImJvdHRvbVwiYCwgYFwiYm90dG9tLWxlZnRcImAsXG4gICAqIGBcImJvdHRvbS1yaWdodFwiYCwgYFwibGVmdFwiYCwgYFwibGVmdC10b3BcImAsIGBcImxlZnQtYm90dG9tXCJgLCBgXCJyaWdodFwiYCwgYFwicmlnaHQtdG9wXCJgLFxuICAgKiBgXCJyaWdodC1ib3R0b21cImBcbiAgICpcbiAgICogQWNjZXB0cyBhbiBhcnJheSBvZiBzdHJpbmdzIG9yIGEgc3RyaW5nIHdpdGggc3BhY2Ugc2VwYXJhdGVkIHBvc3NpYmxlIHZhbHVlcy5cbiAgICpcbiAgICogVGhlIGRlZmF1bHQgb3JkZXIgb2YgcHJlZmVyZW5jZSBpcyBgXCJib3R0b20tbGVmdCBib3R0b20tcmlnaHQgdG9wLWxlZnQgdG9wLXJpZ2h0XCJgXG4gICAqXG4gICAqIFBsZWFzZSBzZWUgdGhlIFtwb3NpdGlvbmluZyBvdmVydmlld10oIy9wb3NpdGlvbmluZykgZm9yIG1vcmUgZGV0YWlscy5cbiAgICovXG4gIEBJbnB1dCgpIHBsYWNlbWVudDogUGxhY2VtZW50QXJyYXkgPSBbJ2JvdHRvbS1sZWZ0JywgJ2JvdHRvbS1yaWdodCcsICd0b3AtbGVmdCcsICd0b3AtcmlnaHQnXTtcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB3ZWVrZGF5cyB3aWxsIGJlIGRpc3BsYXllZC5cbiAgICovXG4gIEBJbnB1dCgpIHNob3dXZWVrZGF5czogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB3ZWVrIG51bWJlcnMgd2lsbCBiZSBkaXNwbGF5ZWQuXG4gICAqL1xuICBASW5wdXQoKSBzaG93V2Vla051bWJlcnM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBkYXRlIHRvIG9wZW4gY2FsZW5kYXIgd2l0aC5cbiAgICpcbiAgICogV2l0aCB0aGUgZGVmYXVsdCBjYWxlbmRhciB3ZSB1c2UgSVNPIDg2MDE6ICdtb250aCcgaXMgMT1KYW4gLi4uIDEyPURlYy5cbiAgICogSWYgbm90aGluZyBvciBpbnZhbGlkIGRhdGUgaXMgcHJvdmlkZWQsIGNhbGVuZGFyIHdpbGwgb3BlbiB3aXRoIGN1cnJlbnQgbW9udGguXG4gICAqXG4gICAqIFlvdSBjb3VsZCB1c2UgYG5hdmlnYXRlVG8oZGF0ZSlgIG1ldGhvZCBhcyBhbiBhbHRlcm5hdGl2ZS5cbiAgICovXG4gIEBJbnB1dCgpIHN0YXJ0RGF0ZToge3llYXI6IG51bWJlciwgbW9udGg6IG51bWJlciwgZGF5PzogbnVtYmVyfTtcblxuICAvKipcbiAgICogQSBzZWxlY3RvciBzcGVjaWZ5aW5nIHRoZSBlbGVtZW50IHRoZSBkYXRlcGlja2VyIHBvcHVwIHNob3VsZCBiZSBhcHBlbmRlZCB0by5cbiAgICpcbiAgICogQ3VycmVudGx5IG9ubHkgc3VwcG9ydHMgYFwiYm9keVwiYC5cbiAgICovXG4gIEBJbnB1dCgpIGNvbnRhaW5lcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGNzcyBzZWxlY3RvciBvciBodG1sIGVsZW1lbnQgc3BlY2lmeWluZyB0aGUgZWxlbWVudCB0aGUgZGF0ZXBpY2tlciBwb3B1cCBzaG91bGQgYmUgcG9zaXRpb25lZCBhZ2FpbnN0LlxuICAgKlxuICAgKiBCeSBkZWZhdWx0IHRoZSBpbnB1dCBpcyB1c2VkIGFzIGEgdGFyZ2V0LlxuICAgKlxuICAgKiBAc2luY2UgNC4yLjBcbiAgICovXG4gIEBJbnB1dCgpIHBvc2l0aW9uVGFyZ2V0OiBzdHJpbmcgfCBIVE1MRWxlbWVudDtcblxuICAvKipcbiAgICogQW4gZXZlbnQgZW1pdHRlZCB3aGVuIHVzZXIgc2VsZWN0cyBhIGRhdGUgdXNpbmcga2V5Ym9hcmQgb3IgbW91c2UuXG4gICAqXG4gICAqIFRoZSBwYXlsb2FkIG9mIHRoZSBldmVudCBpcyBjdXJyZW50bHkgc2VsZWN0ZWQgYE5nYkRhdGVgLlxuICAgKlxuICAgKiBAc2luY2UgMS4xLjFcbiAgICovXG4gIEBPdXRwdXQoKSBkYXRlU2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxOZ2JEYXRlPigpO1xuXG4gIC8qKlxuICAgKiBFdmVudCBlbWl0dGVkIHJpZ2h0IGFmdGVyIHRoZSBuYXZpZ2F0aW9uIGhhcHBlbnMgYW5kIGRpc3BsYXllZCBtb250aCBjaGFuZ2VzLlxuICAgKlxuICAgKiBTZWUgW2BOZ2JEYXRlcGlja2VyTmF2aWdhdGVFdmVudGBdKCMvY29tcG9uZW50cy9kYXRlcGlja2VyL2FwaSNOZ2JEYXRlcGlja2VyTmF2aWdhdGVFdmVudCkgZm9yIHRoZSBwYXlsb2FkIGluZm8uXG4gICAqL1xuICBAT3V0cHV0KCkgbmF2aWdhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPE5nYkRhdGVwaWNrZXJOYXZpZ2F0ZUV2ZW50PigpO1xuXG4gIC8qKlxuICAgKiBBbiBldmVudCBmaXJlZCBhZnRlciBjbG9zaW5nIGRhdGVwaWNrZXIgd2luZG93LlxuICAgKlxuICAgKiBAc2luY2UgNC4yLjBcbiAgICovXG4gIEBPdXRwdXQoKSBjbG9zZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQElucHV0KClcbiAgZ2V0IGRpc2FibGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgfVxuICBzZXQgZGlzYWJsZWQodmFsdWU6IGFueSkge1xuICAgIHRoaXMuX2Rpc2FibGVkID0gdmFsdWUgPT09ICcnIHx8ICh2YWx1ZSAmJiB2YWx1ZSAhPT0gJ2ZhbHNlJyk7XG5cbiAgICBpZiAodGhpcy5pc09wZW4oKSkge1xuICAgICAgdGhpcy5fY1JlZi5pbnN0YW5jZS5zZXREaXNhYmxlZFN0YXRlKHRoaXMuX2Rpc2FibGVkKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9vbkNoYW5nZSA9IChfOiBhbnkpID0+IHt9O1xuICBwcml2YXRlIF9vblRvdWNoZWQgPSAoKSA9PiB7fTtcbiAgcHJpdmF0ZSBfdmFsaWRhdG9yQ2hhbmdlID0gKCkgPT4ge307XG5cblxuICBjb25zdHJ1Y3RvcihcbiAgICAgIHByaXZhdGUgX3BhcnNlckZvcm1hdHRlcjogTmdiRGF0ZVBhcnNlckZvcm1hdHRlciwgcHJpdmF0ZSBfZWxSZWY6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD4sXG4gICAgICBwcml2YXRlIF92Y1JlZjogVmlld0NvbnRhaW5lclJlZiwgcHJpdmF0ZSBfcmVuZGVyZXI6IFJlbmRlcmVyMiwgcHJpdmF0ZSBfY2ZyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgICBwcml2YXRlIF9uZ1pvbmU6IE5nWm9uZSwgcHJpdmF0ZSBfc2VydmljZTogTmdiRGF0ZXBpY2tlclNlcnZpY2UsIHByaXZhdGUgX2NhbGVuZGFyOiBOZ2JDYWxlbmRhcixcbiAgICAgIHByaXZhdGUgX2RhdGVBZGFwdGVyOiBOZ2JEYXRlQWRhcHRlcjxhbnk+LCBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIF9kb2N1bWVudDogYW55LFxuICAgICAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgdGhpcy5fem9uZVN1YnNjcmlwdGlvbiA9IF9uZ1pvbmUub25TdGFibGUuc3Vic2NyaWJlKCgpID0+IHRoaXMuX3VwZGF0ZVBvcHVwUG9zaXRpb24oKSk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IGFueSkgPT4gYW55KTogdm9pZCB7IHRoaXMuX29uQ2hhbmdlID0gZm47IH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gYW55KTogdm9pZCB7IHRoaXMuX29uVG91Y2hlZCA9IGZuOyB9XG5cbiAgcmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShmbjogKCkgPT4gdm9pZCk6IHZvaWQgeyB0aGlzLl92YWxpZGF0b3JDaGFuZ2UgPSBmbjsgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQgeyB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDsgfVxuXG4gIHZhbGlkYXRlKGM6IEFic3RyYWN0Q29udHJvbCk6IHtba2V5OiBzdHJpbmddOiBhbnl9IHtcbiAgICBjb25zdCB2YWx1ZSA9IGMudmFsdWU7XG5cbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgbmdiRGF0ZSA9IHRoaXMuX2Zyb21EYXRlU3RydWN0KHRoaXMuX2RhdGVBZGFwdGVyLmZyb21Nb2RlbCh2YWx1ZSkpO1xuXG4gICAgaWYgKCF0aGlzLl9jYWxlbmRhci5pc1ZhbGlkKG5nYkRhdGUpKSB7XG4gICAgICByZXR1cm4geyduZ2JEYXRlJzoge2ludmFsaWQ6IGMudmFsdWV9fTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5taW5EYXRlICYmIG5nYkRhdGUuYmVmb3JlKE5nYkRhdGUuZnJvbSh0aGlzLm1pbkRhdGUpKSkge1xuICAgICAgcmV0dXJuIHsnbmdiRGF0ZSc6IHtyZXF1aXJlZEJlZm9yZTogdGhpcy5taW5EYXRlfX07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWF4RGF0ZSAmJiBuZ2JEYXRlLmFmdGVyKE5nYkRhdGUuZnJvbSh0aGlzLm1heERhdGUpKSkge1xuICAgICAgcmV0dXJuIHsnbmdiRGF0ZSc6IHtyZXF1aXJlZEFmdGVyOiB0aGlzLm1heERhdGV9fTtcbiAgICB9XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlKSB7XG4gICAgdGhpcy5fbW9kZWwgPSB0aGlzLl9mcm9tRGF0ZVN0cnVjdCh0aGlzLl9kYXRlQWRhcHRlci5mcm9tTW9kZWwodmFsdWUpKTtcbiAgICB0aGlzLl93cml0ZU1vZGVsVmFsdWUodGhpcy5fbW9kZWwpO1xuICB9XG5cbiAgbWFudWFsRGF0ZUNoYW5nZSh2YWx1ZTogc3RyaW5nLCB1cGRhdGVWaWV3ID0gZmFsc2UpIHtcbiAgICBjb25zdCBpbnB1dFZhbHVlQ2hhbmdlZCA9IHZhbHVlICE9PSB0aGlzLl9pbnB1dFZhbHVlO1xuICAgIGlmIChpbnB1dFZhbHVlQ2hhbmdlZCkge1xuICAgICAgdGhpcy5faW5wdXRWYWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy5fbW9kZWwgPSB0aGlzLl9mcm9tRGF0ZVN0cnVjdCh0aGlzLl9wYXJzZXJGb3JtYXR0ZXIucGFyc2UodmFsdWUpKTtcbiAgICB9XG4gICAgaWYgKGlucHV0VmFsdWVDaGFuZ2VkIHx8ICF1cGRhdGVWaWV3KSB7XG4gICAgICB0aGlzLl9vbkNoYW5nZSh0aGlzLl9tb2RlbCA/IHRoaXMuX2RhdGVBZGFwdGVyLnRvTW9kZWwodGhpcy5fbW9kZWwpIDogKHZhbHVlID09PSAnJyA/IG51bGwgOiB2YWx1ZSkpO1xuICAgIH1cbiAgICBpZiAodXBkYXRlVmlldyAmJiB0aGlzLl9tb2RlbCkge1xuICAgICAgdGhpcy5fd3JpdGVNb2RlbFZhbHVlKHRoaXMuX21vZGVsKTtcbiAgICB9XG4gIH1cblxuICBpc09wZW4oKSB7IHJldHVybiAhIXRoaXMuX2NSZWY7IH1cblxuICAvKipcbiAgICogT3BlbnMgdGhlIGRhdGVwaWNrZXIgcG9wdXAuXG4gICAqXG4gICAqIElmIHRoZSByZWxhdGVkIGZvcm0gY29udHJvbCBjb250YWlucyBhIHZhbGlkIGRhdGUsIHRoZSBjb3JyZXNwb25kaW5nIG1vbnRoIHdpbGwgYmUgb3BlbmVkLlxuICAgKi9cbiAgb3BlbigpIHtcbiAgICBpZiAoIXRoaXMuaXNPcGVuKCkpIHtcbiAgICAgIGNvbnN0IGNmID0gdGhpcy5fY2ZyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KE5nYkRhdGVwaWNrZXIpO1xuICAgICAgdGhpcy5fY1JlZiA9IHRoaXMuX3ZjUmVmLmNyZWF0ZUNvbXBvbmVudChjZik7XG5cbiAgICAgIHRoaXMuX2FwcGx5UG9wdXBTdHlsaW5nKHRoaXMuX2NSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XG4gICAgICB0aGlzLl9hcHBseURhdGVwaWNrZXJJbnB1dHModGhpcy5fY1JlZi5pbnN0YW5jZSk7XG4gICAgICB0aGlzLl9zdWJzY3JpYmVGb3JEYXRlcGlja2VyT3V0cHV0cyh0aGlzLl9jUmVmLmluc3RhbmNlKTtcbiAgICAgIHRoaXMuX2NSZWYuaW5zdGFuY2UubmdPbkluaXQoKTtcbiAgICAgIHRoaXMuX2NSZWYuaW5zdGFuY2Uud3JpdGVWYWx1ZSh0aGlzLl9kYXRlQWRhcHRlci50b01vZGVsKHRoaXMuX21vZGVsKSk7XG5cbiAgICAgIC8vIGRhdGUgc2VsZWN0aW9uIGV2ZW50IGhhbmRsaW5nXG4gICAgICB0aGlzLl9jUmVmLmluc3RhbmNlLnJlZ2lzdGVyT25DaGFuZ2UoKHNlbGVjdGVkRGF0ZSkgPT4ge1xuICAgICAgICB0aGlzLndyaXRlVmFsdWUoc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgdGhpcy5fb25DaGFuZ2Uoc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgdGhpcy5fb25Ub3VjaGVkKCk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5fY1JlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgIHRoaXMuX2NSZWYuaW5zdGFuY2Uuc2V0RGlzYWJsZWRTdGF0ZSh0aGlzLmRpc2FibGVkKTtcblxuICAgICAgaWYgKHRoaXMuY29udGFpbmVyID09PSAnYm9keScpIHtcbiAgICAgICAgd2luZG93LmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5jb250YWluZXIpLmFwcGVuZENoaWxkKHRoaXMuX2NSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGZvY3VzIGhhbmRsaW5nXG4gICAgICBuZ2JGb2N1c1RyYXAodGhpcy5fY1JlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LCB0aGlzLmNsb3NlZCwgdHJ1ZSk7XG4gICAgICB0aGlzLl9jUmVmLmluc3RhbmNlLmZvY3VzKCk7XG5cbiAgICAgIG5nYkF1dG9DbG9zZShcbiAgICAgICAgICB0aGlzLl9uZ1pvbmUsIHRoaXMuX2RvY3VtZW50LCB0aGlzLmF1dG9DbG9zZSwgKCkgPT4gdGhpcy5jbG9zZSgpLCB0aGlzLmNsb3NlZCwgW10sXG4gICAgICAgICAgW3RoaXMuX2VsUmVmLm5hdGl2ZUVsZW1lbnQsIHRoaXMuX2NSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudF0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIGRhdGVwaWNrZXIgcG9wdXAuXG4gICAqL1xuICBjbG9zZSgpIHtcbiAgICBpZiAodGhpcy5pc09wZW4oKSkge1xuICAgICAgdGhpcy5fdmNSZWYucmVtb3ZlKHRoaXMuX3ZjUmVmLmluZGV4T2YodGhpcy5fY1JlZi5ob3N0VmlldykpO1xuICAgICAgdGhpcy5fY1JlZiA9IG51bGw7XG4gICAgICB0aGlzLmNsb3NlZC5lbWl0KCk7XG4gICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlcyB0aGUgZGF0ZXBpY2tlciBwb3B1cC5cbiAgICovXG4gIHRvZ2dsZSgpIHtcbiAgICBpZiAodGhpcy5pc09wZW4oKSkge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wZW4oKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTmF2aWdhdGVzIHRvIHRoZSBwcm92aWRlZCBkYXRlLlxuICAgKlxuICAgKiBXaXRoIHRoZSBkZWZhdWx0IGNhbGVuZGFyIHdlIHVzZSBJU08gODYwMTogJ21vbnRoJyBpcyAxPUphbiAuLi4gMTI9RGVjLlxuICAgKiBJZiBub3RoaW5nIG9yIGludmFsaWQgZGF0ZSBwcm92aWRlZCBjYWxlbmRhciB3aWxsIG9wZW4gY3VycmVudCBtb250aC5cbiAgICpcbiAgICogVXNlIHRoZSBgW3N0YXJ0RGF0ZV1gIGlucHV0IGFzIGFuIGFsdGVybmF0aXZlLlxuICAgKi9cbiAgbmF2aWdhdGVUbyhkYXRlPzoge3llYXI6IG51bWJlciwgbW9udGg6IG51bWJlciwgZGF5PzogbnVtYmVyfSkge1xuICAgIGlmICh0aGlzLmlzT3BlbigpKSB7XG4gICAgICB0aGlzLl9jUmVmLmluc3RhbmNlLm5hdmlnYXRlVG8oZGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgb25CbHVyKCkgeyB0aGlzLl9vblRvdWNoZWQoKTsgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlc1snbWluRGF0ZSddIHx8IGNoYW5nZXNbJ21heERhdGUnXSkge1xuICAgICAgdGhpcy5fdmFsaWRhdG9yQ2hhbmdlKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5jbG9zZSgpO1xuICAgIHRoaXMuX3pvbmVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2FwcGx5RGF0ZXBpY2tlcklucHV0cyhkYXRlcGlja2VySW5zdGFuY2U6IE5nYkRhdGVwaWNrZXIpOiB2b2lkIHtcbiAgICBbJ2RheVRlbXBsYXRlJywgJ2RheVRlbXBsYXRlRGF0YScsICdkaXNwbGF5TW9udGhzJywgJ2ZpcnN0RGF5T2ZXZWVrJywgJ2Zvb3RlclRlbXBsYXRlJywgJ21hcmtEaXNhYmxlZCcsICdtaW5EYXRlJyxcbiAgICAgJ21heERhdGUnLCAnbmF2aWdhdGlvbicsICdvdXRzaWRlRGF5cycsICdzaG93TmF2aWdhdGlvbicsICdzaG93V2Vla2RheXMnLCAnc2hvd1dlZWtOdW1iZXJzJ11cbiAgICAgICAgLmZvckVhY2goKG9wdGlvbk5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGlmICh0aGlzW29wdGlvbk5hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGRhdGVwaWNrZXJJbnN0YW5jZVtvcHRpb25OYW1lXSA9IHRoaXNbb3B0aW9uTmFtZV07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICBkYXRlcGlja2VySW5zdGFuY2Uuc3RhcnREYXRlID0gdGhpcy5zdGFydERhdGUgfHwgdGhpcy5fbW9kZWw7XG4gIH1cblxuICBwcml2YXRlIF9hcHBseVBvcHVwU3R5bGluZyhuYXRpdmVFbGVtZW50OiBhbnkpIHtcbiAgICB0aGlzLl9yZW5kZXJlci5hZGRDbGFzcyhuYXRpdmVFbGVtZW50LCAnZHJvcGRvd24tbWVudScpO1xuICAgIHRoaXMuX3JlbmRlcmVyLmFkZENsYXNzKG5hdGl2ZUVsZW1lbnQsICdzaG93Jyk7XG5cbiAgICBpZiAodGhpcy5jb250YWluZXIgPT09ICdib2R5Jykge1xuICAgICAgdGhpcy5fcmVuZGVyZXIuYWRkQ2xhc3MobmF0aXZlRWxlbWVudCwgJ25nYi1kcC1ib2R5Jyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc3Vic2NyaWJlRm9yRGF0ZXBpY2tlck91dHB1dHMoZGF0ZXBpY2tlckluc3RhbmNlOiBOZ2JEYXRlcGlja2VyKSB7XG4gICAgZGF0ZXBpY2tlckluc3RhbmNlLm5hdmlnYXRlLnN1YnNjcmliZShuYXZpZ2F0ZUV2ZW50ID0+IHRoaXMubmF2aWdhdGUuZW1pdChuYXZpZ2F0ZUV2ZW50KSk7XG4gICAgZGF0ZXBpY2tlckluc3RhbmNlLnNlbGVjdC5zdWJzY3JpYmUoZGF0ZSA9PiB7XG4gICAgICB0aGlzLmRhdGVTZWxlY3QuZW1pdChkYXRlKTtcbiAgICAgIGlmICh0aGlzLmF1dG9DbG9zZSA9PT0gdHJ1ZSB8fCB0aGlzLmF1dG9DbG9zZSA9PT0gJ2luc2lkZScpIHtcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfd3JpdGVNb2RlbFZhbHVlKG1vZGVsOiBOZ2JEYXRlKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLl9wYXJzZXJGb3JtYXR0ZXIuZm9ybWF0KG1vZGVsKTtcbiAgICB0aGlzLl9pbnB1dFZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxSZWYubmF0aXZlRWxlbWVudCwgJ3ZhbHVlJywgdmFsdWUpO1xuICAgIGlmICh0aGlzLmlzT3BlbigpKSB7XG4gICAgICB0aGlzLl9jUmVmLmluc3RhbmNlLndyaXRlVmFsdWUodGhpcy5fZGF0ZUFkYXB0ZXIudG9Nb2RlbChtb2RlbCkpO1xuICAgICAgdGhpcy5fb25Ub3VjaGVkKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZnJvbURhdGVTdHJ1Y3QoZGF0ZTogTmdiRGF0ZVN0cnVjdCk6IE5nYkRhdGUge1xuICAgIGNvbnN0IG5nYkRhdGUgPSBkYXRlID8gbmV3IE5nYkRhdGUoZGF0ZS55ZWFyLCBkYXRlLm1vbnRoLCBkYXRlLmRheSkgOiBudWxsO1xuICAgIHJldHVybiB0aGlzLl9jYWxlbmRhci5pc1ZhbGlkKG5nYkRhdGUpID8gbmdiRGF0ZSA6IG51bGw7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVQb3B1cFBvc2l0aW9uKCkge1xuICAgIGlmICghdGhpcy5fY1JlZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBob3N0RWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gICAgaWYgKHR5cGVvZiB0aGlzLnBvc2l0aW9uVGFyZ2V0ID09PSAnc3RyaW5nJykge1xuICAgICAgaG9zdEVsZW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLnBvc2l0aW9uVGFyZ2V0KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucG9zaXRpb25UYXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgaG9zdEVsZW1lbnQgPSB0aGlzLnBvc2l0aW9uVGFyZ2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICBob3N0RWxlbWVudCA9IHRoaXMuX2VsUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucG9zaXRpb25UYXJnZXQgJiYgIWhvc3RFbGVtZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ25nYkRhdGVwaWNrZXIgY291bGQgbm90IGZpbmQgZWxlbWVudCBkZWNsYXJlZCBpbiBbcG9zaXRpb25UYXJnZXRdIHRvIHBvc2l0aW9uIGFnYWluc3QuJyk7XG4gICAgfVxuXG4gICAgcG9zaXRpb25FbGVtZW50cyhob3N0RWxlbWVudCwgdGhpcy5fY1JlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LCB0aGlzLnBsYWNlbWVudCwgdGhpcy5jb250YWluZXIgPT09ICdib2R5Jyk7XG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/datepicker/datepicker-keymap-service.js b/dist/sunbird-ui-components/esm5/datepicker/datepicker-keymap-service.js new file mode 100644 index 0000000..5dcdb55 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/datepicker/datepicker-keymap-service.js @@ -0,0 +1,114 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Injectable } from '@angular/core'; +import { NgbDatepickerService } from './datepicker-service'; +import { NgbCalendar } from './ngb-calendar'; +import { Key } from '../util/key'; +var NgbDatepickerKeyMapService = /** @class */ (function () { + function NgbDatepickerKeyMapService(_service, _calendar) { + var _this = this; + this._service = _service; + this._calendar = _calendar; + _service.model$.subscribe((/** + * @param {?} model + * @return {?} + */ + function (model) { + _this._minDate = model.minDate; + _this._maxDate = model.maxDate; + _this._firstViewDate = model.firstDate; + _this._lastViewDate = model.lastDate; + })); + } + /** + * @param {?} event + * @return {?} + */ + NgbDatepickerKeyMapService.prototype.processKey = /** + * @param {?} event + * @return {?} + */ + function (event) { + // tslint:disable-next-line:deprecation + switch (event.which) { + case Key.PageUp: + this._service.focusMove(event.shiftKey ? 'y' : 'm', -1); + break; + case Key.PageDown: + this._service.focusMove(event.shiftKey ? 'y' : 'm', 1); + break; + case Key.End: + this._service.focus(event.shiftKey ? this._maxDate : this._lastViewDate); + break; + case Key.Home: + this._service.focus(event.shiftKey ? this._minDate : this._firstViewDate); + break; + case Key.ArrowLeft: + this._service.focusMove('d', -1); + break; + case Key.ArrowUp: + this._service.focusMove('d', -this._calendar.getDaysPerWeek()); + break; + case Key.ArrowRight: + this._service.focusMove('d', 1); + break; + case Key.ArrowDown: + this._service.focusMove('d', this._calendar.getDaysPerWeek()); + break; + case Key.Enter: + case Key.Space: + this._service.focusSelect(); + break; + default: + return; + } + // note 'return' in default case + event.preventDefault(); + event.stopPropagation(); + }; + NgbDatepickerKeyMapService.decorators = [ + { type: Injectable } + ]; + /** @nocollapse */ + NgbDatepickerKeyMapService.ctorParameters = function () { return [ + { type: NgbDatepickerService }, + { type: NgbCalendar } + ]; }; + return NgbDatepickerKeyMapService; +}()); +export { NgbDatepickerKeyMapService }; +if (false) { + /** + * @type {?} + * @private + */ + NgbDatepickerKeyMapService.prototype._minDate; + /** + * @type {?} + * @private + */ + NgbDatepickerKeyMapService.prototype._maxDate; + /** + * @type {?} + * @private + */ + NgbDatepickerKeyMapService.prototype._firstViewDate; + /** + * @type {?} + * @private + */ + NgbDatepickerKeyMapService.prototype._lastViewDate; + /** + * @type {?} + * @private + */ + NgbDatepickerKeyMapService.prototype._service; + /** + * @type {?} + * @private + */ + NgbDatepickerKeyMapService.prototype._calendar; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1rZXltYXAtc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImRhdGVwaWNrZXIvZGF0ZXBpY2tlci1rZXltYXAtc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUdoQztJQU9FLG9DQUFvQixRQUE4QixFQUFVLFNBQXNCO1FBQWxGLGlCQU9DO1FBUG1CLGFBQVEsR0FBUixRQUFRLENBQXNCO1FBQVUsY0FBUyxHQUFULFNBQVMsQ0FBYTtRQUNoRixRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVM7Ozs7UUFBQyxVQUFBLEtBQUs7WUFDN0IsS0FBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQzlCLEtBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUM5QixLQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7WUFDdEMsS0FBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQ3RDLENBQUMsRUFBQyxDQUFDO0lBQ0wsQ0FBQzs7Ozs7SUFFRCwrQ0FBVTs7OztJQUFWLFVBQVcsS0FBb0I7UUFDN0IsdUNBQXVDO1FBQ3ZDLFFBQVEsS0FBSyxDQUFDLEtBQUssRUFBRTtZQUNuQixLQUFLLEdBQUcsQ0FBQyxNQUFNO2dCQUNiLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hELE1BQU07WUFDUixLQUFLLEdBQUcsQ0FBQyxRQUFRO2dCQUNmLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUN2RCxNQUFNO1lBQ1IsS0FBSyxHQUFHLENBQUMsR0FBRztnQkFDVixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ3pFLE1BQU07WUFDUixLQUFLLEdBQUcsQ0FBQyxJQUFJO2dCQUNYLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDMUUsTUFBTTtZQUNSLEtBQUssR0FBRyxDQUFDLFNBQVM7Z0JBQ2hCLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNqQyxNQUFNO1lBQ1IsS0FBSyxHQUFHLENBQUMsT0FBTztnQkFDZCxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7Z0JBQy9ELE1BQU07WUFDUixLQUFLLEdBQUcsQ0FBQyxVQUFVO2dCQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hDLE1BQU07WUFDUixLQUFLLEdBQUcsQ0FBQyxTQUFTO2dCQUNoQixJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO2dCQUM5RCxNQUFNO1lBQ1IsS0FBSyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQ2YsS0FBSyxHQUFHLENBQUMsS0FBSztnQkFDWixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUM1QixNQUFNO1lBQ1I7Z0JBQ0UsT0FBTztTQUNWO1FBRUQsZ0NBQWdDO1FBQ2hDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDMUIsQ0FBQzs7Z0JBdERGLFVBQVU7Ozs7Z0JBTEgsb0JBQW9CO2dCQUNwQixXQUFXOztJQTJEbkIsaUNBQUM7Q0FBQSxBQXZERCxJQXVEQztTQXREWSwwQkFBMEI7Ozs7OztJQUNyQyw4Q0FBMEI7Ozs7O0lBQzFCLDhDQUEwQjs7Ozs7SUFDMUIsb0RBQWdDOzs7OztJQUNoQyxtREFBK0I7Ozs7O0lBRW5CLDhDQUFzQzs7Ozs7SUFBRSwrQ0FBOEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtOZ2JEYXRlcGlja2VyU2VydmljZX0gZnJvbSAnLi9kYXRlcGlja2VyLXNlcnZpY2UnO1xuaW1wb3J0IHtOZ2JDYWxlbmRhcn0gZnJvbSAnLi9uZ2ItY2FsZW5kYXInO1xuaW1wb3J0IHtLZXl9IGZyb20gJy4uL3V0aWwva2V5JztcbmltcG9ydCB7TmdiRGF0ZX0gZnJvbSAnLi9uZ2ItZGF0ZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBOZ2JEYXRlcGlja2VyS2V5TWFwU2VydmljZSB7XG4gIHByaXZhdGUgX21pbkRhdGU6IE5nYkRhdGU7XG4gIHByaXZhdGUgX21heERhdGU6IE5nYkRhdGU7XG4gIHByaXZhdGUgX2ZpcnN0Vmlld0RhdGU6IE5nYkRhdGU7XG4gIHByaXZhdGUgX2xhc3RWaWV3RGF0ZTogTmdiRGF0ZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9zZXJ2aWNlOiBOZ2JEYXRlcGlja2VyU2VydmljZSwgcHJpdmF0ZSBfY2FsZW5kYXI6IE5nYkNhbGVuZGFyKSB7XG4gICAgX3NlcnZpY2UubW9kZWwkLnN1YnNjcmliZShtb2RlbCA9PiB7XG4gICAgICB0aGlzLl9taW5EYXRlID0gbW9kZWwubWluRGF0ZTtcbiAgICAgIHRoaXMuX21heERhdGUgPSBtb2RlbC5tYXhEYXRlO1xuICAgICAgdGhpcy5fZmlyc3RWaWV3RGF0ZSA9IG1vZGVsLmZpcnN0RGF0ZTtcbiAgICAgIHRoaXMuX2xhc3RWaWV3RGF0ZSA9IG1vZGVsLmxhc3REYXRlO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvY2Vzc0tleShldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpkZXByZWNhdGlvblxuICAgIHN3aXRjaCAoZXZlbnQud2hpY2gpIHtcbiAgICAgIGNhc2UgS2V5LlBhZ2VVcDpcbiAgICAgICAgdGhpcy5fc2VydmljZS5mb2N1c01vdmUoZXZlbnQuc2hpZnRLZXkgPyAneScgOiAnbScsIC0xKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEtleS5QYWdlRG93bjpcbiAgICAgICAgdGhpcy5fc2VydmljZS5mb2N1c01vdmUoZXZlbnQuc2hpZnRLZXkgPyAneScgOiAnbScsIDEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgS2V5LkVuZDpcbiAgICAgICAgdGhpcy5fc2VydmljZS5mb2N1cyhldmVudC5zaGlmdEtleSA/IHRoaXMuX21heERhdGUgOiB0aGlzLl9sYXN0Vmlld0RhdGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgS2V5LkhvbWU6XG4gICAgICAgIHRoaXMuX3NlcnZpY2UuZm9jdXMoZXZlbnQuc2hpZnRLZXkgPyB0aGlzLl9taW5EYXRlIDogdGhpcy5fZmlyc3RWaWV3RGF0ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBLZXkuQXJyb3dMZWZ0OlxuICAgICAgICB0aGlzLl9zZXJ2aWNlLmZvY3VzTW92ZSgnZCcsIC0xKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEtleS5BcnJvd1VwOlxuICAgICAgICB0aGlzLl9zZXJ2aWNlLmZvY3VzTW92ZSgnZCcsIC10aGlzLl9jYWxlbmRhci5nZXREYXlzUGVyV2VlaygpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEtleS5BcnJvd1JpZ2h0OlxuICAgICAgICB0aGlzLl9zZXJ2aWNlLmZvY3VzTW92ZSgnZCcsIDEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgS2V5LkFycm93RG93bjpcbiAgICAgICAgdGhpcy5fc2VydmljZS5mb2N1c01vdmUoJ2QnLCB0aGlzLl9jYWxlbmRhci5nZXREYXlzUGVyV2VlaygpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEtleS5FbnRlcjpcbiAgICAgIGNhc2UgS2V5LlNwYWNlOlxuICAgICAgICB0aGlzLl9zZXJ2aWNlLmZvY3VzU2VsZWN0KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIG5vdGUgJ3JldHVybicgaW4gZGVmYXVsdCBjYXNlXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/datepicker/datepicker-month-view.js b/dist/sunbird-ui-components/esm5/datepicker/datepicker-month-view.js new file mode 100644 index 0000000..bd43d81 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/datepicker/datepicker-month-view.js @@ -0,0 +1,62 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Component, Input, TemplateRef, Output, EventEmitter, ViewEncapsulation } from '@angular/core'; +import { NgbDatepickerI18n } from './datepicker-i18n'; +var NgbDatepickerMonthView = /** @class */ (function () { + function NgbDatepickerMonthView(i18n) { + this.i18n = i18n; + this.select = new EventEmitter(); + } + /** + * @param {?} day + * @return {?} + */ + NgbDatepickerMonthView.prototype.doSelect = /** + * @param {?} day + * @return {?} + */ + function (day) { + if (!day.context.disabled && !day.hidden) { + this.select.emit(day.date); + } + }; + NgbDatepickerMonthView.decorators = [ + { type: Component, args: [{ + selector: 'ngb-datepicker-month-view', + host: { 'role': 'grid' }, + encapsulation: ViewEncapsulation.None, + template: "\n
\n
\n
\n {{ i18n.getWeekdayShortName(w) }}\n
\n
\n \n
\n
{{ i18n.getWeekNumerals(week.number) }}
\n
\n \n \n \n
\n
\n
\n ", + styles: ["ngb-datepicker-month-view{display:block}.ngb-dp-week-number,.ngb-dp-weekday{line-height:2rem;text-align:center;font-style:italic}.ngb-dp-weekday{color:#5bc0de;color:var(--info)}.ngb-dp-week{border-radius:.25rem;display:-ms-flexbox;display:flex}.ngb-dp-weekdays{border-bottom:1px solid rgba(0,0,0,.125);border-radius:0}.ngb-dp-day,.ngb-dp-week-number,.ngb-dp-weekday{width:2rem;height:2rem}.ngb-dp-day{cursor:pointer}.ngb-dp-day.disabled,.ngb-dp-day.hidden{cursor:default}"] + }] } + ]; + /** @nocollapse */ + NgbDatepickerMonthView.ctorParameters = function () { return [ + { type: NgbDatepickerI18n } + ]; }; + NgbDatepickerMonthView.propDecorators = { + dayTemplate: [{ type: Input }], + month: [{ type: Input }], + showWeekdays: [{ type: Input }], + showWeekNumbers: [{ type: Input }], + select: [{ type: Output }] + }; + return NgbDatepickerMonthView; +}()); +export { NgbDatepickerMonthView }; +if (false) { + /** @type {?} */ + NgbDatepickerMonthView.prototype.dayTemplate; + /** @type {?} */ + NgbDatepickerMonthView.prototype.month; + /** @type {?} */ + NgbDatepickerMonthView.prototype.showWeekdays; + /** @type {?} */ + NgbDatepickerMonthView.prototype.showWeekNumbers; + /** @type {?} */ + NgbDatepickerMonthView.prototype.select; + /** @type {?} */ + NgbDatepickerMonthView.prototype.i18n; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1tb250aC12aWV3LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiZGF0ZXBpY2tlci9kYXRlcGlja2VyLW1vbnRoLXZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBR3JHLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBR3BEO0lBcUNFLGdDQUFtQixJQUF1QjtRQUF2QixTQUFJLEdBQUosSUFBSSxDQUFtQjtRQUZoQyxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztJQUVGLENBQUM7Ozs7O0lBRTlDLHlDQUFROzs7O0lBQVIsVUFBUyxHQUFpQjtRQUN4QixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFO1lBQ3hDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM1QjtJQUNILENBQUM7O2dCQTNDRixTQUFTLFNBQUM7b0JBQ1QsUUFBUSxFQUFFLDJCQUEyQjtvQkFDckMsSUFBSSxFQUFFLEVBQUMsTUFBTSxFQUFFLE1BQU0sRUFBQztvQkFDdEIsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7b0JBRXJDLFFBQVEsRUFBRSx1cENBc0JUOztpQkFDRjs7OztnQkEvQk8saUJBQWlCOzs7OEJBaUN0QixLQUFLO3dCQUNMLEtBQUs7K0JBQ0wsS0FBSztrQ0FDTCxLQUFLO3lCQUVMLE1BQU07O0lBU1QsNkJBQUM7Q0FBQSxBQTVDRCxJQTRDQztTQWZZLHNCQUFzQjs7O0lBQ2pDLDZDQUFzRDs7SUFDdEQsdUNBQStCOztJQUMvQiw4Q0FBc0I7O0lBQ3RCLGlEQUF5Qjs7SUFFekIsd0NBQStDOztJQUVuQyxzQ0FBOEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5wdXQsIFRlbXBsYXRlUmVmLCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgVmlld0VuY2Fwc3VsYXRpb259IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtNb250aFZpZXdNb2RlbCwgRGF5Vmlld01vZGVsfSBmcm9tICcuL2RhdGVwaWNrZXItdmlldy1tb2RlbCc7XG5pbXBvcnQge05nYkRhdGV9IGZyb20gJy4vbmdiLWRhdGUnO1xuaW1wb3J0IHtOZ2JEYXRlcGlja2VySTE4bn0gZnJvbSAnLi9kYXRlcGlja2VyLWkxOG4nO1xuaW1wb3J0IHtEYXlUZW1wbGF0ZUNvbnRleHR9IGZyb20gJy4vZGF0ZXBpY2tlci1kYXktdGVtcGxhdGUtY29udGV4dCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25nYi1kYXRlcGlja2VyLW1vbnRoLXZpZXcnLFxuICBob3N0OiB7J3JvbGUnOiAnZ3JpZCd9LFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBzdHlsZVVybHM6IFsnLi9kYXRlcGlja2VyLW1vbnRoLXZpZXcuc2NzcyddLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgKm5nSWY9XCJzaG93V2Vla2RheXNcIiBjbGFzcz1cIm5nYi1kcC13ZWVrIG5nYi1kcC13ZWVrZGF5cyBiZy1saWdodFwiPlxuICAgICAgPGRpdiAqbmdJZj1cInNob3dXZWVrTnVtYmVyc1wiIGNsYXNzPVwibmdiLWRwLXdlZWtkYXkgbmdiLWRwLXNob3d3ZWVrXCI+PC9kaXY+XG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCB3IG9mIG1vbnRoLndlZWtkYXlzXCIgY2xhc3M9XCJuZ2ItZHAtd2Vla2RheSBzbWFsbFwiPlxuICAgICAgICB7eyBpMThuLmdldFdlZWtkYXlTaG9ydE5hbWUodykgfX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxuZy10ZW1wbGF0ZSBuZ0ZvciBsZXQtd2VlayBbbmdGb3JPZl09XCJtb250aC53ZWVrc1wiPlxuICAgICAgPGRpdiAqbmdJZj1cIiF3ZWVrLmNvbGxhcHNlZFwiIGNsYXNzPVwibmdiLWRwLXdlZWtcIiByb2xlPVwicm93XCI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93V2Vla051bWJlcnNcIiBjbGFzcz1cIm5nYi1kcC13ZWVrLW51bWJlciBzbWFsbCB0ZXh0LW11dGVkXCI+e3sgaTE4bi5nZXRXZWVrTnVtZXJhbHMod2Vlay5udW1iZXIpIH19PC9kaXY+XG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGRheSBvZiB3ZWVrLmRheXNcIiAoY2xpY2spPVwiZG9TZWxlY3QoZGF5KVwiIGNsYXNzPVwibmdiLWRwLWRheVwiIHJvbGU9XCJncmlkY2VsbFwiXG4gICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cImRheS5jb250ZXh0LmRpc2FibGVkXCJcbiAgICAgICAgICBbdGFiaW5kZXhdPVwiZGF5LnRhYmluZGV4XCJcbiAgICAgICAgICBbY2xhc3MuaGlkZGVuXT1cImRheS5oaWRkZW5cIlxuICAgICAgICAgIFtjbGFzcy5uZ2ItZHAtdG9kYXldPVwiZGF5LmNvbnRleHQudG9kYXlcIlxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZGF5LmFyaWFMYWJlbFwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCIhZGF5LmhpZGRlblwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImRheVRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImRheS5jb250ZXh0XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIGBcbn0pXG5leHBvcnQgY2xhc3MgTmdiRGF0ZXBpY2tlck1vbnRoVmlldyB7XG4gIEBJbnB1dCgpIGRheVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxEYXlUZW1wbGF0ZUNvbnRleHQ+O1xuICBASW5wdXQoKSBtb250aDogTW9udGhWaWV3TW9kZWw7XG4gIEBJbnB1dCgpIHNob3dXZWVrZGF5cztcbiAgQElucHV0KCkgc2hvd1dlZWtOdW1iZXJzO1xuXG4gIEBPdXRwdXQoKSBzZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPE5nYkRhdGU+KCk7XG5cbiAgY29uc3RydWN0b3IocHVibGljIGkxOG46IE5nYkRhdGVwaWNrZXJJMThuKSB7fVxuXG4gIGRvU2VsZWN0KGRheTogRGF5Vmlld01vZGVsKSB7XG4gICAgaWYgKCFkYXkuY29udGV4dC5kaXNhYmxlZCAmJiAhZGF5LmhpZGRlbikge1xuICAgICAgdGhpcy5zZWxlY3QuZW1pdChkYXkuZGF0ZSk7XG4gICAgfVxuICB9XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/datepicker/datepicker-navigation-select.js b/dist/sunbird-ui-components/esm5/datepicker/datepicker-navigation-select.js new file mode 100644 index 0000000..07c21fd --- /dev/null +++ b/dist/sunbird-ui-components/esm5/datepicker/datepicker-navigation-select.js @@ -0,0 +1,69 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, ViewEncapsulation } from '@angular/core'; +import { NgbDate } from './ngb-date'; +import { toInteger } from '../util/util'; +import { NgbDatepickerI18n } from './datepicker-i18n'; +var NgbDatepickerNavigationSelect = /** @class */ (function () { + function NgbDatepickerNavigationSelect(i18n) { + this.i18n = i18n; + this.select = new EventEmitter(); + } + /** + * @param {?} month + * @return {?} + */ + NgbDatepickerNavigationSelect.prototype.changeMonth = /** + * @param {?} month + * @return {?} + */ + function (month) { this.select.emit(new NgbDate(this.date.year, toInteger(month), 1)); }; + /** + * @param {?} year + * @return {?} + */ + NgbDatepickerNavigationSelect.prototype.changeYear = /** + * @param {?} year + * @return {?} + */ + function (year) { this.select.emit(new NgbDate(toInteger(year), this.date.month, 1)); }; + NgbDatepickerNavigationSelect.decorators = [ + { type: Component, args: [{ + selector: 'ngb-datepicker-navigation-select', + changeDetection: ChangeDetectionStrategy.OnPush, + encapsulation: ViewEncapsulation.None, + template: "\n \n \n \n \n \n ", + styles: ["ngb-datepicker-navigation-select>.custom-select{-ms-flex:1 1 auto;flex:1 1 auto;padding:0 .5rem;font-size:.875rem;height:1.85rem}"] + }] } + ]; + /** @nocollapse */ + NgbDatepickerNavigationSelect.ctorParameters = function () { return [ + { type: NgbDatepickerI18n } + ]; }; + NgbDatepickerNavigationSelect.propDecorators = { + date: [{ type: Input }], + disabled: [{ type: Input }], + months: [{ type: Input }], + years: [{ type: Input }], + select: [{ type: Output }] + }; + return NgbDatepickerNavigationSelect; +}()); +export { NgbDatepickerNavigationSelect }; +if (false) { + /** @type {?} */ + NgbDatepickerNavigationSelect.prototype.date; + /** @type {?} */ + NgbDatepickerNavigationSelect.prototype.disabled; + /** @type {?} */ + NgbDatepickerNavigationSelect.prototype.months; + /** @type {?} */ + NgbDatepickerNavigationSelect.prototype.years; + /** @type {?} */ + NgbDatepickerNavigationSelect.prototype.select; + /** @type {?} */ + NgbDatepickerNavigationSelect.prototype.i18n; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1uYXZpZ2F0aW9uLXNlbGVjdC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImRhdGVwaWNrZXIvZGF0ZXBpY2tlci1uYXZpZ2F0aW9uLXNlbGVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNqSCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ25DLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDdkMsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFcEQ7SUFrQ0UsdUNBQW1CLElBQXVCO1FBQXZCLFNBQUksR0FBSixJQUFJLENBQW1CO1FBRmhDLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO0lBRUYsQ0FBQzs7Ozs7SUFFOUMsbURBQVc7Ozs7SUFBWCxVQUFZLEtBQWEsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Ozs7O0lBRWxHLGtEQUFVOzs7O0lBQVYsVUFBVyxJQUFZLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztnQkF0Q2pHLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsa0NBQWtDO29CQUM1QyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7b0JBRXJDLFFBQVEsRUFBRSxtN0JBbUJUOztpQkFDRjs7OztnQkEzQk8saUJBQWlCOzs7dUJBNkJ0QixLQUFLOzJCQUNMLEtBQUs7eUJBQ0wsS0FBSzt3QkFDTCxLQUFLO3lCQUVMLE1BQU07O0lBT1Qsb0NBQUM7Q0FBQSxBQXZDRCxJQXVDQztTQWJZLDZCQUE2Qjs7O0lBQ3hDLDZDQUF1Qjs7SUFDdkIsaURBQTJCOztJQUMzQiwrQ0FBMEI7O0lBQzFCLDhDQUF5Qjs7SUFFekIsK0NBQStDOztJQUVuQyw2Q0FBOEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgVmlld0VuY2Fwc3VsYXRpb259IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtOZ2JEYXRlfSBmcm9tICcuL25nYi1kYXRlJztcbmltcG9ydCB7dG9JbnRlZ2VyfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IHtOZ2JEYXRlcGlja2VySTE4bn0gZnJvbSAnLi9kYXRlcGlja2VyLWkxOG4nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ2ItZGF0ZXBpY2tlci1uYXZpZ2F0aW9uLXNlbGVjdCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBzdHlsZVVybHM6IFsnLi9kYXRlcGlja2VyLW5hdmlnYXRpb24tc2VsZWN0LnNjc3MnXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8c2VsZWN0XG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgY2xhc3M9XCJjdXN0b20tc2VsZWN0XCJcbiAgICAgIFt2YWx1ZV09XCJkYXRlPy5tb250aFwiXG4gICAgICBpMThuLWFyaWEtbGFiZWw9XCJAQG5nYi5kYXRlcGlja2VyLnNlbGVjdC1tb250aFwiIGFyaWEtbGFiZWw9XCJTZWxlY3QgbW9udGhcIlxuICAgICAgaTE4bi10aXRsZT1cIkBAbmdiLmRhdGVwaWNrZXIuc2VsZWN0LW1vbnRoXCIgdGl0bGU9XCJTZWxlY3QgbW9udGhcIlxuICAgICAgKGNoYW5nZSk9XCJjaGFuZ2VNb250aCgkZXZlbnQudGFyZ2V0LnZhbHVlKVwiPlxuICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBtIG9mIG1vbnRoc1wiIFthdHRyLmFyaWEtbGFiZWxdPVwiaTE4bi5nZXRNb250aEZ1bGxOYW1lKG0sIGRhdGU/LnllYXIpXCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwibVwiPnt7IGkxOG4uZ2V0TW9udGhTaG9ydE5hbWUobSwgZGF0ZT8ueWVhcikgfX08L29wdGlvbj5cbiAgICA8L3NlbGVjdD48c2VsZWN0XG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgY2xhc3M9XCJjdXN0b20tc2VsZWN0XCJcbiAgICAgIFt2YWx1ZV09XCJkYXRlPy55ZWFyXCJcbiAgICAgIGkxOG4tYXJpYS1sYWJlbD1cIkBAbmdiLmRhdGVwaWNrZXIuc2VsZWN0LXllYXJcIiBhcmlhLWxhYmVsPVwiU2VsZWN0IHllYXJcIlxuICAgICAgaTE4bi10aXRsZT1cIkBAbmdiLmRhdGVwaWNrZXIuc2VsZWN0LXllYXJcIiB0aXRsZT1cIlNlbGVjdCB5ZWFyXCJcbiAgICAgIChjaGFuZ2UpPVwiY2hhbmdlWWVhcigkZXZlbnQudGFyZ2V0LnZhbHVlKVwiPlxuICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCB5IG9mIHllYXJzXCIgW3ZhbHVlXT1cInlcIj57eyBpMThuLmdldFllYXJOdW1lcmFscyh5KSB9fTwvb3B0aW9uPlxuICAgIDwvc2VsZWN0PlxuICBgXG59KVxuZXhwb3J0IGNsYXNzIE5nYkRhdGVwaWNrZXJOYXZpZ2F0aW9uU2VsZWN0IHtcbiAgQElucHV0KCkgZGF0ZTogTmdiRGF0ZTtcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIG1vbnRoczogbnVtYmVyW107XG4gIEBJbnB1dCgpIHllYXJzOiBudW1iZXJbXTtcblxuICBAT3V0cHV0KCkgc2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxOZ2JEYXRlPigpO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBpMThuOiBOZ2JEYXRlcGlja2VySTE4bikge31cblxuICBjaGFuZ2VNb250aChtb250aDogc3RyaW5nKSB7IHRoaXMuc2VsZWN0LmVtaXQobmV3IE5nYkRhdGUodGhpcy5kYXRlLnllYXIsIHRvSW50ZWdlcihtb250aCksIDEpKTsgfVxuXG4gIGNoYW5nZVllYXIoeWVhcjogc3RyaW5nKSB7IHRoaXMuc2VsZWN0LmVtaXQobmV3IE5nYkRhdGUodG9JbnRlZ2VyKHllYXIpLCB0aGlzLmRhdGUubW9udGgsIDEpKTsgfVxufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/datepicker/datepicker-navigation.js b/dist/sunbird-ui-components/esm5/datepicker/datepicker-navigation.js new file mode 100644 index 0000000..b95145c --- /dev/null +++ b/dist/sunbird-ui-components/esm5/datepicker/datepicker-navigation.js @@ -0,0 +1,68 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, ViewEncapsulation } from '@angular/core'; +import { NavigationEvent } from './datepicker-view-model'; +import { NgbDate } from './ngb-date'; +import { NgbDatepickerI18n } from './datepicker-i18n'; +var NgbDatepickerNavigation = /** @class */ (function () { + function NgbDatepickerNavigation(i18n) { + this.i18n = i18n; + this.navigation = NavigationEvent; + this.months = []; + this.navigate = new EventEmitter(); + this.select = new EventEmitter(); + } + NgbDatepickerNavigation.decorators = [ + { type: Component, args: [{ + selector: 'ngb-datepicker-navigation', + changeDetection: ChangeDetectionStrategy.OnPush, + encapsulation: ViewEncapsulation.None, + template: "\n
\n \n
\n \n \n\n \n
0\">
\n
\n {{ i18n.getMonthFullName(month.number, month.year) }} {{ i18n.getYearNumerals(month.year) }}\n
\n
\n
\n
\n \n
\n ", + styles: ["ngb-datepicker-navigation{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.ngb-dp-navigation-chevron{border-style:solid;border-width:.2em .2em 0 0;display:inline-block;width:.75em;height:.75em;margin-left:.25em;margin-right:.15em;-webkit-transform:rotate(-135deg);transform:rotate(-135deg)}.right .ngb-dp-navigation-chevron{-webkit-transform:rotate(45deg);transform:rotate(45deg);margin-left:.15em;margin-right:.25em}.ngb-dp-arrow{display:-ms-flexbox;display:flex;-ms-flex:1 1 auto;flex:1 1 auto;padding-right:0;padding-left:0;margin:0;width:2rem;height:2rem}.ngb-dp-arrow.right{-ms-flex-pack:end;justify-content:flex-end}.ngb-dp-arrow-btn{padding:0 .25rem;margin:0 .5rem;border:none;background-color:transparent;z-index:1}.ngb-dp-arrow-btn:focus{outline-width:1px;outline-style:auto}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.ngb-dp-arrow-btn:focus{outline-style:solid}}.ngb-dp-month-name{font-size:larger;height:2rem;line-height:2rem;text-align:center}.ngb-dp-navigation-select{display:-ms-flexbox;display:flex;-ms-flex:1 1 9rem;flex:1 1 9rem}"] + }] } + ]; + /** @nocollapse */ + NgbDatepickerNavigation.ctorParameters = function () { return [ + { type: NgbDatepickerI18n } + ]; }; + NgbDatepickerNavigation.propDecorators = { + date: [{ type: Input }], + disabled: [{ type: Input }], + months: [{ type: Input }], + showSelect: [{ type: Input }], + prevDisabled: [{ type: Input }], + nextDisabled: [{ type: Input }], + selectBoxes: [{ type: Input }], + navigate: [{ type: Output }], + select: [{ type: Output }] + }; + return NgbDatepickerNavigation; +}()); +export { NgbDatepickerNavigation }; +if (false) { + /** @type {?} */ + NgbDatepickerNavigation.prototype.navigation; + /** @type {?} */ + NgbDatepickerNavigation.prototype.date; + /** @type {?} */ + NgbDatepickerNavigation.prototype.disabled; + /** @type {?} */ + NgbDatepickerNavigation.prototype.months; + /** @type {?} */ + NgbDatepickerNavigation.prototype.showSelect; + /** @type {?} */ + NgbDatepickerNavigation.prototype.prevDisabled; + /** @type {?} */ + NgbDatepickerNavigation.prototype.nextDisabled; + /** @type {?} */ + NgbDatepickerNavigation.prototype.selectBoxes; + /** @type {?} */ + NgbDatepickerNavigation.prototype.navigate; + /** @type {?} */ + NgbDatepickerNavigation.prototype.select; + /** @type {?} */ + NgbDatepickerNavigation.prototype.i18n; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1uYXZpZ2F0aW9uLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiZGF0ZXBpY2tlci9kYXRlcGlja2VyLW5hdmlnYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakgsT0FBTyxFQUFDLGVBQWUsRUFBaUIsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ25DLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRXBEO0lBbURFLGlDQUFtQixJQUF1QjtRQUF2QixTQUFJLEdBQUosSUFBSSxDQUFtQjtRQWIxQyxlQUFVLEdBQUcsZUFBZSxDQUFDO1FBSXBCLFdBQU0sR0FBcUIsRUFBRSxDQUFDO1FBTTdCLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBbUIsQ0FBQztRQUMvQyxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztJQUVGLENBQUM7O2dCQW5EL0MsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSwyQkFBMkI7b0JBQ3JDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtvQkFFckMsUUFBUSxFQUFFLDRrREE4QlA7O2lCQUNKOzs7O2dCQXRDTyxpQkFBaUI7Ozt1QkEwQ3RCLEtBQUs7MkJBQ0wsS0FBSzt5QkFDTCxLQUFLOzZCQUNMLEtBQUs7K0JBQ0wsS0FBSzsrQkFDTCxLQUFLOzhCQUNMLEtBQUs7MkJBRUwsTUFBTTt5QkFDTixNQUFNOztJQUdULDhCQUFDO0NBQUEsQUFwREQsSUFvREM7U0FmWSx1QkFBdUI7OztJQUNsQyw2Q0FBNkI7O0lBRTdCLHVDQUF1Qjs7SUFDdkIsMkNBQTJCOztJQUMzQix5Q0FBdUM7O0lBQ3ZDLDZDQUE2Qjs7SUFDN0IsK0NBQStCOztJQUMvQiwrQ0FBK0I7O0lBQy9CLDhDQUEwRDs7SUFFMUQsMkNBQXlEOztJQUN6RCx5Q0FBK0M7O0lBRW5DLHVDQUE4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBWaWV3RW5jYXBzdWxhdGlvbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge05hdmlnYXRpb25FdmVudCwgTW9udGhWaWV3TW9kZWx9IGZyb20gJy4vZGF0ZXBpY2tlci12aWV3LW1vZGVsJztcbmltcG9ydCB7TmdiRGF0ZX0gZnJvbSAnLi9uZ2ItZGF0ZSc7XG5pbXBvcnQge05nYkRhdGVwaWNrZXJJMThufSBmcm9tICcuL2RhdGVwaWNrZXItaTE4bic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25nYi1kYXRlcGlja2VyLW5hdmlnYXRpb24nLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgc3R5bGVVcmxzOiBbJy4vZGF0ZXBpY2tlci1uYXZpZ2F0aW9uLnNjc3MnXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwibmdiLWRwLWFycm93XCI+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tbGluayBuZ2ItZHAtYXJyb3ctYnRuXCIgKGNsaWNrKT1cIm5hdmlnYXRlLmVtaXQobmF2aWdhdGlvbi5QUkVWKVwiIFtkaXNhYmxlZF09XCJwcmV2RGlzYWJsZWRcIlxuICAgICAgICAgICAgICBpMThuLWFyaWEtbGFiZWw9XCJAQG5nYi5kYXRlcGlja2VyLnByZXZpb3VzLW1vbnRoXCIgYXJpYS1sYWJlbD1cIlByZXZpb3VzIG1vbnRoXCJcbiAgICAgICAgICAgICAgaTE4bi10aXRsZT1cIkBAbmdiLmRhdGVwaWNrZXIucHJldmlvdXMtbW9udGhcIiB0aXRsZT1cIlByZXZpb3VzIG1vbnRoXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibmdiLWRwLW5hdmlnYXRpb24tY2hldnJvblwiPjwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxuZ2ItZGF0ZXBpY2tlci1uYXZpZ2F0aW9uLXNlbGVjdCAqbmdJZj1cInNob3dTZWxlY3RcIiBjbGFzcz1cIm5nYi1kcC1uYXZpZ2F0aW9uLXNlbGVjdFwiXG4gICAgICBbZGF0ZV09XCJkYXRlXCJcbiAgICAgIFtkaXNhYmxlZF0gPSBcImRpc2FibGVkXCJcbiAgICAgIFttb250aHNdPVwic2VsZWN0Qm94ZXMubW9udGhzXCJcbiAgICAgIFt5ZWFyc109XCJzZWxlY3RCb3hlcy55ZWFyc1wiXG4gICAgICAoc2VsZWN0KT1cInNlbGVjdC5lbWl0KCRldmVudClcIj5cbiAgICA8L25nYi1kYXRlcGlja2VyLW5hdmlnYXRpb24tc2VsZWN0PlxuXG4gICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwiIXNob3dTZWxlY3RcIiBuZ0ZvciBsZXQtbW9udGggW25nRm9yT2ZdPVwibW9udGhzXCIgbGV0LWk9XCJpbmRleFwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm5nYi1kcC1hcnJvd1wiICpuZ0lmPVwiaSA+IDBcIj48L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJuZ2ItZHAtbW9udGgtbmFtZVwiPlxuICAgICAgICB7eyBpMThuLmdldE1vbnRoRnVsbE5hbWUobW9udGgubnVtYmVyLCBtb250aC55ZWFyKSB9fSB7eyBpMThuLmdldFllYXJOdW1lcmFscyhtb250aC55ZWFyKSB9fVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibmdiLWRwLWFycm93XCIgKm5nSWY9XCJpICE9PSBtb250aHMubGVuZ3RoIC0gMVwiPjwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPGRpdiBjbGFzcz1cIm5nYi1kcC1hcnJvdyByaWdodFwiPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWxpbmsgbmdiLWRwLWFycm93LWJ0blwiIChjbGljayk9XCJuYXZpZ2F0ZS5lbWl0KG5hdmlnYXRpb24uTkVYVClcIiBbZGlzYWJsZWRdPVwibmV4dERpc2FibGVkXCJcbiAgICAgICAgICAgICAgaTE4bi1hcmlhLWxhYmVsPVwiQEBuZ2IuZGF0ZXBpY2tlci5uZXh0LW1vbnRoXCIgYXJpYS1sYWJlbD1cIk5leHQgbW9udGhcIlxuICAgICAgICAgICAgICBpMThuLXRpdGxlPVwiQEBuZ2IuZGF0ZXBpY2tlci5uZXh0LW1vbnRoXCIgdGl0bGU9XCJOZXh0IG1vbnRoXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibmdiLWRwLW5hdmlnYXRpb24tY2hldnJvblwiPjwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIGBcbn0pXG5leHBvcnQgY2xhc3MgTmdiRGF0ZXBpY2tlck5hdmlnYXRpb24ge1xuICBuYXZpZ2F0aW9uID0gTmF2aWdhdGlvbkV2ZW50O1xuXG4gIEBJbnB1dCgpIGRhdGU6IE5nYkRhdGU7XG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuO1xuICBASW5wdXQoKSBtb250aHM6IE1vbnRoVmlld01vZGVsW10gPSBbXTtcbiAgQElucHV0KCkgc2hvd1NlbGVjdDogYm9vbGVhbjtcbiAgQElucHV0KCkgcHJldkRpc2FibGVkOiBib29sZWFuO1xuICBASW5wdXQoKSBuZXh0RGlzYWJsZWQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHNlbGVjdEJveGVzOiB7eWVhcnM6IG51bWJlcltdLCBtb250aHM6IG51bWJlcltdfTtcblxuICBAT3V0cHV0KCkgbmF2aWdhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPE5hdmlnYXRpb25FdmVudD4oKTtcbiAgQE91dHB1dCgpIHNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8TmdiRGF0ZT4oKTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgaTE4bjogTmdiRGF0ZXBpY2tlckkxOG4pIHt9XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/datepicker/datepicker-service.js b/dist/sunbird-ui-components/esm5/datepicker/datepicker-service.js new file mode 100644 index 0000000..3ebfa04 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/datepicker/datepicker-service.js @@ -0,0 +1,492 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgbCalendar } from './ngb-calendar'; +import { NgbDate } from './ngb-date'; +import { Injectable } from '@angular/core'; +import { isInteger, toInteger } from '../util/util'; +import { Subject } from 'rxjs'; +import { buildMonths, checkDateInRange, checkMinBeforeMax, isChangedDate, isChangedMonth, isDateSelectable, generateSelectBoxYears, generateSelectBoxMonths, prevMonthDisabled, nextMonthDisabled } from './datepicker-tools'; +import { filter } from 'rxjs/operators'; +import { NgbDatepickerI18n } from './datepicker-i18n'; +var NgbDatepickerService = /** @class */ (function () { + function NgbDatepickerService(_calendar, _i18n) { + this._calendar = _calendar; + this._i18n = _i18n; + this._model$ = new Subject(); + this._select$ = new Subject(); + this._state = { + disabled: false, + displayMonths: 1, + firstDayOfWeek: 1, + focusVisible: false, + months: [], + navigation: 'select', + outsideDays: 'visible', + prevDisabled: false, + nextDisabled: false, + selectBoxes: { years: [], months: [] }, + selectedDate: null + }; + } + Object.defineProperty(NgbDatepickerService.prototype, "model$", { + get: /** + * @return {?} + */ + function () { return this._model$.pipe(filter((/** + * @param {?} model + * @return {?} + */ + function (model) { return model.months.length > 0; }))); }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbDatepickerService.prototype, "select$", { + get: /** + * @return {?} + */ + function () { return this._select$.pipe(filter((/** + * @param {?} date + * @return {?} + */ + function (date) { return date !== null; }))); }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbDatepickerService.prototype, "dayTemplateData", { + set: /** + * @param {?} dayTemplateData + * @return {?} + */ + function (dayTemplateData) { + if (this._state.dayTemplateData !== dayTemplateData) { + this._nextState({ dayTemplateData: dayTemplateData }); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbDatepickerService.prototype, "disabled", { + set: /** + * @param {?} disabled + * @return {?} + */ + function (disabled) { + if (this._state.disabled !== disabled) { + this._nextState({ disabled: disabled }); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbDatepickerService.prototype, "displayMonths", { + set: /** + * @param {?} displayMonths + * @return {?} + */ + function (displayMonths) { + displayMonths = toInteger(displayMonths); + if (isInteger(displayMonths) && displayMonths > 0 && this._state.displayMonths !== displayMonths) { + this._nextState({ displayMonths: displayMonths }); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbDatepickerService.prototype, "firstDayOfWeek", { + set: /** + * @param {?} firstDayOfWeek + * @return {?} + */ + function (firstDayOfWeek) { + firstDayOfWeek = toInteger(firstDayOfWeek); + if (isInteger(firstDayOfWeek) && firstDayOfWeek >= 0 && this._state.firstDayOfWeek !== firstDayOfWeek) { + this._nextState({ firstDayOfWeek: firstDayOfWeek }); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbDatepickerService.prototype, "focusVisible", { + set: /** + * @param {?} focusVisible + * @return {?} + */ + function (focusVisible) { + if (this._state.focusVisible !== focusVisible && !this._state.disabled) { + this._nextState({ focusVisible: focusVisible }); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbDatepickerService.prototype, "maxDate", { + set: /** + * @param {?} date + * @return {?} + */ + function (date) { + /** @type {?} */ + var maxDate = this.toValidDate(date, null); + if (isChangedDate(this._state.maxDate, maxDate)) { + this._nextState({ maxDate: maxDate }); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbDatepickerService.prototype, "markDisabled", { + set: /** + * @param {?} markDisabled + * @return {?} + */ + function (markDisabled) { + if (this._state.markDisabled !== markDisabled) { + this._nextState({ markDisabled: markDisabled }); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbDatepickerService.prototype, "minDate", { + set: /** + * @param {?} date + * @return {?} + */ + function (date) { + /** @type {?} */ + var minDate = this.toValidDate(date, null); + if (isChangedDate(this._state.minDate, minDate)) { + this._nextState({ minDate: minDate }); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbDatepickerService.prototype, "navigation", { + set: /** + * @param {?} navigation + * @return {?} + */ + function (navigation) { + if (this._state.navigation !== navigation) { + this._nextState({ navigation: navigation }); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbDatepickerService.prototype, "outsideDays", { + set: /** + * @param {?} outsideDays + * @return {?} + */ + function (outsideDays) { + if (this._state.outsideDays !== outsideDays) { + this._nextState({ outsideDays: outsideDays }); + } + }, + enumerable: true, + configurable: true + }); + /** + * @param {?} date + * @return {?} + */ + NgbDatepickerService.prototype.focus = /** + * @param {?} date + * @return {?} + */ + function (date) { + if (!this._state.disabled && this._calendar.isValid(date) && isChangedDate(this._state.focusDate, date)) { + this._nextState({ focusDate: date }); + } + }; + /** + * @param {?=} period + * @param {?=} number + * @return {?} + */ + NgbDatepickerService.prototype.focusMove = /** + * @param {?=} period + * @param {?=} number + * @return {?} + */ + function (period, number) { + this.focus(this._calendar.getNext(this._state.focusDate, period, number)); + }; + /** + * @return {?} + */ + NgbDatepickerService.prototype.focusSelect = /** + * @return {?} + */ + function () { + if (isDateSelectable(this._state.focusDate, this._state)) { + this.select(this._state.focusDate, { emitEvent: true }); + } + }; + /** + * @param {?} date + * @return {?} + */ + NgbDatepickerService.prototype.open = /** + * @param {?} date + * @return {?} + */ + function (date) { + /** @type {?} */ + var firstDate = this.toValidDate(date, this._calendar.getToday()); + if (!this._state.disabled && (!this._state.firstDate || isChangedMonth(this._state.firstDate, date))) { + this._nextState({ firstDate: firstDate }); + } + }; + /** + * @param {?} date + * @param {?=} options + * @return {?} + */ + NgbDatepickerService.prototype.select = /** + * @param {?} date + * @param {?=} options + * @return {?} + */ + function (date, options) { + if (options === void 0) { options = {}; } + /** @type {?} */ + var selectedDate = this.toValidDate(date, null); + if (!this._state.disabled) { + if (isChangedDate(this._state.selectedDate, selectedDate)) { + this._nextState({ selectedDate: selectedDate }); + } + if (options.emitEvent && isDateSelectable(selectedDate, this._state)) { + this._select$.next(selectedDate); + } + } + }; + /** + * @param {?} date + * @param {?=} defaultValue + * @return {?} + */ + NgbDatepickerService.prototype.toValidDate = /** + * @param {?} date + * @param {?=} defaultValue + * @return {?} + */ + function (date, defaultValue) { + /** @type {?} */ + var ngbDate = NgbDate.from(date); + if (defaultValue === undefined) { + defaultValue = this._calendar.getToday(); + } + return this._calendar.isValid(ngbDate) ? ngbDate : defaultValue; + }; + /** + * @private + * @param {?} patch + * @return {?} + */ + NgbDatepickerService.prototype._nextState = /** + * @private + * @param {?} patch + * @return {?} + */ + function (patch) { + /** @type {?} */ + var newState = this._updateState(patch); + this._patchContexts(newState); + this._state = newState; + this._model$.next(this._state); + }; + /** + * @private + * @param {?} state + * @return {?} + */ + NgbDatepickerService.prototype._patchContexts = /** + * @private + * @param {?} state + * @return {?} + */ + function (state) { + var months = state.months, displayMonths = state.displayMonths, selectedDate = state.selectedDate, focusDate = state.focusDate, focusVisible = state.focusVisible, disabled = state.disabled, outsideDays = state.outsideDays; + state.months.forEach((/** + * @param {?} month + * @return {?} + */ + function (month) { + month.weeks.forEach((/** + * @param {?} week + * @return {?} + */ + function (week) { + week.days.forEach((/** + * @param {?} day + * @return {?} + */ + function (day) { + // patch focus flag + if (focusDate) { + day.context.focused = focusDate.equals(day.date) && focusVisible; + } + // calculating tabindex + day.tabindex = !disabled && day.date.equals(focusDate) && focusDate.month === month.number ? 0 : -1; + // override context disabled + if (disabled === true) { + day.context.disabled = true; + } + // patch selection flag + if (selectedDate !== undefined) { + day.context.selected = selectedDate !== null && selectedDate.equals(day.date); + } + // visibility + if (month.number !== day.date.month) { + day.hidden = outsideDays === 'hidden' || outsideDays === 'collapsed' || + (displayMonths > 1 && day.date.after(months[0].firstDate) && + day.date.before(months[displayMonths - 1].lastDate)); + } + })); + })); + })); + }; + /** + * @private + * @param {?} patch + * @return {?} + */ + NgbDatepickerService.prototype._updateState = /** + * @private + * @param {?} patch + * @return {?} + */ + function (patch) { + // patching fields + /** @type {?} */ + var state = Object.assign({}, this._state, patch); + /** @type {?} */ + var startDate = state.firstDate; + // min/max dates changed + if ('minDate' in patch || 'maxDate' in patch) { + checkMinBeforeMax(state.minDate, state.maxDate); + state.focusDate = checkDateInRange(state.focusDate, state.minDate, state.maxDate); + state.firstDate = checkDateInRange(state.firstDate, state.minDate, state.maxDate); + startDate = state.focusDate; + } + // disabled + if ('disabled' in patch) { + state.focusVisible = false; + } + // initial rebuild via 'select()' + if ('selectedDate' in patch && this._state.months.length === 0) { + startDate = state.selectedDate; + } + // terminate early if only focus visibility was changed + if ('focusVisible' in patch) { + return state; + } + // focus date changed + if ('focusDate' in patch) { + state.focusDate = checkDateInRange(state.focusDate, state.minDate, state.maxDate); + startDate = state.focusDate; + // nothing to rebuild if only focus changed and it is still visible + if (state.months.length !== 0 && !state.focusDate.before(state.firstDate) && + !state.focusDate.after(state.lastDate)) { + return state; + } + } + // first date changed + if ('firstDate' in patch) { + state.firstDate = checkDateInRange(state.firstDate, state.minDate, state.maxDate); + startDate = state.firstDate; + } + // rebuilding months + if (startDate) { + /** @type {?} */ + var forceRebuild = 'dayTemplateData' in patch || 'firstDayOfWeek' in patch || 'markDisabled' in patch || + 'minDate' in patch || 'maxDate' in patch || 'disabled' in patch || 'outsideDays' in patch; + /** @type {?} */ + var months = buildMonths(this._calendar, startDate, state, this._i18n, forceRebuild); + // updating months and boundary dates + state.months = months; + state.firstDate = months.length > 0 ? months[0].firstDate : undefined; + state.lastDate = months.length > 0 ? months[months.length - 1].lastDate : undefined; + // reset selected date if 'markDisabled' returns true + if ('selectedDate' in patch && !isDateSelectable(state.selectedDate, state)) { + state.selectedDate = null; + } + // adjusting focus after months were built + if ('firstDate' in patch) { + if (state.focusDate === undefined || state.focusDate.before(state.firstDate) || + state.focusDate.after(state.lastDate)) { + state.focusDate = startDate; + } + } + // adjusting months/years for the select box navigation + /** @type {?} */ + var yearChanged = !this._state.firstDate || this._state.firstDate.year !== state.firstDate.year; + /** @type {?} */ + var monthChanged = !this._state.firstDate || this._state.firstDate.month !== state.firstDate.month; + if (state.navigation === 'select') { + // years -> boundaries (min/max were changed) + if ('minDate' in patch || 'maxDate' in patch || state.selectBoxes.years.length === 0 || yearChanged) { + state.selectBoxes.years = generateSelectBoxYears(state.firstDate, state.minDate, state.maxDate); + } + // months -> when current year or boundaries change + if ('minDate' in patch || 'maxDate' in patch || state.selectBoxes.months.length === 0 || yearChanged) { + state.selectBoxes.months = + generateSelectBoxMonths(this._calendar, state.firstDate, state.minDate, state.maxDate); + } + } + else { + state.selectBoxes = { years: [], months: [] }; + } + // updating navigation arrows -> boundaries change (min/max) or month/year changes + if ((state.navigation === 'arrows' || state.navigation === 'select') && + (monthChanged || yearChanged || 'minDate' in patch || 'maxDate' in patch || 'disabled' in patch)) { + state.prevDisabled = state.disabled || prevMonthDisabled(this._calendar, state.firstDate, state.minDate); + state.nextDisabled = state.disabled || nextMonthDisabled(this._calendar, state.lastDate, state.maxDate); + } + } + return state; + }; + NgbDatepickerService.decorators = [ + { type: Injectable } + ]; + /** @nocollapse */ + NgbDatepickerService.ctorParameters = function () { return [ + { type: NgbCalendar }, + { type: NgbDatepickerI18n } + ]; }; + return NgbDatepickerService; +}()); +export { NgbDatepickerService }; +if (false) { + /** + * @type {?} + * @private + */ + NgbDatepickerService.prototype._model$; + /** + * @type {?} + * @private + */ + NgbDatepickerService.prototype._select$; + /** + * @type {?} + * @private + */ + NgbDatepickerService.prototype._state; + /** + * @type {?} + * @private + */ + NgbDatepickerService.prototype._calendar; + /** + * @type {?} + * @private + */ + NgbDatepickerService.prototype._i18n; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiZGF0ZXBpY2tlci9kYXRlcGlja2VyLXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBQyxXQUFXLEVBQVksTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBR25DLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDbEQsT0FBTyxFQUFhLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUN6QyxPQUFPLEVBQ0wsV0FBVyxFQUNYLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsYUFBYSxFQUNiLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsc0JBQXNCLEVBQ3RCLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2xCLE1BQU0sb0JBQW9CLENBQUM7QUFFNUIsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3RDLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRXBEO0lBd0ZFLDhCQUFvQixTQUFzQixFQUFVLEtBQXdCO1FBQXhELGNBQVMsR0FBVCxTQUFTLENBQWE7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQXRGcEUsWUFBTyxHQUFHLElBQUksT0FBTyxFQUF1QixDQUFDO1FBRTdDLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBVyxDQUFDO1FBRWxDLFdBQU0sR0FBd0I7WUFDcEMsUUFBUSxFQUFFLEtBQUs7WUFDZixhQUFhLEVBQUUsQ0FBQztZQUNoQixjQUFjLEVBQUUsQ0FBQztZQUNqQixZQUFZLEVBQUUsS0FBSztZQUNuQixN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QUUsTUFBTSxFQUFFLEVBQUUsRUFBQyxDQUFDO2FBQzdDO1lBRUQsa0ZBQWtGO1lBQ2xGLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsVUFBVSxLQUFLLFFBQVEsQ0FBQztnQkFDaEUsQ0FBQyxZQUFZLElBQUksV0FBVyxJQUFJLFNBQVMsSUFBSSxLQUFLLElBQUksU0FBUyxJQUFJLEtBQUssSUFBSSxVQUFVLElBQUksS0FBSyxDQUFDLEVBQUU7Z0JBQ3BHLEtBQUssQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLFFBQVEsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN6RyxLQUFLLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxRQUFRLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUN6RztTQUNGO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOztnQkFuUkYsVUFBVTs7OztnQkF2QkgsV0FBVztnQkFxQlgsaUJBQWlCOztJQXNSekIsMkJBQUM7Q0FBQSxBQXBSRCxJQW9SQztTQW5SWSxvQkFBb0I7Ozs7OztJQUMvQix1Q0FBcUQ7Ozs7O0lBRXJELHdDQUEwQzs7Ozs7SUFFMUMsc0NBWUU7Ozs7O0lBc0VVLHlDQUE4Qjs7Ozs7SUFBRSxxQ0FBZ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge05nYkNhbGVuZGFyLCBOZ2JQZXJpb2R9IGZyb20gJy4vbmdiLWNhbGVuZGFyJztcbmltcG9ydCB7TmdiRGF0ZX0gZnJvbSAnLi9uZ2ItZGF0ZSc7XG5pbXBvcnQge05nYkRhdGVTdHJ1Y3R9IGZyb20gJy4vbmdiLWRhdGUtc3RydWN0JztcbmltcG9ydCB7RGF0ZXBpY2tlclZpZXdNb2RlbCwgTmdiRGF5VGVtcGxhdGVEYXRhLCBOZ2JNYXJrRGlzYWJsZWR9IGZyb20gJy4vZGF0ZXBpY2tlci12aWV3LW1vZGVsJztcbmltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge2lzSW50ZWdlciwgdG9JbnRlZ2VyfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIGJ1aWxkTW9udGhzLFxuICBjaGVja0RhdGVJblJhbmdlLFxuICBjaGVja01pbkJlZm9yZU1heCxcbiAgaXNDaGFuZ2VkRGF0ZSxcbiAgaXNDaGFuZ2VkTW9udGgsXG4gIGlzRGF0ZVNlbGVjdGFibGUsXG4gIGdlbmVyYXRlU2VsZWN0Qm94WWVhcnMsXG4gIGdlbmVyYXRlU2VsZWN0Qm94TW9udGhzLFxuICBwcmV2TW9udGhEaXNhYmxlZCxcbiAgbmV4dE1vbnRoRGlzYWJsZWRcbn0gZnJvbSAnLi9kYXRlcGlja2VyLXRvb2xzJztcblxuaW1wb3J0IHtmaWx0ZXJ9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7TmdiRGF0ZXBpY2tlckkxOG59IGZyb20gJy4vZGF0ZXBpY2tlci1pMThuJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE5nYkRhdGVwaWNrZXJTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBfbW9kZWwkID0gbmV3IFN1YmplY3Q8RGF0ZXBpY2tlclZpZXdNb2RlbD4oKTtcblxuICBwcml2YXRlIF9zZWxlY3QkID0gbmV3IFN1YmplY3Q8TmdiRGF0ZT4oKTtcblxuICBwcml2YXRlIF9zdGF0ZTogRGF0ZXBpY2tlclZpZXdNb2RlbCA9IHtcbiAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgZGlzcGxheU1vbnRoczogMSxcbiAgICBmaXJzdERheU9mV2VlazogMSxcbiAgICBmb2N1c1Zpc2libGU6IGZhbHNlLFxuICAgIG1vbnRoczogW10sXG4gICAgbmF2aWdhdGlvbjogJ3NlbGVjdCcsXG4gICAgb3V0c2lkZURheXM6ICd2aXNpYmxlJyxcbiAgICBwcmV2RGlzYWJsZWQ6IGZhbHNlLFxuICAgIG5leHREaXNhYmxlZDogZmFsc2UsXG4gICAgc2VsZWN0Qm94ZXM6IHt5ZWFyczogW10sIG1vbnRoczogW119LFxuICAgIHNlbGVjdGVkRGF0ZTogbnVsbFxuICB9O1xuXG4gIGdldCBtb2RlbCQoKTogT2JzZXJ2YWJsZTxEYXRlcGlja2VyVmlld01vZGVsPiB7IHJldHVybiB0aGlzLl9tb2RlbCQucGlwZShmaWx0ZXIobW9kZWwgPT4gbW9kZWwubW9udGhzLmxlbmd0aCA+IDApKTsgfVxuXG4gIGdldCBzZWxlY3QkKCk6IE9ic2VydmFibGU8TmdiRGF0ZT4geyByZXR1cm4gdGhpcy5fc2VsZWN0JC5waXBlKGZpbHRlcihkYXRlID0+IGRhdGUgIT09IG51bGwpKTsgfVxuXG4gIHNldCBkYXlUZW1wbGF0ZURhdGEoZGF5VGVtcGxhdGVEYXRhOiBOZ2JEYXlUZW1wbGF0ZURhdGEpIHtcbiAgICBpZiAodGhpcy5fc3RhdGUuZGF5VGVtcGxhdGVEYXRhICE9PSBkYXlUZW1wbGF0ZURhdGEpIHtcbiAgICAgIHRoaXMuX25leHRTdGF0ZSh7ZGF5VGVtcGxhdGVEYXRhfSk7XG4gICAgfVxuICB9XG5cbiAgc2V0IGRpc2FibGVkKGRpc2FibGVkOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMuX3N0YXRlLmRpc2FibGVkICE9PSBkaXNhYmxlZCkge1xuICAgICAgdGhpcy5fbmV4dFN0YXRlKHtkaXNhYmxlZH0pO1xuICAgIH1cbiAgfVxuXG4gIHNldCBkaXNwbGF5TW9udGhzKGRpc3BsYXlNb250aHM6IG51bWJlcikge1xuICAgIGRpc3BsYXlNb250aHMgPSB0b0ludGVnZXIoZGlzcGxheU1vbnRocyk7XG4gICAgaWYgKGlzSW50ZWdlcihkaXNwbGF5TW9udGhzKSAmJiBkaXNwbGF5TW9udGhzID4gMCAmJiB0aGlzLl9zdGF0ZS5kaXNwbGF5TW9udGhzICE9PSBkaXNwbGF5TW9udGhzKSB7XG4gICAgICB0aGlzLl9uZXh0U3RhdGUoe2Rpc3BsYXlNb250aHN9KTtcbiAgICB9XG4gIH1cblxuICBzZXQgZmlyc3REYXlPZldlZWsoZmlyc3REYXlPZldlZWs6IG51bWJlcikge1xuICAgIGZpcnN0RGF5T2ZXZWVrID0gdG9JbnRlZ2VyKGZpcnN0RGF5T2ZXZWVrKTtcbiAgICBpZiAoaXNJbnRlZ2VyKGZpcnN0RGF5T2ZXZWVrKSAmJiBmaXJzdERheU9mV2VlayA+PSAwICYmIHRoaXMuX3N0YXRlLmZpcnN0RGF5T2ZXZWVrICE9PSBmaXJzdERheU9mV2Vlaykge1xuICAgICAgdGhpcy5fbmV4dFN0YXRlKHtmaXJzdERheU9mV2Vla30pO1xuICAgIH1cbiAgfVxuXG4gIHNldCBmb2N1c1Zpc2libGUoZm9jdXNWaXNpYmxlOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMuX3N0YXRlLmZvY3VzVmlzaWJsZSAhPT0gZm9jdXNWaXNpYmxlICYmICF0aGlzLl9zdGF0ZS5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5fbmV4dFN0YXRlKHtmb2N1c1Zpc2libGV9KTtcbiAgICB9XG4gIH1cblxuICBzZXQgbWF4RGF0ZShkYXRlOiBOZ2JEYXRlKSB7XG4gICAgY29uc3QgbWF4RGF0ZSA9IHRoaXMudG9WYWxpZERhdGUoZGF0ZSwgbnVsbCk7XG4gICAgaWYgKGlzQ2hhbmdlZERhdGUodGhpcy5fc3RhdGUubWF4RGF0ZSwgbWF4RGF0ZSkpIHtcbiAgICAgIHRoaXMuX25leHRTdGF0ZSh7bWF4RGF0ZX0pO1xuICAgIH1cbiAgfVxuXG4gIHNldCBtYXJrRGlzYWJsZWQobWFya0Rpc2FibGVkOiBOZ2JNYXJrRGlzYWJsZWQpIHtcbiAgICBpZiAodGhpcy5fc3RhdGUubWFya0Rpc2FibGVkICE9PSBtYXJrRGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuX25leHRTdGF0ZSh7bWFya0Rpc2FibGVkfSk7XG4gICAgfVxuICB9XG5cbiAgc2V0IG1pbkRhdGUoZGF0ZTogTmdiRGF0ZSkge1xuICAgIGNvbnN0IG1pbkRhdGUgPSB0aGlzLnRvVmFsaWREYXRlKGRhdGUsIG51bGwpO1xuICAgIGlmIChpc0NoYW5nZWREYXRlKHRoaXMuX3N0YXRlLm1pbkRhdGUsIG1pbkRhdGUpKSB7XG4gICAgICB0aGlzLl9uZXh0U3RhdGUoe21pbkRhdGV9KTtcbiAgICB9XG4gIH1cblxuICBzZXQgbmF2aWdhdGlvbihuYXZpZ2F0aW9uOiAnc2VsZWN0JyB8ICdhcnJvd3MnIHwgJ25vbmUnKSB7XG4gICAgaWYgKHRoaXMuX3N0YXRlLm5hdmlnYXRpb24gIT09IG5hdmlnYXRpb24pIHtcbiAgICAgIHRoaXMuX25leHRTdGF0ZSh7bmF2aWdhdGlvbn0pO1xuICAgIH1cbiAgfVxuXG4gIHNldCBvdXRzaWRlRGF5cyhvdXRzaWRlRGF5czogJ3Zpc2libGUnIHwgJ2NvbGxhcHNlZCcgfCAnaGlkZGVuJykge1xuICAgIGlmICh0aGlzLl9zdGF0ZS5vdXRzaWRlRGF5cyAhPT0gb3V0c2lkZURheXMpIHtcbiAgICAgIHRoaXMuX25leHRTdGF0ZSh7b3V0c2lkZURheXN9KTtcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9jYWxlbmRhcjogTmdiQ2FsZW5kYXIsIHByaXZhdGUgX2kxOG46IE5nYkRhdGVwaWNrZXJJMThuKSB7fVxuXG4gIGZvY3VzKGRhdGU6IE5nYkRhdGUpIHtcbiAgICBpZiAoIXRoaXMuX3N0YXRlLmRpc2FibGVkICYmIHRoaXMuX2NhbGVuZGFyLmlzVmFsaWQoZGF0ZSkgJiYgaXNDaGFuZ2VkRGF0ZSh0aGlzLl9zdGF0ZS5mb2N1c0RhdGUsIGRhdGUpKSB7XG4gICAgICB0aGlzLl9uZXh0U3RhdGUoe2ZvY3VzRGF0ZTogZGF0ZX0pO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzTW92ZShwZXJpb2Q/OiBOZ2JQZXJpb2QsIG51bWJlcj86IG51bWJlcikge1xuICAgIHRoaXMuZm9jdXModGhpcy5fY2FsZW5kYXIuZ2V0TmV4dCh0aGlzLl9zdGF0ZS5mb2N1c0RhdGUsIHBlcmlvZCwgbnVtYmVyKSk7XG4gIH1cblxuICBmb2N1c1NlbGVjdCgpIHtcbiAgICBpZiAoaXNEYXRlU2VsZWN0YWJsZSh0aGlzLl9zdGF0ZS5mb2N1c0RhdGUsIHRoaXMuX3N0YXRlKSkge1xuICAgICAgdGhpcy5zZWxlY3QodGhpcy5fc3RhdGUuZm9jdXNEYXRlLCB7ZW1pdEV2ZW50OiB0cnVlfSk7XG4gICAgfVxuICB9XG5cbiAgb3BlbihkYXRlOiBOZ2JEYXRlKSB7XG4gICAgY29uc3QgZmlyc3REYXRlID0gdGhpcy50b1ZhbGlkRGF0ZShkYXRlLCB0aGlzLl9jYWxlbmRhci5nZXRUb2RheSgpKTtcbiAgICBpZiAoIXRoaXMuX3N0YXRlLmRpc2FibGVkICYmICghdGhpcy5fc3RhdGUuZmlyc3REYXRlIHx8IGlzQ2hhbmdlZE1vbnRoKHRoaXMuX3N0YXRlLmZpcnN0RGF0ZSwgZGF0ZSkpKSB7XG4gICAgICB0aGlzLl9uZXh0U3RhdGUoe2ZpcnN0RGF0ZX0pO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdChkYXRlOiBOZ2JEYXRlLCBvcHRpb25zOiB7ZW1pdEV2ZW50PzogYm9vbGVhbn0gPSB7fSkge1xuICAgIGNvbnN0IHNlbGVjdGVkRGF0ZSA9IHRoaXMudG9WYWxpZERhdGUoZGF0ZSwgbnVsbCk7XG4gICAgaWYgKCF0aGlzLl9zdGF0ZS5kaXNhYmxlZCkge1xuICAgICAgaWYgKGlzQ2hhbmdlZERhdGUodGhpcy5fc3RhdGUuc2VsZWN0ZWREYXRlLCBzZWxlY3RlZERhdGUpKSB7XG4gICAgICAgIHRoaXMuX25leHRTdGF0ZSh7c2VsZWN0ZWREYXRlfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmVtaXRFdmVudCAmJiBpc0RhdGVTZWxlY3RhYmxlKHNlbGVjdGVkRGF0ZSwgdGhpcy5fc3RhdGUpKSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdCQubmV4dChzZWxlY3RlZERhdGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRvVmFsaWREYXRlKGRhdGU6IE5nYkRhdGVTdHJ1Y3QsIGRlZmF1bHRWYWx1ZT86IE5nYkRhdGUpOiBOZ2JEYXRlIHtcbiAgICBjb25zdCBuZ2JEYXRlID0gTmdiRGF0ZS5mcm9tKGRhdGUpO1xuICAgIGlmIChkZWZhdWx0VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZGVmYXVsdFZhbHVlID0gdGhpcy5fY2FsZW5kYXIuZ2V0VG9kYXkoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFyLmlzVmFsaWQobmdiRGF0ZSkgPyBuZ2JEYXRlIDogZGVmYXVsdFZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBfbmV4dFN0YXRlKHBhdGNoOiBQYXJ0aWFsPERhdGVwaWNrZXJWaWV3TW9kZWw+KSB7XG4gICAgY29uc3QgbmV3U3RhdGUgPSB0aGlzLl91cGRhdGVTdGF0ZShwYXRjaCk7XG4gICAgdGhpcy5fcGF0Y2hDb250ZXh0cyhuZXdTdGF0ZSk7XG4gICAgdGhpcy5fc3RhdGUgPSBuZXdTdGF0ZTtcbiAgICB0aGlzLl9tb2RlbCQubmV4dCh0aGlzLl9zdGF0ZSk7XG4gIH1cblxuICBwcml2YXRlIF9wYXRjaENvbnRleHRzKHN0YXRlOiBEYXRlcGlja2VyVmlld01vZGVsKSB7XG4gICAgY29uc3Qge21vbnRocywgZGlzcGxheU1vbnRocywgc2VsZWN0ZWREYXRlLCBmb2N1c0RhdGUsIGZvY3VzVmlzaWJsZSwgZGlzYWJsZWQsIG91dHNpZGVEYXlzfSA9IHN0YXRlO1xuICAgIHN0YXRlLm1vbnRocy5mb3JFYWNoKG1vbnRoID0+IHtcbiAgICAgIG1vbnRoLndlZWtzLmZvckVhY2god2VlayA9PiB7XG4gICAgICAgIHdlZWsuZGF5cy5mb3JFYWNoKGRheSA9PiB7XG5cbiAgICAgICAgICAvLyBwYXRjaCBmb2N1cyBmbGFnXG4gICAgICAgICAgaWYgKGZvY3VzRGF0ZSkge1xuICAgICAgICAgICAgZGF5LmNvbnRleHQuZm9jdXNlZCA9IGZvY3VzRGF0ZS5lcXVhbHMoZGF5LmRhdGUpICYmIGZvY3VzVmlzaWJsZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBjYWxjdWxhdGluZyB0YWJpbmRleFxuICAgICAgICAgIGRheS50YWJpbmRleCA9ICFkaXNhYmxlZCAmJiBkYXkuZGF0ZS5lcXVhbHMoZm9jdXNEYXRlKSAmJiBmb2N1c0RhdGUubW9udGggPT09IG1vbnRoLm51bWJlciA/IDAgOiAtMTtcblxuICAgICAgICAgIC8vIG92ZXJyaWRlIGNvbnRleHQgZGlzYWJsZWRcbiAgICAgICAgICBpZiAoZGlzYWJsZWQgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGRheS5jb250ZXh0LmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBwYXRjaCBzZWxlY3Rpb24gZmxhZ1xuICAgICAgICAgIGlmIChzZWxlY3RlZERhdGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZGF5LmNvbnRleHQuc2VsZWN0ZWQgPSBzZWxlY3RlZERhdGUgIT09IG51bGwgJiYgc2VsZWN0ZWREYXRlLmVxdWFscyhkYXkuZGF0ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gdmlzaWJpbGl0eVxuICAgICAgICAgIGlmIChtb250aC5udW1iZXIgIT09IGRheS5kYXRlLm1vbnRoKSB7XG4gICAgICAgICAgICBkYXkuaGlkZGVuID0gb3V0c2lkZURheXMgPT09ICdoaWRkZW4nIHx8IG91dHNpZGVEYXlzID09PSAnY29sbGFwc2VkJyB8fFxuICAgICAgICAgICAgICAgIChkaXNwbGF5TW9udGhzID4gMSAmJiBkYXkuZGF0ZS5hZnRlcihtb250aHNbMF0uZmlyc3REYXRlKSAmJlxuICAgICAgICAgICAgICAgICBkYXkuZGF0ZS5iZWZvcmUobW9udGhzW2Rpc3BsYXlNb250aHMgLSAxXS5sYXN0RGF0ZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZVN0YXRlKHBhdGNoOiBQYXJ0aWFsPERhdGVwaWNrZXJWaWV3TW9kZWw+KTogRGF0ZXBpY2tlclZpZXdNb2RlbCB7XG4gICAgLy8gcGF0Y2hpbmcgZmllbGRzXG4gICAgY29uc3Qgc3RhdGUgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9zdGF0ZSwgcGF0Y2gpO1xuXG4gICAgbGV0IHN0YXJ0RGF0ZSA9IHN0YXRlLmZpcnN0RGF0ZTtcblxuICAgIC8vIG1pbi9tYXggZGF0ZXMgY2hhbmdlZFxuICAgIGlmICgnbWluRGF0ZScgaW4gcGF0Y2ggfHwgJ21heERhdGUnIGluIHBhdGNoKSB7XG4gICAgICBjaGVja01pbkJlZm9yZU1heChzdGF0ZS5taW5EYXRlLCBzdGF0ZS5tYXhEYXRlKTtcbiAgICAgIHN0YXRlLmZvY3VzRGF0ZSA9IGNoZWNrRGF0ZUluUmFuZ2Uoc3RhdGUuZm9jdXNEYXRlLCBzdGF0ZS5taW5EYXRlLCBzdGF0ZS5tYXhEYXRlKTtcbiAgICAgIHN0YXRlLmZpcnN0RGF0ZSA9IGNoZWNrRGF0ZUluUmFuZ2Uoc3RhdGUuZmlyc3REYXRlLCBzdGF0ZS5taW5EYXRlLCBzdGF0ZS5tYXhEYXRlKTtcbiAgICAgIHN0YXJ0RGF0ZSA9IHN0YXRlLmZvY3VzRGF0ZTtcbiAgICB9XG5cbiAgICAvLyBkaXNhYmxlZFxuICAgIGlmICgnZGlzYWJsZWQnIGluIHBhdGNoKSB7XG4gICAgICBzdGF0ZS5mb2N1c1Zpc2libGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBpbml0aWFsIHJlYnVpbGQgdmlhICdzZWxlY3QoKSdcbiAgICBpZiAoJ3NlbGVjdGVkRGF0ZScgaW4gcGF0Y2ggJiYgdGhpcy5fc3RhdGUubW9udGhzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgc3RhcnREYXRlID0gc3RhdGUuc2VsZWN0ZWREYXRlO1xuICAgIH1cblxuICAgIC8vIHRlcm1pbmF0ZSBlYXJseSBpZiBvbmx5IGZvY3VzIHZpc2liaWxpdHkgd2FzIGNoYW5nZWRcbiAgICBpZiAoJ2ZvY3VzVmlzaWJsZScgaW4gcGF0Y2gpIHtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICAvLyBmb2N1cyBkYXRlIGNoYW5nZWRcbiAgICBpZiAoJ2ZvY3VzRGF0ZScgaW4gcGF0Y2gpIHtcbiAgICAgIHN0YXRlLmZvY3VzRGF0ZSA9IGNoZWNrRGF0ZUluUmFuZ2Uoc3RhdGUuZm9jdXNEYXRlLCBzdGF0ZS5taW5EYXRlLCBzdGF0ZS5tYXhEYXRlKTtcbiAgICAgIHN0YXJ0RGF0ZSA9IHN0YXRlLmZvY3VzRGF0ZTtcblxuICAgICAgLy8gbm90aGluZyB0byByZWJ1aWxkIGlmIG9ubHkgZm9jdXMgY2hhbmdlZCBhbmQgaXQgaXMgc3RpbGwgdmlzaWJsZVxuICAgICAgaWYgKHN0YXRlLm1vbnRocy5sZW5ndGggIT09IDAgJiYgIXN0YXRlLmZvY3VzRGF0ZS5iZWZvcmUoc3RhdGUuZmlyc3REYXRlKSAmJlxuICAgICAgICAgICFzdGF0ZS5mb2N1c0RhdGUuYWZ0ZXIoc3RhdGUubGFzdERhdGUpKSB7XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBmaXJzdCBkYXRlIGNoYW5nZWRcbiAgICBpZiAoJ2ZpcnN0RGF0ZScgaW4gcGF0Y2gpIHtcbiAgICAgIHN0YXRlLmZpcnN0RGF0ZSA9IGNoZWNrRGF0ZUluUmFuZ2Uoc3RhdGUuZmlyc3REYXRlLCBzdGF0ZS5taW5EYXRlLCBzdGF0ZS5tYXhEYXRlKTtcbiAgICAgIHN0YXJ0RGF0ZSA9IHN0YXRlLmZpcnN0RGF0ZTtcbiAgICB9XG5cbiAgICAvLyByZWJ1aWxkaW5nIG1vbnRoc1xuICAgIGlmIChzdGFydERhdGUpIHtcbiAgICAgIGNvbnN0IGZvcmNlUmVidWlsZCA9ICdkYXlUZW1wbGF0ZURhdGEnIGluIHBhdGNoIHx8ICdmaXJzdERheU9mV2VlaycgaW4gcGF0Y2ggfHwgJ21hcmtEaXNhYmxlZCcgaW4gcGF0Y2ggfHxcbiAgICAgICAgICAnbWluRGF0ZScgaW4gcGF0Y2ggfHwgJ21heERhdGUnIGluIHBhdGNoIHx8ICdkaXNhYmxlZCcgaW4gcGF0Y2ggfHwgJ291dHNpZGVEYXlzJyBpbiBwYXRjaDtcblxuICAgICAgY29uc3QgbW9udGhzID0gYnVpbGRNb250aHModGhpcy5fY2FsZW5kYXIsIHN0YXJ0RGF0ZSwgc3RhdGUsIHRoaXMuX2kxOG4sIGZvcmNlUmVidWlsZCk7XG5cbiAgICAgIC8vIHVwZGF0aW5nIG1vbnRocyBhbmQgYm91bmRhcnkgZGF0ZXNcbiAgICAgIHN0YXRlLm1vbnRocyA9IG1vbnRocztcbiAgICAgIHN0YXRlLmZpcnN0RGF0ZSA9IG1vbnRocy5sZW5ndGggPiAwID8gbW9udGhzWzBdLmZpcnN0RGF0ZSA6IHVuZGVmaW5lZDtcbiAgICAgIHN0YXRlLmxhc3REYXRlID0gbW9udGhzLmxlbmd0aCA+IDAgPyBtb250aHNbbW9udGhzLmxlbmd0aCAtIDFdLmxhc3REYXRlIDogdW5kZWZpbmVkO1xuXG4gICAgICAvLyByZXNldCBzZWxlY3RlZCBkYXRlIGlmICdtYXJrRGlzYWJsZWQnIHJldHVybnMgdHJ1ZVxuICAgICAgaWYgKCdzZWxlY3RlZERhdGUnIGluIHBhdGNoICYmICFpc0RhdGVTZWxlY3RhYmxlKHN0YXRlLnNlbGVjdGVkRGF0ZSwgc3RhdGUpKSB7XG4gICAgICAgIHN0YXRlLnNlbGVjdGVkRGF0ZSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIGFkanVzdGluZyBmb2N1cyBhZnRlciBtb250aHMgd2VyZSBidWlsdFxuICAgICAgaWYgKCdmaXJzdERhdGUnIGluIHBhdGNoKSB7XG4gICAgICAgIGlmIChzdGF0ZS5mb2N1c0RhdGUgPT09IHVuZGVmaW5lZCB8fCBzdGF0ZS5mb2N1c0RhdGUuYmVmb3JlKHN0YXRlLmZpcnN0RGF0ZSkgfHxcbiAgICAgICAgICAgIHN0YXRlLmZvY3VzRGF0ZS5hZnRlcihzdGF0ZS5sYXN0RGF0ZSkpIHtcbiAgICAgICAgICBzdGF0ZS5mb2N1c0RhdGUgPSBzdGFydERhdGU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gYWRqdXN0aW5nIG1vbnRocy95ZWFycyBmb3IgdGhlIHNlbGVjdCBib3ggbmF2aWdhdGlvblxuICAgICAgY29uc3QgeWVhckNoYW5nZWQgPSAhdGhpcy5fc3RhdGUuZmlyc3REYXRlIHx8IHRoaXMuX3N0YXRlLmZpcnN0RGF0ZS55ZWFyICE9PSBzdGF0ZS5maXJzdERhdGUueWVhcjtcbiAgICAgIGNvbnN0IG1vbnRoQ2hhbmdlZCA9ICF0aGlzLl9zdGF0ZS5maXJzdERhdGUgfHwgdGhpcy5fc3RhdGUuZmlyc3REYXRlLm1vbnRoICE9PSBzdGF0ZS5maXJzdERhdGUubW9udGg7XG4gICAgICBpZiAoc3RhdGUubmF2aWdhdGlvbiA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgICAgLy8geWVhcnMgLT4gIGJvdW5kYXJpZXMgKG1pbi9tYXggd2VyZSBjaGFuZ2VkKVxuICAgICAgICBpZiAoJ21pbkRhdGUnIGluIHBhdGNoIHx8ICdtYXhEYXRlJyBpbiBwYXRjaCB8fCBzdGF0ZS5zZWxlY3RCb3hlcy55ZWFycy5sZW5ndGggPT09IDAgfHwgeWVhckNoYW5nZWQpIHtcbiAgICAgICAgICBzdGF0ZS5zZWxlY3RCb3hlcy55ZWFycyA9IGdlbmVyYXRlU2VsZWN0Qm94WWVhcnMoc3RhdGUuZmlyc3REYXRlLCBzdGF0ZS5taW5EYXRlLCBzdGF0ZS5tYXhEYXRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1vbnRocyAtPiB3aGVuIGN1cnJlbnQgeWVhciBvciBib3VuZGFyaWVzIGNoYW5nZVxuICAgICAgICBpZiAoJ21pbkRhdGUnIGluIHBhdGNoIHx8ICdtYXhEYXRlJyBpbiBwYXRjaCB8fCBzdGF0ZS5zZWxlY3RCb3hlcy5tb250aHMubGVuZ3RoID09PSAwIHx8IHllYXJDaGFuZ2VkKSB7XG4gICAgICAgICAgc3RhdGUuc2VsZWN0Qm94ZXMubW9udGhzID1cbiAgICAgICAgICAgICAgZ2VuZXJhdGVTZWxlY3RCb3hNb250aHModGhpcy5fY2FsZW5kYXIsIHN0YXRlLmZpcnN0RGF0ZSwgc3RhdGUubWluRGF0ZSwgc3RhdGUubWF4RGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLnNlbGVjdEJveGVzID0ge3llYXJzOiBbXSwgbW9udGhzOiBbXX07XG4gICAgICB9XG5cbiAgICAgIC8vIHVwZGF0aW5nIG5hdmlnYXRpb24gYXJyb3dzIC0+IGJvdW5kYXJpZXMgY2hhbmdlIChtaW4vbWF4KSBvciBtb250aC95ZWFyIGNoYW5nZXNcbiAgICAgIGlmICgoc3RhdGUubmF2aWdhdGlvbiA9PT0gJ2Fycm93cycgfHwgc3RhdGUubmF2aWdhdGlvbiA9PT0gJ3NlbGVjdCcpICYmXG4gICAgICAgICAgKG1vbnRoQ2hhbmdlZCB8fCB5ZWFyQ2hhbmdlZCB8fCAnbWluRGF0ZScgaW4gcGF0Y2ggfHwgJ21heERhdGUnIGluIHBhdGNoIHx8ICdkaXNhYmxlZCcgaW4gcGF0Y2gpKSB7XG4gICAgICAgIHN0YXRlLnByZXZEaXNhYmxlZCA9IHN0YXRlLmRpc2FibGVkIHx8IHByZXZNb250aERpc2FibGVkKHRoaXMuX2NhbGVuZGFyLCBzdGF0ZS5maXJzdERhdGUsIHN0YXRlLm1pbkRhdGUpO1xuICAgICAgICBzdGF0ZS5uZXh0RGlzYWJsZWQgPSBzdGF0ZS5kaXNhYmxlZCB8fCBuZXh0TW9udGhEaXNhYmxlZCh0aGlzLl9jYWxlbmRhciwgc3RhdGUubGFzdERhdGUsIHN0YXRlLm1heERhdGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/datepicker/datepicker-tools.js b/dist/sunbird-ui-components/esm5/datepicker/datepicker-tools.js new file mode 100644 index 0000000..166b311 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/datepicker/datepicker-tools.js @@ -0,0 +1,302 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgbDate } from './ngb-date'; +import { isDefined } from '../util/util'; +/** + * @param {?} prev + * @param {?} next + * @return {?} + */ +export function isChangedDate(prev, next) { + return !dateComparator(prev, next); +} +/** + * @param {?} prev + * @param {?} next + * @return {?} + */ +export function isChangedMonth(prev, next) { + return !prev && !next ? false : !prev || !next ? true : prev.year !== next.year || prev.month !== next.month; +} +/** + * @param {?} prev + * @param {?} next + * @return {?} + */ +export function dateComparator(prev, next) { + return (!prev && !next) || (!!prev && !!next && prev.equals(next)); +} +/** + * @param {?} minDate + * @param {?} maxDate + * @return {?} + */ +export function checkMinBeforeMax(minDate, maxDate) { + if (maxDate && minDate && maxDate.before(minDate)) { + throw new Error("'maxDate' " + maxDate + " should be greater than 'minDate' " + minDate); + } +} +/** + * @param {?} date + * @param {?} minDate + * @param {?} maxDate + * @return {?} + */ +export function checkDateInRange(date, minDate, maxDate) { + if (date && minDate && date.before(minDate)) { + return minDate; + } + if (date && maxDate && date.after(maxDate)) { + return maxDate; + } + return date; +} +/** + * @param {?} date + * @param {?} state + * @return {?} + */ +export function isDateSelectable(date, state) { + var minDate = state.minDate, maxDate = state.maxDate, disabled = state.disabled, markDisabled = state.markDisabled; + // clang-format off + return !(!isDefined(date) || + disabled || + (markDisabled && markDisabled(date, { year: date.year, month: date.month })) || + (minDate && date.before(minDate)) || + (maxDate && date.after(maxDate))); + // clang-format on +} +/** + * @param {?} calendar + * @param {?} date + * @param {?} minDate + * @param {?} maxDate + * @return {?} + */ +export function generateSelectBoxMonths(calendar, date, minDate, maxDate) { + if (!date) { + return []; + } + /** @type {?} */ + var months = calendar.getMonths(date.year); + if (minDate && date.year === minDate.year) { + /** @type {?} */ + var index = months.findIndex((/** + * @param {?} month + * @return {?} + */ + function (month) { return month === minDate.month; })); + months = months.slice(index); + } + if (maxDate && date.year === maxDate.year) { + /** @type {?} */ + var index = months.findIndex((/** + * @param {?} month + * @return {?} + */ + function (month) { return month === maxDate.month; })); + months = months.slice(0, index + 1); + } + return months; +} +/** + * @param {?} date + * @param {?} minDate + * @param {?} maxDate + * @return {?} + */ +export function generateSelectBoxYears(date, minDate, maxDate) { + if (!date) { + return []; + } + /** @type {?} */ + var start = minDate && minDate.year || date.year - 10; + /** @type {?} */ + var end = maxDate && maxDate.year || date.year + 10; + return Array.from({ length: end - start + 1 }, (/** + * @param {?} e + * @param {?} i + * @return {?} + */ + function (e, i) { return start + i; })); +} +/** + * @param {?} calendar + * @param {?} date + * @param {?} maxDate + * @return {?} + */ +export function nextMonthDisabled(calendar, date, maxDate) { + return maxDate && calendar.getNext(date, 'm').after(maxDate); +} +/** + * @param {?} calendar + * @param {?} date + * @param {?} minDate + * @return {?} + */ +export function prevMonthDisabled(calendar, date, minDate) { + /** @type {?} */ + var prevDate = calendar.getPrev(date, 'm'); + return minDate && (prevDate.year === minDate.year && prevDate.month < minDate.month || + prevDate.year < minDate.year && minDate.month === 1); +} +/** + * @param {?} calendar + * @param {?} date + * @param {?} state + * @param {?} i18n + * @param {?} force + * @return {?} + */ +export function buildMonths(calendar, date, state, i18n, force) { + var displayMonths = state.displayMonths, months = state.months; + // move old months to a temporary array + /** @type {?} */ + var monthsToReuse = months.splice(0, months.length); + // generate new first dates, nullify or reuse months + /** @type {?} */ + var firstDates = Array.from({ length: displayMonths }, (/** + * @param {?} _ + * @param {?} i + * @return {?} + */ + function (_, i) { + /** @type {?} */ + var firstDate = calendar.getNext(date, 'm', i); + months[i] = null; + if (!force) { + /** @type {?} */ + var reusedIndex = monthsToReuse.findIndex((/** + * @param {?} month + * @return {?} + */ + function (month) { return month.firstDate.equals(firstDate); })); + // move reused month back to months + if (reusedIndex !== -1) { + months[i] = monthsToReuse.splice(reusedIndex, 1)[0]; + } + } + return firstDate; + })); + // rebuild nullified months + firstDates.forEach((/** + * @param {?} firstDate + * @param {?} i + * @return {?} + */ + function (firstDate, i) { + if (months[i] === null) { + months[i] = buildMonth(calendar, firstDate, state, i18n, monthsToReuse.shift() || (/** @type {?} */ ({}))); + } + })); + return months; +} +/** + * @param {?} calendar + * @param {?} date + * @param {?} state + * @param {?} i18n + * @param {?=} month + * @return {?} + */ +export function buildMonth(calendar, date, state, i18n, month) { + if (month === void 0) { month = (/** @type {?} */ ({})); } + var dayTemplateData = state.dayTemplateData, minDate = state.minDate, maxDate = state.maxDate, firstDayOfWeek = state.firstDayOfWeek, markDisabled = state.markDisabled, outsideDays = state.outsideDays; + /** @type {?} */ + var calendarToday = calendar.getToday(); + month.firstDate = null; + month.lastDate = null; + month.number = date.month; + month.year = date.year; + month.weeks = month.weeks || []; + month.weekdays = month.weekdays || []; + date = getFirstViewDate(calendar, date, firstDayOfWeek); + // month has weeks + for (var week = 0; week < calendar.getWeeksPerMonth(); week++) { + /** @type {?} */ + var weekObject = month.weeks[week]; + if (!weekObject) { + weekObject = month.weeks[week] = { number: 0, days: [], collapsed: true }; + } + /** @type {?} */ + var days = weekObject.days; + // week has days + for (var day = 0; day < calendar.getDaysPerWeek(); day++) { + if (week === 0) { + month.weekdays[day] = calendar.getWeekday(date); + } + /** @type {?} */ + var newDate = new NgbDate(date.year, date.month, date.day); + /** @type {?} */ + var nextDate = calendar.getNext(newDate); + /** @type {?} */ + var ariaLabel = i18n.getDayAriaLabel(newDate); + // marking date as disabled + /** @type {?} */ + var disabled = !!((minDate && newDate.before(minDate)) || (maxDate && newDate.after(maxDate))); + if (!disabled && markDisabled) { + disabled = markDisabled(newDate, { month: month.number, year: month.year }); + } + // today + /** @type {?} */ + var today = newDate.equals(calendarToday); + // adding user-provided data to the context + /** @type {?} */ + var contextUserData = dayTemplateData ? dayTemplateData(newDate, { month: month.number, year: month.year }) : undefined; + // saving first date of the month + if (month.firstDate === null && newDate.month === month.number) { + month.firstDate = newDate; + } + // saving last date of the month + if (newDate.month === month.number && nextDate.month !== month.number) { + month.lastDate = newDate; + } + /** @type {?} */ + var dayObject = days[day]; + if (!dayObject) { + dayObject = days[day] = (/** @type {?} */ ({})); + } + dayObject.date = newDate; + dayObject.context = Object.assign(dayObject.context || {}, { + $implicit: newDate, + date: newDate, + data: contextUserData, + currentMonth: month.number, disabled: disabled, + focused: false, + selected: false, today: today + }); + dayObject.tabindex = -1; + dayObject.ariaLabel = ariaLabel; + dayObject.hidden = false; + date = nextDate; + } + weekObject.number = calendar.getWeekNumber(days.map((/** + * @param {?} day + * @return {?} + */ + function (day) { return day.date; })), firstDayOfWeek); + // marking week as collapsed + weekObject.collapsed = outsideDays === 'collapsed' && days[0].date.month !== month.number && + days[days.length - 1].date.month !== month.number; + } + return month; +} +/** + * @param {?} calendar + * @param {?} date + * @param {?} firstDayOfWeek + * @return {?} + */ +export function getFirstViewDate(calendar, date, firstDayOfWeek) { + /** @type {?} */ + var daysPerWeek = calendar.getDaysPerWeek(); + /** @type {?} */ + var firstMonthDate = new NgbDate(date.year, date.month, 1); + /** @type {?} */ + var dayOfWeek = calendar.getWeekday(firstMonthDate) % daysPerWeek; + return calendar.getPrev(firstMonthDate, 'd', (daysPerWeek + dayOfWeek - firstDayOfWeek) % daysPerWeek); +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci10b29scy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImRhdGVwaWNrZXIvZGF0ZXBpY2tlci10b29scy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFlBQVksQ0FBQztBQUduQyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sY0FBYyxDQUFDOzs7Ozs7QUFHdkMsTUFBTSxVQUFVLGFBQWEsQ0FBQyxJQUFhLEVBQUUsSUFBYTtJQUN4RCxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNyQyxDQUFDOzs7Ozs7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUFDLElBQWEsRUFBRSxJQUFhO0lBQ3pELE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMvRyxDQUFDOzs7Ozs7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUFDLElBQWEsRUFBRSxJQUFhO0lBQ3pELE9BQU8sQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNyRSxDQUFDOzs7Ozs7QUFFRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsT0FBZ0IsRUFBRSxPQUFnQjtJQUNsRSxJQUFJLE9BQU8sSUFBSSxPQUFPLElBQUksT0FB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Q0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsTUFBTSxDQUFDO0tBQ3ZEO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDOzs7Ozs7O0FBRUQsTUFBTSxVQUFVLGdCQUFnQixDQUFDLFFBQXFCLEVBQUUsSUFBYSxFQUFFLGNBQXNCOztRQUNyRixXQUFXLEdBQUcsUUFBUSxDQUFDLGNBQWMsRUFBRTs7UUFDdkMsY0FBYyxHQUFHLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7O1FBQ3RELFNBQVMsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxHQUFHLFdBQVc7SUFDbkUsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxXQUFXLEdBQUcsU0FBUyxHQUFHLGNBQWMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDO0FBQ3pHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge05nYkRhdGV9IGZyb20gJy4vbmdiLWRhdGUnO1xuaW1wb3J0IHtEYXRlcGlja2VyVmlld01vZGVsLCBEYXlWaWV3TW9kZWwsIE1vbnRoVmlld01vZGVsfSBmcm9tICcuL2RhdGVwaWNrZXItdmlldy1tb2RlbCc7XG5pbXBvcnQge05nYkNhbGVuZGFyfSBmcm9tICcuL25nYi1jYWxlbmRhcic7XG5pbXBvcnQge2lzRGVmaW5lZH0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCB7TmdiRGF0ZXBpY2tlckkxOG59IGZyb20gJy4vZGF0ZXBpY2tlci1pMThuJztcblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ2hhbmdlZERhdGUocHJldjogTmdiRGF0ZSwgbmV4dDogTmdiRGF0ZSkge1xuICByZXR1cm4gIWRhdGVDb21wYXJhdG9yKHByZXYsIG5leHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDaGFuZ2VkTW9udGgocHJldjogTmdiRGF0ZSwgbmV4dDogTmdiRGF0ZSkge1xuICByZXR1cm4gIXByZXYgJiYgIW5leHQgPyBmYWxzZSA6ICFwcmV2IHx8ICFuZXh0ID8gdHJ1ZSA6IHByZXYueWVhciAhPT0gbmV4dC55ZWFyIHx8IHByZXYubW9udGggIT09IG5leHQubW9udGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkYXRlQ29tcGFyYXRvcihwcmV2OiBOZ2JEYXRlLCBuZXh0OiBOZ2JEYXRlKSB7XG4gIHJldHVybiAoIXByZXYgJiYgIW5leHQpIHx8ICghIXByZXYgJiYgISFuZXh0ICYmIHByZXYuZXF1YWxzKG5leHQpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrTWluQmVmb3JlTWF4KG1pbkRhdGU6IE5nYkRhdGUsIG1heERhdGU6IE5nYkRhdGUpIHtcbiAgaWYgKG1heERhdGUgJiYgbWluRGF0ZSAmJiBtYXhEYXRlLmJlZm9yZShtaW5EYXRlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJ21heERhdGUnICR7bWF4RGF0ZX0gc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiAnbWluRGF0ZScgJHttaW5EYXRlfWApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0RhdGVJblJhbmdlKGRhdGU6IE5nYkRhdGUsIG1pbkRhdGU6IE5nYkRhdGUsIG1heERhdGU6IE5nYkRhdGUpOiBOZ2JEYXRlIHtcbiAgaWYgKGRhdGUgJiYgbWluRGF0ZSAmJiBkYXRlLmJlZm9yZShtaW5EYXRlKSkge1xuICAgIHJldHVybiBtaW5EYXRlO1xuICB9XG4gIGlmIChkYXRlICYmIG1heERhdGUgJiYgZGF0ZS5hZnRlcihtYXhEYXRlKSkge1xuICAgIHJldHVybiBtYXhEYXRlO1xuICB9XG5cbiAgcmV0dXJuIGRhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGVTZWxlY3RhYmxlKGRhdGU6IE5nYkRhdGUsIHN0YXRlOiBEYXRlcGlja2VyVmlld01vZGVsKSB7XG4gIGNvbnN0IHttaW5EYXRlLCBtYXhEYXRlLCBkaXNhYmxlZCwgbWFya0Rpc2FibGVkfSA9IHN0YXRlO1xuICAvLyBjbGFuZy1mb3JtYXQgb2ZmXG4gIHJldHVybiAhKFxuICAgICFpc0RlZmluZWQoZGF0ZSkgfHxcbiAgICBkaXNhYmxlZCB8fFxuICAgIChtYXJrRGlzYWJsZWQgJiYgbWFya0Rpc2FibGVkKGRhdGUsIHt5ZWFyOiBkYXRlLnllYXIsIG1vbnRoOiBkYXRlLm1vbnRofSkpIHx8XG4gICAgKG1pbkRhdGUgJiYgZGF0ZS5iZWZvcmUobWluRGF0ZSkpIHx8XG4gICAgKG1heERhdGUgJiYgZGF0ZS5hZnRlcihtYXhEYXRlKSlcbiAgKTtcbiAgLy8gY2xhbmctZm9ybWF0IG9uXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVNlbGVjdEJveE1vbnRocyhjYWxlbmRhcjogTmdiQ2FsZW5kYXIsIGRhdGU6IE5nYkRhdGUsIG1pbkRhdGU6IE5nYkRhdGUsIG1heERhdGU6IE5nYkRhdGUpIHtcbiAgaWYgKCFkYXRlKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgbGV0IG1vbnRocyA9IGNhbGVuZGFyLmdldE1vbnRocyhkYXRlLnllYXIpO1xuXG4gIGlmIChtaW5EYXRlICYmIGRhdGUueWVhciA9PT0gbWluRGF0ZS55ZWFyKSB7XG4gICAgY29uc3QgaW5kZXggPSBtb250aHMuZmluZEluZGV4KG1vbnRoID0+IG1vbnRoID09PSBtaW5EYXRlLm1vbnRoKTtcbiAgICBtb250aHMgPSBtb250aHMuc2xpY2UoaW5kZXgpO1xuICB9XG5cbiAgaWYgKG1heERhdGUgJiYgZGF0ZS55ZWFyID09PSBtYXhEYXRlLnllYXIpIHtcbiAgICBjb25zdCBpbmRleCA9IG1vbnRocy5maW5kSW5kZXgobW9udGggPT4gbW9udGggPT09IG1heERhdGUubW9udGgpO1xuICAgIG1vbnRocyA9IG1vbnRocy5zbGljZSgwLCBpbmRleCArIDEpO1xuICB9XG5cbiAgcmV0dXJuIG1vbnRocztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlU2VsZWN0Qm94WWVhcnMoZGF0ZTogTmdiRGF0ZSwgbWluRGF0ZTogTmdiRGF0ZSwgbWF4RGF0ZTogTmdiRGF0ZSkge1xuICBpZiAoIWRhdGUpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCBzdGFydCA9IG1pbkRhdGUgJiYgbWluRGF0ZS55ZWFyIHx8IGRhdGUueWVhciAtIDEwO1xuICBjb25zdCBlbmQgPSBtYXhEYXRlICYmIG1heERhdGUueWVhciB8fCBkYXRlLnllYXIgKyAxMDtcblxuICByZXR1cm4gQXJyYXkuZnJvbSh7bGVuZ3RoOiBlbmQgLSBzdGFydCArIDF9LCAoZSwgaSkgPT4gc3RhcnQgKyBpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5leHRNb250aERpc2FibGVkKGNhbGVuZGFyOiBOZ2JDYWxlbmRhciwgZGF0ZTogTmdiRGF0ZSwgbWF4RGF0ZTogTmdiRGF0ZSkge1xuICByZXR1cm4gbWF4RGF0ZSAmJiBjYWxlbmRhci5nZXROZXh0KGRhdGUsICdtJykuYWZ0ZXIobWF4RGF0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmV2TW9udGhEaXNhYmxlZChjYWxlbmRhcjogTmdiQ2FsZW5kYXIsIGRhdGU6IE5nYkRhdGUsIG1pbkRhdGU6IE5nYkRhdGUpIHtcbiAgY29uc3QgcHJldkRhdGUgPSBjYWxlbmRhci5nZXRQcmV2KGRhdGUsICdtJyk7XG4gIHJldHVybiBtaW5EYXRlICYmIChwcmV2RGF0ZS55ZWFyID09PSBtaW5EYXRlLnllYXIgJiYgcHJldkRhdGUubW9udGggPCBtaW5EYXRlLm1vbnRoIHx8XG4gICAgICAgICAgICAgICAgICAgICBwcmV2RGF0ZS55ZWFyIDwgbWluRGF0ZS55ZWFyICYmIG1pbkRhdGUubW9udGggPT09IDEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRNb250aHMoXG4gICAgY2FsZW5kYXI6IE5nYkNhbGVuZGFyLCBkYXRlOiBOZ2JEYXRlLCBzdGF0ZTogRGF0ZXBpY2tlclZpZXdNb2RlbCwgaTE4bjogTmdiRGF0ZXBpY2tlckkxOG4sXG4gICAgZm9yY2U6IGJvb2xlYW4pOiBNb250aFZpZXdNb2RlbFtdIHtcbiAgY29uc3Qge2Rpc3BsYXlNb250aHMsIG1vbnRoc30gPSBzdGF0ZTtcbiAgLy8gbW92ZSBvbGQgbW9udGhzIHRvIGEgdGVtcG9yYXJ5IGFycmF5XG4gIGNvbnN0IG1vbnRoc1RvUmV1c2UgPSBtb250aHMuc3BsaWNlKDAsIG1vbnRocy5sZW5ndGgpO1xuXG4gIC8vIGdlbmVyYXRlIG5ldyBmaXJzdCBkYXRlcywgbnVsbGlmeSBvciByZXVzZSBtb250aHNcbiAgY29uc3QgZmlyc3REYXRlcyA9IEFycmF5LmZyb20oe2xlbmd0aDogZGlzcGxheU1vbnRoc30sIChfLCBpKSA9PiB7XG4gICAgY29uc3QgZmlyc3REYXRlID0gY2FsZW5kYXIuZ2V0TmV4dChkYXRlLCAnbScsIGkpO1xuICAgIG1vbnRoc1tpXSA9IG51bGw7XG5cbiAgICBpZiAoIWZvcmNlKSB7XG4gICAgICBjb25zdCByZXVzZWRJbmRleCA9IG1vbnRoc1RvUmV1c2UuZmluZEluZGV4KG1vbnRoID0+IG1vbnRoLmZpcnN0RGF0ZS5lcXVhbHMoZmlyc3REYXRlKSk7XG4gICAgICAvLyBtb3ZlIHJldXNlZCBtb250aCBiYWNrIHRvIG1vbnRoc1xuICAgICAgaWYgKHJldXNlZEluZGV4ICE9PSAtMSkge1xuICAgICAgICBtb250aHNbaV0gPSBtb250aHNUb1JldXNlLnNwbGljZShyZXVzZWRJbmRleCwgMSlbMF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpcnN0RGF0ZTtcbiAgfSk7XG5cbiAgLy8gcmVidWlsZCBudWxsaWZpZWQgbW9udGhzXG4gIGZpcnN0RGF0ZXMuZm9yRWFjaCgoZmlyc3REYXRlLCBpKSA9PiB7XG4gICAgaWYgKG1vbnRoc1tpXSA9PT0gbnVsbCkge1xuICAgICAgbW9udGhzW2ldID0gYnVpbGRNb250aChjYWxlbmRhciwgZmlyc3REYXRlLCBzdGF0ZSwgaTE4biwgbW9udGhzVG9SZXVzZS5zaGlmdCgpIHx8IHt9IGFzIE1vbnRoVmlld01vZGVsKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBtb250aHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZE1vbnRoKFxuICAgIGNhbGVuZGFyOiBOZ2JDYWxlbmRhciwgZGF0ZTogTmdiRGF0ZSwgc3RhdGU6IERhdGVwaWNrZXJWaWV3TW9kZWwsIGkxOG46IE5nYkRhdGVwaWNrZXJJMThuLFxuICAgIG1vbnRoOiBNb250aFZpZXdNb2RlbCA9IHt9IGFzIE1vbnRoVmlld01vZGVsKTogTW9udGhWaWV3TW9kZWwge1xuICBjb25zdCB7ZGF5VGVtcGxhdGVEYXRhLCBtaW5EYXRlLCBtYXhEYXRlLCBmaXJzdERheU9mV2VlaywgbWFya0Rpc2FibGVkLCBvdXRzaWRlRGF5c30gPSBzdGF0ZTtcbiAgY29uc3QgY2FsZW5kYXJUb2RheSA9IGNhbGVuZGFyLmdldFRvZGF5KCk7XG5cbiAgbW9udGguZmlyc3REYXRlID0gbnVsbDtcbiAgbW9udGgubGFzdERhdGUgPSBudWxsO1xuICBtb250aC5udW1iZXIgPSBkYXRlLm1vbnRoO1xuICBtb250aC55ZWFyID0gZGF0ZS55ZWFyO1xuICBtb250aC53ZWVrcyA9IG1vbnRoLndlZWtzIHx8IFtdO1xuICBtb250aC53ZWVrZGF5cyA9IG1vbnRoLndlZWtkYXlzIHx8IFtdO1xuXG4gIGRhdGUgPSBnZXRGaXJzdFZpZXdEYXRlKGNhbGVuZGFyLCBkYXRlLCBmaXJzdERheU9mV2Vlayk7XG5cbiAgLy8gbW9udGggaGFzIHdlZWtzXG4gIGZvciAobGV0IHdlZWsgPSAwOyB3ZWVrIDwgY2FsZW5kYXIuZ2V0V2Vla3NQZXJNb250aCgpOyB3ZWVrKyspIHtcbiAgICBsZXQgd2Vla09iamVjdCA9IG1vbnRoLndlZWtzW3dlZWtdO1xuICAgIGlmICghd2Vla09iamVjdCkge1xuICAgICAgd2Vla09iamVjdCA9IG1vbnRoLndlZWtzW3dlZWtdID0ge251bWJlcjogMCwgZGF5czogW10sIGNvbGxhcHNlZDogdHJ1ZX07XG4gICAgfVxuICAgIGNvbnN0IGRheXMgPSB3ZWVrT2JqZWN0LmRheXM7XG5cbiAgICAvLyB3ZWVrIGhhcyBkYXlzXG4gICAgZm9yIChsZXQgZGF5ID0gMDsgZGF5IDwgY2FsZW5kYXIuZ2V0RGF5c1BlcldlZWsoKTsgZGF5KyspIHtcbiAgICAgIGlmICh3ZWVrID09PSAwKSB7XG4gICAgICAgIG1vbnRoLndlZWtkYXlzW2RheV0gPSBjYWxlbmRhci5nZXRXZWVrZGF5KGRhdGUpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXdEYXRlID0gbmV3IE5nYkRhdGUoZGF0ZS55ZWFyLCBkYXRlLm1vbnRoLCBkYXRlLmRheSk7XG4gICAgICBjb25zdCBuZXh0RGF0ZSA9IGNhbGVuZGFyLmdldE5leHQobmV3RGF0ZSk7XG5cbiAgICAgIGNvbnN0IGFyaWFMYWJlbCA9IGkxOG4uZ2V0RGF5QXJpYUxhYmVsKG5ld0RhdGUpO1xuXG4gICAgICAvLyBtYXJraW5nIGRhdGUgYXMgZGlzYWJsZWRcbiAgICAgIGxldCBkaXNhYmxlZCA9ICEhKChtaW5EYXRlICYmIG5ld0RhdGUuYmVmb3JlKG1pbkRhdGUpKSB8fCAobWF4RGF0ZSAmJiBuZXdEYXRlLmFmdGVyKG1heERhdGUpKSk7XG4gICAgICBpZiAoIWRpc2FibGVkICYmIG1hcmtEaXNhYmxlZCkge1xuICAgICAgICBkaXNhYmxlZCA9IG1hcmtEaXNhYmxlZChuZXdEYXRlLCB7bW9udGg6IG1vbnRoLm51bWJlciwgeWVhcjogbW9udGgueWVhcn0pO1xuICAgICAgfVxuXG4gICAgICAvLyB0b2RheVxuICAgICAgbGV0IHRvZGF5ID0gbmV3RGF0ZS5lcXVhbHMoY2FsZW5kYXJUb2RheSk7XG5cbiAgICAgIC8vIGFkZGluZyB1c2VyLXByb3ZpZGVkIGRhdGEgdG8gdGhlIGNvbnRleHRcbiAgICAgIGxldCBjb250ZXh0VXNlckRhdGEgPVxuICAgICAgICAgIGRheVRlbXBsYXRlRGF0YSA/IGRheVRlbXBsYXRlRGF0YShuZXdEYXRlLCB7bW9udGg6IG1vbnRoLm51bWJlciwgeWVhcjogbW9udGgueWVhcn0pIDogdW5kZWZpbmVkO1xuXG4gICAgICAvLyBzYXZpbmcgZmlyc3QgZGF0ZSBvZiB0aGUgbW9udGhcbiAgICAgIGlmIChtb250aC5maXJzdERhdGUgPT09IG51bGwgJiYgbmV3RGF0ZS5tb250aCA9PT0gbW9udGgubnVtYmVyKSB7XG4gICAgICAgIG1vbnRoLmZpcnN0RGF0ZSA9IG5ld0RhdGU7XG4gICAgICB9XG5cbiAgICAgIC8vIHNhdmluZyBsYXN0IGRhdGUgb2YgdGhlIG1vbnRoXG4gICAgICBpZiAobmV3RGF0ZS5tb250aCA9PT0gbW9udGgubnVtYmVyICYmIG5leHREYXRlLm1vbnRoICE9PSBtb250aC5udW1iZXIpIHtcbiAgICAgICAgbW9udGgubGFzdERhdGUgPSBuZXdEYXRlO1xuICAgICAgfVxuXG4gICAgICBsZXQgZGF5T2JqZWN0ID0gZGF5c1tkYXldO1xuICAgICAgaWYgKCFkYXlPYmplY3QpIHtcbiAgICAgICAgZGF5T2JqZWN0ID0gZGF5c1tkYXldID0ge30gYXMgRGF5Vmlld01vZGVsO1xuICAgICAgfVxuICAgICAgZGF5T2JqZWN0LmRhdGUgPSBuZXdEYXRlO1xuICAgICAgZGF5T2JqZWN0LmNvbnRleHQgPSBPYmplY3QuYXNzaWduKGRheU9iamVjdC5jb250ZXh0IHx8IHt9LCB7XG4gICAgICAgICRpbXBsaWNpdDogbmV3RGF0ZSxcbiAgICAgICAgZGF0ZTogbmV3RGF0ZSxcbiAgICAgICAgZGF0YTogY29udGV4dFVzZXJEYXRhLFxuICAgICAgICBjdXJyZW50TW9udGg6IG1vbnRoLm51bWJlciwgZGlzYWJsZWQsXG4gICAgICAgIGZvY3VzZWQ6IGZhbHNlLFxuICAgICAgICBzZWxlY3RlZDogZmFsc2UsIHRvZGF5XG4gICAgICB9KTtcbiAgICAgIGRheU9iamVjdC50YWJpbmRleCA9IC0xO1xuICAgICAgZGF5T2JqZWN0LmFyaWFMYWJlbCA9IGFyaWFMYWJlbDtcbiAgICAgIGRheU9iamVjdC5oaWRkZW4gPSBmYWxzZTtcblxuICAgICAgZGF0ZSA9IG5leHREYXRlO1xuICAgIH1cblxuICAgIHdlZWtPYmplY3QubnVtYmVyID0gY2FsZW5kYXIuZ2V0V2Vla051bWJlcihkYXlzLm1hcChkYXkgPT4gZGF5LmRhdGUpLCBmaXJzdERheU9mV2Vlayk7XG5cbiAgICAvLyBtYXJraW5nIHdlZWsgYXMgY29sbGFwc2VkXG4gICAgd2Vla09iamVjdC5jb2xsYXBzZWQgPSBvdXRzaWRlRGF5cyA9PT0gJ2NvbGxhcHNlZCcgJiYgZGF5c1swXS5kYXRlLm1vbnRoICE9PSBtb250aC5udW1iZXIgJiZcbiAgICAgICAgZGF5c1tkYXlzLmxlbmd0aCAtIDFdLmRhdGUubW9udGggIT09IG1vbnRoLm51bWJlcjtcbiAgfVxuXG4gIHJldHVybiBtb250aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpcnN0Vmlld0RhdGUoY2FsZW5kYXI6IE5nYkNhbGVuZGFyLCBkYXRlOiBOZ2JEYXRlLCBmaXJzdERheU9mV2VlazogbnVtYmVyKTogTmdiRGF0ZSB7XG4gIGNvbnN0IGRheXNQZXJXZWVrID0gY2FsZW5kYXIuZ2V0RGF5c1BlcldlZWsoKTtcbiAgY29uc3QgZmlyc3RNb250aERhdGUgPSBuZXcgTmdiRGF0ZShkYXRlLnllYXIsIGRhdGUubW9udGgsIDEpO1xuICBjb25zdCBkYXlPZldlZWsgPSBjYWxlbmRhci5nZXRXZWVrZGF5KGZpcnN0TW9udGhEYXRlKSAlIGRheXNQZXJXZWVrO1xuICByZXR1cm4gY2FsZW5kYXIuZ2V0UHJldihmaXJzdE1vbnRoRGF0ZSwgJ2QnLCAoZGF5c1BlcldlZWsgKyBkYXlPZldlZWsgLSBmaXJzdERheU9mV2VlaykgJSBkYXlzUGVyV2Vlayk7XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/datepicker/datepicker-view-model.js b/dist/sunbird-ui-components/esm5/datepicker/datepicker-view-model.js new file mode 100644 index 0000000..3a30522 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/datepicker/datepicker-view-model.js @@ -0,0 +1,13 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @enum {number} */ +var NavigationEvent = { + PREV: 0, + NEXT: 1, +}; +export { NavigationEvent }; +NavigationEvent[NavigationEvent.PREV] = 'PREV'; +NavigationEvent[NavigationEvent.NEXT] = 'NEXT'; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci12aWV3LW1vZGVsLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiZGF0ZXBpY2tlci9kYXRlcGlja2VyLXZpZXctbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0lBeURFLE9BQUk7SUFDSixPQUFJIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOZ2JEYXRlfSBmcm9tICcuL25nYi1kYXRlJztcbmltcG9ydCB7TmdiRGF0ZVN0cnVjdH0gZnJvbSAnLi9uZ2ItZGF0ZS1zdHJ1Y3QnO1xuaW1wb3J0IHtEYXlUZW1wbGF0ZUNvbnRleHR9IGZyb20gJy4vZGF0ZXBpY2tlci1kYXktdGVtcGxhdGUtY29udGV4dCc7XG5cbmV4cG9ydCB0eXBlIE5nYk1hcmtEaXNhYmxlZCA9IChkYXRlOiBOZ2JEYXRlU3RydWN0LCBjdXJyZW50OiB7eWVhcjogbnVtYmVyLCBtb250aDogbnVtYmVyfSkgPT4gYm9vbGVhbjtcbmV4cG9ydCB0eXBlIE5nYkRheVRlbXBsYXRlRGF0YSA9IChkYXRlOiBOZ2JEYXRlU3RydWN0LCBjdXJyZW50OiB7eWVhcjogbnVtYmVyLCBtb250aDogbnVtYmVyfSkgPT4gYW55O1xuXG5leHBvcnQgdHlwZSBEYXlWaWV3TW9kZWwgPSB7XG4gIGRhdGU6IE5nYkRhdGUsXG4gIGNvbnRleHQ6IERheVRlbXBsYXRlQ29udGV4dCxcbiAgdGFiaW5kZXg6IG51bWJlcixcbiAgYXJpYUxhYmVsOiBzdHJpbmcsXG4gIGhpZGRlbjogYm9vbGVhblxufTtcblxuZXhwb3J0IHR5cGUgV2Vla1ZpZXdNb2RlbCA9IHtcbiAgbnVtYmVyOiBudW1iZXIsXG4gIGRheXM6IERheVZpZXdNb2RlbFtdLFxuICBjb2xsYXBzZWQ6IGJvb2xlYW5cbn07XG5cbmV4cG9ydCB0eXBlIE1vbnRoVmlld01vZGVsID0ge1xuICBmaXJzdERhdGU6IE5nYkRhdGUsXG4gIGxhc3REYXRlOiBOZ2JEYXRlLFxuICBudW1iZXI6IG51bWJlcixcbiAgeWVhcjogbnVtYmVyLFxuICB3ZWVrczogV2Vla1ZpZXdNb2RlbFtdLFxuICB3ZWVrZGF5czogbnVtYmVyW11cbn07XG5cbi8vIGNsYW5nLWZvcm1hdCBvZmZcbmV4cG9ydCB0eXBlIERhdGVwaWNrZXJWaWV3TW9kZWwgPSB7XG4gIGRheVRlbXBsYXRlRGF0YT86IE5nYkRheVRlbXBsYXRlRGF0YSxcbiAgZGlzYWJsZWQ6IGJvb2xlYW4sXG4gIGRpc3BsYXlNb250aHM6IG51bWJlcixcbiAgZmlyc3REYXRlPzogTmdiRGF0ZSxcbiAgZmlyc3REYXlPZldlZWs6IG51bWJlcixcbiAgZm9jdXNEYXRlPzogTmdiRGF0ZSxcbiAgZm9jdXNWaXNpYmxlOiBib29sZWFuLFxuICBsYXN0RGF0ZT86IE5nYkRhdGUsXG4gIG1hcmtEaXNhYmxlZD86IE5nYk1hcmtEaXNhYmxlZCxcbiAgbWF4RGF0ZT86IE5nYkRhdGUsXG4gIG1pbkRhdGU/OiBOZ2JEYXRlLFxuICBtb250aHM6IE1vbnRoVmlld01vZGVsW10sXG4gIG5hdmlnYXRpb246ICdzZWxlY3QnIHwgJ2Fycm93cycgfCAnbm9uZScsXG4gIG91dHNpZGVEYXlzOiAndmlzaWJsZScgfCAnY29sbGFwc2VkJyB8ICdoaWRkZW4nLFxuICBwcmV2RGlzYWJsZWQ6IGJvb2xlYW4sXG4gIG5leHREaXNhYmxlZDogYm9vbGVhbixcbiAgc2VsZWN0Qm94ZXM6IHtcbiAgICB5ZWFyczogbnVtYmVyW10sXG4gICAgbW9udGhzOiBudW1iZXJbXVxuICB9LFxuICBzZWxlY3RlZERhdGU6IE5nYkRhdGVcbn07XG4vLyBjbGFuZy1mb3JtYXQgb25cblxuZXhwb3J0IGVudW0gTmF2aWdhdGlvbkV2ZW50IHtcbiAgUFJFVixcbiAgTkVYVFxufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/datepicker/datepicker.js b/dist/sunbird-ui-components/esm5/datepicker/datepicker.js new file mode 100644 index 0000000..a0158df --- /dev/null +++ b/dist/sunbird-ui-components/esm5/datepicker/datepicker.js @@ -0,0 +1,598 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import * as tslib_1 from "tslib"; +import { fromEvent, merge, Subject } from 'rxjs'; +import { filter, take, takeUntil } from 'rxjs/operators'; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, forwardRef, Input, NgZone, Output, TemplateRef, ViewChild, ViewEncapsulation } from '@angular/core'; +import { NG_VALUE_ACCESSOR } from '@angular/forms'; +import { NgbCalendar } from './ngb-calendar'; +import { NgbDate } from './ngb-date'; +import { NgbDatepickerService } from './datepicker-service'; +import { NgbDatepickerKeyMapService } from './datepicker-keymap-service'; +import { NavigationEvent } from './datepicker-view-model'; +import { NgbDatepickerConfig } from './datepicker-config'; +import { NgbDateAdapter } from './adapters/ngb-date-adapter'; +import { NgbDatepickerI18n } from './datepicker-i18n'; +import { isChangedDate, isChangedMonth } from './datepicker-tools'; +import { hasClassName } from '../util/util'; +/** @type {?} */ +var NGB_DATEPICKER_VALUE_ACCESSOR = { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef((/** + * @return {?} + */ + function () { return NgbDatepicker; })), + multi: true +}; +/** + * An event emitted right before the navigation happens and the month displayed by the datepicker changes. + * @record + */ +export function NgbDatepickerNavigateEvent() { } +if (false) { + /** + * The currently displayed month. + * @type {?} + */ + NgbDatepickerNavigateEvent.prototype.current; + /** + * The month we're navigating to. + * @type {?} + */ + NgbDatepickerNavigateEvent.prototype.next; + /** + * Calling this function will prevent navigation from happening. + * + * \@since 4.1.0 + * @type {?} + */ + NgbDatepickerNavigateEvent.prototype.preventDefault; +} +/** + * A highly configurable component that helps you with selecting calendar dates. + * + * `NgbDatepicker` is meant to be displayed inline on a page or put inside a popup. + */ +var NgbDatepicker = /** @class */ (function () { + function NgbDatepicker(_keyMapService, _service, _calendar, i18n, config, _cd, _elementRef, _ngbDateAdapter, _ngZone) { + var _this = this; + this._keyMapService = _keyMapService; + this._service = _service; + this._calendar = _calendar; + this.i18n = i18n; + this._cd = _cd; + this._elementRef = _elementRef; + this._ngbDateAdapter = _ngbDateAdapter; + this._ngZone = _ngZone; + this._destroyed$ = new Subject(); + /** + * An event emitted right before the navigation happens and displayed month changes. + * + * See [`NgbDatepickerNavigateEvent`](#/components/datepicker/api#NgbDatepickerNavigateEvent) for the payload info. + */ + this.navigate = new EventEmitter(); + /** + * An event emitted when user selects a date using keyboard or mouse. + * + * The payload of the event is currently selected `NgbDate`. + */ + this.select = new EventEmitter(); + this.onChange = (/** + * @param {?} _ + * @return {?} + */ + function (_) { }); + this.onTouched = (/** + * @return {?} + */ + function () { }); + ['dayTemplate', 'dayTemplateData', 'displayMonths', 'firstDayOfWeek', 'footerTemplate', 'markDisabled', 'minDate', + 'maxDate', 'navigation', 'outsideDays', 'showWeekdays', 'showWeekNumbers', 'startDate'] + .forEach((/** + * @param {?} input + * @return {?} + */ + function (input) { return _this[input] = config[input]; })); + _service.select$.pipe(takeUntil(this._destroyed$)).subscribe((/** + * @param {?} date + * @return {?} + */ + function (date) { _this.select.emit(date); })); + _service.model$.pipe(takeUntil(this._destroyed$)).subscribe((/** + * @param {?} model + * @return {?} + */ + function (model) { + /** @type {?} */ + var newDate = model.firstDate; + /** @type {?} */ + var oldDate = _this.model ? _this.model.firstDate : null; + /** @type {?} */ + var navigationPrevented = false; + // emitting navigation event if the first month changes + if (!newDate.equals(oldDate)) { + _this.navigate.emit({ + current: oldDate ? { year: oldDate.year, month: oldDate.month } : null, + next: { year: newDate.year, month: newDate.month }, + preventDefault: (/** + * @return {?} + */ + function () { return navigationPrevented = true; }) + }); + // can't prevent the very first navigation + if (navigationPrevented && oldDate !== null) { + _this._service.open(oldDate); + return; + } + } + /** @type {?} */ + var newSelectedDate = model.selectedDate; + /** @type {?} */ + var newFocusedDate = model.focusDate; + /** @type {?} */ + var oldFocusedDate = _this.model ? _this.model.focusDate : null; + _this.model = model; + // handling selection change + if (isChangedDate(newSelectedDate, _this._controlValue)) { + _this._controlValue = newSelectedDate; + _this.onTouched(); + _this.onChange(_this._ngbDateAdapter.toModel(newSelectedDate)); + } + // handling focus change + if (isChangedDate(newFocusedDate, oldFocusedDate) && oldFocusedDate && model.focusVisible) { + _this.focus(); + } + _cd.markForCheck(); + })); + } + /** + * @return {?} + */ + NgbDatepicker.prototype.focus = /** + * @return {?} + */ + function () { + var _this = this; + this._ngZone.onStable.asObservable().pipe(take(1)).subscribe((/** + * @return {?} + */ + function () { + /** @type {?} */ + var elementToFocus = _this._elementRef.nativeElement.querySelector('div.ngb-dp-day[tabindex="0"]'); + if (elementToFocus) { + elementToFocus.focus(); + } + })); + }; + /** + * Navigates to the provided date. + * + * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec. + * If nothing or invalid date provided calendar will open current month. + * + * Use the `[startDate]` input as an alternative. + */ + /** + * Navigates to the provided date. + * + * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec. + * If nothing or invalid date provided calendar will open current month. + * + * Use the `[startDate]` input as an alternative. + * @param {?=} date + * @return {?} + */ + NgbDatepicker.prototype.navigateTo = /** + * Navigates to the provided date. + * + * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec. + * If nothing or invalid date provided calendar will open current month. + * + * Use the `[startDate]` input as an alternative. + * @param {?=} date + * @return {?} + */ + function (date) { + this._service.open(NgbDate.from(date ? date.day ? (/** @type {?} */ (date)) : tslib_1.__assign({}, date, { day: 1 }) : null)); + }; + /** + * @return {?} + */ + NgbDatepicker.prototype.ngAfterViewInit = /** + * @return {?} + */ + function () { + var _this = this; + this._ngZone.runOutsideAngular((/** + * @return {?} + */ + function () { + /** @type {?} */ + var focusIns$ = fromEvent(_this._monthsEl.nativeElement, 'focusin'); + /** @type {?} */ + var focusOuts$ = fromEvent(_this._monthsEl.nativeElement, 'focusout'); + // we're changing 'focusVisible' only when entering or leaving months view + // and ignoring all focus events where both 'target' and 'related' target are day cells + merge(focusIns$, focusOuts$) + .pipe(filter((/** + * @param {?} __0 + * @return {?} + */ + function (_a) { + var target = _a.target, relatedTarget = _a.relatedTarget; + return !(hasClassName(target, 'ngb-dp-day') && hasClassName(relatedTarget, 'ngb-dp-day')); + })), takeUntil(_this._destroyed$)) + .subscribe((/** + * @param {?} __0 + * @return {?} + */ + function (_a) { + var type = _a.type; + return _this._ngZone.run((/** + * @return {?} + */ + function () { return _this._service.focusVisible = type === 'focusin'; })); + })); + })); + }; + /** + * @return {?} + */ + NgbDatepicker.prototype.ngOnDestroy = /** + * @return {?} + */ + function () { this._destroyed$.next(); }; + /** + * @return {?} + */ + NgbDatepicker.prototype.ngOnInit = /** + * @return {?} + */ + function () { + var _this = this; + if (this.model === undefined) { + ['dayTemplateData', 'displayMonths', 'markDisabled', 'firstDayOfWeek', 'navigation', 'minDate', 'maxDate', + 'outsideDays'] + .forEach((/** + * @param {?} input + * @return {?} + */ + function (input) { return _this._service[input] = _this[input]; })); + this.navigateTo(this.startDate); + } + }; + /** + * @param {?} changes + * @return {?} + */ + NgbDatepicker.prototype.ngOnChanges = /** + * @param {?} changes + * @return {?} + */ + function (changes) { + var _this = this; + ['dayTemplateData', 'displayMonths', 'markDisabled', 'firstDayOfWeek', 'navigation', 'minDate', 'maxDate', + 'outsideDays'] + .filter((/** + * @param {?} input + * @return {?} + */ + function (input) { return input in changes; })) + .forEach((/** + * @param {?} input + * @return {?} + */ + function (input) { return _this._service[input] = _this[input]; })); + if ('startDate' in changes) { + var _a = changes.startDate, currentValue = _a.currentValue, previousValue = _a.previousValue; + if (isChangedMonth(previousValue, currentValue)) { + this.navigateTo(this.startDate); + } + } + }; + /** + * @param {?} date + * @return {?} + */ + NgbDatepicker.prototype.onDateSelect = /** + * @param {?} date + * @return {?} + */ + function (date) { + this._service.focus(date); + this._service.select(date, { emitEvent: true }); + }; + /** + * @param {?} event + * @return {?} + */ + NgbDatepicker.prototype.onKeyDown = /** + * @param {?} event + * @return {?} + */ + function (event) { this._keyMapService.processKey(event); }; + /** + * @param {?} date + * @return {?} + */ + NgbDatepicker.prototype.onNavigateDateSelect = /** + * @param {?} date + * @return {?} + */ + function (date) { this._service.open(date); }; + /** + * @param {?} event + * @return {?} + */ + NgbDatepicker.prototype.onNavigateEvent = /** + * @param {?} event + * @return {?} + */ + function (event) { + switch (event) { + case NavigationEvent.PREV: + this._service.open(this._calendar.getPrev(this.model.firstDate, 'm', 1)); + break; + case NavigationEvent.NEXT: + this._service.open(this._calendar.getNext(this.model.firstDate, 'm', 1)); + break; + } + }; + /** + * @param {?} fn + * @return {?} + */ + NgbDatepicker.prototype.registerOnChange = /** + * @param {?} fn + * @return {?} + */ + function (fn) { this.onChange = fn; }; + /** + * @param {?} fn + * @return {?} + */ + NgbDatepicker.prototype.registerOnTouched = /** + * @param {?} fn + * @return {?} + */ + function (fn) { this.onTouched = fn; }; + /** + * @param {?} isDisabled + * @return {?} + */ + NgbDatepicker.prototype.setDisabledState = /** + * @param {?} isDisabled + * @return {?} + */ + function (isDisabled) { this._service.disabled = isDisabled; }; + /** + * @param {?} value + * @return {?} + */ + NgbDatepicker.prototype.writeValue = /** + * @param {?} value + * @return {?} + */ + function (value) { + this._controlValue = NgbDate.from(this._ngbDateAdapter.fromModel(value)); + this._service.select(this._controlValue); + }; + NgbDatepicker.decorators = [ + { type: Component, args: [{ + exportAs: 'ngbDatepicker', + selector: 'ngb-datepicker', + changeDetection: ChangeDetectionStrategy.OnPush, + encapsulation: ViewEncapsulation.None, + template: "\n \n
\n
\n
\n\n
\n \n \n
\n\n
\n \n
\n
1 && navigation === 'select')\"\n class=\"ngb-dp-month-name\">\n {{ i18n.getMonthFullName(month.number, month.year) }} {{ i18n.getYearNumerals(month.year) }}\n
\n \n \n
\n
\n
\n\n \n ", + providers: [NGB_DATEPICKER_VALUE_ACCESSOR, NgbDatepickerService, NgbDatepickerKeyMapService], + styles: ["ngb-datepicker{border:1px solid #dfdfdf;border-radius:.25rem;display:inline-block}ngb-datepicker-month-view{pointer-events:auto}ngb-datepicker.dropdown-menu{padding:0}.ngb-dp-body{z-index:1050}.ngb-dp-header{border-bottom:0;border-radius:.25rem .25rem 0 0;padding-top:.25rem;background-color:#f8f9fa}.ngb-dp-months{display:-ms-flexbox;display:flex}.ngb-dp-month{pointer-events:none}.ngb-dp-month-name{font-size:larger;height:2rem;line-height:2rem;text-align:center;background-color:#f8f9fa}.ngb-dp-month+.ngb-dp-month .ngb-dp-month-name,.ngb-dp-month+.ngb-dp-month .ngb-dp-week{padding-left:1rem}.ngb-dp-month:last-child .ngb-dp-week{padding-right:.25rem}.ngb-dp-month:first-child .ngb-dp-week{padding-left:.25rem}.ngb-dp-month .ngb-dp-week:last-child{padding-bottom:.25rem}"] + }] } + ]; + /** @nocollapse */ + NgbDatepicker.ctorParameters = function () { return [ + { type: NgbDatepickerKeyMapService }, + { type: NgbDatepickerService }, + { type: NgbCalendar }, + { type: NgbDatepickerI18n }, + { type: NgbDatepickerConfig }, + { type: ChangeDetectorRef }, + { type: ElementRef }, + { type: NgbDateAdapter }, + { type: NgZone } + ]; }; + NgbDatepicker.propDecorators = { + _monthsEl: [{ type: ViewChild, args: ['months', { static: true },] }], + dayTemplate: [{ type: Input }], + dayTemplateData: [{ type: Input }], + displayMonths: [{ type: Input }], + firstDayOfWeek: [{ type: Input }], + footerTemplate: [{ type: Input }], + markDisabled: [{ type: Input }], + maxDate: [{ type: Input }], + minDate: [{ type: Input }], + navigation: [{ type: Input }], + outsideDays: [{ type: Input }], + showWeekdays: [{ type: Input }], + showWeekNumbers: [{ type: Input }], + startDate: [{ type: Input }], + navigate: [{ type: Output }], + select: [{ type: Output }] + }; + return NgbDatepicker; +}()); +export { NgbDatepicker }; +if (false) { + /** @type {?} */ + NgbDatepicker.prototype.model; + /** + * @type {?} + * @private + */ + NgbDatepicker.prototype._monthsEl; + /** + * @type {?} + * @private + */ + NgbDatepicker.prototype._controlValue; + /** + * @type {?} + * @private + */ + NgbDatepicker.prototype._destroyed$; + /** + * The reference to a custom template for the day. + * + * Allows to completely override the way a day 'cell' in the calendar is displayed. + * + * See [`DayTemplateContext`](#/components/datepicker/api#DayTemplateContext) for the data you get inside. + * @type {?} + */ + NgbDatepicker.prototype.dayTemplate; + /** + * The callback to pass any arbitrary data to the template cell via the + * [`DayTemplateContext`](#/components/datepicker/api#DayTemplateContext)'s `data` parameter. + * + * `current` is the month that is currently displayed by the datepicker. + * + * \@since 3.3.0 + * @type {?} + */ + NgbDatepicker.prototype.dayTemplateData; + /** + * The number of months to display. + * @type {?} + */ + NgbDatepicker.prototype.displayMonths; + /** + * The first day of the week. + * + * With default calendar we use ISO 8601: 'weekday' is 1=Mon ... 7=Sun. + * @type {?} + */ + NgbDatepicker.prototype.firstDayOfWeek; + /** + * The reference to the custom template for the datepicker footer. + * + * \@since 3.3.0 + * @type {?} + */ + NgbDatepicker.prototype.footerTemplate; + /** + * The callback to mark some dates as disabled. + * + * It is called for each new date when navigating to a different month. + * + * `current` is the month that is currently displayed by the datepicker. + * @type {?} + */ + NgbDatepicker.prototype.markDisabled; + /** + * The latest date that can be displayed or selected. + * + * If not provided, 'year' select box will display 10 years after the current month. + * @type {?} + */ + NgbDatepicker.prototype.maxDate; + /** + * The earliest date that can be displayed or selected. + * + * If not provided, 'year' select box will display 10 years before the current month. + * @type {?} + */ + NgbDatepicker.prototype.minDate; + /** + * Navigation type. + * + * * `"select"` - select boxes for month and navigation arrows + * * `"arrows"` - only navigation arrows + * * `"none"` - no navigation visible at all + * @type {?} + */ + NgbDatepicker.prototype.navigation; + /** + * The way of displaying days that don't belong to the current month. + * + * * `"visible"` - days are visible + * * `"hidden"` - days are hidden, white space preserved + * * `"collapsed"` - days are collapsed, so the datepicker height might change between months + * + * For the 2+ months view, days in between months are never shown. + * @type {?} + */ + NgbDatepicker.prototype.outsideDays; + /** + * If `true`, weekdays will be displayed. + * @type {?} + */ + NgbDatepicker.prototype.showWeekdays; + /** + * If `true`, week numbers will be displayed. + * @type {?} + */ + NgbDatepicker.prototype.showWeekNumbers; + /** + * The date to open calendar with. + * + * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec. + * If nothing or invalid date is provided, calendar will open with current month. + * + * You could use `navigateTo(date)` method as an alternative. + * @type {?} + */ + NgbDatepicker.prototype.startDate; + /** + * An event emitted right before the navigation happens and displayed month changes. + * + * See [`NgbDatepickerNavigateEvent`](#/components/datepicker/api#NgbDatepickerNavigateEvent) for the payload info. + * @type {?} + */ + NgbDatepicker.prototype.navigate; + /** + * An event emitted when user selects a date using keyboard or mouse. + * + * The payload of the event is currently selected `NgbDate`. + * @type {?} + */ + NgbDatepicker.prototype.select; + /** @type {?} */ + NgbDatepicker.prototype.onChange; + /** @type {?} */ + NgbDatepicker.prototype.onTouched; + /** + * @type {?} + * @private + */ + NgbDatepicker.prototype._keyMapService; + /** @type {?} */ + NgbDatepicker.prototype._service; + /** + * @type {?} + * @private + */ + NgbDatepicker.prototype._calendar; + /** @type {?} */ + NgbDatepicker.prototype.i18n; + /** + * @type {?} + * @private + */ + NgbDatepicker.prototype._cd; + /** + * @type {?} + * @private + */ + NgbDatepicker.prototype._elementRef; + /** + * @type {?} + * @private + */ + NgbDatepicker.prototype._ngbDateAdapter; + /** + * @type {?} + * @private + */ + NgbDatepicker.prototype._ngZone; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImRhdGVwaWNrZXIvZGF0ZXBpY2tlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUMvQyxPQUFPLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RCxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFJTixNQUFNLEVBRU4sV0FBVyxFQUNYLFNBQVMsRUFDVCxpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF1QixpQkFBaUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ25DLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzFELE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ3ZFLE9BQU8sRUFBc0IsZUFBZSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFFN0UsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDeEQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBRTNELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxhQUFhLEVBQUUsY0FBYyxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDakUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGNBQWMsQ0FBQzs7SUFFcEMsNkJBQTZCLEdBQUc7SUFDcEMsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixXQUFXLEVBQUUsVUFBVTs7O0lBQUMsY0FBTSxPQUFBLGFBQWEsRUFBYixDQUFhLEVBQUM7SUFDNUMsS0FBSyxFQUFFLElBQUk7Q0FDWjs7Ozs7QUFLRCxnREFpQkM7Ozs7OztJQWJDLDZDQUF1Qzs7Ozs7SUFLdkMsMENBQW9DOzs7Ozs7O0lBT3BDLG9EQUEyQjs7Ozs7OztBQVE3QjtJQW1MRSx1QkFDWSxjQUEwQyxFQUFTLFFBQThCLEVBQ2pGLFNBQXNCLEVBQVMsSUFBdUIsRUFBRSxNQUEyQixFQUNuRixHQUFzQixFQUFVLFdBQW9DLEVBQ3BFLGVBQW9DLEVBQVUsT0FBZTtRQUp6RSxpQkFtREM7UUFsRFcsbUJBQWMsR0FBZCxjQUFjLENBQTRCO1FBQVMsYUFBUSxHQUFSLFFBQVEsQ0FBc0I7UUFDakYsY0FBUyxHQUFULFNBQVMsQ0FBYTtRQUFTLFNBQUksR0FBSixJQUFJLENBQW1CO1FBQ3RELFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQXlCO1FBQ3BFLG9CQUFlLEdBQWYsZUFBZSxDQUFxQjtRQUFVLFlBQU8sR0FBUCxPQUFPLENBQVE7UUE1SGpFLGdCQUFXLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQzs7Ozs7O1FBNEdoQyxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQThCLENBQUM7Ozs7OztRQU8xRCxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUUvQyxhQUFROzs7O1FBQUcsVUFBQyxDQUFNLElBQU0sQ0FBQyxFQUFDO1FBQzFCLGNBQVM7OztRQUFHLGNBQU8sQ0FBQyxFQUFDO1FBT25CLENBQUMsYUFBYSxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsU0FBUztZQUNoSCxTQUFTLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxDQUFDO2FBQ25GLE9BQU87Ozs7UUFBQyxVQUFBLEtBQUssSUFBSSxPQUFBLEtBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQTNCLENBQTJCLEVBQUMsQ0FBQztRQUVuRCxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUzs7OztRQUFDLFVBQUEsSUFBSSxJQUFNLEtBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUM7UUFFbEcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVM7Ozs7UUFBQyxVQUFBLEtBQUs7O2dCQUN6RCxPQUFPLEdBQUcsS0FBSyxDQUFDLFNBQVM7O2dCQUN6QixPQUFPLEdBQUcsS0FBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUk7O2dCQUVwRCxtQkFBbUIsR0FBRyxLQUFLO1lBQy9CLHVEQUF1RDtZQUN2RCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDNUIsS0FBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7b0JBQ2pCLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTtvQkFDcEUsSUFBSSxFQUFFLEVBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUM7b0JBQ2hELGNBQWM7OztvQkFBRSxjQUFNLE9BQUEsbUJBQW1CLEdBQUcsSUFBSSxFQUExQixDQUEwQixDQUFBO2lCQUNqRCxDQUFDLENBQUM7Z0JBRUgsMENBQTBDO2dCQUMxQyxJQUFJLG1CQUFtQixJQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7b0JBQzNDLEtBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUM1QixPQUFPO2lCQUNSO2FBQ0Y7O2dCQUVLLGVBQWUsR0FBRyxLQUFLLENBQUMsWUFBWTs7Z0JBQ3BDLGNBQWMsR0FBRyxLQUFLLENBQUMsU0FBUzs7Z0JBQ2hDLGNBQWMsR0FBRyxLQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUUvRCxLQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUVuQiw0QkFBNEI7WUFDNUIsSUFBSSxhQUFhLENBQUMsZUFBZSxFQUFFLEtBQUksQ0FBQyxhQUFhLENBQUMsRUFBRTtnQkFDdEQsS0FBSSxDQUFDLGFBQWEsR0FBRyxlQUFlLENBQUM7Z0JBQ3JDLEtBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDakIsS0FBSSxDQUFDLFFBQVEsQ0FBQyxLQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO2FBQzlEO1lBRUQsd0JBQXdCO1lBQ3hCLElBQUksYUFBYSxDQUFDLGNBQWMsRUFBRSxjQUFjLENBQUMsSUFBSSxjQUFjLElBQUksS0FBSyxDQUFDLFlBQVksRUFBRTtnQkFDekYsS0FBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQ2Q7WUFFRCxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDckIsQ0FBQyxFQUFDLENBQUM7SUFDTCxDQUFDOzs7O0lBRUQsNkJBQUs7OztJQUFMO1FBQUEsaUJBUUM7UUFQQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUzs7O1FBQUM7O2dCQUNyRCxjQUFjLEdBQ2hCLEtBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBaUIsOEJBQThCLENBQUM7WUFDaEcsSUFBSSxjQUFjLEVBQUU7Z0JBQ2xCLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUN4QjtRQUNILENBQUMsRUFBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7O09BT0c7Ozs7Ozs7Ozs7O0lBQ0gsa0NBQVU7Ozs7Ozs7Ozs7SUFBVixVQUFXLElBQWtEO1FBQzNELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxtQkFBQSxJQUFJLEVBQWlCLENBQUMsQ0FBQyxzQkFBSyxJQUFJLElBQUUsR0FBRyxFQUFFLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3ZHLENBQUM7Ozs7SUFFRCx1Q0FBZTs7O0lBQWY7UUFBQSxpQkFlQztRQWRDLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCOzs7UUFBQzs7Z0JBQ3ZCLFNBQVMsR0FBRyxTQUFTLENBQWEsS0FBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDOztnQkFDMUUsVUFBVSxHQUFHLFNBQVMsQ0FBYSxLQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUM7WUFFbEYsMEVBQTBFO1lBQzFFLHVGQUF1RjtZQUN2RixLQUFLLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQztpQkFDdkIsSUFBSSxDQUNELE1BQU07Ozs7WUFDRixVQUFDLEVBQXVCO29CQUF0QixrQkFBTSxFQUFFLGdDQUFhO2dCQUNuQixPQUFBLENBQUMsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxJQUFJLFlBQVksQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFBbEYsQ0FBa0YsRUFBQyxFQUMzRixTQUFTLENBQUMsS0FBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2lCQUMvQixTQUFTOzs7O1lBQUMsVUFBQyxFQUFNO29CQUFMLGNBQUk7Z0JBQU0sT0FBQSxLQUFJLENBQUMsT0FBTyxDQUFDLEdBQUc7OztnQkFBQyxjQUFNLE9BQUEsS0FBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEdBQUcsSUFBSSxLQUFLLFNBQVMsRUFBL0MsQ0FBK0MsRUFBQztZQUF2RSxDQUF1RSxFQUFDLENBQUM7UUFDdEcsQ0FBQyxFQUFDLENBQUM7SUFDTCxDQUFDOzs7O0lBRUQsbUNBQVc7OztJQUFYLGNBQWdCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDOzs7O0lBRTFDLGdDQUFROzs7SUFBUjtRQUFBLGlCQU9DO1FBTkMsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTtZQUM1QixDQUFDLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxTQUFTO2dCQUN4RyxhQUFhLENBQUM7aUJBQ1YsT0FBTzs7OztZQUFDLFVBQUEsS0FBSyxJQUFJLE9BQUEsS0FBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFJLENBQUMsS0FBSyxDQUFDLEVBQWxDLENBQWtDLEVBQUMsQ0FBQztZQUMxRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUNqQztJQUNILENBQUM7Ozs7O0lBRUQsbUNBQVc7Ozs7SUFBWCxVQUFZLE9BQXNCO1FBQWxDLGlCQVlDO1FBWEMsQ0FBQyxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsU0FBUztZQUN4RyxhQUFhLENBQUM7YUFDVixNQUFNOzs7O1FBQUMsVUFBQSxLQUFLLElBQUksT0FBQSxLQUFLLElBQUksT0FBTyxFQUFoQixDQUFnQixFQUFDO2FBQ2pDLE9BQU87Ozs7UUFBQyxVQUFBLEtBQUssSUFBSSxPQUFBLEtBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSSxDQUFDLEtBQUssQ0FBQyxFQUFsQyxDQUFrQyxFQUFDLENBQUM7UUFFMUQsSUFBSSxXQUFXLElBQUksT0FBTyxFQUFFO1lBQ3BCLElBQUEsc0JBQWlELEVBQWhELDhCQUFZLEVBQUUsZ0NBQWtDO1lBQ3ZELElBQUksY0FBYyxDQUFDLGFBQWEsRUFBRSxZQUFZLENBQUMsRUFBRTtnQkFDL0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDakM7U0FDRjtJQUNILENBQUM7Ozs7O0lBRUQsb0NBQVk7Ozs7SUFBWixVQUFhLElBQWE7UUFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUMsU0FBUyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7SUFDaEQsQ0FBQzs7Ozs7SUFFRCxpQ0FBUzs7OztJQUFULFVBQVUsS0FBb0IsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Ozs7O0lBRTFFLDRDQUFvQjs7OztJQUFwQixVQUFxQixJQUFhLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7OztJQUVqRSx1Q0FBZTs7OztJQUFmLFVBQWdCLEtBQXNCO1FBQ3BDLFFBQVEsS0FBSyxFQUFFO1lBQ2IsS0FBSyxlQUFlLENBQUMsSUFBSTtnQkFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pFLE1BQU07WUFDUixLQUFLLGVBQWUsQ0FBQyxJQUFJO2dCQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekUsTUFBTTtTQUNUO0lBQ0gsQ0FBQzs7Ozs7SUFFRCx3Q0FBZ0I7Ozs7SUFBaEIsVUFBaUIsRUFBdUIsSUFBVSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7Ozs7O0lBRXZFLHlDQUFpQjs7OztJQUFqQixVQUFrQixFQUFhLElBQVUsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDOzs7OztJQUUvRCx3Q0FBZ0I7Ozs7SUFBaEIsVUFBaUIsVUFBbUIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDOzs7OztJQUU5RSxrQ0FBVTs7OztJQUFWLFVBQVcsS0FBSztRQUNkLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMzQyxDQUFDOztnQkFyVUYsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxlQUFlO29CQUN6QixRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7b0JBRXJDLFFBQVEsRUFBRSx3eURBNENUO29CQUNELFNBQVMsRUFBRSxDQUFDLDZCQUE2QixFQUFFLG9CQUFvQixFQUFFLDBCQUEwQixDQUFDOztpQkFDN0Y7Ozs7Z0JBL0ZPLDBCQUEwQjtnQkFEMUIsb0JBQW9CO2dCQUZwQixXQUFXO2dCQVNYLGlCQUFpQjtnQkFIakIsbUJBQW1CO2dCQXZCekIsaUJBQWlCO2dCQUVqQixVQUFVO2dCQXNCSixjQUFjO2dCQWxCcEIsTUFBTTs7OzRCQWtITCxTQUFTLFNBQUMsUUFBUSxFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQzs4QkFXbEMsS0FBSztrQ0FVTCxLQUFLO2dDQUtMLEtBQUs7aUNBT0wsS0FBSztpQ0FPTCxLQUFLOytCQVNMLEtBQUs7MEJBT0wsS0FBSzswQkFPTCxLQUFLOzZCQVNMLEtBQUs7OEJBV0wsS0FBSzsrQkFLTCxLQUFLO2tDQUtMLEtBQUs7NEJBVUwsS0FBSzsyQkFPTCxNQUFNO3lCQU9OLE1BQU07O0lBd0pULG9CQUFDO0NBQUEsQUF0VUQsSUFzVUM7U0FqUlksYUFBYTs7O0lBRXhCLDhCQUEyQjs7Ozs7SUFFM0Isa0NBQWdGOzs7OztJQUNoRixzQ0FBK0I7Ozs7O0lBQy9CLG9DQUEwQzs7Ozs7Ozs7O0lBUzFDLG9DQUFzRDs7Ozs7Ozs7OztJQVV0RCx3Q0FBeUY7Ozs7O0lBS3pGLHNDQUErQjs7Ozs7OztJQU8vQix1Q0FBZ0M7Ozs7Ozs7SUFPaEMsdUNBQTBDOzs7Ozs7Ozs7SUFTMUMscUNBQTBGOzs7Ozs7O0lBTzFGLGdDQUFnQzs7Ozs7OztJQU9oQyxnQ0FBZ0M7Ozs7Ozs7OztJQVNoQyxtQ0FBa0Q7Ozs7Ozs7Ozs7O0lBV2xELG9DQUF5RDs7Ozs7SUFLekQscUNBQStCOzs7OztJQUsvQix3Q0FBa0M7Ozs7Ozs7Ozs7SUFVbEMsa0NBQWdFOzs7Ozs7O0lBT2hFLGlDQUFvRTs7Ozs7OztJQU9wRSwrQkFBK0M7O0lBRS9DLGlDQUEwQjs7SUFDMUIsa0NBQXFCOzs7OztJQUdqQix1Q0FBa0Q7O0lBQUUsaUNBQXFDOzs7OztJQUN6RixrQ0FBOEI7O0lBQUUsNkJBQThCOzs7OztJQUM5RCw0QkFBOEI7Ozs7O0lBQUUsb0NBQTRDOzs7OztJQUM1RSx3Q0FBNEM7Ozs7O0lBQUUsZ0NBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtmcm9tRXZlbnQsIG1lcmdlLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZmlsdGVyLCB0YWtlLCB0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtOZ2JDYWxlbmRhcn0gZnJvbSAnLi9uZ2ItY2FsZW5kYXInO1xuaW1wb3J0IHtOZ2JEYXRlfSBmcm9tICcuL25nYi1kYXRlJztcbmltcG9ydCB7TmdiRGF0ZXBpY2tlclNlcnZpY2V9IGZyb20gJy4vZGF0ZXBpY2tlci1zZXJ2aWNlJztcbmltcG9ydCB7TmdiRGF0ZXBpY2tlcktleU1hcFNlcnZpY2V9IGZyb20gJy4vZGF0ZXBpY2tlci1rZXltYXAtc2VydmljZSc7XG5pbXBvcnQge0RhdGVwaWNrZXJWaWV3TW9kZWwsIE5hdmlnYXRpb25FdmVudH0gZnJvbSAnLi9kYXRlcGlja2VyLXZpZXctbW9kZWwnO1xuaW1wb3J0IHtEYXlUZW1wbGF0ZUNvbnRleHR9IGZyb20gJy4vZGF0ZXBpY2tlci1kYXktdGVtcGxhdGUtY29udGV4dCc7XG5pbXBvcnQge05nYkRhdGVwaWNrZXJDb25maWd9IGZyb20gJy4vZGF0ZXBpY2tlci1jb25maWcnO1xuaW1wb3J0IHtOZ2JEYXRlQWRhcHRlcn0gZnJvbSAnLi9hZGFwdGVycy9uZ2ItZGF0ZS1hZGFwdGVyJztcbmltcG9ydCB7TmdiRGF0ZVN0cnVjdH0gZnJvbSAnLi9uZ2ItZGF0ZS1zdHJ1Y3QnO1xuaW1wb3J0IHtOZ2JEYXRlcGlja2VySTE4bn0gZnJvbSAnLi9kYXRlcGlja2VyLWkxOG4nO1xuaW1wb3J0IHtpc0NoYW5nZWREYXRlLCBpc0NoYW5nZWRNb250aH0gZnJvbSAnLi9kYXRlcGlja2VyLXRvb2xzJztcbmltcG9ydCB7aGFzQ2xhc3NOYW1lfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuXG5jb25zdCBOR0JfREFURVBJQ0tFUl9WQUxVRV9BQ0NFU1NPUiA9IHtcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE5nYkRhdGVwaWNrZXIpLFxuICBtdWx0aTogdHJ1ZVxufTtcblxuLyoqXG4gKiBBbiBldmVudCBlbWl0dGVkIHJpZ2h0IGJlZm9yZSB0aGUgbmF2aWdhdGlvbiBoYXBwZW5zIGFuZCB0aGUgbW9udGggZGlzcGxheWVkIGJ5IHRoZSBkYXRlcGlja2VyIGNoYW5nZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmdiRGF0ZXBpY2tlck5hdmlnYXRlRXZlbnQge1xuICAvKipcbiAgICogVGhlIGN1cnJlbnRseSBkaXNwbGF5ZWQgbW9udGguXG4gICAqL1xuICBjdXJyZW50OiB7eWVhcjogbnVtYmVyLCBtb250aDogbnVtYmVyfTtcblxuICAvKipcbiAgICogVGhlIG1vbnRoIHdlJ3JlIG5hdmlnYXRpbmcgdG8uXG4gICAqL1xuICBuZXh0OiB7eWVhcjogbnVtYmVyLCBtb250aDogbnVtYmVyfTtcblxuICAvKipcbiAgICogQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgcHJldmVudCBuYXZpZ2F0aW9uIGZyb20gaGFwcGVuaW5nLlxuICAgKlxuICAgKiBAc2luY2UgNC4xLjBcbiAgICovXG4gIHByZXZlbnREZWZhdWx0OiAoKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIEEgaGlnaGx5IGNvbmZpZ3VyYWJsZSBjb21wb25lbnQgdGhhdCBoZWxwcyB5b3Ugd2l0aCBzZWxlY3RpbmcgY2FsZW5kYXIgZGF0ZXMuXG4gKlxuICogYE5nYkRhdGVwaWNrZXJgIGlzIG1lYW50IHRvIGJlIGRpc3BsYXllZCBpbmxpbmUgb24gYSBwYWdlIG9yIHB1dCBpbnNpZGUgYSBwb3B1cC5cbiAqL1xuQENvbXBvbmVudCh7XG4gIGV4cG9ydEFzOiAnbmdiRGF0ZXBpY2tlcicsXG4gIHNlbGVjdG9yOiAnbmdiLWRhdGVwaWNrZXInLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgc3R5bGVVcmxzOiBbJy4vZGF0ZXBpY2tlci5zY3NzJ10sXG4gIHRlbXBsYXRlOiBgXG4gICAgPG5nLXRlbXBsYXRlICNkdCBsZXQtZGF0ZT1cImRhdGVcIiBsZXQtY3VycmVudE1vbnRoPVwiY3VycmVudE1vbnRoXCIgbGV0LXNlbGVjdGVkPVwic2VsZWN0ZWRcIiBsZXQtZGlzYWJsZWQ9XCJkaXNhYmxlZFwiIGxldC1mb2N1c2VkPVwiZm9jdXNlZFwiPlxuICAgICAgPGRpdiBuZ2JEYXRlcGlja2VyRGF5Vmlld1xuICAgICAgICBbZGF0ZV09XCJkYXRlXCJcbiAgICAgICAgW2N1cnJlbnRNb250aF09XCJjdXJyZW50TW9udGhcIlxuICAgICAgICBbc2VsZWN0ZWRdPVwic2VsZWN0ZWRcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICBbZm9jdXNlZF09XCJmb2N1c2VkXCI+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPGRpdiBjbGFzcz1cIm5nYi1kcC1oZWFkZXJcIj5cbiAgICAgIDxuZ2ItZGF0ZXBpY2tlci1uYXZpZ2F0aW9uICpuZ0lmPVwibmF2aWdhdGlvbiAhPT0gJ25vbmUnXCJcbiAgICAgICAgW2RhdGVdPVwibW9kZWwuZmlyc3REYXRlXCJcbiAgICAgICAgW21vbnRoc109XCJtb2RlbC5tb250aHNcIlxuICAgICAgICBbZGlzYWJsZWRdPVwibW9kZWwuZGlzYWJsZWRcIlxuICAgICAgICBbc2hvd1NlbGVjdF09XCJtb2RlbC5uYXZpZ2F0aW9uID09PSAnc2VsZWN0J1wiXG4gICAgICAgIFtwcmV2RGlzYWJsZWRdPVwibW9kZWwucHJldkRpc2FibGVkXCJcbiAgICAgICAgW25leHREaXNhYmxlZF09XCJtb2RlbC5uZXh0RGlzYWJsZWRcIlxuICAgICAgICBbc2VsZWN0Qm94ZXNdPVwibW9kZWwuc2VsZWN0Qm94ZXNcIlxuICAgICAgICAobmF2aWdhdGUpPVwib25OYXZpZ2F0ZUV2ZW50KCRldmVudClcIlxuICAgICAgICAoc2VsZWN0KT1cIm9uTmF2aWdhdGVEYXRlU2VsZWN0KCRldmVudClcIj5cbiAgICAgIDwvbmdiLWRhdGVwaWNrZXItbmF2aWdhdGlvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgI21vbnRocyBjbGFzcz1cIm5nYi1kcC1tb250aHNcIiAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50KVwiPlxuICAgICAgPG5nLXRlbXBsYXRlIG5nRm9yIGxldC1tb250aCBbbmdGb3JPZl09XCJtb2RlbC5tb250aHNcIiBsZXQtaT1cImluZGV4XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJuZ2ItZHAtbW9udGhcIj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwibmF2aWdhdGlvbiA9PT0gJ25vbmUnIHx8IChkaXNwbGF5TW9udGhzID4gMSAmJiBuYXZpZ2F0aW9uID09PSAnc2VsZWN0JylcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwibmdiLWRwLW1vbnRoLW5hbWVcIj5cbiAgICAgICAgICAgIHt7IGkxOG4uZ2V0TW9udGhGdWxsTmFtZShtb250aC5udW1iZXIsIG1vbnRoLnllYXIpIH19IHt7IGkxOG4uZ2V0WWVhck51bWVyYWxzKG1vbnRoLnllYXIpIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPG5nYi1kYXRlcGlja2VyLW1vbnRoLXZpZXdcbiAgICAgICAgICAgIFttb250aF09XCJtb250aFwiXG4gICAgICAgICAgICBbZGF5VGVtcGxhdGVdPVwiZGF5VGVtcGxhdGUgfHwgZHRcIlxuICAgICAgICAgICAgW3Nob3dXZWVrZGF5c109XCJzaG93V2Vla2RheXNcIlxuICAgICAgICAgICAgW3Nob3dXZWVrTnVtYmVyc109XCJzaG93V2Vla051bWJlcnNcIlxuICAgICAgICAgICAgKHNlbGVjdCk9XCJvbkRhdGVTZWxlY3QoJGV2ZW50KVwiPlxuICAgICAgICAgIDwvbmdiLWRhdGVwaWNrZXItbW9udGgtdmlldz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuXG4gICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZvb3RlclRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgYCxcbiAgcHJvdmlkZXJzOiBbTkdCX0RBVEVQSUNLRVJfVkFMVUVfQUNDRVNTT1IsIE5nYkRhdGVwaWNrZXJTZXJ2aWNlLCBOZ2JEYXRlcGlja2VyS2V5TWFwU2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgTmdiRGF0ZXBpY2tlciBpbXBsZW1lbnRzIE9uRGVzdHJveSxcbiAgICBPbkNoYW5nZXMsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBtb2RlbDogRGF0ZXBpY2tlclZpZXdNb2RlbDtcblxuICBAVmlld0NoaWxkKCdtb250aHMnLCB7c3RhdGljOiB0cnVlfSkgcHJpdmF0ZSBfbW9udGhzRWw6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICBwcml2YXRlIF9jb250cm9sVmFsdWU6IE5nYkRhdGU7XG4gIHByaXZhdGUgX2Rlc3Ryb3llZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVmZXJlbmNlIHRvIGEgY3VzdG9tIHRlbXBsYXRlIGZvciB0aGUgZGF5LlxuICAgKlxuICAgKiBBbGxvd3MgdG8gY29tcGxldGVseSBvdmVycmlkZSB0aGUgd2F5IGEgZGF5ICdjZWxsJyBpbiB0aGUgY2FsZW5kYXIgaXMgZGlzcGxheWVkLlxuICAgKlxuICAgKiBTZWUgW2BEYXlUZW1wbGF0ZUNvbnRleHRgXSgjL2NvbXBvbmVudHMvZGF0ZXBpY2tlci9hcGkjRGF5VGVtcGxhdGVDb250ZXh0KSBmb3IgdGhlIGRhdGEgeW91IGdldCBpbnNpZGUuXG4gICAqL1xuICBASW5wdXQoKSBkYXlUZW1wbGF0ZTogVGVtcGxhdGVSZWY8RGF5VGVtcGxhdGVDb250ZXh0PjtcblxuICAvKipcbiAgICogVGhlIGNhbGxiYWNrIHRvIHBhc3MgYW55IGFyYml0cmFyeSBkYXRhIHRvIHRoZSB0ZW1wbGF0ZSBjZWxsIHZpYSB0aGVcbiAgICogW2BEYXlUZW1wbGF0ZUNvbnRleHRgXSgjL2NvbXBvbmVudHMvZGF0ZXBpY2tlci9hcGkjRGF5VGVtcGxhdGVDb250ZXh0KSdzIGBkYXRhYCBwYXJhbWV0ZXIuXG4gICAqXG4gICAqIGBjdXJyZW50YCBpcyB0aGUgbW9udGggdGhhdCBpcyBjdXJyZW50bHkgZGlzcGxheWVkIGJ5IHRoZSBkYXRlcGlja2VyLlxuICAgKlxuICAgKiBAc2luY2UgMy4zLjBcbiAgICovXG4gIEBJbnB1dCgpIGRheVRlbXBsYXRlRGF0YTogKGRhdGU6IE5nYkRhdGUsIGN1cnJlbnQ6IHt5ZWFyOiBudW1iZXIsIG1vbnRoOiBudW1iZXJ9KSA9PiBhbnk7XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgbW9udGhzIHRvIGRpc3BsYXkuXG4gICAqL1xuICBASW5wdXQoKSBkaXNwbGF5TW9udGhzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAqXG4gICAqIFdpdGggZGVmYXVsdCBjYWxlbmRhciB3ZSB1c2UgSVNPIDg2MDE6ICd3ZWVrZGF5JyBpcyAxPU1vbiAuLi4gNz1TdW4uXG4gICAqL1xuICBASW5wdXQoKSBmaXJzdERheU9mV2VlazogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVmZXJlbmNlIHRvIHRoZSBjdXN0b20gdGVtcGxhdGUgZm9yIHRoZSBkYXRlcGlja2VyIGZvb3Rlci5cbiAgICpcbiAgICogQHNpbmNlIDMuMy4wXG4gICAqL1xuICBASW5wdXQoKSBmb290ZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAvKipcbiAgICogVGhlIGNhbGxiYWNrIHRvIG1hcmsgc29tZSBkYXRlcyBhcyBkaXNhYmxlZC5cbiAgICpcbiAgICogSXQgaXMgY2FsbGVkIGZvciBlYWNoIG5ldyBkYXRlIHdoZW4gbmF2aWdhdGluZyB0byBhIGRpZmZlcmVudCBtb250aC5cbiAgICpcbiAgICogYGN1cnJlbnRgIGlzIHRoZSBtb250aCB0aGF0IGlzIGN1cnJlbnRseSBkaXNwbGF5ZWQgYnkgdGhlIGRhdGVwaWNrZXIuXG4gICAqL1xuICBASW5wdXQoKSBtYXJrRGlzYWJsZWQ6IChkYXRlOiBOZ2JEYXRlLCBjdXJyZW50OiB7eWVhcjogbnVtYmVyLCBtb250aDogbnVtYmVyfSkgPT4gYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGxhdGVzdCBkYXRlIHRoYXQgY2FuIGJlIGRpc3BsYXllZCBvciBzZWxlY3RlZC5cbiAgICpcbiAgICogSWYgbm90IHByb3ZpZGVkLCAneWVhcicgc2VsZWN0IGJveCB3aWxsIGRpc3BsYXkgMTAgeWVhcnMgYWZ0ZXIgdGhlIGN1cnJlbnQgbW9udGguXG4gICAqL1xuICBASW5wdXQoKSBtYXhEYXRlOiBOZ2JEYXRlU3RydWN0O1xuXG4gIC8qKlxuICAgKiBUaGUgZWFybGllc3QgZGF0ZSB0aGF0IGNhbiBiZSBkaXNwbGF5ZWQgb3Igc2VsZWN0ZWQuXG4gICAqXG4gICAqIElmIG5vdCBwcm92aWRlZCwgJ3llYXInIHNlbGVjdCBib3ggd2lsbCBkaXNwbGF5IDEwIHllYXJzIGJlZm9yZSB0aGUgY3VycmVudCBtb250aC5cbiAgICovXG4gIEBJbnB1dCgpIG1pbkRhdGU6IE5nYkRhdGVTdHJ1Y3Q7XG5cbiAgLyoqXG4gICAqIE5hdmlnYXRpb24gdHlwZS5cbiAgICpcbiAgICogKiBgXCJzZWxlY3RcImAgLSBzZWxlY3QgYm94ZXMgZm9yIG1vbnRoIGFuZCBuYXZpZ2F0aW9uIGFycm93c1xuICAgKiAqIGBcImFycm93c1wiYCAtIG9ubHkgbmF2aWdhdGlvbiBhcnJvd3NcbiAgICogKiBgXCJub25lXCJgIC0gbm8gbmF2aWdhdGlvbiB2aXNpYmxlIGF0IGFsbFxuICAgKi9cbiAgQElucHV0KCkgbmF2aWdhdGlvbjogJ3NlbGVjdCcgfCAnYXJyb3dzJyB8ICdub25lJztcblxuICAvKipcbiAgICogVGhlIHdheSBvZiBkaXNwbGF5aW5nIGRheXMgdGhhdCBkb24ndCBiZWxvbmcgdG8gdGhlIGN1cnJlbnQgbW9udGguXG4gICAqXG4gICAqICogYFwidmlzaWJsZVwiYCAtIGRheXMgYXJlIHZpc2libGVcbiAgICogKiBgXCJoaWRkZW5cImAgLSBkYXlzIGFyZSBoaWRkZW4sIHdoaXRlIHNwYWNlIHByZXNlcnZlZFxuICAgKiAqIGBcImNvbGxhcHNlZFwiYCAtIGRheXMgYXJlIGNvbGxhcHNlZCwgc28gdGhlIGRhdGVwaWNrZXIgaGVpZ2h0IG1pZ2h0IGNoYW5nZSBiZXR3ZWVuIG1vbnRoc1xuICAgKlxuICAgKiBGb3IgdGhlIDIrIG1vbnRocyB2aWV3LCBkYXlzIGluIGJldHdlZW4gbW9udGhzIGFyZSBuZXZlciBzaG93bi5cbiAgICovXG4gIEBJbnB1dCgpIG91dHNpZGVEYXlzOiAndmlzaWJsZScgfCAnY29sbGFwc2VkJyB8ICdoaWRkZW4nO1xuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHdlZWtkYXlzIHdpbGwgYmUgZGlzcGxheWVkLlxuICAgKi9cbiAgQElucHV0KCkgc2hvd1dlZWtkYXlzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHdlZWsgbnVtYmVycyB3aWxsIGJlIGRpc3BsYXllZC5cbiAgICovXG4gIEBJbnB1dCgpIHNob3dXZWVrTnVtYmVyczogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGRhdGUgdG8gb3BlbiBjYWxlbmRhciB3aXRoLlxuICAgKlxuICAgKiBXaXRoIHRoZSBkZWZhdWx0IGNhbGVuZGFyIHdlIHVzZSBJU08gODYwMTogJ21vbnRoJyBpcyAxPUphbiAuLi4gMTI9RGVjLlxuICAgKiBJZiBub3RoaW5nIG9yIGludmFsaWQgZGF0ZSBpcyBwcm92aWRlZCwgY2FsZW5kYXIgd2lsbCBvcGVuIHdpdGggY3VycmVudCBtb250aC5cbiAgICpcbiAgICogWW91IGNvdWxkIHVzZSBgbmF2aWdhdGVUbyhkYXRlKWAgbWV0aG9kIGFzIGFuIGFsdGVybmF0aXZlLlxuICAgKi9cbiAgQElucHV0KCkgc3RhcnREYXRlOiB7eWVhcjogbnVtYmVyLCBtb250aDogbnVtYmVyLCBkYXk/OiBudW1iZXJ9O1xuXG4gIC8qKlxuICAgKiBBbiBldmVudCBlbWl0dGVkIHJpZ2h0IGJlZm9yZSB0aGUgbmF2aWdhdGlvbiBoYXBwZW5zIGFuZCBkaXNwbGF5ZWQgbW9udGggY2hhbmdlcy5cbiAgICpcbiAgICogU2VlIFtgTmdiRGF0ZXBpY2tlck5hdmlnYXRlRXZlbnRgXSgjL2NvbXBvbmVudHMvZGF0ZXBpY2tlci9hcGkjTmdiRGF0ZXBpY2tlck5hdmlnYXRlRXZlbnQpIGZvciB0aGUgcGF5bG9hZCBpbmZvLlxuICAgKi9cbiAgQE91dHB1dCgpIG5hdmlnYXRlID0gbmV3IEV2ZW50RW1pdHRlcjxOZ2JEYXRlcGlja2VyTmF2aWdhdGVFdmVudD4oKTtcblxuICAvKipcbiAgICogQW4gZXZlbnQgZW1pdHRlZCB3aGVuIHVzZXIgc2VsZWN0cyBhIGRhdGUgdXNpbmcga2V5Ym9hcmQgb3IgbW91c2UuXG4gICAqXG4gICAqIFRoZSBwYXlsb2FkIG9mIHRoZSBldmVudCBpcyBjdXJyZW50bHkgc2VsZWN0ZWQgYE5nYkRhdGVgLlxuICAgKi9cbiAgQE91dHB1dCgpIHNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8TmdiRGF0ZT4oKTtcblxuICBvbkNoYW5nZSA9IChfOiBhbnkpID0+IHt9O1xuICBvblRvdWNoZWQgPSAoKSA9PiB7fTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgIHByaXZhdGUgX2tleU1hcFNlcnZpY2U6IE5nYkRhdGVwaWNrZXJLZXlNYXBTZXJ2aWNlLCBwdWJsaWMgX3NlcnZpY2U6IE5nYkRhdGVwaWNrZXJTZXJ2aWNlLFxuICAgICAgcHJpdmF0ZSBfY2FsZW5kYXI6IE5nYkNhbGVuZGFyLCBwdWJsaWMgaTE4bjogTmdiRGF0ZXBpY2tlckkxOG4sIGNvbmZpZzogTmdiRGF0ZXBpY2tlckNvbmZpZyxcbiAgICAgIHByaXZhdGUgX2NkOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICBwcml2YXRlIF9uZ2JEYXRlQWRhcHRlcjogTmdiRGF0ZUFkYXB0ZXI8YW55PiwgcHJpdmF0ZSBfbmdab25lOiBOZ1pvbmUpIHtcbiAgICBbJ2RheVRlbXBsYXRlJywgJ2RheVRlbXBsYXRlRGF0YScsICdkaXNwbGF5TW9udGhzJywgJ2ZpcnN0RGF5T2ZXZWVrJywgJ2Zvb3RlclRlbXBsYXRlJywgJ21hcmtEaXNhYmxlZCcsICdtaW5EYXRlJyxcbiAgICAgJ21heERhdGUnLCAnbmF2aWdhdGlvbicsICdvdXRzaWRlRGF5cycsICdzaG93V2Vla2RheXMnLCAnc2hvd1dlZWtOdW1iZXJzJywgJ3N0YXJ0RGF0ZSddXG4gICAgICAgIC5mb3JFYWNoKGlucHV0ID0+IHRoaXNbaW5wdXRdID0gY29uZmlnW2lucHV0XSk7XG5cbiAgICBfc2VydmljZS5zZWxlY3QkLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCQpKS5zdWJzY3JpYmUoZGF0ZSA9PiB7IHRoaXMuc2VsZWN0LmVtaXQoZGF0ZSk7IH0pO1xuXG4gICAgX3NlcnZpY2UubW9kZWwkLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCQpKS5zdWJzY3JpYmUobW9kZWwgPT4ge1xuICAgICAgY29uc3QgbmV3RGF0ZSA9IG1vZGVsLmZpcnN0RGF0ZTtcbiAgICAgIGNvbnN0IG9sZERhdGUgPSB0aGlzLm1vZGVsID8gdGhpcy5tb2RlbC5maXJzdERhdGUgOiBudWxsO1xuXG4gICAgICBsZXQgbmF2aWdhdGlvblByZXZlbnRlZCA9IGZhbHNlO1xuICAgICAgLy8gZW1pdHRpbmcgbmF2aWdhdGlvbiBldmVudCBpZiB0aGUgZmlyc3QgbW9udGggY2hhbmdlc1xuICAgICAgaWYgKCFuZXdEYXRlLmVxdWFscyhvbGREYXRlKSkge1xuICAgICAgICB0aGlzLm5hdmlnYXRlLmVtaXQoe1xuICAgICAgICAgIGN1cnJlbnQ6IG9sZERhdGUgPyB7eWVhcjogb2xkRGF0ZS55ZWFyLCBtb250aDogb2xkRGF0ZS5tb250aH0gOiBudWxsLFxuICAgICAgICAgIG5leHQ6IHt5ZWFyOiBuZXdEYXRlLnllYXIsIG1vbnRoOiBuZXdEYXRlLm1vbnRofSxcbiAgICAgICAgICBwcmV2ZW50RGVmYXVsdDogKCkgPT4gbmF2aWdhdGlvblByZXZlbnRlZCA9IHRydWVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gY2FuJ3QgcHJldmVudCB0aGUgdmVyeSBmaXJzdCBuYXZpZ2F0aW9uXG4gICAgICAgIGlmIChuYXZpZ2F0aW9uUHJldmVudGVkICYmIG9sZERhdGUgIT09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLl9zZXJ2aWNlLm9wZW4ob2xkRGF0ZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5ld1NlbGVjdGVkRGF0ZSA9IG1vZGVsLnNlbGVjdGVkRGF0ZTtcbiAgICAgIGNvbnN0IG5ld0ZvY3VzZWREYXRlID0gbW9kZWwuZm9jdXNEYXRlO1xuICAgICAgY29uc3Qgb2xkRm9jdXNlZERhdGUgPSB0aGlzLm1vZGVsID8gdGhpcy5tb2RlbC5mb2N1c0RhdGUgOiBudWxsO1xuXG4gICAgICB0aGlzLm1vZGVsID0gbW9kZWw7XG5cbiAgICAgIC8vIGhhbmRsaW5nIHNlbGVjdGlvbiBjaGFuZ2VcbiAgICAgIGlmIChpc0NoYW5nZWREYXRlKG5ld1NlbGVjdGVkRGF0ZSwgdGhpcy5fY29udHJvbFZhbHVlKSkge1xuICAgICAgICB0aGlzLl9jb250cm9sVmFsdWUgPSBuZXdTZWxlY3RlZERhdGU7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5fbmdiRGF0ZUFkYXB0ZXIudG9Nb2RlbChuZXdTZWxlY3RlZERhdGUpKTtcbiAgICAgIH1cblxuICAgICAgLy8gaGFuZGxpbmcgZm9jdXMgY2hhbmdlXG4gICAgICBpZiAoaXNDaGFuZ2VkRGF0ZShuZXdGb2N1c2VkRGF0ZSwgb2xkRm9jdXNlZERhdGUpICYmIG9sZEZvY3VzZWREYXRlICYmIG1vZGVsLmZvY3VzVmlzaWJsZSkge1xuICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICB9XG5cbiAgICAgIF9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZvY3VzKCkge1xuICAgIHRoaXMuX25nWm9uZS5vblN0YWJsZS5hc09ic2VydmFibGUoKS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50VG9Gb2N1cyA9XG4gICAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KCdkaXYubmdiLWRwLWRheVt0YWJpbmRleD1cIjBcIl0nKTtcbiAgICAgIGlmIChlbGVtZW50VG9Gb2N1cykge1xuICAgICAgICBlbGVtZW50VG9Gb2N1cy5mb2N1cygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE5hdmlnYXRlcyB0byB0aGUgcHJvdmlkZWQgZGF0ZS5cbiAgICpcbiAgICogV2l0aCB0aGUgZGVmYXVsdCBjYWxlbmRhciB3ZSB1c2UgSVNPIDg2MDE6ICdtb250aCcgaXMgMT1KYW4gLi4uIDEyPURlYy5cbiAgICogSWYgbm90aGluZyBvciBpbnZhbGlkIGRhdGUgcHJvdmlkZWQgY2FsZW5kYXIgd2lsbCBvcGVuIGN1cnJlbnQgbW9udGguXG4gICAqXG4gICAqIFVzZSB0aGUgYFtzdGFydERhdGVdYCBpbnB1dCBhcyBhbiBhbHRlcm5hdGl2ZS5cbiAgICovXG4gIG5hdmlnYXRlVG8oZGF0ZT86IHt5ZWFyOiBudW1iZXIsIG1vbnRoOiBudW1iZXIsIGRheT86IG51bWJlcn0pIHtcbiAgICB0aGlzLl9zZXJ2aWNlLm9wZW4oTmdiRGF0ZS5mcm9tKGRhdGUgPyBkYXRlLmRheSA/IGRhdGUgYXMgTmdiRGF0ZVN0cnVjdCA6IHsuLi5kYXRlLCBkYXk6IDF9IDogbnVsbCkpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBjb25zdCBmb2N1c0lucyQgPSBmcm9tRXZlbnQ8Rm9jdXNFdmVudD4odGhpcy5fbW9udGhzRWwubmF0aXZlRWxlbWVudCwgJ2ZvY3VzaW4nKTtcbiAgICAgIGNvbnN0IGZvY3VzT3V0cyQgPSBmcm9tRXZlbnQ8Rm9jdXNFdmVudD4odGhpcy5fbW9udGhzRWwubmF0aXZlRWxlbWVudCwgJ2ZvY3Vzb3V0Jyk7XG5cbiAgICAgIC8vIHdlJ3JlIGNoYW5naW5nICdmb2N1c1Zpc2libGUnIG9ubHkgd2hlbiBlbnRlcmluZyBvciBsZWF2aW5nIG1vbnRocyB2aWV3XG4gICAgICAvLyBhbmQgaWdub3JpbmcgYWxsIGZvY3VzIGV2ZW50cyB3aGVyZSBib3RoICd0YXJnZXQnIGFuZCAncmVsYXRlZCcgdGFyZ2V0IGFyZSBkYXkgY2VsbHNcbiAgICAgIG1lcmdlKGZvY3VzSW5zJCwgZm9jdXNPdXRzJClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgKHt0YXJnZXQsIHJlbGF0ZWRUYXJnZXR9KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICEoaGFzQ2xhc3NOYW1lKHRhcmdldCwgJ25nYi1kcC1kYXknKSAmJiBoYXNDbGFzc05hbWUocmVsYXRlZFRhcmdldCwgJ25nYi1kcC1kYXknKSkpLFxuICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkJCkpXG4gICAgICAgICAgLnN1YnNjcmliZSgoe3R5cGV9KSA9PiB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHRoaXMuX3NlcnZpY2UuZm9jdXNWaXNpYmxlID0gdHlwZSA9PT0gJ2ZvY3VzaW4nKSk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHsgdGhpcy5fZGVzdHJveWVkJC5uZXh0KCk7IH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy5tb2RlbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBbJ2RheVRlbXBsYXRlRGF0YScsICdkaXNwbGF5TW9udGhzJywgJ21hcmtEaXNhYmxlZCcsICdmaXJzdERheU9mV2VlaycsICduYXZpZ2F0aW9uJywgJ21pbkRhdGUnLCAnbWF4RGF0ZScsXG4gICAgICAgJ291dHNpZGVEYXlzJ11cbiAgICAgICAgICAuZm9yRWFjaChpbnB1dCA9PiB0aGlzLl9zZXJ2aWNlW2lucHV0XSA9IHRoaXNbaW5wdXRdKTtcbiAgICAgIHRoaXMubmF2aWdhdGVUbyh0aGlzLnN0YXJ0RGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIFsnZGF5VGVtcGxhdGVEYXRhJywgJ2Rpc3BsYXlNb250aHMnLCAnbWFya0Rpc2FibGVkJywgJ2ZpcnN0RGF5T2ZXZWVrJywgJ25hdmlnYXRpb24nLCAnbWluRGF0ZScsICdtYXhEYXRlJyxcbiAgICAgJ291dHNpZGVEYXlzJ11cbiAgICAgICAgLmZpbHRlcihpbnB1dCA9PiBpbnB1dCBpbiBjaGFuZ2VzKVxuICAgICAgICAuZm9yRWFjaChpbnB1dCA9PiB0aGlzLl9zZXJ2aWNlW2lucHV0XSA9IHRoaXNbaW5wdXRdKTtcblxuICAgIGlmICgnc3RhcnREYXRlJyBpbiBjaGFuZ2VzKSB7XG4gICAgICBjb25zdCB7Y3VycmVudFZhbHVlLCBwcmV2aW91c1ZhbHVlfSA9IGNoYW5nZXMuc3RhcnREYXRlO1xuICAgICAgaWYgKGlzQ2hhbmdlZE1vbnRoKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRWYWx1ZSkpIHtcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvKHRoaXMuc3RhcnREYXRlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkRhdGVTZWxlY3QoZGF0ZTogTmdiRGF0ZSkge1xuICAgIHRoaXMuX3NlcnZpY2UuZm9jdXMoZGF0ZSk7XG4gICAgdGhpcy5fc2VydmljZS5zZWxlY3QoZGF0ZSwge2VtaXRFdmVudDogdHJ1ZX0pO1xuICB9XG5cbiAgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7IHRoaXMuX2tleU1hcFNlcnZpY2UucHJvY2Vzc0tleShldmVudCk7IH1cblxuICBvbk5hdmlnYXRlRGF0ZVNlbGVjdChkYXRlOiBOZ2JEYXRlKSB7IHRoaXMuX3NlcnZpY2Uub3BlbihkYXRlKTsgfVxuXG4gIG9uTmF2aWdhdGVFdmVudChldmVudDogTmF2aWdhdGlvbkV2ZW50KSB7XG4gICAgc3dpdGNoIChldmVudCkge1xuICAgICAgY2FzZSBOYXZpZ2F0aW9uRXZlbnQuUFJFVjpcbiAgICAgICAgdGhpcy5fc2VydmljZS5vcGVuKHRoaXMuX2NhbGVuZGFyLmdldFByZXYodGhpcy5tb2RlbC5maXJzdERhdGUsICdtJywgMSkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgTmF2aWdhdGlvbkV2ZW50Lk5FWFQ6XG4gICAgICAgIHRoaXMuX3NlcnZpY2Uub3Blbih0aGlzLl9jYWxlbmRhci5nZXROZXh0KHRoaXMubW9kZWwuZmlyc3REYXRlLCAnbScsIDEpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBhbnkpID0+IGFueSk6IHZvaWQgeyB0aGlzLm9uQ2hhbmdlID0gZm47IH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gYW55KTogdm9pZCB7IHRoaXMub25Ub3VjaGVkID0gZm47IH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHsgdGhpcy5fc2VydmljZS5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7IH1cblxuICB3cml0ZVZhbHVlKHZhbHVlKSB7XG4gICAgdGhpcy5fY29udHJvbFZhbHVlID0gTmdiRGF0ZS5mcm9tKHRoaXMuX25nYkRhdGVBZGFwdGVyLmZyb21Nb2RlbCh2YWx1ZSkpO1xuICAgIHRoaXMuX3NlcnZpY2Uuc2VsZWN0KHRoaXMuX2NvbnRyb2xWYWx1ZSk7XG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/datepicker/datepicker.module.js b/dist/sunbird-ui-components/esm5/datepicker/datepicker.module.js new file mode 100644 index 0000000..e54027e --- /dev/null +++ b/dist/sunbird-ui-components/esm5/datepicker/datepicker.module.js @@ -0,0 +1,50 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; +import { NgbDatepicker } from './datepicker'; +import { NgbDatepickerMonthView } from './datepicker-month-view'; +import { NgbDatepickerNavigation } from './datepicker-navigation'; +import { NgbInputDatepicker } from './datepicker-input'; +import { NgbDatepickerDayView } from './datepicker-day-view'; +import { NgbDatepickerNavigationSelect } from './datepicker-navigation-select'; +export { NgbDatepicker } from './datepicker'; +export { NgbInputDatepicker } from './datepicker-input'; +export { NgbCalendar, NgbCalendarGregorian } from './ngb-calendar'; +export { NgbCalendarIslamicCivil } from './hijri/ngb-calendar-islamic-civil'; +export { NgbCalendarIslamicUmalqura } from './hijri/ngb-calendar-islamic-umalqura'; +export { NgbCalendarPersian } from './jalali/ngb-calendar-persian'; +export { NgbCalendarHebrew } from './hebrew/ngb-calendar-hebrew'; +export { NgbDatepickerI18nHebrew } from './hebrew/datepicker-i18n-hebrew'; +export { NgbDatepickerMonthView } from './datepicker-month-view'; +export { NgbDatepickerDayView } from './datepicker-day-view'; +export { NgbDatepickerNavigation } from './datepicker-navigation'; +export { NgbDatepickerNavigationSelect } from './datepicker-navigation-select'; +export { NgbDatepickerConfig } from './datepicker-config'; +export { NgbDatepickerI18n } from './datepicker-i18n'; +export { NgbDate } from './ngb-date'; +export { NgbDateAdapter } from './adapters/ngb-date-adapter'; +export { NgbDateNativeAdapter } from './adapters/ngb-date-native-adapter'; +export { NgbDateNativeUTCAdapter } from './adapters/ngb-date-native-utc-adapter'; +export { NgbDateParserFormatter } from './ngb-date-parser-formatter'; +var NgbDatepickerModule = /** @class */ (function () { + function NgbDatepickerModule() { + } + NgbDatepickerModule.decorators = [ + { type: NgModule, args: [{ + declarations: [ + NgbDatepicker, NgbDatepickerMonthView, NgbDatepickerNavigation, NgbDatepickerNavigationSelect, NgbDatepickerDayView, + NgbInputDatepicker + ], + exports: [NgbDatepicker, NgbInputDatepicker], + imports: [CommonModule, FormsModule], + entryComponents: [NgbDatepicker] + },] } + ]; + return NgbDatepickerModule; +}()); +export { NgbDatepickerModule }; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5tb2R1bGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJkYXRlcGlja2VyL2RhdGVwaWNrZXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUMzQyxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUMvRCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRSxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUMzRCxPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUU3RSxPQUFPLEVBQUMsYUFBYSxFQUE2QixNQUFNLGNBQWMsQ0FBQztBQUN2RSxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RCxPQUFPLEVBQUMsV0FBVyxFQUFhLG9CQUFvQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUUsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDM0UsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFDakYsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDeEUsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDL0QsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDM0QsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDaEUsT0FBTyxFQUFDLDZCQUE2QixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDN0UsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDeEQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFcEQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFlBQVksQ0FBQztBQUNuQyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDeEUsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sd0NBQXdDLENBQUM7QUFDL0UsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFFbkU7SUFBQTtJQVVBLENBQUM7O2dCQVZBLFFBQVEsU0FBQztvQkFDUixZQUFZLEVBQUU7d0JBQ1osYUFBYSxFQUFFLHNCQUFzQixFQUFFLHVCQUF1QixFQUFFLDZCQUE2QixFQUFFLG9CQUFvQjt3QkFDbkgsa0JBQWtCO3FCQUNuQjtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxhQUFhLEVBQUUsa0JBQWtCLENBQUM7b0JBQzVDLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxXQUFXLENBQUM7b0JBQ3BDLGVBQWUsRUFBRSxDQUFDLGFBQWEsQ0FBQztpQkFDakM7O0lBRUQsMEJBQUM7Q0FBQSxBQVZELElBVUM7U0FEWSxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge05nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtOZ2JEYXRlcGlja2VyfSBmcm9tICcuL2RhdGVwaWNrZXInO1xuaW1wb3J0IHtOZ2JEYXRlcGlja2VyTW9udGhWaWV3fSBmcm9tICcuL2RhdGVwaWNrZXItbW9udGgtdmlldyc7XG5pbXBvcnQge05nYkRhdGVwaWNrZXJOYXZpZ2F0aW9ufSBmcm9tICcuL2RhdGVwaWNrZXItbmF2aWdhdGlvbic7XG5pbXBvcnQge05nYklucHV0RGF0ZXBpY2tlcn0gZnJvbSAnLi9kYXRlcGlja2VyLWlucHV0JztcbmltcG9ydCB7TmdiRGF0ZXBpY2tlckRheVZpZXd9IGZyb20gJy4vZGF0ZXBpY2tlci1kYXktdmlldyc7XG5pbXBvcnQge05nYkRhdGVwaWNrZXJOYXZpZ2F0aW9uU2VsZWN0fSBmcm9tICcuL2RhdGVwaWNrZXItbmF2aWdhdGlvbi1zZWxlY3QnO1xuXG5leHBvcnQge05nYkRhdGVwaWNrZXIsIE5nYkRhdGVwaWNrZXJOYXZpZ2F0ZUV2ZW50fSBmcm9tICcuL2RhdGVwaWNrZXInO1xuZXhwb3J0IHtOZ2JJbnB1dERhdGVwaWNrZXJ9IGZyb20gJy4vZGF0ZXBpY2tlci1pbnB1dCc7XG5leHBvcnQge05nYkNhbGVuZGFyLCBOZ2JQZXJpb2QsIE5nYkNhbGVuZGFyR3JlZ29yaWFufSBmcm9tICcuL25nYi1jYWxlbmRhcic7XG5leHBvcnQge05nYkNhbGVuZGFySXNsYW1pY0NpdmlsfSBmcm9tICcuL2hpanJpL25nYi1jYWxlbmRhci1pc2xhbWljLWNpdmlsJztcbmV4cG9ydCB7TmdiQ2FsZW5kYXJJc2xhbWljVW1hbHF1cmF9IGZyb20gJy4vaGlqcmkvbmdiLWNhbGVuZGFyLWlzbGFtaWMtdW1hbHF1cmEnO1xuZXhwb3J0IHtOZ2JDYWxlbmRhclBlcnNpYW59IGZyb20gJy4vamFsYWxpL25nYi1jYWxlbmRhci1wZXJzaWFuJztcbmV4cG9ydCB7TmdiQ2FsZW5kYXJIZWJyZXd9IGZyb20gJy4vaGVicmV3L25nYi1jYWxlbmRhci1oZWJyZXcnO1xuZXhwb3J0IHtOZ2JEYXRlcGlja2VySTE4bkhlYnJld30gZnJvbSAnLi9oZWJyZXcvZGF0ZXBpY2tlci1pMThuLWhlYnJldyc7XG5leHBvcnQge05nYkRhdGVwaWNrZXJNb250aFZpZXd9IGZyb20gJy4vZGF0ZXBpY2tlci1tb250aC12aWV3JztcbmV4cG9ydCB7TmdiRGF0ZXBpY2tlckRheVZpZXd9IGZyb20gJy4vZGF0ZXBpY2tlci1kYXktdmlldyc7XG5leHBvcnQge05nYkRhdGVwaWNrZXJOYXZpZ2F0aW9ufSBmcm9tICcuL2RhdGVwaWNrZXItbmF2aWdhdGlvbic7XG5leHBvcnQge05nYkRhdGVwaWNrZXJOYXZpZ2F0aW9uU2VsZWN0fSBmcm9tICcuL2RhdGVwaWNrZXItbmF2aWdhdGlvbi1zZWxlY3QnO1xuZXhwb3J0IHtOZ2JEYXRlcGlja2VyQ29uZmlnfSBmcm9tICcuL2RhdGVwaWNrZXItY29uZmlnJztcbmV4cG9ydCB7TmdiRGF0ZXBpY2tlckkxOG59IGZyb20gJy4vZGF0ZXBpY2tlci1pMThuJztcbmV4cG9ydCB7TmdiRGF0ZVN0cnVjdH0gZnJvbSAnLi9uZ2ItZGF0ZS1zdHJ1Y3QnO1xuZXhwb3J0IHtOZ2JEYXRlfSBmcm9tICcuL25nYi1kYXRlJztcbmV4cG9ydCB7TmdiRGF0ZUFkYXB0ZXJ9IGZyb20gJy4vYWRhcHRlcnMvbmdiLWRhdGUtYWRhcHRlcic7XG5leHBvcnQge05nYkRhdGVOYXRpdmVBZGFwdGVyfSBmcm9tICcuL2FkYXB0ZXJzL25nYi1kYXRlLW5hdGl2ZS1hZGFwdGVyJztcbmV4cG9ydCB7TmdiRGF0ZU5hdGl2ZVVUQ0FkYXB0ZXJ9IGZyb20gJy4vYWRhcHRlcnMvbmdiLWRhdGUtbmF0aXZlLXV0Yy1hZGFwdGVyJztcbmV4cG9ydCB7TmdiRGF0ZVBhcnNlckZvcm1hdHRlcn0gZnJvbSAnLi9uZ2ItZGF0ZS1wYXJzZXItZm9ybWF0dGVyJztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgTmdiRGF0ZXBpY2tlciwgTmdiRGF0ZXBpY2tlck1vbnRoVmlldywgTmdiRGF0ZXBpY2tlck5hdmlnYXRpb24sIE5nYkRhdGVwaWNrZXJOYXZpZ2F0aW9uU2VsZWN0LCBOZ2JEYXRlcGlja2VyRGF5VmlldyxcbiAgICBOZ2JJbnB1dERhdGVwaWNrZXJcbiAgXSxcbiAgZXhwb3J0czogW05nYkRhdGVwaWNrZXIsIE5nYklucHV0RGF0ZXBpY2tlcl0sXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlXSxcbiAgZW50cnlDb21wb25lbnRzOiBbTmdiRGF0ZXBpY2tlcl1cbn0pXG5leHBvcnQgY2xhc3MgTmdiRGF0ZXBpY2tlck1vZHVsZSB7XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/datepicker/hebrew/datepicker-i18n-hebrew.js b/dist/sunbird-ui-components/esm5/datepicker/hebrew/datepicker-i18n-hebrew.js new file mode 100644 index 0000000..11b3e01 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/datepicker/hebrew/datepicker-i18n-hebrew.js @@ -0,0 +1,100 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import * as tslib_1 from "tslib"; +import { NgbDatepickerI18n } from '../datepicker-i18n'; +import { hebrewNumerals, isHebrewLeapYear } from './hebrew'; +import { Injectable } from '@angular/core'; +/** @type {?} */ +var WEEKDAYS = ['שני', 'שלישי', 'רביעי', 'חמישי', 'שישי', 'שבת', 'ראשון']; +/** @type {?} */ +var MONTHS = ['תשרי', 'חשון', 'כסלו', 'טבת', 'שבט', 'אדר', 'ניסן', 'אייר', 'סיון', 'תמוז', 'אב', 'אלול']; +/** @type {?} */ +var MONTHS_LEAP = ['תשרי', 'חשון', 'כסלו', 'טבת', 'שבט', 'אדר א׳', 'אדר ב׳', 'ניסן', 'אייר', 'סיון', 'תמוז', 'אב', 'אלול']; +/** + * \@since 3.2.0 + */ +var NgbDatepickerI18nHebrew = /** @class */ (function (_super) { + tslib_1.__extends(NgbDatepickerI18nHebrew, _super); + function NgbDatepickerI18nHebrew() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * @param {?} month + * @param {?=} year + * @return {?} + */ + NgbDatepickerI18nHebrew.prototype.getMonthShortName = /** + * @param {?} month + * @param {?=} year + * @return {?} + */ + function (month, year) { return this.getMonthFullName(month, year); }; + /** + * @param {?} month + * @param {?=} year + * @return {?} + */ + NgbDatepickerI18nHebrew.prototype.getMonthFullName = /** + * @param {?} month + * @param {?=} year + * @return {?} + */ + function (month, year) { + return isHebrewLeapYear(year) ? MONTHS_LEAP[month - 1] : MONTHS[month - 1]; + }; + /** + * @param {?} weekday + * @return {?} + */ + NgbDatepickerI18nHebrew.prototype.getWeekdayShortName = /** + * @param {?} weekday + * @return {?} + */ + function (weekday) { return WEEKDAYS[weekday - 1]; }; + /** + * @param {?} date + * @return {?} + */ + NgbDatepickerI18nHebrew.prototype.getDayAriaLabel = /** + * @param {?} date + * @return {?} + */ + function (date) { + return hebrewNumerals(date.day) + " " + this.getMonthFullName(date.month, date.year) + " " + hebrewNumerals(date.year); + }; + /** + * @param {?} date + * @return {?} + */ + NgbDatepickerI18nHebrew.prototype.getDayNumerals = /** + * @param {?} date + * @return {?} + */ + function (date) { return hebrewNumerals(date.day); }; + /** + * @param {?} weekNumber + * @return {?} + */ + NgbDatepickerI18nHebrew.prototype.getWeekNumerals = /** + * @param {?} weekNumber + * @return {?} + */ + function (weekNumber) { return hebrewNumerals(weekNumber); }; + /** + * @param {?} year + * @return {?} + */ + NgbDatepickerI18nHebrew.prototype.getYearNumerals = /** + * @param {?} year + * @return {?} + */ + function (year) { return hebrewNumerals(year); }; + NgbDatepickerI18nHebrew.decorators = [ + { type: Injectable } + ]; + return NgbDatepickerI18nHebrew; +}(NgbDatepickerI18n)); +export { NgbDatepickerI18nHebrew }; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1pMThuLWhlYnJldy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImRhdGVwaWNrZXIvaGVicmV3L2RhdGVwaWNrZXItaTE4bi1oZWJyZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVyRCxPQUFPLEVBQUMsY0FBYyxFQUFFLGdCQUFnQixFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQzFELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7O0lBR25DLFFBQVEsR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQzs7SUFDckUsTUFBTSxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUM7O0lBQ3BHLFdBQVcsR0FDYixDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQzs7OztBQUs1RztJQUM2QyxtREFBaUI7SUFEOUQ7O0lBbUJBLENBQUM7Ozs7OztJQWpCQyxtREFBaUI7Ozs7O0lBQWpCLFVBQWtCLEtBQWEsRUFBRSxJQUFhLElBQVksT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzs7Ozs7O0lBRXRHLGtEQUFnQjs7Ozs7SUFBaEIsVUFBaUIsS0FBYSxFQUFFLElBQWE7UUFDM0MsT0FBTyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM3RSxDQUFDOzs7OztJQUVELHFEQUFtQjs7OztJQUFuQixVQUFvQixPQUFlLElBQVksT0FBTyxRQUFRLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7Ozs7SUFFOUUsaURBQWU7Ozs7SUFBZixVQUFnQixJQUFtQjtRQUNqQyxPQUFVLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFHLENBQUM7SUFDcEgsQ0FBQzs7Ozs7SUFFRCxnREFBYzs7OztJQUFkLFVBQWUsSUFBbUIsSUFBWSxPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7OztJQUVoRixpREFBZTs7OztJQUFmLFVBQWdCLFVBQWtCLElBQVksT0FBTyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7OztJQUVsRixpREFBZTs7OztJQUFmLFVBQWdCLElBQVksSUFBWSxPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7O2dCQWxCdkUsVUFBVTs7SUFtQlgsOEJBQUM7Q0FBQSxBQW5CRCxDQUM2QyxpQkFBaUIsR0FrQjdEO1NBbEJZLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TmdiRGF0ZXBpY2tlckkxOG59IGZyb20gJy4uL2RhdGVwaWNrZXItaTE4bic7XG5pbXBvcnQge05nYkRhdGVTdHJ1Y3R9IGZyb20gJy4uLy4uL2luZGV4JztcbmltcG9ydCB7aGVicmV3TnVtZXJhbHMsIGlzSGVicmV3TGVhcFllYXJ9IGZyb20gJy4vaGVicmV3JztcbmltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cblxuY29uc3QgV0VFS0RBWVMgPSBbJ9ep16DXmScsICfXqdec15nXqdeZJywgJ9eo15HXmdei15knLCAn15fXnteZ16nXmScsICfXqdeZ16nXmScsICfXqdeR16onLCAn16jXkNep15XXnyddO1xuY29uc3QgTU9OVEhTID0gWyfXqtep16jXmScsICfXl9ep15XXnycsICfXm9eh15zXlScsICfXmNeR16onLCAn16nXkdeYJywgJ9eQ15PXqCcsICfXoNeZ16HXnycsICfXkNeZ15nXqCcsICfXodeZ15XXnycsICfXqtee15XXlicsICfXkNeRJywgJ9eQ15zXldecJ107XG5jb25zdCBNT05USFNfTEVBUCA9XG4gICAgWyfXqtep16jXmScsICfXl9ep15XXnycsICfXm9eh15zXlScsICfXmNeR16onLCAn16nXkdeYJywgJ9eQ15PXqCDXkNezJywgJ9eQ15PXqCDXkdezJywgJ9eg15nXodefJywgJ9eQ15nXmdeoJywgJ9eh15nXldefJywgJ9eq157XldeWJywgJ9eQ15EnLCAn15DXnNeV15wnXTtcblxuLyoqXG4gKiBAc2luY2UgMy4yLjBcbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE5nYkRhdGVwaWNrZXJJMThuSGVicmV3IGV4dGVuZHMgTmdiRGF0ZXBpY2tlckkxOG4ge1xuICBnZXRNb250aFNob3J0TmFtZShtb250aDogbnVtYmVyLCB5ZWFyPzogbnVtYmVyKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuZ2V0TW9udGhGdWxsTmFtZShtb250aCwgeWVhcik7IH1cblxuICBnZXRNb250aEZ1bGxOYW1lKG1vbnRoOiBudW1iZXIsIHllYXI/OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBpc0hlYnJld0xlYXBZZWFyKHllYXIpID8gTU9OVEhTX0xFQVBbbW9udGggLSAxXSA6IE1PTlRIU1ttb250aCAtIDFdO1xuICB9XG5cbiAgZ2V0V2Vla2RheVNob3J0TmFtZSh3ZWVrZGF5OiBudW1iZXIpOiBzdHJpbmcgeyByZXR1cm4gV0VFS0RBWVNbd2Vla2RheSAtIDFdOyB9XG5cbiAgZ2V0RGF5QXJpYUxhYmVsKGRhdGU6IE5nYkRhdGVTdHJ1Y3QpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtoZWJyZXdOdW1lcmFscyhkYXRlLmRheSl9ICR7dGhpcy5nZXRNb250aEZ1bGxOYW1lKGRhdGUubW9udGgsIGRhdGUueWVhcil9ICR7aGVicmV3TnVtZXJhbHMoZGF0ZS55ZWFyKX1gO1xuICB9XG5cbiAgZ2V0RGF5TnVtZXJhbHMoZGF0ZTogTmdiRGF0ZVN0cnVjdCk6IHN0cmluZyB7IHJldHVybiBoZWJyZXdOdW1lcmFscyhkYXRlLmRheSk7IH1cblxuICBnZXRXZWVrTnVtZXJhbHMod2Vla051bWJlcjogbnVtYmVyKTogc3RyaW5nIHsgcmV0dXJuIGhlYnJld051bWVyYWxzKHdlZWtOdW1iZXIpOyB9XG5cbiAgZ2V0WWVhck51bWVyYWxzKHllYXI6IG51bWJlcik6IHN0cmluZyB7IHJldHVybiBoZWJyZXdOdW1lcmFscyh5ZWFyKTsgfVxufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/datepicker/hebrew/hebrew.js b/dist/sunbird-ui-components/esm5/datepicker/hebrew/hebrew.js new file mode 100644 index 0000000..4c010dc --- /dev/null +++ b/dist/sunbird-ui-components/esm5/datepicker/hebrew/hebrew.js @@ -0,0 +1,406 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgbDate } from '../ngb-date'; +/** @type {?} */ +var PARTS_PER_HOUR = 1080; +/** @type {?} */ +var PARTS_PER_DAY = 24 * PARTS_PER_HOUR; +/** @type {?} */ +var PARTS_FRACTIONAL_MONTH = 12 * PARTS_PER_HOUR + 793; +/** @type {?} */ +var PARTS_PER_MONTH = 29 * PARTS_PER_DAY + PARTS_FRACTIONAL_MONTH; +/** @type {?} */ +var BAHARAD = 11 * PARTS_PER_HOUR + 204; +/** @type {?} */ +var HEBREW_DAY_ON_JAN_1_1970 = 2092591; +/** @type {?} */ +var GREGORIAN_EPOCH = 1721425.5; +/** + * @param {?} year + * @return {?} + */ +function isGregorianLeapYear(year) { + return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0; +} +/** + * @param {?} year + * @return {?} + */ +function numberOfFirstDayInYear(year) { + /** @type {?} */ + var monthsBeforeYear = Math.floor((235 * year - 234) / 19); + /** @type {?} */ + var fractionalMonthsBeforeYear = monthsBeforeYear * PARTS_FRACTIONAL_MONTH + BAHARAD; + /** @type {?} */ + var dayNumber = monthsBeforeYear * 29 + Math.floor(fractionalMonthsBeforeYear / PARTS_PER_DAY); + /** @type {?} */ + var timeOfDay = fractionalMonthsBeforeYear % PARTS_PER_DAY; + /** @type {?} */ + var dayOfWeek = dayNumber % 7; + if (dayOfWeek === 2 || dayOfWeek === 4 || dayOfWeek === 6) { + dayNumber++; + dayOfWeek = dayNumber % 7; + } + if (dayOfWeek === 1 && timeOfDay > 15 * PARTS_PER_HOUR + 204 && !isHebrewLeapYear(year)) { + dayNumber += 2; + } + else if (dayOfWeek === 0 && timeOfDay > 21 * PARTS_PER_HOUR + 589 && isHebrewLeapYear(year - 1)) { + dayNumber++; + } + return dayNumber; +} +/** + * @param {?} month + * @param {?} year + * @return {?} + */ +function getDaysInGregorianMonth(month, year) { + /** @type {?} */ + var days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + if (isGregorianLeapYear(year)) { + days[1]++; + } + return days[month - 1]; +} +/** + * @param {?} year + * @return {?} + */ +function getHebrewMonths(year) { + return isHebrewLeapYear(year) ? 13 : 12; +} +/** + * Returns the number of days in a specific Hebrew year. + * `year` is any Hebrew year. + * @param {?} year + * @return {?} + */ +function getDaysInHebrewYear(year) { + return numberOfFirstDayInYear(year + 1) - numberOfFirstDayInYear(year); +} +/** + * @param {?} year + * @return {?} + */ +export function isHebrewLeapYear(year) { + /** @type {?} */ + var b = (year * 12 + 17) % 19; + return b >= ((b < 0) ? -7 : 12); +} +/** + * Returns the number of days in a specific Hebrew month. + * `month` is 1 for Nisan, 2 for Iyar etc. Note: Hebrew leap year contains 13 months. + * `year` is any Hebrew year. + * @param {?} month + * @param {?} year + * @return {?} + */ +export function getDaysInHebrewMonth(month, year) { + /** @type {?} */ + var yearLength = numberOfFirstDayInYear(year + 1) - numberOfFirstDayInYear(year); + /** @type {?} */ + var yearType = (yearLength <= 380 ? yearLength : (yearLength - 30)) - 353; + /** @type {?} */ + var leapYear = isHebrewLeapYear(year); + /** @type {?} */ + var daysInMonth = leapYear ? [30, 29, 29, 29, 30, 30, 29, 30, 29, 30, 29, 30, 29] : + [30, 29, 29, 29, 30, 29, 30, 29, 30, 29, 30, 29]; + if (yearType > 0) { + daysInMonth[2]++; // Kislev gets an extra day in normal or complete years. + } + if (yearType > 1) { + daysInMonth[1]++; // Heshvan gets an extra day in complete years only. + } + return daysInMonth[month - 1]; +} +/** + * @param {?} date + * @return {?} + */ +export function getDayNumberInHebrewYear(date) { + /** @type {?} */ + var numberOfDay = 0; + for (var i = 1; i < date.month; i++) { + numberOfDay += getDaysInHebrewMonth(i, date.year); + } + return numberOfDay + date.day; +} +/** + * @param {?} date + * @param {?} val + * @return {?} + */ +export function setHebrewMonth(date, val) { + /** @type {?} */ + var after = val >= 0; + if (!after) { + val = -val; + } + while (val > 0) { + if (after) { + if (val > getHebrewMonths(date.year) - date.month) { + val -= getHebrewMonths(date.year) - date.month + 1; + date.year++; + date.month = 1; + } + else { + date.month += val; + val = 0; + } + } + else { + if (val >= date.month) { + date.year--; + val -= date.month; + date.month = getHebrewMonths(date.year); + } + else { + date.month -= val; + val = 0; + } + } + } + return date; +} +/** + * @param {?} date + * @param {?} val + * @return {?} + */ +export function setHebrewDay(date, val) { + /** @type {?} */ + var after = val >= 0; + if (!after) { + val = -val; + } + while (val > 0) { + if (after) { + if (val > getDaysInHebrewYear(date.year) - getDayNumberInHebrewYear(date)) { + val -= getDaysInHebrewYear(date.year) - getDayNumberInHebrewYear(date) + 1; + date.year++; + date.month = 1; + date.day = 1; + } + else if (val > getDaysInHebrewMonth(date.month, date.year) - date.day) { + val -= getDaysInHebrewMonth(date.month, date.year) - date.day + 1; + date.month++; + date.day = 1; + } + else { + date.day += val; + val = 0; + } + } + else { + if (val >= date.day) { + val -= date.day; + date.month--; + if (date.month === 0) { + date.year--; + date.month = getHebrewMonths(date.year); + } + date.day = getDaysInHebrewMonth(date.month, date.year); + } + else { + date.day -= val; + val = 0; + } + } + } + return date; +} +/** + * Returns the equivalent Hebrew date value for a give input Gregorian date. + * `gdate` is a JS Date to be converted to Hebrew date. + * @param {?} gdate + * @return {?} + */ +export function fromGregorian(gdate) { + /** @type {?} */ + var date = new Date(gdate); + /** @type {?} */ + var gYear = date.getFullYear(); + /** @type {?} */ + var gMonth = date.getMonth(); + /** @type {?} */ + var gDay = date.getDate(); + /** @type {?} */ + var julianDay = GREGORIAN_EPOCH - 1 + 365 * (gYear - 1) + Math.floor((gYear - 1) / 4) - + Math.floor((gYear - 1) / 100) + Math.floor((gYear - 1) / 400) + + Math.floor((367 * (gMonth + 1) - 362) / 12 + (gMonth + 1 <= 2 ? 0 : isGregorianLeapYear(gYear) ? -1 : -2) + gDay); + julianDay = Math.floor(julianDay + 0.5); + /** @type {?} */ + var daysSinceHebEpoch = julianDay - 347997; + /** @type {?} */ + var monthsSinceHebEpoch = Math.floor(daysSinceHebEpoch * PARTS_PER_DAY / PARTS_PER_MONTH); + /** @type {?} */ + var hYear = Math.floor((monthsSinceHebEpoch * 19 + 234) / 235) + 1; + /** @type {?} */ + var firstDayOfThisYear = numberOfFirstDayInYear(hYear); + /** @type {?} */ + var dayOfYear = daysSinceHebEpoch - firstDayOfThisYear; + while (dayOfYear < 1) { + hYear--; + firstDayOfThisYear = numberOfFirstDayInYear(hYear); + dayOfYear = daysSinceHebEpoch - firstDayOfThisYear; + } + /** @type {?} */ + var hMonth = 1; + /** @type {?} */ + var hDay = dayOfYear; + while (hDay > getDaysInHebrewMonth(hMonth, hYear)) { + hDay -= getDaysInHebrewMonth(hMonth, hYear); + hMonth++; + } + return new NgbDate(hYear, hMonth, hDay); +} +/** + * Returns the equivalent JS date value for a given Hebrew date. + * `hebrewDate` is an Hebrew date to be converted to Gregorian. + * @param {?} hebrewDate + * @return {?} + */ +export function toGregorian(hebrewDate) { + /** @type {?} */ + var hYear = hebrewDate.year; + /** @type {?} */ + var hMonth = hebrewDate.month; + /** @type {?} */ + var hDay = hebrewDate.day; + /** @type {?} */ + var days = numberOfFirstDayInYear(hYear); + for (var i = 1; i < hMonth; i++) { + days += getDaysInHebrewMonth(i, hYear); + } + days += hDay; + /** @type {?} */ + var diffDays = days - HEBREW_DAY_ON_JAN_1_1970; + /** @type {?} */ + var after = diffDays >= 0; + if (!after) { + diffDays = -diffDays; + } + /** @type {?} */ + var gYear = 1970; + /** @type {?} */ + var gMonth = 1; + /** @type {?} */ + var gDay = 1; + while (diffDays > 0) { + if (after) { + if (diffDays >= (isGregorianLeapYear(gYear) ? 366 : 365)) { + diffDays -= isGregorianLeapYear(gYear) ? 366 : 365; + gYear++; + } + else if (diffDays >= getDaysInGregorianMonth(gMonth, gYear)) { + diffDays -= getDaysInGregorianMonth(gMonth, gYear); + gMonth++; + } + else { + gDay += diffDays; + diffDays = 0; + } + } + else { + if (diffDays >= (isGregorianLeapYear(gYear - 1) ? 366 : 365)) { + diffDays -= isGregorianLeapYear(gYear - 1) ? 366 : 365; + gYear--; + } + else { + if (gMonth > 1) { + gMonth--; + } + else { + gMonth = 12; + gYear--; + } + if (diffDays >= getDaysInGregorianMonth(gMonth, gYear)) { + diffDays -= getDaysInGregorianMonth(gMonth, gYear); + } + else { + gDay = getDaysInGregorianMonth(gMonth, gYear) - diffDays + 1; + diffDays = 0; + } + } + } + } + return new Date(gYear, gMonth - 1, gDay); +} +/** + * @param {?} numerals + * @return {?} + */ +export function hebrewNumerals(numerals) { + if (!numerals) { + return ''; + } + /** @type {?} */ + var hArray0_9 = ['', '\u05d0', '\u05d1', '\u05d2', '\u05d3', '\u05d4', '\u05d5', '\u05d6', '\u05d7', '\u05d8']; + /** @type {?} */ + var hArray10_19 = [ + '\u05d9', '\u05d9\u05d0', '\u05d9\u05d1', '\u05d9\u05d2', '\u05d9\u05d3', '\u05d8\u05d5', '\u05d8\u05d6', + '\u05d9\u05d6', '\u05d9\u05d7', '\u05d9\u05d8' + ]; + /** @type {?} */ + var hArray20_90 = ['', '', '\u05db', '\u05dc', '\u05de', '\u05e0', '\u05e1', '\u05e2', '\u05e4', '\u05e6']; + /** @type {?} */ + var hArray100_900 = [ + '', '\u05e7', '\u05e8', '\u05e9', '\u05ea', '\u05ea\u05e7', '\u05ea\u05e8', '\u05ea\u05e9', '\u05ea\u05ea', + '\u05ea\u05ea\u05e7' + ]; + /** @type {?} */ + var hArray1000_9000 = [ + '', '\u05d0', '\u05d1', '\u05d1\u05d0', '\u05d1\u05d1', '\u05d4', '\u05d4\u05d0', '\u05d4\u05d1', + '\u05d4\u05d1\u05d0', '\u05d4\u05d1\u05d1' + ]; + /** @type {?} */ + var geresh = '\u05f3'; + /** @type {?} */ + var gershaim = '\u05f4'; + /** @type {?} */ + var mem = 0; + /** @type {?} */ + var result = []; + /** @type {?} */ + var step = 0; + while (numerals > 0) { + /** @type {?} */ + var m = numerals % 10; + if (step === 0) { + mem = m; + } + else if (step === 1) { + if (m !== 1) { + result.unshift(hArray20_90[m], hArray0_9[mem]); + } + else { + result.unshift(hArray10_19[mem]); + } + } + else if (step === 2) { + result.unshift(hArray100_900[m]); + } + else { + if (m !== 5) { + result.unshift(hArray1000_9000[m], geresh, ' '); + } + break; + } + numerals = Math.floor(numerals / 10); + if (step === 0 && numerals === 0) { + result.unshift(hArray0_9[m]); + } + step++; + } + result = result.join('').split(''); + if (result.length === 1) { + result.push(geresh); + } + else if (result.length > 1) { + result.splice(result.length - 1, 0, gershaim); + } + return result.join(''); +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVicmV3LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiZGF0ZXBpY2tlci9oZWJyZXcvaGVicmV3LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sYUFBYSxDQUFDOztJQUc5QixjQUFjLEdBQUcsSUFBSTs7SUFDckIsYUFBYSxHQUFHLEVBQUUsR0FBRyxjQUFjOztJQUNuQyxzQkFBc0IsR0FBRyxFQUFFLEdBQUcsY0FBYyxHQUFHLEdBQUc7O0lBQ2xELGVBQWUsR0FBRyxFQUFFLEdBQUcsYUFBYSxHQUFHLHNCQUFzQjs7SUFDN0QsT0FBTyxHQUFHLEVBQUUsR0FBRyxjQUFjLEdBQUcsR0FBRzs7SUFDbkMsd0JBQXdCLEdBQUcsT0FBTzs7SUFDbEMsZUFBZSxHQUFHLFNBQVM7Ozs7O0FBRWpDLFNBQVMsbUJBQW1CLENBQUMsSUFBWTtJQUN2QyxPQUFPLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ2hFLENBQUM7Ozs7O0FBRUQsU0FBUyxzQkFBc0IsQ0FBQyxJQUFZOztRQUN0QyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7O1FBQ3RELDBCQUEwQixHQUFHLGdCQUFnQixHQUFHLHNCQUFzQixHQUFHLE9BQU87O1FBQ2hGLFNBQVMsR0FBRyxnQkFBZ0IsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQywwQkFBMEIsR0FBRyxhQUFhLENBQUM7O1FBQzFGLFNBQVMsR0FBRywwQkFBMEIsR0FBRyxhQUFhOztRQUV0RCxTQUFTLEdBQUcsU0FBUyxHQUFHLENBQUM7SUFFN0IsSUFBSSxTQUFT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O1FBQ0QsSUFBSSxFQUFFLENBQUM7S0FDUjtJQUNELE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNuQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3ZCLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDckI7U0FBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQzVCLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0tBQy9DO0lBQ0QsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge05nYkRhdGV9IGZyb20gJy4uL25nYi1kYXRlJztcbmltcG9ydCB7TmdiRGF0ZVN0cnVjdH0gZnJvbSAnLi4vbmdiLWRhdGUtc3RydWN0JztcblxuY29uc3QgUEFSVFNfUEVSX0hPVVIgPSAxMDgwO1xuY29uc3QgUEFSVFNfUEVSX0RBWSA9IDI0ICogUEFSVFNfUEVSX0hPVVI7XG5jb25zdCBQQVJUU19GUkFDVElPTkFMX01PTlRIID0gMTIgKiBQQVJUU19QRVJfSE9VUiArIDc5MztcbmNvbnN0IFBBUlRTX1BFUl9NT05USCA9IDI5ICogUEFSVFNfUEVSX0RBWSArIFBBUlRTX0ZSQUNUSU9OQUxfTU9OVEg7XG5jb25zdCBCQUhBUkFEID0gMTEgKiBQQVJUU19QRVJfSE9VUiArIDIwNDtcbmNvbnN0IEhFQlJFV19EQVlfT05fSkFOXzFfMTk3MCA9IDIwOTI1OTE7XG5jb25zdCBHUkVHT1JJQU5fRVBPQ0ggPSAxNzIxNDI1LjU7XG5cbmZ1bmN0aW9uIGlzR3JlZ29yaWFuTGVhcFllYXIoeWVhcjogbnVtYmVyKTogYm9vbGVhbiB7XG4gIHJldHVybiB5ZWFyICUgNCA9PT0gMCAmJiB5ZWFyICUgMTAwICE9PSAwIHx8IHllYXIgJSA0MDAgPT09IDA7XG59XG5cbmZ1bmN0aW9uIG51bWJlck9mRmlyc3REYXlJblllYXIoeWVhcjogbnVtYmVyKTogbnVtYmVyIHtcbiAgbGV0IG1vbnRoc0JlZm9yZVllYXIgPSBNYXRoLmZsb29yKCgyMzUgKiB5ZWFyIC0gMjM0KSAvIDE5KTtcbiAgbGV0IGZyYWN0aW9uYWxNb250aHNCZWZvcmVZZWFyID0gbW9udGhzQmVmb3JlWWVhciAqIFBBUlRTX0ZSQUNUSU9OQUxfTU9OVEggKyBCQUhBUkFEO1xuICBsZXQgZGF5TnVtYmVyID0gbW9udGhzQmVmb3JlWWVhciAqIDI5ICsgTWF0aC5mbG9vcihmcmFjdGlvbmFsTW9udGhzQmVmb3JlWWVhciAvIFBBUlRTX1BFUl9EQVkpO1xuICBsZXQgdGltZU9mRGF5ID0gZnJhY3Rpb25hbE1vbnRoc0JlZm9yZVllYXIgJSBQQVJUU19QRVJfREFZO1xuXG4gIGxldCBkYXlPZldlZWsgPSBkYXlOdW1iZXIgJSA3OyAgLy8gMCA9PSBNb25kYXlcblxuICBpZiAoZGF5T2ZXZWVrID09PSAyIHx8IGRheU9mV2VlayA9PT0gNCB8fCBkYXlPZldlZWsgPT09IDYpIHtcbiAgICBkYXlOdW1iZXIrKztcbiAgICBkYXlPZldlZWsgPSBkYXlOdW1iZXIgJSA3O1xuICB9XG4gIGlmIChkYXlPZldlZWsgPT09IDEgJiYgdGltZU9mRGF5ID4gMTUgKiBQQVJUU19QRVJfSE9VUiArIDIwNCAmJiAhaXNIZWJyZXdMZWFwWWVhcih5ZWFyKSkge1xuICAgIGRheU51bWJlciArPSAyO1xuICB9IGVsc2UgaWYgKGRheU9mV2VlayA9PT0gMCAmJiB0aW1lT2ZEYXkgPiAyMSAqIFBBUlRTX1BFUl9IT1VSICsgNTg5ICYmIGlzSGVicmV3TGVhcFllYXIoeWVhciAtIDEpKSB7XG4gICAgZGF5TnVtYmVyKys7XG4gIH1cbiAgcmV0dXJuIGRheU51bWJlcjtcbn1cblxuZnVuY3Rpb24gZ2V0RGF5c0luR3JlZ29yaWFuTW9udGgobW9udGg6IG51bWJlciwgeWVhcjogbnVtYmVyKTogbnVtYmVyIHtcbiAgbGV0IGRheXMgPSBbMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV07XG4gIGlmIChpc0dyZWdvcmlhbkxlYXBZZWFyKHllYXIpKSB7XG4gICAgZGF5c1sxXSsrO1xuICB9XG4gIHJldHVybiBkYXlzW21vbnRoIC0gMV07XG59XG5cbmZ1bmN0aW9uIGdldEhlYnJld01vbnRocyh5ZWFyOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gaXNIZWJyZXdMZWFwWWVhcih5ZWFyKSA/IDEzIDogMTI7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRheXMgaW4gYSBzcGVjaWZpYyBIZWJyZXcgeWVhci5cbiAqIGB5ZWFyYCBpcyBhbnkgSGVicmV3IHllYXIuXG4gKi9cbmZ1bmN0aW9uIGdldERheXNJbkhlYnJld1llYXIoeWVhcjogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIG51bWJlck9mRmlyc3REYXlJblllYXIoeWVhciArIDEpIC0gbnVtYmVyT2ZGaXJzdERheUluWWVhcih5ZWFyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSGVicmV3TGVhcFllYXIoeWVhcjogbnVtYmVyKTogYm9vbGVhbiB7XG4gIGxldCBiID0gKHllYXIgKiAxMiArIDE3KSAlIDE5O1xuICByZXR1cm4gYiA+PSAoKGIgPCAwKSA/IC03IDogMTIpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIG51bWJlciBvZiBkYXlzIGluIGEgc3BlY2lmaWMgSGVicmV3IG1vbnRoLlxuICogYG1vbnRoYCBpcyAxIGZvciBOaXNhbiwgMiBmb3IgSXlhciBldGMuIE5vdGU6IEhlYnJldyBsZWFwIHllYXIgY29udGFpbnMgMTMgbW9udGhzLlxuICogYHllYXJgIGlzIGFueSBIZWJyZXcgeWVhci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERheXNJbkhlYnJld01vbnRoKG1vbnRoOiBudW1iZXIsIHllYXI6IG51bWJlcik6IG51bWJlciB7XG4gIGxldCB5ZWFyTGVuZ3RoID0gbnVtYmVyT2ZGaXJzdERheUluWWVhcih5ZWFyICsgMSkgLSBudW1iZXJPZkZpcnN0RGF5SW5ZZWFyKHllYXIpO1xuICBsZXQgeWVhclR5cGUgPSAoeWVhckxlbmd0aCA8PSAzODAgPyB5ZWFyTGVuZ3RoIDogKHllYXJMZW5ndGggLSAzMCkpIC0gMzUzO1xuICBsZXQgbGVhcFllYXIgPSBpc0hlYnJld0xlYXBZZWFyKHllYXIpO1xuICBsZXQgZGF5c0luTW9udGggPSBsZWFwWWVhciA/IFszMCwgMjksIDI5LCAyOSwgMzAsIDMwLCAyOSwgMzAsIDI5LCAzMCwgMjksIDMwLCAyOV0gOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFszMCwgMjksIDI5LCAyOSwgMzAsIDI5LCAzMCwgMjksIDMwLCAyOSwgMzAsIDI5XTtcbiAgaWYgKHllYXJUeXBlID4gMCkge1xuICAgIGRheXNJbk1vbnRoWzJdKys7ICAvLyBLaXNsZXYgZ2V0cyBhbiBleHRyYSBkYXkgaW4gbm9ybWFsIG9yIGNvbXBsZXRlIHllYXJzLlxuICB9XG4gIGlmICh5ZWFyVHlwZSA+IDEpIHtcbiAgICBkYXlzSW5Nb250aFsxXSsrOyAgLy8gSGVzaHZhbiBnZXRzIGFuIGV4dHJhIGRheSBpbiBjb21wbGV0ZSB5ZWFycyBvbmx5LlxuICB9XG4gIHJldHVybiBkYXlzSW5Nb250aFttb250aCAtIDFdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF5TnVtYmVySW5IZWJyZXdZZWFyKGRhdGU6IE5nYkRhdGUpOiBudW1iZXIge1xuICBsZXQgbnVtYmVyT2ZEYXkgPSAwO1xuICBmb3IgKGxldCBpID0gMTsgaSA8IGRhdGUubW9udGg7IGkrKykge1xuICAgIG51bWJlck9mRGF5ICs9IGdldERheXNJbkhlYnJld01vbnRoKGksIGRhdGUueWVhcik7XG4gIH1cbiAgcmV0dXJuIG51bWJlck9mRGF5ICsgZGF0ZS5kYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRIZWJyZXdNb250aChkYXRlOiBOZ2JEYXRlLCB2YWw6IG51bWJlcik6IE5nYkRhdGUge1xuICBsZXQgYWZ0ZXIgPSB2YWwgPj0gMDtcbiAgaWYgKCFhZnRlcikge1xuICAgIHZhbCA9IC12YWw7XG4gIH1cbiAgd2hpbGUgKHZhbCA+IDApIHtcbiAgICBpZiAoYWZ0ZXIpIHtcbiAgICAgIGlmICh2YWwgPiBnZXRIZWJyZXdNb250aHMoZGF0ZS55ZWFyKSAtIGRhdGUubW9udGgpIHtcbiAgICAgICAgdmFsIC09IGdldEhlYnJld01vbnRocyhkYXRlLnllYXIpIC0gZGF0ZS5tb250aCArIDE7XG4gICAgICAgIGRhdGUueWVhcisrO1xuICAgICAgICBkYXRlLm1vbnRoID0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGUubW9udGggKz0gdmFsO1xuICAgICAgICB2YWwgPSAwO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodmFsID49IGRhdGUubW9udGgpIHtcbiAgICAgICAgZGF0ZS55ZWFyLS07XG4gICAgICAgIHZhbCAtPSBkYXRlLm1vbnRoO1xuICAgICAgICBkYXRlLm1vbnRoID0gZ2V0SGVicmV3TW9udGhzKGRhdGUueWVhcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkYXRlLm1vbnRoIC09IHZhbDtcbiAgICAgICAgdmFsID0gMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRIZWJyZXdEYXkoZGF0ZTogTmdiRGF0ZSwgdmFsOiBudW1iZXIpOiBOZ2JEYXRlIHtcbiAgbGV0IGFmdGVyID0gdmFsID49IDA7XG4gIGlmICghYWZ0ZXIpIHtcbiAgICB2YWwgPSAtdmFsO1xuICB9XG4gIHdoaWxlICh2YWwgPiAwKSB7XG4gICAgaWYgKGFmdGVyKSB7XG4gICAgICBpZiAodmFsID4gZ2V0RGF5c0luSGVicmV3WWVhcihkYXRlLnllYXIpIC0gZ2V0RGF5TnVtYmVySW5IZWJyZXdZZWFyKGRhdGUpKSB7XG4gICAgICAgIHZhbCAtPSBnZXREYXlzSW5IZWJyZXdZZWFyKGRhdGUueWVhcikgLSBnZXREYXlOdW1iZXJJbkhlYnJld1llYXIoZGF0ZSkgKyAxO1xuICAgICAgICBkYXRlLnllYXIrKztcbiAgICAgICAgZGF0ZS5tb250aCA9IDE7XG4gICAgICAgIGRhdGUuZGF5ID0gMTtcbiAgICAgIH0gZWxzZSBpZiAodmFsID4gZ2V0RGF5c0luSGVicmV3TW9udGgoZGF0ZS5tb250aCwgZGF0ZS55ZWFyKSAtIGRhdGUuZGF5KSB7XG4gICAgICAgIHZhbCAtPSBnZXREYXlzSW5IZWJyZXdNb250aChkYXRlLm1vbnRoLCBkYXRlLnllYXIpIC0gZGF0ZS5kYXkgKyAxO1xuICAgICAgICBkYXRlLm1vbnRoKys7XG4gICAgICAgIGRhdGUuZGF5ID0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGUuZGF5ICs9IHZhbDtcbiAgICAgICAgdmFsID0gMDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHZhbCA+PSBkYXRlLmRheSkge1xuICAgICAgICB2YWwgLT0gZGF0ZS5kYXk7XG4gICAgICAgIGRhdGUubW9udGgtLTtcbiAgICAgICAgaWYgKGRhdGUubW9udGggPT09IDApIHtcbiAgICAgICAgICBkYXRlLnllYXItLTtcbiAgICAgICAgICBkYXRlLm1vbnRoID0gZ2V0SGVicmV3TW9udGhzKGRhdGUueWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgZGF0ZS5kYXkgPSBnZXREYXlzSW5IZWJyZXdNb250aChkYXRlLm1vbnRoLCBkYXRlLnllYXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0ZS5kYXkgLT0gdmFsO1xuICAgICAgICB2YWwgPSAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZGF0ZTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBlcXVpdmFsZW50IEhlYnJldyBkYXRlIHZhbHVlIGZvciBhIGdpdmUgaW5wdXQgR3JlZ29yaWFuIGRhdGUuXG4gKiBgZ2RhdGVgIGlzIGEgSlMgRGF0ZSB0byBiZSBjb252ZXJ0ZWQgdG8gSGVicmV3IGRhdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9tR3JlZ29yaWFuKGdkYXRlOiBEYXRlKTogTmdiRGF0ZSB7XG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShnZGF0ZSk7XG4gIGNvbnN0IGdZZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpLCBnTW9udGggPSBkYXRlLmdldE1vbnRoKCksIGdEYXkgPSBkYXRlLmdldERhdGUoKTtcbiAgbGV0IGp1bGlhbkRheSA9IEdSRUdPUklBTl9FUE9DSCAtIDEgKyAzNjUgKiAoZ1llYXIgLSAxKSArIE1hdGguZmxvb3IoKGdZZWFyIC0gMSkgLyA0KSAtXG4gICAgICBNYXRoLmZsb29yKChnWWVhciAtIDEpIC8gMTAwKSArIE1hdGguZmxvb3IoKGdZZWFyIC0gMSkgLyA0MDApICtcbiAgICAgIE1hdGguZmxvb3IoKDM2NyAqIChnTW9udGggKyAxKSAtIDM2MikgLyAxMiArIChnTW9udGggKyAxIDw9IDIgPyAwIDogaXNHcmVnb3JpYW5MZWFwWWVhcihnWWVhcikgPyAtMSA6IC0yKSArIGdEYXkpO1xuICBqdWxpYW5EYXkgPSBNYXRoLmZsb29yKGp1bGlhbkRheSArIDAuNSk7XG4gIGxldCBkYXlzU2luY2VIZWJFcG9jaCA9IGp1bGlhbkRheSAtIDM0Nzk5NztcbiAgbGV0IG1vbnRoc1NpbmNlSGViRXBvY2ggPSBNYXRoLmZsb29yKGRheXNTaW5jZUhlYkVwb2NoICogUEFSVFNfUEVSX0RBWSAvIFBBUlRTX1BFUl9NT05USCk7XG4gIGxldCBoWWVhciA9IE1hdGguZmxvb3IoKG1vbnRoc1NpbmNlSGViRXBvY2ggKiAxOSArIDIzNCkgLyAyMzUpICsgMTtcbiAgbGV0IGZpcnN0RGF5T2ZUaGlzWWVhciA9IG51bWJlck9mRmlyc3REYXlJblllYXIoaFllYXIpO1xuICBsZXQgZGF5T2ZZZWFyID0gZGF5c1NpbmNlSGViRXBvY2ggLSBmaXJzdERheU9mVGhpc1llYXI7XG4gIHdoaWxlIChkYXlPZlllYXIgPCAxKSB7XG4gICAgaFllYXItLTtcbiAgICBmaXJzdERheU9mVGhpc1llYXIgPSBudW1iZXJPZkZpcnN0RGF5SW5ZZWFyKGhZZWFyKTtcbiAgICBkYXlPZlllYXIgPSBkYXlzU2luY2VIZWJFcG9jaCAtIGZpcnN0RGF5T2ZUaGlzWWVhcjtcbiAgfVxuICBsZXQgaE1vbnRoID0gMTtcbiAgbGV0IGhEYXkgPSBkYXlPZlllYXI7XG4gIHdoaWxlIChoRGF5ID4gZ2V0RGF5c0luSGVicmV3TW9udGgoaE1vbnRoLCBoWWVhcikpIHtcbiAgICBoRGF5IC09IGdldERheXNJbkhlYnJld01vbnRoKGhNb250aCwgaFllYXIpO1xuICAgIGhNb250aCsrO1xuICB9XG4gIHJldHVybiBuZXcgTmdiRGF0ZShoWWVhciwgaE1vbnRoLCBoRGF5KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBlcXVpdmFsZW50IEpTIGRhdGUgdmFsdWUgZm9yIGEgZ2l2ZW4gSGVicmV3IGRhdGUuXG4gKiBgaGVicmV3RGF0ZWAgaXMgYW4gSGVicmV3IGRhdGUgdG8gYmUgY29udmVydGVkIHRvIEdyZWdvcmlhbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvR3JlZ29yaWFuKGhlYnJld0RhdGU6IE5nYkRhdGVTdHJ1Y3QgfCBOZ2JEYXRlKTogRGF0ZSB7XG4gIGNvbnN0IGhZZWFyID0gaGVicmV3RGF0ZS55ZWFyO1xuICBjb25zdCBoTW9udGggPSBoZWJyZXdEYXRlLm1vbnRoO1xuICBjb25zdCBoRGF5ID0gaGVicmV3RGF0ZS5kYXk7XG4gIGxldCBkYXlzID0gbnVtYmVyT2ZGaXJzdERheUluWWVhcihoWWVhcik7XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgaE1vbnRoOyBpKyspIHtcbiAgICBkYXlzICs9IGdldERheXNJbkhlYnJld01vbnRoKGksIGhZZWFyKTtcbiAgfVxuICBkYXlzICs9IGhEYXk7XG4gIGxldCBkaWZmRGF5cyA9IGRheXMgLSBIRUJSRVdfREFZX09OX0pBTl8xXzE5NzA7XG4gIGxldCBhZnRlciA9IGRpZmZEYXlzID49IDA7XG4gIGlmICghYWZ0ZXIpIHtcbiAgICBkaWZmRGF5cyA9IC1kaWZmRGF5cztcbiAgfVxuICBsZXQgZ1llYXIgPSAxOTcwO1xuICBsZXQgZ01vbnRoID0gMTtcbiAgbGV0IGdEYXkgPSAxO1xuICB3aGlsZSAoZGlmZkRheXMgPiAwKSB7XG4gICAgaWYgKGFmdGVyKSB7XG4gICAgICBpZiAoZGlmZkRheXMgPj0gKGlzR3JlZ29yaWFuTGVhcFllYXIoZ1llYXIpID8gMzY2IDogMzY1KSkge1xuICAgICAgICBkaWZmRGF5cyAtPSBpc0dyZWdvcmlhbkxlYXBZZWFyKGdZZWFyKSA/IDM2NiA6IDM2NTtcbiAgICAgICAgZ1llYXIrKztcbiAgICAgIH0gZWxzZSBpZiAoZGlmZkRheXMgPj0gZ2V0RGF5c0luR3JlZ29yaWFuTW9udGgoZ01vbnRoLCBnWWVhcikpIHtcbiAgICAgICAgZGlmZkRheXMgLT0gZ2V0RGF5c0luR3JlZ29yaWFuTW9udGgoZ01vbnRoLCBnWWVhcik7XG4gICAgICAgIGdNb250aCsrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ0RheSArPSBkaWZmRGF5cztcbiAgICAgICAgZGlmZkRheXMgPSAwO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZGlmZkRheXMgPj0gKGlzR3JlZ29yaWFuTGVhcFllYXIoZ1llYXIgLSAxKSA/IDM2NiA6IDM2NSkpIHtcbiAgICAgICAgZGlmZkRheXMgLT0gaXNHcmVnb3JpYW5MZWFwWWVhcihnWWVhciAtIDEpID8gMzY2IDogMzY1O1xuICAgICAgICBnWWVhci0tO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGdNb250aCA+IDEpIHtcbiAgICAgICAgICBnTW9udGgtLTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBnTW9udGggPSAxMjtcbiAgICAgICAgICBnWWVhci0tO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkaWZmRGF5cyA+PSBnZXREYXlzSW5HcmVnb3JpYW5Nb250aChnTW9udGgsIGdZZWFyKSkge1xuICAgICAgICAgIGRpZmZEYXlzIC09IGdldERheXNJbkdyZWdvcmlhbk1vbnRoKGdNb250aCwgZ1llYXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGdEYXkgPSBnZXREYXlzSW5HcmVnb3JpYW5Nb250aChnTW9udGgsIGdZZWFyKSAtIGRpZmZEYXlzICsgMTtcbiAgICAgICAgICBkaWZmRGF5cyA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ldyBEYXRlKGdZZWFyLCBnTW9udGggLSAxLCBnRGF5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhlYnJld051bWVyYWxzKG51bWVyYWxzOiBudW1iZXIpOiBzdHJpbmcge1xuICBpZiAoIW51bWVyYWxzKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGNvbnN0IGhBcnJheTBfOSA9IFsnJywgJ1xcdTA1ZDAnLCAnXFx1MDVkMScsICdcXHUwNWQyJywgJ1xcdTA1ZDMnLCAnXFx1MDVkNCcsICdcXHUwNWQ1JywgJ1xcdTA1ZDYnLCAnXFx1MDVkNycsICdcXHUwNWQ4J107XG4gIGNvbnN0IGhBcnJheTEwXzE5ID0gW1xuICAgICdcXHUwNWQ5JywgJ1xcdTA1ZDlcXHUwNWQwJywgJ1xcdTA1ZDlcXHUwNWQxJywgJ1xcdTA1ZDlcXHUwNWQyJywgJ1xcdTA1ZDlcXHUwNWQzJywgJ1xcdTA1ZDhcXHUwNWQ1JywgJ1xcdTA1ZDhcXHUwNWQ2JyxcbiAgICAnXFx1MDVkOVxcdTA1ZDYnLCAnXFx1MDVkOVxcdTA1ZDcnLCAnXFx1MDVkOVxcdTA1ZDgnXG4gIF07XG4gIGNvbnN0IGhBcnJheTIwXzkwID0gWycnLCAnJywgJ1xcdTA1ZGInLCAnXFx1MDVkYycsICdcXHUwNWRlJywgJ1xcdTA1ZTAnLCAnXFx1MDVlMScsICdcXHUwNWUyJywgJ1xcdTA1ZTQnLCAnXFx1MDVlNiddO1xuICBjb25zdCBoQXJyYXkxMDBfOTAwID0gW1xuICAgICcnLCAnXFx1MDVlNycsICdcXHUwNWU4JywgJ1xcdTA1ZTknLCAnXFx1MDVlYScsICdcXHUwNWVhXFx1MDVlNycsICdcXHUwNWVhXFx1MDVlOCcsICdcXHUwNWVhXFx1MDVlOScsICdcXHUwNWVhXFx1MDVlYScsXG4gICAgJ1xcdTA1ZWFcXHUwNWVhXFx1MDVlNydcbiAgXTtcbiAgY29uc3QgaEFycmF5MTAwMF85MDAwID0gW1xuICAgICcnLCAnXFx1MDVkMCcsICdcXHUwNWQxJywgJ1xcdTA1ZDFcXHUwNWQwJywgJ1xcdTA1ZDFcXHUwNWQxJywgJ1xcdTA1ZDQnLCAnXFx1MDVkNFxcdTA1ZDAnLCAnXFx1MDVkNFxcdTA1ZDEnLFxuICAgICdcXHUwNWQ0XFx1MDVkMVxcdTA1ZDAnLCAnXFx1MDVkNFxcdTA1ZDFcXHUwNWQxJ1xuICBdO1xuICBjb25zdCBnZXJlc2ggPSAnXFx1MDVmMycsIGdlcnNoYWltID0gJ1xcdTA1ZjQnO1xuICBsZXQgbWVtID0gMDtcbiAgbGV0IHJlc3VsdCA9IFtdO1xuICBsZXQgc3RlcCA9IDA7XG4gIHdoaWxlIChudW1lcmFscyA+IDApIHtcbiAgICBsZXQgbSA9IG51bWVyYWxzICUgMTA7XG4gICAgaWYgKHN0ZXAgPT09IDApIHtcbiAgICAgIG1lbSA9IG07XG4gICAgfSBlbHNlIGlmIChzdGVwID09PSAxKSB7XG4gICAgICBpZiAobSAhPT0gMSkge1xuICAgICAgICByZXN1bHQudW5zaGlmdChoQXJyYXkyMF85MFttXSwgaEFycmF5MF85W21lbV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0LnVuc2hpZnQoaEFycmF5MTBfMTlbbWVtXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzdGVwID09PSAyKSB7XG4gICAgICByZXN1bHQudW5zaGlmdChoQXJyYXkxMDBfOTAwW21dKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG0gIT09IDUpIHtcbiAgICAgICAgcmVzdWx0LnVuc2hpZnQoaEFycmF5MTAwMF85MDAwW21dLCBnZXJlc2gsICcgJyk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgbnVtZXJhbHMgPSBNYXRoLmZsb29yKG51bWVyYWxzIC8gMTApO1xuICAgIGlmIChzdGVwID09PSAwICYmIG51bWVyYWxzID09PSAwKSB7XG4gICAgICByZXN1bHQudW5zaGlmdChoQXJyYXkwXzlbbV0pO1xuICAgIH1cbiAgICBzdGVwKys7XG4gIH1cbiAgcmVzdWx0ID0gcmVzdWx0LmpvaW4oJycpLnNwbGl0KCcnKTtcbiAgaWYgKHJlc3VsdC5sZW5ndGggPT09IDEpIHtcbiAgICByZXN1bHQucHVzaChnZXJlc2gpO1xuICB9IGVsc2UgaWYgKHJlc3VsdC5sZW5ndGggPiAxKSB7XG4gICAgcmVzdWx0LnNwbGljZShyZXN1bHQubGVuZ3RoIC0gMSwgMCwgZ2Vyc2hhaW0pO1xuICB9XG4gIHJldHVybiByZXN1bHQuam9pbignJyk7XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/datepicker/hebrew/ngb-calendar-hebrew.js b/dist/sunbird-ui-components/esm5/datepicker/hebrew/ngb-calendar-hebrew.js new file mode 100644 index 0000000..157ca50 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/datepicker/hebrew/ngb-calendar-hebrew.js @@ -0,0 +1,183 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import * as tslib_1 from "tslib"; +import { NgbDate } from '../ngb-date'; +import { fromJSDate, NgbCalendar, toJSDate } from '../ngb-calendar'; +import { Injectable } from '@angular/core'; +import { isNumber } from '../../util/util'; +import { fromGregorian, getDayNumberInHebrewYear, getDaysInHebrewMonth, isHebrewLeapYear, toGregorian, setHebrewDay, setHebrewMonth } from './hebrew'; +/** + * \@since 3.2.0 + */ +var NgbCalendarHebrew = /** @class */ (function (_super) { + tslib_1.__extends(NgbCalendarHebrew, _super); + function NgbCalendarHebrew() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * @return {?} + */ + NgbCalendarHebrew.prototype.getDaysPerWeek = /** + * @return {?} + */ + function () { return 7; }; + /** + * @param {?=} year + * @return {?} + */ + NgbCalendarHebrew.prototype.getMonths = /** + * @param {?=} year + * @return {?} + */ + function (year) { + if (year && isHebrewLeapYear(year)) { + return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]; + } + else { + return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; + } + }; + /** + * @return {?} + */ + NgbCalendarHebrew.prototype.getWeeksPerMonth = /** + * @return {?} + */ + function () { return 6; }; + /** + * @param {?} date + * @return {?} + */ + NgbCalendarHebrew.prototype.isValid = /** + * @param {?} date + * @return {?} + */ + function (date) { + /** @type {?} */ + var b = date && isNumber(date.year) && isNumber(date.month) && isNumber(date.day); + b = b && date.month > 0 && date.month <= (isHebrewLeapYear(date.year) ? 13 : 12); + b = b && date.day > 0 && date.day <= getDaysInHebrewMonth(date.month, date.year); + return b && !isNaN(toGregorian(date).getTime()); + }; + /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + NgbCalendarHebrew.prototype.getNext = /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + function (date, period, number) { + if (period === void 0) { period = 'd'; } + if (number === void 0) { number = 1; } + date = new NgbDate(date.year, date.month, date.day); + switch (period) { + case 'y': + date.year += number; + date.month = 1; + date.day = 1; + return date; + case 'm': + date = setHebrewMonth(date, number); + date.day = 1; + return date; + case 'd': + return setHebrewDay(date, number); + default: + return date; + } + }; + /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + NgbCalendarHebrew.prototype.getPrev = /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + function (date, period, number) { + if (period === void 0) { period = 'd'; } + if (number === void 0) { number = 1; } + return this.getNext(date, period, -number); + }; + /** + * @param {?} date + * @return {?} + */ + NgbCalendarHebrew.prototype.getWeekday = /** + * @param {?} date + * @return {?} + */ + function (date) { + /** @type {?} */ + var day = toGregorian(date).getDay(); + // in JS Date Sun=0, in ISO 8601 Sun=7 + return day === 0 ? 7 : day; + }; + /** + * @param {?} week + * @param {?} firstDayOfWeek + * @return {?} + */ + NgbCalendarHebrew.prototype.getWeekNumber = /** + * @param {?} week + * @param {?} firstDayOfWeek + * @return {?} + */ + function (week, firstDayOfWeek) { + /** @type {?} */ + var date = week[week.length - 1]; + return Math.ceil(getDayNumberInHebrewYear(date) / 7); + }; + /** + * @return {?} + */ + NgbCalendarHebrew.prototype.getToday = /** + * @return {?} + */ + function () { return fromGregorian(new Date()); }; + /** + * @since 3.4.0 + */ + /** + * \@since 3.4.0 + * @param {?} date + * @return {?} + */ + NgbCalendarHebrew.prototype.toGregorian = /** + * \@since 3.4.0 + * @param {?} date + * @return {?} + */ + function (date) { return fromJSDate(toGregorian(date)); }; + /** + * @since 3.4.0 + */ + /** + * \@since 3.4.0 + * @param {?} date + * @return {?} + */ + NgbCalendarHebrew.prototype.fromGregorian = /** + * \@since 3.4.0 + * @param {?} date + * @return {?} + */ + function (date) { return fromGregorian(toJSDate(date)); }; + NgbCalendarHebrew.decorators = [ + { type: Injectable } + ]; + return NgbCalendarHebrew; +}(NgbCalendar)); +export { NgbCalendarHebrew }; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdiLWNhbGVuZGFyLWhlYnJldy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImRhdGVwaWNrZXIvaGVicmV3L25nYi1jYWxlbmRhci1oZWJyZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ3BDLE9BQU8sRUFBQyxVQUFVLEVBQUUsV0FBVyxFQUFhLFFBQVEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdFLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFDTCxhQUFhLEVBQ2Isd0JBQXdCLEVBQ3hCLG9CQUFvQixFQUNwQixnQkFBZ0IsRUFDaEIsV0FBVyxFQUNYLFlBQVksRUFDWixjQUFjLEVBQ2YsTUFBTSxVQUFVLENBQUM7Ozs7QUFLbEI7SUFDdUMsNkNBQVc7SUFEbEQ7O0lBaUVBLENBQUM7Ozs7SUEvREMsMENBQWM7OztJQUFkLGNBQW1CLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQzs7Ozs7SUFFOUIscUNBQVM7Ozs7SUFBVCxVQUFVLElBQWE7UUFDckIsSUFBSSxJQUFJLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbEMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQ3BEO2FBQU07WUFDTCxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUNoRDtJQUNILENBQUM7Ozs7SUFFRCw0Q0FBZ0I7OztJQUFoQixjQUFxQixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Ozs7O0lBRWhDLG1DQUFPOzs7O0lBQVAsVUFBUSxJQUFhOztZQUNmLENBQUMsR0FBRyxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ2pGLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqRixDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksb0JBQW9CLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakYsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDbEQsQ0FBQzs7Ozs7OztJQUVELG1DQUFPOzs7Ozs7SUFBUCxVQUFRLElBQWEsRUFBRSxNQUF1QixFQUFFLE1BQVU7UUFBbkMsdUJBQUEsRUFBQSxZQUF1QjtRQUFFLHVCQUFBLEVBQUEsVUFBVTtRQUN4RCxJQUFJLEdBQUcsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVwRCxRQUFRLE1BQU0sRUFBRTtZQUNkLEtBQUssR0FBRztnQkFDTixJQUFJLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQztnQkFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7Z0JBQ2IsT0FBTyxJQUFJLENBQUM7WUFDZCxLQUFLLEdBQUc7Z0JBQ04sSUFBSSxHQUFHLGNBQWMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO2dCQUNiLE9BQU8sSUFBSSxDQUFDO1lBQ2QsS0FBSyxHQUFHO2dCQUNOLE9BQU8sWUFBWSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNwQztnQkFDRSxPQUFPLElBQUksQ0FBQztTQUNmO0lBQ0gsQ0FBQzs7Ozs7OztJQUVELG1DQUFPOzs7Ozs7SUFBUCxVQUFRLElBQWEsRUFBRSxNQUF1QixFQUFFLE1BQVU7UUFBbkMsdUJBQUEsRUFBQSxZQUF1QjtRQUFFLHVCQUFBLEVBQUEsVUFBVTtRQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7SUFBQyxDQUFDOzs7OztJQUUzRyxzQ0FBVTs7OztJQUFWLFVBQVcsSUFBYTs7WUFDaEIsR0FBRyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUU7UUFDdEMsc0NBQXNDO1FBQ3RDLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDN0IsQ0FBQzs7Ozs7O0lBRUQseUNBQWE7Ozs7O0lBQWIsVUFBYyxJQUFlLEVBQUUsY0FBc0I7O1lBQzdDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDbEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7Ozs7SUFFRCxvQ0FBUTs7O0lBQVIsY0FBc0IsT0FBTyxhQUFhLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV6RDs7T0FFRzs7Ozs7O0lBQ0gsdUNBQVc7Ozs7O0lBQVgsVUFBWSxJQUFhLElBQWEsT0FBTyxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTdFOztPQUVHOzs7Ozs7SUFDSCx5Q0FBYTs7Ozs7SUFBYixVQUFjLElBQWEsSUFBYSxPQUFPLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O2dCQWhFaEYsVUFBVTs7SUFpRVgsd0JBQUM7Q0FBQSxBQWpFRCxDQUN1QyxXQUFXLEdBZ0VqRDtTQWhFWSxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge05nYkRhdGV9IGZyb20gJy4uL25nYi1kYXRlJztcbmltcG9ydCB7ZnJvbUpTRGF0ZSwgTmdiQ2FsZW5kYXIsIE5nYlBlcmlvZCwgdG9KU0RhdGV9IGZyb20gJy4uL25nYi1jYWxlbmRhcic7XG5pbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtpc051bWJlcn0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCB7XG4gIGZyb21HcmVnb3JpYW4sXG4gIGdldERheU51bWJlckluSGVicmV3WWVhcixcbiAgZ2V0RGF5c0luSGVicmV3TW9udGgsXG4gIGlzSGVicmV3TGVhcFllYXIsXG4gIHRvR3JlZ29yaWFuLFxuICBzZXRIZWJyZXdEYXksXG4gIHNldEhlYnJld01vbnRoXG59IGZyb20gJy4vaGVicmV3JztcblxuLyoqXG4gKiBAc2luY2UgMy4yLjBcbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE5nYkNhbGVuZGFySGVicmV3IGV4dGVuZHMgTmdiQ2FsZW5kYXIge1xuICBnZXREYXlzUGVyV2VlaygpIHsgcmV0dXJuIDc7IH1cblxuICBnZXRNb250aHMoeWVhcj86IG51bWJlcikge1xuICAgIGlmICh5ZWFyICYmIGlzSGVicmV3TGVhcFllYXIoeWVhcikpIHtcbiAgICAgIHJldHVybiBbMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTNdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gWzEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTJdO1xuICAgIH1cbiAgfVxuXG4gIGdldFdlZWtzUGVyTW9udGgoKSB7IHJldHVybiA2OyB9XG5cbiAgaXNWYWxpZChkYXRlOiBOZ2JEYXRlKTogYm9vbGVhbiB7XG4gICAgbGV0IGIgPSBkYXRlICYmIGlzTnVtYmVyKGRhdGUueWVhcikgJiYgaXNOdW1iZXIoZGF0ZS5tb250aCkgJiYgaXNOdW1iZXIoZGF0ZS5kYXkpO1xuICAgIGIgPSBiICYmIGRhdGUubW9udGggPiAwICYmIGRhdGUubW9udGggPD0gKGlzSGVicmV3TGVhcFllYXIoZGF0ZS55ZWFyKSA/IDEzIDogMTIpO1xuICAgIGIgPSBiICYmIGRhdGUuZGF5ID4gMCAmJiBkYXRlLmRheSA8PSBnZXREYXlzSW5IZWJyZXdNb250aChkYXRlLm1vbnRoLCBkYXRlLnllYXIpO1xuICAgIHJldHVybiBiICYmICFpc05hTih0b0dyZWdvcmlhbihkYXRlKS5nZXRUaW1lKCkpO1xuICB9XG5cbiAgZ2V0TmV4dChkYXRlOiBOZ2JEYXRlLCBwZXJpb2Q6IE5nYlBlcmlvZCA9ICdkJywgbnVtYmVyID0gMSkge1xuICAgIGRhdGUgPSBuZXcgTmdiRGF0ZShkYXRlLnllYXIsIGRhdGUubW9udGgsIGRhdGUuZGF5KTtcblxuICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICBjYXNlICd5JzpcbiAgICAgICAgZGF0ZS55ZWFyICs9IG51bWJlcjtcbiAgICAgICAgZGF0ZS5tb250aCA9IDE7XG4gICAgICAgIGRhdGUuZGF5ID0gMTtcbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgICBjYXNlICdtJzpcbiAgICAgICAgZGF0ZSA9IHNldEhlYnJld01vbnRoKGRhdGUsIG51bWJlcik7XG4gICAgICAgIGRhdGUuZGF5ID0gMTtcbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgICBjYXNlICdkJzpcbiAgICAgICAgcmV0dXJuIHNldEhlYnJld0RheShkYXRlLCBudW1iZXIpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuICB9XG5cbiAgZ2V0UHJldihkYXRlOiBOZ2JEYXRlLCBwZXJpb2Q6IE5nYlBlcmlvZCA9ICdkJywgbnVtYmVyID0gMSkgeyByZXR1cm4gdGhpcy5nZXROZXh0KGRhdGUsIHBlcmlvZCwgLW51bWJlcik7IH1cblxuICBnZXRXZWVrZGF5KGRhdGU6IE5nYkRhdGUpIHtcbiAgICBjb25zdCBkYXkgPSB0b0dyZWdvcmlhbihkYXRlKS5nZXREYXkoKTtcbiAgICAvLyBpbiBKUyBEYXRlIFN1bj0wLCBpbiBJU08gODYwMSBTdW49N1xuICAgIHJldHVybiBkYXkgPT09IDAgPyA3IDogZGF5O1xuICB9XG5cbiAgZ2V0V2Vla051bWJlcih3ZWVrOiBOZ2JEYXRlW10sIGZpcnN0RGF5T2ZXZWVrOiBudW1iZXIpIHtcbiAgICBjb25zdCBkYXRlID0gd2Vla1t3ZWVrLmxlbmd0aCAtIDFdO1xuICAgIHJldHVybiBNYXRoLmNlaWwoZ2V0RGF5TnVtYmVySW5IZWJyZXdZZWFyKGRhdGUpIC8gNyk7XG4gIH1cblxuICBnZXRUb2RheSgpOiBOZ2JEYXRlIHsgcmV0dXJuIGZyb21HcmVnb3JpYW4obmV3IERhdGUoKSk7IH1cblxuICAvKipcbiAgICogQHNpbmNlIDMuNC4wXG4gICAqL1xuICB0b0dyZWdvcmlhbihkYXRlOiBOZ2JEYXRlKTogTmdiRGF0ZSB7IHJldHVybiBmcm9tSlNEYXRlKHRvR3JlZ29yaWFuKGRhdGUpKTsgfVxuXG4gIC8qKlxuICAgKiBAc2luY2UgMy40LjBcbiAgICovXG4gIGZyb21HcmVnb3JpYW4oZGF0ZTogTmdiRGF0ZSk6IE5nYkRhdGUgeyByZXR1cm4gZnJvbUdyZWdvcmlhbih0b0pTRGF0ZShkYXRlKSk7IH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/datepicker/hijri/ngb-calendar-hijri.js b/dist/sunbird-ui-components/esm5/datepicker/hijri/ngb-calendar-hijri.js new file mode 100644 index 0000000..255bfa7 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/datepicker/hijri/ngb-calendar-hijri.js @@ -0,0 +1,250 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import * as tslib_1 from "tslib"; +import { NgbDate } from '../ngb-date'; +import { NgbCalendar } from '../ngb-calendar'; +import { Injectable } from '@angular/core'; +import { isNumber } from '../../util/util'; +/** + * @abstract + */ +var NgbCalendarHijri = /** @class */ (function (_super) { + tslib_1.__extends(NgbCalendarHijri, _super); + function NgbCalendarHijri() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * @return {?} + */ + NgbCalendarHijri.prototype.getDaysPerWeek = /** + * @return {?} + */ + function () { return 7; }; + /** + * @return {?} + */ + NgbCalendarHijri.prototype.getMonths = /** + * @return {?} + */ + function () { return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; }; + /** + * @return {?} + */ + NgbCalendarHijri.prototype.getWeeksPerMonth = /** + * @return {?} + */ + function () { return 6; }; + /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + NgbCalendarHijri.prototype.getNext = /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + function (date, period, number) { + if (period === void 0) { period = 'd'; } + if (number === void 0) { number = 1; } + date = new NgbDate(date.year, date.month, date.day); + switch (period) { + case 'y': + date = this._setYear(date, date.year + number); + date.month = 1; + date.day = 1; + return date; + case 'm': + date = this._setMonth(date, date.month + number); + date.day = 1; + return date; + case 'd': + return this._setDay(date, date.day + number); + default: + return date; + } + }; + /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + NgbCalendarHijri.prototype.getPrev = /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + function (date, period, number) { + if (period === void 0) { period = 'd'; } + if (number === void 0) { number = 1; } + return this.getNext(date, period, -number); + }; + /** + * @param {?} date + * @return {?} + */ + NgbCalendarHijri.prototype.getWeekday = /** + * @param {?} date + * @return {?} + */ + function (date) { + /** @type {?} */ + var day = this.toGregorian(date).getDay(); + // in JS Date Sun=0, in ISO 8601 Sun=7 + return day === 0 ? 7 : day; + }; + /** + * @param {?} week + * @param {?} firstDayOfWeek + * @return {?} + */ + NgbCalendarHijri.prototype.getWeekNumber = /** + * @param {?} week + * @param {?} firstDayOfWeek + * @return {?} + */ + function (week, firstDayOfWeek) { + // in JS Date Sun=0, in ISO 8601 Sun=7 + if (firstDayOfWeek === 7) { + firstDayOfWeek = 0; + } + /** @type {?} */ + var thursdayIndex = (4 + 7 - firstDayOfWeek) % 7; + /** @type {?} */ + var date = week[thursdayIndex]; + /** @type {?} */ + var jsDate = this.toGregorian(date); + jsDate.setDate(jsDate.getDate() + 4 - (jsDate.getDay() || 7)); // Thursday + // Thursday + /** @type {?} */ + var time = jsDate.getTime(); + /** @type {?} */ + var MuhDate = this.toGregorian(new NgbDate(date.year, 1, 1)); + return Math.floor(Math.round((time - MuhDate.getTime()) / 86400000) / 7) + 1; + }; + /** + * @return {?} + */ + NgbCalendarHijri.prototype.getToday = /** + * @return {?} + */ + function () { return this.fromGregorian(new Date()); }; + /** + * @param {?} date + * @return {?} + */ + NgbCalendarHijri.prototype.isValid = /** + * @param {?} date + * @return {?} + */ + function (date) { + return date && isNumber(date.year) && isNumber(date.month) && isNumber(date.day) && + !isNaN(this.toGregorian(date).getTime()); + }; + /** + * @private + * @param {?} date + * @param {?} day + * @return {?} + */ + NgbCalendarHijri.prototype._setDay = /** + * @private + * @param {?} date + * @param {?} day + * @return {?} + */ + function (date, day) { + day = +day; + /** @type {?} */ + var mDays = this.getDaysPerMonth(date.month, date.year); + if (day <= 0) { + while (day <= 0) { + date = this._setMonth(date, date.month - 1); + mDays = this.getDaysPerMonth(date.month, date.year); + day += mDays; + } + } + else if (day > mDays) { + while (day > mDays) { + day -= mDays; + date = this._setMonth(date, date.month + 1); + mDays = this.getDaysPerMonth(date.month, date.year); + } + } + date.day = day; + return date; + }; + /** + * @private + * @param {?} date + * @param {?} month + * @return {?} + */ + NgbCalendarHijri.prototype._setMonth = /** + * @private + * @param {?} date + * @param {?} month + * @return {?} + */ + function (date, month) { + month = +month; + date.year = date.year + Math.floor((month - 1) / 12); + date.month = Math.floor(((month - 1) % 12 + 12) % 12) + 1; + return date; + }; + /** + * @private + * @param {?} date + * @param {?} year + * @return {?} + */ + NgbCalendarHijri.prototype._setYear = /** + * @private + * @param {?} date + * @param {?} year + * @return {?} + */ + function (date, year) { + date.year = +year; + return date; + }; + NgbCalendarHijri.decorators = [ + { type: Injectable } + ]; + return NgbCalendarHijri; +}(NgbCalendar)); +export { NgbCalendarHijri }; +if (false) { + /** + * Returns the number of days in a specific Hijri month. + * `month` is 1 for Muharram, 2 for Safar, etc. + * `year` is any Hijri year. + * @abstract + * @param {?} month + * @param {?} year + * @return {?} + */ + NgbCalendarHijri.prototype.getDaysPerMonth = function (month, year) { }; + /** + * Returns the equivalent Hijri date value for a give input Gregorian date. + * `gDate` is s JS Date to be converted to Hijri. + * @abstract + * @param {?} gDate + * @return {?} + */ + NgbCalendarHijri.prototype.fromGregorian = function (gDate) { }; + /** + * Converts the current Hijri date to Gregorian. + * @abstract + * @param {?} hDate + * @return {?} + */ + NgbCalendarHijri.prototype.toGregorian = function (hDate) { }; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdiLWNhbGVuZGFyLWhpanJpLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiZGF0ZXBpY2tlci9oaWpyaS9uZ2ItY2FsZW5kYXItaGlqcmkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ3BDLE9BQU8sRUFBWSxXQUFXLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQzs7OztBQUV6QztJQUMrQyw0Q0FBVztJQUQxRDs7SUE2R0EsQ0FBQzs7OztJQXpGQyx5Q0FBYzs7O0lBQWQsY0FBbUIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7O0lBRTlCLG9DQUFTOzs7SUFBVCxjQUFjLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7OztJQUUvRCwyQ0FBZ0I7OztJQUFoQixjQUFxQixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Ozs7Ozs7SUFFaEMsa0NBQU87Ozs7OztJQUFQLFVBQVEsSUFBYSxFQUFFLE1BQXVCLEVBQUUsTUFBVTtRQUFuQyx1QkFBQSxFQUFBLFlBQXVCO1FBQUUsdUJBQUEsRUFBQSxVQUFVO1FBQ3hELElBQUksR0FBRyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXBELFFBQVEsTUFBTSxFQUFFO1lBQ2QsS0FBSyxHQUFHO2dCQUNOLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDO2dCQUMvQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztnQkFDZixJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztnQkFDYixPQUFPLElBQUksQ0FBQztZQUNkLEtBQUssR0FBRztnQkFDTixJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQztnQkFDakQsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7Z0JBQ2IsT0FBTyxJQUFJLENBQUM7WUFDZCxLQUFLLEdBQUc7Z0JBQ04sT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDO1lBQy9DO2dCQUNFLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7SUFDSCxDQUFDOzs7Ozs7O0lBRUQsa0NBQU87Ozs7OztJQUFQLFVBQVEsSUFBYSxFQUFFLE1BQXVCLEVBQUUsTUFBVTtRQUFuQyx1QkFBQSxFQUFBLFlBQXVCO1FBQUUsdUJBQUEsRUFBQSxVQUFVO1FBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUFDLENBQUM7Ozs7O0lBRTNHLHFDQUFVOzs7O0lBQVYsVUFBVyxJQUFhOztZQUNoQixHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUU7UUFDM0Msc0NBQXNDO1FBQ3RDLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDN0IsQ0FBQzs7Ozs7O0lBRUQsd0NBQWE7Ozs7O0lBQWIsVUFBYyxJQUFlLEVBQUUsY0FBc0I7UUFDbkQsc0NBQXNDO1FBQ3RDLElBQUksY0FBYyxLQUFLLENBQUMsRUFBRTtZQUN4QixjQUFjLEdBQUcsQ0FBQyxDQUFDO1NBQ3BCOztZQUVLLGFBQWEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQzs7WUFDNUMsSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7O1lBRTFCLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztRQUNyQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFFLFdBQVc7OztZQUNyRSxJQUFJLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRTs7WUFDdkIsT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDOUQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9FLENBQUM7Ozs7SUFFRCxtQ0FBUTs7O0lBQVIsY0FBc0IsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Ozs7O0lBRzlELGtDQUFPOzs7O0lBQVAsVUFBUSxJQUFhO1FBQ25CLE9BQU8sSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUM1RSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDL0MsQ0FBQzs7Ozs7OztJQUVPLGtDQUFPOzs7Ozs7SUFBZixVQUFnQixJQUFhLEVBQUUsR0FBVztRQUN4QyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUM7O1lBQ1AsS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3ZELElBQUksR0FBRyxJQUFJLENBQUMsRUFBRTtZQUNaLE9BQU8sR0FBRyxJQUFJLENBQUMsRUFBRTtnQkFDZixJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDNUMsS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3BELEdBQUcsSUFBSSxLQUFLLENBQUM7YUFDZDtTQUNGO2FBQU0sSUFBSSxHQUFHLEdBQUcsS0FBSyxFQUFFO1lBQ3RCLE9BQU8sR0FBRyxHQUFHLEtBQUssRUFBRTtnQkFDbEIsR0FBRyxJQUFJLEtBQUssQ0FBQztnQkFDYixJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDNUMsS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDckQ7U0FDRjtRQUNELElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOzs7Ozs7O0lBRU8sb0NBQVM7Ozs7OztJQUFqQixVQUFrQixJQUFhLEVBQUUsS0FBYTtRQUM1QyxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDZixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzs7Ozs7OztJQUVPLG1DQUFROzs7Ozs7SUFBaEIsVUFBaUIsSUFBYSxFQUFFLElBQVk7UUFDMUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQztRQUNsQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7O2dCQTVHRixVQUFVOztJQTZHWCx1QkFBQztDQUFBLEFBN0dELENBQytDLFdBQVcsR0E0R3pEO1NBNUdxQixnQkFBZ0I7Ozs7Ozs7Ozs7O0lBTXBDLHdFQUE4RDs7Ozs7Ozs7SUFNOUQsZ0VBQTZDOzs7Ozs7O0lBSzdDLDhEQUEyQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TmdiRGF0ZX0gZnJvbSAnLi4vbmdiLWRhdGUnO1xuaW1wb3J0IHtOZ2JQZXJpb2QsIE5nYkNhbGVuZGFyfSBmcm9tICcuLi9uZ2ItY2FsZW5kYXInO1xuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7aXNOdW1iZXJ9IGZyb20gJy4uLy4uL3V0aWwvdXRpbCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOZ2JDYWxlbmRhckhpanJpIGV4dGVuZHMgTmdiQ2FsZW5kYXIge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRheXMgaW4gYSBzcGVjaWZpYyBIaWpyaSBtb250aC5cbiAgICogYG1vbnRoYCBpcyAxIGZvciBNdWhhcnJhbSwgMiBmb3IgU2FmYXIsIGV0Yy5cbiAgICogYHllYXJgIGlzIGFueSBIaWpyaSB5ZWFyLlxuICAgKi9cbiAgYWJzdHJhY3QgZ2V0RGF5c1Blck1vbnRoKG1vbnRoOiBudW1iZXIsIHllYXI6IG51bWJlcik6IG51bWJlcjtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZXF1aXZhbGVudCBIaWpyaSBkYXRlIHZhbHVlIGZvciBhIGdpdmUgaW5wdXQgR3JlZ29yaWFuIGRhdGUuXG4gICAqIGBnRGF0ZWAgaXMgcyBKUyBEYXRlIHRvIGJlIGNvbnZlcnRlZCB0byBIaWpyaS5cbiAgICovXG4gIGFic3RyYWN0IGZyb21HcmVnb3JpYW4oZ0RhdGU6IERhdGUpOiBOZ2JEYXRlO1xuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgY3VycmVudCBIaWpyaSBkYXRlIHRvIEdyZWdvcmlhbi5cbiAgICovXG4gIGFic3RyYWN0IHRvR3JlZ29yaWFuKGhEYXRlOiBOZ2JEYXRlKTogRGF0ZTtcblxuICBnZXREYXlzUGVyV2VlaygpIHsgcmV0dXJuIDc7IH1cblxuICBnZXRNb250aHMoKSB7IHJldHVybiBbMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMl07IH1cblxuICBnZXRXZWVrc1Blck1vbnRoKCkgeyByZXR1cm4gNjsgfVxuXG4gIGdldE5leHQoZGF0ZTogTmdiRGF0ZSwgcGVyaW9kOiBOZ2JQZXJpb2QgPSAnZCcsIG51bWJlciA9IDEpIHtcbiAgICBkYXRlID0gbmV3IE5nYkRhdGUoZGF0ZS55ZWFyLCBkYXRlLm1vbnRoLCBkYXRlLmRheSk7XG5cbiAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgY2FzZSAneSc6XG4gICAgICAgIGRhdGUgPSB0aGlzLl9zZXRZZWFyKGRhdGUsIGRhdGUueWVhciArIG51bWJlcik7XG4gICAgICAgIGRhdGUubW9udGggPSAxO1xuICAgICAgICBkYXRlLmRheSA9IDE7XG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgICAgY2FzZSAnbSc6XG4gICAgICAgIGRhdGUgPSB0aGlzLl9zZXRNb250aChkYXRlLCBkYXRlLm1vbnRoICsgbnVtYmVyKTtcbiAgICAgICAgZGF0ZS5kYXkgPSAxO1xuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICAgIGNhc2UgJ2QnOlxuICAgICAgICByZXR1cm4gdGhpcy5fc2V0RGF5KGRhdGUsIGRhdGUuZGF5ICsgbnVtYmVyKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cbiAgfVxuXG4gIGdldFByZXYoZGF0ZTogTmdiRGF0ZSwgcGVyaW9kOiBOZ2JQZXJpb2QgPSAnZCcsIG51bWJlciA9IDEpIHsgcmV0dXJuIHRoaXMuZ2V0TmV4dChkYXRlLCBwZXJpb2QsIC1udW1iZXIpOyB9XG5cbiAgZ2V0V2Vla2RheShkYXRlOiBOZ2JEYXRlKSB7XG4gICAgY29uc3QgZGF5ID0gdGhpcy50b0dyZWdvcmlhbihkYXRlKS5nZXREYXkoKTtcbiAgICAvLyBpbiBKUyBEYXRlIFN1bj0wLCBpbiBJU08gODYwMSBTdW49N1xuICAgIHJldHVybiBkYXkgPT09IDAgPyA3IDogZGF5O1xuICB9XG5cbiAgZ2V0V2Vla051bWJlcih3ZWVrOiBOZ2JEYXRlW10sIGZpcnN0RGF5T2ZXZWVrOiBudW1iZXIpIHtcbiAgICAvLyBpbiBKUyBEYXRlIFN1bj0wLCBpbiBJU08gODYwMSBTdW49N1xuICAgIGlmIChmaXJzdERheU9mV2VlayA9PT0gNykge1xuICAgICAgZmlyc3REYXlPZldlZWsgPSAwO1xuICAgIH1cblxuICAgIGNvbnN0IHRodXJzZGF5SW5kZXggPSAoNCArIDcgLSBmaXJzdERheU9mV2VlaykgJSA3O1xuICAgIGNvbnN0IGRhdGUgPSB3ZWVrW3RodXJzZGF5SW5kZXhdO1xuXG4gICAgY29uc3QganNEYXRlID0gdGhpcy50b0dyZWdvcmlhbihkYXRlKTtcbiAgICBqc0RhdGUuc2V0RGF0ZShqc0RhdGUuZ2V0RGF0ZSgpICsgNCAtIChqc0RhdGUuZ2V0RGF5KCkgfHwgNykpOyAgLy8gVGh1cnNkYXlcbiAgICBjb25zdCB0aW1lID0ganNEYXRlLmdldFRpbWUoKTtcbiAgICBjb25zdCBNdWhEYXRlID0gdGhpcy50b0dyZWdvcmlhbihuZXcgTmdiRGF0ZShkYXRlLnllYXIsIDEsIDEpKTsgIC8vIENvbXBhcmUgd2l0aCBNdWhhcnJhbSAxXG4gICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yb3VuZCgodGltZSAtIE11aERhdGUuZ2V0VGltZSgpKSAvIDg2NDAwMDAwKSAvIDcpICsgMTtcbiAgfVxuXG4gIGdldFRvZGF5KCk6IE5nYkRhdGUgeyByZXR1cm4gdGhpcy5mcm9tR3JlZ29yaWFuKG5ldyBEYXRlKCkpOyB9XG5cblxuICBpc1ZhbGlkKGRhdGU6IE5nYkRhdGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZGF0ZSAmJiBpc051bWJlcihkYXRlLnllYXIpICYmIGlzTnVtYmVyKGRhdGUubW9udGgpICYmIGlzTnVtYmVyKGRhdGUuZGF5KSAmJlxuICAgICAgICAhaXNOYU4odGhpcy50b0dyZWdvcmlhbihkYXRlKS5nZXRUaW1lKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0RGF5KGRhdGU6IE5nYkRhdGUsIGRheTogbnVtYmVyKTogTmdiRGF0ZSB7XG4gICAgZGF5ID0gK2RheTtcbiAgICBsZXQgbURheXMgPSB0aGlzLmdldERheXNQZXJNb250aChkYXRlLm1vbnRoLCBkYXRlLnllYXIpO1xuICAgIGlmIChkYXkgPD0gMCkge1xuICAgICAgd2hpbGUgKGRheSA8PSAwKSB7XG4gICAgICAgIGRhdGUgPSB0aGlzLl9zZXRNb250aChkYXRlLCBkYXRlLm1vbnRoIC0gMSk7XG4gICAgICAgIG1EYXlzID0gdGhpcy5nZXREYXlzUGVyTW9udGgoZGF0ZS5tb250aCwgZGF0ZS55ZWFyKTtcbiAgICAgICAgZGF5ICs9IG1EYXlzO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZGF5ID4gbURheXMpIHtcbiAgICAgIHdoaWxlIChkYXkgPiBtRGF5cykge1xuICAgICAgICBkYXkgLT0gbURheXM7XG4gICAgICAgIGRhdGUgPSB0aGlzLl9zZXRNb250aChkYXRlLCBkYXRlLm1vbnRoICsgMSk7XG4gICAgICAgIG1EYXlzID0gdGhpcy5nZXREYXlzUGVyTW9udGgoZGF0ZS5tb250aCwgZGF0ZS55ZWFyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZGF0ZS5kYXkgPSBkYXk7XG4gICAgcmV0dXJuIGRhdGU7XG4gIH1cblxuICBwcml2YXRlIF9zZXRNb250aChkYXRlOiBOZ2JEYXRlLCBtb250aDogbnVtYmVyKTogTmdiRGF0ZSB7XG4gICAgbW9udGggPSArbW9udGg7XG4gICAgZGF0ZS55ZWFyID0gZGF0ZS55ZWFyICsgTWF0aC5mbG9vcigobW9udGggLSAxKSAvIDEyKTtcbiAgICBkYXRlLm1vbnRoID0gTWF0aC5mbG9vcigoKG1vbnRoIC0gMSkgJSAxMiArIDEyKSAlIDEyKSArIDE7XG4gICAgcmV0dXJuIGRhdGU7XG4gIH1cblxuICBwcml2YXRlIF9zZXRZZWFyKGRhdGU6IE5nYkRhdGUsIHllYXI6IG51bWJlcik6IE5nYkRhdGUge1xuICAgIGRhdGUueWVhciA9ICt5ZWFyO1xuICAgIHJldHVybiBkYXRlO1xuICB9XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/datepicker/hijri/ngb-calendar-islamic-civil.js b/dist/sunbird-ui-components/esm5/datepicker/hijri/ngb-calendar-islamic-civil.js new file mode 100644 index 0000000..131da9c --- /dev/null +++ b/dist/sunbird-ui-components/esm5/datepicker/hijri/ngb-calendar-islamic-civil.js @@ -0,0 +1,217 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import * as tslib_1 from "tslib"; +import { NgbCalendarHijri } from './ngb-calendar-hijri'; +import { NgbDate } from '../ngb-date'; +import { Injectable } from '@angular/core'; +/** + * Checks if islamic year is a leap year + * @param {?} hYear + * @return {?} + */ +function isIslamicLeapYear(hYear) { + return (14 + 11 * hYear) % 30 < 11; +} +/** + * Checks if gregorian years is a leap year + * @param {?} gDate + * @return {?} + */ +function isGregorianLeapYear(gDate) { + /** @type {?} */ + var year = gDate.getFullYear(); + return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0; +} +/** + * Returns the start of Hijri Month. + * `hMonth` is 0 for Muharram, 1 for Safar, etc. + * `hYear` is any Hijri hYear. + * @param {?} hYear + * @param {?} hMonth + * @return {?} + */ +function getIslamicMonthStart(hYear, hMonth) { + return Math.ceil(29.5 * hMonth) + (hYear - 1) * 354 + Math.floor((3 + 11 * hYear) / 30.0); +} +/** + * Returns the start of Hijri year. + * `year` is any Hijri year. + * @param {?} year + * @return {?} + */ +function getIslamicYearStart(year) { + return (year - 1) * 354 + Math.floor((3 + 11 * year) / 30.0); +} +/** + * @param {?} a + * @param {?} b + * @return {?} + */ +function mod(a, b) { + return a - b * Math.floor(a / b); +} +/** + * The civil calendar is one type of Hijri calendars used in islamic countries. + * Uses a fixed cycle of alternating 29- and 30-day months, + * with a leap day added to the last month of 11 out of every 30 years. + * http://cldr.unicode.org/development/development-process/design-proposals/islamic-calendar-types + * All the calculations here are based on the equations from "Calendrical Calculations" By Edward M. Reingold, Nachum + * Dershowitz. + * @type {?} + */ +var GREGORIAN_EPOCH = 1721425.5; +/** @type {?} */ +var ISLAMIC_EPOCH = 1948439.5; +var NgbCalendarIslamicCivil = /** @class */ (function (_super) { + tslib_1.__extends(NgbCalendarIslamicCivil, _super); + function NgbCalendarIslamicCivil() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * Returns the equivalent islamic(civil) date value for a give input Gregorian date. + * `gDate` is a JS Date to be converted to Hijri. + */ + /** + * Returns the equivalent islamic(civil) date value for a give input Gregorian date. + * `gDate` is a JS Date to be converted to Hijri. + * @param {?} gDate + * @return {?} + */ + NgbCalendarIslamicCivil.prototype.fromGregorian = /** + * Returns the equivalent islamic(civil) date value for a give input Gregorian date. + * `gDate` is a JS Date to be converted to Hijri. + * @param {?} gDate + * @return {?} + */ + function (gDate) { + /** @type {?} */ + var gYear = gDate.getFullYear(); + /** @type {?} */ + var gMonth = gDate.getMonth(); + /** @type {?} */ + var gDay = gDate.getDate(); + /** @type {?} */ + var julianDay = GREGORIAN_EPOCH - 1 + 365 * (gYear - 1) + Math.floor((gYear - 1) / 4) + + -Math.floor((gYear - 1) / 100) + Math.floor((gYear - 1) / 400) + + Math.floor((367 * (gMonth + 1) - 362) / 12 + (gMonth + 1 <= 2 ? 0 : isGregorianLeapYear(gDate) ? -1 : -2) + gDay); + julianDay = Math.floor(julianDay) + 0.5; + /** @type {?} */ + var days = julianDay - ISLAMIC_EPOCH; + /** @type {?} */ + var hYear = Math.floor((30 * days + 10646) / 10631.0); + /** @type {?} */ + var hMonth = Math.ceil((days - 29 - getIslamicYearStart(hYear)) / 29.5); + hMonth = Math.min(hMonth, 11); + /** @type {?} */ + var hDay = Math.ceil(days - getIslamicMonthStart(hYear, hMonth)) + 1; + return new NgbDate(hYear, hMonth + 1, hDay); + }; + /** + * Returns the equivalent JS date value for a give input islamic(civil) date. + * `hDate` is an islamic(civil) date to be converted to Gregorian. + */ + /** + * Returns the equivalent JS date value for a give input islamic(civil) date. + * `hDate` is an islamic(civil) date to be converted to Gregorian. + * @param {?} hDate + * @return {?} + */ + NgbCalendarIslamicCivil.prototype.toGregorian = /** + * Returns the equivalent JS date value for a give input islamic(civil) date. + * `hDate` is an islamic(civil) date to be converted to Gregorian. + * @param {?} hDate + * @return {?} + */ + function (hDate) { + /** @type {?} */ + var hYear = hDate.year; + /** @type {?} */ + var hMonth = hDate.month - 1; + /** @type {?} */ + var hDay = hDate.day; + /** @type {?} */ + var julianDay = hDay + Math.ceil(29.5 * hMonth) + (hYear - 1) * 354 + Math.floor((3 + 11 * hYear) / 30) + ISLAMIC_EPOCH - 1; + /** @type {?} */ + var wjd = Math.floor(julianDay - 0.5) + 0.5; + /** @type {?} */ + var depoch = wjd - GREGORIAN_EPOCH; + /** @type {?} */ + var quadricent = Math.floor(depoch / 146097); + /** @type {?} */ + var dqc = mod(depoch, 146097); + /** @type {?} */ + var cent = Math.floor(dqc / 36524); + /** @type {?} */ + var dcent = mod(dqc, 36524); + /** @type {?} */ + var quad = Math.floor(dcent / 1461); + /** @type {?} */ + var dquad = mod(dcent, 1461); + /** @type {?} */ + var yindex = Math.floor(dquad / 365); + /** @type {?} */ + var year = quadricent * 400 + cent * 100 + quad * 4 + yindex; + if (!(cent === 4 || yindex === 4)) { + year++; + } + /** @type {?} */ + var gYearStart = GREGORIAN_EPOCH + 365 * (year - 1) + Math.floor((year - 1) / 4) - Math.floor((year - 1) / 100) + + Math.floor((year - 1) / 400); + /** @type {?} */ + var yearday = wjd - gYearStart; + /** @type {?} */ + var tjd = GREGORIAN_EPOCH - 1 + 365 * (year - 1) + Math.floor((year - 1) / 4) - Math.floor((year - 1) / 100) + + Math.floor((year - 1) / 400) + Math.floor(739 / 12 + (isGregorianLeapYear(new Date(year, 3, 1)) ? -1 : -2) + 1); + /** @type {?} */ + var leapadj = wjd < tjd ? 0 : isGregorianLeapYear(new Date(year, 3, 1)) ? 1 : 2; + /** @type {?} */ + var month = Math.floor(((yearday + leapadj) * 12 + 373) / 367); + /** @type {?} */ + var tjd2 = GREGORIAN_EPOCH - 1 + 365 * (year - 1) + Math.floor((year - 1) / 4) - Math.floor((year - 1) / 100) + + Math.floor((year - 1) / 400) + + Math.floor((367 * month - 362) / 12 + (month <= 2 ? 0 : isGregorianLeapYear(new Date(year, month - 1, 1)) ? -1 : -2) + + 1); + /** @type {?} */ + var day = wjd - tjd2 + 1; + return new Date(year, month - 1, day); + }; + /** + * Returns the number of days in a specific Hijri month. + * `month` is 1 for Muharram, 2 for Safar, etc. + * `year` is any Hijri year. + */ + /** + * Returns the number of days in a specific Hijri month. + * `month` is 1 for Muharram, 2 for Safar, etc. + * `year` is any Hijri year. + * @param {?} month + * @param {?} year + * @return {?} + */ + NgbCalendarIslamicCivil.prototype.getDaysPerMonth = /** + * Returns the number of days in a specific Hijri month. + * `month` is 1 for Muharram, 2 for Safar, etc. + * `year` is any Hijri year. + * @param {?} month + * @param {?} year + * @return {?} + */ + function (month, year) { + year = year + Math.floor(month / 13); + month = ((month - 1) % 12) + 1; + /** @type {?} */ + var length = 29 + month % 2; + if (month === 12 && isIslamicLeapYear(year)) { + length++; + } + return length; + }; + NgbCalendarIslamicCivil.decorators = [ + { type: Injectable } + ]; + return NgbCalendarIslamicCivil; +}(NgbCalendarHijri)); +export { NgbCalendarIslamicCivil }; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdiLWNhbGVuZGFyLWlzbGFtaWMtY2l2aWwuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJkYXRlcGlja2VyL2hpanJpL25nYi1jYWxlbmRhci1pc2xhbWljLWNpdmlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNwQyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7Ozs7QUFLekMsU0FBUyxpQkFBaUIsQ0FBQyxLQUFhO0lBQ3RDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDckMsQ0FBQzs7Ozs7O0FBS0QsU0FBUyxtQkFBbUIsQ0FBQyxLQUFXOztRQUNoQyxJQUFJLEdBQUcsS0FBSyxDQUFDLFdBQVcsRUFBRTtJQUNoQyxPQUFPLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ2hFLENBQUM7Ozs7Ozs7OztBQU9ELFNBQVMsb0JBQW9CLENBQUMsS0FBYSxFQUFFLE1BQWM7SUFDekQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDNUYsQ0FBQzs7Ozs7OztBQU1ELFNBQVMsbUJBQW1CLENBQUMsSUFBWTtJQUN2QyxPQUFPLENBQUMsSUFBSSxH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QUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsYUFBYSxHQUFHLENBQUM7O1lBRXpHLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHOztZQUFFLE1BQU0sR0FBRyxHQUFHLEdBQUcsZUFBZTs7WUFDdkUsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQzs7WUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUM7O1lBQUUsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQzs7WUFDbkcsS0FBSyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDOztZQUFFLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7O1lBQUUsS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDOztZQUNsRixNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDOztZQUNsQyxJQUFJLEdBQUcsVUFBVSxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsTUFBTTtRQUM1RCxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLE1BQU0sS0FBSyxDQUFDLENBQUMsRUFBRTtZQUNqQyxJQUFJLEVBQUUsQ0FBQztTQUNSOztZQUVLLFVBQVUsR0FBRyxlQUFlLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDN0csSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7O1lBRTFCLE9BQU8sR0FBRyxHQUFHLEdBQUcsVUFBVTs7WUFFMUIsR0FBRyxHQUFHLGVBQWUsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDMUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7WUFFN0csT0FBTyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O1lBRTNFLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQzs7WUFDMUQsSUFBSSxHQUFHLGVBQWUsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDM0csSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDNUIsSUFBSSxDQUFDLEtBQUssQ0FDTixDQUFDLEdBQUcsR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pHLENBQUMsQ0FBQzs7WUFFSixHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO1FBRTFCLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVEOzs7O09BSUc7Ozs7Ozs7OztJQUNILGlEQUFlOzs7Ozs7OztJQUFmLFVBQWdCLEtBQWEsRUFBRSxJQUFZO1FBQ3pDLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDckMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDOztZQUMzQixNQUFNLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxDQUFDO1FBQzNCLElBQUksS0FBSyxLQUFLLEVBQUUsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMzQyxNQUFNLEVBQUUsQ0FBQztTQUNWO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQzs7Z0JBOUVGLFVBQVU7O0lBK0VYLDhCQUFDO0NBQUEsQUEvRUQsQ0FDNkMsZ0JBQWdCLEdBOEU1RDtTQTlFWSx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge05nYkNhbGVuZGFySGlqcml9IGZyb20gJy4vbmdiLWNhbGVuZGFyLWhpanJpJztcbmltcG9ydCB7TmdiRGF0ZX0gZnJvbSAnLi4vbmdiLWRhdGUnO1xuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBDaGVja3MgaWYgaXNsYW1pYyB5ZWFyIGlzIGEgbGVhcCB5ZWFyXG4gKi9cbmZ1bmN0aW9uIGlzSXNsYW1pY0xlYXBZZWFyKGhZZWFyOiBudW1iZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuICgxNCArIDExICogaFllYXIpICUgMzAgPCAxMTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgZ3JlZ29yaWFuIHllYXJzIGlzIGEgbGVhcCB5ZWFyXG4gKi9cbmZ1bmN0aW9uIGlzR3JlZ29yaWFuTGVhcFllYXIoZ0RhdGU6IERhdGUpOiBib29sZWFuIHtcbiAgY29uc3QgeWVhciA9IGdEYXRlLmdldEZ1bGxZZWFyKCk7XG4gIHJldHVybiB5ZWFyICUgNCA9PT0gMCAmJiB5ZWFyICUgMTAwICE9PSAwIHx8IHllYXIgJSA0MDAgPT09IDA7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgc3RhcnQgb2YgSGlqcmkgTW9udGguXG4gKiBgaE1vbnRoYCBpcyAwIGZvciBNdWhhcnJhbSwgMSBmb3IgU2FmYXIsIGV0Yy5cbiAqIGBoWWVhcmAgaXMgYW55IEhpanJpIGhZZWFyLlxuICovXG5mdW5jdGlvbiBnZXRJc2xhbWljTW9udGhTdGFydChoWWVhcjogbnVtYmVyLCBoTW9udGg6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBNYXRoLmNlaWwoMjkuNSAqIGhNb250aCkgKyAoaFllYXIgLSAxKSAqIDM1NCArIE1hdGguZmxvb3IoKDMgKyAxMSAqIGhZZWFyKSAvIDMwLjApO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHN0YXJ0IG9mIEhpanJpIHllYXIuXG4gKiBgeWVhcmAgaXMgYW55IEhpanJpIHllYXIuXG4gKi9cbmZ1bmN0aW9uIGdldElzbGFtaWNZZWFyU3RhcnQoeWVhcjogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuICh5ZWFyIC0gMSkgKiAzNTQgKyBNYXRoLmZsb29yKCgzICsgMTEgKiB5ZWFyKSAvIDMwLjApO1xufVxuXG5mdW5jdGlvbiBtb2QoYTogbnVtYmVyLCBiOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gYSAtIGIgKiBNYXRoLmZsb29yKGEgLyBiKTtcbn1cblxuLyoqXG4gKiBUaGUgY2l2aWwgY2FsZW5kYXIgaXMgb25lIHR5cGUgb2YgSGlqcmkgY2FsZW5kYXJzIHVzZWQgaW4gaXNsYW1pYyBjb3VudHJpZXMuXG4gKiBVc2VzIGEgZml4ZWQgY3ljbGUgb2YgYWx0ZXJuYXRpbmcgMjktIGFuZCAzMC1kYXkgbW9udGhzLFxuICogd2l0aCBhIGxlYXAgZGF5IGFkZGVkIHRvIHRoZSBsYXN0IG1vbnRoIG9mIDExIG91dCBvZiBldmVyeSAzMCB5ZWFycy5cbiAqIGh0dHA6Ly9jbGRyLnVuaWNvZGUub3JnL2RldmVsb3BtZW50L2RldmVsb3BtZW50LXByb2Nlc3MvZGVzaWduLXByb3Bvc2Fscy9pc2xhbWljLWNhbGVuZGFyLXR5cGVzXG4gKiBBbGwgdGhlIGNhbGN1bGF0aW9ucyBoZXJlIGFyZSBiYXNlZCBvbiB0aGUgZXF1YXRpb25zIGZyb20gXCJDYWxlbmRyaWNhbCBDYWxjdWxhdGlvbnNcIiBCeSBFZHdhcmQgTS4gUmVpbmdvbGQsIE5hY2h1bVxuICogRGVyc2hvd2l0ei5cbiAqL1xuXG5jb25zdCBHUkVHT1JJQU5fRVBPQ0ggPSAxNzIxNDI1LjU7XG5jb25zdCBJU0xBTUlDX0VQT0NIID0gMTk0ODQzOS41O1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTmdiQ2FsZW5kYXJJc2xhbWljQ2l2aWwgZXh0ZW5kcyBOZ2JDYWxlbmRhckhpanJpIHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGVxdWl2YWxlbnQgaXNsYW1pYyhjaXZpbCkgZGF0ZSB2YWx1ZSBmb3IgYSBnaXZlIGlucHV0IEdyZWdvcmlhbiBkYXRlLlxuICAgKiBgZ0RhdGVgIGlzIGEgSlMgRGF0ZSB0byBiZSBjb252ZXJ0ZWQgdG8gSGlqcmkuXG4gICAqL1xuICBmcm9tR3JlZ29yaWFuKGdEYXRlOiBEYXRlKTogTmdiRGF0ZSB7XG4gICAgY29uc3QgZ1llYXIgPSBnRGF0ZS5nZXRGdWxsWWVhcigpLCBnTW9udGggPSBnRGF0ZS5nZXRNb250aCgpLCBnRGF5ID0gZ0RhdGUuZ2V0RGF0ZSgpO1xuXG4gICAgbGV0IGp1bGlhbkRheSA9IEdSRUdPUklBTl9FUE9DSCAtIDEgKyAzNjUgKiAoZ1llYXIgLSAxKSArIE1hdGguZmxvb3IoKGdZZWFyIC0gMSkgLyA0KSArXG4gICAgICAgIC1NYXRoLmZsb29yKChnWWVhciAtIDEpIC8gMTAwKSArIE1hdGguZmxvb3IoKGdZZWFyIC0gMSkgLyA0MDApICtcbiAgICAgICAgTWF0aC5mbG9vcihcbiAgICAgICAgICAgICgzNjcgKiAoZ01vbnRoICsgMSkgLSAzNjIpIC8gMTIgKyAoZ01vbnRoICsgMSA8PSAyID8gMCA6IGlzR3JlZ29yaWFuTGVhcFllYXIoZ0RhdGUpID8gLTEgOiAtMikgKyBnRGF5KTtcbiAgICBqdWxpYW5EYXkgPSBNYXRoLmZsb29yKGp1bGlhbkRheSkgKyAwLjU7XG5cbiAgICBjb25zdCBkYXlzID0ganVsaWFuRGF5IC0gSVNMQU1JQ19FUE9DSDtcbiAgICBjb25zdCBoWWVhciA9IE1hdGguZmxvb3IoKDMwICogZGF5cyArIDEwNjQ2KSAvIDEwNjMxLjApO1xuICAgIGxldCBoTW9udGggPSBNYXRoLmNlaWwoKGRheXMgLSAyOSAtIGdldElzbGFtaWNZZWFyU3RhcnQoaFllYXIpKSAvIDI5LjUpO1xuICAgIGhNb250aCA9IE1hdGgubWluKGhNb250aCwgMTEpO1xuICAgIGNvbnN0IGhEYXkgPSBNYXRoLmNlaWwoZGF5cyAtIGdldElzbGFtaWNNb250aFN0YXJ0KGhZZWFyLCBoTW9udGgpKSArIDE7XG4gICAgcmV0dXJuIG5ldyBOZ2JEYXRlKGhZZWFyLCBoTW9udGggKyAxLCBoRGF5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBlcXVpdmFsZW50IEpTIGRhdGUgdmFsdWUgZm9yIGEgZ2l2ZSBpbnB1dCBpc2xhbWljKGNpdmlsKSBkYXRlLlxuICAgKiBgaERhdGVgIGlzIGFuIGlzbGFtaWMoY2l2aWwpIGRhdGUgdG8gYmUgY29udmVydGVkIHRvIEdyZWdvcmlhbi5cbiAgICovXG4gIHRvR3JlZ29yaWFuKGhEYXRlOiBOZ2JEYXRlKTogRGF0ZSB7XG4gICAgY29uc3QgaFllYXIgPSBoRGF0ZS55ZWFyO1xuICAgIGNvbnN0IGhNb250aCA9IGhEYXRlLm1vbnRoIC0gMTtcbiAgICBjb25zdCBoRGF5ID0gaERhdGUuZGF5O1xuICAgIGNvbnN0IGp1bGlhbkRheSA9XG4gICAgICAgIGhEYXkgKyBNYXRoLmNlaWwoMjkuNSAqIGhNb250aCkgKyAoaFllYXIgLSAxKSAqIDM1NCArIE1hdGguZmxvb3IoKDMgKyAxMSAqIGhZZWFyKSAvIDMwKSArIElTTEFNSUNfRVBPQ0ggLSAxO1xuXG4gICAgY29uc3Qgd2pkID0gTWF0aC5mbG9vcihqdWxpYW5EYXkgLSAwLjUpICsgMC41LCBkZXBvY2ggPSB3amQgLSBHUkVHT1JJQU5fRVBPQ0gsXG4gICAgICAgICAgcXVhZHJpY2VudCA9IE1hdGguZmxvb3IoZGVwb2NoIC8gMTQ2MDk3KSwgZHFjID0gbW9kKGRlcG9jaCwgMTQ2MDk3KSwgY2VudCA9IE1hdGguZmxvb3IoZHFjIC8gMzY1MjQpLFxuICAgICAgICAgIGRjZW50ID0gbW9kKGRxYywgMzY1MjQpLCBxdWFkID0gTWF0aC5mbG9vcihkY2VudCAvIDE0NjEpLCBkcXVhZCA9IG1vZChkY2VudCwgMTQ2MSksXG4gICAgICAgICAgeWluZGV4ID0gTWF0aC5mbG9vcihkcXVhZCAvIDM2NSk7XG4gICAgbGV0IHllYXIgPSBxdWFkcmljZW50ICogNDAwICsgY2VudCAqIDEwMCArIHF1YWQgKiA0ICsgeWluZGV4O1xuICAgIGlmICghKGNlbnQgPT09IDQgfHwgeWluZGV4ID09PSA0KSkge1xuICAgICAgeWVhcisrO1xuICAgIH1cblxuICAgIGNvbnN0IGdZZWFyU3RhcnQgPSBHUkVHT1JJQU5fRVBPQ0ggKyAzNjUgKiAoeWVhciAtIDEpICsgTWF0aC5mbG9vcigoeWVhciAtIDEpIC8gNCkgLSBNYXRoLmZsb29yKCh5ZWFyIC0gMSkgLyAxMDApICtcbiAgICAgICAgTWF0aC5mbG9vcigoeWVhciAtIDEpIC8gNDAwKTtcblxuICAgIGNvbnN0IHllYXJkYXkgPSB3amQgLSBnWWVhclN0YXJ0O1xuXG4gICAgY29uc3QgdGpkID0gR1JFR09SSUFOX0VQT0NIIC0gMSArIDM2NSAqICh5ZWFyIC0gMSkgKyBNYXRoLmZsb29yKCh5ZWFyIC0gMSkgLyA0KSAtIE1hdGguZmxvb3IoKHllYXIgLSAxKSAvIDEwMCkgK1xuICAgICAgICBNYXRoLmZsb29yKCh5ZWFyIC0gMSkgLyA0MDApICsgTWF0aC5mbG9vcig3MzkgLyAxMiArIChpc0dyZWdvcmlhbkxlYXBZZWFyKG5ldyBEYXRlKHllYXIsIDMsIDEpKSA/IC0xIDogLTIpICsgMSk7XG5cbiAgICBjb25zdCBsZWFwYWRqID0gd2pkIDwgdGpkID8gMCA6IGlzR3JlZ29yaWFuTGVhcFllYXIobmV3IERhdGUoeWVhciwgMywgMSkpID8gMSA6IDI7XG5cbiAgICBjb25zdCBtb250aCA9IE1hdGguZmxvb3IoKCh5ZWFyZGF5ICsgbGVhcGFkaikgKiAxMiArIDM3MykgLyAzNjcpO1xuICAgIGNvbnN0IHRqZDIgPSBHUkVHT1JJQU5fRVBPQ0ggLSAxICsgMzY1ICogKHllYXIgLSAxKSArIE1hdGguZmxvb3IoKHllYXIgLSAxKSAvIDQpIC0gTWF0aC5mbG9vcigoeWVhciAtIDEpIC8gMTAwKSArXG4gICAgICAgIE1hdGguZmxvb3IoKHllYXIgLSAxKSAvIDQwMCkgK1xuICAgICAgICBNYXRoLmZsb29yKFxuICAgICAgICAgICAgKDM2NyAqIG1vbnRoIC0gMzYyKSAvIDEyICsgKG1vbnRoIDw9IDIgPyAwIDogaXNHcmVnb3JpYW5MZWFwWWVhcihuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIDEpKSA/IC0xIDogLTIpICtcbiAgICAgICAgICAgIDEpO1xuXG4gICAgY29uc3QgZGF5ID0gd2pkIC0gdGpkMiArIDE7XG5cbiAgICByZXR1cm4gbmV3IERhdGUoeWVhciwgbW9udGggLSAxLCBkYXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBkYXlzIGluIGEgc3BlY2lmaWMgSGlqcmkgbW9udGguXG4gICAqIGBtb250aGAgaXMgMSBmb3IgTXVoYXJyYW0sIDIgZm9yIFNhZmFyLCBldGMuXG4gICAqIGB5ZWFyYCBpcyBhbnkgSGlqcmkgeWVhci5cbiAgICovXG4gIGdldERheXNQZXJNb250aChtb250aDogbnVtYmVyLCB5ZWFyOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHllYXIgPSB5ZWFyICsgTWF0aC5mbG9vcihtb250aCAvIDEzKTtcbiAgICBtb250aCA9ICgobW9udGggLSAxKSAlIDEyKSArIDE7XG4gICAgbGV0IGxlbmd0aCA9IDI5ICsgbW9udGggJSAyO1xuICAgIGlmIChtb250aCA9PT0gMTIgJiYgaXNJc2xhbWljTGVhcFllYXIoeWVhcikpIHtcbiAgICAgIGxlbmd0aCsrO1xuICAgIH1cbiAgICByZXR1cm4gbGVuZ3RoO1xuICB9XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/datepicker/hijri/ngb-calendar-islamic-umalqura.js b/dist/sunbird-ui-components/esm5/datepicker/hijri/ngb-calendar-islamic-umalqura.js new file mode 100644 index 0000000..cc00411 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/datepicker/hijri/ngb-calendar-islamic-umalqura.js @@ -0,0 +1,299 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import * as tslib_1 from "tslib"; +import { NgbCalendarIslamicCivil } from './ngb-calendar-islamic-civil'; +import { NgbDate } from '../ngb-date'; +import { Injectable } from '@angular/core'; +/** + * Umalqura calendar is one type of Hijri calendars used in islamic countries. + * This Calendar is used by Saudi Arabia for administrative purpose. + * Unlike tabular calendars, the algorithm involves astronomical calculation, but it's still deterministic. + * http://cldr.unicode.org/development/development-process/design-proposals/islamic-calendar-types + * @type {?} + */ +var GREGORIAN_FIRST_DATE = new Date(1882, 10, 12); +/** @type {?} */ +var GREGORIAN_LAST_DATE = new Date(2174, 10, 25); +/** @type {?} */ +var HIJRI_BEGIN = 1300; +/** @type {?} */ +var HIJRI_END = 1600; +/** @type {?} */ +var ONE_DAY = 1000 * 60 * 60 * 24; +/** @type {?} */ +var MONTH_LENGTH = [ + // 1300-1304 + '101010101010', '110101010100', '111011001001', '011011010100', '011011101010', + // 1305-1309 + '001101101100', '101010101101', '010101010101', '011010101001', '011110010010', + // 1310-1314 + '101110101001', '010111010100', '101011011010', '010101011100', '110100101101', + // 1315-1319 + '011010010101', '011101001010', '101101010100', '101101101010', '010110101101', + // 1320-1324 + '010010101110', '101001001111', '010100010111', '011010001011', '011010100101', + // 1325-1329 + '101011010101', '001011010110', '100101011011', '010010011101', '101001001101', + // 1330-1334 + '110100100110', '110110010101', '010110101100', '100110110110', '001010111010', + // 1335-1339 + '101001011011', '010100101011', '101010010101', '011011001010', '101011101001', + // 1340-1344 + '001011110100', '100101110110', '001010110110', '100101010110', '101011001010', + // 1345-1349 + '101110100100', '101111010010', '010111011001', '001011011100', '100101101101', + // 1350-1354 + '010101001101', '101010100101', '101101010010', '101110100101', '010110110100', + // 1355-1359 + '100110110110', '010101010111', '001010010111', '010101001011', '011010100011', + // 1360-1364 + '011101010010', '101101100101', '010101101010', '101010101011', '010100101011', + // 1365-1369 + '110010010101', '110101001010', '110110100101', '010111001010', '101011010110', + // 1370-1374 + '100101010111', '010010101011', '100101001011', '101010100101', '101101010010', + // 1375-1379 + '101101101010', '010101110101', '001001110110', '100010110111', '010001011011', + // 1380-1384 + '010101010101', '010110101001', '010110110100', '100111011010', '010011011101', + // 1385-1389 + '001001101110', '100100110110', '101010101010', '110101010100', '110110110010', + // 1390-1394 + '010111010101', '001011011010', '100101011011', '010010101011', '101001010101', + // 1395-1399 + '101101001001', '101101100100', '101101110001', '010110110100', '101010110101', + // 1400-1404 + '101001010101', '110100100101', '111010010010', '111011001001', '011011010100', + // 1405-1409 + '101011101001', '100101101011', '010010101011', '101010010011', '110101001001', + // 1410-1414 + '110110100100', '110110110010', '101010111001', '010010111010', '101001011011', + // 1415-1419 + '010100101011', '101010010101', '101100101010', '101101010101', '010101011100', + // 1420-1424 + '010010111101', '001000111101', '100100011101', '101010010101', '101101001010', + // 1425-1429 + '101101011010', '010101101101', '001010110110', '100100111011', '010010011011', + // 1430-1434 + '011001010101', '011010101001', '011101010100', '101101101010', '010101101100', + // 1435-1439 + '101010101101', '010101010101', '101100101001', '101110010010', '101110101001', + // 1440-1444 + '010111010100', '101011011010', '010101011010', '101010101011', '010110010101', + // 1445-1449 + '011101001001', '011101100100', '101110101010', '010110110101', '001010110110', + // 1450-1454 + '101001010110', '111001001101', '101100100101', '101101010010', '101101101010', + // 1455-1459 + '010110101101', '001010101110', '100100101111', '010010010111', '011001001011', + // 1460-1464 + '011010100101', '011010101100', '101011010110', '010101011101', '010010011101', + // 1465-1469 + '101001001101', '110100010110', '110110010101', '010110101010', '010110110101', + // 1470-1474 + '001011011010', '100101011011', '010010101101', '010110010101', '011011001010', + // 1475-1479 + '011011100100', '101011101010', '010011110101', '001010110110', '100101010110', + // 1480-1484 + '101010101010', '101101010100', '101111010010', '010111011001', '001011101010', + // 1485-1489 + '100101101101', '010010101101', '101010010101', '101101001010', '101110100101', + // 1490-1494 + '010110110010', '100110110101', '010011010110', '101010010111', '010101000111', + // 1495-1499 + '011010010011', '011101001001', '101101010101', '010101101010', '101001101011', + // 1500-1504 + '010100101011', '101010001011', '110101000110', '110110100011', '010111001010', + // 1505-1509 + '101011010110', '010011011011', '001001101011', '100101001011', '101010100101', + // 1510-1514 + '101101010010', '101101101001', '010101110101', '000101110110', '100010110111', + // 1515-1519 + '001001011011', '010100101011', '010101100101', '010110110100', '100111011010', + // 1520-1524 + '010011101101', '000101101101', '100010110110', '101010100110', '110101010010', + // 1525-1529 + '110110101001', '010111010100', '101011011010', '100101011011', '010010101011', + // 1530-1534 + '011001010011', '011100101001', '011101100010', '101110101001', '010110110010', + // 1535-1539 + '101010110101', '010101010101', '101100100101', '110110010010', '111011001001', + // 1540-1544 + '011011010010', '101011101001', '010101101011', '010010101011', '101001010101', + // 1545-1549 + '110100101001', '110101010100', '110110101010', '100110110101', '010010111010', + // 1550-1554 + '101000111011', '010010011011', '101001001101', '101010101010', '101011010101', + // 1555-1559 + '001011011010', '100101011101', '010001011110', '101000101110', '110010011010', + // 1560-1564 + '110101010101', '011010110010', '011010111001', '010010111010', '101001011101', + // 1565-1569 + '010100101101', '101010010101', '101101010010', '101110101000', '101110110100', + // 1570-1574 + '010110111001', '001011011010', '100101011010', '101101001010', '110110100100', + // 1575-1579 + '111011010001', '011011101000', '101101101010', '010101101101', '010100110101', + // 1580-1584 + '011010010101', '110101001010', '110110101000', '110111010100', '011011011010', + // 1585-1589 + '010101011011', '001010011101', '011000101011', '101100010101', '101101001010', + // 1590-1594 + '101110010101', '010110101010', '101010101110', '100100101110', '110010001111', + // 1595-1599 + '010100100111', '011010010101', '011010101010', '101011010110', '010101011101', + // 1600 + '001010011101' +]; +/** + * @param {?} date1 + * @param {?} date2 + * @return {?} + */ +function getDaysDiff(date1, date2) { + // Ignores the time part in date1 and date2: + /** @type {?} */ + var time1 = Date.UTC(date1.getFullYear(), date1.getMonth(), date1.getDate()); + /** @type {?} */ + var time2 = Date.UTC(date2.getFullYear(), date2.getMonth(), date2.getDate()); + /** @type {?} */ + var diff = Math.abs(time1 - time2); + return Math.round(diff / ONE_DAY); +} +var NgbCalendarIslamicUmalqura = /** @class */ (function (_super) { + tslib_1.__extends(NgbCalendarIslamicUmalqura, _super); + function NgbCalendarIslamicUmalqura() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * Returns the equivalent islamic(Umalqura) date value for a give input Gregorian date. + * `gdate` is s JS Date to be converted to Hijri. + */ + /** + * Returns the equivalent islamic(Umalqura) date value for a give input Gregorian date. + * `gdate` is s JS Date to be converted to Hijri. + * @param {?} gDate + * @return {?} + */ + NgbCalendarIslamicUmalqura.prototype.fromGregorian = /** + * Returns the equivalent islamic(Umalqura) date value for a give input Gregorian date. + * `gdate` is s JS Date to be converted to Hijri. + * @param {?} gDate + * @return {?} + */ + function (gDate) { + /** @type {?} */ + var hDay = 1; + /** @type {?} */ + var hMonth = 0; + /** @type {?} */ + var hYear = 1300; + /** @type {?} */ + var daysDiff = getDaysDiff(gDate, GREGORIAN_FIRST_DATE); + if (gDate.getTime() - GREGORIAN_FIRST_DATE.getTime() >= 0 && gDate.getTime() - GREGORIAN_LAST_DATE.getTime() <= 0) { + /** @type {?} */ + var year = 1300; + for (var i = 0; i < MONTH_LENGTH.length; i++, year++) { + for (var j = 0; j < 12; j++) { + /** @type {?} */ + var numOfDays = +MONTH_LENGTH[i][j] + 29; + if (daysDiff <= numOfDays) { + hDay = daysDiff + 1; + if (hDay > numOfDays) { + hDay = 1; + j++; + } + if (j > 11) { + j = 0; + year++; + } + hMonth = j; + hYear = year; + return new NgbDate(hYear, hMonth + 1, hDay); + } + daysDiff = daysDiff - numOfDays; + } + } + } + else { + return _super.prototype.fromGregorian.call(this, gDate); + } + }; + /** + * Converts the current Hijri date to Gregorian. + */ + /** + * Converts the current Hijri date to Gregorian. + * @param {?} hDate + * @return {?} + */ + NgbCalendarIslamicUmalqura.prototype.toGregorian = /** + * Converts the current Hijri date to Gregorian. + * @param {?} hDate + * @return {?} + */ + function (hDate) { + /** @type {?} */ + var hYear = hDate.year; + /** @type {?} */ + var hMonth = hDate.month - 1; + /** @type {?} */ + var hDay = hDate.day; + /** @type {?} */ + var gDate = new Date(GREGORIAN_FIRST_DATE); + /** @type {?} */ + var dayDiff = hDay - 1; + if (hYear >= HIJRI_BEGIN && hYear <= HIJRI_END) { + for (var y = 0; y < hYear - HIJRI_BEGIN; y++) { + for (var m = 0; m < 12; m++) { + dayDiff += +MONTH_LENGTH[y][m] + 29; + } + } + for (var m = 0; m < hMonth; m++) { + dayDiff += +MONTH_LENGTH[hYear - HIJRI_BEGIN][m] + 29; + } + gDate.setDate(GREGORIAN_FIRST_DATE.getDate() + dayDiff); + } + else { + gDate = _super.prototype.toGregorian.call(this, hDate); + } + return gDate; + }; + /** + * Returns the number of days in a specific Hijri hMonth. + * `hMonth` is 1 for Muharram, 2 for Safar, etc. + * `hYear` is any Hijri hYear. + */ + /** + * Returns the number of days in a specific Hijri hMonth. + * `hMonth` is 1 for Muharram, 2 for Safar, etc. + * `hYear` is any Hijri hYear. + * @param {?} hMonth + * @param {?} hYear + * @return {?} + */ + NgbCalendarIslamicUmalqura.prototype.getDaysPerMonth = /** + * Returns the number of days in a specific Hijri hMonth. + * `hMonth` is 1 for Muharram, 2 for Safar, etc. + * `hYear` is any Hijri hYear. + * @param {?} hMonth + * @param {?} hYear + * @return {?} + */ + function (hMonth, hYear) { + if (hYear >= HIJRI_BEGIN && hYear <= HIJRI_END) { + /** @type {?} */ + var pos = hYear - HIJRI_BEGIN; + return +MONTH_LENGTH[pos][hMonth - 1] + 29; + } + return _super.prototype.getDaysPerMonth.call(this, hMonth, hYear); + }; + NgbCalendarIslamicUmalqura.decorators = [ + { type: Injectable } + ]; + return NgbCalendarIslamicUmalqura; +}(NgbCalendarIslamicCivil)); +export { NgbCalendarIslamicUmalqura }; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdiLWNhbGVuZGFyLWlzbGFtaWMtdW1hbHF1cmEuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJkYXRlcGlja2VyL2hpanJpL25nYi1jYWxlbmRhci1pc2xhbWljLXVtYWxxdXJhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDckUsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNwQyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztJQVNuQyxvQkFBb0IsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQzs7SUFDN0MsbUJBQW1CLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7O0lBQzVDLFdBQVcsR0FBRyxJQUFJOztJQUNsQixTQUFTLEdBQUcsSUFBSTs7SUFDaEIsT0FBTyxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7O0lBRTdCLFlBQVksR0FBRztJQUNuQixZQUFZO0lBQ1osY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWM7SUFDOUUsWUFBWTtJQUNaLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjO0lBQzlFLFlBQVk7SUFDWixjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYztJQUM5RSxZQUFZO0lBQ1osY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWM7SUFDOUUsWUFBWTtJQUNaLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjO0lBQzlFLFlBQVk7SUFDWixjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYztJQUM5RSxZQUFZO0lBQ1osY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWM7SUFDOUUsWUFBWTtJQUNaLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjO0lBQzlFLFlBQVk7SUFDWixjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYztJQUM5RSxZQUFZO0lBQ1osY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWM7SUFDOUUsWUFBWTtJQUNaLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjO0lBQzlFLFlBQVk7SUFDWixjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYztJQUM5RSxZQUFZO0lBQ1osY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWM7SUFDOUUsWUFBWTtJQUNaLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjO0lBQzlFLFlBQVk7SUFDWixjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYztJQUM5RSxZQUFZO0lBQ1osY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWM7SUFDOUUsWUFBWTtJQUNaLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjO0lBQzlFLFlBQVk7SUFDWixjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYztJQUM5RSxZQUFZO0lBQ1osY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWM7SUFDOUUsWUFBWTtJQUNaLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjO0lBQzlFLFlBQVk7SUFDWixjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYztJQUM5RSxZQUFZO0lBQ1osY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWM7SUFDOUUsWUFBWTtJQUNaLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjO0lBQzlFLFlBQVk7SUFDWixjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYztJQUM5RSxZQUFZO0lBQ1osY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWM7SUFDOUUsWUFBWTtJQUNaLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjO0lBQzlFLFlBQVk7SUFDWixjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYztJQUM5RSxZQUFZO0lBQ1osY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWM7SUFDOUUsWUFBWTtJQUNaLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjO0lBQzlFLFlBQVk7SUFDWixjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYztJQUM5RSxZQUFZO0lBQ1osY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWM7SUFDOUUsWUFBWTtJQUNaLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjO0lBQzlFLFlBQVk7SUFDWixjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYztJQUM5RSxZQUFZO0lBQ1osY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWM7SUFDOUUsWUFBWTtJQUNaLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjO0lBQzlFLFlBQVk7SUFDWixjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYztJQUM5RSxZQUFZO0lBQ1osY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWM7SUFDOUUsWUFBWTtJQUNaLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjO0lBQzlFLFlBQVk7SUFDWixjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYztJQUM5RSxZQUFZO0lBQ1osY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWM7SUFDOUUsWUFBWTtJQUNaLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjO0lBQzlFLFlBQVk7SUFDWixjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYztJQUM5RSxZQUFZO0lBQ1osY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWM7SUFDOUUsWUFBWTtJQUNaLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjO0lBQzlFLFlBQVk7SUFDWixjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYztJQUM5RSxZQUFZO0lBQ1osY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWM7SUFDOUUsWUFBWTtJQUNaLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjO0lBQzlFLFlBQVk7SUFDWixjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYztJQUM5RSxZQUFZO0lBQ1osY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWM7SUFDOUUsWUFBWTtJQUNaLGNBQWMsRUFBRSxjQUFjLEVBQUUs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QyxFQUFFLEVBQUU7Z0JBQy9CLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO2FBQ3ZEO1lBQ0QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQztTQUN6RDthQUFNO1lBQ0wsS0FBSyxHQUFHLGlCQUFNLFdBQVcsWUFBQyxLQUFLLENBQUMsQ0FBQztTQUNsQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNEOzs7O01BSUU7Ozs7Ozs7OztJQUNGLG9EQUFlOzs7Ozs7OztJQUFmLFVBQWdCLE1BQWMsRUFBRSxLQUFhO1FBQzNDLElBQUksS0FBSyxJQUFJLFdBQVcsSUFBSSxLQUFLLElBQUksU0FBUyxFQUFFOztnQkFDeEMsR0FBRyxHQUFHLEtBQUssR0FBRyxXQUFXO1lBQy9CLE9BQU8sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUM1QztRQUNELE9BQU8saUJBQU0sZUFBZSxZQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM5QyxDQUFDOztnQkF0RUYsVUFBVTs7SUF1RVgsaUNBQUM7Q0FBQSxBQXZFRCxDQUNnRCx1QkFBdUIsR0FzRXRFO1NBdEVZLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TmdiQ2FsZW5kYXJJc2xhbWljQ2l2aWx9IGZyb20gJy4vbmdiLWNhbGVuZGFyLWlzbGFtaWMtY2l2aWwnO1xuaW1wb3J0IHtOZ2JEYXRlfSBmcm9tICcuLi9uZ2ItZGF0ZSc7XG5pbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIFVtYWxxdXJhIGNhbGVuZGFyIGlzIG9uZSB0eXBlIG9mIEhpanJpIGNhbGVuZGFycyB1c2VkIGluIGlzbGFtaWMgY291bnRyaWVzLlxuICogVGhpcyBDYWxlbmRhciBpcyB1c2VkIGJ5IFNhdWRpIEFyYWJpYSBmb3IgYWRtaW5pc3RyYXRpdmUgcHVycG9zZS5cbiAqIFVubGlrZSB0YWJ1bGFyIGNhbGVuZGFycywgdGhlIGFsZ29yaXRobSBpbnZvbHZlcyBhc3Ryb25vbWljYWwgY2FsY3VsYXRpb24sIGJ1dCBpdCdzIHN0aWxsIGRldGVybWluaXN0aWMuXG4gKiBodHRwOi8vY2xkci51bmljb2RlLm9yZy9kZXZlbG9wbWVudC9kZXZlbG9wbWVudC1wcm9jZXNzL2Rlc2lnbi1wcm9wb3NhbHMvaXNsYW1pYy1jYWxlbmRhci10eXBlc1xuICovXG5cbmNvbnN0IEdSRUdPUklBTl9GSVJTVF9EQVRFID0gbmV3IERhdGUoMTg4MiwgMTAsIDEyKTtcbmNvbnN0IEdSRUdPUklBTl9MQVNUX0RBVEUgPSBuZXcgRGF0ZSgyMTc0LCAxMCwgMjUpO1xuY29uc3QgSElKUklfQkVHSU4gPSAxMzAwO1xuY29uc3QgSElKUklfRU5EID0gMTYwMDtcbmNvbnN0IE9ORV9EQVkgPSAxMDAwICogNjAgKiA2MCAqIDI0O1xuXG5jb25zdCBNT05USF9MRU5HVEggPSBbXG4gIC8vIDEzMDAtMTMwNFxuICAnMTAxMDEwMTAxMDEwJywgJzExMDEwMTAxMDEwMCcsICcxMTEwMTEwMDEwMDEnLCAnMDExMDExMDEwMTAwJywgJzAxMTAxMTEwMTAxMCcsXG4gIC8vIDEzMDUtMTMwOVxuICAnMDAxMTAxMTAxMTAwJywgJzEwMTAxMDEwMTEwMScsICcwMTAxMDEwMTAxMDEnLCAnMDExMDEwMTAxMDAxJywgJzAxMTExMDAxMDAxMCcsXG4gIC8vIDEzMTAtMTMxNFxuICAnMTAxMTEwMTAxMDAxJywgJzAxMDExMTAxMDEwMCcsICcxMDEwMTEwMTEwMTAnLCAnMDEwMTAxMDExMTAwJywgJzExMDEwMDEwMTEwMScsXG4gIC8vIDEzMTUtMTMxOVxuICAnMDExMDEwMDEwMTAxJywgJzAxMTEwMTAwMTAxMCcsICcxMDExMDEwMTAxMDAnLCAnMTAxMTAxMTAxMDEwJywgJzAxMDExMDEwMTEwMScsXG4gIC8vIDEzMjAtMTMyNFxuICAnMDEwMDEwMTAxMTEwJywgJzEwMTAwMTAwMTExMScsICcwMTAxMDAwMTAxMTEnLCAnMDExMDEwMDAxMDExJywgJzAxMTAxMDEwMDEwMScsXG4gIC8vIDEzMjUtMTMyOVxuICAnMTAxMDExMDEwMTAxJywgJzAwMTAxMTAxMDExMCcsICcxMDAxMDEwMTEwMTEnLCAnMDEwMDEwMDExMTAxJywgJzEwMTAwMTAwMTEwMScsXG4gIC8vIDEzMzAtMTMzNFxuICAnMTEwMTAwMTAwMTEwJywgJzExMDExMDAxMDEwMScsICcwMTAxMTAxMDExMDAnLCAnMTAwMTEwMTEwMTEwJywgJzAwMTAxMDExMTAxMCcsXG4gIC8vIDEzMzUtMTMzOVxuICAnMTAxMDAxMDExMDExJywgJzAxMDEwMDEwMTAxMScsICcxMDEwMTAwMTAxMDEnLCAnMDExMDExMDAxMDEwJywgJzEwMTAxMTEwMTAwMScsXG4gIC8vIDEzNDAtMTM0NFxuICAnMDAxMDExMTEwMTAwJywgJzEwMDEwMTExMDExMCcsICcwMDEwMTAxMTAxMTAnLCAnMTAwMTAxMDEwMTEwJywgJzEwMTAxMTAwMTAxMCcsXG4gIC8vIDEzNDUtMTM0OVxuICAnMTAxMTEwMTAwMTAwJywgJzEwMTExMTAxMDAxMCcsICcwMTAxMTEwMTEwMDEnLCAnMDAxMDExMDExMTAwJywgJzEwMDEwMTEwMTEwMScsXG4gIC8vIDEzNTAtMTM1NFxuICAnMDEwMTAxMDAxMTAxJywgJzEwMTAxMDEwMDEwMScsICcxMDExMDEwMTAwMTAnLCAnMTAxMTEwMTAwMTAxJywgJzAxMDExMDExMDEwMCcsXG4gIC8vIDEzNTUtMTM1OVxuICAnMTAwMTEwMTEwMTEwJywgJzAxMDEwMTAxMDExMScsICcwMDEwMTAwMTAxMTEnLCAnMDEwMTAxMDAxMDExJywgJzAxMTAxMDEwMDAxMScsXG4gIC8vIDEzNjAtMTM2NFxuICAnMDExMTAxMDEwMDEwJywgJzEwMTEwMTEwMDEwMScsICcwMTAxMDExMDEwMTAnLCAnMTAxMDEwMTAxMDExJywgJzAxMDEwMDEwMTAxMScsXG4gIC8vIDEzNjUtMTM2OVxuICAnMTEwMDEwMDEwMTAxJywgJzExMDEwMTAwMTAxMCcsICcxMTAxMTAxMDAxMDEnLCAnMDEwMTExMDAxMDEwJywgJzEwMTAxMTAxMDExMCcsXG4gIC8vIDEzNzAtMTM3NFxuICAnMTAwMTAxMDEwMTExJywgJzAxMDAxMDEwMTAxMScsICcxMDAxMDEwMDEwMTEnLCAnMTAxMDEwMTAwMTAxJywgJzEwMTEwMTAxMDAxMCcsXG4gIC8vIDEzNzUtMTM3OVxuICAnMTAxMTAxMTAxMDEwJywgJzAxMDEwMTExMDEwMScsICcwMDEwMDExMTAxMTAnLCAnMTAwMDEwMTEwMTExJywgJzAxMDAwMTAxMTAxMScsXG4gIC8vIDEzODAtMTM4NFxuICAnMDEwMTAxMDEwMTAxJywgJzAxMDExMDEwMTAwMScsICcwMTAxMTAxMTAxMDAnLCAnMTAwMTExMDExMDEwJywgJzAxMDAxMTAxMTEwMScsXG4gIC8vIDEzODUtMTM4OVxuICAnMDAxMDAxMTAxMTEwJywgJzEwMDEwMDExMDExMCcsICcxMDEwMTAxMDEwMTAnLCAnMTEwMTAxMDEwMTAwJywgJzExMDExMDExMDAxMCcsXG4gIC8vIDEzOTAtMTM5NFxuICAnMDEwMTExMDEwMTAxJywgJzAwMTAxMTAxMTAxMCcsICcxMDAxMDEwMTEwMTEnLCAnMDEwMDEwMTAxMDExJywgJzEwMTAwMTAxMDEwMScsXG4gIC8vIDEzOTUtMTM5OVxuICAnMTAxMTAxMDAxMDAxJywgJzEwMTEwMTEwMDEwMCcsICcxMDExMDExMTAwMDEnLCAnMDEwMTEwMTEwMTAwJywgJzEwMTAxMDExMDEwMScsXG4gIC8vIDE0MDAtMTQwNFxuICAnMTAxMDAxMDEwMTAxJywgJzExMDEwMDEwMDEwMScsICcxMTEwMTAwMTAwMTAnLCAnMTExMDExMDAxMDAxJywgJzAxMTAxMTAxMDEwMCcsXG4gIC8vIDE0MDUtMTQwOVxuICAnMTAxMDExMTAxMDAxJywgJzEwMDEwMTEwMTAxMScsICcwMTAwMTAxMDEwMTEnLCAnMTAxMDEwMDEwMDExJywgJzExMDEwMTAwMTAwMScsXG4gIC8vIDE0MTAtMTQxNFxuICAnMTEwMTEwMTAwMTAwJywgJzExMDExMDExMDAxMCcsICcxMDEwMTAxMTEwMDEnLCAnMDEwMDEwMTExMDEwJywgJzEwMTAwMTAxMTAxMScsXG4gIC8vIDE0MTUtMTQxOVxuICAnMDEwMTAwMTAxMDExJywgJzEwMTAxMDAxMDEwMScsICcxMDExMDAxMDEwMTAnLCAnMTAxMTAxMDEwMTAxJywgJzAxMDEwMTAxMTEwMCcsXG4gIC8vIDE0MjAtMTQyNFxuICAnMDEwMDEwMTExMTAxJywgJzAwMTAwMDExMTEwMScsICcxMDAxMDAwMTExMDEnLCAnMTAxMDEwMDEwMTAxJywgJzEwMTEwMTAwMTAxMCcsXG4gIC8vIDE0MjUtMTQyOVxuICAnMTAxMTAxMDExMDEwJywgJzAxMDEwMTEwMTEwMScsICcwMDEwMTAxMTAxMTAnLCAnMTAwMTAwMTExMDExJywgJzAxMDAxMDAxMTAxMScsXG4gIC8vIDE0MzAtMTQzNFxuICAnMDExMDAxMDEwMTAxJywgJzAxMTAxMDEwMTAwMScsICcwMTExMDEwMTAxMDAnLCAnMTAxMTAxMTAxMDEwJywgJzAxMDEwMTEwMTEwMCcsXG4gIC8vIDE0MzUtMTQzOVxuICAnMTAxMDEwMTAxMTAxJywgJzAxMDEwMTAxMDEwMScsICcxMDExMDAxMDEwMDEnLCAnMTAxMTEwMDEwMDEwJywgJzEwMTExMDEwMTAwMScsXG4gIC8vIDE0NDAtMTQ0NFxuICAnMDEwMTExMDEwMTAwJywgJzEwMTAxMTAxMTAxMCcsICcwMTAxMDEwMTEwMTAnLCAnMTAxMDEwMTAxMDExJywgJzAxMDExMDAxMDEwMScsXG4gIC8vIDE0NDUtMTQ0OVxuICAnMDExMTAxMDAxMDAxJywgJzAxMTEwMTEwMDEwMCcsICcxMDExMTAxMDEwMTAnLCAnMDEwMTEwMTEwMTAxJywgJzAwMTAxMDExMDExMCcsXG4gIC8vIDE0NTAtMTQ1NFxuICAnMTAxMDAxMDEwMTEwJywgJzExMTAwMTAwMTEwMScsICcxMDExMDAxMDAxMDEnLCAnMTAxMTAxMDEwMDEwJywgJzEwMTEwMTEwMTAxMCcsXG4gIC8vIDE0NTUtMTQ1OVxuICAnMDEwMTEwMTAxMTAxJywgJzAwMTAxMDEwMTExMCcsICcxMDAxMDAxMDExMTEnLCAnMDEwMDEwMDEwMTExJywgJzAxMTAwMTAwMTAxMScsXG4gIC8vIDE0NjAtMTQ2NFxuICAnMDExMDEwMTAwMTAxJywgJzAxMTAxMDEwMTEwMCcsICcxMDEwMTEwMTAxMTAnLCAnMDEwMTAxMDExMTAxJywgJzAxMDAxMDAxMTEwMScsXG4gIC8vIDE0NjUtMTQ2OVxuICAnMTAxMDAxMDAxMTAxJywgJzExMDEwMDAxMDExMCcsICcxMTAxMTAwMTAxMDEnLCAnMDEwMTEwMTAxMDEwJywgJzAxMDExMDExMDEwMScsXG4gIC8vIDE0NzAtMTQ3NFxuICAnMDAxMDExMDExMDEwJywgJzEwMDEwMTAxMTAxMScsICcwMTAwMTAxMDExMDEnLCAnMDEwMTEwMDEwMTAxJywgJzAxMTAxMTAwMTAxMCcsXG4gIC8vIDE0NzUtMTQ3OVxuICAnMDExMDExMTAwMTAwJywgJzEwMTAxMTEwMTAxMCcsICcwMTAwMTExMTAxMDEnLCAnMDAxMDEwMTEwMTEwJywgJzEwMDEwMTAxMDExMCcsXG4gIC8vIDE0ODAtMTQ4NFxuICAnMTAxMDEwMTAxMDEwJywgJzEwMTEwMTAxMDEwMCcsICcxMDExMTEwMTAwMTAnLCAnMDEwMTExMDExMDAxJywgJzAwMTAxMTEwMTAxMCcsXG4gIC8vIDE0ODUtMTQ4OVxuICAnMTAwMTAxMTAxMTAxJywgJzAxMDAxMDEwMTEwMScsICcxMDEwMTAwMTAxMDEnLCAnMTAxMTAxMDAxMDEwJywgJzEwMTExMDEwMDEwMScsXG4gIC8vIDE0OTAtMTQ5NFxuICAnMDEwMTEwMTEwMDEwJywgJzEwMDExMDExMDEwMScsICcwMTAwMTEwMTAxMTAnLCAnMTAxMDEwMDEwMTExJywgJzAxMDEwMTAwMDExMScsXG4gIC8vIDE0OTUtMTQ5OVxuICAnMDExMDEwMDEwMDExJywgJzAxMTEwMTAwMTAwMScsICcxMDExMDEwMTAxMDEnLCAnMDEwMTAxMTAxMDEwJywgJzEwMTAwMTEwMTAxMScsXG4gIC8vIDE1MDAtMTUwNFxuICAnMDEwMTAwMTAxMDExJywgJzEwMTAxMDAwMTAxMScsICcxMTAxMDEwMDAxMTAnLCAnMTEwMTEwMTAwMDExJywgJzAxMDExMTAwMTAxMCcsXG4gIC8vIDE1MDUtMTUwOVxuICAnMTAxMDExMDEwMTEwJywgJzAxMDAxMTAxMTAxMScsICcwMDEwMDExMDEwMTEnLCAnMTAwMTAxMDAxMDExJywgJzEwMTAxMDEwMDEwMScsXG4gIC8vIDE1MTAtMTUxNFxuICAnMTAxMTAxMDEwMDEwJywgJzEwMTEwMTEwMTAwMScsICcwMTAxMDExMTAxMDEnLCAnMDAwMTAxMTEwMTEwJywgJzEwMDAxMDExMDExMScsXG4gIC8vIDE1MTUtMTUxOVxuICAnMDAxMDAxMDExMDExJywgJzAxMDEwMDEwMTAxMScsICcwMTAxMDExMDAxMDEnLCAnMDEwMTEwMTEwMTAwJywgJzEwMDExMTAxMTAxMCcsXG4gIC8vIDE1MjAtMTUyNFxuICAnMDEwMDExMTAxMTAxJywgJzAwMDEwMTEwMTEwMScsICcxMDAwMTAxMTAxMTAnLCAnMTAxMDEwMTAwMTEwJywgJzExMDEwMTAxMDAxMCcsXG4gIC8vIDE1MjUtMTUyOVxuICAnMTEwMTEwMTAxMDAxJywgJzAxMDExMTAxMDEwMCcsICcxMDEwMTEwMTEwMTAnLCAnMTAwMTAxMDExMDExJywgJzAxMDAxMDEwMTAxMScsXG4gIC8vIDE1MzAtMTUzNFxuICAnMDExMDAxMDEwMDExJywgJzAxMTEwMDEwMTAwMScsICcwMTExMDExMDAwMTAnLCAnMTAxMTEwMTAxMDAxJywgJzAxMDExMDExMDAxMCcsXG4gIC8vIDE1MzUtMTUzOVxuICAnMTAxMDEwMTEwMTAxJywgJzAxMDEwMTAxMDEwMScsICcxMDExMDAxMDAxMDEnLCAnMTEwMTEwMDEwMDEwJywgJzExMTAxMTAwMTAwMScsXG4gIC8vIDE1NDAtMTU0NFxuICAnMDExMDExMDEwMDEwJywgJzEwMTAxMTEwMTAwMScsICcwMTAxMDExMDEwMTEnLCAnMDEwMDEwMTAxMDExJywgJzEwMTAwMTAxMDEwMScsXG4gIC8vIDE1NDUtMTU0OVxuICAnMTEwMTAwMTAxMDAxJywgJzExMDEwMTAxMDEwMCcsICcxMTAxMTAxMDEwMTAnLCAnMTAwMTEwMTEwMTAxJywgJzAxMDAxMDExMTAxMCcsXG4gIC8vIDE1NTAtMTU1NFxuICAnMTAxMDAwMTExMDExJywgJzAxMDAxMDAxMTAxMScsICcxMDEwMDEwMDExMDEnLCAnMTAxMDEwMTAxMDEwJywgJzEwMTAxMTAxMDEwMScsXG4gIC8vIDE1NTUtMTU1OVxuICAnMDAxMDExMDExMDEwJywgJzEwMDEwMTAxMTEwMScsICcwMTAwMDEwMTExMTAnLCAnMTAxMDAwMTAxMTEwJywgJzExMDAxMDAxMTAxMCcsXG4gIC8vIDE1NjAtMTU2NFxuICAnMTEwMTAxMDEwMTAxJywgJzAxMTAxMDExMDAxMCcsICcwMTEwMTAxMTEwMDEnLCAnMDEwMDEwMTExMDEwJywgJzEwMTAwMTAxMTEwMScsXG4gIC8vIDE1NjUtMTU2OVxuICAnMDEwMTAwMTAxMTAxJywgJzEwMTAxMDAxMDEwMScsICcxMDExMDEwMTAwMTAnLCAnMTAxMTEwMTAxMDAwJywgJzEwMTExMDExMDEwMCcsXG4gIC8vIDE1NzAtMTU3NFxuICAnMDEwMTEwMTExMDAxJywgJzAwMTAxMTAxMTAxMCcsICcxMDAxMDEwMTEwMTAnLCAnMTAxMTAxMDAxMDEwJywgJzExMDExMDEwMDEwMCcsXG4gIC8vIDE1NzUtMTU3OVxuICAnMTExMDExMDEwMDAxJywgJzAxMTAxMTEwMTAwMCcsICcxMDExMDExMDEwMTAnLCAnMDEwMTAxMTAxMTAxJywgJzAxMDEwMDExMDEwMScsXG4gIC8vIDE1ODAtMTU4NFxuICAnMDExMDEwMDEwMTAxJywgJzExMDEwMTAwMTAxMCcsICcxMTAxMTAxMDEwMDAnLCAnMTEwMTExMDEwMTAwJywgJzAxMTAxMTAxMTAxMCcsXG4gIC8vIDE1ODUtMTU4OVxuICAnMDEwMTAxMDExMDExJywgJzAwMTAxMDAxMTEwMScsICcwMTEwMDAxMDEwMTEnLCAnMTAxMTAwMDEwMTAxJywgJzEwMTEwMTAwMTAxMCcsXG4gIC8vIDE1OTAtMTU5NFxuICAnMTAxMTEwMDEwMTAxJywgJzAxMDExMDEwMTAxMCcsICcxMDEwMTAxMDExMTAnLCAnMTAwMTAwMTAxMTEwJywgJzExMDAxMDAwMTExMScsXG4gIC8vIDE1OTUtMTU5OVxuICAnMDEwMTAwMTAwMTExJywgJzAxMTAxMDAxMDEwMScsICcwMTEwMTAxMDEwMTAnLCAnMTAxMDExMDEwMTEwJywgJzAxMDEwMTAxMTEwMScsXG4gIC8vIDE2MDBcbiAgJzAwMTAxMDAxMTEwMSdcbl07XG5cbmZ1bmN0aW9uIGdldERheXNEaWZmKGRhdGUxOiBEYXRlLCBkYXRlMjogRGF0ZSk6IG51bWJlciB7XG4gIC8vIElnbm9yZXMgdGhlIHRpbWUgcGFydCBpbiBkYXRlMSBhbmQgZGF0ZTI6XG4gIGNvbnN0IHRpbWUxID0gRGF0ZS5VVEMoZGF0ZTEuZ2V0RnVsbFllYXIoKSwgZGF0ZTEuZ2V0TW9udGgoKSwgZGF0ZTEuZ2V0RGF0ZSgpKTtcbiAgY29uc3QgdGltZTIgPSBEYXRlLlVUQyhkYXRlMi5nZXRGdWxsWWVhcigpLCBkYXRlMi5nZXRNb250aCgpLCBkYXRlMi5nZXREYXRlKCkpO1xuICBjb25zdCBkaWZmID0gTWF0aC5hYnModGltZTEgLSB0aW1lMik7XG4gIHJldHVybiBNYXRoLnJvdW5kKGRpZmYgLyBPTkVfREFZKTtcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE5nYkNhbGVuZGFySXNsYW1pY1VtYWxxdXJhIGV4dGVuZHMgTmdiQ2FsZW5kYXJJc2xhbWljQ2l2aWwge1xuICAvKipcbiAgKiBSZXR1cm5zIHRoZSBlcXVpdmFsZW50IGlzbGFtaWMoVW1hbHF1cmEpIGRhdGUgdmFsdWUgZm9yIGEgZ2l2ZSBpbnB1dCBHcmVnb3JpYW4gZGF0ZS5cbiAgKiBgZ2RhdGVgIGlzIHMgSlMgRGF0ZSB0byBiZSBjb252ZXJ0ZWQgdG8gSGlqcmkuXG4gICovXG4gIGZyb21HcmVnb3JpYW4oZ0RhdGU6IERhdGUpOiBOZ2JEYXRlIHtcbiAgICBsZXQgaERheSA9IDEsIGhNb250aCA9IDAsIGhZZWFyID0gMTMwMDtcbiAgICBsZXQgZGF5c0RpZmYgPSBnZXREYXlzRGlmZihnRGF0ZSwgR1JFR09SSUFOX0ZJUlNUX0RBVEUpO1xuICAgIGlmIChnRGF0ZS5nZXRUaW1lKCkgLSBHUkVHT1JJQU5fRklSU1RfREFURS5nZXRUaW1lKCkgPj0gMCAmJiBnRGF0ZS5nZXRUaW1lKCkgLSBHUkVHT1JJQU5fTEFTVF9EQVRFLmdldFRpbWUoKSA8PSAwKSB7XG4gICAgICBsZXQgeWVhciA9IDEzMDA7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IE1PTlRIX0xFTkdUSC5sZW5ndGg7IGkrKywgeWVhcisrKSB7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgMTI7IGorKykge1xuICAgICAgICAgIGxldCBudW1PZkRheXMgPSArTU9OVEhfTEVOR1RIW2ldW2pdICsgMjk7XG4gICAgICAgICAgaWYgKGRheXNEaWZmIDw9IG51bU9mRGF5cykge1xuICAgICAgICAgICAgaERheSA9IGRheXNEaWZmICsgMTtcbiAgICAgICAgICAgIGlmIChoRGF5ID4gbnVtT2ZEYXlzKSB7XG4gICAgICAgICAgICAgIGhEYXkgPSAxO1xuICAgICAgICAgICAgICBqKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaiA+IDExKSB7XG4gICAgICAgICAgICAgIGogPSAwO1xuICAgICAgICAgICAgICB5ZWFyKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBoTW9udGggPSBqO1xuICAgICAgICAgICAgaFllYXIgPSB5ZWFyO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBOZ2JEYXRlKGhZZWFyLCBoTW9udGggKyAxLCBoRGF5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGF5c0RpZmYgPSBkYXlzRGlmZiAtIG51bU9mRGF5cztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gc3VwZXIuZnJvbUdyZWdvcmlhbihnRGF0ZSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAqIENvbnZlcnRzIHRoZSBjdXJyZW50IEhpanJpIGRhdGUgdG8gR3JlZ29yaWFuLlxuICAqL1xuICB0b0dyZWdvcmlhbihoRGF0ZTogTmdiRGF0ZSk6IERhdGUge1xuICAgIGNvbnN0IGhZZWFyID0gaERhdGUueWVhcjtcbiAgICBjb25zdCBoTW9udGggPSBoRGF0ZS5tb250aCAtIDE7XG4gICAgY29uc3QgaERheSA9IGhEYXRlLmRheTtcbiAgICBsZXQgZ0RhdGUgPSBuZXcgRGF0ZShHUkVHT1JJQU5fRklSU1RfREFURSk7XG4gICAgbGV0IGRheURpZmYgPSBoRGF5IC0gMTtcbiAgICBpZiAoaFllYXIgPj0gSElKUklfQkVHSU4gJiYgaFllYXIgPD0gSElKUklfRU5EKSB7XG4gICAgICBmb3IgKGxldCB5ID0gMDsgeSA8IGhZZWFyIC0gSElKUklfQkVHSU47IHkrKykge1xuICAgICAgICBmb3IgKGxldCBtID0gMDsgbSA8IDEyOyBtKyspIHtcbiAgICAgICAgICBkYXlEaWZmICs9ICtNT05USF9MRU5HVEhbeV1bbV0gKyAyOTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yIChsZXQgbSA9IDA7IG0gPCBoTW9udGg7IG0rKykge1xuICAgICAgICBkYXlEaWZmICs9ICtNT05USF9MRU5HVEhbaFllYXIgLSBISUpSSV9CRUdJTl1bbV0gKyAyOTtcbiAgICAgIH1cbiAgICAgIGdEYXRlLnNldERhdGUoR1JFR09SSUFOX0ZJUlNUX0RBVEUuZ2V0RGF0ZSgpICsgZGF5RGlmZik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdEYXRlID0gc3VwZXIudG9HcmVnb3JpYW4oaERhdGUpO1xuICAgIH1cbiAgICByZXR1cm4gZ0RhdGU7XG4gIH1cbiAgLyoqXG4gICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRheXMgaW4gYSBzcGVjaWZpYyBIaWpyaSBoTW9udGguXG4gICogYGhNb250aGAgaXMgMSBmb3IgTXVoYXJyYW0sIDIgZm9yIFNhZmFyLCBldGMuXG4gICogYGhZZWFyYCBpcyBhbnkgSGlqcmkgaFllYXIuXG4gICovXG4gIGdldERheXNQZXJNb250aChoTW9udGg6IG51bWJlciwgaFllYXI6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKGhZZWFyID49IEhJSlJJX0JFR0lOICYmIGhZZWFyIDw9IEhJSlJJX0VORCkge1xuICAgICAgY29uc3QgcG9zID0gaFllYXIgLSBISUpSSV9CRUdJTjtcbiAgICAgIHJldHVybiArTU9OVEhfTEVOR1RIW3Bvc11baE1vbnRoIC0gMV0gKyAyOTtcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLmdldERheXNQZXJNb250aChoTW9udGgsIGhZZWFyKTtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/datepicker/jalali/jalali.js b/dist/sunbird-ui-components/esm5/datepicker/jalali/jalali.js new file mode 100644 index 0000000..ce43220 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/datepicker/jalali/jalali.js @@ -0,0 +1,300 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgbDate } from '../ngb-date'; +/** + * Returns the equivalent JS date value for a give input Jalali date. + * `jalaliDate` is an Jalali date to be converted to Gregorian. + * @param {?} jalaliDate + * @return {?} + */ +export function toGregorian(jalaliDate) { + /** @type {?} */ + var jdn = jalaliToJulian(jalaliDate.year, jalaliDate.month, jalaliDate.day); + /** @type {?} */ + var date = julianToGregorian(jdn); + date.setHours(6, 30, 3, 200); + return date; +} +/** + * Returns the equivalent jalali date value for a give input Gregorian date. + * `gdate` is a JS Date to be converted to jalali. + * utc to local + * @param {?} gdate + * @return {?} + */ +export function fromGregorian(gdate) { + /** @type {?} */ + var g2d = gregorianToJulian(gdate.getFullYear(), gdate.getMonth() + 1, gdate.getDate()); + return julianToJalali(g2d); +} +/** + * @param {?} date + * @param {?} yearValue + * @return {?} + */ +export function setJalaliYear(date, yearValue) { + date.year = +yearValue; + return date; +} +/** + * @param {?} date + * @param {?} month + * @return {?} + */ +export function setJalaliMonth(date, month) { + month = +month; + date.year = date.year + Math.floor((month - 1) / 12); + date.month = Math.floor(((month - 1) % 12 + 12) % 12) + 1; + return date; +} +/** + * @param {?} date + * @param {?} day + * @return {?} + */ +export function setJalaliDay(date, day) { + /** @type {?} */ + var mDays = getDaysPerMonth(date.month, date.year); + if (day <= 0) { + while (day <= 0) { + date = setJalaliMonth(date, date.month - 1); + mDays = getDaysPerMonth(date.month, date.year); + day += mDays; + } + } + else if (day > mDays) { + while (day > mDays) { + day -= mDays; + date = setJalaliMonth(date, date.month + 1); + mDays = getDaysPerMonth(date.month, date.year); + } + } + date.day = day; + return date; +} +/** + * @param {?} a + * @param {?} b + * @return {?} + */ +function mod(a, b) { + return a - b * Math.floor(a / b); +} +/** + * @param {?} a + * @param {?} b + * @return {?} + */ +function div(a, b) { + return Math.trunc(a / b); +} +/* + This function determines if the Jalali (Persian) year is + leap (366-day long) or is the common year (365 days), and + finds the day in March (Gregorian calendar) of the first + day of the Jalali year (jalaliYear). + @param jalaliYear Jalali calendar year (-61 to 3177) + @return + leap: number of years since the last leap year (0 to 4) + gYear: Gregorian year of the beginning of Jalali year + march: the March day of Farvardin the 1st (1st day of jalaliYear) + @see: http://www.astro.uni.torun.pl/~kb/Papers/EMP/PersianC-EMP.htm + @see: http://www.fourmilab.ch/documents/calendar/ + */ +/** + * @param {?} jalaliYear + * @return {?} + */ +function jalCal(jalaliYear) { + // Jalali years starting the 33-year rule. + /** @type {?} */ + var breaks = [-61, 9, 38, 199, 426, 686, 756, 818, 1111, 1181, 1210, 1635, 2060, 2097, 2192, 2262, 2324, 2394, 2456, 3178]; + /** @type {?} */ + var breaksLength = breaks.length; + /** @type {?} */ + var gYear = jalaliYear + 621; + /** @type {?} */ + var leapJ = -14; + /** @type {?} */ + var jp = breaks[0]; + if (jalaliYear < jp || jalaliYear >= breaks[breaksLength - 1]) { + throw new Error('Invalid Jalali year ' + jalaliYear); + } + // Find the limiting years for the Jalali year jalaliYear. + /** @type {?} */ + var jump; + for (var i = 1; i < breaksLength; i += 1) { + /** @type {?} */ + var jm = breaks[i]; + jump = jm - jp; + if (jalaliYear < jm) { + break; + } + leapJ = leapJ + div(jump, 33) * 8 + div(mod(jump, 33), 4); + jp = jm; + } + /** @type {?} */ + var n = jalaliYear - jp; + // Find the number of leap years from AD 621 to the beginning + // of the current Jalali year in the Persian calendar. + leapJ = leapJ + div(n, 33) * 8 + div(mod(n, 33) + 3, 4); + if (mod(jump, 33) === 4 && jump - n === 4) { + leapJ += 1; + } + // And the same in the Gregorian calendar (until the year gYear). + /** @type {?} */ + var leapG = div(gYear, 4) - div((div(gYear, 100) + 1) * 3, 4) - 150; + // Determine the Gregorian date of Farvardin the 1st. + /** @type {?} */ + var march = 20 + leapJ - leapG; + // Find how many years have passed since the last leap year. + if (jump - n < 6) { + n = n - jump + div(jump + 4, 33) * 33; + } + /** @type {?} */ + var leap = mod(mod(n + 1, 33) - 1, 4); + if (leap === -1) { + leap = 4; + } + return { leap: leap, gy: gYear, march: march }; +} +/* + Calculates Gregorian and Julian calendar dates from the Julian Day number + (jdn) for the period since jdn=-34839655 (i.e. the year -100100 of both + calendars) to some millions years ahead of the present. + @param jdn Julian Day number + @return + gYear: Calendar year (years BC numbered 0, -1, -2, ...) + gMonth: Calendar month (1 to 12) + gDay: Calendar day of the month M (1 to 28/29/30/31) + */ +/** + * @param {?} julianDayNumber + * @return {?} + */ +function julianToGregorian(julianDayNumber) { + /** @type {?} */ + var j = 4 * julianDayNumber + 139361631; + j = j + div(div(4 * julianDayNumber + 183187720, 146097) * 3, 4) * 4 - 3908; + /** @type {?} */ + var i = div(mod(j, 1461), 4) * 5 + 308; + /** @type {?} */ + var gDay = div(mod(i, 153), 5) + 1; + /** @type {?} */ + var gMonth = mod(div(i, 153), 12) + 1; + /** @type {?} */ + var gYear = div(j, 1461) - 100100 + div(8 - gMonth, 6); + return new Date(gYear, gMonth - 1, gDay); +} +/* + Converts a date of the Jalali calendar to the Julian Day number. + @param jy Jalali year (1 to 3100) + @param jm Jalali month (1 to 12) + @param jd Jalali day (1 to 29/31) + @return Julian Day number + */ +/** + * @param {?} gy + * @param {?} gm + * @param {?} gd + * @return {?} + */ +function gregorianToJulian(gy, gm, gd) { + /** @type {?} */ + var d = div((gy + div(gm - 8, 6) + 100100) * 1461, 4) + div(153 * mod(gm + 9, 12) + 2, 5) + gd - 34840408; + d = d - div(div(gy + 100100 + div(gm - 8, 6), 100) * 3, 4) + 752; + return d; +} +/* + Converts the Julian Day number to a date in the Jalali calendar. + @param julianDayNumber Julian Day number + @return + jalaliYear: Jalali year (1 to 3100) + jalaliMonth: Jalali month (1 to 12) + jalaliDay: Jalali day (1 to 29/31) + */ +/** + * @param {?} julianDayNumber + * @return {?} + */ +function julianToJalali(julianDayNumber) { + /** @type {?} */ + var gy = julianToGregorian(julianDayNumber).getFullYear() // Calculate Gregorian year (gy). + ; + /** @type {?} */ + var jalaliYear = gy - 621; + /** @type {?} */ + var r = jalCal(jalaliYear); + /** @type {?} */ + var gregorianDay = gregorianToJulian(gy, 3, r.march); + /** @type {?} */ + var jalaliDay; + /** @type {?} */ + var jalaliMonth; + /** @type {?} */ + var numberOfDays; + // Find number of days that passed since 1 Farvardin. + numberOfDays = julianDayNumber - gregorianDay; + if (numberOfDays >= 0) { + if (numberOfDays <= 185) { + // The first 6 months. + jalaliMonth = 1 + div(numberOfDays, 31); + jalaliDay = mod(numberOfDays, 31) + 1; + return new NgbDate(jalaliYear, jalaliMonth, jalaliDay); + } + else { + // The remaining months. + numberOfDays -= 186; + } + } + else { + // Previous Jalali year. + jalaliYear -= 1; + numberOfDays += 179; + if (r.leap === 1) { + numberOfDays += 1; + } + } + jalaliMonth = 7 + div(numberOfDays, 30); + jalaliDay = mod(numberOfDays, 30) + 1; + return new NgbDate(jalaliYear, jalaliMonth, jalaliDay); +} +/* + Converts a date of the Jalali calendar to the Julian Day number. + @param jYear Jalali year (1 to 3100) + @param jMonth Jalali month (1 to 12) + @param jDay Jalali day (1 to 29/31) + @return Julian Day number + */ +/** + * @param {?} jYear + * @param {?} jMonth + * @param {?} jDay + * @return {?} + */ +function jalaliToJulian(jYear, jMonth, jDay) { + /** @type {?} */ + var r = jalCal(jYear); + return gregorianToJulian(r.gy, 3, r.march) + (jMonth - 1) * 31 - div(jMonth, 7) * (jMonth - 7) + jDay - 1; +} +/** + * Returns the number of days in a specific jalali month. + * @param {?} month + * @param {?} year + * @return {?} + */ +function getDaysPerMonth(month, year) { + if (month <= 6) { + return 31; + } + if (month <= 11) { + return 30; + } + if (jalCal(year).leap === 0) { + return 30; + } + return 29; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamFsYWxpLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiZGF0ZXBpY2tlci9qYWxhbGkvamFsYWxpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sYUFBYSxDQUFDOzs7Ozs7O0FBTXBDLE1BQU0sVUFBVSxXQUFXLENBQUMsVUFBbUI7O1FBQ3pDLEdBQUcsR0FBRyxjQUFjLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUM7O1FBQ3ZFLElBQUksR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLENBQUM7SUFDakMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM3QixPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7Ozs7Ozs7O0FBT0QsTUFBTSxVQUFVLGFBQWEsQ0FBQyxLQUFXOztRQUNuQyxHQUFHLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3ZGLE9BQU8sY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLENBQUM7Ozs7OztBQUVELE1BQU0sVUFBVSxhQUFhLENBQUMsSUFBYSxFQUFFLFNBQWlCO0lBQzVELElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUM7SUFDdkIsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDOzs7Ozs7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUFDLElBQWEsRUFBRSxLQUFhO0lBQ3pELEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQztJQUNmLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDOzs7Ozs7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLElBQWEsRUFBRSxHQUFXOztRQUNqRCxLQUFLLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQztJQUNsRCxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUU7UUFDWixPQUFPLEdBQUcsSUFBSSxDQUFDLEVBQUU7WUFDZixJQUFJLEdBQUcsY0FBYyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzVDLEtBQUssR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0MsR0FBRyxJQUFJLEtBQUssQ0FBQztTQUNkO0tBQ0Y7U0FBTSxJQUFJLEdBQUcsR0FBRyxLQUFLLEVBQUU7UUFDdEIsT0FBTyxHQUFHLEdBQUcsS0FBSyxFQUFFO1lBQ2xCLEdBQUcsSUFBSSxLQUFLLENBQUM7WUFDYixJQUFJLEdBQUcsY0FBYyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzVDLEtBQUssR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDaEQ7S0FDRjtJQUNELElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ2YsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDOzs7Ozs7QUFFRCxTQUFTLEdBQUcsQ0FBQyxDQUFTLEVBQUUsQ0FBUztJQUMvQixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbkMsQ0FBQzs7Ozs7O0FBRUQsU0FBUyxHQUFHLENBQUMsQ0FBUyxFQUFFLENBQVM7SUFDL0IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFlRCxTQUFTLE1BQU0sQ0FBQyxVQUFrQjs7O1FBRTVCLE1BQU0sR0FDTixDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQzs7UUFDM0csWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNOztRQUM1QixLQUFLLEdBQUcsVUFBVSxHQUFHLEdBQUc7O1FBQzFCLEtBQUssR0FBRyxDQUFDLEVBQUU7O1FBQ1gsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFFbEIsSUFBSSxVQUFVLEdBQUcsRUFBRSxJQUFJLFVBQVUsSUFBSSxNQUFNLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxFQUFFO1FBQzdELE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLEdBQUcsVUFBVSxDQUFDLENBQUM7S0FDdEQ7OztRQUdHLElBQUk7SUFDUixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7O1lBQ2xDLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3BCLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ2YsSUFBSSxVQUFVLEdBQUcsRUFBRSxFQUFFO1lBQ25CLE1BQU07U0FDUDtRQUNELEtBQUssR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDMUQsRUFBRSxHQUFHLEVBQUUsQ0FBQztLQUNUOztRQUNHLENBQUMsR0FBRyxVQUFVLEdBQUcsRUFBRTtJQUV2Qiw2REFBNkQ7SUFDN0Qsc0RBQXNEO0lBQ3RELEtBQUssR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3hELElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDekMsS0FBSyxJQUFJLENBQUMsQ0FBQztLQUNaOzs7UUFHSyxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHOzs7UUFHL0QsS0FBSyxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsS0FBSztJQUVoQyw0REFBNEQ7SUFDNUQsSUFBSSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNoQixDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7S0FDdkM7O1FBQ0csSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JDLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxFQUFFO1FBQ2YsSUFBSSxHQUFHLENBQUMsQ0FBQztLQUNWO0lBRUQsT0FBTyxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFDLENBQUM7QUFDL0MsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBWUQsU0FBUyxpQkFBaUIsQ0FBQyxlQUF1Qjs7UUFDNUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxlQUFlLEdBQUcsU0FBUztJQUN2QyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLGVBQWUsR0FBRyxTQUFTLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7O1FBQ3RFLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRzs7UUFDbEMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUM7O1FBQzlCLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDOztRQUNqQyxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBRXhELE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDM0MsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFTRCxTQUFTLGlCQUFpQixDQUFDLEVBQVUsRUFBRSxFQUFVLEVBQUUsRUFBVTs7UUFDdkQsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLFFBQVE7SUFDekcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxNQUFNLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNqRSxPQUFPLENBQUMsQ0FBQztBQUNYLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFVRCxTQUFTLGNBQWMsQ0FBQyxlQUF1Qjs7UUFDekMsRUFBRSxHQUFHLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFFLGlDQUFpQzs7O1FBRXhGLFVBQVUsR0FBRyxFQUFFLEdBQUcsR0FBRzs7UUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQzs7UUFBRSxZQUFZLEdBQUcsaUJBQWlCLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDOztRQUFFLFNBQVM7O1FBQzFHLFdBQVc7O1FBQUUsWUFBWTtJQUU3QixxREFBcUQ7SUFDckQsWUFBWSxHQUFHLGVBQWUsR0FBRyxZQUFZLENBQUM7SUFDOUMsSUFBSSxZQUFZLElBQUksQ0FBQyxFQUFFO1FBQ3JCLElBQUksWUFBWSxJQUFJLEdBQUcsRUFBRTtZQUN2QixzQkFBc0I7WUFDdEIsV0FBVyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3hDLFNBQVMsR0FBRyxHQUFHLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN0QyxPQUFPLElBQUksT0FBTyxDQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7U0FDeEQ7YUFBTTtZQUNMLHdCQUF3QjtZQUN4QixZQUFZLElBQUksR0FBRyxDQUFDO1NBQ3JCO0tBQ0Y7U0FBTTtRQUNMLHdCQUF3QjtRQUN4QixVQUFVLElBQUksQ0FBQyxDQUFDO1FBQ2hCLFlBQVksSUFBSSxHQUFHLENBQUM7UUFDcEIsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtZQUNoQixZQUFZLElBQUksQ0FBQyxDQUFDO1NBQ25CO0tBQ0Y7SUFDRCxXQUFXLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDeEMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRXRDLE9BQU8sSUFBSSxPQUFPLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUN6RCxDQUFDOzs7Ozs7Ozs7Ozs7OztBQVNELFNBQVMsY0FBYyxDQUFDLEtBQWEsRUFBRSxNQUFjLEVBQUUsSUFBWTs7UUFDN0QsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDckIsT0FBTyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUM1RyxDQUFDOzs7Ozs7O0FBS0QsU0FBUyxlQUFlLENBQUMsS0FBYSxFQUFFLElBQVk7SUFDbEQsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFO1FBQ2QsT0FBTyxFQUFFLENBQUM7S0FDWDtJQUNELElBQUksS0FBSyxJQUFJLEVBQUUsRUFBRTtRQUNmLE9BQU8sRUFBRSxDQUFDO0tBQ1g7SUFDRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO1FBQzNCLE9BQU8sRUFBRSxDQUFDO0tBQ1g7SUFDRCxPQUFPLEVBQUUsQ0FBQztBQUNaLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge05nYkRhdGV9IGZyb20gJy4uL25nYi1kYXRlJztcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBlcXVpdmFsZW50IEpTIGRhdGUgdmFsdWUgZm9yIGEgZ2l2ZSBpbnB1dCBKYWxhbGkgZGF0ZS5cbiAqIGBqYWxhbGlEYXRlYCBpcyBhbiBKYWxhbGkgZGF0ZSB0byBiZSBjb252ZXJ0ZWQgdG8gR3JlZ29yaWFuLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9HcmVnb3JpYW4oamFsYWxpRGF0ZTogTmdiRGF0ZSk6IERhdGUge1xuICBsZXQgamRuID0gamFsYWxpVG9KdWxpYW4oamFsYWxpRGF0ZS55ZWFyLCBqYWxhbGlEYXRlLm1vbnRoLCBqYWxhbGlEYXRlLmRheSk7XG4gIGxldCBkYXRlID0ganVsaWFuVG9HcmVnb3JpYW4oamRuKTtcbiAgZGF0ZS5zZXRIb3Vycyg2LCAzMCwgMywgMjAwKTtcbiAgcmV0dXJuIGRhdGU7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZXF1aXZhbGVudCBqYWxhbGkgZGF0ZSB2YWx1ZSBmb3IgYSBnaXZlIGlucHV0IEdyZWdvcmlhbiBkYXRlLlxuICogYGdkYXRlYCBpcyBhIEpTIERhdGUgdG8gYmUgY29udmVydGVkIHRvIGphbGFsaS5cbiAqIHV0YyB0byBsb2NhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbUdyZWdvcmlhbihnZGF0ZTogRGF0ZSk6IE5nYkRhdGUge1xuICBsZXQgZzJkID0gZ3JlZ29yaWFuVG9KdWxpYW4oZ2RhdGUuZ2V0RnVsbFllYXIoKSwgZ2RhdGUuZ2V0TW9udGgoKSArIDEsIGdkYXRlLmdldERhdGUoKSk7XG4gIHJldHVybiBqdWxpYW5Ub0phbGFsaShnMmQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0SmFsYWxpWWVhcihkYXRlOiBOZ2JEYXRlLCB5ZWFyVmFsdWU6IG51bWJlcik6IE5nYkRhdGUge1xuICBkYXRlLnllYXIgPSAreWVhclZhbHVlO1xuICByZXR1cm4gZGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEphbGFsaU1vbnRoKGRhdGU6IE5nYkRhdGUsIG1vbnRoOiBudW1iZXIpOiBOZ2JEYXRlIHtcbiAgbW9udGggPSArbW9udGg7XG4gIGRhdGUueWVhciA9IGRhdGUueWVhciArIE1hdGguZmxvb3IoKG1vbnRoIC0gMSkgLyAxMik7XG4gIGRhdGUubW9udGggPSBNYXRoLmZsb29yKCgobW9udGggLSAxKSAlIDEyICsgMTIpICUgMTIpICsgMTtcbiAgcmV0dXJuIGRhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRKYWxhbGlEYXkoZGF0ZTogTmdiRGF0ZSwgZGF5OiBudW1iZXIpOiBOZ2JEYXRlIHtcbiAgbGV0IG1EYXlzID0gZ2V0RGF5c1Blck1vbnRoKGRhdGUubW9udGgsIGRhdGUueWVhcik7XG4gIGlmIChkYXkgPD0gMCkge1xuICAgIHdoaWxlIChkYXkgPD0gMCkge1xuICAgICAgZGF0ZSA9IHNldEphbGFsaU1vbnRoKGRhdGUsIGRhdGUubW9udGggLSAxKTtcbiAgICAgIG1EYXlzID0gZ2V0RGF5c1Blck1vbnRoKGRhdGUubW9udGgsIGRhdGUueWVhcik7XG4gICAgICBkYXkgKz0gbURheXM7XG4gICAgfVxuICB9IGVsc2UgaWYgKGRheSA+IG1EYXlzKSB7XG4gICAgd2hpbGUgKGRheSA+IG1EYXlzKSB7XG4gICAgICBkYXkgLT0gbURheXM7XG4gICAgICBkYXRlID0gc2V0SmFsYWxpTW9udGgoZGF0ZSwgZGF0ZS5tb250aCArIDEpO1xuICAgICAgbURheXMgPSBnZXREYXlzUGVyTW9udGgoZGF0ZS5tb250aCwgZGF0ZS55ZWFyKTtcbiAgICB9XG4gIH1cbiAgZGF0ZS5kYXkgPSBkYXk7XG4gIHJldHVybiBkYXRlO1xufVxuXG5mdW5jdGlvbiBtb2QoYTogbnVtYmVyLCBiOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gYSAtIGIgKiBNYXRoLmZsb29yKGEgLyBiKTtcbn1cblxuZnVuY3Rpb24gZGl2KGE6IG51bWJlciwgYjogbnVtYmVyKSB7XG4gIHJldHVybiBNYXRoLnRydW5jKGEgLyBiKTtcbn1cblxuLypcbiBUaGlzIGZ1bmN0aW9uIGRldGVybWluZXMgaWYgdGhlIEphbGFsaSAoUGVyc2lhbikgeWVhciBpc1xuIGxlYXAgKDM2Ni1kYXkgbG9uZykgb3IgaXMgdGhlIGNvbW1vbiB5ZWFyICgzNjUgZGF5cyksIGFuZFxuIGZpbmRzIHRoZSBkYXkgaW4gTWFyY2ggKEdyZWdvcmlhbiBjYWxlbmRhcikgb2YgdGhlIGZpcnN0XG4gZGF5IG9mIHRoZSBKYWxhbGkgeWVhciAoamFsYWxpWWVhcikuXG4gQHBhcmFtIGphbGFsaVllYXIgSmFsYWxpIGNhbGVuZGFyIHllYXIgKC02MSB0byAzMTc3KVxuIEByZXR1cm5cbiBsZWFwOiBudW1iZXIgb2YgeWVhcnMgc2luY2UgdGhlIGxhc3QgbGVhcCB5ZWFyICgwIHRvIDQpXG4gZ1llYXI6IEdyZWdvcmlhbiB5ZWFyIG9mIHRoZSBiZWdpbm5pbmcgb2YgSmFsYWxpIHllYXJcbiBtYXJjaDogdGhlIE1hcmNoIGRheSBvZiBGYXJ2YXJkaW4gdGhlIDFzdCAoMXN0IGRheSBvZiBqYWxhbGlZZWFyKVxuIEBzZWU6IGh0dHA6Ly93d3cuYXN0cm8udW5pLnRvcnVuLnBsL35rYi9QYXBlcnMvRU1QL1BlcnNpYW5DLUVNUC5odG1cbiBAc2VlOiBodHRwOi8vd3d3LmZvdXJtaWxhYi5jaC9kb2N1bWVudHMvY2FsZW5kYXIvXG4gKi9cbmZ1bmN0aW9uIGphbENhbChqYWxhbGlZZWFyOiBudW1iZXIpIHtcbiAgLy8gSmFsYWxpIHllYXJzIHN0YXJ0aW5nIHRoZSAzMy15ZWFyIHJ1bGUuXG4gIGxldCBicmVha3MgPVxuICAgICAgWy02MSwgOSwgMzgsIDE5OSwgNDI2LCA2ODYsIDc1NiwgODE4LCAxMTExLCAxMTgxLCAxMjEwLCAxNjM1LCAyMDYwLCAyMDk3LCAyMTkyLCAyMjYyLCAyMzI0LCAyMzk0LCAyNDU2LCAzMTc4XTtcbiAgY29uc3QgYnJlYWtzTGVuZ3RoID0gYnJlYWtzLmxlbmd0aDtcbiAgY29uc3QgZ1llYXIgPSBqYWxhbGlZZWFyICsgNjIxO1xuICBsZXQgbGVhcEogPSAtMTQ7XG4gIGxldCBqcCA9IGJyZWFrc1swXTtcblxuICBpZiAoamFsYWxpWWVhciA8IGpwIHx8IGphbGFsaVllYXIgPj0gYnJlYWtzW2JyZWFrc0xlbmd0aCAtIDFdKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIEphbGFsaSB5ZWFyICcgKyBqYWxhbGlZZWFyKTtcbiAgfVxuXG4gIC8vIEZpbmQgdGhlIGxpbWl0aW5nIHllYXJzIGZvciB0aGUgSmFsYWxpIHllYXIgamFsYWxpWWVhci5cbiAgbGV0IGp1bXA7XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgYnJlYWtzTGVuZ3RoOyBpICs9IDEpIHtcbiAgICBjb25zdCBqbSA9IGJyZWFrc1tpXTtcbiAgICBqdW1wID0gam0gLSBqcDtcbiAgICBpZiAoamFsYWxpWWVhciA8IGptKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgbGVhcEogPSBsZWFwSiArIGRpdihqdW1wLCAzMykgKiA4ICsgZGl2KG1vZChqdW1wLCAzMyksIDQpO1xuICAgIGpwID0gam07XG4gIH1cbiAgbGV0IG4gPSBqYWxhbGlZZWFyIC0ganA7XG5cbiAgLy8gRmluZCB0aGUgbnVtYmVyIG9mIGxlYXAgeWVhcnMgZnJvbSBBRCA2MjEgdG8gdGhlIGJlZ2lubmluZ1xuICAvLyBvZiB0aGUgY3VycmVudCBKYWxhbGkgeWVhciBpbiB0aGUgUGVyc2lhbiBjYWxlbmRhci5cbiAgbGVhcEogPSBsZWFwSiArIGRpdihuLCAzMykgKiA4ICsgZGl2KG1vZChuLCAzMykgKyAzLCA0KTtcbiAgaWYgKG1vZChqdW1wLCAzMykgPT09IDQgJiYganVtcCAtIG4gPT09IDQpIHtcbiAgICBsZWFwSiArPSAxO1xuICB9XG5cbiAgLy8gQW5kIHRoZSBzYW1lIGluIHRoZSBHcmVnb3JpYW4gY2FsZW5kYXIgKHVudGlsIHRoZSB5ZWFyIGdZZWFyKS5cbiAgY29uc3QgbGVhcEcgPSBkaXYoZ1llYXIsIDQpIC0gZGl2KChkaXYoZ1llYXIsIDEwMCkgKyAxKSAqIDMsIDQpIC0gMTUwO1xuXG4gIC8vIERldGVybWluZSB0aGUgR3JlZ29yaWFuIGRhdGUgb2YgRmFydmFyZGluIHRoZSAxc3QuXG4gIGNvbnN0IG1hcmNoID0gMjAgKyBsZWFwSiAtIGxlYXBHO1xuXG4gIC8vIEZpbmQgaG93IG1hbnkgeWVhcnMgaGF2ZSBwYXNzZWQgc2luY2UgdGhlIGxhc3QgbGVhcCB5ZWFyLlxuICBpZiAoanVtcCAtIG4gPCA2KSB7XG4gICAgbiA9IG4gLSBqdW1wICsgZGl2KGp1bXAgKyA0LCAzMykgKiAzMztcbiAgfVxuICBsZXQgbGVhcCA9IG1vZChtb2QobiArIDEsIDMzKSAtIDEsIDQpO1xuICBpZiAobGVhcCA9PT0gLTEpIHtcbiAgICBsZWFwID0gNDtcbiAgfVxuXG4gIHJldHVybiB7bGVhcDogbGVhcCwgZ3k6IGdZZWFyLCBtYXJjaDogbWFyY2h9O1xufVxuXG4vKlxuIENhbGN1bGF0ZXMgR3JlZ29yaWFuIGFuZCBKdWxpYW4gY2FsZW5kYXIgZGF0ZXMgZnJvbSB0aGUgSnVsaWFuIERheSBudW1iZXJcbiAoamRuKSBmb3IgdGhlIHBlcmlvZCBzaW5jZSBqZG49LTM0ODM5NjU1IChpLmUuIHRoZSB5ZWFyIC0xMDAxMDAgb2YgYm90aFxuIGNhbGVuZGFycykgdG8gc29tZSBtaWxsaW9ucyB5ZWFycyBhaGVhZCBvZiB0aGUgcHJlc2VudC5cbiBAcGFyYW0gamRuIEp1bGlhbiBEYXkgbnVtYmVyXG4gQHJldHVyblxuIGdZZWFyOiBDYWxlbmRhciB5ZWFyICh5ZWFycyBCQyBudW1iZXJlZCAwLCAtMSwgLTIsIC4uLilcbiBnTW9udGg6IENhbGVuZGFyIG1vbnRoICgxIHRvIDEyKVxuIGdEYXk6IENhbGVuZGFyIGRheSBvZiB0aGUgbW9udGggTSAoMSB0byAyOC8yOS8zMC8zMSlcbiAqL1xuZnVuY3Rpb24ganVsaWFuVG9HcmVnb3JpYW4oanVsaWFuRGF5TnVtYmVyOiBudW1iZXIpIHtcbiAgbGV0IGogPSA0ICoganVsaWFuRGF5TnVtYmVyICsgMTM5MzYxNjMxO1xuICBqID0gaiArIGRpdihkaXYoNCAqIGp1bGlhbkRheU51bWJlciArIDE4MzE4NzcyMCwgMTQ2MDk3KSAqIDMsIDQpICogNCAtIDM5MDg7XG4gIGNvbnN0IGkgPSBkaXYobW9kKGosIDE0NjEpLCA0KSAqIDUgKyAzMDg7XG4gIGNvbnN0IGdEYXkgPSBkaXYobW9kKGksIDE1MyksIDUpICsgMTtcbiAgY29uc3QgZ01vbnRoID0gbW9kKGRpdihpLCAxNTMpLCAxMikgKyAxO1xuICBjb25zdCBnWWVhciA9IGRpdihqLCAxNDYxKSAtIDEwMDEwMCArIGRpdig4IC0gZ01vbnRoLCA2KTtcblxuICByZXR1cm4gbmV3IERhdGUoZ1llYXIsIGdNb250aCAtIDEsIGdEYXkpO1xufVxuXG4vKlxuIENvbnZlcnRzIGEgZGF0ZSBvZiB0aGUgSmFsYWxpIGNhbGVuZGFyIHRvIHRoZSBKdWxpYW4gRGF5IG51bWJlci5cbiBAcGFyYW0gankgSmFsYWxpIHllYXIgKDEgdG8gMzEwMClcbiBAcGFyYW0gam0gSmFsYWxpIG1vbnRoICgxIHRvIDEyKVxuIEBwYXJhbSBqZCBKYWxhbGkgZGF5ICgxIHRvIDI5LzMxKVxuIEByZXR1cm4gSnVsaWFuIERheSBudW1iZXJcbiAqL1xuZnVuY3Rpb24gZ3JlZ29yaWFuVG9KdWxpYW4oZ3k6IG51bWJlciwgZ206IG51bWJlciwgZ2Q6IG51bWJlcikge1xuICBsZXQgZCA9IGRpdigoZ3kgKyBkaXYoZ20gLSA4LCA2KSArIDEwMDEwMCkgKiAxNDYxLCA0KSArIGRpdigxNTMgKiBtb2QoZ20gKyA5LCAxMikgKyAyLCA1KSArIGdkIC0gMzQ4NDA0MDg7XG4gIGQgPSBkIC0gZGl2KGRpdihneSArIDEwMDEwMCArIGRpdihnbSAtIDgsIDYpLCAxMDApICogMywgNCkgKyA3NTI7XG4gIHJldHVybiBkO1xufVxuXG4vKlxuIENvbnZlcnRzIHRoZSBKdWxpYW4gRGF5IG51bWJlciB0byBhIGRhdGUgaW4gdGhlIEphbGFsaSBjYWxlbmRhci5cbiBAcGFyYW0ganVsaWFuRGF5TnVtYmVyIEp1bGlhbiBEYXkgbnVtYmVyXG4gQHJldHVyblxuIGphbGFsaVllYXI6IEphbGFsaSB5ZWFyICgxIHRvIDMxMDApXG4gamFsYWxpTW9udGg6IEphbGFsaSBtb250aCAoMSB0byAxMilcbiBqYWxhbGlEYXk6IEphbGFsaSBkYXkgKDEgdG8gMjkvMzEpXG4gKi9cbmZ1bmN0aW9uIGp1bGlhblRvSmFsYWxpKGp1bGlhbkRheU51bWJlcjogbnVtYmVyKSB7XG4gIGxldCBneSA9IGp1bGlhblRvR3JlZ29yaWFuKGp1bGlhbkRheU51bWJlcikuZ2V0RnVsbFllYXIoKSAgLy8gQ2FsY3VsYXRlIEdyZWdvcmlhbiB5ZWFyIChneSkuXG4gICAgICAsXG4gICAgICBqYWxhbGlZZWFyID0gZ3kgLSA2MjEsIHIgPSBqYWxDYWwoamFsYWxpWWVhciksIGdyZWdvcmlhbkRheSA9IGdyZWdvcmlhblRvSnVsaWFuKGd5LCAzLCByLm1hcmNoKSwgamFsYWxpRGF5LFxuICAgICAgamFsYWxpTW9udGgsIG51bWJlck9mRGF5cztcblxuICAvLyBGaW5kIG51bWJlciBvZiBkYXlzIHRoYXQgcGFzc2VkIHNpbmNlIDEgRmFydmFyZGluLlxuICBudW1iZXJPZkRheXMgPSBqdWxpYW5EYXlOdW1iZXIgLSBncmVnb3JpYW5EYXk7XG4gIGlmIChudW1iZXJPZkRheXMgPj0gMCkge1xuICAgIGlmIChudW1iZXJPZkRheXMgPD0gMTg1KSB7XG4gICAgICAvLyBUaGUgZmlyc3QgNiBtb250aHMuXG4gICAgICBqYWxhbGlNb250aCA9IDEgKyBkaXYobnVtYmVyT2ZEYXlzLCAzMSk7XG4gICAgICBqYWxhbGlEYXkgPSBtb2QobnVtYmVyT2ZEYXlzLCAzMSkgKyAxO1xuICAgICAgcmV0dXJuIG5ldyBOZ2JEYXRlKGphbGFsaVllYXIsIGphbGFsaU1vbnRoLCBqYWxhbGlEYXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGUgcmVtYWluaW5nIG1vbnRocy5cbiAgICAgIG51bWJlck9mRGF5cyAtPSAxODY7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFByZXZpb3VzIEphbGFsaSB5ZWFyLlxuICAgIGphbGFsaVllYXIgLT0gMTtcbiAgICBudW1iZXJPZkRheXMgKz0gMTc5O1xuICAgIGlmIChyLmxlYXAgPT09IDEpIHtcbiAgICAgIG51bWJlck9mRGF5cyArPSAxO1xuICAgIH1cbiAgfVxuICBqYWxhbGlNb250aCA9IDcgKyBkaXYobnVtYmVyT2ZEYXlzLCAzMCk7XG4gIGphbGFsaURheSA9IG1vZChudW1iZXJPZkRheXMsIDMwKSArIDE7XG5cbiAgcmV0dXJuIG5ldyBOZ2JEYXRlKGphbGFsaVllYXIsIGphbGFsaU1vbnRoLCBqYWxhbGlEYXkpO1xufVxuXG4vKlxuIENvbnZlcnRzIGEgZGF0ZSBvZiB0aGUgSmFsYWxpIGNhbGVuZGFyIHRvIHRoZSBKdWxpYW4gRGF5IG51bWJlci5cbiBAcGFyYW0galllYXIgSmFsYWxpIHllYXIgKDEgdG8gMzEwMClcbiBAcGFyYW0gak1vbnRoIEphbGFsaSBtb250aCAoMSB0byAxMilcbiBAcGFyYW0gakRheSBKYWxhbGkgZGF5ICgxIHRvIDI5LzMxKVxuIEByZXR1cm4gSnVsaWFuIERheSBudW1iZXJcbiAqL1xuZnVuY3Rpb24gamFsYWxpVG9KdWxpYW4oalllYXI6IG51bWJlciwgak1vbnRoOiBudW1iZXIsIGpEYXk6IG51bWJlcikge1xuICBsZXQgciA9IGphbENhbChqWWVhcik7XG4gIHJldHVybiBncmVnb3JpYW5Ub0p1bGlhbihyLmd5LCAzLCByLm1hcmNoKSArIChqTW9udGggLSAxKSAqIDMxIC0gZGl2KGpNb250aCwgNykgKiAoak1vbnRoIC0gNykgKyBqRGF5IC0gMTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGF5cyBpbiBhIHNwZWNpZmljIGphbGFsaSBtb250aC5cbiAqL1xuZnVuY3Rpb24gZ2V0RGF5c1Blck1vbnRoKG1vbnRoOiBudW1iZXIsIHllYXI6IG51bWJlcik6IG51bWJlciB7XG4gIGlmIChtb250aCA8PSA2KSB7XG4gICAgcmV0dXJuIDMxO1xuICB9XG4gIGlmIChtb250aCA8PSAxMSkge1xuICAgIHJldHVybiAzMDtcbiAgfVxuICBpZiAoamFsQ2FsKHllYXIpLmxlYXAgPT09IDApIHtcbiAgICByZXR1cm4gMzA7XG4gIH1cbiAgcmV0dXJuIDI5O1xufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/datepicker/jalali/ngb-calendar-persian.js b/dist/sunbird-ui-components/esm5/datepicker/jalali/ngb-calendar-persian.js new file mode 100644 index 0000000..ed013e7 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/datepicker/jalali/ngb-calendar-persian.js @@ -0,0 +1,154 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import * as tslib_1 from "tslib"; +import { Injectable } from '@angular/core'; +import { NgbDate } from '../ngb-date'; +import { NgbCalendar } from '../ngb-calendar'; +import { isInteger } from '../../util/util'; +import { fromGregorian, setJalaliDay, setJalaliMonth, setJalaliYear, toGregorian } from './jalali'; +var NgbCalendarPersian = /** @class */ (function (_super) { + tslib_1.__extends(NgbCalendarPersian, _super); + function NgbCalendarPersian() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * @return {?} + */ + NgbCalendarPersian.prototype.getDaysPerWeek = /** + * @return {?} + */ + function () { return 7; }; + /** + * @return {?} + */ + NgbCalendarPersian.prototype.getMonths = /** + * @return {?} + */ + function () { return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; }; + /** + * @return {?} + */ + NgbCalendarPersian.prototype.getWeeksPerMonth = /** + * @return {?} + */ + function () { return 6; }; + /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + NgbCalendarPersian.prototype.getNext = /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + function (date, period, number) { + if (period === void 0) { period = 'd'; } + if (number === void 0) { number = 1; } + date = new NgbDate(date.year, date.month, date.day); + switch (period) { + case 'y': + date = setJalaliYear(date, date.year + number); + date.month = 1; + date.day = 1; + return date; + case 'm': + date = setJalaliMonth(date, date.month + number); + date.day = 1; + return date; + case 'd': + return setJalaliDay(date, date.day + number); + default: + return date; + } + }; + /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + NgbCalendarPersian.prototype.getPrev = /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + function (date, period, number) { + if (period === void 0) { period = 'd'; } + if (number === void 0) { number = 1; } + return this.getNext(date, period, -number); + }; + /** + * @param {?} date + * @return {?} + */ + NgbCalendarPersian.prototype.getWeekday = /** + * @param {?} date + * @return {?} + */ + function (date) { + /** @type {?} */ + var day = toGregorian(date).getDay(); + // in JS Date Sun=0, in ISO 8601 Sun=7 + return day === 0 ? 7 : day; + }; + /** + * @param {?} week + * @param {?} firstDayOfWeek + * @return {?} + */ + NgbCalendarPersian.prototype.getWeekNumber = /** + * @param {?} week + * @param {?} firstDayOfWeek + * @return {?} + */ + function (week, firstDayOfWeek) { + // in JS Date Sun=0, in ISO 8601 Sun=7 + if (firstDayOfWeek === 7) { + firstDayOfWeek = 0; + } + /** @type {?} */ + var thursdayIndex = (4 + 7 - firstDayOfWeek) % 7; + /** @type {?} */ + var date = week[thursdayIndex]; + /** @type {?} */ + var jsDate = toGregorian(date); + jsDate.setDate(jsDate.getDate() + 4 - (jsDate.getDay() || 7)); // Thursday + // Thursday + /** @type {?} */ + var time = jsDate.getTime(); + /** @type {?} */ + var startDate = toGregorian(new NgbDate(date.year, 1, 1)); + return Math.floor(Math.round((time - startDate.getTime()) / 86400000) / 7) + 1; + }; + /** + * @return {?} + */ + NgbCalendarPersian.prototype.getToday = /** + * @return {?} + */ + function () { return fromGregorian(new Date()); }; + /** + * @param {?} date + * @return {?} + */ + NgbCalendarPersian.prototype.isValid = /** + * @param {?} date + * @return {?} + */ + function (date) { + return date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day) && + !isNaN(toGregorian(date).getTime()); + }; + NgbCalendarPersian.decorators = [ + { type: Injectable } + ]; + return NgbCalendarPersian; +}(NgbCalendar)); +export { NgbCalendarPersian }; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdiLWNhbGVuZGFyLXBlcnNpYW4uanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJkYXRlcGlja2VyL2phbGFsaS9uZ2ItY2FsZW5kYXItcGVyc2lhbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNwQyxPQUFPLEVBQUMsV0FBVyxFQUFZLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRTFDLE9BQU8sRUFBQyxhQUFhLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBRWpHO0lBQ3dDLDhDQUFXO0lBRG5EOztJQTBEQSxDQUFDOzs7O0lBeERDLDJDQUFjOzs7SUFBZCxjQUFtQixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Ozs7SUFFOUIsc0NBQVM7OztJQUFULGNBQWMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7O0lBRS9ELDZDQUFnQjs7O0lBQWhCLGNBQXFCLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQzs7Ozs7OztJQUVoQyxvQ0FBTzs7Ozs7O0lBQVAsVUFBUSxJQUFhLEVBQUUsTUFBdUIsRUFBRSxNQUFVO1FBQW5DLHVCQUFBLEVBQUEsWUFBdUI7UUFBRSx1QkFBQSxFQUFBLFVBQVU7UUFDeEQsSUFBSSxHQUFHLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVB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QyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDMUMsQ0FBQzs7Z0JBekRGLFVBQVU7O0lBMERYLHlCQUFDO0NBQUEsQUExREQsQ0FDd0MsV0FBVyxHQXlEbEQ7U0F6RFksa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TmdiRGF0ZX0gZnJvbSAnLi4vbmdiLWRhdGUnO1xuaW1wb3J0IHtOZ2JDYWxlbmRhciwgTmdiUGVyaW9kfSBmcm9tICcuLi9uZ2ItY2FsZW5kYXInO1xuaW1wb3J0IHtpc0ludGVnZXJ9IGZyb20gJy4uLy4uL3V0aWwvdXRpbCc7XG5cbmltcG9ydCB7ZnJvbUdyZWdvcmlhbiwgc2V0SmFsYWxpRGF5LCBzZXRKYWxhbGlNb250aCwgc2V0SmFsYWxpWWVhciwgdG9HcmVnb3JpYW59IGZyb20gJy4vamFsYWxpJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE5nYkNhbGVuZGFyUGVyc2lhbiBleHRlbmRzIE5nYkNhbGVuZGFyIHtcbiAgZ2V0RGF5c1BlcldlZWsoKSB7IHJldHVybiA3OyB9XG5cbiAgZ2V0TW9udGhzKCkgeyByZXR1cm4gWzEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTJdOyB9XG5cbiAgZ2V0V2Vla3NQZXJNb250aCgpIHsgcmV0dXJuIDY7IH1cblxuICBnZXROZXh0KGRhdGU6IE5nYkRhdGUsIHBlcmlvZDogTmdiUGVyaW9kID0gJ2QnLCBudW1iZXIgPSAxKSB7XG4gICAgZGF0ZSA9IG5ldyBOZ2JEYXRlKGRhdGUueWVhciwgZGF0ZS5tb250aCwgZGF0ZS5kYXkpO1xuXG4gICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgIGNhc2UgJ3knOlxuICAgICAgICBkYXRlID0gc2V0SmFsYWxpWWVhcihkYXRlLCBkYXRlLnllYXIgKyBudW1iZXIpO1xuICAgICAgICBkYXRlLm1vbnRoID0gMTtcbiAgICAgICAgZGF0ZS5kYXkgPSAxO1xuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICAgIGNhc2UgJ20nOlxuICAgICAgICBkYXRlID0gc2V0SmFsYWxpTW9udGgoZGF0ZSwgZGF0ZS5tb250aCArIG51bWJlcik7XG4gICAgICAgIGRhdGUuZGF5ID0gMTtcbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgICBjYXNlICdkJzpcbiAgICAgICAgcmV0dXJuIHNldEphbGFsaURheShkYXRlLCBkYXRlLmRheSArIG51bWJlcik7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG4gIH1cblxuICBnZXRQcmV2KGRhdGU6IE5nYkRhdGUsIHBlcmlvZDogTmdiUGVyaW9kID0gJ2QnLCBudW1iZXIgPSAxKSB7IHJldHVybiB0aGlzLmdldE5leHQoZGF0ZSwgcGVyaW9kLCAtbnVtYmVyKTsgfVxuXG4gIGdldFdlZWtkYXkoZGF0ZTogTmdiRGF0ZSkge1xuICAgIGNvbnN0IGRheSA9IHRvR3JlZ29yaWFuKGRhdGUpLmdldERheSgpO1xuICAgIC8vIGluIEpTIERhdGUgU3VuPTAsIGluIElTTyA4NjAxIFN1bj03XG4gICAgcmV0dXJuIGRheSA9PT0gMCA/IDcgOiBkYXk7XG4gIH1cblxuICBnZXRXZWVrTnVtYmVyKHdlZWs6IE5nYkRhdGVbXSwgZmlyc3REYXlPZldlZWs6IG51bWJlcikge1xuICAgIC8vIGluIEpTIERhdGUgU3VuPTAsIGluIElTTyA4NjAxIFN1bj03XG4gICAgaWYgKGZpcnN0RGF5T2ZXZWVrID09PSA3KSB7XG4gICAgICBmaXJzdERheU9mV2VlayA9IDA7XG4gICAgfVxuXG4gICAgY29uc3QgdGh1cnNkYXlJbmRleCA9ICg0ICsgNyAtIGZpcnN0RGF5T2ZXZWVrKSAlIDc7XG4gICAgY29uc3QgZGF0ZSA9IHdlZWtbdGh1cnNkYXlJbmRleF07XG5cbiAgICBjb25zdCBqc0RhdGUgPSB0b0dyZWdvcmlhbihkYXRlKTtcbiAgICBqc0RhdGUuc2V0RGF0ZShqc0RhdGUuZ2V0RGF0ZSgpICsgNCAtIChqc0RhdGUuZ2V0RGF5KCkgfHwgNykpOyAgLy8gVGh1cnNkYXlcbiAgICBjb25zdCB0aW1lID0ganNEYXRlLmdldFRpbWUoKTtcbiAgICBjb25zdCBzdGFydERhdGUgPSB0b0dyZWdvcmlhbihuZXcgTmdiRGF0ZShkYXRlLnllYXIsIDEsIDEpKTtcbiAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJvdW5kKCh0aW1lIC0gc3RhcnREYXRlLmdldFRpbWUoKSkgLyA4NjQwMDAwMCkgLyA3KSArIDE7XG4gIH1cblxuICBnZXRUb2RheSgpOiBOZ2JEYXRlIHsgcmV0dXJuIGZyb21HcmVnb3JpYW4obmV3IERhdGUoKSk7IH1cblxuICBpc1ZhbGlkKGRhdGU6IE5nYkRhdGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZGF0ZSAmJiBpc0ludGVnZXIoZGF0ZS55ZWFyKSAmJiBpc0ludGVnZXIoZGF0ZS5tb250aCkgJiYgaXNJbnRlZ2VyKGRhdGUuZGF5KSAmJlxuICAgICAgICAhaXNOYU4odG9HcmVnb3JpYW4oZGF0ZSkuZ2V0VGltZSgpKTtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/datepicker/ngb-calendar.js b/dist/sunbird-ui-components/esm5/datepicker/ngb-calendar.js new file mode 100644 index 0000000..fb1e639 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/datepicker/ngb-calendar.js @@ -0,0 +1,287 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import * as tslib_1 from "tslib"; +import { NgbDate } from './ngb-date'; +import { Injectable } from '@angular/core'; +import { isInteger } from '../util/util'; +import * as i0 from "@angular/core"; +/** + * @param {?} jsDate + * @return {?} + */ +export function fromJSDate(jsDate) { + return new NgbDate(jsDate.getFullYear(), jsDate.getMonth() + 1, jsDate.getDate()); +} +/** + * @param {?} date + * @return {?} + */ +export function toJSDate(date) { + /** @type {?} */ + var jsDate = new Date(date.year, date.month - 1, date.day, 12); + // this is done avoid 30 -> 1930 conversion + if (!isNaN(jsDate.getTime())) { + jsDate.setFullYear(date.year); + } + return jsDate; +} +/** + * @return {?} + */ +export function NGB_DATEPICKER_CALENDAR_FACTORY() { + return new NgbCalendarGregorian(); +} +/** + * A service that represents the calendar used by the datepicker. + * + * The default implementation uses the Gregorian calendar. You can inject it in your own + * implementations if necessary to simplify `NgbDate` calculations. + * @abstract + */ +var NgbCalendar = /** @class */ (function () { + function NgbCalendar() { + } + NgbCalendar.decorators = [ + { type: Injectable, args: [{ providedIn: 'root', useFactory: NGB_DATEPICKER_CALENDAR_FACTORY },] } + ]; + /** @nocollapse */ NgbCalendar.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: NGB_DATEPICKER_CALENDAR_FACTORY, token: NgbCalendar, providedIn: "root" }); + return NgbCalendar; +}()); +export { NgbCalendar }; +if (false) { + /** + * Returns the number of days per week. + * @abstract + * @return {?} + */ + NgbCalendar.prototype.getDaysPerWeek = function () { }; + /** + * Returns an array of months per year. + * + * With default calendar we use ISO 8601 and return [1, 2, ..., 12]; + * @abstract + * @param {?=} year + * @return {?} + */ + NgbCalendar.prototype.getMonths = function (year) { }; + /** + * Returns the number of weeks per month. + * @abstract + * @return {?} + */ + NgbCalendar.prototype.getWeeksPerMonth = function () { }; + /** + * Returns the weekday number for a given day. + * + * With the default calendar we use ISO 8601: 'weekday' is 1=Mon ... 7=Sun + * @abstract + * @param {?} date + * @return {?} + */ + NgbCalendar.prototype.getWeekday = function (date) { }; + /** + * Adds a number of years, months or days to a given date. + * + * * `period` can be `y`, `m` or `d` and defaults to day. + * * `number` defaults to 1. + * + * Always returns a new date. + * @abstract + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + NgbCalendar.prototype.getNext = function (date, period, number) { }; + /** + * Subtracts a number of years, months or days from a given date. + * + * * `period` can be `y`, `m` or `d` and defaults to day. + * * `number` defaults to 1. + * + * Always returns a new date. + * @abstract + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + NgbCalendar.prototype.getPrev = function (date, period, number) { }; + /** + * Returns the week number for a given week. + * @abstract + * @param {?} week + * @param {?} firstDayOfWeek + * @return {?} + */ + NgbCalendar.prototype.getWeekNumber = function (week, firstDayOfWeek) { }; + /** + * Returns the today's date. + * @abstract + * @return {?} + */ + NgbCalendar.prototype.getToday = function () { }; + /** + * Checks if a date is valid in the current calendar. + * @abstract + * @param {?} date + * @return {?} + */ + NgbCalendar.prototype.isValid = function (date) { }; +} +var NgbCalendarGregorian = /** @class */ (function (_super) { + tslib_1.__extends(NgbCalendarGregorian, _super); + function NgbCalendarGregorian() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * @return {?} + */ + NgbCalendarGregorian.prototype.getDaysPerWeek = /** + * @return {?} + */ + function () { return 7; }; + /** + * @return {?} + */ + NgbCalendarGregorian.prototype.getMonths = /** + * @return {?} + */ + function () { return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; }; + /** + * @return {?} + */ + NgbCalendarGregorian.prototype.getWeeksPerMonth = /** + * @return {?} + */ + function () { return 6; }; + /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + NgbCalendarGregorian.prototype.getNext = /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + function (date, period, number) { + if (period === void 0) { period = 'd'; } + if (number === void 0) { number = 1; } + /** @type {?} */ + var jsDate = toJSDate(date); + switch (period) { + case 'y': + return new NgbDate(date.year + number, 1, 1); + case 'm': + jsDate = new Date(date.year, date.month + number - 1, 1, 12); + break; + case 'd': + jsDate.setDate(jsDate.getDate() + number); + break; + default: + return date; + } + return fromJSDate(jsDate); + }; + /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + NgbCalendarGregorian.prototype.getPrev = /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + function (date, period, number) { + if (period === void 0) { period = 'd'; } + if (number === void 0) { number = 1; } + return this.getNext(date, period, -number); + }; + /** + * @param {?} date + * @return {?} + */ + NgbCalendarGregorian.prototype.getWeekday = /** + * @param {?} date + * @return {?} + */ + function (date) { + /** @type {?} */ + var jsDate = toJSDate(date); + /** @type {?} */ + var day = jsDate.getDay(); + // in JS Date Sun=0, in ISO 8601 Sun=7 + return day === 0 ? 7 : day; + }; + /** + * @param {?} week + * @param {?} firstDayOfWeek + * @return {?} + */ + NgbCalendarGregorian.prototype.getWeekNumber = /** + * @param {?} week + * @param {?} firstDayOfWeek + * @return {?} + */ + function (week, firstDayOfWeek) { + // in JS Date Sun=0, in ISO 8601 Sun=7 + if (firstDayOfWeek === 7) { + firstDayOfWeek = 0; + } + /** @type {?} */ + var thursdayIndex = (4 + 7 - firstDayOfWeek) % 7; + /** @type {?} */ + var date = week[thursdayIndex]; + /** @type {?} */ + var jsDate = toJSDate(date); + jsDate.setDate(jsDate.getDate() + 4 - (jsDate.getDay() || 7)); // Thursday + // Thursday + /** @type {?} */ + var time = jsDate.getTime(); + jsDate.setMonth(0); // Compare with Jan 1 + jsDate.setDate(1); + return Math.floor(Math.round((time - jsDate.getTime()) / 86400000) / 7) + 1; + }; + /** + * @return {?} + */ + NgbCalendarGregorian.prototype.getToday = /** + * @return {?} + */ + function () { return fromJSDate(new Date()); }; + /** + * @param {?} date + * @return {?} + */ + NgbCalendarGregorian.prototype.isValid = /** + * @param {?} date + * @return {?} + */ + function (date) { + if (!date || !isInteger(date.year) || !isInteger(date.month) || !isInteger(date.day)) { + return false; + } + // year 0 doesn't exist in Gregorian calendar + if (date.year === 0) { + return false; + } + /** @type {?} */ + var jsDate = toJSDate(date); + return !isNaN(jsDate.getTime()) && jsDate.getFullYear() === date.year && jsDate.getMonth() + 1 === date.month && + jsDate.getDate() === date.day; + }; + NgbCalendarGregorian.decorators = [ + { type: Injectable } + ]; + return NgbCalendarGregorian; +}(NgbCalendar)); +export { NgbCalendarGregorian }; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdiLWNhbGVuZGFyLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiZGF0ZXBpY2tlci9uZ2ItY2FsZW5kYXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ25DLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGNBQWMsQ0FBQzs7Ozs7O0FBRXZDLE1BQU0sVUFBVSxVQUFVLENBQUMsTUFBWTtJQUNyQyxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ3BGLENBQUM7Ozs7O0FBQ0QsTUFBTSxVQUFVLFFBQVEsQ0FBQyxJQUFhOztRQUM5QixNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztJQUNoRSwyQ0FBMkM7SUFDM0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRTtRQUM1QixNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUMvQjtJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7Ozs7QUFJRCxNQUFNLFVBQVUsK0JBQStCO0lBQzdDLE9BQU8sSUFBSSxvQkFBb0IsRUFBRSxDQUFDO0FBQ3BDLENBQUM7Ozs7Ozs7O0FBUUQ7SUFBQTtLQTREQzs7Z0JBNURBLFVBQVUsU0FBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLCtCQUEr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QUFJLENBQUMsS0FBSztZQUN6RyxNQUFNLENBQUMsT0FBTyxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNwQyxDQUFDOztnQkFyRUYsVUFBVTs7SUFzRVgsMkJBQUM7Q0FBQSxBQXRFRCxDQUMwQyxXQUFXLEdBcUVwRDtTQXJFWSxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge05nYkRhdGV9IGZyb20gJy4vbmdiLWRhdGUnO1xuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7aXNJbnRlZ2VyfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbUpTRGF0ZShqc0RhdGU6IERhdGUpIHtcbiAgcmV0dXJuIG5ldyBOZ2JEYXRlKGpzRGF0ZS5nZXRGdWxsWWVhcigpLCBqc0RhdGUuZ2V0TW9udGgoKSArIDEsIGpzRGF0ZS5nZXREYXRlKCkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRvSlNEYXRlKGRhdGU6IE5nYkRhdGUpIHtcbiAgY29uc3QganNEYXRlID0gbmV3IERhdGUoZGF0ZS55ZWFyLCBkYXRlLm1vbnRoIC0gMSwgZGF0ZS5kYXksIDEyKTtcbiAgLy8gdGhpcyBpcyBkb25lIGF2b2lkIDMwIC0+IDE5MzAgY29udmVyc2lvblxuICBpZiAoIWlzTmFOKGpzRGF0ZS5nZXRUaW1lKCkpKSB7XG4gICAganNEYXRlLnNldEZ1bGxZZWFyKGRhdGUueWVhcik7XG4gIH1cbiAgcmV0dXJuIGpzRGF0ZTtcbn1cblxuZXhwb3J0IHR5cGUgTmdiUGVyaW9kID0gJ3knIHwgJ20nIHwgJ2QnO1xuXG5leHBvcnQgZnVuY3Rpb24gTkdCX0RBVEVQSUNLRVJfQ0FMRU5EQVJfRkFDVE9SWSgpIHtcbiAgcmV0dXJuIG5ldyBOZ2JDYWxlbmRhckdyZWdvcmlhbigpO1xufVxuXG4vKipcbiAqIEEgc2VydmljZSB0aGF0IHJlcHJlc2VudHMgdGhlIGNhbGVuZGFyIHVzZWQgYnkgdGhlIGRhdGVwaWNrZXIuXG4gKlxuICogVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gdXNlcyB0aGUgR3JlZ29yaWFuIGNhbGVuZGFyLiBZb3UgY2FuIGluamVjdCBpdCBpbiB5b3VyIG93blxuICogaW1wbGVtZW50YXRpb25zIGlmIG5lY2Vzc2FyeSB0byBzaW1wbGlmeSBgTmdiRGF0ZWAgY2FsY3VsYXRpb25zLlxuICovXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnLCB1c2VGYWN0b3J5OiBOR0JfREFURVBJQ0tFUl9DQUxFTkRBUl9GQUNUT1JZfSlcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOZ2JDYWxlbmRhciB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGF5cyBwZXIgd2Vlay5cbiAgICovXG4gIGFic3RyYWN0IGdldERheXNQZXJXZWVrKCk6IG51bWJlcjtcblxuICAvKipcbiAgICogUmV0dXJucyBhbiBhcnJheSBvZiBtb250aHMgcGVyIHllYXIuXG4gICAqXG4gICAqIFdpdGggZGVmYXVsdCBjYWxlbmRhciB3ZSB1c2UgSVNPIDg2MDEgYW5kIHJldHVybiBbMSwgMiwgLi4uLCAxMl07XG4gICAqL1xuICBhYnN0cmFjdCBnZXRNb250aHMoeWVhcj86IG51bWJlcik6IG51bWJlcltdO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygd2Vla3MgcGVyIG1vbnRoLlxuICAgKi9cbiAgYWJzdHJhY3QgZ2V0V2Vla3NQZXJNb250aCgpOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHdlZWtkYXkgbnVtYmVyIGZvciBhIGdpdmVuIGRheS5cbiAgICpcbiAgICogV2l0aCB0aGUgZGVmYXVsdCBjYWxlbmRhciB3ZSB1c2UgSVNPIDg2MDE6ICd3ZWVrZGF5JyBpcyAxPU1vbiAuLi4gNz1TdW5cbiAgICovXG4gIGFic3RyYWN0IGdldFdlZWtkYXkoZGF0ZTogTmdiRGF0ZSk6IG51bWJlcjtcblxuICAvKipcbiAgICogQWRkcyBhIG51bWJlciBvZiB5ZWFycywgbW9udGhzIG9yIGRheXMgdG8gYSBnaXZlbiBkYXRlLlxuICAgKlxuICAgKiAqIGBwZXJpb2RgIGNhbiBiZSBgeWAsIGBtYCBvciBgZGAgYW5kIGRlZmF1bHRzIHRvIGRheS5cbiAgICogKiBgbnVtYmVyYCBkZWZhdWx0cyB0byAxLlxuICAgKlxuICAgKiBBbHdheXMgcmV0dXJucyBhIG5ldyBkYXRlLlxuICAgKi9cbiAgYWJzdHJhY3QgZ2V0TmV4dChkYXRlOiBOZ2JEYXRlLCBwZXJpb2Q/OiBOZ2JQZXJpb2QsIG51bWJlcj86IG51bWJlcik6IE5nYkRhdGU7XG5cbiAgLyoqXG4gICAqIFN1YnRyYWN0cyBhIG51bWJlciBvZiB5ZWFycywgbW9udGhzIG9yIGRheXMgZnJvbSBhIGdpdmVuIGRhdGUuXG4gICAqXG4gICAqICogYHBlcmlvZGAgY2FuIGJlIGB5YCwgYG1gIG9yIGBkYCBhbmQgZGVmYXVsdHMgdG8gZGF5LlxuICAgKiAqIGBudW1iZXJgIGRlZmF1bHRzIHRvIDEuXG4gICAqXG4gICAqIEFsd2F5cyByZXR1cm5zIGEgbmV3IGRhdGUuXG4gICAqL1xuICBhYnN0cmFjdCBnZXRQcmV2KGRhdGU6IE5nYkRhdGUsIHBlcmlvZD86IE5nYlBlcmlvZCwgbnVtYmVyPzogbnVtYmVyKTogTmdiRGF0ZTtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgd2VlayBudW1iZXIgZm9yIGEgZ2l2ZW4gd2Vlay5cbiAgICovXG4gIGFic3RyYWN0IGdldFdlZWtOdW1iZXIod2VlazogTmdiRGF0ZVtdLCBmaXJzdERheU9mV2VlazogbnVtYmVyKTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB0b2RheSdzIGRhdGUuXG4gICAqL1xuICBhYnN0cmFjdCBnZXRUb2RheSgpOiBOZ2JEYXRlO1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSBkYXRlIGlzIHZhbGlkIGluIHRoZSBjdXJyZW50IGNhbGVuZGFyLlxuICAgKi9cbiAgYWJzdHJhY3QgaXNWYWxpZChkYXRlOiBOZ2JEYXRlKTogYm9vbGVhbjtcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE5nYkNhbGVuZGFyR3JlZ29yaWFuIGV4dGVuZHMgTmdiQ2FsZW5kYXIge1xuICBnZXREYXlzUGVyV2VlaygpIHsgcmV0dXJuIDc7IH1cblxuICBnZXRNb250aHMoKSB7IHJldHVybiBbMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMl07IH1cblxuICBnZXRXZWVrc1Blck1vbnRoKCkgeyByZXR1cm4gNjsgfVxuXG4gIGdldE5leHQoZGF0ZTogTmdiRGF0ZSwgcGVyaW9kOiBOZ2JQZXJpb2QgPSAnZCcsIG51bWJlciA9IDEpIHtcbiAgICBsZXQganNEYXRlID0gdG9KU0RhdGUoZGF0ZSk7XG5cbiAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgY2FzZSAneSc6XG4gICAgICAgIHJldHVybiBuZXcgTmdiRGF0ZShkYXRlLnllYXIgKyBudW1iZXIsIDEsIDEpO1xuICAgICAgY2FzZSAnbSc6XG4gICAgICAgIGpzRGF0ZSA9IG5ldyBEYXRlKGRhdGUueWVhciwgZGF0ZS5tb250aCArIG51bWJlciAtIDEsIDEsIDEyKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdkJzpcbiAgICAgICAganNEYXRlLnNldERhdGUoanNEYXRlLmdldERhdGUoKSArIG51bWJlcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZyb21KU0RhdGUoanNEYXRlKTtcbiAgfVxuXG4gIGdldFByZXYoZGF0ZTogTmdiRGF0ZSwgcGVyaW9kOiBOZ2JQZXJpb2QgPSAnZCcsIG51bWJlciA9IDEpIHsgcmV0dXJuIHRoaXMuZ2V0TmV4dChkYXRlLCBwZXJpb2QsIC1udW1iZXIpOyB9XG5cbiAgZ2V0V2Vla2RheShkYXRlOiBOZ2JEYXRlKSB7XG4gICAgbGV0IGpzRGF0ZSA9IHRvSlNEYXRlKGRhdGUpO1xuICAgIGxldCBkYXkgPSBqc0RhdGUuZ2V0RGF5KCk7XG4gICAgLy8gaW4gSlMgRGF0ZSBTdW49MCwgaW4gSVNPIDg2MDEgU3VuPTdcbiAgICByZXR1cm4gZGF5ID09PSAwID8gNyA6IGRheTtcbiAgfVxuXG4gIGdldFdlZWtOdW1iZXIod2VlazogTmdiRGF0ZVtdLCBmaXJzdERheU9mV2VlazogbnVtYmVyKSB7XG4gICAgLy8gaW4gSlMgRGF0ZSBTdW49MCwgaW4gSVNPIDg2MDEgU3VuPTdcbiAgICBpZiAoZmlyc3REYXlPZldlZWsgPT09IDcpIHtcbiAgICAgIGZpcnN0RGF5T2ZXZWVrID0gMDtcbiAgICB9XG5cbiAgICBjb25zdCB0aHVyc2RheUluZGV4ID0gKDQgKyA3IC0gZmlyc3REYXlPZldlZWspICUgNztcbiAgICBsZXQgZGF0ZSA9IHdlZWtbdGh1cnNkYXlJbmRleF07XG5cbiAgICBjb25zdCBqc0RhdGUgPSB0b0pTRGF0ZShkYXRlKTtcbiAgICBqc0RhdGUuc2V0RGF0ZShqc0RhdGUuZ2V0RGF0ZSgpICsgNCAtIChqc0RhdGUuZ2V0RGF5KCkgfHwgNykpOyAgLy8gVGh1cnNkYXlcbiAgICBjb25zdCB0aW1lID0ganNEYXRlLmdldFRpbWUoKTtcbiAgICBqc0RhdGUuc2V0TW9udGgoMCk7ICAvLyBDb21wYXJlIHdpdGggSmFuIDFcbiAgICBqc0RhdGUuc2V0RGF0ZSgxKTtcbiAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJvdW5kKCh0aW1lIC0ganNEYXRlLmdldFRpbWUoKSkgLyA4NjQwMDAwMCkgLyA3KSArIDE7XG4gIH1cblxuICBnZXRUb2RheSgpOiBOZ2JEYXRlIHsgcmV0dXJuIGZyb21KU0RhdGUobmV3IERhdGUoKSk7IH1cblxuICBpc1ZhbGlkKGRhdGU6IE5nYkRhdGUpOiBib29sZWFuIHtcbiAgICBpZiAoIWRhdGUgfHwgIWlzSW50ZWdlcihkYXRlLnllYXIpIHx8ICFpc0ludGVnZXIoZGF0ZS5tb250aCkgfHwgIWlzSW50ZWdlcihkYXRlLmRheSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyB5ZWFyIDAgZG9lc24ndCBleGlzdCBpbiBHcmVnb3JpYW4gY2FsZW5kYXJcbiAgICBpZiAoZGF0ZS55ZWFyID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QganNEYXRlID0gdG9KU0RhdGUoZGF0ZSk7XG5cbiAgICByZXR1cm4gIWlzTmFOKGpzRGF0ZS5nZXRUaW1lKCkpICYmIGpzRGF0ZS5nZXRGdWxsWWVhcigpID09PSBkYXRlLnllYXIgJiYganNEYXRlLmdldE1vbnRoKCkgKyAxID09PSBkYXRlLm1vbnRoICYmXG4gICAgICAgIGpzRGF0ZS5nZXREYXRlKCkgPT09IGRhdGUuZGF5O1xuICB9XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/datepicker/ngb-date-parser-formatter.js b/dist/sunbird-ui-components/esm5/datepicker/ngb-date-parser-formatter.js new file mode 100644 index 0000000..14105ed --- /dev/null +++ b/dist/sunbird-ui-components/esm5/datepicker/ngb-date-parser-formatter.js @@ -0,0 +1,111 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import * as tslib_1 from "tslib"; +import { padNumber, toInteger, isNumber } from '../util/util'; +import { Injectable } from '@angular/core'; +import * as i0 from "@angular/core"; +/** + * @return {?} + */ +export function NGB_DATEPICKER_PARSER_FORMATTER_FACTORY() { + return new NgbDateISOParserFormatter(); +} +/** + * An abstract service for parsing and formatting dates for the + * [`NgbInputDatepicker`](#/components/datepicker/api#NgbInputDatepicker) directive. + * Converts between the internal `NgbDateStruct` model presentation and a `string` that is displayed in the + * input element. + * + * When user types something in the input this service attempts to parse it into a `NgbDateStruct` object. + * And vice versa, when users selects a date in the calendar with the mouse, it must be displayed as a `string` + * in the input. + * + * Default implementation uses the ISO 8601 format, but you can provide another implementation via DI + * to use an alternative string format or a custom parsing logic. + * + * See the [date format overview](#/components/datepicker/overview#date-model) for more details. + * @abstract + */ +var NgbDateParserFormatter = /** @class */ (function () { + function NgbDateParserFormatter() { + } + NgbDateParserFormatter.decorators = [ + { type: Injectable, args: [{ providedIn: 'root', useFactory: NGB_DATEPICKER_PARSER_FORMATTER_FACTORY },] } + ]; + /** @nocollapse */ NgbDateParserFormatter.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: NGB_DATEPICKER_PARSER_FORMATTER_FACTORY, token: NgbDateParserFormatter, providedIn: "root" }); + return NgbDateParserFormatter; +}()); +export { NgbDateParserFormatter }; +if (false) { + /** + * Parses the given `string` to an `NgbDateStruct`. + * + * Implementations should try their best to provide a result, even + * partial. They must return `null` if the value can't be parsed. + * @abstract + * @param {?} value + * @return {?} + */ + NgbDateParserFormatter.prototype.parse = function (value) { }; + /** + * Formats the given `NgbDateStruct` to a `string`. + * + * Implementations should return an empty string if the given date is `null`, + * and try their best to provide a partial result if the given date is incomplete or invalid. + * @abstract + * @param {?} date + * @return {?} + */ + NgbDateParserFormatter.prototype.format = function (date) { }; +} +var NgbDateISOParserFormatter = /** @class */ (function (_super) { + tslib_1.__extends(NgbDateISOParserFormatter, _super); + function NgbDateISOParserFormatter() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * @param {?} value + * @return {?} + */ + NgbDateISOParserFormatter.prototype.parse = /** + * @param {?} value + * @return {?} + */ + function (value) { + if (value) { + /** @type {?} */ + var dateParts = value.trim().split('-'); + if (dateParts.length === 1 && isNumber(dateParts[0])) { + return { year: toInteger(dateParts[0]), month: null, day: null }; + } + else if (dateParts.length === 2 && isNumber(dateParts[0]) && isNumber(dateParts[1])) { + return { year: toInteger(dateParts[0]), month: toInteger(dateParts[1]), day: null }; + } + else if (dateParts.length === 3 && isNumber(dateParts[0]) && isNumber(dateParts[1]) && isNumber(dateParts[2])) { + return { year: toInteger(dateParts[0]), month: toInteger(dateParts[1]), day: toInteger(dateParts[2]) }; + } + } + return null; + }; + /** + * @param {?} date + * @return {?} + */ + NgbDateISOParserFormatter.prototype.format = /** + * @param {?} date + * @return {?} + */ + function (date) { + return date ? + date.year + "-" + (isNumber(date.month) ? padNumber(date.month) : '') + "-" + (isNumber(date.day) ? padNumber(date.day) : '') : + ''; + }; + NgbDateISOParserFormatter.decorators = [ + { type: Injectable } + ]; + return NgbDateISOParserFormatter; +}(NgbDateParserFormatter)); +export { NgbDateISOParserFormatter }; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdiLWRhdGUtcGFyc2VyLWZvcm1hdHRlci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImRhdGVwaWNrZXIvbmdiLWRhdGUtcGFyc2VyLWZvcm1hdHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUU1RCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7OztBQUV6QyxNQUFNLFVBQVUsdUNBQXVDO0lBQ3JELE9BQU8sSUFBSSx5QkFBeUIsRUFBRSxDQUFDO0FBQ3pDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUJEO0lBQUE7S0FpQkM7O2dCQWpCQSxVQUFVLFNBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSx1Q0FBdUMsRUFBQzs7O2lDQXZCckY7Q0F3Q0MsQUFqQkQsSUFpQkM7U0FoQnFCLHNCQUFzQjs7Ozs7Ozs7Ozs7SUFPMUMsOERBQTZDOzs7Ozs7Ozs7O0lBUTdDLDhEQUE2Qzs7QUFHL0M7SUFDK0MscURBQXNCO0lBRHJFOztJQXFCQSxDQUFDOzs7OztJQW5CQyx5Q0FBSzs7OztJQUFMLFVBQU0sS0FBYTtRQUNqQixJQUFJLEtBQUssRUFBRTs7Z0JBQ0gsU0FBUyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO1lBQ3pDLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNwRCxPQUFPLEVBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUMsQ0FBQzthQUNoRTtpQkFBTSxJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3JGLE9BQU8sRUFBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBQyxDQUFDO2FBQ25GO2lCQUFNLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQy9HLE9BQU8sRUFBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDO2FBQ3RHO1NBQ0Y7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Ozs7O0lBRUQsMENBQU07Ozs7SUFBTixVQUFPLElBQW1CO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLENBQUM7WUFDTixJQUFJLENBQUMsSUFBSSxVQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUUsQ0FBQyxDQUFDO1lBQ3RILEVBQUUsQ0FBQztJQUNULENBQUM7O2dCQXBCRixVQUFVOztJQXFCWCxnQ0FBQztDQUFBLEFBckJELENBQytDLHNCQUFzQixHQW9CcEU7U0FwQlkseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtwYWROdW1iZXIsIHRvSW50ZWdlciwgaXNOdW1iZXJ9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQge05nYkRhdGVTdHJ1Y3R9IGZyb20gJy4vbmdiLWRhdGUtc3RydWN0JztcbmltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBOR0JfREFURVBJQ0tFUl9QQVJTRVJfRk9STUFUVEVSX0ZBQ1RPUlkoKSB7XG4gIHJldHVybiBuZXcgTmdiRGF0ZUlTT1BhcnNlckZvcm1hdHRlcigpO1xufVxuXG4vKipcbiAqIEFuIGFic3RyYWN0IHNlcnZpY2UgZm9yIHBhcnNpbmcgYW5kIGZvcm1hdHRpbmcgZGF0ZXMgZm9yIHRoZVxuICogW2BOZ2JJbnB1dERhdGVwaWNrZXJgXSgjL2NvbXBvbmVudHMvZGF0ZXBpY2tlci9hcGkjTmdiSW5wdXREYXRlcGlja2VyKSBkaXJlY3RpdmUuXG4gKiBDb252ZXJ0cyBiZXR3ZWVuIHRoZSBpbnRlcm5hbCBgTmdiRGF0ZVN0cnVjdGAgbW9kZWwgcHJlc2VudGF0aW9uIGFuZCBhIGBzdHJpbmdgIHRoYXQgaXMgZGlzcGxheWVkIGluIHRoZVxuICogaW5wdXQgZWxlbWVudC5cbiAqXG4gKiBXaGVuIHVzZXIgdHlwZXMgc29tZXRoaW5nIGluIHRoZSBpbnB1dCB0aGlzIHNlcnZpY2UgYXR0ZW1wdHMgdG8gcGFyc2UgaXQgaW50byBhIGBOZ2JEYXRlU3RydWN0YCBvYmplY3QuXG4gKiBBbmQgdmljZSB2ZXJzYSwgd2hlbiB1c2VycyBzZWxlY3RzIGEgZGF0ZSBpbiB0aGUgY2FsZW5kYXIgd2l0aCB0aGUgbW91c2UsIGl0IG11c3QgYmUgZGlzcGxheWVkIGFzIGEgYHN0cmluZ2BcbiAqIGluIHRoZSBpbnB1dC5cbiAqXG4gKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIElTTyA4NjAxIGZvcm1hdCwgYnV0IHlvdSBjYW4gcHJvdmlkZSBhbm90aGVyIGltcGxlbWVudGF0aW9uIHZpYSBESVxuICogdG8gdXNlIGFuIGFsdGVybmF0aXZlIHN0cmluZyBmb3JtYXQgb3IgYSBjdXN0b20gcGFyc2luZyBsb2dpYy5cbiAqXG4gKiBTZWUgdGhlIFtkYXRlIGZvcm1hdCBvdmVydmlld10oIy9jb21wb25lbnRzL2RhdGVwaWNrZXIvb3ZlcnZpZXcjZGF0ZS1tb2RlbCkgZm9yIG1vcmUgZGV0YWlscy5cbiAqL1xuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290JywgdXNlRmFjdG9yeTogTkdCX0RBVEVQSUNLRVJfUEFSU0VSX0ZPUk1BVFRFUl9GQUNUT1JZfSlcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOZ2JEYXRlUGFyc2VyRm9ybWF0dGVyIHtcbiAgLyoqXG4gICAqIFBhcnNlcyB0aGUgZ2l2ZW4gYHN0cmluZ2AgdG8gYW4gYE5nYkRhdGVTdHJ1Y3RgLlxuICAgKlxuICAgKiBJbXBsZW1lbnRhdGlvbnMgc2hvdWxkIHRyeSB0aGVpciBiZXN0IHRvIHByb3ZpZGUgYSByZXN1bHQsIGV2ZW5cbiAgICogcGFydGlhbC4gVGhleSBtdXN0IHJldHVybiBgbnVsbGAgaWYgdGhlIHZhbHVlIGNhbid0IGJlIHBhcnNlZC5cbiAgICovXG4gIGFic3RyYWN0IHBhcnNlKHZhbHVlOiBzdHJpbmcpOiBOZ2JEYXRlU3RydWN0O1xuXG4gIC8qKlxuICAgKiBGb3JtYXRzIHRoZSBnaXZlbiBgTmdiRGF0ZVN0cnVjdGAgdG8gYSBgc3RyaW5nYC5cbiAgICpcbiAgICogSW1wbGVtZW50YXRpb25zIHNob3VsZCByZXR1cm4gYW4gZW1wdHkgc3RyaW5nIGlmIHRoZSBnaXZlbiBkYXRlIGlzIGBudWxsYCxcbiAgICogYW5kIHRyeSB0aGVpciBiZXN0IHRvIHByb3ZpZGUgYSBwYXJ0aWFsIHJlc3VsdCBpZiB0aGUgZ2l2ZW4gZGF0ZSBpcyBpbmNvbXBsZXRlIG9yIGludmFsaWQuXG4gICAqL1xuICBhYnN0cmFjdCBmb3JtYXQoZGF0ZTogTmdiRGF0ZVN0cnVjdCk6IHN0cmluZztcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE5nYkRhdGVJU09QYXJzZXJGb3JtYXR0ZXIgZXh0ZW5kcyBOZ2JEYXRlUGFyc2VyRm9ybWF0dGVyIHtcbiAgcGFyc2UodmFsdWU6IHN0cmluZyk6IE5nYkRhdGVTdHJ1Y3Qge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgY29uc3QgZGF0ZVBhcnRzID0gdmFsdWUudHJpbSgpLnNwbGl0KCctJyk7XG4gICAgICBpZiAoZGF0ZVBhcnRzLmxlbmd0aCA9PT0gMSAmJiBpc051bWJlcihkYXRlUGFydHNbMF0pKSB7XG4gICAgICAgIHJldHVybiB7eWVhcjogdG9JbnRlZ2VyKGRhdGVQYXJ0c1swXSksIG1vbnRoOiBudWxsLCBkYXk6IG51bGx9O1xuICAgICAgfSBlbHNlIGlmIChkYXRlUGFydHMubGVuZ3RoID09PSAyICYmIGlzTnVtYmVyKGRhdGVQYXJ0c1swXSkgJiYgaXNOdW1iZXIoZGF0ZVBhcnRzWzFdKSkge1xuICAgICAgICByZXR1cm4ge3llYXI6IHRvSW50ZWdlcihkYXRlUGFydHNbMF0pLCBtb250aDogdG9JbnRlZ2VyKGRhdGVQYXJ0c1sxXSksIGRheTogbnVsbH07XG4gICAgICB9IGVsc2UgaWYgKGRhdGVQYXJ0cy5sZW5ndGggPT09IDMgJiYgaXNOdW1iZXIoZGF0ZVBhcnRzWzBdKSAmJiBpc051bWJlcihkYXRlUGFydHNbMV0pICYmIGlzTnVtYmVyKGRhdGVQYXJ0c1syXSkpIHtcbiAgICAgICAgcmV0dXJuIHt5ZWFyOiB0b0ludGVnZXIoZGF0ZVBhcnRzWzBdKSwgbW9udGg6IHRvSW50ZWdlcihkYXRlUGFydHNbMV0pLCBkYXk6IHRvSW50ZWdlcihkYXRlUGFydHNbMl0pfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmb3JtYXQoZGF0ZTogTmdiRGF0ZVN0cnVjdCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGRhdGUgP1xuICAgICAgICBgJHtkYXRlLnllYXJ9LSR7aXNOdW1iZXIoZGF0ZS5tb250aCkgPyBwYWROdW1iZXIoZGF0ZS5tb250aCkgOiAnJ30tJHtpc051bWJlcihkYXRlLmRheSkgPyBwYWROdW1iZXIoZGF0ZS5kYXkpIDogJyd9YCA6XG4gICAgICAgICcnO1xuICB9XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/datepicker/ngb-date-struct.js b/dist/sunbird-ui-components/esm5/datepicker/ngb-date-struct.js new file mode 100644 index 0000000..b67ab82 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/datepicker/ngb-date-struct.js @@ -0,0 +1,31 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * An interface of the date model used by the datepicker. + * + * All datepicker APIs consume `NgbDateStruct`, but return `NgbDate`. + * + * See the [date format overview](#/components/datepicker/overview#date-model) for more details. + * @record + */ +export function NgbDateStruct() { } +if (false) { + /** + * The year, for example 2016 + * @type {?} + */ + NgbDateStruct.prototype.year; + /** + * The month, for example 1=Jan ... 12=Dec + * @type {?} + */ + NgbDateStruct.prototype.month; + /** + * The day of month, starting at 1 + * @type {?} + */ + NgbDateStruct.prototype.day; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdiLWRhdGUtc3RydWN0LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiZGF0ZXBpY2tlci9uZ2ItZGF0ZS1zdHJ1Y3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBT0EsbUNBZUM7Ozs7OztJQVhDLDZCQUFhOzs7OztJQUtiLDhCQUFjOzs7OztJQUtkLDRCQUFZIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBbiBpbnRlcmZhY2Ugb2YgdGhlIGRhdGUgbW9kZWwgdXNlZCBieSB0aGUgZGF0ZXBpY2tlci5cbiAqXG4gKiBBbGwgZGF0ZXBpY2tlciBBUElzIGNvbnN1bWUgYE5nYkRhdGVTdHJ1Y3RgLCBidXQgcmV0dXJuIGBOZ2JEYXRlYC5cbiAqXG4gKiBTZWUgdGhlIFtkYXRlIGZvcm1hdCBvdmVydmlld10oIy9jb21wb25lbnRzL2RhdGVwaWNrZXIvb3ZlcnZpZXcjZGF0ZS1tb2RlbCkgZm9yIG1vcmUgZGV0YWlscy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZ2JEYXRlU3RydWN0IHtcbiAgLyoqXG4gICAqIFRoZSB5ZWFyLCBmb3IgZXhhbXBsZSAyMDE2XG4gICAqL1xuICB5ZWFyOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBtb250aCwgZm9yIGV4YW1wbGUgMT1KYW4gLi4uIDEyPURlY1xuICAgKi9cbiAgbW9udGg6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGRheSBvZiBtb250aCwgc3RhcnRpbmcgYXQgMVxuICAgKi9cbiAgZGF5OiBudW1iZXI7XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/datepicker/ngb-date.js b/dist/sunbird-ui-components/esm5/datepicker/ngb-date.js new file mode 100644 index 0000000..3011fbc --- /dev/null +++ b/dist/sunbird-ui-components/esm5/datepicker/ngb-date.js @@ -0,0 +1,182 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { isInteger } from '../util/util'; +/** + * A simple class that represents a date that datepicker also uses internally. + * + * It is the implementation of the `NgbDateStruct` interface that adds some convenience methods, + * like `.equals()`, `.before()`, etc. + * + * All datepicker APIs consume `NgbDateStruct`, but return `NgbDate`. + * + * In many cases it is simpler to manipulate these objects together with + * [`NgbCalendar`](#/components/datepicker/api#NgbCalendar) than native JS Dates. + * + * See the [date format overview](#/components/datepicker/overview#date-model) for more details. + * + * \@since 3.0.0 + */ +var /** + * A simple class that represents a date that datepicker also uses internally. + * + * It is the implementation of the `NgbDateStruct` interface that adds some convenience methods, + * like `.equals()`, `.before()`, etc. + * + * All datepicker APIs consume `NgbDateStruct`, but return `NgbDate`. + * + * In many cases it is simpler to manipulate these objects together with + * [`NgbCalendar`](#/components/datepicker/api#NgbCalendar) than native JS Dates. + * + * See the [date format overview](#/components/datepicker/overview#date-model) for more details. + * + * \@since 3.0.0 + */ +NgbDate = /** @class */ (function () { + function NgbDate(year, month, day) { + this.year = isInteger(year) ? year : null; + this.month = isInteger(month) ? month : null; + this.day = isInteger(day) ? day : null; + } + /** + * A **static method** that creates a new date object from the `NgbDateStruct`, + * + * ex. `NgbDate.from({year: 2000, month: 5, day: 1})`. + * + * If the `date` is already of `NgbDate` type, the method will return the same object. + */ + /** + * A **static method** that creates a new date object from the `NgbDateStruct`, + * + * ex. `NgbDate.from({year: 2000, month: 5, day: 1})`. + * + * If the `date` is already of `NgbDate` type, the method will return the same object. + * @param {?} date + * @return {?} + */ + NgbDate.from = /** + * A **static method** that creates a new date object from the `NgbDateStruct`, + * + * ex. `NgbDate.from({year: 2000, month: 5, day: 1})`. + * + * If the `date` is already of `NgbDate` type, the method will return the same object. + * @param {?} date + * @return {?} + */ + function (date) { + if (date instanceof NgbDate) { + return date; + } + return date ? new NgbDate(date.year, date.month, date.day) : null; + }; + /** + * Checks if the current date is equal to another date. + */ + /** + * Checks if the current date is equal to another date. + * @param {?} other + * @return {?} + */ + NgbDate.prototype.equals = /** + * Checks if the current date is equal to another date. + * @param {?} other + * @return {?} + */ + function (other) { + return other && this.year === other.year && this.month === other.month && this.day === other.day; + }; + /** + * Checks if the current date is before another date. + */ + /** + * Checks if the current date is before another date. + * @param {?} other + * @return {?} + */ + NgbDate.prototype.before = /** + * Checks if the current date is before another date. + * @param {?} other + * @return {?} + */ + function (other) { + if (!other) { + return false; + } + if (this.year === other.year) { + if (this.month === other.month) { + return this.day === other.day ? false : this.day < other.day; + } + else { + return this.month < other.month; + } + } + else { + return this.year < other.year; + } + }; + /** + * Checks if the current date is after another date. + */ + /** + * Checks if the current date is after another date. + * @param {?} other + * @return {?} + */ + NgbDate.prototype.after = /** + * Checks if the current date is after another date. + * @param {?} other + * @return {?} + */ + function (other) { + if (!other) { + return false; + } + if (this.year === other.year) { + if (this.month === other.month) { + return this.day === other.day ? false : this.day > other.day; + } + else { + return this.month > other.month; + } + } + else { + return this.year > other.year; + } + }; + return NgbDate; +}()); +/** + * A simple class that represents a date that datepicker also uses internally. + * + * It is the implementation of the `NgbDateStruct` interface that adds some convenience methods, + * like `.equals()`, `.before()`, etc. + * + * All datepicker APIs consume `NgbDateStruct`, but return `NgbDate`. + * + * In many cases it is simpler to manipulate these objects together with + * [`NgbCalendar`](#/components/datepicker/api#NgbCalendar) than native JS Dates. + * + * See the [date format overview](#/components/datepicker/overview#date-model) for more details. + * + * \@since 3.0.0 + */ +export { NgbDate }; +if (false) { + /** + * The year, for example 2016 + * @type {?} + */ + NgbDate.prototype.year; + /** + * The month, for example 1=Jan ... 12=Dec as in ISO 8601 + * @type {?} + */ + NgbDate.prototype.month; + /** + * The day of month, starting with 1 + * @type {?} + */ + NgbDate.prototype.day; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdiLWRhdGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJkYXRlcGlja2VyL25nYi1kYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sY0FBYyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBaUJ2Qzs7Ozs7Ozs7Ozs7Ozs7OztJQThCRSxpQkFBWSxJQUFZLEVBQUUsS0FBYSxFQUFFLEdBQVc7UUFDbEQsSUFBSSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzFDLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUM3QyxJQUFJLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDekMsQ0FBQztJQWxCRDs7Ozs7O09BTUc7Ozs7Ozs7Ozs7SUFDSSxZQUFJOzs7Ozs7Ozs7SUFBWCxVQUFZLElBQW1CO1FBQzdCLElBQUksSUFBSSxZQUFZLE9BQU8sRUFBRTtZQUMzQixPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNwRSxDQUFDO0lBUUQ7O09BRUc7Ozs7OztJQUNILHdCQUFNOzs7OztJQUFOLFVBQU8sS0FBb0I7UUFDekIsT0FBTyxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLEtBQUssQ0FBQyxHQUFHLENBQUM7SUFDbkcsQ0FBQztJQUVEOztPQUVHOzs7Ozs7SUFDSCx3QkFBTTs7Ozs7SUFBTixVQUFPLEtBQW9CO1FBQ3pCLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDVixPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJLEVBQUU7WUFDNUIsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxLQUFLLEVBQUU7Z0JBQzlCLE9BQU8sSUFBSSxDQUFDLEdBQUcsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQzthQUM5RDtpQkFBTTtnQkFDTCxPQUFPLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQzthQUNqQztTQUNGO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztTQUMvQjtJQUNILENBQUM7SUFFRDs7T0FFRzs7Ozs7O0lBQ0gsdUJBQUs7Ozs7O0lBQUwsVUFBTSxLQUFvQjtRQUN4QixJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1YsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxFQUFFO1lBQzVCLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsS0FBSyxFQUFFO2dCQUM5QixPQUFPLElBQUksQ0FBQyxHQUFHLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7YUFDOUQ7aUJBQU07Z0JBQ0wsT0FBTyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7YUFDakM7U0FDRjthQUFNO1lBQ0wsT0FBTyxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7U0FDL0I7SUFDSCxDQUFDO0lBQ0gsY0FBQztBQUFELENBQUMsQUEvRUQsSUErRUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUEzRUMsdUJBQWE7Ozs7O0lBS2Isd0JBQWM7Ozs7O0lBS2Qsc0JBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge05nYkRhdGVTdHJ1Y3R9IGZyb20gJy4vbmdiLWRhdGUtc3RydWN0JztcbmltcG9ydCB7aXNJbnRlZ2VyfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuXG4vKipcbiAqIEEgc2ltcGxlIGNsYXNzIHRoYXQgcmVwcmVzZW50cyBhIGRhdGUgdGhhdCBkYXRlcGlja2VyIGFsc28gdXNlcyBpbnRlcm5hbGx5LlxuICpcbiAqIEl0IGlzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYE5nYkRhdGVTdHJ1Y3RgIGludGVyZmFjZSB0aGF0IGFkZHMgc29tZSBjb252ZW5pZW5jZSBtZXRob2RzLFxuICogbGlrZSBgLmVxdWFscygpYCwgYC5iZWZvcmUoKWAsIGV0Yy5cbiAqXG4gKiBBbGwgZGF0ZXBpY2tlciBBUElzIGNvbnN1bWUgYE5nYkRhdGVTdHJ1Y3RgLCBidXQgcmV0dXJuIGBOZ2JEYXRlYC5cbiAqXG4gKiBJbiBtYW55IGNhc2VzIGl0IGlzIHNpbXBsZXIgdG8gbWFuaXB1bGF0ZSB0aGVzZSBvYmplY3RzIHRvZ2V0aGVyIHdpdGhcbiAqIFtgTmdiQ2FsZW5kYXJgXSgjL2NvbXBvbmVudHMvZGF0ZXBpY2tlci9hcGkjTmdiQ2FsZW5kYXIpIHRoYW4gbmF0aXZlIEpTIERhdGVzLlxuICpcbiAqIFNlZSB0aGUgW2RhdGUgZm9ybWF0IG92ZXJ2aWV3XSgjL2NvbXBvbmVudHMvZGF0ZXBpY2tlci9vdmVydmlldyNkYXRlLW1vZGVsKSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEBzaW5jZSAzLjAuMFxuICovXG5leHBvcnQgY2xhc3MgTmdiRGF0ZSBpbXBsZW1lbnRzIE5nYkRhdGVTdHJ1Y3Qge1xuICAvKipcbiAgICogVGhlIHllYXIsIGZvciBleGFtcGxlIDIwMTZcbiAgICovXG4gIHllYXI6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG1vbnRoLCBmb3IgZXhhbXBsZSAxPUphbiAuLi4gMTI9RGVjIGFzIGluIElTTyA4NjAxXG4gICAqL1xuICBtb250aDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgZGF5IG9mIG1vbnRoLCBzdGFydGluZyB3aXRoIDFcbiAgICovXG4gIGRheTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBICoqc3RhdGljIG1ldGhvZCoqIHRoYXQgY3JlYXRlcyBhIG5ldyBkYXRlIG9iamVjdCBmcm9tIHRoZSBgTmdiRGF0ZVN0cnVjdGAsXG4gICAqXG4gICAqIGV4LiBgTmdiRGF0ZS5mcm9tKHt5ZWFyOiAyMDAwLCBtb250aDogNSwgZGF5OiAxfSlgLlxuICAgKlxuICAgKiBJZiB0aGUgYGRhdGVgIGlzIGFscmVhZHkgb2YgYE5nYkRhdGVgIHR5cGUsIHRoZSBtZXRob2Qgd2lsbCByZXR1cm4gdGhlIHNhbWUgb2JqZWN0LlxuICAgKi9cbiAgc3RhdGljIGZyb20oZGF0ZTogTmdiRGF0ZVN0cnVjdCk6IE5nYkRhdGUge1xuICAgIGlmIChkYXRlIGluc3RhbmNlb2YgTmdiRGF0ZSkge1xuICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuICAgIHJldHVybiBkYXRlID8gbmV3IE5nYkRhdGUoZGF0ZS55ZWFyLCBkYXRlLm1vbnRoLCBkYXRlLmRheSkgOiBudWxsO1xuICB9XG5cbiAgY29uc3RydWN0b3IoeWVhcjogbnVtYmVyLCBtb250aDogbnVtYmVyLCBkYXk6IG51bWJlcikge1xuICAgIHRoaXMueWVhciA9IGlzSW50ZWdlcih5ZWFyKSA/IHllYXIgOiBudWxsO1xuICAgIHRoaXMubW9udGggPSBpc0ludGVnZXIobW9udGgpID8gbW9udGggOiBudWxsO1xuICAgIHRoaXMuZGF5ID0gaXNJbnRlZ2VyKGRheSkgPyBkYXkgOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgY3VycmVudCBkYXRlIGlzIGVxdWFsIHRvIGFub3RoZXIgZGF0ZS5cbiAgICovXG4gIGVxdWFscyhvdGhlcjogTmdiRGF0ZVN0cnVjdCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBvdGhlciAmJiB0aGlzLnllYXIgPT09IG90aGVyLnllYXIgJiYgdGhpcy5tb250aCA9PT0gb3RoZXIubW9udGggJiYgdGhpcy5kYXkgPT09IG90aGVyLmRheTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGN1cnJlbnQgZGF0ZSBpcyBiZWZvcmUgYW5vdGhlciBkYXRlLlxuICAgKi9cbiAgYmVmb3JlKG90aGVyOiBOZ2JEYXRlU3RydWN0KTogYm9vbGVhbiB7XG4gICAgaWYgKCFvdGhlcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnllYXIgPT09IG90aGVyLnllYXIpIHtcbiAgICAgIGlmICh0aGlzLm1vbnRoID09PSBvdGhlci5tb250aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXkgPT09IG90aGVyLmRheSA/IGZhbHNlIDogdGhpcy5kYXkgPCBvdGhlci5kYXk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5tb250aCA8IG90aGVyLm1vbnRoO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy55ZWFyIDwgb3RoZXIueWVhcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBjdXJyZW50IGRhdGUgaXMgYWZ0ZXIgYW5vdGhlciBkYXRlLlxuICAgKi9cbiAgYWZ0ZXIob3RoZXI6IE5nYkRhdGVTdHJ1Y3QpOiBib29sZWFuIHtcbiAgICBpZiAoIW90aGVyKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLnllYXIgPT09IG90aGVyLnllYXIpIHtcbiAgICAgIGlmICh0aGlzLm1vbnRoID09PSBvdGhlci5tb250aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXkgPT09IG90aGVyLmRheSA/IGZhbHNlIDogdGhpcy5kYXkgPiBvdGhlci5kYXk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5tb250aCA+IG90aGVyLm1vbnRoO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy55ZWFyID4gb3RoZXIueWVhcjtcbiAgICB9XG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/dropdown/dropdown-config.js b/dist/sunbird-ui-components/esm5/dropdown/dropdown-config.js new file mode 100644 index 0000000..1bcf9d7 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/dropdown/dropdown-config.js @@ -0,0 +1,33 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Injectable } from '@angular/core'; +import * as i0 from "@angular/core"; +/** + * A configuration service for the [`NgbDropdown`](#/components/dropdown/api#NgbDropdown) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the dropdowns used in the application. + */ +var NgbDropdownConfig = /** @class */ (function () { + function NgbDropdownConfig() { + this.autoClose = true; + this.placement = ['bottom-left', 'bottom-right', 'top-left', 'top-right']; + } + NgbDropdownConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ NgbDropdownConfig.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function NgbDropdownConfig_Factory() { return new NgbDropdownConfig(); }, token: NgbDropdownConfig, providedIn: "root" }); + return NgbDropdownConfig; +}()); +export { NgbDropdownConfig }; +if (false) { + /** @type {?} */ + NgbDropdownConfig.prototype.autoClose; + /** @type {?} */ + NgbDropdownConfig.prototype.placement; + /** @type {?} */ + NgbDropdownConfig.prototype.container; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24tY29uZmlnLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiZHJvcGRvd24vZHJvcGRvd24tY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQVN6QztJQUFBO1FBRUUsY0FBUyxHQUFtQyxJQUFJLENBQUM7UUFDakQsY0FBUyxHQUFtQixDQUFDLGFBQWEsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0tBRXRGOztnQkFMQSxVQUFVLFNBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDOzs7NEJBVGhDO0NBY0MsQUFMRCxJQUtDO1NBSlksaUJBQWlCOzs7SUFDNUIsc0NBQWlEOztJQUNqRCxzQ0FBcUY7O0lBQ3JGLHNDQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1BsYWNlbWVudEFycmF5fSBmcm9tICcuLi91dGlsL3Bvc2l0aW9uaW5nJztcblxuLyoqXG4gKiBBIGNvbmZpZ3VyYXRpb24gc2VydmljZSBmb3IgdGhlIFtgTmdiRHJvcGRvd25gXSgjL2NvbXBvbmVudHMvZHJvcGRvd24vYXBpI05nYkRyb3Bkb3duKSBjb21wb25lbnQuXG4gKlxuICogWW91IGNhbiBpbmplY3QgdGhpcyBzZXJ2aWNlLCB0eXBpY2FsbHkgaW4geW91ciByb290IGNvbXBvbmVudCwgYW5kIGN1c3RvbWl6ZSB0aGUgdmFsdWVzIG9mIGl0cyBwcm9wZXJ0aWVzIGluXG4gKiBvcmRlciB0byBwcm92aWRlIGRlZmF1bHQgdmFsdWVzIGZvciBhbGwgdGhlIGRyb3Bkb3ducyB1c2VkIGluIHRoZSBhcHBsaWNhdGlvbi5cbiAqL1xuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgTmdiRHJvcGRvd25Db25maWcge1xuICBhdXRvQ2xvc2U6IGJvb2xlYW4gfCAnb3V0c2lkZScgfCAnaW5zaWRlJyA9IHRydWU7XG4gIHBsYWNlbWVudDogUGxhY2VtZW50QXJyYXkgPSBbJ2JvdHRvbS1sZWZ0JywgJ2JvdHRvbS1yaWdodCcsICd0b3AtbGVmdCcsICd0b3AtcmlnaHQnXTtcbiAgY29udGFpbmVyOiBudWxsIHwgJ2JvZHknO1xufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/dropdown/dropdown.js b/dist/sunbird-ui-components/esm5/dropdown/dropdown.js new file mode 100644 index 0000000..cbb6459 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/dropdown/dropdown.js @@ -0,0 +1,757 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import * as tslib_1 from "tslib"; +import { ChangeDetectorRef, ContentChild, ContentChildren, Directive, ElementRef, EventEmitter, forwardRef, Inject, Input, NgZone, Output, QueryList, Renderer2, Optional } from '@angular/core'; +import { DOCUMENT } from '@angular/common'; +import { Subject } from 'rxjs'; +import { take } from 'rxjs/operators'; +import { positionElements } from '../util/positioning'; +import { ngbAutoClose } from '../util/autoclose'; +import { Key } from '../util/key'; +import { NgbDropdownConfig } from './dropdown-config'; +var NgbNavbar = /** @class */ (function () { + function NgbNavbar() { + } + NgbNavbar.decorators = [ + { type: Directive, args: [{ selector: '.navbar' },] } + ]; + return NgbNavbar; +}()); +export { NgbNavbar }; +/** + * A directive you should put put on a dropdown item to enable keyboard navigation. + * Arrow keys will move focus between items marked with this directive. + * + * \@since 4.1.0 + */ +var NgbDropdownItem = /** @class */ (function () { + function NgbDropdownItem(elementRef) { + this.elementRef = elementRef; + this._disabled = false; + } + Object.defineProperty(NgbDropdownItem.prototype, "disabled", { + get: /** + * @return {?} + */ + function () { return this._disabled; }, + set: /** + * @param {?} value + * @return {?} + */ + function (value) { + this._disabled = (/** @type {?} */ (value)) === '' || value === true; // accept an empty attribute as true + }, + enumerable: true, + configurable: true + }); + NgbDropdownItem.decorators = [ + { type: Directive, args: [{ selector: '[ngbDropdownItem]', host: { 'class': 'dropdown-item', '[class.disabled]': 'disabled' } },] } + ]; + /** @nocollapse */ + NgbDropdownItem.ctorParameters = function () { return [ + { type: ElementRef } + ]; }; + NgbDropdownItem.propDecorators = { + disabled: [{ type: Input }] + }; + return NgbDropdownItem; +}()); +export { NgbDropdownItem }; +if (false) { + /** + * @type {?} + * @private + */ + NgbDropdownItem.prototype._disabled; + /** @type {?} */ + NgbDropdownItem.prototype.elementRef; +} +/** + * A directive that wraps dropdown menu content and dropdown items. + */ +var NgbDropdownMenu = /** @class */ (function () { + function NgbDropdownMenu(dropdown) { + this.dropdown = dropdown; + this.placement = 'bottom'; + this.isOpen = false; + } + NgbDropdownMenu.decorators = [ + { type: Directive, args: [{ + selector: '[ngbDropdownMenu]', + host: { + '[class.dropdown-menu]': 'true', + '[class.show]': 'dropdown.isOpen()', + '[attr.x-placement]': 'placement', + '(keydown.ArrowUp)': 'dropdown.onKeyDown($event)', + '(keydown.ArrowDown)': 'dropdown.onKeyDown($event)', + '(keydown.Home)': 'dropdown.onKeyDown($event)', + '(keydown.End)': 'dropdown.onKeyDown($event)', + '(keydown.Enter)': 'dropdown.onKeyDown($event)', + '(keydown.Space)': 'dropdown.onKeyDown($event)' + } + },] } + ]; + /** @nocollapse */ + NgbDropdownMenu.ctorParameters = function () { return [ + { type: undefined, decorators: [{ type: Inject, args: [forwardRef((/** + * @return {?} + */ + function () { return NgbDropdown; })),] }] } + ]; }; + NgbDropdownMenu.propDecorators = { + menuItems: [{ type: ContentChildren, args: [NgbDropdownItem,] }] + }; + return NgbDropdownMenu; +}()); +export { NgbDropdownMenu }; +if (false) { + /** @type {?} */ + NgbDropdownMenu.prototype.placement; + /** @type {?} */ + NgbDropdownMenu.prototype.isOpen; + /** @type {?} */ + NgbDropdownMenu.prototype.menuItems; + /** @type {?} */ + NgbDropdownMenu.prototype.dropdown; +} +/** + * A directive to mark an element to which dropdown menu will be anchored. + * + * This is a simple version of the `NgbDropdownToggle` directive. + * It plays the same role, but doesn't listen to click events to toggle dropdown menu thus enabling support + * for events other than click. + * + * \@since 1.1.0 + */ +var NgbDropdownAnchor = /** @class */ (function () { + function NgbDropdownAnchor(dropdown, _elementRef) { + this.dropdown = dropdown; + this._elementRef = _elementRef; + this.anchorEl = _elementRef.nativeElement; + } + /** + * @return {?} + */ + NgbDropdownAnchor.prototype.getNativeElement = /** + * @return {?} + */ + function () { return this._elementRef.nativeElement; }; + NgbDropdownAnchor.decorators = [ + { type: Directive, args: [{ + selector: '[ngbDropdownAnchor]', + host: { 'class': 'dropdown-toggle', 'aria-haspopup': 'true', '[attr.aria-expanded]': 'dropdown.isOpen()' } + },] } + ]; + /** @nocollapse */ + NgbDropdownAnchor.ctorParameters = function () { return [ + { type: undefined, decorators: [{ type: Inject, args: [forwardRef((/** + * @return {?} + */ + function () { return NgbDropdown; })),] }] }, + { type: ElementRef } + ]; }; + return NgbDropdownAnchor; +}()); +export { NgbDropdownAnchor }; +if (false) { + /** @type {?} */ + NgbDropdownAnchor.prototype.anchorEl; + /** @type {?} */ + NgbDropdownAnchor.prototype.dropdown; + /** + * @type {?} + * @private + */ + NgbDropdownAnchor.prototype._elementRef; +} +/** + * A directive to mark an element that will toggle dropdown via the `click` event. + * + * You can also use `NgbDropdownAnchor` as an alternative. + */ +var NgbDropdownToggle = /** @class */ (function (_super) { + tslib_1.__extends(NgbDropdownToggle, _super); + function NgbDropdownToggle(dropdown, elementRef) { + return _super.call(this, dropdown, elementRef) || this; + } + NgbDropdownToggle.decorators = [ + { type: Directive, args: [{ + selector: '[ngbDropdownToggle]', + host: { + 'class': 'dropdown-toggle', + 'aria-haspopup': 'true', + '[attr.aria-expanded]': 'dropdown.isOpen()', + '(click)': 'dropdown.toggle()', + '(keydown.ArrowUp)': 'dropdown.onKeyDown($event)', + '(keydown.ArrowDown)': 'dropdown.onKeyDown($event)', + '(keydown.Home)': 'dropdown.onKeyDown($event)', + '(keydown.End)': 'dropdown.onKeyDown($event)' + }, + providers: [{ provide: NgbDropdownAnchor, useExisting: forwardRef((/** + * @return {?} + */ + function () { return NgbDropdownToggle; })) }] + },] } + ]; + /** @nocollapse */ + NgbDropdownToggle.ctorParameters = function () { return [ + { type: undefined, decorators: [{ type: Inject, args: [forwardRef((/** + * @return {?} + */ + function () { return NgbDropdown; })),] }] }, + { type: ElementRef } + ]; }; + return NgbDropdownToggle; +}(NgbDropdownAnchor)); +export { NgbDropdownToggle }; +/** + * A directive that provides contextual overlays for displaying lists of links and more. + */ +var NgbDropdown = /** @class */ (function () { + function NgbDropdown(_changeDetector, config, _document, _ngZone, _elementRef, _renderer, ngbNavbar) { + var _this = this; + this._changeDetector = _changeDetector; + this._document = _document; + this._ngZone = _ngZone; + this._elementRef = _elementRef; + this._renderer = _renderer; + this._closed$ = new Subject(); + /** + * Defines whether or not the dropdown menu is opened initially. + */ + this._open = false; + /** + * An event fired when the dropdown is opened or closed. + * + * The event payload is a `boolean`: + * * `true` - the dropdown was opened + * * `false` - the dropdown was closed + */ + this.openChange = new EventEmitter(); + this.placement = config.placement; + this.container = config.container; + this.autoClose = config.autoClose; + this.display = ngbNavbar ? 'static' : 'dynamic'; + this._zoneSubscription = _ngZone.onStable.subscribe((/** + * @return {?} + */ + function () { _this._positionMenu(); })); + } + /** + * @return {?} + */ + NgbDropdown.prototype.ngAfterContentInit = /** + * @return {?} + */ + function () { + var _this = this; + this._ngZone.onStable.pipe(take(1)).subscribe((/** + * @return {?} + */ + function () { + _this._applyPlacementClasses(); + if (_this._open) { + _this._setCloseHandlers(); + } + })); + }; + /** + * @param {?} changes + * @return {?} + */ + NgbDropdown.prototype.ngOnChanges = /** + * @param {?} changes + * @return {?} + */ + function (changes) { + if (changes.container && this._open) { + this._applyContainer(this.container); + } + if (changes.placement && !changes.placement.isFirstChange) { + this._applyPlacementClasses(); + } + }; + /** + * Checks if the dropdown menu is open. + */ + /** + * Checks if the dropdown menu is open. + * @return {?} + */ + NgbDropdown.prototype.isOpen = /** + * Checks if the dropdown menu is open. + * @return {?} + */ + function () { return this._open; }; + /** + * Opens the dropdown menu. + */ + /** + * Opens the dropdown menu. + * @return {?} + */ + NgbDropdown.prototype.open = /** + * Opens the dropdown menu. + * @return {?} + */ + function () { + if (!this._open) { + this._open = true; + this._applyContainer(this.container); + this.openChange.emit(true); + this._setCloseHandlers(); + } + }; + /** + * @private + * @return {?} + */ + NgbDropdown.prototype._setCloseHandlers = /** + * @private + * @return {?} + */ + function () { + var _this = this; + /** @type {?} */ + var anchor = this._anchor; + ngbAutoClose(this._ngZone, this._document, this.autoClose, (/** + * @return {?} + */ + function () { return _this.close(); }), this._closed$, this._menu ? [this._menuElement.nativeElement] : [], anchor ? [anchor.getNativeElement()] : [], '.dropdown-item,.dropdown-divider'); + }; + /** + * Closes the dropdown menu. + */ + /** + * Closes the dropdown menu. + * @return {?} + */ + NgbDropdown.prototype.close = /** + * Closes the dropdown menu. + * @return {?} + */ + function () { + if (this._open) { + this._open = false; + this._resetContainer(); + this._closed$.next(); + this.openChange.emit(false); + this._changeDetector.markForCheck(); + } + }; + /** + * Toggles the dropdown menu. + */ + /** + * Toggles the dropdown menu. + * @return {?} + */ + NgbDropdown.prototype.toggle = /** + * Toggles the dropdown menu. + * @return {?} + */ + function () { + if (this.isOpen()) { + this.close(); + } + else { + this.open(); + } + }; + /** + * @return {?} + */ + NgbDropdown.prototype.ngOnDestroy = /** + * @return {?} + */ + function () { + this._resetContainer(); + this._closed$.next(); + this._zoneSubscription.unsubscribe(); + }; + /** + * @param {?} event + * @return {?} + */ + NgbDropdown.prototype.onKeyDown = /** + * @param {?} event + * @return {?} + */ + function (event) { + var _this = this; + // tslint:disable-next-line:deprecation + /** @type {?} */ + var key = event.which; + /** @type {?} */ + var itemElements = this._getMenuElements(); + /** @type {?} */ + var position = -1; + /** @type {?} */ + var isEventFromItems = false; + /** @type {?} */ + var isEventFromToggle = this._isEventFromToggle(event); + if (!isEventFromToggle && itemElements.length) { + itemElements.forEach((/** + * @param {?} itemElement + * @param {?} index + * @return {?} + */ + function (itemElement, index) { + if (itemElement.contains((/** @type {?} */ (event.target)))) { + isEventFromItems = true; + } + if (itemElement === _this._document.activeElement) { + position = index; + } + })); + } + // closing on Enter / Space + if (key === Key.Space || key === Key.Enter) { + if (isEventFromItems && (this.autoClose === true || this.autoClose === 'inside')) { + this.close(); + } + return; + } + // opening / navigating + if (isEventFromToggle || isEventFromItems) { + this.open(); + if (itemElements.length) { + switch (key) { + case Key.ArrowDown: + position = Math.min(position + 1, itemElements.length - 1); + break; + case Key.ArrowUp: + if (this._isDropup() && position === -1) { + position = itemElements.length - 1; + break; + } + position = Math.max(position - 1, 0); + break; + case Key.Home: + position = 0; + break; + case Key.End: + position = itemElements.length - 1; + break; + } + itemElements[position].focus(); + } + event.preventDefault(); + } + }; + /** + * @private + * @return {?} + */ + NgbDropdown.prototype._isDropup = /** + * @private + * @return {?} + */ + function () { return this._elementRef.nativeElement.classList.contains('dropup'); }; + /** + * @private + * @param {?} event + * @return {?} + */ + NgbDropdown.prototype._isEventFromToggle = /** + * @private + * @param {?} event + * @return {?} + */ + function (event) { + return this._anchor.getNativeElement().contains((/** @type {?} */ (event.target))); + }; + /** + * @private + * @return {?} + */ + NgbDropdown.prototype._getMenuElements = /** + * @private + * @return {?} + */ + function () { + /** @type {?} */ + var menu = this._menu; + if (menu == null) { + return []; + } + return menu.menuItems.filter((/** + * @param {?} item + * @return {?} + */ + function (item) { return !item.disabled; })).map((/** + * @param {?} item + * @return {?} + */ + function (item) { return item.elementRef.nativeElement; })); + }; + /** + * @private + * @return {?} + */ + NgbDropdown.prototype._positionMenu = /** + * @private + * @return {?} + */ + function () { + /** @type {?} */ + var menu = this._menu; + if (this.isOpen() && menu) { + this._applyPlacementClasses(this.display === 'dynamic' ? + positionElements(this._anchor.anchorEl, this._bodyContainer || this._menuElement.nativeElement, this.placement, this.container === 'body') : + this._getFirstPlacement(this.placement)); + } + }; + /** + * @private + * @param {?} placement + * @return {?} + */ + NgbDropdown.prototype._getFirstPlacement = /** + * @private + * @param {?} placement + * @return {?} + */ + function (placement) { + return Array.isArray(placement) ? placement[0] : (/** @type {?} */ (placement.split(' ')[0])); + }; + /** + * @private + * @return {?} + */ + NgbDropdown.prototype._resetContainer = /** + * @private + * @return {?} + */ + function () { + /** @type {?} */ + var renderer = this._renderer; + /** @type {?} */ + var menuElement = this._menuElement; + if (menuElement) { + /** @type {?} */ + var dropdownElement = this._elementRef.nativeElement; + /** @type {?} */ + var dropdownMenuElement = menuElement.nativeElement; + renderer.appendChild(dropdownElement, dropdownMenuElement); + renderer.removeStyle(dropdownMenuElement, 'position'); + renderer.removeStyle(dropdownMenuElement, 'transform'); + } + if (this._bodyContainer) { + renderer.removeChild(this._document.body, this._bodyContainer); + this._bodyContainer = null; + } + }; + /** + * @private + * @param {?=} container + * @return {?} + */ + NgbDropdown.prototype._applyContainer = /** + * @private + * @param {?=} container + * @return {?} + */ + function (container) { + if (container === void 0) { container = null; } + this._resetContainer(); + if (container === 'body') { + /** @type {?} */ + var renderer = this._renderer; + /** @type {?} */ + var dropdownMenuElement = this._menuElement.nativeElement; + /** @type {?} */ + var bodyContainer = this._bodyContainer = this._bodyContainer || renderer.createElement('div'); + // Override some styles to have the positionning working + renderer.setStyle(bodyContainer, 'position', 'absolute'); + renderer.setStyle(dropdownMenuElement, 'position', 'static'); + renderer.setStyle(bodyContainer, 'z-index', '1050'); + renderer.appendChild(bodyContainer, dropdownMenuElement); + renderer.appendChild(this._document.body, bodyContainer); + } + }; + /** + * @private + * @param {?=} placement + * @return {?} + */ + NgbDropdown.prototype._applyPlacementClasses = /** + * @private + * @param {?=} placement + * @return {?} + */ + function (placement) { + /** @type {?} */ + var menu = this._menu; + if (menu) { + if (!placement) { + placement = this._getFirstPlacement(this.placement); + } + /** @type {?} */ + var renderer = this._renderer; + /** @type {?} */ + var dropdownElement = this._elementRef.nativeElement; + // remove the current placement classes + renderer.removeClass(dropdownElement, 'dropup'); + renderer.removeClass(dropdownElement, 'dropdown'); + menu.placement = this.display === 'static' ? null : placement; + /* + * apply the new placement + * in case of top use up-arrow or down-arrow otherwise + */ + /** @type {?} */ + var dropdownClass = placement.search('^top') !== -1 ? 'dropup' : 'dropdown'; + renderer.addClass(dropdownElement, dropdownClass); + /** @type {?} */ + var bodyContainer = this._bodyContainer; + if (bodyContainer) { + renderer.removeClass(bodyContainer, 'dropup'); + renderer.removeClass(bodyContainer, 'dropdown'); + renderer.addClass(bodyContainer, dropdownClass); + } + } + }; + NgbDropdown.decorators = [ + { type: Directive, args: [{ selector: '[ngbDropdown]', exportAs: 'ngbDropdown', host: { '[class.show]': 'isOpen()' } },] } + ]; + /** @nocollapse */ + NgbDropdown.ctorParameters = function () { return [ + { type: ChangeDetectorRef }, + { type: NgbDropdownConfig }, + { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }, + { type: NgZone }, + { type: ElementRef }, + { type: Renderer2 }, + { type: NgbNavbar, decorators: [{ type: Optional }] } + ]; }; + NgbDropdown.propDecorators = { + _menu: [{ type: ContentChild, args: [NgbDropdownMenu, { static: false },] }], + _menuElement: [{ type: ContentChild, args: [NgbDropdownMenu, { read: ElementRef, static: false },] }], + _anchor: [{ type: ContentChild, args: [NgbDropdownAnchor, { static: false },] }], + autoClose: [{ type: Input }], + _open: [{ type: Input, args: ['open',] }], + placement: [{ type: Input }], + container: [{ type: Input }], + display: [{ type: Input }], + openChange: [{ type: Output }] + }; + return NgbDropdown; +}()); +export { NgbDropdown }; +if (false) { + /** + * @type {?} + * @private + */ + NgbDropdown.prototype._closed$; + /** + * @type {?} + * @private + */ + NgbDropdown.prototype._zoneSubscription; + /** + * @type {?} + * @private + */ + NgbDropdown.prototype._bodyContainer; + /** + * @type {?} + * @private + */ + NgbDropdown.prototype._menu; + /** + * @type {?} + * @private + */ + NgbDropdown.prototype._menuElement; + /** + * @type {?} + * @private + */ + NgbDropdown.prototype._anchor; + /** + * Indicates whether the dropdown should be closed when clicking one of dropdown items or pressing ESC. + * + * * `true` - the dropdown will close on both outside and inside (menu) clicks. + * * `false` - the dropdown can only be closed manually via `close()` or `toggle()` methods. + * * `"inside"` - the dropdown will close on inside menu clicks, but not outside clicks. + * * `"outside"` - the dropdown will close only on the outside clicks and not on menu clicks. + * @type {?} + */ + NgbDropdown.prototype.autoClose; + /** + * Defines whether or not the dropdown menu is opened initially. + * @type {?} + */ + NgbDropdown.prototype._open; + /** + * The preferred placement of the dropdown. + * + * Possible values are `"top"`, `"top-left"`, `"top-right"`, `"bottom"`, `"bottom-left"`, + * `"bottom-right"`, `"left"`, `"left-top"`, `"left-bottom"`, `"right"`, `"right-top"`, + * `"right-bottom"` + * + * Accepts an array of strings or a string with space separated possible values. + * + * The default order of preference is `"bottom-left bottom-right top-left top-right"` + * + * Please see the [positioning overview](#/positioning) for more details. + * @type {?} + */ + NgbDropdown.prototype.placement; + /** + * A selector specifying the element the dropdown should be appended to. + * Currently only supports "body". + * + * \@since 4.1.0 + * @type {?} + */ + NgbDropdown.prototype.container; + /** + * Enable or disable the dynamic positioning. The default value is dynamic unless the dropdown is used + * inside a Bootstrap navbar. If you need custom placement for a dropdown in a navbar, set it to + * dynamic explicitly. See the [positioning of dropdown](#/positioning#dropdown) + * and the [navbar demo](/#/components/dropdown/examples#navbar) for more details. + * + * \@since 4.2.0 + * @type {?} + */ + NgbDropdown.prototype.display; + /** + * An event fired when the dropdown is opened or closed. + * + * The event payload is a `boolean`: + * * `true` - the dropdown was opened + * * `false` - the dropdown was closed + * @type {?} + */ + NgbDropdown.prototype.openChange; + /** + * @type {?} + * @private + */ + NgbDropdown.prototype._changeDetector; + /** + * @type {?} + * @private + */ + NgbDropdown.prototype._document; + /** + * @type {?} + * @private + */ + NgbDropdown.prototype._ngZone; + /** + * @type {?} + * @private + */ + NgbDropdown.prototype._elementRef; + /** + * @type {?} + * @private + */ + NgbDropdown.prototype._renderer; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJkcm9wZG93bi9kcm9wZG93bi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsWUFBWSxFQUNaLGVBQWUsRUFDZixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBR04sTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBRVQsUUFBUSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUMsT0FBTyxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwQyxPQUFPLEVBQTRCLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDaEYsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQy9DLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFaEMsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFcEQ7SUFBQTtJQUVBLENBQUM7O2dCQUZBLFNBQVMsU0FBQyxFQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUM7O0lBRWhDLGdCQUFDO0NBQUEsQUFGRCxJQUVDO1NBRFksU0FBUzs7Ozs7OztBQVN0QjtJQVdFLHlCQUFtQixVQUFtQztRQUFuQyxlQUFVLEdBQVYsVUFBVSxDQUF5QjtRQVQ5QyxjQUFTLEdBQUcsS0FBSyxDQUFDO0lBUytCLENBQUM7SUFQMUQsc0JBQ0kscUNBQVE7Ozs7UUFJWixjQUEwQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDOzs7OztRQUxsRCxV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OztJQWU3QixnQ0FBbUM7Ozs7Ozs7O0lBUW5DLGdDQUFrQzs7Ozs7Ozs7OztJQVVsQyw4QkFBdUM7Ozs7Ozs7OztJQVN2QyxpQ0FBbUQ7Ozs7O0lBRy9DLHNDQUEwQzs7Ozs7SUFBNkIsZ0NBQXdDOzs7OztJQUMvRyw4QkFBdUI7Ozs7O0lBQUUsa0NBQTRDOzs7OztJQUFFLGdDQUE0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb250ZW50Q2hpbGQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgUmVuZGVyZXIyLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBPcHRpb25hbFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RE9DVU1FTlR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1N1YmplY3QsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge3Rha2V9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtQbGFjZW1lbnQsIFBsYWNlbWVudEFycmF5LCBwb3NpdGlvbkVsZW1lbnRzfSBmcm9tICcuLi91dGlsL3Bvc2l0aW9uaW5nJztcbmltcG9ydCB7bmdiQXV0b0Nsb3NlfSBmcm9tICcuLi91dGlsL2F1dG9jbG9zZSc7XG5pbXBvcnQge0tleX0gZnJvbSAnLi4vdXRpbC9rZXknO1xuXG5pbXBvcnQge05nYkRyb3Bkb3duQ29uZmlnfSBmcm9tICcuL2Ryb3Bkb3duLWNvbmZpZyc7XG5cbkBEaXJlY3RpdmUoe3NlbGVjdG9yOiAnLm5hdmJhcid9KVxuZXhwb3J0IGNsYXNzIE5nYk5hdmJhciB7XG59XG5cbi8qKlxuICogQSBkaXJlY3RpdmUgeW91IHNob3VsZCBwdXQgcHV0IG9uIGEgZHJvcGRvd24gaXRlbSB0byBlbmFibGUga2V5Ym9hcmQgbmF2aWdhdGlvbi5cbiAqIEFycm93IGtleXMgd2lsbCBtb3ZlIGZvY3VzIGJldHdlZW4gaXRlbXMgbWFya2VkIHdpdGggdGhpcyBkaXJlY3RpdmUuXG4gKlxuICogQHNpbmNlIDQuMS4wXG4gKi9cbkBEaXJlY3RpdmUoe3NlbGVjdG9yOiAnW25nYkRyb3Bkb3duSXRlbV0nLCBob3N0OiB7J2NsYXNzJzogJ2Ryb3Bkb3duLWl0ZW0nLCAnW2NsYXNzLmRpc2FibGVkXSc6ICdkaXNhYmxlZCd9fSlcbmV4cG9ydCBjbGFzcyBOZ2JEcm9wZG93bkl0ZW0ge1xuICBwcml2YXRlIF9kaXNhYmxlZCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2Rpc2FibGVkID0gPGFueT52YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT09IHRydWU7ICAvLyBhY2NlcHQgYW4gZW1wdHkgYXR0cmlidXRlIGFzIHRydWVcbiAgfVxuXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2Rpc2FibGVkOyB9XG5cbiAgY29uc3RydWN0b3IocHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KSB7fVxufVxuXG4vKipcbiAqIEEgZGlyZWN0aXZlIHRoYXQgd3JhcHMgZHJvcGRvd24gbWVudSBjb250ZW50IGFuZCBkcm9wZG93biBpdGVtcy5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW25nYkRyb3Bkb3duTWVudV0nLFxuICBob3N0OiB7XG4gICAgJ1tjbGFzcy5kcm9wZG93bi1tZW51XSc6ICd0cnVlJyxcbiAgICAnW2NsYXNzLnNob3ddJzogJ2Ryb3Bkb3duLmlzT3BlbigpJyxcbiAgICAnW2F0dHIueC1wbGFjZW1lbnRdJzogJ3BsYWNlbWVudCcsXG4gICAgJyhrZXlkb3duLkFycm93VXApJzogJ2Ryb3Bkb3duLm9uS2V5RG93bigkZXZlbnQpJyxcbiAgICAnKGtleWRvd24uQXJyb3dEb3duKSc6ICdkcm9wZG93bi5vbktleURvd24oJGV2ZW50KScsXG4gICAgJyhrZXlkb3duLkhvbWUpJzogJ2Ryb3Bkb3duLm9uS2V5RG93bigkZXZlbnQpJyxcbiAgICAnKGtleWRvd24uRW5kKSc6ICdkcm9wZG93bi5vbktleURvd24oJGV2ZW50KScsXG4gICAgJyhrZXlkb3duLkVudGVyKSc6ICdkcm9wZG93bi5vbktleURvd24oJGV2ZW50KScsXG4gICAgJyhrZXlkb3duLlNwYWNlKSc6ICdkcm9wZG93bi5vbktleURvd24oJGV2ZW50KSdcbiAgfVxufSlcbmV4cG9ydCBjbGFzcyBOZ2JEcm9wZG93bk1lbnUge1xuICBwbGFjZW1lbnQ6IFBsYWNlbWVudCA9ICdib3R0b20nO1xuICBpc09wZW4gPSBmYWxzZTtcblxuICBAQ29udGVudENoaWxkcmVuKE5nYkRyb3Bkb3duSXRlbSkgbWVudUl0ZW1zOiBRdWVyeUxpc3Q8TmdiRHJvcGRvd25JdGVtPjtcblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KGZvcndhcmRSZWYoKCkgPT4gTmdiRHJvcGRvd24pKSBwdWJsaWMgZHJvcGRvd24pIHt9XG59XG5cbi8qKlxuICogQSBkaXJlY3RpdmUgdG8gbWFyayBhbiBlbGVtZW50IHRvIHdoaWNoIGRyb3Bkb3duIG1lbnUgd2lsbCBiZSBhbmNob3JlZC5cbiAqXG4gKiBUaGlzIGlzIGEgc2ltcGxlIHZlcnNpb24gb2YgdGhlIGBOZ2JEcm9wZG93blRvZ2dsZWAgZGlyZWN0aXZlLlxuICogSXQgcGxheXMgdGhlIHNhbWUgcm9sZSwgYnV0IGRvZXNuJ3QgbGlzdGVuIHRvIGNsaWNrIGV2ZW50cyB0byB0b2dnbGUgZHJvcGRvd24gbWVudSB0aHVzIGVuYWJsaW5nIHN1cHBvcnRcbiAqIGZvciBldmVudHMgb3RoZXIgdGhhbiBjbGljay5cbiAqXG4gKiBAc2luY2UgMS4xLjBcbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW25nYkRyb3Bkb3duQW5jaG9yXScsXG4gIGhvc3Q6IHsnY2xhc3MnOiAnZHJvcGRvd24tdG9nZ2xlJywgJ2FyaWEtaGFzcG9wdXAnOiAndHJ1ZScsICdbYXR0ci5hcmlhLWV4cGFuZGVkXSc6ICdkcm9wZG93bi5pc09wZW4oKSd9XG59KVxuZXhwb3J0IGNsYXNzIE5nYkRyb3Bkb3duQW5jaG9yIHtcbiAgYW5jaG9yRWw7XG5cbiAgY29uc3RydWN0b3IoQEluamVjdChmb3J3YXJkUmVmKCgpID0+IE5nYkRyb3Bkb3duKSkgcHVibGljIGRyb3Bkb3duLCBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50Pikge1xuICAgIHRoaXMuYW5jaG9yRWwgPSBfZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICB9XG5cbiAgZ2V0TmF0aXZlRWxlbWVudCgpIHsgcmV0dXJuIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDsgfVxufVxuXG4vKipcbiAqIEEgZGlyZWN0aXZlIHRvIG1hcmsgYW4gZWxlbWVudCB0aGF0IHdpbGwgdG9nZ2xlIGRyb3Bkb3duIHZpYSB0aGUgYGNsaWNrYCBldmVudC5cbiAqXG4gKiBZb3UgY2FuIGFsc28gdXNlIGBOZ2JEcm9wZG93bkFuY2hvcmAgYXMgYW4gYWx0ZXJuYXRpdmUuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tuZ2JEcm9wZG93blRvZ2dsZV0nLFxuICBob3N0OiB7XG4gICAgJ2NsYXNzJzogJ2Ryb3Bkb3duLXRvZ2dsZScsXG4gICAgJ2FyaWEtaGFzcG9wdXAnOiAndHJ1ZScsXG4gICAgJ1thdHRyLmFyaWEtZXhwYW5kZWRdJzogJ2Ryb3Bkb3duLmlzT3BlbigpJyxcbiAgICAnKGNsaWNrKSc6ICdkcm9wZG93bi50b2dnbGUoKScsXG4gICAgJyhrZXlkb3duLkFycm93VXApJzogJ2Ryb3Bkb3duLm9uS2V5RG93bigkZXZlbnQpJyxcbiAgICAnKGtleWRvd24uQXJyb3dEb3duKSc6ICdkcm9wZG93bi5vbktleURvd24oJGV2ZW50KScsXG4gICAgJyhrZXlkb3duLkhvbWUpJzogJ2Ryb3Bkb3duLm9uS2V5RG93bigkZXZlbnQpJyxcbiAgICAnKGtleWRvd24uRW5kKSc6ICdkcm9wZG93bi5vbktleURvd24oJGV2ZW50KSdcbiAgfSxcbiAgcHJvdmlkZXJzOiBbe3Byb3ZpZGU6IE5nYkRyb3Bkb3duQW5jaG9yLCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBOZ2JEcm9wZG93blRvZ2dsZSl9XVxufSlcbmV4cG9ydCBjbGFzcyBOZ2JEcm9wZG93blRvZ2dsZSBleHRlbmRzIE5nYkRyb3Bkb3duQW5jaG9yIHtcbiAgY29uc3RydWN0b3IoQEluamVjdChmb3J3YXJkUmVmKCgpID0+IE5nYkRyb3Bkb3duKSkgZHJvcGRvd24sIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KSB7XG4gICAgc3VwZXIoZHJvcGRvd24sIGVsZW1lbnRSZWYpO1xuICB9XG59XG5cbi8qKlxuICogQSBkaXJlY3RpdmUgdGhhdCBwcm92aWRlcyBjb250ZXh0dWFsIG92ZXJsYXlzIGZvciBkaXNwbGF5aW5nIGxpc3RzIG9mIGxpbmtzIGFuZCBtb3JlLlxuICovXG5ARGlyZWN0aXZlKHtzZWxlY3RvcjogJ1tuZ2JEcm9wZG93bl0nLCBleHBvcnRBczogJ25nYkRyb3Bkb3duJywgaG9zdDogeydbY2xhc3Muc2hvd10nOiAnaXNPcGVuKCknfX0pXG5leHBvcnQgY2xhc3MgTmdiRHJvcGRvd24gaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIF9jbG9zZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBfem9uZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIF9ib2R5Q29udGFpbmVyOiBIVE1MRWxlbWVudDtcblxuICBAQ29udGVudENoaWxkKE5nYkRyb3Bkb3duTWVudSwge3N0YXRpYzogZmFsc2V9KSBwcml2YXRlIF9tZW51OiBOZ2JEcm9wZG93bk1lbnU7XG4gIEBDb250ZW50Q2hpbGQoTmdiRHJvcGRvd25NZW51LCB7cmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiBmYWxzZX0pIHByaXZhdGUgX21lbnVFbGVtZW50OiBFbGVtZW50UmVmO1xuICBAQ29udGVudENoaWxkKE5nYkRyb3Bkb3duQW5jaG9yLCB7c3RhdGljOiBmYWxzZX0pIHByaXZhdGUgX2FuY2hvcjogTmdiRHJvcGRvd25BbmNob3I7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBkcm9wZG93biBzaG91bGQgYmUgY2xvc2VkIHdoZW4gY2xpY2tpbmcgb25lIG9mIGRyb3Bkb3duIGl0ZW1zIG9yIHByZXNzaW5nIEVTQy5cbiAgICpcbiAgICogKiBgdHJ1ZWAgLSB0aGUgZHJvcGRvd24gd2lsbCBjbG9zZSBvbiBib3RoIG91dHNpZGUgYW5kIGluc2lkZSAobWVudSkgY2xpY2tzLlxuICAgKiAqIGBmYWxzZWAgLSB0aGUgZHJvcGRvd24gY2FuIG9ubHkgYmUgY2xvc2VkIG1hbnVhbGx5IHZpYSBgY2xvc2UoKWAgb3IgYHRvZ2dsZSgpYCBtZXRob2RzLlxuICAgKiAqIGBcImluc2lkZVwiYCAtIHRoZSBkcm9wZG93biB3aWxsIGNsb3NlIG9uIGluc2lkZSBtZW51IGNsaWNrcywgYnV0IG5vdCBvdXRzaWRlIGNsaWNrcy5cbiAgICogKiBgXCJvdXRzaWRlXCJgIC0gdGhlIGRyb3Bkb3duIHdpbGwgY2xvc2Ugb25seSBvbiB0aGUgb3V0c2lkZSBjbGlja3MgYW5kIG5vdCBvbiBtZW51IGNsaWNrcy5cbiAgICovXG4gIEBJbnB1dCgpIGF1dG9DbG9zZTogYm9vbGVhbiB8ICdvdXRzaWRlJyB8ICdpbnNpZGUnO1xuXG4gIC8qKlxuICAgKiBEZWZpbmVzIHdoZXRoZXIgb3Igbm90IHRoZSBkcm9wZG93biBtZW51IGlzIG9wZW5lZCBpbml0aWFsbHkuXG4gICAqL1xuICBASW5wdXQoJ29wZW4nKSBfb3BlbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJlZmVycmVkIHBsYWNlbWVudCBvZiB0aGUgZHJvcGRvd24uXG4gICAqXG4gICAqIFBvc3NpYmxlIHZhbHVlcyBhcmUgYFwidG9wXCJgLCBgXCJ0b3AtbGVmdFwiYCwgYFwidG9wLXJpZ2h0XCJgLCBgXCJib3R0b21cImAsIGBcImJvdHRvbS1sZWZ0XCJgLFxuICAgKiBgXCJib3R0b20tcmlnaHRcImAsIGBcImxlZnRcImAsIGBcImxlZnQtdG9wXCJgLCBgXCJsZWZ0LWJvdHRvbVwiYCwgYFwicmlnaHRcImAsIGBcInJpZ2h0LXRvcFwiYCxcbiAgICogYFwicmlnaHQtYm90dG9tXCJgXG4gICAqXG4gICAqIEFjY2VwdHMgYW4gYXJyYXkgb2Ygc3RyaW5ncyBvciBhIHN0cmluZyB3aXRoIHNwYWNlIHNlcGFyYXRlZCBwb3NzaWJsZSB2YWx1ZXMuXG4gICAqXG4gICAqIFRoZSBkZWZhdWx0IG9yZGVyIG9mIHByZWZlcmVuY2UgaXMgYFwiYm90dG9tLWxlZnQgYm90dG9tLXJpZ2h0IHRvcC1sZWZ0IHRvcC1yaWdodFwiYFxuICAgKlxuICAgKiBQbGVhc2Ugc2VlIHRoZSBbcG9zaXRpb25pbmcgb3ZlcnZpZXddKCMvcG9zaXRpb25pbmcpIGZvciBtb3JlIGRldGFpbHMuXG4gICAqL1xuICBASW5wdXQoKSBwbGFjZW1lbnQ6IFBsYWNlbWVudEFycmF5O1xuXG4gIC8qKlxuICAqIEEgc2VsZWN0b3Igc3BlY2lmeWluZyB0aGUgZWxlbWVudCB0aGUgZHJvcGRvd24gc2hvdWxkIGJlIGFwcGVuZGVkIHRvLlxuICAqIEN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIFwiYm9keVwiLlxuICAqXG4gICogQHNpbmNlIDQuMS4wXG4gICovXG4gIEBJbnB1dCgpIGNvbnRhaW5lcjogbnVsbCB8ICdib2R5JztcblxuICAvKipcbiAgICogRW5hYmxlIG9yIGRpc2FibGUgdGhlIGR5bmFtaWMgcG9zaXRpb25pbmcuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGR5bmFtaWMgdW5sZXNzIHRoZSBkcm9wZG93biBpcyB1c2VkXG4gICAqIGluc2lkZSBhIEJvb3RzdHJhcCBuYXZiYXIuIElmIHlvdSBuZWVkIGN1c3RvbSBwbGFjZW1lbnQgZm9yIGEgZHJvcGRvd24gaW4gYSBuYXZiYXIsIHNldCBpdCB0b1xuICAgKiBkeW5hbWljIGV4cGxpY2l0bHkuIFNlZSB0aGUgW3Bvc2l0aW9uaW5nIG9mIGRyb3Bkb3duXSgjL3Bvc2l0aW9uaW5nI2Ryb3Bkb3duKVxuICAgKiBhbmQgdGhlIFtuYXZiYXIgZGVtb10oLyMvY29tcG9uZW50cy9kcm9wZG93bi9leGFtcGxlcyNuYXZiYXIpIGZvciBtb3JlIGRldGFpbHMuXG4gICAqXG4gICAqIEBzaW5jZSA0LjIuMFxuICAgKi9cbiAgQElucHV0KCkgZGlzcGxheTogJ2R5bmFtaWMnIHwgJ3N0YXRpYyc7XG5cbiAgLyoqXG4gICAqIEFuIGV2ZW50IGZpcmVkIHdoZW4gdGhlIGRyb3Bkb3duIGlzIG9wZW5lZCBvciBjbG9zZWQuXG4gICAqXG4gICAqIFRoZSBldmVudCBwYXlsb2FkIGlzIGEgYGJvb2xlYW5gOlxuICAgKiAqIGB0cnVlYCAtIHRoZSBkcm9wZG93biB3YXMgb3BlbmVkXG4gICAqICogYGZhbHNlYCAtIHRoZSBkcm9wZG93biB3YXMgY2xvc2VkXG4gICAqL1xuICBAT3V0cHV0KCkgb3BlbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgIHByaXZhdGUgX2NoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZiwgY29uZmlnOiBOZ2JEcm9wZG93bkNvbmZpZywgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBfZG9jdW1lbnQ6IGFueSxcbiAgICAgIHByaXZhdGUgX25nWm9uZTogTmdab25lLCBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiwgcHJpdmF0ZSBfcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgIEBPcHRpb25hbCgpIG5nYk5hdmJhcjogTmdiTmF2YmFyKSB7XG4gICAgdGhpcy5wbGFjZW1lbnQgPSBjb25maWcucGxhY2VtZW50O1xuICAgIHRoaXMuY29udGFpbmVyID0gY29uZmlnLmNvbnRhaW5lcjtcbiAgICB0aGlzLmF1dG9DbG9zZSA9IGNvbmZpZy5hdXRvQ2xvc2U7XG5cbiAgICB0aGlzLmRpc3BsYXkgPSBuZ2JOYXZiYXIgPyAnc3RhdGljJyA6ICdkeW5hbWljJztcblxuICAgIHRoaXMuX3pvbmVTdWJzY3JpcHRpb24gPSBfbmdab25lLm9uU3RhYmxlLnN1YnNjcmliZSgoKSA9PiB7IHRoaXMuX3Bvc2l0aW9uTWVudSgpOyB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICB0aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5fYXBwbHlQbGFjZW1lbnRDbGFzc2VzKCk7XG4gICAgICBpZiAodGhpcy5fb3Blbikge1xuICAgICAgICB0aGlzLl9zZXRDbG9zZUhhbmRsZXJzKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXMuY29udGFpbmVyICYmIHRoaXMuX29wZW4pIHtcbiAgICAgIHRoaXMuX2FwcGx5Q29udGFpbmVyKHRoaXMuY29udGFpbmVyKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlcy5wbGFjZW1lbnQgJiYgIWNoYW5nZXMucGxhY2VtZW50LmlzRmlyc3RDaGFuZ2UpIHtcbiAgICAgIHRoaXMuX2FwcGx5UGxhY2VtZW50Q2xhc3NlcygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGRyb3Bkb3duIG1lbnUgaXMgb3Blbi5cbiAgICovXG4gIGlzT3BlbigpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX29wZW47IH1cblxuICAvKipcbiAgICogT3BlbnMgdGhlIGRyb3Bkb3duIG1lbnUuXG4gICAqL1xuICBvcGVuKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fb3Blbikge1xuICAgICAgdGhpcy5fb3BlbiA9IHRydWU7XG4gICAgICB0aGlzLl9hcHBseUNvbnRhaW5lcih0aGlzLmNvbnRhaW5lcik7XG4gICAgICB0aGlzLm9wZW5DaGFuZ2UuZW1pdCh0cnVlKTtcbiAgICAgIHRoaXMuX3NldENsb3NlSGFuZGxlcnMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zZXRDbG9zZUhhbmRsZXJzKCkge1xuICAgIGNvbnN0IGFuY2hvciA9IHRoaXMuX2FuY2hvcjtcbiAgICBuZ2JBdXRvQ2xvc2UoXG4gICAgICAgIHRoaXMuX25nWm9uZSwgdGhpcy5fZG9jdW1lbnQsIHRoaXMuYXV0b0Nsb3NlLCAoKSA9PiB0aGlzLmNsb3NlKCksIHRoaXMuX2Nsb3NlZCQsXG4gICAgICAgIHRoaXMuX21lbnUgPyBbdGhpcy5fbWVudUVsZW1lbnQubmF0aXZlRWxlbWVudF0gOiBbXSwgYW5jaG9yID8gW2FuY2hvci5nZXROYXRpdmVFbGVtZW50KCldIDogW10sXG4gICAgICAgICcuZHJvcGRvd24taXRlbSwuZHJvcGRvd24tZGl2aWRlcicpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyB0aGUgZHJvcGRvd24gbWVudS5cbiAgICovXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9vcGVuKSB7XG4gICAgICB0aGlzLl9vcGVuID0gZmFsc2U7XG4gICAgICB0aGlzLl9yZXNldENvbnRhaW5lcigpO1xuICAgICAgdGhpcy5fY2xvc2VkJC5uZXh0KCk7XG4gICAgICB0aGlzLm9wZW5DaGFuZ2UuZW1pdChmYWxzZSk7XG4gICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlcyB0aGUgZHJvcGRvd24gbWVudS5cbiAgICovXG4gIHRvZ2dsZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc09wZW4oKSkge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wZW4oKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9yZXNldENvbnRhaW5lcigpO1xuXG4gICAgdGhpcy5fY2xvc2VkJC5uZXh0KCk7XG4gICAgdGhpcy5fem9uZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmRlcHJlY2F0aW9uXG4gICAgY29uc3Qga2V5ID0gZXZlbnQud2hpY2g7XG4gICAgY29uc3QgaXRlbUVsZW1lbnRzID0gdGhpcy5fZ2V0TWVudUVsZW1lbnRzKCk7XG5cbiAgICBsZXQgcG9zaXRpb24gPSAtMTtcbiAgICBsZXQgaXNFdmVudEZyb21JdGVtcyA9IGZhbHNlO1xuICAgIGNvbnN0IGlzRXZlbnRGcm9tVG9nZ2xlID0gdGhpcy5faXNFdmVudEZyb21Ub2dnbGUoZXZlbnQpO1xuXG4gICAgaWYgKCFpc0V2ZW50RnJvbVRvZ2dsZSAmJiBpdGVtRWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICBpdGVtRWxlbWVudHMuZm9yRWFjaCgoaXRlbUVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICAgIGlmIChpdGVtRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpKSB7XG4gICAgICAgICAgaXNFdmVudEZyb21JdGVtcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0ZW1FbGVtZW50ID09PSB0aGlzLl9kb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XG4gICAgICAgICAgcG9zaXRpb24gPSBpbmRleDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gY2xvc2luZyBvbiBFbnRlciAvIFNwYWNlXG4gICAgaWYgKGtleSA9PT0gS2V5LlNwYWNlIHx8IGtleSA9PT0gS2V5LkVudGVyKSB7XG4gICAgICBpZiAoaXNFdmVudEZyb21JdGVtcyAmJiAodGhpcy5hdXRvQ2xvc2UgPT09IHRydWUgfHwgdGhpcy5hdXRvQ2xvc2UgPT09ICdpbnNpZGUnKSkge1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gb3BlbmluZyAvIG5hdmlnYXRpbmdcbiAgICBpZiAoaXNFdmVudEZyb21Ub2dnbGUgfHwgaXNFdmVudEZyb21JdGVtcykge1xuICAgICAgdGhpcy5vcGVuKCk7XG5cbiAgICAgIGlmIChpdGVtRWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgY2FzZSBLZXkuQXJyb3dEb3duOlxuICAgICAgICAgICAgcG9zaXRpb24gPSBNYXRoLm1pbihwb3NpdGlvbiArIDEsIGl0ZW1FbGVtZW50cy5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgS2V5LkFycm93VXA6XG4gICAgICAgICAgICBpZiAodGhpcy5faXNEcm9wdXAoKSAmJiBwb3NpdGlvbiA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgcG9zaXRpb24gPSBpdGVtRWxlbWVudHMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwb3NpdGlvbiA9IE1hdGgubWF4KHBvc2l0aW9uIC0gMSwgMCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIEtleS5Ib21lOlxuICAgICAgICAgICAgcG9zaXRpb24gPSAwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBLZXkuRW5kOlxuICAgICAgICAgICAgcG9zaXRpb24gPSBpdGVtRWxlbWVudHMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGl0ZW1FbGVtZW50c1twb3NpdGlvbl0uZm9jdXMoKTtcbiAgICAgIH1cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaXNEcm9wdXAoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdkcm9wdXAnKTsgfVxuXG4gIHByaXZhdGUgX2lzRXZlbnRGcm9tVG9nZ2xlKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgcmV0dXJuIHRoaXMuX2FuY2hvci5nZXROYXRpdmVFbGVtZW50KCkuY29udGFpbnMoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldE1lbnVFbGVtZW50cygpOiBIVE1MRWxlbWVudFtdIHtcbiAgICBjb25zdCBtZW51ID0gdGhpcy5fbWVudTtcbiAgICBpZiAobWVudSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHJldHVybiBtZW51Lm1lbnVJdGVtcy5maWx0ZXIoaXRlbSA9PiAhaXRlbS5kaXNhYmxlZCkubWFwKGl0ZW0gPT4gaXRlbS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcG9zaXRpb25NZW51KCkge1xuICAgIGNvbnN0IG1lbnUgPSB0aGlzLl9tZW51O1xuICAgIGlmICh0aGlzLmlzT3BlbigpICYmIG1lbnUpIHtcbiAgICAgIHRoaXMuX2FwcGx5UGxhY2VtZW50Q2xhc3NlcyhcbiAgICAgICAgICB0aGlzLmRpc3BsYXkgPT09ICdkeW5hbWljJyA/XG4gICAgICAgICAgICAgIHBvc2l0aW9uRWxlbWVudHMoXG4gICAgICAgICAgICAgICAgICB0aGlzLl9hbmNob3IuYW5jaG9yRWwsIHRoaXMuX2JvZHlDb250YWluZXIgfHwgdGhpcy5fbWVudUVsZW1lbnQubmF0aXZlRWxlbWVudCwgdGhpcy5wbGFjZW1lbnQsXG4gICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lciA9PT0gJ2JvZHknKSA6XG4gICAgICAgICAgICAgIHRoaXMuX2dldEZpcnN0UGxhY2VtZW50KHRoaXMucGxhY2VtZW50KSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0Rmlyc3RQbGFjZW1lbnQocGxhY2VtZW50OiBQbGFjZW1lbnRBcnJheSk6IFBsYWNlbWVudCB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocGxhY2VtZW50KSA/IHBsYWNlbWVudFswXSA6IHBsYWNlbWVudC5zcGxpdCgnICcpWzBdIGFzIFBsYWNlbWVudDtcbiAgfVxuXG4gIHByaXZhdGUgX3Jlc2V0Q29udGFpbmVyKCkge1xuICAgIGNvbnN0IHJlbmRlcmVyID0gdGhpcy5fcmVuZGVyZXI7XG4gICAgY29uc3QgbWVudUVsZW1lbnQgPSB0aGlzLl9tZW51RWxlbWVudDtcbiAgICBpZiAobWVudUVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGRyb3Bkb3duRWxlbWVudCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgIGNvbnN0IGRyb3Bkb3duTWVudUVsZW1lbnQgPSBtZW51RWxlbWVudC5uYXRpdmVFbGVtZW50O1xuXG4gICAgICByZW5kZXJlci5hcHBlbmRDaGlsZChkcm9wZG93bkVsZW1lbnQsIGRyb3Bkb3duTWVudUVsZW1lbnQpO1xuICAgICAgcmVuZGVyZXIucmVtb3ZlU3R5bGUoZHJvcGRvd25NZW51RWxlbWVudCwgJ3Bvc2l0aW9uJyk7XG4gICAgICByZW5kZXJlci5yZW1vdmVTdHlsZShkcm9wZG93bk1lbnVFbGVtZW50LCAndHJhbnNmb3JtJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9ib2R5Q29udGFpbmVyKSB7XG4gICAgICByZW5kZXJlci5yZW1vdmVDaGlsZCh0aGlzLl9kb2N1bWVudC5ib2R5LCB0aGlzLl9ib2R5Q29udGFpbmVyKTtcbiAgICAgIHRoaXMuX2JvZHlDb250YWluZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2FwcGx5Q29udGFpbmVyKGNvbnRhaW5lcjogbnVsbCB8ICdib2R5JyA9IG51bGwpIHtcbiAgICB0aGlzLl9yZXNldENvbnRhaW5lcigpO1xuICAgIGlmIChjb250YWluZXIgPT09ICdib2R5Jykge1xuICAgICAgY29uc3QgcmVuZGVyZXIgPSB0aGlzLl9yZW5kZXJlcjtcbiAgICAgIGNvbnN0IGRyb3Bkb3duTWVudUVsZW1lbnQgPSB0aGlzLl9tZW51RWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgICAgY29uc3QgYm9keUNvbnRhaW5lciA9IHRoaXMuX2JvZHlDb250YWluZXIgPSB0aGlzLl9ib2R5Q29udGFpbmVyIHx8IHJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG4gICAgICAvLyBPdmVycmlkZSBzb21lIHN0eWxlcyB0byBoYXZlIHRoZSBwb3NpdGlvbm5pbmcgd29ya2luZ1xuICAgICAgcmVuZGVyZXIuc2V0U3R5bGUoYm9keUNvbnRhaW5lciwgJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJyk7XG4gICAgICByZW5kZXJlci5zZXRTdHlsZShkcm9wZG93bk1lbnVFbGVtZW50LCAncG9zaXRpb24nLCAnc3RhdGljJyk7XG4gICAgICByZW5kZXJlci5zZXRTdHlsZShib2R5Q29udGFpbmVyLCAnei1pbmRleCcsICcxMDUwJyk7XG5cbiAgICAgIHJlbmRlcmVyLmFwcGVuZENoaWxkKGJvZHlDb250YWluZXIsIGRyb3Bkb3duTWVudUVsZW1lbnQpO1xuICAgICAgcmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5fZG9jdW1lbnQuYm9keSwgYm9keUNvbnRhaW5lcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfYXBwbHlQbGFjZW1lbnRDbGFzc2VzKHBsYWNlbWVudD86IFBsYWNlbWVudCkge1xuICAgIGNvbnN0IG1lbnUgPSB0aGlzLl9tZW51O1xuICAgIGlmIChtZW51KSB7XG4gICAgICBpZiAoIXBsYWNlbWVudCkge1xuICAgICAgICBwbGFjZW1lbnQgPSB0aGlzLl9nZXRGaXJzdFBsYWNlbWVudCh0aGlzLnBsYWNlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlbmRlcmVyID0gdGhpcy5fcmVuZGVyZXI7XG4gICAgICBjb25zdCBkcm9wZG93bkVsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgIC8vIHJlbW92ZSB0aGUgY3VycmVudCBwbGFjZW1lbnQgY2xhc3Nlc1xuICAgICAgcmVuZGVyZXIucmVtb3ZlQ2xhc3MoZHJvcGRvd25FbGVtZW50LCAnZHJvcHVwJyk7XG4gICAgICByZW5kZXJlci5yZW1vdmVDbGFzcyhkcm9wZG93bkVsZW1lbnQsICdkcm9wZG93bicpO1xuICAgICAgbWVudS5wbGFjZW1lbnQgPSB0aGlzLmRpc3BsYXkgPT09ICdzdGF0aWMnID8gbnVsbCA6IHBsYWNlbWVudDtcblxuICAgICAgLypcbiAgICAgICogYXBwbHkgdGhlIG5ldyBwbGFjZW1lbnRcbiAgICAgICogaW4gY2FzZSBvZiB0b3AgdXNlIHVwLWFycm93IG9yIGRvd24tYXJyb3cgb3RoZXJ3aXNlXG4gICAgICAqL1xuICAgICAgY29uc3QgZHJvcGRvd25DbGFzcyA9IHBsYWNlbWVudC5zZWFyY2goJ150b3AnKSAhPT0gLTEgPyAnZHJvcHVwJyA6ICdkcm9wZG93bic7XG4gICAgICByZW5kZXJlci5hZGRDbGFzcyhkcm9wZG93bkVsZW1lbnQsIGRyb3Bkb3duQ2xhc3MpO1xuXG4gICAgICBjb25zdCBib2R5Q29udGFpbmVyID0gdGhpcy5fYm9keUNvbnRhaW5lcjtcbiAgICAgIGlmIChib2R5Q29udGFpbmVyKSB7XG4gICAgICAgIHJlbmRlcmVyLnJlbW92ZUNsYXNzKGJvZHlDb250YWluZXIsICdkcm9wdXAnKTtcbiAgICAgICAgcmVuZGVyZXIucmVtb3ZlQ2xhc3MoYm9keUNvbnRhaW5lciwgJ2Ryb3Bkb3duJyk7XG4gICAgICAgIHJlbmRlcmVyLmFkZENsYXNzKGJvZHlDb250YWluZXIsIGRyb3Bkb3duQ2xhc3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/dropdown/dropdown.module.js b/dist/sunbird-ui-components/esm5/dropdown/dropdown.module.js new file mode 100644 index 0000000..a58cccb --- /dev/null +++ b/dist/sunbird-ui-components/esm5/dropdown/dropdown.module.js @@ -0,0 +1,20 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgModule } from '@angular/core'; +import { NgbDropdown, NgbDropdownAnchor, NgbDropdownToggle, NgbDropdownMenu, NgbDropdownItem, NgbNavbar } from './dropdown'; +export { NgbDropdown, NgbDropdownAnchor, NgbDropdownToggle, NgbDropdownMenu, NgbDropdownItem } from './dropdown'; +export { NgbDropdownConfig } from './dropdown-config'; +/** @type {?} */ +var NGB_DROPDOWN_DIRECTIVES = [NgbDropdown, NgbDropdownAnchor, NgbDropdownToggle, NgbDropdownMenu, NgbDropdownItem, NgbNavbar]; +var NgbDropdownModule = /** @class */ (function () { + function NgbDropdownModule() { + } + NgbDropdownModule.decorators = [ + { type: NgModule, args: [{ declarations: NGB_DROPDOWN_DIRECTIVES, exports: NGB_DROPDOWN_DIRECTIVES },] } + ]; + return NgbDropdownModule; +}()); +export { NgbDropdownModule }; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24ubW9kdWxlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiZHJvcGRvd24vZHJvcGRvd24ubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFDTCxXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixlQUFlLEVBQ2YsZUFBZSxFQUNmLFNBQVMsRUFDVixNQUFNLFlBQVksQ0FBQztBQUVwQixPQUFPLEVBQUMsV0FBVyxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDL0csT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7O0lBRTlDLHVCQUF1QixHQUN6QixDQUFDLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLFNBQVMsQ0FBQztBQUVwRztJQUFBO0lBRUEsQ0FBQzs7Z0JBRkEsUUFBUSxTQUFDLEVBQUMsWUFBWSxFQUFFLHVCQUF1QixFQUFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBQzs7SUFFbkYsd0JBQUM7Q0FBQSxBQUZELElBRUM7U0FEWSxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge05nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIE5nYkRyb3Bkb3duLFxuICBOZ2JEcm9wZG93bkFuY2hvcixcbiAgTmdiRHJvcGRvd25Ub2dnbGUsXG4gIE5nYkRyb3Bkb3duTWVudSxcbiAgTmdiRHJvcGRvd25JdGVtLFxuICBOZ2JOYXZiYXJcbn0gZnJvbSAnLi9kcm9wZG93bic7XG5cbmV4cG9ydCB7TmdiRHJvcGRvd24sIE5nYkRyb3Bkb3duQW5jaG9yLCBOZ2JEcm9wZG93blRvZ2dsZSwgTmdiRHJvcGRvd25NZW51LCBOZ2JEcm9wZG93bkl0ZW19IGZyb20gJy4vZHJvcGRvd24nO1xuZXhwb3J0IHtOZ2JEcm9wZG93bkNvbmZpZ30gZnJvbSAnLi9kcm9wZG93bi1jb25maWcnO1xuXG5jb25zdCBOR0JfRFJPUERPV05fRElSRUNUSVZFUyA9XG4gICAgW05nYkRyb3Bkb3duLCBOZ2JEcm9wZG93bkFuY2hvciwgTmdiRHJvcGRvd25Ub2dnbGUsIE5nYkRyb3Bkb3duTWVudSwgTmdiRHJvcGRvd25JdGVtLCBOZ2JOYXZiYXJdO1xuXG5ATmdNb2R1bGUoe2RlY2xhcmF0aW9uczogTkdCX0RST1BET1dOX0RJUkVDVElWRVMsIGV4cG9ydHM6IE5HQl9EUk9QRE9XTl9ESVJFQ1RJVkVTfSlcbmV4cG9ydCBjbGFzcyBOZ2JEcm9wZG93bk1vZHVsZSB7XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/index.js b/dist/sunbird-ui-components/esm5/index.js new file mode 100644 index 0000000..41ad458 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/index.js @@ -0,0 +1,57 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgModule } from '@angular/core'; +import { SbCardModule } from './card/card.module'; +import { NgbAccordionModule } from './accordion/accordion.module'; +import { NgbAlertModule } from './alert/alert.module'; +import { NgbButtonsModule } from './buttons/buttons.module'; +import { NgbCarouselModule } from './carousel/carousel.module'; +import { NgbCollapseModule } from './collapse/collapse.module'; +import { NgbDatepickerModule } from './datepicker/datepicker.module'; +import { NgbDropdownModule } from './dropdown/dropdown.module'; +import { NgbModalModule } from './modal/modal.module'; +import { NgbPaginationModule } from './pagination/pagination.module'; +import { NgbPopoverModule } from './popover/popover.module'; +import { NgbProgressbarModule } from './progressbar/progressbar.module'; +import { NgbRatingModule } from './rating/rating.module'; +import { NgbTabsetModule } from './tabset/tabset.module'; +import { NgbTimepickerModule } from './timepicker/timepicker.module'; +import { NgbToastModule } from './toast/toast.module'; +import { NgbTooltipModule } from './tooltip/tooltip.module'; +import { NgbTypeaheadModule } from './typeahead/typeahead.module'; +export { NgbAccordion, NgbAccordionConfig, NgbAccordionModule, NgbPanel, NgbPanelContent, NgbPanelHeader, NgbPanelTitle, NgbPanelToggle } from './accordion/accordion.module'; +export { SbCard, SbCardConfig, SbCardModule } from './card/card.module'; +export { NgbAlert, NgbAlertConfig, NgbAlertModule } from './alert/alert.module'; +export { NgbButtonLabel, NgbButtonsModule, NgbCheckBox, NgbRadio, NgbRadioGroup } from './buttons/buttons.module'; +export { NgbCarousel, NgbCarouselConfig, NgbCarouselModule, NgbSlide, NgbSlideEventDirection, NgbSlideEventSource } from './carousel/carousel.module'; +export { NgbCollapse, NgbCollapseModule } from './collapse/collapse.module'; +export { NgbCalendar, NgbCalendarGregorian, NgbCalendarHebrew, NgbCalendarIslamicCivil, NgbCalendarIslamicUmalqura, NgbCalendarPersian, NgbDate, NgbDateAdapter, NgbDateNativeAdapter, NgbDateNativeUTCAdapter, NgbDateParserFormatter, NgbDatepicker, NgbDatepickerConfig, NgbDatepickerI18n, NgbDatepickerI18nHebrew, NgbDatepickerModule, NgbInputDatepicker } from './datepicker/datepicker.module'; +export { NgbDropdown, NgbDropdownAnchor, NgbDropdownConfig, NgbDropdownItem, NgbDropdownMenu, NgbDropdownModule, NgbDropdownToggle } from './dropdown/dropdown.module'; +export { ModalDismissReasons, NgbActiveModal, NgbModal, NgbModalConfig, NgbModalModule, NgbModalRef } from './modal/modal.module'; +export { NgbPagination, NgbPaginationConfig, NgbPaginationEllipsis, NgbPaginationFirst, NgbPaginationLast, NgbPaginationModule, NgbPaginationNext, NgbPaginationNumber, NgbPaginationPrevious } from './pagination/pagination.module'; +export { NgbPopover, NgbPopoverConfig, NgbPopoverModule } from './popover/popover.module'; +export { NgbProgressbar, NgbProgressbarConfig, NgbProgressbarModule } from './progressbar/progressbar.module'; +export { NgbRating, NgbRatingConfig, NgbRatingModule } from './rating/rating.module'; +export { NgbTab, NgbTabContent, NgbTabset, NgbTabsetConfig, NgbTabsetModule, NgbTabTitle } from './tabset/tabset.module'; +export { NgbTimeAdapter, NgbTimepickerI18n, NgbTimepicker, NgbTimepickerConfig, NgbTimepickerModule } from './timepicker/timepicker.module'; +export { NgbToast, NgbToastConfig, NgbToastHeader, NgbToastModule } from './toast/toast.module'; +export { NgbTooltip, NgbTooltipConfig, NgbTooltipModule } from './tooltip/tooltip.module'; +export { NgbHighlight, NgbTypeahead, NgbTypeaheadConfig, NgbTypeaheadModule } from './typeahead/typeahead.module'; +/** @type {?} */ +var NGB_MODULES = [ + SbCardModule, NgbAccordionModule, NgbAlertModule, NgbButtonsModule, NgbCarouselModule, NgbCollapseModule, NgbDatepickerModule, + NgbDropdownModule, NgbModalModule, NgbPaginationModule, NgbPopoverModule, NgbProgressbarModule, NgbRatingModule, + NgbTabsetModule, NgbTimepickerModule, NgbToastModule, NgbTooltipModule, NgbTypeaheadModule +]; +var NgbModule = /** @class */ (function () { + function NgbModule() { + } + NgbModule.decorators = [ + { type: NgModule, args: [{ imports: NGB_MODULES, exports: NGB_MODULES },] } + ]; + return NgbModule; +}()); +export { NgbModule }; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV2QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ25FLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUN0RSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ25FLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUloRSxPQUFPLEVBQ0wsWUFBWSxFQUNaLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIsUUFBUSxFQUVSLGVBQWUsRUFDZixjQUFjLEVBRWQsYUFBYSxFQUNiLGNBQWMsRUFDZixNQUFNLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8sRUFBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQ3RFLE9BQU8sRUFBQyxRQUFRLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzlFLE9BQU8sRUFBQyxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUNoSCxPQUFPLEVBQ0wsV0FBVyxFQUNYLGlCQUFpQixFQUNqQixpQkFBaUIsRUFDakIsUUFBUSxFQUVSLHNCQUFzQixFQUN0QixtQkFBbUIsRUFDcEIsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQUMsV0FBVyxFQUFFLGlCQUFpQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDMUUsT0FBTyxFQUNMLFdBQVcsRUFDWCxvQkFBb0IsRUFDcEIsaUJBQWlCLEVBQ2pCLHVCQUF1QixFQUN2QiwwQkFBMEIsRUFDMUIsa0JBQWtCLEVBQ2xCLE9BQU8sRUFDUCxjQUFjLEVBQ2Qsb0JBQW9CLEVBQ3BCLHVCQUF1QixFQUN2QixzQkFBc0IsRUFDdEIsYUFBYSxFQUNiLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsdUJBQXVCLEVBQ3ZCLG1CQUFtQixFQUduQixrQkFBa0IsRUFFbkIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQ0wsV0FBVyxFQUNYLGlCQUFpQixFQUNqQixpQkFBaUIsRUFDakIsZUFBZSxFQUNmLGVBQWUsRUFDZixpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2xCLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixjQUFjLEVBQ2QsUUFBUSxFQUNSLGNBQWMsRUFDZCxjQUFjLEVBRWQsV0FBVyxFQUNaLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUNMLGFBQWEsRUFDYixtQkFBbUIsRUFDbkIscUJBQXFCLEVBQ3JCLGtCQUFrQixFQUNsQixpQkFBaUIsRUFDakIsbUJBQW1CLEVBQ25CLGlCQUFpQixFQUNqQixtQkFBbUIsRUFDbkIscUJBQXFCLEVBQ3RCLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEMsT0FBTyxFQUFDLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3hGLE9BQU8sRUFBQyxjQUFjLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUM1RyxPQUFPLEVBQUMsU0FBUyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRixPQUFPLEVBQ0wsTUFBTSxFQUVOLGFBQWEsRUFDYixTQUFTLEVBQ1QsZUFBZSxFQUNmLGVBQWUsRUFDZixXQUFXLEVBQ1osTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQ0wsY0FBYyxFQUNkLGlCQUFpQixFQUNqQixhQUFhLEVBQ2IsbUJBQW1CLEVBQ25CLG1CQUFtQixFQUVwQixNQUFNLGdDQUFnQyxDQUFDO0FBQ3hDLE9BQU8sRUFBQyxRQUFRLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUM5RixPQUFPLEVBQUMsVUFBVSxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDeEYsT0FBTyxFQUNMLFlBQVksRUFDWixZQUFZLEVBQ1osa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUVuQixNQUFNLDhCQUE4QixDQUFDOztJQUloQyxXQUFXLEdBQUc7SUFDbEIsWUFBWSxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUI7SUFDN0gsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixFQUFFLGVBQWU7SUFDL0csZUFBZSxFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0I7Q0FDM0Y7QUFFRDtJQUFBO0lBRUEsQ0FBQzs7Z0JBRkEsUUFBUSxTQUFDLEVBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFDOztJQUV0RCxnQkFBQztDQUFBLEFBRkQsSUFFQztTQURZLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge05nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtTYkNhcmRNb2R1bGV9IGZyb20gJy4vY2FyZC9jYXJkLm1vZHVsZSc7XG5pbXBvcnQge05nYkFjY29yZGlvbk1vZHVsZX0gZnJvbSAnLi9hY2NvcmRpb24vYWNjb3JkaW9uLm1vZHVsZSc7XG5pbXBvcnQge05nYkFsZXJ0TW9kdWxlfSBmcm9tICcuL2FsZXJ0L2FsZXJ0Lm1vZHVsZSc7XG5pbXBvcnQge05nYkJ1dHRvbnNNb2R1bGV9IGZyb20gJy4vYnV0dG9ucy9idXR0b25zLm1vZHVsZSc7XG5pbXBvcnQge05nYkNhcm91c2VsTW9kdWxlfSBmcm9tICcuL2Nhcm91c2VsL2Nhcm91c2VsLm1vZHVsZSc7XG5pbXBvcnQge05nYkNvbGxhcHNlTW9kdWxlfSBmcm9tICcuL2NvbGxhcHNlL2NvbGxhcHNlLm1vZHVsZSc7XG5pbXBvcnQge05nYkRhdGVwaWNrZXJNb2R1bGV9IGZyb20gJy4vZGF0ZXBpY2tlci9kYXRlcGlja2VyLm1vZHVsZSc7XG5pbXBvcnQge05nYkRyb3Bkb3duTW9kdWxlfSBmcm9tICcuL2Ryb3Bkb3duL2Ryb3Bkb3duLm1vZHVsZSc7XG5pbXBvcnQge05nYk1vZGFsTW9kdWxlfSBmcm9tICcuL21vZGFsL21vZGFsLm1vZHVsZSc7XG5pbXBvcnQge05nYlBhZ2luYXRpb25Nb2R1bGV9IGZyb20gJy4vcGFnaW5hdGlvbi9wYWdpbmF0aW9uLm1vZHVsZSc7XG5pbXBvcnQge05nYlBvcG92ZXJNb2R1bGV9IGZyb20gJy4vcG9wb3Zlci9wb3BvdmVyLm1vZHVsZSc7XG5pbXBvcnQge05nYlByb2dyZXNzYmFyTW9kdWxlfSBmcm9tICcuL3Byb2dyZXNzYmFyL3Byb2dyZXNzYmFyLm1vZHVsZSc7XG5pbXBvcnQge05nYlJhdGluZ01vZHVsZX0gZnJvbSAnLi9yYXRpbmcvcmF0aW5nLm1vZHVsZSc7XG5pbXBvcnQge05nYlRhYnNldE1vZHVsZX0gZnJvbSAnLi90YWJzZXQvdGFic2V0Lm1vZHVsZSc7XG5pbXBvcnQge05nYlRpbWVwaWNrZXJNb2R1bGV9IGZyb20gJy4vdGltZXBpY2tlci90aW1lcGlja2VyLm1vZHVsZSc7XG5pbXBvcnQge05nYlRvYXN0TW9kdWxlfSBmcm9tICcuL3RvYXN0L3RvYXN0Lm1vZHVsZSc7XG5pbXBvcnQge05nYlRvb2x0aXBNb2R1bGV9IGZyb20gJy4vdG9vbHRpcC90b29sdGlwLm1vZHVsZSc7XG5pbXBvcnQge05nYlR5cGVhaGVhZE1vZHVsZX0gZnJvbSAnLi90eXBlYWhlYWQvdHlwZWFoZWFkLm1vZHVsZSc7XG5cblxuXG5leHBvcnQge1xuICBOZ2JBY2NvcmRpb24sXG4gIE5nYkFjY29yZGlvbkNvbmZpZyxcbiAgTmdiQWNjb3JkaW9uTW9kdWxlLFxuICBOZ2JQYW5lbCxcbiAgTmdiUGFuZWxDaGFuZ2VFdmVudCxcbiAgTmdiUGFuZWxDb250ZW50LFxuICBOZ2JQYW5lbEhlYWRlcixcbiAgTmdiUGFuZWxIZWFkZXJDb250ZXh0LFxuICBOZ2JQYW5lbFRpdGxlLFxuICBOZ2JQYW5lbFRvZ2dsZVxufSBmcm9tICcuL2FjY29yZGlvbi9hY2NvcmRpb24ubW9kdWxlJztcbmV4cG9ydCB7U2JDYXJkLCBTYkNhcmRDb25maWcsIFNiQ2FyZE1vZHVsZX0gZnJvbSAnLi9jYXJkL2NhcmQubW9kdWxlJztcbmV4cG9ydCB7TmdiQWxlcnQsIE5nYkFsZXJ0Q29uZmlnLCBOZ2JBbGVydE1vZHVsZX0gZnJvbSAnLi9hbGVydC9hbGVydC5tb2R1bGUnO1xuZXhwb3J0IHtOZ2JCdXR0b25MYWJlbCwgTmdiQnV0dG9uc01vZHVsZSwgTmdiQ2hlY2tCb3gsIE5nYlJhZGlvLCBOZ2JSYWRpb0dyb3VwfSBmcm9tICcuL2J1dHRvbnMvYnV0dG9ucy5tb2R1bGUnO1xuZXhwb3J0IHtcbiAgTmdiQ2Fyb3VzZWwsXG4gIE5nYkNhcm91c2VsQ29uZmlnLFxuICBOZ2JDYXJvdXNlbE1vZHVsZSxcbiAgTmdiU2xpZGUsXG4gIE5nYlNsaWRlRXZlbnQsXG4gIE5nYlNsaWRlRXZlbnREaXJlY3Rpb24sXG4gIE5nYlNsaWRlRXZlbnRTb3VyY2Vcbn0gZnJvbSAnLi9jYXJvdXNlbC9jYXJvdXNlbC5tb2R1bGUnO1xuZXhwb3J0IHtOZ2JDb2xsYXBzZSwgTmdiQ29sbGFwc2VNb2R1bGV9IGZyb20gJy4vY29sbGFwc2UvY29sbGFwc2UubW9kdWxlJztcbmV4cG9ydCB7XG4gIE5nYkNhbGVuZGFyLFxuICBOZ2JDYWxlbmRhckdyZWdvcmlhbixcbiAgTmdiQ2FsZW5kYXJIZWJyZXcsXG4gIE5nYkNhbGVuZGFySXNsYW1pY0NpdmlsLFxuICBOZ2JDYWxlbmRhcklzbGFtaWNVbWFscXVyYSxcbiAgTmdiQ2FsZW5kYXJQZXJzaWFuLFxuICBOZ2JEYXRlLFxuICBOZ2JEYXRlQWRhcHRlcixcbiAgTmdiRGF0ZU5hdGl2ZUFkYXB0ZXIsXG4gIE5nYkRhdGVOYXRpdmVVVENBZGFwdGVyLFxuICBOZ2JEYXRlUGFyc2VyRm9ybWF0dGVyLFxuICBOZ2JEYXRlcGlja2VyLFxuICBOZ2JEYXRlcGlja2VyQ29uZmlnLFxuICBOZ2JEYXRlcGlja2VySTE4bixcbiAgTmdiRGF0ZXBpY2tlckkxOG5IZWJyZXcsXG4gIE5nYkRhdGVwaWNrZXJNb2R1bGUsXG4gIE5nYkRhdGVwaWNrZXJOYXZpZ2F0ZUV2ZW50LFxuICBOZ2JEYXRlU3RydWN0LFxuICBOZ2JJbnB1dERhdGVwaWNrZXIsXG4gIE5nYlBlcmlvZFxufSBmcm9tICcuL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5tb2R1bGUnO1xuZXhwb3J0IHtcbiAgTmdiRHJvcGRvd24sXG4gIE5nYkRyb3Bkb3duQW5jaG9yLFxuICBOZ2JEcm9wZG93bkNvbmZpZyxcbiAgTmdiRHJvcGRvd25JdGVtLFxuICBOZ2JEcm9wZG93bk1lbnUsXG4gIE5nYkRyb3Bkb3duTW9kdWxlLFxuICBOZ2JEcm9wZG93blRvZ2dsZVxufSBmcm9tICcuL2Ryb3Bkb3duL2Ryb3Bkb3duLm1vZHVsZSc7XG5leHBvcnQge1xuICBNb2RhbERpc21pc3NSZWFzb25zLFxuICBOZ2JBY3RpdmVNb2RhbCxcbiAgTmdiTW9kYWwsXG4gIE5nYk1vZGFsQ29uZmlnLFxuICBOZ2JNb2RhbE1vZHVsZSxcbiAgTmdiTW9kYWxPcHRpb25zLFxuICBOZ2JNb2RhbFJlZlxufSBmcm9tICcuL21vZGFsL21vZGFsLm1vZHVsZSc7XG5leHBvcnQge1xuICBOZ2JQYWdpbmF0aW9uLFxuICBOZ2JQYWdpbmF0aW9uQ29uZmlnLFxuICBOZ2JQYWdpbmF0aW9uRWxsaXBzaXMsXG4gIE5nYlBhZ2luYXRpb25GaXJzdCxcbiAgTmdiUGFnaW5hdGlvbkxhc3QsXG4gIE5nYlBhZ2luYXRpb25Nb2R1bGUsXG4gIE5nYlBhZ2luYXRpb25OZXh0LFxuICBOZ2JQYWdpbmF0aW9uTnVtYmVyLFxuICBOZ2JQYWdpbmF0aW9uUHJldmlvdXNcbn0gZnJvbSAnLi9wYWdpbmF0aW9uL3BhZ2luYXRpb24ubW9kdWxlJztcbmV4cG9ydCB7TmdiUG9wb3ZlciwgTmdiUG9wb3ZlckNvbmZpZywgTmdiUG9wb3Zlck1vZHVsZX0gZnJvbSAnLi9wb3BvdmVyL3BvcG92ZXIubW9kdWxlJztcbmV4cG9ydCB7TmdiUHJvZ3Jlc3NiYXIsIE5nYlByb2dyZXNzYmFyQ29uZmlnLCBOZ2JQcm9ncmVzc2Jhck1vZHVsZX0gZnJvbSAnLi9wcm9ncmVzc2Jhci9wcm9ncmVzc2Jhci5tb2R1bGUnO1xuZXhwb3J0IHtOZ2JSYXRpbmcsIE5nYlJhdGluZ0NvbmZpZywgTmdiUmF0aW5nTW9kdWxlfSBmcm9tICcuL3JhdGluZy9yYXRpbmcubW9kdWxlJztcbmV4cG9ydCB7XG4gIE5nYlRhYixcbiAgTmdiVGFiQ2hhbmdlRXZlbnQsXG4gIE5nYlRhYkNvbnRlbnQsXG4gIE5nYlRhYnNldCxcbiAgTmdiVGFic2V0Q29uZmlnLFxuICBOZ2JUYWJzZXRNb2R1bGUsXG4gIE5nYlRhYlRpdGxlXG59IGZyb20gJy4vdGFic2V0L3RhYnNldC5tb2R1bGUnO1xuZXhwb3J0IHtcbiAgTmdiVGltZUFkYXB0ZXIsXG4gIE5nYlRpbWVwaWNrZXJJMThuLFxuICBOZ2JUaW1lcGlja2VyLFxuICBOZ2JUaW1lcGlja2VyQ29uZmlnLFxuICBOZ2JUaW1lcGlja2VyTW9kdWxlLFxuICBOZ2JUaW1lU3RydWN0XG59IGZyb20gJy4vdGltZXBpY2tlci90aW1lcGlja2VyLm1vZHVsZSc7XG5leHBvcnQge05nYlRvYXN0LCBOZ2JUb2FzdENvbmZpZywgTmdiVG9hc3RIZWFkZXIsIE5nYlRvYXN0TW9kdWxlfSBmcm9tICcuL3RvYXN0L3RvYXN0Lm1vZHVsZSc7XG5leHBvcnQge05nYlRvb2x0aXAsIE5nYlRvb2x0aXBDb25maWcsIE5nYlRvb2x0aXBNb2R1bGV9IGZyb20gJy4vdG9vbHRpcC90b29sdGlwLm1vZHVsZSc7XG5leHBvcnQge1xuICBOZ2JIaWdobGlnaHQsXG4gIE5nYlR5cGVhaGVhZCxcbiAgTmdiVHlwZWFoZWFkQ29uZmlnLFxuICBOZ2JUeXBlYWhlYWRNb2R1bGUsXG4gIE5nYlR5cGVhaGVhZFNlbGVjdEl0ZW1FdmVudFxufSBmcm9tICcuL3R5cGVhaGVhZC90eXBlYWhlYWQubW9kdWxlJztcbmV4cG9ydCB7UGxhY2VtZW50fSBmcm9tICcuL3V0aWwvcG9zaXRpb25pbmcnO1xuXG5cbmNvbnN0IE5HQl9NT0RVTEVTID0gW1xuICBTYkNhcmRNb2R1bGUsIE5nYkFjY29yZGlvbk1vZHVsZSwgTmdiQWxlcnRNb2R1bGUsIE5nYkJ1dHRvbnNNb2R1bGUsIE5nYkNhcm91c2VsTW9kdWxlLCBOZ2JDb2xsYXBzZU1vZHVsZSwgTmdiRGF0ZXBpY2tlck1vZHVsZSxcbiAgTmdiRHJvcGRvd25Nb2R1bGUsIE5nYk1vZGFsTW9kdWxlLCBOZ2JQYWdpbmF0aW9uTW9kdWxlLCBOZ2JQb3BvdmVyTW9kdWxlLCBOZ2JQcm9ncmVzc2Jhck1vZHVsZSwgTmdiUmF0aW5nTW9kdWxlLFxuICBOZ2JUYWJzZXRNb2R1bGUsIE5nYlRpbWVwaWNrZXJNb2R1bGUsIE5nYlRvYXN0TW9kdWxlLCBOZ2JUb29sdGlwTW9kdWxlLCBOZ2JUeXBlYWhlYWRNb2R1bGVcbl07XG5cbkBOZ01vZHVsZSh7aW1wb3J0czogTkdCX01PRFVMRVMsIGV4cG9ydHM6IE5HQl9NT0RVTEVTfSlcbmV4cG9ydCBjbGFzcyBOZ2JNb2R1bGUge1xufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/modal/modal-backdrop.js b/dist/sunbird-ui-components/esm5/modal/modal-backdrop.js new file mode 100644 index 0000000..07c2c0b --- /dev/null +++ b/dist/sunbird-ui-components/esm5/modal/modal-backdrop.js @@ -0,0 +1,26 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Component, Input } from '@angular/core'; +var NgbModalBackdrop = /** @class */ (function () { + function NgbModalBackdrop() { + } + NgbModalBackdrop.decorators = [ + { type: Component, args: [{ + selector: 'ngb-modal-backdrop', + template: '', + host: { '[class]': '"modal-backdrop fade show" + (backdropClass ? " " + backdropClass : "")', 'style': 'z-index: 1050' } + }] } + ]; + NgbModalBackdrop.propDecorators = { + backdropClass: [{ type: Input }] + }; + return NgbModalBackdrop; +}()); +export { NgbModalBackdrop }; +if (false) { + /** @type {?} */ + NgbModalBackdrop.prototype.backdropClass; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtYmFja2Ryb3AuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJtb2RhbC9tb2RhbC1iYWNrZHJvcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFL0M7SUFBQTtJQVFBLENBQUM7O2dCQVJBLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsb0JBQW9CO29CQUM5QixRQUFRLEVBQUUsRUFBRTtvQkFDWixJQUFJLEVBQ0EsRUFBQyxTQUFTLEVBQUUseUVBQXlFLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBQztpQkFDckg7OztnQ0FFRSxLQUFLOztJQUNSLHVCQUFDO0NBQUEsQUFSRCxJQVFDO1NBRlksZ0JBQWdCOzs7SUFDM0IseUNBQStCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIElucHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmdiLW1vZGFsLWJhY2tkcm9wJyxcbiAgdGVtcGxhdGU6ICcnLFxuICBob3N0OlxuICAgICAgeydbY2xhc3NdJzogJ1wibW9kYWwtYmFja2Ryb3AgZmFkZSBzaG93XCIgKyAoYmFja2Ryb3BDbGFzcyA/IFwiIFwiICsgYmFja2Ryb3BDbGFzcyA6IFwiXCIpJywgJ3N0eWxlJzogJ3otaW5kZXg6IDEwNTAnfVxufSlcbmV4cG9ydCBjbGFzcyBOZ2JNb2RhbEJhY2tkcm9wIHtcbiAgQElucHV0KCkgYmFja2Ryb3BDbGFzczogc3RyaW5nO1xufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/modal/modal-config.js b/dist/sunbird-ui-components/esm5/modal/modal-config.js new file mode 100644 index 0000000..88568aa --- /dev/null +++ b/dist/sunbird-ui-components/esm5/modal/modal-config.js @@ -0,0 +1,120 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Injectable } from '@angular/core'; +import * as i0 from "@angular/core"; +/** + * Options available when opening new modal windows with `NgbModal.open()` method. + * @record + */ +export function NgbModalOptions() { } +if (false) { + /** + * `aria-labelledby` attribute value to set on the modal window. + * + * \@since 2.2.0 + * @type {?|undefined} + */ + NgbModalOptions.prototype.ariaLabelledBy; + /** + * If `true`, the backdrop element will be created for a given modal. + * + * Alternatively, specify `'static'` for a backdrop which doesn't close the modal on click. + * + * Default value is `true`. + * @type {?|undefined} + */ + NgbModalOptions.prototype.backdrop; + /** + * Callback right before the modal will be dismissed. + * + * If this function returns: + * * `false` + * * a promise resolved with `false` + * * a promise that is rejected + * + * then the modal won't be dismissed. + * @type {?|undefined} + */ + NgbModalOptions.prototype.beforeDismiss; + /** + * If `true`, the modal will be centered vertically. + * + * Default value is `false`. + * + * \@since 1.1.0 + * @type {?|undefined} + */ + NgbModalOptions.prototype.centered; + /** + * A selector specifying the element all new modal windows should be appended to. + * + * If not specified, will be `body`. + * @type {?|undefined} + */ + NgbModalOptions.prototype.container; + /** + * The `Injector` to use for modal content. + * @type {?|undefined} + */ + NgbModalOptions.prototype.injector; + /** + * If `true`, the modal will be closed when `Escape` key is pressed + * + * Default value is `true`. + * @type {?|undefined} + */ + NgbModalOptions.prototype.keyboard; + /** + * Scrollable modal content (false by default). + * + * \@since 5.0.0 + * @type {?|undefined} + */ + NgbModalOptions.prototype.scrollable; + /** + * Size of a new modal window. + * @type {?|undefined} + */ + NgbModalOptions.prototype.size; + /** + * A custom class to append to the modal window. + * @type {?|undefined} + */ + NgbModalOptions.prototype.windowClass; + /** + * A custom class to append to the modal backdrop. + * + * \@since 1.1.0 + * @type {?|undefined} + */ + NgbModalOptions.prototype.backdropClass; +} +/** + * A configuration service for the [`NgbModal`](#/components/modal/api#NgbModal) service. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all modals used in the application. + * + * \@since 3.1.0 + */ +var NgbModalConfig = /** @class */ (function () { + function NgbModalConfig() { + this.backdrop = true; + this.keyboard = true; + } + NgbModalConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ NgbModalConfig.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function NgbModalConfig_Factory() { return new NgbModalConfig(); }, token: NgbModalConfig, providedIn: "root" }); + return NgbModalConfig; +}()); +export { NgbModalConfig }; +if (false) { + /** @type {?} */ + NgbModalConfig.prototype.backdrop; + /** @type {?} */ + NgbModalConfig.prototype.keyboard; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtY29uZmlnLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsibW9kYWwvbW9kYWwtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFXLE1BQU0sZUFBZSxDQUFDOzs7Ozs7QUFLbkQscUNBZ0ZDOzs7Ozs7OztJQTFFQyx5Q0FBd0I7Ozs7Ozs7OztJQVN4QixtQ0FBOEI7Ozs7Ozs7Ozs7OztJQVk5Qix3Q0FBaUQ7Ozs7Ozs7OztJQVNqRCxtQ0FBbUI7Ozs7Ozs7SUFPbkIsb0NBQW1COzs7OztJQUtuQixtQ0FBb0I7Ozs7Ozs7SUFPcEIsbUNBQW1COzs7Ozs7O0lBT25CLHFDQUFxQjs7Ozs7SUFLckIsK0JBQTBCOzs7OztJQUsxQixzQ0FBcUI7Ozs7Ozs7SUFPckIsd0NBQXVCOzs7Ozs7Ozs7O0FBV3pCO0lBQUE7UUFFRSxhQUFRLEdBQXVCLElBQUksQ0FBQztRQUNwQyxhQUFRLEdBQUcsSUFBSSxDQUFDO0tBQ2pCOztnQkFKQSxVQUFVLFNBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDOzs7eUJBL0ZoQztDQW1HQyxBQUpELElBSUM7U0FIWSxjQUFjOzs7SUFDekIsa0NBQW9DOztJQUNwQyxrQ0FBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIEluamVjdG9yfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBPcHRpb25zIGF2YWlsYWJsZSB3aGVuIG9wZW5pbmcgbmV3IG1vZGFsIHdpbmRvd3Mgd2l0aCBgTmdiTW9kYWwub3BlbigpYCBtZXRob2QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmdiTW9kYWxPcHRpb25zIHtcbiAgLyoqXG4gICAqIGBhcmlhLWxhYmVsbGVkYnlgIGF0dHJpYnV0ZSB2YWx1ZSB0byBzZXQgb24gdGhlIG1vZGFsIHdpbmRvdy5cbiAgICpcbiAgICogQHNpbmNlIDIuMi4wXG4gICAqL1xuICBhcmlhTGFiZWxsZWRCeT86IHN0cmluZztcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYmFja2Ryb3AgZWxlbWVudCB3aWxsIGJlIGNyZWF0ZWQgZm9yIGEgZ2l2ZW4gbW9kYWwuXG4gICAqXG4gICAqIEFsdGVybmF0aXZlbHksIHNwZWNpZnkgYCdzdGF0aWMnYCBmb3IgYSBiYWNrZHJvcCB3aGljaCBkb2Vzbid0IGNsb3NlIHRoZSBtb2RhbCBvbiBjbGljay5cbiAgICpcbiAgICogRGVmYXVsdCB2YWx1ZSBpcyBgdHJ1ZWAuXG4gICAqL1xuICBiYWNrZHJvcD86IGJvb2xlYW4gfCAnc3RhdGljJztcblxuICAvKipcbiAgICogQ2FsbGJhY2sgcmlnaHQgYmVmb3JlIHRoZSBtb2RhbCB3aWxsIGJlIGRpc21pc3NlZC5cbiAgICpcbiAgICogSWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zOlxuICAgKiAqIGBmYWxzZWBcbiAgICogKiBhIHByb21pc2UgcmVzb2x2ZWQgd2l0aCBgZmFsc2VgXG4gICAqICogYSBwcm9taXNlIHRoYXQgaXMgcmVqZWN0ZWRcbiAgICpcbiAgICogdGhlbiB0aGUgbW9kYWwgd29uJ3QgYmUgZGlzbWlzc2VkLlxuICAgKi9cbiAgYmVmb3JlRGlzbWlzcz86ICgpID0+IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+O1xuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBtb2RhbCB3aWxsIGJlIGNlbnRlcmVkIHZlcnRpY2FsbHkuXG4gICAqXG4gICAqIERlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC5cbiAgICpcbiAgICogQHNpbmNlIDEuMS4wXG4gICAqL1xuICBjZW50ZXJlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEEgc2VsZWN0b3Igc3BlY2lmeWluZyB0aGUgZWxlbWVudCBhbGwgbmV3IG1vZGFsIHdpbmRvd3Mgc2hvdWxkIGJlIGFwcGVuZGVkIHRvLlxuICAgKlxuICAgKiBJZiBub3Qgc3BlY2lmaWVkLCB3aWxsIGJlIGBib2R5YC5cbiAgICovXG4gIGNvbnRhaW5lcj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGBJbmplY3RvcmAgdG8gdXNlIGZvciBtb2RhbCBjb250ZW50LlxuICAgKi9cbiAgaW5qZWN0b3I/OiBJbmplY3RvcjtcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbW9kYWwgd2lsbCBiZSBjbG9zZWQgd2hlbiBgRXNjYXBlYCBrZXkgaXMgcHJlc3NlZFxuICAgKlxuICAgKiBEZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC5cbiAgICovXG4gIGtleWJvYXJkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU2Nyb2xsYWJsZSBtb2RhbCBjb250ZW50IChmYWxzZSBieSBkZWZhdWx0KS5cbiAgICpcbiAgICogQHNpbmNlIDUuMC4wXG4gICAqL1xuICBzY3JvbGxhYmxlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU2l6ZSBvZiBhIG5ldyBtb2RhbCB3aW5kb3cuXG4gICAqL1xuICBzaXplPzogJ3NtJyB8ICdsZycgfCAneGwnO1xuXG4gIC8qKlxuICAgKiBBIGN1c3RvbSBjbGFzcyB0byBhcHBlbmQgdG8gdGhlIG1vZGFsIHdpbmRvdy5cbiAgICovXG4gIHdpbmRvd0NsYXNzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGN1c3RvbSBjbGFzcyB0byBhcHBlbmQgdG8gdGhlIG1vZGFsIGJhY2tkcm9wLlxuICAgKlxuICAgKiBAc2luY2UgMS4xLjBcbiAgICovXG4gIGJhY2tkcm9wQ2xhc3M/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBjb25maWd1cmF0aW9uIHNlcnZpY2UgZm9yIHRoZSBbYE5nYk1vZGFsYF0oIy9jb21wb25lbnRzL21vZGFsL2FwaSNOZ2JNb2RhbCkgc2VydmljZS5cbiAqXG4gKiBZb3UgY2FuIGluamVjdCB0aGlzIHNlcnZpY2UsIHR5cGljYWxseSBpbiB5b3VyIHJvb3QgY29tcG9uZW50LCBhbmQgY3VzdG9taXplIHRoZSB2YWx1ZXMgb2YgaXRzIHByb3BlcnRpZXMgaW5cbiAqIG9yZGVyIHRvIHByb3ZpZGUgZGVmYXVsdCB2YWx1ZXMgZm9yIGFsbCBtb2RhbHMgdXNlZCBpbiB0aGUgYXBwbGljYXRpb24uXG4qXG4qIEBzaW5jZSAzLjEuMFxuKi9cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIE5nYk1vZGFsQ29uZmlnIGltcGxlbWVudHMgTmdiTW9kYWxPcHRpb25zIHtcbiAgYmFja2Ryb3A6IGJvb2xlYW4gfCAnc3RhdGljJyA9IHRydWU7XG4gIGtleWJvYXJkID0gdHJ1ZTtcbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/modal/modal-dismiss-reasons.js b/dist/sunbird-ui-components/esm5/modal/modal-dismiss-reasons.js new file mode 100644 index 0000000..38acb23 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/modal/modal-dismiss-reasons.js @@ -0,0 +1,13 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @enum {number} */ +var ModalDismissReasons = { + BACKDROP_CLICK: 0, + ESC: 1, +}; +export { ModalDismissReasons }; +ModalDismissReasons[ModalDismissReasons.BACKDROP_CLICK] = 'BACKDROP_CLICK'; +ModalDismissReasons[ModalDismissReasons.ESC] = 'ESC'; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtZGlzbWlzcy1yZWFzb25zLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsibW9kYWwvbW9kYWwtZGlzbWlzcy1yZWFzb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztJQUNFLGlCQUFjO0lBQ2QsTUFBRyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBlbnVtIE1vZGFsRGlzbWlzc1JlYXNvbnMge1xuICBCQUNLRFJPUF9DTElDSyxcbiAgRVNDXG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/modal/modal-ref.js b/dist/sunbird-ui-components/esm5/modal/modal-ref.js new file mode 100644 index 0000000..b1d2b77 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/modal/modal-ref.js @@ -0,0 +1,277 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * A reference to the currently opened (active) modal. + * + * Instances of this class can be injected into your component passed as modal content. + * So you can `.close()` or `.dismiss()` the modal window from your component. + */ +var /** + * A reference to the currently opened (active) modal. + * + * Instances of this class can be injected into your component passed as modal content. + * So you can `.close()` or `.dismiss()` the modal window from your component. + */ +NgbActiveModal = /** @class */ (function () { + function NgbActiveModal() { + } + /** + * Closes the modal with an optional `result` value. + * + * The `NgbMobalRef.result` promise will be resolved with the provided value. + */ + /** + * Closes the modal with an optional `result` value. + * + * The `NgbMobalRef.result` promise will be resolved with the provided value. + * @param {?=} result + * @return {?} + */ + NgbActiveModal.prototype.close = /** + * Closes the modal with an optional `result` value. + * + * The `NgbMobalRef.result` promise will be resolved with the provided value. + * @param {?=} result + * @return {?} + */ + function (result) { }; + /** + * Dismisses the modal with an optional `reason` value. + * + * The `NgbModalRef.result` promise will be rejected with the provided value. + */ + /** + * Dismisses the modal with an optional `reason` value. + * + * The `NgbModalRef.result` promise will be rejected with the provided value. + * @param {?=} reason + * @return {?} + */ + NgbActiveModal.prototype.dismiss = /** + * Dismisses the modal with an optional `reason` value. + * + * The `NgbModalRef.result` promise will be rejected with the provided value. + * @param {?=} reason + * @return {?} + */ + function (reason) { }; + return NgbActiveModal; +}()); +/** + * A reference to the currently opened (active) modal. + * + * Instances of this class can be injected into your component passed as modal content. + * So you can `.close()` or `.dismiss()` the modal window from your component. + */ +export { NgbActiveModal }; +/** + * A reference to the newly opened modal returned by the `NgbModal.open()` method. + */ +var /** + * A reference to the newly opened modal returned by the `NgbModal.open()` method. + */ +NgbModalRef = /** @class */ (function () { + function NgbModalRef(_windowCmptRef, _contentRef, _backdropCmptRef, _beforeDismiss) { + var _this = this; + this._windowCmptRef = _windowCmptRef; + this._contentRef = _contentRef; + this._backdropCmptRef = _backdropCmptRef; + this._beforeDismiss = _beforeDismiss; + _windowCmptRef.instance.dismissEvent.subscribe((/** + * @param {?} reason + * @return {?} + */ + function (reason) { _this.dismiss(reason); })); + this.result = new Promise((/** + * @param {?} resolve + * @param {?} reject + * @return {?} + */ + function (resolve, reject) { + _this._resolve = resolve; + _this._reject = reject; + })); + this.result.then(null, (/** + * @return {?} + */ + function () { })); + } + Object.defineProperty(NgbModalRef.prototype, "componentInstance", { + /** + * The instance of a component used for the modal content. + * + * When a `TemplateRef` is used as the content, will return `undefined`. + */ + get: /** + * The instance of a component used for the modal content. + * + * When a `TemplateRef` is used as the content, will return `undefined`. + * @return {?} + */ + function () { + if (this._contentRef.componentRef) { + return this._contentRef.componentRef.instance; + } + }, + enumerable: true, + configurable: true + }); + /** + * Closes the modal with an optional `result` value. + * + * The `NgbMobalRef.result` promise will be resolved with the provided value. + */ + /** + * Closes the modal with an optional `result` value. + * + * The `NgbMobalRef.result` promise will be resolved with the provided value. + * @param {?=} result + * @return {?} + */ + NgbModalRef.prototype.close = /** + * Closes the modal with an optional `result` value. + * + * The `NgbMobalRef.result` promise will be resolved with the provided value. + * @param {?=} result + * @return {?} + */ + function (result) { + if (this._windowCmptRef) { + this._resolve(result); + this._removeModalElements(); + } + }; + /** + * @private + * @param {?=} reason + * @return {?} + */ + NgbModalRef.prototype._dismiss = /** + * @private + * @param {?=} reason + * @return {?} + */ + function (reason) { + this._reject(reason); + this._removeModalElements(); + }; + /** + * Dismisses the modal with an optional `reason` value. + * + * The `NgbModalRef.result` promise will be rejected with the provided value. + */ + /** + * Dismisses the modal with an optional `reason` value. + * + * The `NgbModalRef.result` promise will be rejected with the provided value. + * @param {?=} reason + * @return {?} + */ + NgbModalRef.prototype.dismiss = /** + * Dismisses the modal with an optional `reason` value. + * + * The `NgbModalRef.result` promise will be rejected with the provided value. + * @param {?=} reason + * @return {?} + */ + function (reason) { + var _this = this; + if (this._windowCmptRef) { + if (!this._beforeDismiss) { + this._dismiss(reason); + } + else { + /** @type {?} */ + var dismiss = this._beforeDismiss(); + if (dismiss && dismiss.then) { + dismiss.then((/** + * @param {?} result + * @return {?} + */ + function (result) { + if (result !== false) { + _this._dismiss(reason); + } + }), (/** + * @return {?} + */ + function () { })); + } + else if (dismiss !== false) { + this._dismiss(reason); + } + } + } + }; + /** + * @private + * @return {?} + */ + NgbModalRef.prototype._removeModalElements = /** + * @private + * @return {?} + */ + function () { + /** @type {?} */ + var windowNativeEl = this._windowCmptRef.location.nativeElement; + windowNativeEl.parentNode.removeChild(windowNativeEl); + this._windowCmptRef.destroy(); + if (this._backdropCmptRef) { + /** @type {?} */ + var backdropNativeEl = this._backdropCmptRef.location.nativeElement; + backdropNativeEl.parentNode.removeChild(backdropNativeEl); + this._backdropCmptRef.destroy(); + } + if (this._contentRef && this._contentRef.viewRef) { + this._contentRef.viewRef.destroy(); + } + this._windowCmptRef = null; + this._backdropCmptRef = null; + this._contentRef = null; + }; + return NgbModalRef; +}()); +/** + * A reference to the newly opened modal returned by the `NgbModal.open()` method. + */ +export { NgbModalRef }; +if (false) { + /** + * @type {?} + * @private + */ + NgbModalRef.prototype._resolve; + /** + * @type {?} + * @private + */ + NgbModalRef.prototype._reject; + /** + * The promise that is resolved when the modal is closed and rejected when the modal is dismissed. + * @type {?} + */ + NgbModalRef.prototype.result; + /** + * @type {?} + * @private + */ + NgbModalRef.prototype._windowCmptRef; + /** + * @type {?} + * @private + */ + NgbModalRef.prototype._contentRef; + /** + * @type {?} + * @private + */ + NgbModalRef.prototype._backdropCmptRef; + /** + * @type {?} + * @private + */ + NgbModalRef.prototype._beforeDismiss; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtcmVmLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsibW9kYWwvbW9kYWwtcmVmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFhQTs7Ozs7OztJQUFBO0lBY0EsQ0FBQztJQWJDOzs7O09BSUc7Ozs7Ozs7O0lBQ0gsOEJBQUs7Ozs7Ozs7SUFBTCxVQUFNLE1BQVksSUFBUyxDQUFDO0lBRTVCOzs7O09BSUc7Ozs7Ozs7O0lBQ0gsZ0NBQU87Ozs7Ozs7SUFBUCxVQUFRLE1BQVksSUFBUyxDQUFDO0lBQ2hDLHFCQUFDO0FBQUQsQ0FBQyxBQWRELElBY0M7Ozs7Ozs7Ozs7O0FBS0Q7Ozs7SUFvQkUscUJBQ1ksY0FBNEMsRUFBVSxXQUF1QixFQUM3RSxnQkFBaUQsRUFBVSxjQUF5QjtRQUZoRyxpQkFVQztRQVRXLG1CQUFjLEdBQWQsY0FBYyxDQUE4QjtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQzdFLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBaUM7UUFBVSxtQkFBYyxHQUFkLGNBQWMsQ0FBVztRQUM5RixjQUFjLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxTQUFTOzs7O1FBQUMsVUFBQyxNQUFXLElBQU8sS0FBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDO1FBRTNGLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxPQUFPOzs7OztRQUFDLFVBQUMsT0FBTyxFQUFFLE1BQU07WUFDeEMsS0FBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7WUFDeEIsS0FBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDeEIsQ0FBQyxFQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJOzs7UUFBRSxjQUFPLENBQUMsRUFBQyxDQUFDO0lBQ25DLENBQUM7SUFyQkQsc0JBQUksMENBQWlCO1FBTHJCOzs7O1dBSUc7Ozs7Ozs7UUFDSDtZQUNFLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUU7Z0JBQ2pDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDO2FBQy9DO1FBQ0gsQ0FBQzs7O09BQUE7SUFtQkQ7Ozs7T0FJRzs7Ozs7Ozs7SUFDSCwyQkFBSzs7Ozs7OztJQUFMLFVBQU0sTUFBWTtRQUNoQixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN0QixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztTQUM3QjtJQUNILENBQUM7Ozs7OztJQUVPLDhCQUFROzs7OztJQUFoQixVQUFpQixNQUFZO1FBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVEOzs7O09BSUc7Ozs7Ozs7O0lBQ0gsNkJBQU87Ozs7Ozs7SUFBUCxVQUFRLE1BQVk7UUFBcEIsaUJBbUJDO1FBbEJDLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUN2QjtpQkFBTTs7b0JBQ0MsT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQ3JDLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUU7b0JBQzNCLE9BQU8sQ0FBQyxJQUFJOzs7O29CQUNSLFVBQUEsTUFBTTt3QkFDSixJQUFJLE1BQU0sS0FBSyxLQUFLLEVBQUU7NEJBQ3BCLEtBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7eUJBQ3ZCO29CQUNILENBQUM7OztvQkFDRCxjQUFPLENBQUMsRUFBQyxDQUFDO2lCQUNmO3FCQUFNLElBQUksT0FBTyxLQUFLLEtBQUssRUFBRTtvQkFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFDdkI7YUFDRjtTQUNGO0lBQ0gsQ0FBQzs7Ozs7SUFFTywwQ0FBb0I7Ozs7SUFBNUI7O1lBQ1EsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLGFBQWE7UUFDakUsY0FBYyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUU5QixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTs7Z0JBQ25CLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsYUFBYTtZQUNyRSxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDMUQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ2pDO1FBRUQsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFO1lBQ2hELElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ3BDO1FBRUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDM0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUM3QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztJQUMxQixDQUFDO0lBQ0gsa0JBQUM7QUFBRCxDQUFDLEFBOUZELElBOEZDOzs7Ozs7Ozs7O0lBN0ZDLCtCQUF5Qzs7Ozs7SUFDekMsOEJBQXdDOzs7OztJQWdCeEMsNkJBQXFCOzs7OztJQUdqQixxQ0FBb0Q7Ozs7O0lBQUUsa0NBQStCOzs7OztJQUNyRix1Q0FBeUQ7Ozs7O0lBQUUscUNBQWlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnRSZWZ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge05nYk1vZGFsQmFja2Ryb3B9IGZyb20gJy4vbW9kYWwtYmFja2Ryb3AnO1xuaW1wb3J0IHtOZ2JNb2RhbFdpbmRvd30gZnJvbSAnLi9tb2RhbC13aW5kb3cnO1xuXG5pbXBvcnQge0NvbnRlbnRSZWZ9IGZyb20gJy4uL3V0aWwvcG9wdXAnO1xuXG4vKipcbiAqIEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50bHkgb3BlbmVkIChhY3RpdmUpIG1vZGFsLlxuICpcbiAqIEluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIGNhbiBiZSBpbmplY3RlZCBpbnRvIHlvdXIgY29tcG9uZW50IHBhc3NlZCBhcyBtb2RhbCBjb250ZW50LlxuICogU28geW91IGNhbiBgLmNsb3NlKClgIG9yIGAuZGlzbWlzcygpYCB0aGUgbW9kYWwgd2luZG93IGZyb20geW91ciBjb21wb25lbnQuXG4gKi9cbmV4cG9ydCBjbGFzcyBOZ2JBY3RpdmVNb2RhbCB7XG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIG1vZGFsIHdpdGggYW4gb3B0aW9uYWwgYHJlc3VsdGAgdmFsdWUuXG4gICAqXG4gICAqIFRoZSBgTmdiTW9iYWxSZWYucmVzdWx0YCBwcm9taXNlIHdpbGwgYmUgcmVzb2x2ZWQgd2l0aCB0aGUgcHJvdmlkZWQgdmFsdWUuXG4gICAqL1xuICBjbG9zZShyZXN1bHQ/OiBhbnkpOiB2b2lkIHt9XG5cbiAgLyoqXG4gICAqIERpc21pc3NlcyB0aGUgbW9kYWwgd2l0aCBhbiBvcHRpb25hbCBgcmVhc29uYCB2YWx1ZS5cbiAgICpcbiAgICogVGhlIGBOZ2JNb2RhbFJlZi5yZXN1bHRgIHByb21pc2Ugd2lsbCBiZSByZWplY3RlZCB3aXRoIHRoZSBwcm92aWRlZCB2YWx1ZS5cbiAgICovXG4gIGRpc21pc3MocmVhc29uPzogYW55KTogdm9pZCB7fVxufVxuXG4vKipcbiAqIEEgcmVmZXJlbmNlIHRvIHRoZSBuZXdseSBvcGVuZWQgbW9kYWwgcmV0dXJuZWQgYnkgdGhlIGBOZ2JNb2RhbC5vcGVuKClgIG1ldGhvZC5cbiAqL1xuZXhwb3J0IGNsYXNzIE5nYk1vZGFsUmVmIHtcbiAgcHJpdmF0ZSBfcmVzb2x2ZTogKHJlc3VsdD86IGFueSkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfcmVqZWN0OiAocmVhc29uPzogYW55KSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5zdGFuY2Ugb2YgYSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIG1vZGFsIGNvbnRlbnQuXG4gICAqXG4gICAqIFdoZW4gYSBgVGVtcGxhdGVSZWZgIGlzIHVzZWQgYXMgdGhlIGNvbnRlbnQsIHdpbGwgcmV0dXJuIGB1bmRlZmluZWRgLlxuICAgKi9cbiAgZ2V0IGNvbXBvbmVudEluc3RhbmNlKCk6IGFueSB7XG4gICAgaWYgKHRoaXMuX2NvbnRlbnRSZWYuY29tcG9uZW50UmVmKSB7XG4gICAgICByZXR1cm4gdGhpcy5fY29udGVudFJlZi5jb21wb25lbnRSZWYuaW5zdGFuY2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgd2hlbiB0aGUgbW9kYWwgaXMgY2xvc2VkIGFuZCByZWplY3RlZCB3aGVuIHRoZSBtb2RhbCBpcyBkaXNtaXNzZWQuXG4gICAqL1xuICByZXN1bHQ6IFByb21pc2U8YW55PjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgIHByaXZhdGUgX3dpbmRvd0NtcHRSZWY6IENvbXBvbmVudFJlZjxOZ2JNb2RhbFdpbmRvdz4sIHByaXZhdGUgX2NvbnRlbnRSZWY6IENvbnRlbnRSZWYsXG4gICAgICBwcml2YXRlIF9iYWNrZHJvcENtcHRSZWY/OiBDb21wb25lbnRSZWY8TmdiTW9kYWxCYWNrZHJvcD4sIHByaXZhdGUgX2JlZm9yZURpc21pc3M/OiBGdW5jdGlvbikge1xuICAgIF93aW5kb3dDbXB0UmVmLmluc3RhbmNlLmRpc21pc3NFdmVudC5zdWJzY3JpYmUoKHJlYXNvbjogYW55KSA9PiB7IHRoaXMuZGlzbWlzcyhyZWFzb24pOyB9KTtcblxuICAgIHRoaXMucmVzdWx0ID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5fcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICB0aGlzLl9yZWplY3QgPSByZWplY3Q7XG4gICAgfSk7XG4gICAgdGhpcy5yZXN1bHQudGhlbihudWxsLCAoKSA9PiB7fSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2VzIHRoZSBtb2RhbCB3aXRoIGFuIG9wdGlvbmFsIGByZXN1bHRgIHZhbHVlLlxuICAgKlxuICAgKiBUaGUgYE5nYk1vYmFsUmVmLnJlc3VsdGAgcHJvbWlzZSB3aWxsIGJlIHJlc29sdmVkIHdpdGggdGhlIHByb3ZpZGVkIHZhbHVlLlxuICAgKi9cbiAgY2xvc2UocmVzdWx0PzogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3dpbmRvd0NtcHRSZWYpIHtcbiAgICAgIHRoaXMuX3Jlc29sdmUocmVzdWx0KTtcbiAgICAgIHRoaXMuX3JlbW92ZU1vZGFsRWxlbWVudHMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9kaXNtaXNzKHJlYXNvbj86IGFueSkge1xuICAgIHRoaXMuX3JlamVjdChyZWFzb24pO1xuICAgIHRoaXMuX3JlbW92ZU1vZGFsRWxlbWVudHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNtaXNzZXMgdGhlIG1vZGFsIHdpdGggYW4gb3B0aW9uYWwgYHJlYXNvbmAgdmFsdWUuXG4gICAqXG4gICAqIFRoZSBgTmdiTW9kYWxSZWYucmVzdWx0YCBwcm9taXNlIHdpbGwgYmUgcmVqZWN0ZWQgd2l0aCB0aGUgcHJvdmlkZWQgdmFsdWUuXG4gICAqL1xuICBkaXNtaXNzKHJlYXNvbj86IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLl93aW5kb3dDbXB0UmVmKSB7XG4gICAgICBpZiAoIXRoaXMuX2JlZm9yZURpc21pc3MpIHtcbiAgICAgICAgdGhpcy5fZGlzbWlzcyhyZWFzb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZGlzbWlzcyA9IHRoaXMuX2JlZm9yZURpc21pc3MoKTtcbiAgICAgICAgaWYgKGRpc21pc3MgJiYgZGlzbWlzcy50aGVuKSB7XG4gICAgICAgICAgZGlzbWlzcy50aGVuKFxuICAgICAgICAgICAgICByZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9kaXNtaXNzKHJlYXNvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAoKSA9PiB7fSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZGlzbWlzcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICB0aGlzLl9kaXNtaXNzKHJlYXNvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9yZW1vdmVNb2RhbEVsZW1lbnRzKCkge1xuICAgIGNvbnN0IHdpbmRvd05hdGl2ZUVsID0gdGhpcy5fd2luZG93Q21wdFJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50O1xuICAgIHdpbmRvd05hdGl2ZUVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQod2luZG93TmF0aXZlRWwpO1xuICAgIHRoaXMuX3dpbmRvd0NtcHRSZWYuZGVzdHJveSgpO1xuXG4gICAgaWYgKHRoaXMuX2JhY2tkcm9wQ21wdFJlZikge1xuICAgICAgY29uc3QgYmFja2Ryb3BOYXRpdmVFbCA9IHRoaXMuX2JhY2tkcm9wQ21wdFJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50O1xuICAgICAgYmFja2Ryb3BOYXRpdmVFbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGJhY2tkcm9wTmF0aXZlRWwpO1xuICAgICAgdGhpcy5fYmFja2Ryb3BDbXB0UmVmLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY29udGVudFJlZiAmJiB0aGlzLl9jb250ZW50UmVmLnZpZXdSZWYpIHtcbiAgICAgIHRoaXMuX2NvbnRlbnRSZWYudmlld1JlZi5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5fd2luZG93Q21wdFJlZiA9IG51bGw7XG4gICAgdGhpcy5fYmFja2Ryb3BDbXB0UmVmID0gbnVsbDtcbiAgICB0aGlzLl9jb250ZW50UmVmID0gbnVsbDtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/modal/modal-stack.js b/dist/sunbird-ui-components/esm5/modal/modal-stack.js new file mode 100644 index 0000000..ee9d1dd --- /dev/null +++ b/dist/sunbird-ui-components/esm5/modal/modal-stack.js @@ -0,0 +1,514 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { DOCUMENT } from '@angular/common'; +import { ApplicationRef, Inject, Injectable, Injector, RendererFactory2, TemplateRef, } from '@angular/core'; +import { Subject } from 'rxjs'; +import { ngbFocusTrap } from '../util/focus-trap'; +import { ContentRef } from '../util/popup'; +import { ScrollBar } from '../util/scrollbar'; +import { isDefined, isString } from '../util/util'; +import { NgbModalBackdrop } from './modal-backdrop'; +import { NgbActiveModal, NgbModalRef } from './modal-ref'; +import { NgbModalWindow } from './modal-window'; +import * as i0 from "@angular/core"; +import * as i1 from "@angular/common"; +import * as i2 from "../util/scrollbar"; +var NgbModalStack = /** @class */ (function () { + function NgbModalStack(_applicationRef, _injector, _document, _scrollBar, _rendererFactory) { + var _this = this; + this._applicationRef = _applicationRef; + this._injector = _injector; + this._document = _document; + this._scrollBar = _scrollBar; + this._rendererFactory = _rendererFactory; + this._activeWindowCmptHasChanged = new Subject(); + this._ariaHiddenValues = new Map(); + this._backdropAttributes = ['backdropClass']; + this._modalRefs = []; + this._windowAttributes = ['ariaLabelledBy', 'backdrop', 'centered', 'keyboard', 'scrollable', 'size', 'windowClass']; + this._windowCmpts = []; + // Trap focus on active WindowCmpt + this._activeWindowCmptHasChanged.subscribe((/** + * @return {?} + */ + function () { + if (_this._windowCmpts.length) { + /** @type {?} */ + var activeWindowCmpt = _this._windowCmpts[_this._windowCmpts.length - 1]; + ngbFocusTrap(activeWindowCmpt.location.nativeElement, _this._activeWindowCmptHasChanged); + _this._revertAriaHidden(); + _this._setAriaHidden(activeWindowCmpt.location.nativeElement); + } + })); + } + /** + * @param {?} moduleCFR + * @param {?} contentInjector + * @param {?} content + * @param {?} options + * @return {?} + */ + NgbModalStack.prototype.open = /** + * @param {?} moduleCFR + * @param {?} contentInjector + * @param {?} content + * @param {?} options + * @return {?} + */ + function (moduleCFR, contentInjector, content, options) { + var _this = this; + /** @type {?} */ + var containerEl = isDefined(options.container) ? this._document.querySelector(options.container) : this._document.body; + /** @type {?} */ + var renderer = this._rendererFactory.createRenderer(null, null); + /** @type {?} */ + var revertPaddingForScrollBar = this._scrollBar.compensate(); + /** @type {?} */ + var removeBodyClass = (/** + * @return {?} + */ + function () { + if (!_this._modalRefs.length) { + renderer.removeClass(_this._document.body, 'modal-open'); + _this._revertAriaHidden(); + } + }); + if (!containerEl) { + throw new Error("The specified modal container \"" + (options.container || 'body') + "\" was not found in the DOM."); + } + /** @type {?} */ + var activeModal = new NgbActiveModal(); + /** @type {?} */ + var contentRef = this._getContentRef(moduleCFR, options.injector || contentInjector, content, activeModal, options); + /** @type {?} */ + var backdropCmptRef = options.backdrop !== false ? this._attachBackdrop(moduleCFR, containerEl) : null; + /** @type {?} */ + var windowCmptRef = this._attachWindowComponent(moduleCFR, containerEl, contentRef); + /** @type {?} */ + var ngbModalRef = new NgbModalRef(windowCmptRef, contentRef, backdropCmptRef, options.beforeDismiss); + this._registerModalRef(ngbModalRef); + this._registerWindowCmpt(windowCmptRef); + ngbModalRef.result.then(revertPaddingForScrollBar, revertPaddingForScrollBar); + ngbModalRef.result.then(removeBodyClass, removeBodyClass); + activeModal.close = (/** + * @param {?} result + * @return {?} + */ + function (result) { ngbModalRef.close(result); }); + activeModal.dismiss = (/** + * @param {?} reason + * @return {?} + */ + function (reason) { ngbModalRef.dismiss(reason); }); + this._applyWindowOptions(windowCmptRef.instance, options); + if (this._modalRefs.length === 1) { + renderer.addClass(this._document.body, 'modal-open'); + } + if (backdropCmptRef && backdropCmptRef.instance) { + this._applyBackdropOptions(backdropCmptRef.instance, options); + } + return ngbModalRef; + }; + /** + * @param {?=} reason + * @return {?} + */ + NgbModalStack.prototype.dismissAll = /** + * @param {?=} reason + * @return {?} + */ + function (reason) { this._modalRefs.forEach((/** + * @param {?} ngbModalRef + * @return {?} + */ + function (ngbModalRef) { return ngbModalRef.dismiss(reason); })); }; + /** + * @return {?} + */ + NgbModalStack.prototype.hasOpenModals = /** + * @return {?} + */ + function () { return this._modalRefs.length > 0; }; + /** + * @private + * @param {?} moduleCFR + * @param {?} containerEl + * @return {?} + */ + NgbModalStack.prototype._attachBackdrop = /** + * @private + * @param {?} moduleCFR + * @param {?} containerEl + * @return {?} + */ + function (moduleCFR, containerEl) { + /** @type {?} */ + var backdropFactory = moduleCFR.resolveComponentFactory(NgbModalBackdrop); + /** @type {?} */ + var backdropCmptRef = backdropFactory.create(this._injector); + this._applicationRef.attachView(backdropCmptRef.hostView); + containerEl.appendChild(backdropCmptRef.location.nativeElement); + return backdropCmptRef; + }; + /** + * @private + * @param {?} moduleCFR + * @param {?} containerEl + * @param {?} contentRef + * @return {?} + */ + NgbModalStack.prototype._attachWindowComponent = /** + * @private + * @param {?} moduleCFR + * @param {?} containerEl + * @param {?} contentRef + * @return {?} + */ + function (moduleCFR, containerEl, contentRef) { + /** @type {?} */ + var windowFactory = moduleCFR.resolveComponentFactory(NgbModalWindow); + /** @type {?} */ + var windowCmptRef = windowFactory.create(this._injector, contentRef.nodes); + this._applicationRef.attachView(windowCmptRef.hostView); + containerEl.appendChild(windowCmptRef.location.nativeElement); + return windowCmptRef; + }; + /** + * @private + * @param {?} windowInstance + * @param {?} options + * @return {?} + */ + NgbModalStack.prototype._applyWindowOptions = /** + * @private + * @param {?} windowInstance + * @param {?} options + * @return {?} + */ + function (windowInstance, options) { + this._windowAttributes.forEach((/** + * @param {?} optionName + * @return {?} + */ + function (optionName) { + if (isDefined(options[optionName])) { + windowInstance[optionName] = options[optionName]; + } + })); + }; + /** + * @private + * @param {?} backdropInstance + * @param {?} options + * @return {?} + */ + NgbModalStack.prototype._applyBackdropOptions = /** + * @private + * @param {?} backdropInstance + * @param {?} options + * @return {?} + */ + function (backdropInstance, options) { + this._backdropAttributes.forEach((/** + * @param {?} optionName + * @return {?} + */ + function (optionName) { + if (isDefined(options[optionName])) { + backdropInstance[optionName] = options[optionName]; + } + })); + }; + /** + * @private + * @param {?} moduleCFR + * @param {?} contentInjector + * @param {?} content + * @param {?} activeModal + * @param {?} options + * @return {?} + */ + NgbModalStack.prototype._getContentRef = /** + * @private + * @param {?} moduleCFR + * @param {?} contentInjector + * @param {?} content + * @param {?} activeModal + * @param {?} options + * @return {?} + */ + function (moduleCFR, contentInjector, content, activeModal, options) { + if (!content) { + return new ContentRef([]); + } + else if (content instanceof TemplateRef) { + return this._createFromTemplateRef(content, activeModal); + } + else if (isString(content)) { + return this._createFromString(content); + } + else { + return this._createFromComponent(moduleCFR, contentInjector, content, activeModal, options); + } + }; + /** + * @private + * @param {?} content + * @param {?} activeModal + * @return {?} + */ + NgbModalStack.prototype._createFromTemplateRef = /** + * @private + * @param {?} content + * @param {?} activeModal + * @return {?} + */ + function (content, activeModal) { + /** @type {?} */ + var context = { + $implicit: activeModal, + close: /** + * @param {?} result + * @return {?} + */ + function (result) { activeModal.close(result); }, + dismiss: /** + * @param {?} reason + * @return {?} + */ + function (reason) { activeModal.dismiss(reason); } + }; + /** @type {?} */ + var viewRef = content.createEmbeddedView(context); + this._applicationRef.attachView(viewRef); + return new ContentRef([viewRef.rootNodes], viewRef); + }; + /** + * @private + * @param {?} content + * @return {?} + */ + NgbModalStack.prototype._createFromString = /** + * @private + * @param {?} content + * @return {?} + */ + function (content) { + /** @type {?} */ + var component = this._document.createTextNode("" + content); + return new ContentRef([[component]]); + }; + /** + * @private + * @param {?} moduleCFR + * @param {?} contentInjector + * @param {?} content + * @param {?} context + * @param {?} options + * @return {?} + */ + NgbModalStack.prototype._createFromComponent = /** + * @private + * @param {?} moduleCFR + * @param {?} contentInjector + * @param {?} content + * @param {?} context + * @param {?} options + * @return {?} + */ + function (moduleCFR, contentInjector, content, context, options) { + /** @type {?} */ + var contentCmptFactory = moduleCFR.resolveComponentFactory(content); + /** @type {?} */ + var modalContentInjector = Injector.create({ providers: [{ provide: NgbActiveModal, useValue: context }], parent: contentInjector }); + /** @type {?} */ + var componentRef = contentCmptFactory.create(modalContentInjector); + /** @type {?} */ + var componentNativeEl = componentRef.location.nativeElement; + if (options.scrollable) { + ((/** @type {?} */ (componentNativeEl))).classList.add('component-host-scrollable'); + } + this._applicationRef.attachView(componentRef.hostView); + // FIXME: we should here get rid of the component nativeElement + // and use `[Array.from(componentNativeEl.childNodes)]` instead and remove the above CSS class. + return new ContentRef([[componentNativeEl]], componentRef.hostView, componentRef); + }; + /** + * @private + * @param {?} element + * @return {?} + */ + NgbModalStack.prototype._setAriaHidden = /** + * @private + * @param {?} element + * @return {?} + */ + function (element) { + var _this = this; + /** @type {?} */ + var parent = element.parentElement; + if (parent && element !== this._document.body) { + Array.from(parent.children).forEach((/** + * @param {?} sibling + * @return {?} + */ + function (sibling) { + if (sibling !== element && sibling.nodeName !== 'SCRIPT') { + _this._ariaHiddenValues.set(sibling, sibling.getAttribute('aria-hidden')); + sibling.setAttribute('aria-hidden', 'true'); + } + })); + this._setAriaHidden(parent); + } + }; + /** + * @private + * @return {?} + */ + NgbModalStack.prototype._revertAriaHidden = /** + * @private + * @return {?} + */ + function () { + this._ariaHiddenValues.forEach((/** + * @param {?} value + * @param {?} element + * @return {?} + */ + function (value, element) { + if (value) { + element.setAttribute('aria-hidden', value); + } + else { + element.removeAttribute('aria-hidden'); + } + })); + this._ariaHiddenValues.clear(); + }; + /** + * @private + * @param {?} ngbModalRef + * @return {?} + */ + NgbModalStack.prototype._registerModalRef = /** + * @private + * @param {?} ngbModalRef + * @return {?} + */ + function (ngbModalRef) { + var _this = this; + /** @type {?} */ + var unregisterModalRef = (/** + * @return {?} + */ + function () { + /** @type {?} */ + var index = _this._modalRefs.indexOf(ngbModalRef); + if (index > -1) { + _this._modalRefs.splice(index, 1); + } + }); + this._modalRefs.push(ngbModalRef); + ngbModalRef.result.then(unregisterModalRef, unregisterModalRef); + }; + /** + * @private + * @param {?} ngbWindowCmpt + * @return {?} + */ + NgbModalStack.prototype._registerWindowCmpt = /** + * @private + * @param {?} ngbWindowCmpt + * @return {?} + */ + function (ngbWindowCmpt) { + var _this = this; + this._windowCmpts.push(ngbWindowCmpt); + this._activeWindowCmptHasChanged.next(); + ngbWindowCmpt.onDestroy((/** + * @return {?} + */ + function () { + /** @type {?} */ + var index = _this._windowCmpts.indexOf(ngbWindowCmpt); + if (index > -1) { + _this._windowCmpts.splice(index, 1); + _this._activeWindowCmptHasChanged.next(); + } + })); + }; + NgbModalStack.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ + NgbModalStack.ctorParameters = function () { return [ + { type: ApplicationRef }, + { type: Injector }, + { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }, + { type: ScrollBar }, + { type: RendererFactory2 } + ]; }; + /** @nocollapse */ NgbModalStack.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function NgbModalStack_Factory() { return new NgbModalStack(i0.ɵɵinject(i0.ApplicationRef), i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(i1.DOCUMENT), i0.ɵɵinject(i2.ScrollBar), i0.ɵɵinject(i0.RendererFactory2)); }, token: NgbModalStack, providedIn: "root" }); + return NgbModalStack; +}()); +export { NgbModalStack }; +if (false) { + /** + * @type {?} + * @private + */ + NgbModalStack.prototype._activeWindowCmptHasChanged; + /** + * @type {?} + * @private + */ + NgbModalStack.prototype._ariaHiddenValues; + /** + * @type {?} + * @private + */ + NgbModalStack.prototype._backdropAttributes; + /** + * @type {?} + * @private + */ + NgbModalStack.prototype._modalRefs; + /** + * @type {?} + * @private + */ + NgbModalStack.prototype._windowAttributes; + /** + * @type {?} + * @private + */ + NgbModalStack.prototype._windowCmpts; + /** + * @type {?} + * @private + */ + NgbModalStack.prototype._applicationRef; + /** + * @type {?} + * @private + */ + NgbModalStack.prototype._injector; + /** + * @type {?} + * @private + */ + NgbModalStack.prototype._document; + /** + * @type {?} + * @private + */ + NgbModalStack.prototype._scrollBar; + /** + * @type {?} + * @private + */ + NgbModalStack.prototype._rendererFactory; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtc3RhY2suanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJtb2RhbC9tb2RhbC1zdGFjay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFDTCxjQUFjLEVBR2QsTUFBTSxFQUNOLFVBQVUsRUFDVixRQUFRLEVBQ1IsZ0JBQWdCLEVBQ2hCLFdBQVcsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRTdCLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUM1QyxPQUFPLEVBQUMsU0FBUyxFQUFFLFFBQVEsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNqRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUVsRCxPQUFPLEVBQUMsY0FBYyxFQUFFLFdBQVcsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUN4RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFFOUM7SUFVRSx1QkFDWSxlQUErQixFQUFVLFNBQW1CLEVBQTRCLFNBQWMsRUFDdEcsVUFBcUIsRUFBVSxnQkFBa0M7UUFGN0UsaUJBWUM7UUFYVyxvQkFBZSxHQUFmLGVBQWUsQ0FBZ0I7UUFBVSxjQUFTLEdBQVQsU0FBUyxDQUFVO1FBQTRCLGNBQVMsR0FBVCxTQUFTLENBQUs7UUFDdEcsZUFBVSxHQUFWLFVBQVUsQ0FBVztRQUFVLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFWckUsZ0NBQTJCLEdBQUcsSUFBSSxPQUFPLEVBQUUs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QUMsUUFBUTtnQkFsQnBGLFNBQVM7Z0JBUGYsZ0JBQWdCOzs7d0JBUmxCO0NBOE5DLEFBeE1ELElBd01DO1NBdk1ZLGFBQWE7Ozs7OztJQUN4QixvREFBb0Q7Ozs7O0lBQ3BELDBDQUE0RDs7Ozs7SUFDNUQsNENBQWdEOzs7OztJQUNoRCxtQ0FBdUM7Ozs7O0lBQ3ZDLDBDQUNnRzs7Ozs7SUFDaEcscUNBQTBEOzs7OztJQUd0RCx3Q0FBdUM7Ozs7O0lBQUUsa0NBQTJCOzs7OztJQUFFLGtDQUF3Qzs7Ozs7SUFDOUcsbUNBQTZCOzs7OztJQUFFLHlDQUEwQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RE9DVU1FTlR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBBcHBsaWNhdGlvblJlZixcbiAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICBDb21wb25lbnRSZWYsXG4gIEluamVjdCxcbiAgSW5qZWN0YWJsZSxcbiAgSW5qZWN0b3IsXG4gIFJlbmRlcmVyRmFjdG9yeTIsXG4gIFRlbXBsYXRlUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7U3ViamVjdH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7bmdiRm9jdXNUcmFwfSBmcm9tICcuLi91dGlsL2ZvY3VzLXRyYXAnO1xuaW1wb3J0IHtDb250ZW50UmVmfSBmcm9tICcuLi91dGlsL3BvcHVwJztcbmltcG9ydCB7U2Nyb2xsQmFyfSBmcm9tICcuLi91dGlsL3Njcm9sbGJhcic7XG5pbXBvcnQge2lzRGVmaW5lZCwgaXNTdHJpbmd9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQge05nYk1vZGFsQmFja2Ryb3B9IGZyb20gJy4vbW9kYWwtYmFja2Ryb3AnO1xuaW1wb3J0IHtOZ2JNb2RhbE9wdGlvbnN9IGZyb20gJy4vbW9kYWwtY29uZmlnJztcbmltcG9ydCB7TmdiQWN0aXZlTW9kYWwsIE5nYk1vZGFsUmVmfSBmcm9tICcuL21vZGFsLXJlZic7XG5pbXBvcnQge05nYk1vZGFsV2luZG93fSBmcm9tICcuL21vZGFsLXdpbmRvdyc7XG5cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIE5nYk1vZGFsU3RhY2sge1xuICBwcml2YXRlIF9hY3RpdmVXaW5kb3dDbXB0SGFzQ2hhbmdlZCA9IG5ldyBTdWJqZWN0KCk7XG4gIHByaXZhdGUgX2FyaWFIaWRkZW5WYWx1ZXM6IE1hcDxFbGVtZW50LCBzdHJpbmc+ID0gbmV3IE1hcCgpO1xuICBwcml2YXRlIF9iYWNrZHJvcEF0dHJpYnV0ZXMgPSBbJ2JhY2tkcm9wQ2xhc3MnXTtcbiAgcHJpdmF0ZSBfbW9kYWxSZWZzOiBOZ2JNb2RhbFJlZltdID0gW107XG4gIHByaXZhdGUgX3dpbmRvd0F0dHJpYnV0ZXMgPVxuICAgICAgWydhcmlhTGFiZWxsZWRCeScsICdiYWNrZHJvcCcsICdjZW50ZXJlZCcsICdrZXlib2FyZCcsICdzY3JvbGxhYmxlJywgJ3NpemUnLCAnd2luZG93Q2xhc3MnXTtcbiAgcHJpdmF0ZSBfd2luZG93Q21wdHM6IENvbXBvbmVudFJlZjxOZ2JNb2RhbFdpbmRvdz5bXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgcHJpdmF0ZSBfYXBwbGljYXRpb25SZWY6IEFwcGxpY2F0aW9uUmVmLCBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IsIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgX2RvY3VtZW50OiBhbnksXG4gICAgICBwcml2YXRlIF9zY3JvbGxCYXI6IFNjcm9sbEJhciwgcHJpdmF0ZSBfcmVuZGVyZXJGYWN0b3J5OiBSZW5kZXJlckZhY3RvcnkyKSB7XG4gICAgLy8gVHJhcCBmb2N1cyBvbiBhY3RpdmUgV2luZG93Q21wdFxuICAgIHRoaXMuX2FjdGl2ZVdpbmRvd0NtcHRIYXNDaGFuZ2VkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fd2luZG93Q21wdHMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGFjdGl2ZVdpbmRvd0NtcHQgPSB0aGlzLl93aW5kb3dDbXB0c1t0aGlzLl93aW5kb3dDbXB0cy5sZW5ndGggLSAxXTtcbiAgICAgICAgbmdiRm9jdXNUcmFwKGFjdGl2ZVdpbmRvd0NtcHQubG9jYXRpb24ubmF0aXZlRWxlbWVudCwgdGhpcy5fYWN0aXZlV2luZG93Q21wdEhhc0NoYW5nZWQpO1xuICAgICAgICB0aGlzLl9yZXZlcnRBcmlhSGlkZGVuKCk7XG4gICAgICAgIHRoaXMuX3NldEFyaWFIaWRkZW4oYWN0aXZlV2luZG93Q21wdC5sb2NhdGlvbi5uYXRpdmVFbGVtZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG9wZW4obW9kdWxlQ0ZSOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIGNvbnRlbnRJbmplY3RvcjogSW5qZWN0b3IsIGNvbnRlbnQ6IGFueSwgb3B0aW9ucyk6IE5nYk1vZGFsUmVmIHtcbiAgICBjb25zdCBjb250YWluZXJFbCA9XG4gICAgICAgIGlzRGVmaW5lZChvcHRpb25zLmNvbnRhaW5lcikgPyB0aGlzLl9kb2N1bWVudC5xdWVyeVNlbGVjdG9yKG9wdGlvbnMuY29udGFpbmVyKSA6IHRoaXMuX2RvY3VtZW50LmJvZHk7XG4gICAgY29uc3QgcmVuZGVyZXIgPSB0aGlzLl9yZW5kZXJlckZhY3RvcnkuY3JlYXRlUmVuZGVyZXIobnVsbCwgbnVsbCk7XG5cbiAgICBjb25zdCByZXZlcnRQYWRkaW5nRm9yU2Nyb2xsQmFyID0gdGhpcy5fc2Nyb2xsQmFyLmNvbXBlbnNhdGUoKTtcbiAgICBjb25zdCByZW1vdmVCb2R5Q2xhc3MgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX21vZGFsUmVmcy5sZW5ndGgpIHtcbiAgICAgICAgcmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5fZG9jdW1lbnQuYm9keSwgJ21vZGFsLW9wZW4nKTtcbiAgICAgICAgdGhpcy5fcmV2ZXJ0QXJpYUhpZGRlbigpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoIWNvbnRhaW5lckVsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBzcGVjaWZpZWQgbW9kYWwgY29udGFpbmVyIFwiJHtvcHRpb25zLmNvbnRhaW5lciB8fCAnYm9keSd9XCIgd2FzIG5vdCBmb3VuZCBpbiB0aGUgRE9NLmApO1xuICAgIH1cblxuICAgIGNvbnN0IGFjdGl2ZU1vZGFsID0gbmV3IE5nYkFjdGl2ZU1vZGFsKCk7XG4gICAgY29uc3QgY29udGVudFJlZiA9XG4gICAgICAgIHRoaXMuX2dldENvbnRlbnRSZWYobW9kdWxlQ0ZSLCBvcHRpb25zLmluamVjdG9yIHx8IGNvbnRlbnRJbmplY3RvciwgY29udGVudCwgYWN0aXZlTW9kYWwsIG9wdGlvbnMpO1xuXG4gICAgbGV0IGJhY2tkcm9wQ21wdFJlZjogQ29tcG9uZW50UmVmPE5nYk1vZGFsQmFja2Ryb3A+ID1cbiAgICAgICAgb3B0aW9ucy5iYWNrZHJvcCAhPT0gZmFsc2UgPyB0aGlzLl9hdHRhY2hCYWNrZHJvcChtb2R1bGVDRlIsIGNvbnRhaW5lckVsKSA6IG51bGw7XG4gICAgbGV0IHdpbmRvd0NtcHRSZWY6IENvbXBvbmVudFJlZjxOZ2JNb2RhbFdpbmRvdz4gPSB0aGlzLl9hdHRhY2hXaW5kb3dDb21wb25lbnQobW9kdWxlQ0ZSLCBjb250YWluZXJFbCwgY29udGVudFJlZik7XG4gICAgbGV0IG5nYk1vZGFsUmVmOiBOZ2JNb2RhbFJlZiA9IG5ldyBOZ2JNb2RhbFJlZih3aW5kb3dDbXB0UmVmLCBjb250ZW50UmVmLCBiYWNrZHJvcENtcHRSZWYsIG9wdGlvbnMuYmVmb3JlRGlzbWlzcyk7XG5cbiAgICB0aGlzLl9yZWdpc3Rlck1vZGFsUmVmKG5nYk1vZGFsUmVmKTtcbiAgICB0aGlzLl9yZWdpc3RlcldpbmRvd0NtcHQod2luZG93Q21wdFJlZik7XG4gICAgbmdiTW9kYWxSZWYucmVzdWx0LnRoZW4ocmV2ZXJ0UGFkZGluZ0ZvclNjcm9sbEJhciwgcmV2ZXJ0UGFkZGluZ0ZvclNjcm9sbEJhcik7XG4gICAgbmdiTW9kYWxSZWYucmVzdWx0LnRoZW4ocmVtb3ZlQm9keUNsYXNzLCByZW1vdmVCb2R5Q2xhc3MpO1xuICAgIGFjdGl2ZU1vZGFsLmNsb3NlID0gKHJlc3VsdDogYW55KSA9PiB7IG5nYk1vZGFsUmVmLmNsb3NlKHJlc3VsdCk7IH07XG4gICAgYWN0aXZlTW9kYWwuZGlzbWlzcyA9IChyZWFzb246IGFueSkgPT4geyBuZ2JNb2RhbFJlZi5kaXNtaXNzKHJlYXNvbik7IH07XG5cbiAgICB0aGlzLl9hcHBseVdpbmRvd09wdGlvbnMod2luZG93Q21wdFJlZi5pbnN0YW5jZSwgb3B0aW9ucyk7XG4gICAgaWYgKHRoaXMuX21vZGFsUmVmcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJlbmRlcmVyLmFkZENsYXNzKHRoaXMuX2RvY3VtZW50LmJvZHksICdtb2RhbC1vcGVuJyk7XG4gICAgfVxuXG4gICAgaWYgKGJhY2tkcm9wQ21wdFJlZiAmJiBiYWNrZHJvcENtcHRSZWYuaW5zdGFuY2UpIHtcbiAgICAgIHRoaXMuX2FwcGx5QmFja2Ryb3BPcHRpb25zKGJhY2tkcm9wQ21wdFJlZi5pbnN0YW5jZSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiBuZ2JNb2RhbFJlZjtcbiAgfVxuXG4gIGRpc21pc3NBbGwocmVhc29uPzogYW55KSB7IHRoaXMuX21vZGFsUmVmcy5mb3JFYWNoKG5nYk1vZGFsUmVmID0+IG5nYk1vZGFsUmVmLmRpc21pc3MocmVhc29uKSk7IH1cblxuICBoYXNPcGVuTW9kYWxzKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fbW9kYWxSZWZzLmxlbmd0aCA+IDA7IH1cblxuICBwcml2YXRlIF9hdHRhY2hCYWNrZHJvcChtb2R1bGVDRlI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgY29udGFpbmVyRWw6IGFueSk6IENvbXBvbmVudFJlZjxOZ2JNb2RhbEJhY2tkcm9wPiB7XG4gICAgbGV0IGJhY2tkcm9wRmFjdG9yeSA9IG1vZHVsZUNGUi5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShOZ2JNb2RhbEJhY2tkcm9wKTtcbiAgICBsZXQgYmFja2Ryb3BDbXB0UmVmID0gYmFja2Ryb3BGYWN0b3J5LmNyZWF0ZSh0aGlzLl9pbmplY3Rvcik7XG4gICAgdGhpcy5fYXBwbGljYXRpb25SZWYuYXR0YWNoVmlldyhiYWNrZHJvcENtcHRSZWYuaG9zdFZpZXcpO1xuICAgIGNvbnRhaW5lckVsLmFwcGVuZENoaWxkKGJhY2tkcm9wQ21wdFJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50KTtcbiAgICByZXR1cm4gYmFja2Ryb3BDbXB0UmVmO1xuICB9XG5cbiAgcHJpdmF0ZSBfYXR0YWNoV2luZG93Q29tcG9uZW50KG1vZHVsZUNGUjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBjb250YWluZXJFbDogYW55LCBjb250ZW50UmVmOiBhbnkpOlxuICAgICAgQ29tcG9uZW50UmVmPE5nYk1vZGFsV2luZG93PiB7XG4gICAgbGV0IHdpbmRvd0ZhY3RvcnkgPSBtb2R1bGVDRlIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoTmdiTW9kYWxXaW5kb3cpO1xuICAgIGxldCB3aW5kb3dDbXB0UmVmID0gd2luZG93RmFjdG9yeS5jcmVhdGUodGhpcy5faW5qZWN0b3IsIGNvbnRlbnRSZWYubm9kZXMpO1xuICAgIHRoaXMuX2FwcGxpY2F0aW9uUmVmLmF0dGFjaFZpZXcod2luZG93Q21wdFJlZi5ob3N0Vmlldyk7XG4gICAgY29udGFpbmVyRWwuYXBwZW5kQ2hpbGQod2luZG93Q21wdFJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50KTtcbiAgICByZXR1cm4gd2luZG93Q21wdFJlZjtcbiAgfVxuXG4gIHByaXZhdGUgX2FwcGx5V2luZG93T3B0aW9ucyh3aW5kb3dJbnN0YW5jZTogTmdiTW9kYWxXaW5kb3csIG9wdGlvbnM6IE9iamVjdCk6IHZvaWQge1xuICAgIHRoaXMuX3dpbmRvd0F0dHJpYnV0ZXMuZm9yRWFjaCgob3B0aW9uTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoaXNEZWZpbmVkKG9wdGlvbnNbb3B0aW9uTmFtZV0pKSB7XG4gICAgICAgIHdpbmRvd0luc3RhbmNlW29wdGlvbk5hbWVdID0gb3B0aW9uc1tvcHRpb25OYW1lXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2FwcGx5QmFja2Ryb3BPcHRpb25zKGJhY2tkcm9wSW5zdGFuY2U6IE5nYk1vZGFsQmFja2Ryb3AsIG9wdGlvbnM6IE9iamVjdCk6IHZvaWQge1xuICAgIHRoaXMuX2JhY2tkcm9wQXR0cmlidXRlcy5mb3JFYWNoKChvcHRpb25OYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChpc0RlZmluZWQob3B0aW9uc1tvcHRpb25OYW1lXSkpIHtcbiAgICAgICAgYmFja2Ryb3BJbnN0YW5jZVtvcHRpb25OYW1lXSA9IG9wdGlvbnNbb3B0aW9uTmFtZV07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9nZXRDb250ZW50UmVmKFxuICAgICAgbW9kdWxlQ0ZSOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIGNvbnRlbnRJbmplY3RvcjogSW5qZWN0b3IsIGNvbnRlbnQ6IGFueSwgYWN0aXZlTW9kYWw6IE5nYkFjdGl2ZU1vZGFsLFxuICAgICAgb3B0aW9uczogTmdiTW9kYWxPcHRpb25zKTogQ29udGVudFJlZiB7XG4gICAgaWYgKCFjb250ZW50KSB7XG4gICAgICByZXR1cm4gbmV3IENvbnRlbnRSZWYoW10pO1xuICAgIH0gZWxzZSBpZiAoY29udGVudCBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmKSB7XG4gICAgICByZXR1cm4gdGhpcy5fY3JlYXRlRnJvbVRlbXBsYXRlUmVmKGNvbnRlbnQsIGFjdGl2ZU1vZGFsKTtcbiAgICB9IGVsc2UgaWYgKGlzU3RyaW5nKGNvbnRlbnQpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fY3JlYXRlRnJvbVN0cmluZyhjb250ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUZyb21Db21wb25lbnQobW9kdWxlQ0ZSLCBjb250ZW50SW5qZWN0b3IsIGNvbnRlbnQsIGFjdGl2ZU1vZGFsLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9jcmVhdGVGcm9tVGVtcGxhdGVSZWYoY29udGVudDogVGVtcGxhdGVSZWY8YW55PiwgYWN0aXZlTW9kYWw6IE5nYkFjdGl2ZU1vZGFsKTogQ29udGVudFJlZiB7XG4gICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgICRpbXBsaWNpdDogYWN0aXZlTW9kYWwsXG4gICAgICBjbG9zZShyZXN1bHQpIHsgYWN0aXZlTW9kYWwuY2xvc2UocmVzdWx0KTsgfSxcbiAgICAgIGRpc21pc3MocmVhc29uKSB7IGFjdGl2ZU1vZGFsLmRpc21pc3MocmVhc29uKTsgfVxuICAgIH07XG4gICAgY29uc3Qgdmlld1JlZiA9IGNvbnRlbnQuY3JlYXRlRW1iZWRkZWRWaWV3KGNvbnRleHQpO1xuICAgIHRoaXMuX2FwcGxpY2F0aW9uUmVmLmF0dGFjaFZpZXcodmlld1JlZik7XG4gICAgcmV0dXJuIG5ldyBDb250ZW50UmVmKFt2aWV3UmVmLnJvb3ROb2Rlc10sIHZpZXdSZWYpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY3JlYXRlRnJvbVN0cmluZyhjb250ZW50OiBzdHJpbmcpOiBDb250ZW50UmVmIHtcbiAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLl9kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShgJHtjb250ZW50fWApO1xuICAgIHJldHVybiBuZXcgQ29udGVudFJlZihbW2NvbXBvbmVudF1dKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NyZWF0ZUZyb21Db21wb25lbnQoXG4gICAgICBtb2R1bGVDRlI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgY29udGVudEluamVjdG9yOiBJbmplY3RvciwgY29udGVudDogYW55LCBjb250ZXh0OiBOZ2JBY3RpdmVNb2RhbCxcbiAgICAgIG9wdGlvbnM6IE5nYk1vZGFsT3B0aW9ucyk6IENvbnRlbnRSZWYge1xuICAgIGNvbnN0IGNvbnRlbnRDbXB0RmFjdG9yeSA9IG1vZHVsZUNGUi5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShjb250ZW50KTtcbiAgICBjb25zdCBtb2RhbENvbnRlbnRJbmplY3RvciA9XG4gICAgICAgIEluamVjdG9yLmNyZWF0ZSh7cHJvdmlkZXJzOiBbe3Byb3ZpZGU6IE5nYkFjdGl2ZU1vZGFsLCB1c2VWYWx1ZTogY29udGV4dH1dLCBwYXJlbnQ6IGNvbnRlbnRJbmplY3Rvcn0pO1xuICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IGNvbnRlbnRDbXB0RmFjdG9yeS5jcmVhdGUobW9kYWxDb250ZW50SW5qZWN0b3IpO1xuICAgIGNvbnN0IGNvbXBvbmVudE5hdGl2ZUVsID0gY29tcG9uZW50UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKG9wdGlvbnMuc2Nyb2xsYWJsZSkge1xuICAgICAgKGNvbXBvbmVudE5hdGl2ZUVsIGFzIEhUTUxFbGVtZW50KS5jbGFzc0xpc3QuYWRkKCdjb21wb25lbnQtaG9zdC1zY3JvbGxhYmxlJyk7XG4gICAgfVxuICAgIHRoaXMuX2FwcGxpY2F0aW9uUmVmLmF0dGFjaFZpZXcoY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcbiAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGhlcmUgZ2V0IHJpZCBvZiB0aGUgY29tcG9uZW50IG5hdGl2ZUVsZW1lbnRcbiAgICAvLyBhbmQgdXNlIGBbQXJyYXkuZnJvbShjb21wb25lbnROYXRpdmVFbC5jaGlsZE5vZGVzKV1gIGluc3RlYWQgYW5kIHJlbW92ZSB0aGUgYWJvdmUgQ1NTIGNsYXNzLlxuICAgIHJldHVybiBuZXcgQ29udGVudFJlZihbW2NvbXBvbmVudE5hdGl2ZUVsXV0sIGNvbXBvbmVudFJlZi5ob3N0VmlldywgY29tcG9uZW50UmVmKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldEFyaWFIaWRkZW4oZWxlbWVudDogRWxlbWVudCkge1xuICAgIGNvbnN0IHBhcmVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICBpZiAocGFyZW50ICYmIGVsZW1lbnQgIT09IHRoaXMuX2RvY3VtZW50LmJvZHkpIHtcbiAgICAgIEFycmF5LmZyb20ocGFyZW50LmNoaWxkcmVuKS5mb3JFYWNoKHNpYmxpbmcgPT4ge1xuICAgICAgICBpZiAoc2libGluZyAhPT0gZWxlbWVudCAmJiBzaWJsaW5nLm5vZGVOYW1lICE9PSAnU0NSSVBUJykge1xuICAgICAgICAgIHRoaXMuX2FyaWFIaWRkZW5WYWx1ZXMuc2V0KHNpYmxpbmcsIHNpYmxpbmcuZ2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicpKTtcbiAgICAgICAgICBzaWJsaW5nLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5fc2V0QXJpYUhpZGRlbihwYXJlbnQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3JldmVydEFyaWFIaWRkZW4oKSB7XG4gICAgdGhpcy5fYXJpYUhpZGRlblZhbHVlcy5mb3JFYWNoKCh2YWx1ZSwgZWxlbWVudCkgPT4ge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsIHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWhpZGRlbicpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuX2FyaWFIaWRkZW5WYWx1ZXMuY2xlYXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlZ2lzdGVyTW9kYWxSZWYobmdiTW9kYWxSZWY6IE5nYk1vZGFsUmVmKSB7XG4gICAgY29uc3QgdW5yZWdpc3Rlck1vZGFsUmVmID0gKCkgPT4ge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9tb2RhbFJlZnMuaW5kZXhPZihuZ2JNb2RhbFJlZik7XG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICB0aGlzLl9tb2RhbFJlZnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuX21vZGFsUmVmcy5wdXNoKG5nYk1vZGFsUmVmKTtcbiAgICBuZ2JNb2RhbFJlZi5yZXN1bHQudGhlbih1bnJlZ2lzdGVyTW9kYWxSZWYsIHVucmVnaXN0ZXJNb2RhbFJlZik7XG4gIH1cblxuICBwcml2YXRlIF9yZWdpc3RlcldpbmRvd0NtcHQobmdiV2luZG93Q21wdDogQ29tcG9uZW50UmVmPE5nYk1vZGFsV2luZG93Pikge1xuICAgIHRoaXMuX3dpbmRvd0NtcHRzLnB1c2gobmdiV2luZG93Q21wdCk7XG4gICAgdGhpcy5fYWN0aXZlV2luZG93Q21wdEhhc0NoYW5nZWQubmV4dCgpO1xuXG4gICAgbmdiV2luZG93Q21wdC5vbkRlc3Ryb3koKCkgPT4ge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl93aW5kb3dDbXB0cy5pbmRleE9mKG5nYldpbmRvd0NtcHQpO1xuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgdGhpcy5fd2luZG93Q21wdHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgdGhpcy5fYWN0aXZlV2luZG93Q21wdEhhc0NoYW5nZWQubmV4dCgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/modal/modal-window.js b/dist/sunbird-ui-components/esm5/modal/modal-window.js new file mode 100644 index 0000000..93095aa --- /dev/null +++ b/dist/sunbird-ui-components/esm5/modal/modal-window.js @@ -0,0 +1,166 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { DOCUMENT } from '@angular/common'; +import { Component, ElementRef, EventEmitter, Inject, Input, Output, ViewEncapsulation, } from '@angular/core'; +import { getFocusableBoundaryElements } from '../util/focus-trap'; +import { ModalDismissReasons } from './modal-dismiss-reasons'; +var NgbModalWindow = /** @class */ (function () { + function NgbModalWindow(_document, _elRef) { + this._document = _document; + this._elRef = _elRef; + this.backdrop = true; + this.keyboard = true; + this.dismissEvent = new EventEmitter(); + } + /** + * @param {?} $event + * @return {?} + */ + NgbModalWindow.prototype.backdropClick = /** + * @param {?} $event + * @return {?} + */ + function ($event) { + if (this.backdrop === true && this._elRef.nativeElement === $event.target) { + this.dismiss(ModalDismissReasons.BACKDROP_CLICK); + } + }; + /** + * @param {?} $event + * @return {?} + */ + NgbModalWindow.prototype.escKey = /** + * @param {?} $event + * @return {?} + */ + function ($event) { + if (this.keyboard && !$event.defaultPrevented) { + this.dismiss(ModalDismissReasons.ESC); + } + }; + /** + * @param {?} reason + * @return {?} + */ + NgbModalWindow.prototype.dismiss = /** + * @param {?} reason + * @return {?} + */ + function (reason) { this.dismissEvent.emit(reason); }; + /** + * @return {?} + */ + NgbModalWindow.prototype.ngOnInit = /** + * @return {?} + */ + function () { this._elWithFocus = this._document.activeElement; }; + /** + * @return {?} + */ + NgbModalWindow.prototype.ngAfterViewInit = /** + * @return {?} + */ + function () { + if (!this._elRef.nativeElement.contains(document.activeElement)) { + /** @type {?} */ + var autoFocusable = (/** @type {?} */ (this._elRef.nativeElement.querySelector("[ngbAutofocus]"))); + /** @type {?} */ + var firstFocusable = getFocusableBoundaryElements(this._elRef.nativeElement)[0]; + /** @type {?} */ + var elementToFocus = autoFocusable || firstFocusable || this._elRef.nativeElement; + elementToFocus.focus(); + } + }; + /** + * @return {?} + */ + NgbModalWindow.prototype.ngOnDestroy = /** + * @return {?} + */ + function () { + /** @type {?} */ + var body = this._document.body; + /** @type {?} */ + var elWithFocus = this._elWithFocus; + /** @type {?} */ + var elementToFocus; + if (elWithFocus && elWithFocus['focus'] && body.contains(elWithFocus)) { + elementToFocus = elWithFocus; + } + else { + elementToFocus = body; + } + elementToFocus.focus(); + this._elWithFocus = null; + }; + NgbModalWindow.decorators = [ + { type: Component, args: [{ + selector: 'ngb-modal-window', + host: { + '[class]': '"modal fade show d-block" + (windowClass ? " " + windowClass : "")', + 'role': 'dialog', + 'tabindex': '-1', + '(keyup.esc)': 'escKey($event)', + '(click)': 'backdropClick($event)', + '[attr.aria-modal]': 'true', + '[attr.aria-labelledby]': 'ariaLabelledBy', + }, + template: "\n
\n
\n
\n ", + encapsulation: ViewEncapsulation.None, + styles: ["ngb-modal-window .component-host-scrollable{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;overflow:hidden}"] + }] } + ]; + /** @nocollapse */ + NgbModalWindow.ctorParameters = function () { return [ + { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }, + { type: ElementRef } + ]; }; + NgbModalWindow.propDecorators = { + ariaLabelledBy: [{ type: Input }], + backdrop: [{ type: Input }], + centered: [{ type: Input }], + keyboard: [{ type: Input }], + scrollable: [{ type: Input }], + size: [{ type: Input }], + windowClass: [{ type: Input }], + dismissEvent: [{ type: Output, args: ['dismiss',] }] + }; + return NgbModalWindow; +}()); +export { NgbModalWindow }; +if (false) { + /** + * @type {?} + * @private + */ + NgbModalWindow.prototype._elWithFocus; + /** @type {?} */ + NgbModalWindow.prototype.ariaLabelledBy; + /** @type {?} */ + NgbModalWindow.prototype.backdrop; + /** @type {?} */ + NgbModalWindow.prototype.centered; + /** @type {?} */ + NgbModalWindow.prototype.keyboard; + /** @type {?} */ + NgbModalWindow.prototype.scrollable; + /** @type {?} */ + NgbModalWindow.prototype.size; + /** @type {?} */ + NgbModalWindow.prototype.windowClass; + /** @type {?} */ + NgbModalWindow.prototype.dismissEvent; + /** + * @type {?} + * @private + */ + NgbModalWindow.prototype._document; + /** + * @type {?} + * @private + */ + NgbModalWindow.prototype._elRef; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtd2luZG93LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsibW9kYWwvbW9kYWwtd2luZG93LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUVMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsTUFBTSxFQUNOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUMsNEJBQTRCLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRSxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUU1RDtJQWtDRSx3QkFBc0MsU0FBYyxFQUFVLE1BQStCO1FBQXZELGNBQVMsR0FBVCxTQUFTLENBQUs7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUF5QjtRQVRwRixhQUFRLEdBQXFCLElBQUksQ0FBQztRQUVsQyxhQUFRLEdBQUcsSUFBSSxDQUFDO1FBS04saUJBQVksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBRTJDLENBQUM7Ozs7O0lBRWpHLHNDQUFhOzs7O0lBQWIsVUFBYyxNQUFNO1FBQ2xCLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEtBQUssTUFBTSxDQUFDLE1BQU0sRUFBRTtZQUN6RSxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQ2xEO0lBQ0gsQ0FBQzs7Ozs7SUFFRCwrQkFBTTs7OztJQUFOLFVBQU8sTUFBTTtRQUNYLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRTtZQUM3QyxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3ZDO0lBQ0gsQ0FBQzs7Ozs7SUFFRCxnQ0FBTzs7OztJQUFQLFVBQVEsTUFBTSxJQUFVLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzs7OztJQUV6RCxpQ0FBUTs7O0lBQVIsY0FBYSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQzs7OztJQUVoRSx3Q0FBZTs7O0lBQWY7UUFDRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRTs7Z0JBQ3pELGFBQWEsR0FBRyxtQkFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsRUFBZTs7Z0JBQ3hGLGNBQWMsR0FBRyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7Z0JBRTNFLGNBQWMsR0FBRyxhQUFhLElBQUksY0FBYyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYTtZQUNuRixjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDeEI7SUFDSCxDQUFDOzs7O0lBRUQsb0NBQVc7OztJQUFYOztZQUNRLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUk7O1lBQzFCLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWTs7WUFFakMsY0FBYztRQUNsQixJQUFJLFdBQVcsSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUNyRSxjQUFjLEdBQUcsV0FBVyxDQUFDO1NBQzlCO2FBQU07WUFDTCxjQUFjLEdBQUcsSUFBSSxDQUFDO1NBQ3ZCO1FBQ0QsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0lBQzNCLENBQUM7O2dCQTFFRixTQUFTLFNBQUM7b0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsSUFBSSxFQUFFO3dCQUNKLFNBQVMsRUFBRSxvRUFBb0U7d0JBQy9FLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixVQUFVLEVBQUUsSUFBSTt3QkFDaEIsYUFBYSxFQUFFLGdCQUFnQjt3QkFDL0IsU0FBUyxFQUFFLHVCQUF1Qjt3QkFDbEMsbUJBQW1CLEVBQUUsTUFBTTt3QkFDM0Isd0JBQXdCLEVBQUUsZ0JBQWdCO3FCQUMzQztvQkFDRCxRQUFRLEVBQUUsdVJBS1A7b0JBQ0gsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7O2lCQUV0Qzs7OztnREFlYyxNQUFNLFNBQUMsUUFBUTtnQkEvQzVCLFVBQVU7OztpQ0FxQ1QsS0FBSzsyQkFDTCxLQUFLOzJCQUNMLEtBQUs7MkJBQ0wsS0FBSzs2QkFDTCxLQUFLO3VCQUNMLEtBQUs7OEJBQ0wsS0FBSzsrQkFFTCxNQUFNLFNBQUMsU0FBUzs7SUEyQ25CLHFCQUFDO0NBQUEsQUEzRUQsSUEyRUM7U0F2RFksY0FBYzs7Ozs7O0lBRXpCLHNDQUE4Qjs7SUFFOUIsd0NBQWdDOztJQUNoQyxrQ0FBMkM7O0lBQzNDLGtDQUEwQjs7SUFDMUIsa0NBQXlCOztJQUN6QixvQ0FBNEI7O0lBQzVCLDhCQUFzQjs7SUFDdEIscUNBQTZCOztJQUU3QixzQ0FBcUQ7Ozs7O0lBRXpDLG1DQUF3Qzs7Ozs7SUFBRSxnQ0FBdUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RPQ1VNRU5UfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtnZXRGb2N1c2FibGVCb3VuZGFyeUVsZW1lbnRzfSBmcm9tICcuLi91dGlsL2ZvY3VzLXRyYXAnO1xuaW1wb3J0IHtNb2RhbERpc21pc3NSZWFzb25zfSBmcm9tICcuL21vZGFsLWRpc21pc3MtcmVhc29ucyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25nYi1tb2RhbC13aW5kb3cnLFxuICBob3N0OiB7XG4gICAgJ1tjbGFzc10nOiAnXCJtb2RhbCBmYWRlIHNob3cgZC1ibG9ja1wiICsgKHdpbmRvd0NsYXNzID8gXCIgXCIgKyB3aW5kb3dDbGFzcyA6IFwiXCIpJyxcbiAgICAncm9sZSc6ICdkaWFsb2cnLFxuICAgICd0YWJpbmRleCc6ICctMScsXG4gICAgJyhrZXl1cC5lc2MpJzogJ2VzY0tleSgkZXZlbnQpJyxcbiAgICAnKGNsaWNrKSc6ICdiYWNrZHJvcENsaWNrKCRldmVudCknLFxuICAgICdbYXR0ci5hcmlhLW1vZGFsXSc6ICd0cnVlJyxcbiAgICAnW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XSc6ICdhcmlhTGFiZWxsZWRCeScsXG4gIH0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBbY2xhc3NdPVwiJ21vZGFsLWRpYWxvZycgKyAoc2l6ZSA/ICcgbW9kYWwtJyArIHNpemUgOiAnJykgKyAoY2VudGVyZWQgPyAnIG1vZGFsLWRpYWxvZy1jZW50ZXJlZCcgOiAnJykgK1xuICAgICAoc2Nyb2xsYWJsZSA/ICcgbW9kYWwtZGlhbG9nLXNjcm9sbGFibGUnIDogJycpXCIgcm9sZT1cImRvY3VtZW50XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PjwvZGl2PlxuICAgIDwvZGl2PlxuICAgIGAsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHN0eWxlVXJsczogWycuL21vZGFsLnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBOZ2JNb2RhbFdpbmRvdyBpbXBsZW1lbnRzIE9uSW5pdCxcbiAgICBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIF9lbFdpdGhGb2N1czogRWxlbWVudDsgIC8vIGVsZW1lbnQgdGhhdCBpcyBmb2N1c2VkIHByaW9yIHRvIG1vZGFsIG9wZW5pbmdcblxuICBASW5wdXQoKSBhcmlhTGFiZWxsZWRCeTogc3RyaW5nO1xuICBASW5wdXQoKSBiYWNrZHJvcDogYm9vbGVhbiB8IHN0cmluZyA9IHRydWU7XG4gIEBJbnB1dCgpIGNlbnRlcmVkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGtleWJvYXJkID0gdHJ1ZTtcbiAgQElucHV0KCkgc2Nyb2xsYWJsZTogc3RyaW5nO1xuICBASW5wdXQoKSBzaXplOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHdpbmRvd0NsYXNzOiBzdHJpbmc7XG5cbiAgQE91dHB1dCgnZGlzbWlzcycpIGRpc21pc3NFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIF9kb2N1bWVudDogYW55LCBwcml2YXRlIF9lbFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pIHt9XG5cbiAgYmFja2Ryb3BDbGljaygkZXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5iYWNrZHJvcCA9PT0gdHJ1ZSAmJiB0aGlzLl9lbFJlZi5uYXRpdmVFbGVtZW50ID09PSAkZXZlbnQudGFyZ2V0KSB7XG4gICAgICB0aGlzLmRpc21pc3MoTW9kYWxEaXNtaXNzUmVhc29ucy5CQUNLRFJPUF9DTElDSyk7XG4gICAgfVxuICB9XG5cbiAgZXNjS2V5KCRldmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmtleWJvYXJkICYmICEkZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgdGhpcy5kaXNtaXNzKE1vZGFsRGlzbWlzc1JlYXNvbnMuRVNDKTtcbiAgICB9XG4gIH1cblxuICBkaXNtaXNzKHJlYXNvbik6IHZvaWQgeyB0aGlzLmRpc21pc3NFdmVudC5lbWl0KHJlYXNvbik7IH1cblxuICBuZ09uSW5pdCgpIHsgdGhpcy5fZWxXaXRoRm9jdXMgPSB0aGlzLl9kb2N1bWVudC5hY3RpdmVFbGVtZW50OyB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGlmICghdGhpcy5fZWxSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSkge1xuICAgICAgY29uc3QgYXV0b0ZvY3VzYWJsZSA9IHRoaXMuX2VsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihgW25nYkF1dG9mb2N1c11gKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGNvbnN0IGZpcnN0Rm9jdXNhYmxlID0gZ2V0Rm9jdXNhYmxlQm91bmRhcnlFbGVtZW50cyh0aGlzLl9lbFJlZi5uYXRpdmVFbGVtZW50KVswXTtcblxuICAgICAgY29uc3QgZWxlbWVudFRvRm9jdXMgPSBhdXRvRm9jdXNhYmxlIHx8IGZpcnN0Rm9jdXNhYmxlIHx8IHRoaXMuX2VsUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBlbGVtZW50VG9Gb2N1cy5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGNvbnN0IGJvZHkgPSB0aGlzLl9kb2N1bWVudC5ib2R5O1xuICAgIGNvbnN0IGVsV2l0aEZvY3VzID0gdGhpcy5fZWxXaXRoRm9jdXM7XG5cbiAgICBsZXQgZWxlbWVudFRvRm9jdXM7XG4gICAgaWYgKGVsV2l0aEZvY3VzICYmIGVsV2l0aEZvY3VzWydmb2N1cyddICYmIGJvZHkuY29udGFpbnMoZWxXaXRoRm9jdXMpKSB7XG4gICAgICBlbGVtZW50VG9Gb2N1cyA9IGVsV2l0aEZvY3VzO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbGVtZW50VG9Gb2N1cyA9IGJvZHk7XG4gICAgfVxuICAgIGVsZW1lbnRUb0ZvY3VzLmZvY3VzKCk7XG4gICAgdGhpcy5fZWxXaXRoRm9jdXMgPSBudWxsO1xuICB9XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/modal/modal.js b/dist/sunbird-ui-components/esm5/modal/modal.js new file mode 100644 index 0000000..42e950b --- /dev/null +++ b/dist/sunbird-ui-components/esm5/modal/modal.js @@ -0,0 +1,137 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Injectable, Injector, ComponentFactoryResolver } from '@angular/core'; +import { NgbModalConfig } from './modal-config'; +import { NgbModalStack } from './modal-stack'; +import * as i0 from "@angular/core"; +import * as i1 from "./modal-stack"; +import * as i2 from "./modal-config"; +/** + * A service for opening modal windows. + * + * Creating a modal is straightforward: create a component or a template and pass it as an argument to + * the `.open()` method. + */ +var NgbModal = /** @class */ (function () { + function NgbModal(_moduleCFR, _injector, _modalStack, _config) { + this._moduleCFR = _moduleCFR; + this._injector = _injector; + this._modalStack = _modalStack; + this._config = _config; + } + /** + * Opens a new modal window with the specified content and supplied options. + * + * Content can be provided as a `TemplateRef` or a component type. If you pass a component type as content, + * then instances of those components can be injected with an instance of the `NgbActiveModal` class. You can then + * use `NgbActiveModal` methods to close / dismiss modals from "inside" of your component. + * + * Also see the [`NgbModalOptions`](#/components/modal/api#NgbModalOptions) for the list of supported options. + */ + /** + * Opens a new modal window with the specified content and supplied options. + * + * Content can be provided as a `TemplateRef` or a component type. If you pass a component type as content, + * then instances of those components can be injected with an instance of the `NgbActiveModal` class. You can then + * use `NgbActiveModal` methods to close / dismiss modals from "inside" of your component. + * + * Also see the [`NgbModalOptions`](#/components/modal/api#NgbModalOptions) for the list of supported options. + * @param {?} content + * @param {?=} options + * @return {?} + */ + NgbModal.prototype.open = /** + * Opens a new modal window with the specified content and supplied options. + * + * Content can be provided as a `TemplateRef` or a component type. If you pass a component type as content, + * then instances of those components can be injected with an instance of the `NgbActiveModal` class. You can then + * use `NgbActiveModal` methods to close / dismiss modals from "inside" of your component. + * + * Also see the [`NgbModalOptions`](#/components/modal/api#NgbModalOptions) for the list of supported options. + * @param {?} content + * @param {?=} options + * @return {?} + */ + function (content, options) { + if (options === void 0) { options = {}; } + /** @type {?} */ + var combinedOptions = Object.assign({}, this._config, options); + return this._modalStack.open(this._moduleCFR, this._injector, content, combinedOptions); + }; + /** + * Dismisses all currently displayed modal windows with the supplied reason. + * + * @since 3.1.0 + */ + /** + * Dismisses all currently displayed modal windows with the supplied reason. + * + * \@since 3.1.0 + * @param {?=} reason + * @return {?} + */ + NgbModal.prototype.dismissAll = /** + * Dismisses all currently displayed modal windows with the supplied reason. + * + * \@since 3.1.0 + * @param {?=} reason + * @return {?} + */ + function (reason) { this._modalStack.dismissAll(reason); }; + /** + * Indicates if there are currently any open modal windows in the application. + * + * @since 3.3.0 + */ + /** + * Indicates if there are currently any open modal windows in the application. + * + * \@since 3.3.0 + * @return {?} + */ + NgbModal.prototype.hasOpenModals = /** + * Indicates if there are currently any open modal windows in the application. + * + * \@since 3.3.0 + * @return {?} + */ + function () { return this._modalStack.hasOpenModals(); }; + NgbModal.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ + NgbModal.ctorParameters = function () { return [ + { type: ComponentFactoryResolver }, + { type: Injector }, + { type: NgbModalStack }, + { type: NgbModalConfig } + ]; }; + /** @nocollapse */ NgbModal.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function NgbModal_Factory() { return new NgbModal(i0.ɵɵinject(i0.ComponentFactoryResolver), i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(i1.NgbModalStack), i0.ɵɵinject(i2.NgbModalConfig)); }, token: NgbModal, providedIn: "root" }); + return NgbModal; +}()); +export { NgbModal }; +if (false) { + /** + * @type {?} + * @private + */ + NgbModal.prototype._moduleCFR; + /** + * @type {?} + * @private + */ + NgbModal.prototype._injector; + /** + * @type {?} + * @private + */ + NgbModal.prototype._modalStack; + /** + * @type {?} + * @private + */ + NgbModal.prototype._config; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJtb2RhbC9tb2RhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsd0JBQXdCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFN0UsT0FBTyxFQUFrQixjQUFjLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUvRCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7O0FBUTVDO0lBRUUsa0JBQ1ksVUFBb0MsRUFBVSxTQUFtQixFQUFVLFdBQTBCLEVBQ3JHLE9BQXVCO1FBRHZCLGVBQVUsR0FBVixVQUFVLENBQTBCO1FBQVUsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFlO1FBQ3JHLFlBQU8sR0FBUCxPQUFPLENBQWdCO0lBQUcsQ0FBQztJQUV2Qzs7Ozs7Ozs7T0FRRzs7Ozs7Ozs7Ozs7OztJQUNILHVCQUFJOzs7Ozs7Ozs7Ozs7SUFBSixVQUFLLE9BQVksRUFBRSxPQUE2QjtRQUE3Qix3QkFBQSxFQUFBLFlBQTZCOztZQUN4QyxlQUFlLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUM7UUFDaEUsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFFRDs7OztPQUlHOzs7Ozs7OztJQUNILDZCQUFVOzs7Ozs7O0lBQVYsVUFBVyxNQUFZLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRWpFOzs7O09BSUc7Ozs7Ozs7SUFDSCxnQ0FBYTs7Ozs7O0lBQWIsY0FBMkIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQzs7Z0JBaEN0RSxVQUFVLFNBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDOzs7O2dCQVpGLHdCQUF3QjtnQkFBbEMsUUFBUTtnQkFJcEIsYUFBYTtnQkFGSSxjQUFjOzs7bUJBRnZDO0NBNkNDLEFBakNELElBaUNDO1NBaENZLFFBQVE7Ozs7OztJQUVmLDhCQUE0Qzs7Ozs7SUFBRSw2QkFBMkI7Ozs7O0lBQUUsK0JBQWtDOzs7OztJQUM3RywyQkFBK0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIEluamVjdG9yLCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge05nYk1vZGFsT3B0aW9ucywgTmdiTW9kYWxDb25maWd9IGZyb20gJy4vbW9kYWwtY29uZmlnJztcbmltcG9ydCB7TmdiTW9kYWxSZWZ9IGZyb20gJy4vbW9kYWwtcmVmJztcbmltcG9ydCB7TmdiTW9kYWxTdGFja30gZnJvbSAnLi9tb2RhbC1zdGFjayc7XG5cbi8qKlxuICogQSBzZXJ2aWNlIGZvciBvcGVuaW5nIG1vZGFsIHdpbmRvd3MuXG4gKlxuICogQ3JlYXRpbmcgYSBtb2RhbCBpcyBzdHJhaWdodGZvcndhcmQ6IGNyZWF0ZSBhIGNvbXBvbmVudCBvciBhIHRlbXBsYXRlIGFuZCBwYXNzIGl0IGFzIGFuIGFyZ3VtZW50IHRvXG4gKiB0aGUgYC5vcGVuKClgIG1ldGhvZC5cbiAqL1xuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgTmdiTW9kYWwge1xuICBjb25zdHJ1Y3RvcihcbiAgICAgIHByaXZhdGUgX21vZHVsZUNGUjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IsIHByaXZhdGUgX21vZGFsU3RhY2s6IE5nYk1vZGFsU3RhY2ssXG4gICAgICBwcml2YXRlIF9jb25maWc6IE5nYk1vZGFsQ29uZmlnKSB7fVxuXG4gIC8qKlxuICAgKiBPcGVucyBhIG5ldyBtb2RhbCB3aW5kb3cgd2l0aCB0aGUgc3BlY2lmaWVkIGNvbnRlbnQgYW5kIHN1cHBsaWVkIG9wdGlvbnMuXG4gICAqXG4gICAqIENvbnRlbnQgY2FuIGJlIHByb3ZpZGVkIGFzIGEgYFRlbXBsYXRlUmVmYCBvciBhIGNvbXBvbmVudCB0eXBlLiBJZiB5b3UgcGFzcyBhIGNvbXBvbmVudCB0eXBlIGFzIGNvbnRlbnQsXG4gICAqIHRoZW4gaW5zdGFuY2VzIG9mIHRob3NlIGNvbXBvbmVudHMgY2FuIGJlIGluamVjdGVkIHdpdGggYW4gaW5zdGFuY2Ugb2YgdGhlIGBOZ2JBY3RpdmVNb2RhbGAgY2xhc3MuIFlvdSBjYW4gdGhlblxuICAgKiB1c2UgYE5nYkFjdGl2ZU1vZGFsYCBtZXRob2RzIHRvIGNsb3NlIC8gZGlzbWlzcyBtb2RhbHMgZnJvbSBcImluc2lkZVwiIG9mIHlvdXIgY29tcG9uZW50LlxuICAgKlxuICAgKiBBbHNvIHNlZSB0aGUgW2BOZ2JNb2RhbE9wdGlvbnNgXSgjL2NvbXBvbmVudHMvbW9kYWwvYXBpI05nYk1vZGFsT3B0aW9ucykgZm9yIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBvcHRpb25zLlxuICAgKi9cbiAgb3Blbihjb250ZW50OiBhbnksIG9wdGlvbnM6IE5nYk1vZGFsT3B0aW9ucyA9IHt9KTogTmdiTW9kYWxSZWYge1xuICAgIGNvbnN0IGNvbWJpbmVkT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX2NvbmZpZywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMuX21vZGFsU3RhY2sub3Blbih0aGlzLl9tb2R1bGVDRlIsIHRoaXMuX2luamVjdG9yLCBjb250ZW50LCBjb21iaW5lZE9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc21pc3NlcyBhbGwgY3VycmVudGx5IGRpc3BsYXllZCBtb2RhbCB3aW5kb3dzIHdpdGggdGhlIHN1cHBsaWVkIHJlYXNvbi5cbiAgICpcbiAgICogQHNpbmNlIDMuMS4wXG4gICAqL1xuICBkaXNtaXNzQWxsKHJlYXNvbj86IGFueSkgeyB0aGlzLl9tb2RhbFN0YWNrLmRpc21pc3NBbGwocmVhc29uKTsgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlcmUgYXJlIGN1cnJlbnRseSBhbnkgb3BlbiBtb2RhbCB3aW5kb3dzIGluIHRoZSBhcHBsaWNhdGlvbi5cbiAgICpcbiAgICogQHNpbmNlIDMuMy4wXG4gICAqL1xuICBoYXNPcGVuTW9kYWxzKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fbW9kYWxTdGFjay5oYXNPcGVuTW9kYWxzKCk7IH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/modal/modal.module.js b/dist/sunbird-ui-components/esm5/modal/modal.module.js new file mode 100644 index 0000000..19c6a20 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/modal/modal.module.js @@ -0,0 +1,26 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgModule } from '@angular/core'; +import { NgbModal } from './modal'; +import { NgbModalBackdrop } from './modal-backdrop'; +import { NgbModalWindow } from './modal-window'; +export { NgbModal } from './modal'; +export { NgbModalConfig } from './modal-config'; +export { NgbModalRef, NgbActiveModal } from './modal-ref'; +export { ModalDismissReasons } from './modal-dismiss-reasons'; +var NgbModalModule = /** @class */ (function () { + function NgbModalModule() { + } + NgbModalModule.decorators = [ + { type: NgModule, args: [{ + declarations: [NgbModalBackdrop, NgbModalWindow], + entryComponents: [NgbModalBackdrop, NgbModalWindow], + providers: [NgbModal] + },] } + ]; + return NgbModalModule; +}()); +export { NgbModalModule }; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwubW9kdWxlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsibW9kYWwvbW9kYWwubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXZDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDakMsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTlDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDakMsT0FBTyxFQUFDLGNBQWMsRUFBa0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRCxPQUFPLEVBQUMsV0FBVyxFQUFFLGNBQWMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUN4RCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUU1RDtJQUFBO0lBTUEsQ0FBQzs7Z0JBTkEsUUFBUSxTQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLGdCQUFnQixFQUFFLGNBQWMsQ0FBQztvQkFDaEQsZUFBZSxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsY0FBYyxDQUFDO29CQUNuRCxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUM7aUJBQ3RCOztJQUVELHFCQUFDO0NBQUEsQUFORCxJQU1DO1NBRFksY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge05nYk1vZGFsfSBmcm9tICcuL21vZGFsJztcbmltcG9ydCB7TmdiTW9kYWxCYWNrZHJvcH0gZnJvbSAnLi9tb2RhbC1iYWNrZHJvcCc7XG5pbXBvcnQge05nYk1vZGFsV2luZG93fSBmcm9tICcuL21vZGFsLXdpbmRvdyc7XG5cbmV4cG9ydCB7TmdiTW9kYWx9IGZyb20gJy4vbW9kYWwnO1xuZXhwb3J0IHtOZ2JNb2RhbENvbmZpZywgTmdiTW9kYWxPcHRpb25zfSBmcm9tICcuL21vZGFsLWNvbmZpZyc7XG5leHBvcnQge05nYk1vZGFsUmVmLCBOZ2JBY3RpdmVNb2RhbH0gZnJvbSAnLi9tb2RhbC1yZWYnO1xuZXhwb3J0IHtNb2RhbERpc21pc3NSZWFzb25zfSBmcm9tICcuL21vZGFsLWRpc21pc3MtcmVhc29ucyc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW05nYk1vZGFsQmFja2Ryb3AsIE5nYk1vZGFsV2luZG93XSxcbiAgZW50cnlDb21wb25lbnRzOiBbTmdiTW9kYWxCYWNrZHJvcCwgTmdiTW9kYWxXaW5kb3ddLFxuICBwcm92aWRlcnM6IFtOZ2JNb2RhbF1cbn0pXG5leHBvcnQgY2xhc3MgTmdiTW9kYWxNb2R1bGUge1xufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/pagination/pagination-config.js b/dist/sunbird-ui-components/esm5/pagination/pagination-config.js new file mode 100644 index 0000000..97b83f6 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/pagination/pagination-config.js @@ -0,0 +1,48 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Injectable } from '@angular/core'; +import * as i0 from "@angular/core"; +/** + * A configuration service for the [`NgbPagination`](#/components/pagination/api#NgbPagination) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the paginations used in the application. + */ +var NgbPaginationConfig = /** @class */ (function () { + function NgbPaginationConfig() { + this.disabled = false; + this.boundaryLinks = false; + this.directionLinks = true; + this.ellipses = true; + this.maxSize = 0; + this.pageSize = 10; + this.rotate = false; + } + NgbPaginationConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ NgbPaginationConfig.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function NgbPaginationConfig_Factory() { return new NgbPaginationConfig(); }, token: NgbPaginationConfig, providedIn: "root" }); + return NgbPaginationConfig; +}()); +export { NgbPaginationConfig }; +if (false) { + /** @type {?} */ + NgbPaginationConfig.prototype.disabled; + /** @type {?} */ + NgbPaginationConfig.prototype.boundaryLinks; + /** @type {?} */ + NgbPaginationConfig.prototype.directionLinks; + /** @type {?} */ + NgbPaginationConfig.prototype.ellipses; + /** @type {?} */ + NgbPaginationConfig.prototype.maxSize; + /** @type {?} */ + NgbPaginationConfig.prototype.pageSize; + /** @type {?} */ + NgbPaginationConfig.prototype.rotate; + /** @type {?} */ + NgbPaginationConfig.prototype.size; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi1jb25maWcuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJwYWdpbmF0aW9uL3BhZ2luYXRpb24tY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQVF6QztJQUFBO1FBRUUsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUN0QixtQkFBYyxHQUFHLElBQUksQ0FBQztRQUN0QixhQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLFlBQU8sR0FBRyxDQUFDLENBQUM7UUFDWixhQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2QsV0FBTSxHQUFHLEtBQUssQ0FBQztLQUVoQjs7Z0JBVkEsVUFBVSxTQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQzs7OzhCQVJoQztDQWtCQyxBQVZELElBVUM7U0FUWSxtQkFBbUI7OztJQUM5Qix1Q0FBaUI7O0lBQ2pCLDRDQUFzQjs7SUFDdEIsNkNBQXNCOztJQUN0Qix1Q0FBZ0I7O0lBQ2hCLHNDQUFZOztJQUNaLHVDQUFjOztJQUNkLHFDQUFlOztJQUNmLG1DQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogQSBjb25maWd1cmF0aW9uIHNlcnZpY2UgZm9yIHRoZSBbYE5nYlBhZ2luYXRpb25gXSgjL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9hcGkjTmdiUGFnaW5hdGlvbikgY29tcG9uZW50LlxuICpcbiAqIFlvdSBjYW4gaW5qZWN0IHRoaXMgc2VydmljZSwgdHlwaWNhbGx5IGluIHlvdXIgcm9vdCBjb21wb25lbnQsIGFuZCBjdXN0b21pemUgdGhlIHZhbHVlcyBvZiBpdHMgcHJvcGVydGllcyBpblxuICogb3JkZXIgdG8gcHJvdmlkZSBkZWZhdWx0IHZhbHVlcyBmb3IgYWxsIHRoZSBwYWdpbmF0aW9ucyB1c2VkIGluIHRoZSBhcHBsaWNhdGlvbi5cbiAqL1xuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgTmdiUGFnaW5hdGlvbkNvbmZpZyB7XG4gIGRpc2FibGVkID0gZmFsc2U7XG4gIGJvdW5kYXJ5TGlua3MgPSBmYWxzZTtcbiAgZGlyZWN0aW9uTGlua3MgPSB0cnVlO1xuICBlbGxpcHNlcyA9IHRydWU7XG4gIG1heFNpemUgPSAwO1xuICBwYWdlU2l6ZSA9IDEwO1xuICByb3RhdGUgPSBmYWxzZTtcbiAgc2l6ZTogJ3NtJyB8ICdsZyc7XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/pagination/pagination.js b/dist/sunbird-ui-components/esm5/pagination/pagination.js new file mode 100644 index 0000000..0845a7d --- /dev/null +++ b/dist/sunbird-ui-components/esm5/pagination/pagination.js @@ -0,0 +1,561 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import * as tslib_1 from "tslib"; +import { Component, ContentChild, Directive, EventEmitter, Input, Output, ChangeDetectionStrategy, TemplateRef } from '@angular/core'; +import { getValueInRange, isNumber } from '../util/util'; +import { NgbPaginationConfig } from './pagination-config'; +/** + * A context for the + * * `NgbPaginationFirst` + * * `NgbPaginationPrevious` + * * `NgbPaginationNext` + * * `NgbPaginationLast` + * * `NgbPaginationEllipsis` + * + * link templates in case you want to override one. + * + * \@since 4.1.0 + * @record + */ +export function NgbPaginationLinkContext() { } +if (false) { + /** + * The currently selected page number + * @type {?} + */ + NgbPaginationLinkContext.prototype.currentPage; + /** + * If `true`, the current link is disabled + * @type {?} + */ + NgbPaginationLinkContext.prototype.disabled; +} +/** + * A context for the `NgbPaginationNumber` link template in case you want to override one. + * + * Extends `NgbPaginationLinkContext`. + * + * \@since 4.1.0 + * @record + */ +export function NgbPaginationNumberContext() { } +if (false) { + /** + * The page number, displayed by the current page link. + * @type {?} + */ + NgbPaginationNumberContext.prototype.$implicit; +} +/** + * A directive to match the 'ellipsis' link template + * + * \@since 4.1.0 + */ +var NgbPaginationEllipsis = /** @class */ (function () { + function NgbPaginationEllipsis(templateRef) { + this.templateRef = templateRef; + } + NgbPaginationEllipsis.decorators = [ + { type: Directive, args: [{ selector: 'ng-template[ngbPaginationEllipsis]' },] } + ]; + /** @nocollapse */ + NgbPaginationEllipsis.ctorParameters = function () { return [ + { type: TemplateRef } + ]; }; + return NgbPaginationEllipsis; +}()); +export { NgbPaginationEllipsis }; +if (false) { + /** @type {?} */ + NgbPaginationEllipsis.prototype.templateRef; +} +/** + * A directive to match the 'first' link template + * + * \@since 4.1.0 + */ +var NgbPaginationFirst = /** @class */ (function () { + function NgbPaginationFirst(templateRef) { + this.templateRef = templateRef; + } + NgbPaginationFirst.decorators = [ + { type: Directive, args: [{ selector: 'ng-template[ngbPaginationFirst]' },] } + ]; + /** @nocollapse */ + NgbPaginationFirst.ctorParameters = function () { return [ + { type: TemplateRef } + ]; }; + return NgbPaginationFirst; +}()); +export { NgbPaginationFirst }; +if (false) { + /** @type {?} */ + NgbPaginationFirst.prototype.templateRef; +} +/** + * A directive to match the 'last' link template + * + * \@since 4.1.0 + */ +var NgbPaginationLast = /** @class */ (function () { + function NgbPaginationLast(templateRef) { + this.templateRef = templateRef; + } + NgbPaginationLast.decorators = [ + { type: Directive, args: [{ selector: 'ng-template[ngbPaginationLast]' },] } + ]; + /** @nocollapse */ + NgbPaginationLast.ctorParameters = function () { return [ + { type: TemplateRef } + ]; }; + return NgbPaginationLast; +}()); +export { NgbPaginationLast }; +if (false) { + /** @type {?} */ + NgbPaginationLast.prototype.templateRef; +} +/** + * A directive to match the 'next' link template + * + * \@since 4.1.0 + */ +var NgbPaginationNext = /** @class */ (function () { + function NgbPaginationNext(templateRef) { + this.templateRef = templateRef; + } + NgbPaginationNext.decorators = [ + { type: Directive, args: [{ selector: 'ng-template[ngbPaginationNext]' },] } + ]; + /** @nocollapse */ + NgbPaginationNext.ctorParameters = function () { return [ + { type: TemplateRef } + ]; }; + return NgbPaginationNext; +}()); +export { NgbPaginationNext }; +if (false) { + /** @type {?} */ + NgbPaginationNext.prototype.templateRef; +} +/** + * A directive to match the page 'number' link template + * + * \@since 4.1.0 + */ +var NgbPaginationNumber = /** @class */ (function () { + function NgbPaginationNumber(templateRef) { + this.templateRef = templateRef; + } + NgbPaginationNumber.decorators = [ + { type: Directive, args: [{ selector: 'ng-template[ngbPaginationNumber]' },] } + ]; + /** @nocollapse */ + NgbPaginationNumber.ctorParameters = function () { return [ + { type: TemplateRef } + ]; }; + return NgbPaginationNumber; +}()); +export { NgbPaginationNumber }; +if (false) { + /** @type {?} */ + NgbPaginationNumber.prototype.templateRef; +} +/** + * A directive to match the 'previous' link template + * + * \@since 4.1.0 + */ +var NgbPaginationPrevious = /** @class */ (function () { + function NgbPaginationPrevious(templateRef) { + this.templateRef = templateRef; + } + NgbPaginationPrevious.decorators = [ + { type: Directive, args: [{ selector: 'ng-template[ngbPaginationPrevious]' },] } + ]; + /** @nocollapse */ + NgbPaginationPrevious.ctorParameters = function () { return [ + { type: TemplateRef } + ]; }; + return NgbPaginationPrevious; +}()); +export { NgbPaginationPrevious }; +if (false) { + /** @type {?} */ + NgbPaginationPrevious.prototype.templateRef; +} +/** + * A component that displays page numbers and allows to customize them in several ways. + */ +var NgbPagination = /** @class */ (function () { + function NgbPagination(config) { + this.pageCount = 0; + this.pages = []; + /** + * The current page. + * + * Page numbers start with `1`. + */ + this.page = 1; + /** + * An event fired when the page is changed. Will fire only if collection size is set and all values are valid. + * + * Event payload is the number of the newly selected page. + * + * Page numbers start with `1`. + */ + this.pageChange = new EventEmitter(true); + this.disabled = config.disabled; + this.boundaryLinks = config.boundaryLinks; + this.directionLinks = config.directionLinks; + this.ellipses = config.ellipses; + this.maxSize = config.maxSize; + this.pageSize = config.pageSize; + this.rotate = config.rotate; + this.size = config.size; + } + /** + * @return {?} + */ + NgbPagination.prototype.hasPrevious = /** + * @return {?} + */ + function () { return this.page > 1; }; + /** + * @return {?} + */ + NgbPagination.prototype.hasNext = /** + * @return {?} + */ + function () { return this.page < this.pageCount; }; + /** + * @return {?} + */ + NgbPagination.prototype.nextDisabled = /** + * @return {?} + */ + function () { return !this.hasNext() || this.disabled; }; + /** + * @return {?} + */ + NgbPagination.prototype.previousDisabled = /** + * @return {?} + */ + function () { return !this.hasPrevious() || this.disabled; }; + /** + * @param {?} pageNumber + * @return {?} + */ + NgbPagination.prototype.selectPage = /** + * @param {?} pageNumber + * @return {?} + */ + function (pageNumber) { this._updatePages(pageNumber); }; + /** + * @param {?} changes + * @return {?} + */ + NgbPagination.prototype.ngOnChanges = /** + * @param {?} changes + * @return {?} + */ + function (changes) { this._updatePages(this.page); }; + /** + * @param {?} pageNumber + * @return {?} + */ + NgbPagination.prototype.isEllipsis = /** + * @param {?} pageNumber + * @return {?} + */ + function (pageNumber) { return pageNumber === -1; }; + /** + * Appends ellipses and first/last page number to the displayed pages + */ + /** + * Appends ellipses and first/last page number to the displayed pages + * @private + * @param {?} start + * @param {?} end + * @return {?} + */ + NgbPagination.prototype._applyEllipses = /** + * Appends ellipses and first/last page number to the displayed pages + * @private + * @param {?} start + * @param {?} end + * @return {?} + */ + function (start, end) { + if (this.ellipses) { + if (start > 0) { + if (start > 1) { + this.pages.unshift(-1); + } + this.pages.unshift(1); + } + if (end < this.pageCount) { + if (end < (this.pageCount - 1)) { + this.pages.push(-1); + } + this.pages.push(this.pageCount); + } + } + }; + /** + * Rotates page numbers based on maxSize items visible. + * Currently selected page stays in the middle: + * + * Ex. for selected page = 6: + * [5,*6*,7] for maxSize = 3 + * [4,5,*6*,7] for maxSize = 4 + */ + /** + * Rotates page numbers based on maxSize items visible. + * Currently selected page stays in the middle: + * + * Ex. for selected page = 6: + * [5,*6*,7] for maxSize = 3 + * [4,5,*6*,7] for maxSize = 4 + * @private + * @return {?} + */ + NgbPagination.prototype._applyRotation = /** + * Rotates page numbers based on maxSize items visible. + * Currently selected page stays in the middle: + * + * Ex. for selected page = 6: + * [5,*6*,7] for maxSize = 3 + * [4,5,*6*,7] for maxSize = 4 + * @private + * @return {?} + */ + function () { + /** @type {?} */ + var start = 0; + /** @type {?} */ + var end = this.pageCount; + /** @type {?} */ + var leftOffset = Math.floor(this.maxSize / 2); + /** @type {?} */ + var rightOffset = this.maxSize % 2 === 0 ? leftOffset - 1 : leftOffset; + if (this.page <= leftOffset) { + // very beginning, no rotation -> [0..maxSize] + end = this.maxSize; + } + else if (this.pageCount - this.page < leftOffset) { + // very end, no rotation -> [len-maxSize..len] + start = this.pageCount - this.maxSize; + } + else { + // rotate + start = this.page - leftOffset - 1; + end = this.page + rightOffset; + } + return [start, end]; + }; + /** + * Paginates page numbers based on maxSize items per page. + */ + /** + * Paginates page numbers based on maxSize items per page. + * @private + * @return {?} + */ + NgbPagination.prototype._applyPagination = /** + * Paginates page numbers based on maxSize items per page. + * @private + * @return {?} + */ + function () { + /** @type {?} */ + var page = Math.ceil(this.page / this.maxSize) - 1; + /** @type {?} */ + var start = page * this.maxSize; + /** @type {?} */ + var end = start + this.maxSize; + return [start, end]; + }; + /** + * @private + * @param {?} newPageNo + * @return {?} + */ + NgbPagination.prototype._setPageInRange = /** + * @private + * @param {?} newPageNo + * @return {?} + */ + function (newPageNo) { + /** @type {?} */ + var prevPageNo = this.page; + this.page = getValueInRange(newPageNo, this.pageCount, 1); + if (this.page !== prevPageNo && isNumber(this.collectionSize)) { + this.pageChange.emit(this.page); + } + }; + /** + * @private + * @param {?} newPage + * @return {?} + */ + NgbPagination.prototype._updatePages = /** + * @private + * @param {?} newPage + * @return {?} + */ + function (newPage) { + var _a, _b; + this.pageCount = Math.ceil(this.collectionSize / this.pageSize); + if (!isNumber(this.pageCount)) { + this.pageCount = 0; + } + // fill-in model needed to render pages + this.pages.length = 0; + for (var i = 1; i <= this.pageCount; i++) { + this.pages.push(i); + } + // set page within 1..max range + this._setPageInRange(newPage); + // apply maxSize if necessary + if (this.maxSize > 0 && this.pageCount > this.maxSize) { + /** @type {?} */ + var start = 0; + /** @type {?} */ + var end = this.pageCount; + // either paginating or rotating page numbers + if (this.rotate) { + _a = tslib_1.__read(this._applyRotation(), 2), start = _a[0], end = _a[1]; + } + else { + _b = tslib_1.__read(this._applyPagination(), 2), start = _b[0], end = _b[1]; + } + this.pages = this.pages.slice(start, end); + // adding ellipses + this._applyEllipses(start, end); + } + }; + NgbPagination.decorators = [ + { type: Component, args: [{ + selector: 'ngb-pagination', + changeDetection: ChangeDetectionStrategy.OnPush, + host: { 'role': 'navigation' }, + template: "\n ««\n «\n »\n »»\n ...\n \n {{ page }}\n (current)\n \n \n " + }] } + ]; + /** @nocollapse */ + NgbPagination.ctorParameters = function () { return [ + { type: NgbPaginationConfig } + ]; }; + NgbPagination.propDecorators = { + tplEllipsis: [{ type: ContentChild, args: [NgbPaginationEllipsis, { static: false },] }], + tplFirst: [{ type: ContentChild, args: [NgbPaginationFirst, { static: false },] }], + tplLast: [{ type: ContentChild, args: [NgbPaginationLast, { static: false },] }], + tplNext: [{ type: ContentChild, args: [NgbPaginationNext, { static: false },] }], + tplNumber: [{ type: ContentChild, args: [NgbPaginationNumber, { static: false },] }], + tplPrevious: [{ type: ContentChild, args: [NgbPaginationPrevious, { static: false },] }], + disabled: [{ type: Input }], + boundaryLinks: [{ type: Input }], + directionLinks: [{ type: Input }], + ellipses: [{ type: Input }], + rotate: [{ type: Input }], + collectionSize: [{ type: Input }], + maxSize: [{ type: Input }], + page: [{ type: Input }], + pageSize: [{ type: Input }], + pageChange: [{ type: Output }], + size: [{ type: Input }] + }; + return NgbPagination; +}()); +export { NgbPagination }; +if (false) { + /** @type {?} */ + NgbPagination.prototype.pageCount; + /** @type {?} */ + NgbPagination.prototype.pages; + /** @type {?} */ + NgbPagination.prototype.tplEllipsis; + /** @type {?} */ + NgbPagination.prototype.tplFirst; + /** @type {?} */ + NgbPagination.prototype.tplLast; + /** @type {?} */ + NgbPagination.prototype.tplNext; + /** @type {?} */ + NgbPagination.prototype.tplNumber; + /** @type {?} */ + NgbPagination.prototype.tplPrevious; + /** + * If `true`, pagination links will be disabled. + * @type {?} + */ + NgbPagination.prototype.disabled; + /** + * If `true`, the "First" and "Last" page links are shown. + * @type {?} + */ + NgbPagination.prototype.boundaryLinks; + /** + * If `true`, the "Next" and "Previous" page links are shown. + * @type {?} + */ + NgbPagination.prototype.directionLinks; + /** + * If `true`, the ellipsis symbols and first/last page numbers will be shown when `maxSize` > number of pages. + * @type {?} + */ + NgbPagination.prototype.ellipses; + /** + * Whether to rotate pages when `maxSize` > number of pages. + * + * The current page always stays in the middle if `true`. + * @type {?} + */ + NgbPagination.prototype.rotate; + /** + * The number of items in your paginated collection. + * + * Note, that this is not the number of pages. Page numbers are calculated dynamically based on + * `collectionSize` and `pageSize`. Ex. if you have 100 items in your collection and displaying 20 items per page, + * you'll end up with 5 pages. + * @type {?} + */ + NgbPagination.prototype.collectionSize; + /** + * The maximum number of pages to display. + * @type {?} + */ + NgbPagination.prototype.maxSize; + /** + * The current page. + * + * Page numbers start with `1`. + * @type {?} + */ + NgbPagination.prototype.page; + /** + * The number of items per page. + * @type {?} + */ + NgbPagination.prototype.pageSize; + /** + * An event fired when the page is changed. Will fire only if collection size is set and all values are valid. + * + * Event payload is the number of the newly selected page. + * + * Page numbers start with `1`. + * @type {?} + */ + NgbPagination.prototype.pageChange; + /** + * The pagination display size. + * + * Bootstrap currently supports small and large sizes. + * @type {?} + */ + NgbPagination.prototype.size; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbInBhZ2luYXRpb24vcGFnaW5hdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFFTix1QkFBdUIsRUFFdkIsV0FBVyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxlQUFlLEVBQUUsUUFBUSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ3ZELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7Ozs7Ozs7OztBQWN4RCw4Q0FVQzs7Ozs7O0lBTkMsK0NBQW9COzs7OztJQUtwQiw0Q0FBa0I7Ozs7Ozs7Ozs7QUFVcEIsZ0RBS0M7Ozs7OztJQURDLCtDQUFrQjs7Ozs7OztBQVFwQjtJQUVFLCtCQUFtQixXQUFrRDtRQUFsRCxnQkFBVyxHQUFYLFdBQVcsQ0FBdUM7SUFBRyxDQUFDOztnQkFGMUUsU0FBUyxTQUFDLEVBQUMsUUFBUSxFQUFFLG9DQUFvQyxFQUFDOzs7O2dCQWhEekQsV0FBVzs7SUFtRGIsNEJBQUM7Q0FBQSxBQUhELElBR0M7U0FGWSxxQkFBcUI7OztJQUNwQiw0Q0FBeUQ7Ozs7Ozs7QUFRdkU7SUFFRSw0QkFBbUIsV0FBa0Q7UUFBbEQsZ0JBQVcsR0FBWCxXQUFXLENBQXVDO0lBQUcsQ0FBQzs7Z0JBRjFFLFNBQVMsU0FBQyxFQUFDLFFBQVEsRUFBRSxpQ0FBaUMsRUFBQzs7OztnQkExRHRELFdBQVc7O0lBNkRiLHlCQUFDO0NBQUEsQUFIRCxJQUdDO1NBRlksa0JBQWtCOzs7SUFDakIseUNBQXlEOzs7Ozs7O0FBUXZFO0lBRUUsMkJBQW1CLFdBQWtEO1FBQWxELGdCQUFXLEdBQVgsV0FBVyxDQUF1QztJQUFHLENBQUM7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LDZCQUFrQjs7Ozs7SUFLbEIsaUNBQTBCOzs7Ozs7Ozs7SUFTMUIsbUNBQXNEOzs7Ozs7O0lBT3RELDZCQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBEaXJlY3RpdmUsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgT25DaGFuZ2VzLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge2dldFZhbHVlSW5SYW5nZSwgaXNOdW1iZXJ9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQge05nYlBhZ2luYXRpb25Db25maWd9IGZyb20gJy4vcGFnaW5hdGlvbi1jb25maWcnO1xuXG4vKipcbiAqIEEgY29udGV4dCBmb3IgdGhlXG4gKiAqIGBOZ2JQYWdpbmF0aW9uRmlyc3RgXG4gKiAqIGBOZ2JQYWdpbmF0aW9uUHJldmlvdXNgXG4gKiAqIGBOZ2JQYWdpbmF0aW9uTmV4dGBcbiAqICogYE5nYlBhZ2luYXRpb25MYXN0YFxuICogKiBgTmdiUGFnaW5hdGlvbkVsbGlwc2lzYFxuICpcbiAqIGxpbmsgdGVtcGxhdGVzIGluIGNhc2UgeW91IHdhbnQgdG8gb3ZlcnJpZGUgb25lLlxuICpcbiAqIEBzaW5jZSA0LjEuMFxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5nYlBhZ2luYXRpb25MaW5rQ29udGV4dCB7XG4gIC8qKlxuICAgKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIHBhZ2UgbnVtYmVyXG4gICAqL1xuICBjdXJyZW50UGFnZTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjdXJyZW50IGxpbmsgaXMgZGlzYWJsZWRcbiAgICovXG4gIGRpc2FibGVkOiBib29sZWFuO1xufVxuXG4vKipcbiAqIEEgY29udGV4dCBmb3IgdGhlIGBOZ2JQYWdpbmF0aW9uTnVtYmVyYCBsaW5rIHRlbXBsYXRlIGluIGNhc2UgeW91IHdhbnQgdG8gb3ZlcnJpZGUgb25lLlxuICpcbiAqIEV4dGVuZHMgYE5nYlBhZ2luYXRpb25MaW5rQ29udGV4dGAuXG4gKlxuICogQHNpbmNlIDQuMS4wXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmdiUGFnaW5hdGlvbk51bWJlckNvbnRleHQgZXh0ZW5kcyBOZ2JQYWdpbmF0aW9uTGlua0NvbnRleHQge1xuICAvKipcbiAgICogVGhlIHBhZ2UgbnVtYmVyLCBkaXNwbGF5ZWQgYnkgdGhlIGN1cnJlbnQgcGFnZSBsaW5rLlxuICAgKi9cbiAgJGltcGxpY2l0OiBudW1iZXI7XG59XG5cbi8qKlxuICogQSBkaXJlY3RpdmUgdG8gbWF0Y2ggdGhlICdlbGxpcHNpcycgbGluayB0ZW1wbGF0ZVxuICpcbiAqIEBzaW5jZSA0LjEuMFxuICovXG5ARGlyZWN0aXZlKHtzZWxlY3RvcjogJ25nLXRlbXBsYXRlW25nYlBhZ2luYXRpb25FbGxpcHNpc10nfSlcbmV4cG9ydCBjbGFzcyBOZ2JQYWdpbmF0aW9uRWxsaXBzaXMge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPE5nYlBhZ2luYXRpb25MaW5rQ29udGV4dD4pIHt9XG59XG5cbi8qKlxuICogQSBkaXJlY3RpdmUgdG8gbWF0Y2ggdGhlICdmaXJzdCcgbGluayB0ZW1wbGF0ZVxuICpcbiAqIEBzaW5jZSA0LjEuMFxuICovXG5ARGlyZWN0aXZlKHtzZWxlY3RvcjogJ25nLXRlbXBsYXRlW25nYlBhZ2luYXRpb25GaXJzdF0nfSlcbmV4cG9ydCBjbGFzcyBOZ2JQYWdpbmF0aW9uRmlyc3Qge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPE5nYlBhZ2luYXRpb25MaW5rQ29udGV4dD4pIHt9XG59XG5cbi8qKlxuICogQSBkaXJlY3RpdmUgdG8gbWF0Y2ggdGhlICdsYXN0JyBsaW5rIHRlbXBsYXRlXG4gKlxuICogQHNpbmNlIDQuMS4wXG4gKi9cbkBEaXJlY3RpdmUoe3NlbGVjdG9yOiAnbmctdGVtcGxhdGVbbmdiUGFnaW5hdGlvbkxhc3RdJ30pXG5leHBvcnQgY2xhc3MgTmdiUGFnaW5hdGlvbkxhc3Qge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPE5nYlBhZ2luYXRpb25MaW5rQ29udGV4dD4pIHt9XG59XG5cbi8qKlxuICogQSBkaXJlY3RpdmUgdG8gbWF0Y2ggdGhlICduZXh0JyBsaW5rIHRlbXBsYXRlXG4gKlxuICogQHNpbmNlIDQuMS4wXG4gKi9cbkBEaXJlY3RpdmUoe3NlbGVjdG9yOiAnbmctdGVtcGxhdGVbbmdiUGFnaW5hdGlvbk5leHRdJ30pXG5leHBvcnQgY2xhc3MgTmdiUGFnaW5hdGlvbk5leHQge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPE5nYlBhZ2luYXRpb25MaW5rQ29udGV4dD4pIHt9XG59XG5cbi8qKlxuICogQSBkaXJlY3RpdmUgdG8gbWF0Y2ggdGhlIHBhZ2UgJ251bWJlcicgbGluayB0ZW1wbGF0ZVxuICpcbiAqIEBzaW5jZSA0LjEuMFxuICovXG5ARGlyZWN0aXZlKHtzZWxlY3RvcjogJ25nLXRlbXBsYXRlW25nYlBhZ2luYXRpb25OdW1iZXJdJ30pXG5leHBvcnQgY2xhc3MgTmdiUGFnaW5hdGlvbk51bWJlciB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8TmdiUGFnaW5hdGlvbk51bWJlckNvbnRleHQ+KSB7fVxufVxuXG4vKipcbiAqIEEgZGlyZWN0aXZlIHRvIG1hdGNoIHRoZSAncHJldmlvdXMnIGxpbmsgdGVtcGxhdGVcbiAqXG4gKiBAc2luY2UgNC4xLjBcbiAqL1xuQERpcmVjdGl2ZSh7c2VsZWN0b3I6ICduZy10ZW1wbGF0ZVtuZ2JQYWdpbmF0aW9uUHJldmlvdXNdJ30pXG5leHBvcnQgY2xhc3MgTmdiUGFnaW5hdGlvblByZXZpb3VzIHtcbiAgY29uc3RydWN0b3IocHVibGljIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxOZ2JQYWdpbmF0aW9uTGlua0NvbnRleHQ+KSB7fVxufVxuXG4vKipcbiAqIEEgY29tcG9uZW50IHRoYXQgZGlzcGxheXMgcGFnZSBudW1iZXJzIGFuZCBhbGxvd3MgdG8gY3VzdG9taXplIHRoZW0gaW4gc2V2ZXJhbCB3YXlzLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ2ItcGFnaW5hdGlvbicsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7J3JvbGUnOiAnbmF2aWdhdGlvbid9LFxuICB0ZW1wbGF0ZTogYFxuICAgIDxuZy10ZW1wbGF0ZSAjZmlyc3Q+PHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCIgaTE4bj1cIkBAbmdiLnBhZ2luYXRpb24uZmlyc3RcIj4mbGFxdW87JmxhcXVvOzwvc3Bhbj48L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSAjcHJldmlvdXM+PHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCIgaTE4bj1cIkBAbmdiLnBhZ2luYXRpb24ucHJldmlvdXNcIj4mbGFxdW87PC9zcGFuPjwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNuZXh0PjxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGkxOG49XCJAQG5nYi5wYWdpbmF0aW9uLm5leHRcIj4mcmFxdW87PC9zcGFuPjwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNsYXN0PjxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGkxOG49XCJAQG5nYi5wYWdpbmF0aW9uLmxhc3RcIj4mcmFxdW87JnJhcXVvOzwvc3Bhbj48L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSAjZWxsaXBzaXM+Li4uPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHROdW1iZXIgbGV0LXBhZ2UgbGV0LWN1cnJlbnRQYWdlPVwiY3VycmVudFBhZ2VcIj5cbiAgICAgIHt7IHBhZ2UgfX1cbiAgICAgIDxzcGFuICpuZ0lmPVwicGFnZSA9PT0gY3VycmVudFBhZ2VcIiBjbGFzcz1cInNyLW9ubHlcIj4oY3VycmVudCk8L3NwYW4+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8dWwgW2NsYXNzXT1cIidwYWdpbmF0aW9uJyArIChzaXplID8gJyBwYWdpbmF0aW9uLScgKyBzaXplIDogJycpXCI+XG4gICAgICA8bGkgKm5nSWY9XCJib3VuZGFyeUxpbmtzXCIgY2xhc3M9XCJwYWdlLWl0ZW1cIlxuICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwicHJldmlvdXNEaXNhYmxlZCgpXCI+XG4gICAgICAgIDxhIGFyaWEtbGFiZWw9XCJGaXJzdFwiIGkxOG4tYXJpYS1sYWJlbD1cIkBAbmdiLnBhZ2luYXRpb24uZmlyc3QtYXJpYVwiIGNsYXNzPVwicGFnZS1saW5rXCIgaHJlZlxuICAgICAgICAgIChjbGljayk9XCJzZWxlY3RQYWdlKDEpOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiIFthdHRyLnRhYmluZGV4XT1cIihoYXNQcmV2aW91cygpID8gbnVsbCA6ICctMScpXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRwbEZpcnN0Py50ZW1wbGF0ZVJlZiB8fCBmaXJzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ZGlzYWJsZWQ6IHByZXZpb3VzRGlzYWJsZWQoKSwgY3VycmVudFBhZ2U6IHBhZ2V9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9hPlxuICAgICAgPC9saT5cblxuICAgICAgPGxpICpuZ0lmPVwiZGlyZWN0aW9uTGlua3NcIiBjbGFzcz1cInBhZ2UtaXRlbVwiXG4gICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJwcmV2aW91c0Rpc2FibGVkKClcIj5cbiAgICAgICAgPGEgYXJpYS1sYWJlbD1cIlByZXZpb3VzXCIgaTE4bi1hcmlhLWxhYmVsPVwiQEBuZ2IucGFnaW5hdGlvbi5wcmV2aW91cy1hcmlhXCIgY2xhc3M9XCJwYWdlLWxpbmtcIiBocmVmXG4gICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFBhZ2UocGFnZS0xKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIiBbYXR0ci50YWJpbmRleF09XCIoaGFzUHJldmlvdXMoKSA/IG51bGwgOiAnLTEnKVwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJ0cGxQcmV2aW91cz8udGVtcGxhdGVSZWYgfHwgcHJldmlvdXNcIlxuICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2Rpc2FibGVkOiBwcmV2aW91c0Rpc2FibGVkKCl9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9hPlxuICAgICAgPC9saT5cbiAgICAgIDxsaSAqbmdGb3I9XCJsZXQgcGFnZU51bWJlciBvZiBwYWdlc1wiIGNsYXNzPVwicGFnZS1pdGVtXCIgW2NsYXNzLmFjdGl2ZV09XCJwYWdlTnVtYmVyID09PSBwYWdlXCJcbiAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cImlzRWxsaXBzaXMocGFnZU51bWJlcikgfHwgZGlzYWJsZWRcIj5cbiAgICAgICAgPGEgKm5nSWY9XCJpc0VsbGlwc2lzKHBhZ2VOdW1iZXIpXCIgY2xhc3M9XCJwYWdlLWxpbmtcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwidHBsRWxsaXBzaXM/LnRlbXBsYXRlUmVmIHx8IGVsbGlwc2lzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntkaXNhYmxlZDogdHJ1ZSwgY3VycmVudFBhZ2U6IHBhZ2V9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9hPlxuICAgICAgICA8YSAqbmdJZj1cIiFpc0VsbGlwc2lzKHBhZ2VOdW1iZXIpXCIgY2xhc3M9XCJwYWdlLWxpbmtcIiBocmVmIChjbGljayk9XCJzZWxlY3RQYWdlKHBhZ2VOdW1iZXIpOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJ0cGxOdW1iZXI/LnRlbXBsYXRlUmVmIHx8IGRlZmF1bHROdW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2Rpc2FibGVkOiBkaXNhYmxlZCwgJGltcGxpY2l0OiBwYWdlTnVtYmVyLCBjdXJyZW50UGFnZTogcGFnZX1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2E+XG4gICAgICA8L2xpPlxuICAgICAgPGxpICpuZ0lmPVwiZGlyZWN0aW9uTGlua3NcIiBjbGFzcz1cInBhZ2UtaXRlbVwiIFtjbGFzcy5kaXNhYmxlZF09XCJuZXh0RGlzYWJsZWQoKVwiPlxuICAgICAgICA8YSBhcmlhLWxhYmVsPVwiTmV4dFwiIGkxOG4tYXJpYS1sYWJlbD1cIkBAbmdiLnBhZ2luYXRpb24ubmV4dC1hcmlhXCIgY2xhc3M9XCJwYWdlLWxpbmtcIiBocmVmXG4gICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFBhZ2UocGFnZSsxKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIiBbYXR0ci50YWJpbmRleF09XCIoaGFzTmV4dCgpID8gbnVsbCA6ICctMScpXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRwbE5leHQ/LnRlbXBsYXRlUmVmIHx8IG5leHRcIlxuICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2Rpc2FibGVkOiBuZXh0RGlzYWJsZWQoKSwgY3VycmVudFBhZ2U6IHBhZ2V9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9hPlxuICAgICAgPC9saT5cblxuICAgICAgPGxpICpuZ0lmPVwiYm91bmRhcnlMaW5rc1wiIGNsYXNzPVwicGFnZS1pdGVtXCIgW2NsYXNzLmRpc2FibGVkXT1cIm5leHREaXNhYmxlZCgpXCI+XG4gICAgICAgIDxhIGFyaWEtbGFiZWw9XCJMYXN0XCIgaTE4bi1hcmlhLWxhYmVsPVwiQEBuZ2IucGFnaW5hdGlvbi5sYXN0LWFyaWFcIiBjbGFzcz1cInBhZ2UtbGlua1wiIGhyZWZcbiAgICAgICAgICAoY2xpY2spPVwic2VsZWN0UGFnZShwYWdlQ291bnQpOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiIFthdHRyLnRhYmluZGV4XT1cIihoYXNOZXh0KCkgPyBudWxsIDogJy0xJylcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwidHBsTGFzdD8udGVtcGxhdGVSZWYgfHwgbGFzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ZGlzYWJsZWQ6IG5leHREaXNhYmxlZCgpLCBjdXJyZW50UGFnZTogcGFnZX1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2E+XG4gICAgICA8L2xpPlxuICAgIDwvdWw+XG4gIGBcbn0pXG5leHBvcnQgY2xhc3MgTmdiUGFnaW5hdGlvbiBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIHBhZ2VDb3VudCA9IDA7XG4gIHBhZ2VzOiBudW1iZXJbXSA9IFtdO1xuXG4gIEBDb250ZW50Q2hpbGQoTmdiUGFnaW5hdGlvbkVsbGlwc2lzLCB7c3RhdGljOiBmYWxzZX0pIHRwbEVsbGlwc2lzOiBOZ2JQYWdpbmF0aW9uRWxsaXBzaXM7XG4gIEBDb250ZW50Q2hpbGQoTmdiUGFnaW5hdGlvbkZpcnN0LCB7c3RhdGljOiBmYWxzZX0pIHRwbEZpcnN0OiBOZ2JQYWdpbmF0aW9uRmlyc3Q7XG4gIEBDb250ZW50Q2hpbGQoTmdiUGFnaW5hdGlvbkxhc3QsIHtzdGF0aWM6IGZhbHNlfSkgdHBsTGFzdDogTmdiUGFnaW5hdGlvbkxhc3Q7XG4gIEBDb250ZW50Q2hpbGQoTmdiUGFnaW5hdGlvbk5leHQsIHtzdGF0aWM6IGZhbHNlfSkgdHBsTmV4dDogTmdiUGFnaW5hdGlvbk5leHQ7XG4gIEBDb250ZW50Q2hpbGQoTmdiUGFnaW5hdGlvbk51bWJlciwge3N0YXRpYzogZmFsc2V9KSB0cGxOdW1iZXI6IE5nYlBhZ2luYXRpb25OdW1iZXI7XG4gIEBDb250ZW50Q2hpbGQoTmdiUGFnaW5hdGlvblByZXZpb3VzLCB7c3RhdGljOiBmYWxzZX0pIHRwbFByZXZpb3VzOiBOZ2JQYWdpbmF0aW9uUHJldmlvdXM7XG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgcGFnaW5hdGlvbiBsaW5rcyB3aWxsIGJlIGRpc2FibGVkLlxuICAgKi9cbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIFwiRmlyc3RcIiBhbmQgXCJMYXN0XCIgcGFnZSBsaW5rcyBhcmUgc2hvd24uXG4gICAqL1xuICBASW5wdXQoKSBib3VuZGFyeUxpbmtzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBcIk5leHRcIiBhbmQgXCJQcmV2aW91c1wiIHBhZ2UgbGlua3MgYXJlIHNob3duLlxuICAgKi9cbiAgQElucHV0KCkgZGlyZWN0aW9uTGlua3M6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGVsbGlwc2lzIHN5bWJvbHMgYW5kIGZpcnN0L2xhc3QgcGFnZSBudW1iZXJzIHdpbGwgYmUgc2hvd24gd2hlbiBgbWF4U2l6ZWAgPiBudW1iZXIgb2YgcGFnZXMuXG4gICAqL1xuICBASW5wdXQoKSBlbGxpcHNlczogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byByb3RhdGUgcGFnZXMgd2hlbiBgbWF4U2l6ZWAgPiBudW1iZXIgb2YgcGFnZXMuXG4gICAqXG4gICAqIFRoZSBjdXJyZW50IHBhZ2UgYWx3YXlzIHN0YXlzIGluIHRoZSBtaWRkbGUgaWYgYHRydWVgLlxuICAgKi9cbiAgQElucHV0KCkgcm90YXRlOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiAgVGhlIG51bWJlciBvZiBpdGVtcyBpbiB5b3VyIHBhZ2luYXRlZCBjb2xsZWN0aW9uLlxuICAgKlxuICAgKiAgTm90ZSwgdGhhdCB0aGlzIGlzIG5vdCB0aGUgbnVtYmVyIG9mIHBhZ2VzLiBQYWdlIG51bWJlcnMgYXJlIGNhbGN1bGF0ZWQgZHluYW1pY2FsbHkgYmFzZWQgb25cbiAgICogIGBjb2xsZWN0aW9uU2l6ZWAgYW5kIGBwYWdlU2l6ZWAuIEV4LiBpZiB5b3UgaGF2ZSAxMDAgaXRlbXMgaW4geW91ciBjb2xsZWN0aW9uIGFuZCBkaXNwbGF5aW5nIDIwIGl0ZW1zIHBlciBwYWdlLFxuICAgKiAgeW91J2xsIGVuZCB1cCB3aXRoIDUgcGFnZXMuXG4gICAqL1xuICBASW5wdXQoKSBjb2xsZWN0aW9uU2l6ZTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiAgVGhlIG1heGltdW0gbnVtYmVyIG9mIHBhZ2VzIHRvIGRpc3BsYXkuXG4gICAqL1xuICBASW5wdXQoKSBtYXhTaXplOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqICBUaGUgY3VycmVudCBwYWdlLlxuICAgKlxuICAgKiAgUGFnZSBudW1iZXJzIHN0YXJ0IHdpdGggYDFgLlxuICAgKi9cbiAgQElucHV0KCkgcGFnZSA9IDE7XG5cbiAgLyoqXG4gICAqICBUaGUgbnVtYmVyIG9mIGl0ZW1zIHBlciBwYWdlLlxuICAgKi9cbiAgQElucHV0KCkgcGFnZVNpemU6IG51bWJlcjtcblxuICAvKipcbiAgICogIEFuIGV2ZW50IGZpcmVkIHdoZW4gdGhlIHBhZ2UgaXMgY2hhbmdlZC4gV2lsbCBmaXJlIG9ubHkgaWYgY29sbGVjdGlvbiBzaXplIGlzIHNldCBhbmQgYWxsIHZhbHVlcyBhcmUgdmFsaWQuXG4gICAqXG4gICAqICBFdmVudCBwYXlsb2FkIGlzIHRoZSBudW1iZXIgb2YgdGhlIG5ld2x5IHNlbGVjdGVkIHBhZ2UuXG4gICAqXG4gICAqICBQYWdlIG51bWJlcnMgc3RhcnQgd2l0aCBgMWAuXG4gICAqL1xuICBAT3V0cHV0KCkgcGFnZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPih0cnVlKTtcblxuICAvKipcbiAgICogVGhlIHBhZ2luYXRpb24gZGlzcGxheSBzaXplLlxuICAgKlxuICAgKiBCb290c3RyYXAgY3VycmVudGx5IHN1cHBvcnRzIHNtYWxsIGFuZCBsYXJnZSBzaXplcy5cbiAgICovXG4gIEBJbnB1dCgpIHNpemU6ICdzbScgfCAnbGcnO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogTmdiUGFnaW5hdGlvbkNvbmZpZykge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBjb25maWcuZGlzYWJsZWQ7XG4gICAgdGhpcy5ib3VuZGFyeUxpbmtzID0gY29uZmlnLmJvdW5kYXJ5TGlua3M7XG4gICAgdGhpcy5kaXJlY3Rpb25MaW5rcyA9IGNvbmZpZy5kaXJlY3Rpb25MaW5rcztcbiAgICB0aGlzLmVsbGlwc2VzID0gY29uZmlnLmVsbGlwc2VzO1xuICAgIHRoaXMubWF4U2l6ZSA9IGNvbmZpZy5tYXhTaXplO1xuICAgIHRoaXMucGFnZVNpemUgPSBjb25maWcucGFnZVNpemU7XG4gICAgdGhpcy5yb3RhdGUgPSBjb25maWcucm90YXRlO1xuICAgIHRoaXMuc2l6ZSA9IGNvbmZpZy5zaXplO1xuICB9XG5cbiAgaGFzUHJldmlvdXMoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLnBhZ2UgPiAxOyB9XG5cbiAgaGFzTmV4dCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMucGFnZSA8IHRoaXMucGFnZUNvdW50OyB9XG5cbiAgbmV4dERpc2FibGVkKCk6IGJvb2xlYW4geyByZXR1cm4gIXRoaXMuaGFzTmV4dCgpIHx8IHRoaXMuZGlzYWJsZWQ7IH1cblxuICBwcmV2aW91c0Rpc2FibGVkKCk6IGJvb2xlYW4geyByZXR1cm4gIXRoaXMuaGFzUHJldmlvdXMoKSB8fCB0aGlzLmRpc2FibGVkOyB9XG5cbiAgc2VsZWN0UGFnZShwYWdlTnVtYmVyOiBudW1iZXIpOiB2b2lkIHsgdGhpcy5fdXBkYXRlUGFnZXMocGFnZU51bWJlcik7IH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7IHRoaXMuX3VwZGF0ZVBhZ2VzKHRoaXMucGFnZSk7IH1cblxuICBpc0VsbGlwc2lzKHBhZ2VOdW1iZXIpOiBib29sZWFuIHsgcmV0dXJuIHBhZ2VOdW1iZXIgPT09IC0xOyB9XG5cbiAgLyoqXG4gICAqIEFwcGVuZHMgZWxsaXBzZXMgYW5kIGZpcnN0L2xhc3QgcGFnZSBudW1iZXIgdG8gdGhlIGRpc3BsYXllZCBwYWdlc1xuICAgKi9cbiAgcHJpdmF0ZSBfYXBwbHlFbGxpcHNlcyhzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmVsbGlwc2VzKSB7XG4gICAgICBpZiAoc3RhcnQgPiAwKSB7XG4gICAgICAgIGlmIChzdGFydCA+IDEpIHtcbiAgICAgICAgICB0aGlzLnBhZ2VzLnVuc2hpZnQoLTEpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGFnZXMudW5zaGlmdCgxKTtcbiAgICAgIH1cbiAgICAgIGlmIChlbmQgPCB0aGlzLnBhZ2VDb3VudCkge1xuICAgICAgICBpZiAoZW5kIDwgKHRoaXMucGFnZUNvdW50IC0gMSkpIHtcbiAgICAgICAgICB0aGlzLnBhZ2VzLnB1c2goLTEpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGFnZXMucHVzaCh0aGlzLnBhZ2VDb3VudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJvdGF0ZXMgcGFnZSBudW1iZXJzIGJhc2VkIG9uIG1heFNpemUgaXRlbXMgdmlzaWJsZS5cbiAgICogQ3VycmVudGx5IHNlbGVjdGVkIHBhZ2Ugc3RheXMgaW4gdGhlIG1pZGRsZTpcbiAgICpcbiAgICogRXguIGZvciBzZWxlY3RlZCBwYWdlID0gNjpcbiAgICogWzUsKjYqLDddIGZvciBtYXhTaXplID0gM1xuICAgKiBbNCw1LCo2Kiw3XSBmb3IgbWF4U2l6ZSA9IDRcbiAgICovXG4gIHByaXZhdGUgX2FwcGx5Um90YXRpb24oKTogW251bWJlciwgbnVtYmVyXSB7XG4gICAgbGV0IHN0YXJ0ID0gMDtcbiAgICBsZXQgZW5kID0gdGhpcy5wYWdlQ291bnQ7XG4gICAgbGV0IGxlZnRPZmZzZXQgPSBNYXRoLmZsb29yKHRoaXMubWF4U2l6ZSAvIDIpO1xuICAgIGxldCByaWdodE9mZnNldCA9IHRoaXMubWF4U2l6ZSAlIDIgPT09IDAgPyBsZWZ0T2Zmc2V0IC0gMSA6IGxlZnRPZmZzZXQ7XG5cbiAgICBpZiAodGhpcy5wYWdlIDw9IGxlZnRPZmZzZXQpIHtcbiAgICAgIC8vIHZlcnkgYmVnaW5uaW5nLCBubyByb3RhdGlvbiAtPiBbMC4ubWF4U2l6ZV1cbiAgICAgIGVuZCA9IHRoaXMubWF4U2l6ZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucGFnZUNvdW50IC0gdGhpcy5wYWdlIDwgbGVmdE9mZnNldCkge1xuICAgICAgLy8gdmVyeSBlbmQsIG5vIHJvdGF0aW9uIC0+IFtsZW4tbWF4U2l6ZS4ubGVuXVxuICAgICAgc3RhcnQgPSB0aGlzLnBhZ2VDb3VudCAtIHRoaXMubWF4U2l6ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gcm90YXRlXG4gICAgICBzdGFydCA9IHRoaXMucGFnZSAtIGxlZnRPZmZzZXQgLSAxO1xuICAgICAgZW5kID0gdGhpcy5wYWdlICsgcmlnaHRPZmZzZXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtzdGFydCwgZW5kXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYWdpbmF0ZXMgcGFnZSBudW1iZXJzIGJhc2VkIG9uIG1heFNpemUgaXRlbXMgcGVyIHBhZ2UuXG4gICAqL1xuICBwcml2YXRlIF9hcHBseVBhZ2luYXRpb24oKTogW251bWJlciwgbnVtYmVyXSB7XG4gICAgbGV0IHBhZ2UgPSBNYXRoLmNlaWwodGhpcy5wYWdlIC8gdGhpcy5tYXhTaXplKSAtIDE7XG4gICAgbGV0IHN0YXJ0ID0gcGFnZSAqIHRoaXMubWF4U2l6ZTtcbiAgICBsZXQgZW5kID0gc3RhcnQgKyB0aGlzLm1heFNpemU7XG5cbiAgICByZXR1cm4gW3N0YXJ0LCBlbmRdO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0UGFnZUluUmFuZ2UobmV3UGFnZU5vKSB7XG4gICAgY29uc3QgcHJldlBhZ2VObyA9IHRoaXMucGFnZTtcbiAgICB0aGlzLnBhZ2UgPSBnZXRWYWx1ZUluUmFuZ2UobmV3UGFnZU5vLCB0aGlzLnBhZ2VDb3VudCwgMSk7XG5cbiAgICBpZiAodGhpcy5wYWdlICE9PSBwcmV2UGFnZU5vICYmIGlzTnVtYmVyKHRoaXMuY29sbGVjdGlvblNpemUpKSB7XG4gICAgICB0aGlzLnBhZ2VDaGFuZ2UuZW1pdCh0aGlzLnBhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZVBhZ2VzKG5ld1BhZ2U6IG51bWJlcikge1xuICAgIHRoaXMucGFnZUNvdW50ID0gTWF0aC5jZWlsKHRoaXMuY29sbGVjdGlvblNpemUgLyB0aGlzLnBhZ2VTaXplKTtcblxuICAgIGlmICghaXNOdW1iZXIodGhpcy5wYWdlQ291bnQpKSB7XG4gICAgICB0aGlzLnBhZ2VDb3VudCA9IDA7XG4gICAgfVxuXG4gICAgLy8gZmlsbC1pbiBtb2RlbCBuZWVkZWQgdG8gcmVuZGVyIHBhZ2VzXG4gICAgdGhpcy5wYWdlcy5sZW5ndGggPSAwO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IHRoaXMucGFnZUNvdW50OyBpKyspIHtcbiAgICAgIHRoaXMucGFnZXMucHVzaChpKTtcbiAgICB9XG5cbiAgICAvLyBzZXQgcGFnZSB3aXRoaW4gMS4ubWF4IHJhbmdlXG4gICAgdGhpcy5fc2V0UGFnZUluUmFuZ2UobmV3UGFnZSk7XG5cbiAgICAvLyBhcHBseSBtYXhTaXplIGlmIG5lY2Vzc2FyeVxuICAgIGlmICh0aGlzLm1heFNpemUgPiAwICYmIHRoaXMucGFnZUNvdW50ID4gdGhpcy5tYXhTaXplKSB7XG4gICAgICBsZXQgc3RhcnQgPSAwO1xuICAgICAgbGV0IGVuZCA9IHRoaXMucGFnZUNvdW50O1xuXG4gICAgICAvLyBlaXRoZXIgcGFnaW5hdGluZyBvciByb3RhdGluZyBwYWdlIG51bWJlcnNcbiAgICAgIGlmICh0aGlzLnJvdGF0ZSkge1xuICAgICAgICBbc3RhcnQsIGVuZF0gPSB0aGlzLl9hcHBseVJvdGF0aW9uKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBbc3RhcnQsIGVuZF0gPSB0aGlzLl9hcHBseVBhZ2luYXRpb24oKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5wYWdlcyA9IHRoaXMucGFnZXMuc2xpY2Uoc3RhcnQsIGVuZCk7XG5cbiAgICAgIC8vIGFkZGluZyBlbGxpcHNlc1xuICAgICAgdGhpcy5fYXBwbHlFbGxpcHNlcyhzdGFydCwgZW5kKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/pagination/pagination.module.js b/dist/sunbird-ui-components/esm5/pagination/pagination.module.js new file mode 100644 index 0000000..3c20639 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/pagination/pagination.module.js @@ -0,0 +1,24 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { NgbPagination, NgbPaginationEllipsis, NgbPaginationFirst, NgbPaginationLast, NgbPaginationNext, NgbPaginationNumber, NgbPaginationPrevious } from './pagination'; +export { NgbPagination, NgbPaginationEllipsis, NgbPaginationFirst, NgbPaginationLast, NgbPaginationNext, NgbPaginationNumber, NgbPaginationPrevious } from './pagination'; +export { NgbPaginationConfig } from './pagination-config'; +/** @type {?} */ +var DIRECTIVES = [ + NgbPagination, NgbPaginationEllipsis, NgbPaginationFirst, NgbPaginationLast, NgbPaginationNext, NgbPaginationNumber, + NgbPaginationPrevious +]; +var NgbPaginationModule = /** @class */ (function () { + function NgbPaginationModule() { + } + NgbPaginationModule.decorators = [ + { type: NgModule, args: [{ declarations: DIRECTIVES, exports: DIRECTIVES, imports: [CommonModule] },] } + ]; + return NgbPaginationModule; +}()); +export { NgbPaginationModule }; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5tb2R1bGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJwYWdpbmF0aW9uL3BhZ2luYXRpb24ubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUU3QyxPQUFPLEVBQ0wsYUFBYSxFQUNiLHFCQUFxQixFQUNyQixrQkFBa0IsRUFDbEIsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixtQkFBbUIsRUFDbkIscUJBQXFCLEVBQ3RCLE1BQU0sY0FBYyxDQUFDO0FBRXRCLE9BQU8sRUFDTCxhQUFhLEVBQ2IscUJBQXFCLEVBQ3JCLGtCQUFrQixFQUNsQixpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQixxQkFBcUIsRUFDdEIsTUFBTSxjQUFjLENBQUM7QUFDdEIsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0scUJBQXFCLENBQUM7O0lBRWxELFVBQVUsR0FBRztJQUNqQixhQUFhLEVBQUUscUJBQXFCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CO0lBQ25ILHFCQUFxQjtDQUN0QjtBQUVEO0lBQUE7SUFFQSxDQUFDOztnQkFGQSxRQUFRLFNBQUMsRUFBQyxZQUFZLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUM7O0lBRWxGLDBCQUFDO0NBQUEsQUFGRCxJQUVDO1NBRFksbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHtcbiAgTmdiUGFnaW5hdGlvbixcbiAgTmdiUGFnaW5hdGlvbkVsbGlwc2lzLFxuICBOZ2JQYWdpbmF0aW9uRmlyc3QsXG4gIE5nYlBhZ2luYXRpb25MYXN0LFxuICBOZ2JQYWdpbmF0aW9uTmV4dCxcbiAgTmdiUGFnaW5hdGlvbk51bWJlcixcbiAgTmdiUGFnaW5hdGlvblByZXZpb3VzXG59IGZyb20gJy4vcGFnaW5hdGlvbic7XG5cbmV4cG9ydCB7XG4gIE5nYlBhZ2luYXRpb24sXG4gIE5nYlBhZ2luYXRpb25FbGxpcHNpcyxcbiAgTmdiUGFnaW5hdGlvbkZpcnN0LFxuICBOZ2JQYWdpbmF0aW9uTGFzdCxcbiAgTmdiUGFnaW5hdGlvbk5leHQsXG4gIE5nYlBhZ2luYXRpb25OdW1iZXIsXG4gIE5nYlBhZ2luYXRpb25QcmV2aW91c1xufSBmcm9tICcuL3BhZ2luYXRpb24nO1xuZXhwb3J0IHtOZ2JQYWdpbmF0aW9uQ29uZmlnfSBmcm9tICcuL3BhZ2luYXRpb24tY29uZmlnJztcblxuY29uc3QgRElSRUNUSVZFUyA9IFtcbiAgTmdiUGFnaW5hdGlvbiwgTmdiUGFnaW5hdGlvbkVsbGlwc2lzLCBOZ2JQYWdpbmF0aW9uRmlyc3QsIE5nYlBhZ2luYXRpb25MYXN0LCBOZ2JQYWdpbmF0aW9uTmV4dCwgTmdiUGFnaW5hdGlvbk51bWJlcixcbiAgTmdiUGFnaW5hdGlvblByZXZpb3VzXG5dO1xuXG5ATmdNb2R1bGUoe2RlY2xhcmF0aW9uczogRElSRUNUSVZFUywgZXhwb3J0czogRElSRUNUSVZFUywgaW1wb3J0czogW0NvbW1vbk1vZHVsZV19KVxuZXhwb3J0IGNsYXNzIE5nYlBhZ2luYXRpb25Nb2R1bGUge1xufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/popover/popover-config.js b/dist/sunbird-ui-components/esm5/popover/popover-config.js new file mode 100644 index 0000000..f704331 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/popover/popover-config.js @@ -0,0 +1,47 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Injectable } from '@angular/core'; +import * as i0 from "@angular/core"; +/** + * A configuration service for the [`NgbPopover`](#/components/popover/api#NgbPopover) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the popovers used in the application. + */ +var NgbPopoverConfig = /** @class */ (function () { + function NgbPopoverConfig() { + this.autoClose = true; + this.placement = 'auto'; + this.triggers = 'click'; + this.disablePopover = false; + this.openDelay = 0; + this.closeDelay = 0; + } + NgbPopoverConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ NgbPopoverConfig.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function NgbPopoverConfig_Factory() { return new NgbPopoverConfig(); }, token: NgbPopoverConfig, providedIn: "root" }); + return NgbPopoverConfig; +}()); +export { NgbPopoverConfig }; +if (false) { + /** @type {?} */ + NgbPopoverConfig.prototype.autoClose; + /** @type {?} */ + NgbPopoverConfig.prototype.placement; + /** @type {?} */ + NgbPopoverConfig.prototype.triggers; + /** @type {?} */ + NgbPopoverConfig.prototype.container; + /** @type {?} */ + NgbPopoverConfig.prototype.disablePopover; + /** @type {?} */ + NgbPopoverConfig.prototype.popoverClass; + /** @type {?} */ + NgbPopoverConfig.prototype.openDelay; + /** @type {?} */ + NgbPopoverConfig.prototype.closeDelay; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci1jb25maWcuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJwb3BvdmVyL3BvcG92ZXItY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQVN6QztJQUFBO1FBRUUsY0FBUyxHQUFtQyxJQUFJLENBQUM7UUFDakQsY0FBUyxHQUFtQixNQUFNLENBQUM7UUFDbkMsYUFBUSxHQUFHLE9BQU8sQ0FBQztRQUVuQixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUV2QixjQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsZUFBVSxHQUFHLENBQUMsQ0FBQztLQUNoQjs7Z0JBVkEsVUFBVSxTQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQzs7OzJCQVRoQztDQW1CQyxBQVZELElBVUM7U0FUWSxnQkFBZ0I7OztJQUMzQixxQ0FBaUQ7O0lBQ2pELHFDQUFtQzs7SUFDbkMsb0NBQW1COztJQUNuQixxQ0FBa0I7O0lBQ2xCLDBDQUF1Qjs7SUFDdkIsd0NBQXFCOztJQUNyQixxQ0FBYzs7SUFDZCxzQ0FBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1BsYWNlbWVudEFycmF5fSBmcm9tICcuLi91dGlsL3Bvc2l0aW9uaW5nJztcblxuLyoqXG4gKiBBIGNvbmZpZ3VyYXRpb24gc2VydmljZSBmb3IgdGhlIFtgTmdiUG9wb3ZlcmBdKCMvY29tcG9uZW50cy9wb3BvdmVyL2FwaSNOZ2JQb3BvdmVyKSBjb21wb25lbnQuXG4gKlxuICogWW91IGNhbiBpbmplY3QgdGhpcyBzZXJ2aWNlLCB0eXBpY2FsbHkgaW4geW91ciByb290IGNvbXBvbmVudCwgYW5kIGN1c3RvbWl6ZSB0aGUgdmFsdWVzIG9mIGl0cyBwcm9wZXJ0aWVzIGluXG4gKiBvcmRlciB0byBwcm92aWRlIGRlZmF1bHQgdmFsdWVzIGZvciBhbGwgdGhlIHBvcG92ZXJzIHVzZWQgaW4gdGhlIGFwcGxpY2F0aW9uLlxuICovXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBOZ2JQb3BvdmVyQ29uZmlnIHtcbiAgYXV0b0Nsb3NlOiBib29sZWFuIHwgJ2luc2lkZScgfCAnb3V0c2lkZScgPSB0cnVlO1xuICBwbGFjZW1lbnQ6IFBsYWNlbWVudEFycmF5ID0gJ2F1dG8nO1xuICB0cmlnZ2VycyA9ICdjbGljayc7XG4gIGNvbnRhaW5lcjogc3RyaW5nO1xuICBkaXNhYmxlUG9wb3ZlciA9IGZhbHNlO1xuICBwb3BvdmVyQ2xhc3M6IHN0cmluZztcbiAgb3BlbkRlbGF5ID0gMDtcbiAgY2xvc2VEZWxheSA9IDA7XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/popover/popover.js b/dist/sunbird-ui-components/esm5/popover/popover.js new file mode 100644 index 0000000..e1025dc --- /dev/null +++ b/dist/sunbird-ui-components/esm5/popover/popover.js @@ -0,0 +1,446 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Component, Directive, Input, Output, EventEmitter, ChangeDetectionStrategy, Inject, Injector, Renderer2, ElementRef, TemplateRef, ViewContainerRef, ComponentFactoryResolver, NgZone, ViewEncapsulation, ChangeDetectorRef, ApplicationRef } from '@angular/core'; +import { DOCUMENT } from '@angular/common'; +import { listenToTriggers } from '../util/triggers'; +import { ngbAutoClose } from '../util/autoclose'; +import { positionElements } from '../util/positioning'; +import { PopupService } from '../util/popup'; +import { NgbPopoverConfig } from './popover-config'; +/** @type {?} */ +var nextId = 0; +var NgbPopoverWindow = /** @class */ (function () { + function NgbPopoverWindow() { + } + /** + * @return {?} + */ + NgbPopoverWindow.prototype.isTitleTemplate = /** + * @return {?} + */ + function () { return this.title instanceof TemplateRef; }; + NgbPopoverWindow.decorators = [ + { type: Component, args: [{ + selector: 'ngb-popover-window', + changeDetection: ChangeDetectionStrategy.OnPush, + encapsulation: ViewEncapsulation.None, + host: { '[class]': '"popover" + (popoverClass ? " " + popoverClass : "")', 'role': 'tooltip', '[id]': 'id' }, + template: "\n
\n

\n {{title}}\n \n

\n
", + styles: ["ngb-popover-window.bs-popover-bottom>.arrow,ngb-popover-window.bs-popover-top>.arrow{left:50%;margin-left:-.5rem}ngb-popover-window.bs-popover-bottom-left>.arrow,ngb-popover-window.bs-popover-top-left>.arrow{left:2em}ngb-popover-window.bs-popover-bottom-right>.arrow,ngb-popover-window.bs-popover-top-right>.arrow{left:auto;right:2em}ngb-popover-window.bs-popover-left>.arrow,ngb-popover-window.bs-popover-right>.arrow{top:50%;margin-top:-.5rem}ngb-popover-window.bs-popover-left-top>.arrow,ngb-popover-window.bs-popover-right-top>.arrow{top:.7em}ngb-popover-window.bs-popover-left-bottom>.arrow,ngb-popover-window.bs-popover-right-bottom>.arrow{top:auto;bottom:.7em}"] + }] } + ]; + NgbPopoverWindow.propDecorators = { + title: [{ type: Input }], + id: [{ type: Input }], + popoverClass: [{ type: Input }], + context: [{ type: Input }] + }; + return NgbPopoverWindow; +}()); +export { NgbPopoverWindow }; +if (false) { + /** @type {?} */ + NgbPopoverWindow.prototype.title; + /** @type {?} */ + NgbPopoverWindow.prototype.id; + /** @type {?} */ + NgbPopoverWindow.prototype.popoverClass; + /** @type {?} */ + NgbPopoverWindow.prototype.context; +} +/** + * A lightweight and extensible directive for fancy popover creation. + */ +var NgbPopover = /** @class */ (function () { + function NgbPopover(_elementRef, _renderer, injector, componentFactoryResolver, viewContainerRef, config, _ngZone, _document, _changeDetector, _applicationRef) { + var _this = this; + this._elementRef = _elementRef; + this._renderer = _renderer; + this._ngZone = _ngZone; + this._document = _document; + this._changeDetector = _changeDetector; + this._applicationRef = _applicationRef; + /** + * An event emitted when the popover is shown. Contains no payload. + */ + this.shown = new EventEmitter(); + /** + * An event emitted when the popover is hidden. Contains no payload. + */ + this.hidden = new EventEmitter(); + this._ngbPopoverWindowId = "ngb-popover-" + nextId++; + this.autoClose = config.autoClose; + this.placement = config.placement; + this.triggers = config.triggers; + this.container = config.container; + this.disablePopover = config.disablePopover; + this.popoverClass = config.popoverClass; + this.openDelay = config.openDelay; + this.closeDelay = config.closeDelay; + this._popupService = new PopupService(NgbPopoverWindow, injector, viewContainerRef, _renderer, componentFactoryResolver, _applicationRef); + this._zoneSubscription = _ngZone.onStable.subscribe((/** + * @return {?} + */ + function () { + if (_this._windowRef) { + positionElements(_this._elementRef.nativeElement, _this._windowRef.location.nativeElement, _this.placement, _this.container === 'body', 'bs-popover'); + } + })); + } + /** + * @private + * @return {?} + */ + NgbPopover.prototype._isDisabled = /** + * @private + * @return {?} + */ + function () { + if (this.disablePopover) { + return true; + } + if (!this.ngbPopover && !this.popoverTitle) { + return true; + } + return false; + }; + /** + * Opens the popover. + * + * This is considered to be a "manual" triggering. + * The `context` is an optional value to be injected into the popover template when it is created. + */ + /** + * Opens the popover. + * + * This is considered to be a "manual" triggering. + * The `context` is an optional value to be injected into the popover template when it is created. + * @param {?=} context + * @return {?} + */ + NgbPopover.prototype.open = /** + * Opens the popover. + * + * This is considered to be a "manual" triggering. + * The `context` is an optional value to be injected into the popover template when it is created. + * @param {?=} context + * @return {?} + */ + function (context) { + var _this = this; + if (!this._windowRef && !this._isDisabled()) { + this._windowRef = this._popupService.open(this.ngbPopover, context); + this._windowRef.instance.title = this.popoverTitle; + this._windowRef.instance.context = context; + this._windowRef.instance.popoverClass = this.popoverClass; + this._windowRef.instance.id = this._ngbPopoverWindowId; + this._renderer.setAttribute(this._elementRef.nativeElement, 'aria-describedby', this._ngbPopoverWindowId); + if (this.container === 'body') { + this._document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement); + } + // We need to detect changes, because we don't know where .open() might be called from. + // Ex. opening popover from one of lifecycle hooks that run after the CD + // (say from ngAfterViewInit) will result in 'ExpressionHasChanged' exception + this._windowRef.changeDetectorRef.detectChanges(); + // We need to mark for check, because popover won't work inside the OnPush component. + // Ex. when we use expression like `{{ popover.isOpen() : 'opened' : 'closed' }}` + // inside the template of an OnPush component and we change the popover from + // open -> closed, the expression in question won't be updated unless we explicitly + // mark the parent component to be checked. + this._windowRef.changeDetectorRef.markForCheck(); + ngbAutoClose(this._ngZone, this._document, this.autoClose, (/** + * @return {?} + */ + function () { return _this.close(); }), this.hidden, [this._windowRef.location.nativeElement]); + this.shown.emit(); + } + }; + /** + * Closes the popover. + * + * This is considered to be a "manual" triggering of the popover. + */ + /** + * Closes the popover. + * + * This is considered to be a "manual" triggering of the popover. + * @return {?} + */ + NgbPopover.prototype.close = /** + * Closes the popover. + * + * This is considered to be a "manual" triggering of the popover. + * @return {?} + */ + function () { + if (this._windowRef) { + this._renderer.removeAttribute(this._elementRef.nativeElement, 'aria-describedby'); + this._popupService.close(); + this._windowRef = null; + this.hidden.emit(); + this._changeDetector.markForCheck(); + } + }; + /** + * Toggles the popover. + * + * This is considered to be a "manual" triggering of the popover. + */ + /** + * Toggles the popover. + * + * This is considered to be a "manual" triggering of the popover. + * @return {?} + */ + NgbPopover.prototype.toggle = /** + * Toggles the popover. + * + * This is considered to be a "manual" triggering of the popover. + * @return {?} + */ + function () { + if (this._windowRef) { + this.close(); + } + else { + this.open(); + } + }; + /** + * Returns `true`, if the popover is currently shown. + */ + /** + * Returns `true`, if the popover is currently shown. + * @return {?} + */ + NgbPopover.prototype.isOpen = /** + * Returns `true`, if the popover is currently shown. + * @return {?} + */ + function () { return this._windowRef != null; }; + /** + * @return {?} + */ + NgbPopover.prototype.ngOnInit = /** + * @return {?} + */ + function () { + this._unregisterListenersFn = listenToTriggers(this._renderer, this._elementRef.nativeElement, this.triggers, this.isOpen.bind(this), this.open.bind(this), this.close.bind(this), +this.openDelay, +this.closeDelay); + }; + /** + * @param {?} changes + * @return {?} + */ + NgbPopover.prototype.ngOnChanges = /** + * @param {?} changes + * @return {?} + */ + function (changes) { + // close popover if title and content become empty, or disablePopover set to true + if ((changes['ngbPopover'] || changes['popoverTitle'] || changes['disablePopover']) && this._isDisabled()) { + this.close(); + } + }; + /** + * @return {?} + */ + NgbPopover.prototype.ngOnDestroy = /** + * @return {?} + */ + function () { + this.close(); + // This check is needed as it might happen that ngOnDestroy is called before ngOnInit + // under certain conditions, see: https://github.com/ng-bootstrap/ng-bootstrap/issues/2199 + if (this._unregisterListenersFn) { + this._unregisterListenersFn(); + } + this._zoneSubscription.unsubscribe(); + }; + NgbPopover.decorators = [ + { type: Directive, args: [{ selector: '[ngbPopover]', exportAs: 'ngbPopover' },] } + ]; + /** @nocollapse */ + NgbPopover.ctorParameters = function () { return [ + { type: ElementRef }, + { type: Renderer2 }, + { type: Injector }, + { type: ComponentFactoryResolver }, + { type: ViewContainerRef }, + { type: NgbPopoverConfig }, + { type: NgZone }, + { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }, + { type: ChangeDetectorRef }, + { type: ApplicationRef } + ]; }; + NgbPopover.propDecorators = { + autoClose: [{ type: Input }], + ngbPopover: [{ type: Input }], + popoverTitle: [{ type: Input }], + placement: [{ type: Input }], + triggers: [{ type: Input }], + container: [{ type: Input }], + disablePopover: [{ type: Input }], + popoverClass: [{ type: Input }], + openDelay: [{ type: Input }], + closeDelay: [{ type: Input }], + shown: [{ type: Output }], + hidden: [{ type: Output }] + }; + return NgbPopover; +}()); +export { NgbPopover }; +if (false) { + /** + * Indicates whether the popover should be closed on `Escape` key and inside/outside clicks: + * + * * `true` - closes on both outside and inside clicks as well as `Escape` presses + * * `false` - disables the autoClose feature (NB: triggers still apply) + * * `"inside"` - closes on inside clicks as well as Escape presses + * * `"outside"` - closes on outside clicks (sometimes also achievable through triggers) + * as well as `Escape` presses + * + * \@since 3.0.0 + * @type {?} + */ + NgbPopover.prototype.autoClose; + /** + * The string content or a `TemplateRef` for the content to be displayed in the popover. + * + * If the title and the content are empty, the popover won't open. + * @type {?} + */ + NgbPopover.prototype.ngbPopover; + /** + * The title of the popover. + * + * If the title and the content are empty, the popover won't open. + * @type {?} + */ + NgbPopover.prototype.popoverTitle; + /** + * The preferred placement of the popover. + * + * Possible values are `"top"`, `"top-left"`, `"top-right"`, `"bottom"`, `"bottom-left"`, + * `"bottom-right"`, `"left"`, `"left-top"`, `"left-bottom"`, `"right"`, `"right-top"`, + * `"right-bottom"` + * + * Accepts an array of strings or a string with space separated possible values. + * + * The default order of preference is `"auto"` (same as the sequence above). + * + * Please see the [positioning overview](#/positioning) for more details. + * @type {?} + */ + NgbPopover.prototype.placement; + /** + * Specifies events that should trigger the tooltip. + * + * Supports a space separated list of event names. + * For more details see the [triggers demo](#/components/popover/examples#triggers). + * @type {?} + */ + NgbPopover.prototype.triggers; + /** + * A selector specifying the element the popover should be appended to. + * + * Currently only supports `body`. + * @type {?} + */ + NgbPopover.prototype.container; + /** + * If `true`, popover is disabled and won't be displayed. + * + * \@since 1.1.0 + * @type {?} + */ + NgbPopover.prototype.disablePopover; + /** + * An optional class applied to the popover window element. + * + * \@since 2.2.0 + * @type {?} + */ + NgbPopover.prototype.popoverClass; + /** + * The opening delay in ms. Works only for "non-manual" opening triggers defined by the `triggers` input. + * + * \@since 4.1.0 + * @type {?} + */ + NgbPopover.prototype.openDelay; + /** + * The closing delay in ms. Works only for "non-manual" opening triggers defined by the `triggers` input. + * + * \@since 4.1.0 + * @type {?} + */ + NgbPopover.prototype.closeDelay; + /** + * An event emitted when the popover is shown. Contains no payload. + * @type {?} + */ + NgbPopover.prototype.shown; + /** + * An event emitted when the popover is hidden. Contains no payload. + * @type {?} + */ + NgbPopover.prototype.hidden; + /** + * @type {?} + * @private + */ + NgbPopover.prototype._ngbPopoverWindowId; + /** + * @type {?} + * @private + */ + NgbPopover.prototype._popupService; + /** + * @type {?} + * @private + */ + NgbPopover.prototype._windowRef; + /** + * @type {?} + * @private + */ + NgbPopover.prototype._unregisterListenersFn; + /** + * @type {?} + * @private + */ + NgbPopover.prototype._zoneSubscription; + /** + * @type {?} + * @private + */ + NgbPopover.prototype._elementRef; + /** + * @type {?} + * @private + */ + NgbPopover.prototype._renderer; + /** + * @type {?} + * @private + */ + NgbPopover.prototype._ngZone; + /** + * @type {?} + * @private + */ + NgbPopover.prototype._document; + /** + * @type {?} + * @private + */ + NgbPopover.prototype._changeDetector; + /** + * @type {?} + * @private + */ + NgbPopover.prototype._applicationRef; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbInBvcG92ZXIvcG9wb3Zlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osdUJBQXVCLEVBSXZCLE1BQU0sRUFDTixRQUFRLEVBQ1IsU0FBUyxFQUVULFVBQVUsRUFDVixXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2hCLHdCQUF3QixFQUN4QixNQUFNLEVBRU4saUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixjQUFjLEVBQ2YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRXpDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQ2xELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUMvQyxPQUFPLEVBQUMsZ0JBQWdCLEVBQWlCLE1BQU0scUJBQXFCLENBQUM7QUFDckUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQzs7SUFFOUMsTUFBTSxHQUFHLENBQUM7QUFFZDtJQUFBO0lBcUJBLENBQUM7Ozs7SUFEQywwQ0FBZTs7O0lBQWYsY0FBb0IsT0FBTyxJQUFJLENBQUMsS0FBSyxZQUFZLFdBQVcsQ0FBQyxDQUFDLENBQUM7O2dCQXBCaEUsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxvQkFBb0I7b0JBQzlCLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtvQkFDckMsSUFBSSxFQUFFLEVBQUMsU0FBUyxFQUFFLHNEQUFzRCxFQUFFLE1BQU0s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dE9ZLFVBQVU7Ozs7Ozs7Ozs7Ozs7O0lBWXJCLCtCQUFtRDs7Ozs7OztJQU9uRCxnQ0FBK0M7Ozs7Ozs7SUFPL0Msa0NBQWlEOzs7Ozs7Ozs7Ozs7Ozs7SUFlakQsK0JBQW1DOzs7Ozs7OztJQVFuQyw4QkFBMEI7Ozs7Ozs7SUFPMUIsK0JBQTJCOzs7Ozs7O0lBTzNCLG9DQUFpQzs7Ozs7OztJQU9qQyxrQ0FBOEI7Ozs7Ozs7SUFPOUIsK0JBQTJCOzs7Ozs7O0lBTzNCLGdDQUE0Qjs7Ozs7SUFLNUIsMkJBQTJDOzs7OztJQUszQyw0QkFBNEM7Ozs7O0lBRTVDLHlDQUF3RDs7Ozs7SUFDeEQsbUNBQXNEOzs7OztJQUN0RCxnQ0FBbUQ7Ozs7O0lBQ25ELDRDQUErQjs7Ozs7SUFDL0IsdUNBQStCOzs7OztJQVkzQixpQ0FBNEM7Ozs7O0lBQUUsK0JBQTRCOzs7OztJQUUxRSw2QkFBdUI7Ozs7O0lBQUUsK0JBQXdDOzs7OztJQUFFLHFDQUEwQzs7Ozs7SUFDN0cscUNBQXVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBEaXJlY3RpdmUsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIE9uSW5pdCxcbiAgT25EZXN0cm95LFxuICBPbkNoYW5nZXMsXG4gIEluamVjdCxcbiAgSW5qZWN0b3IsXG4gIFJlbmRlcmVyMixcbiAgQ29tcG9uZW50UmVmLFxuICBFbGVtZW50UmVmLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICBOZ1pvbmUsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQXBwbGljYXRpb25SZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0RPQ1VNRU5UfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQge2xpc3RlblRvVHJpZ2dlcnN9IGZyb20gJy4uL3V0aWwvdHJpZ2dlcnMnO1xuaW1wb3J0IHtuZ2JBdXRvQ2xvc2V9IGZyb20gJy4uL3V0aWwvYXV0b2Nsb3NlJztcbmltcG9ydCB7cG9zaXRpb25FbGVtZW50cywgUGxhY2VtZW50QXJyYXl9IGZyb20gJy4uL3V0aWwvcG9zaXRpb25pbmcnO1xuaW1wb3J0IHtQb3B1cFNlcnZpY2V9IGZyb20gJy4uL3V0aWwvcG9wdXAnO1xuXG5pbXBvcnQge05nYlBvcG92ZXJDb25maWd9IGZyb20gJy4vcG9wb3Zlci1jb25maWcnO1xuXG5sZXQgbmV4dElkID0gMDtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmdiLXBvcG92ZXItd2luZG93JyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGhvc3Q6IHsnW2NsYXNzXSc6ICdcInBvcG92ZXJcIiArIChwb3BvdmVyQ2xhc3MgPyBcIiBcIiArIHBvcG92ZXJDbGFzcyA6IFwiXCIpJywgJ3JvbGUnOiAndG9vbHRpcCcsICdbaWRdJzogJ2lkJ30sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImFycm93XCI+PC9kaXY+XG4gICAgPGgzIGNsYXNzPVwicG9wb3Zlci1oZWFkZXJcIiAqbmdJZj1cInRpdGxlICE9IG51bGxcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjc2ltcGxlVGl0bGU+e3t0aXRsZX19PC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJpc1RpdGxlVGVtcGxhdGUoKSA/IHRpdGxlIDogc2ltcGxlVGl0bGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwiY29udGV4dFwiPjwvbmctdGVtcGxhdGU+XG4gICAgPC9oMz5cbiAgICA8ZGl2IGNsYXNzPVwicG9wb3Zlci1ib2R5XCI+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PjwvZGl2PmAsXG4gIHN0eWxlVXJsczogWycuL3BvcG92ZXIuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIE5nYlBvcG92ZXJXaW5kb3cge1xuICBASW5wdXQoKSB0aXRsZTogdW5kZWZpbmVkIHwgc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PjtcbiAgQElucHV0KCkgaWQ6IHN0cmluZztcbiAgQElucHV0KCkgcG9wb3ZlckNsYXNzOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNvbnRleHQ6IGFueTtcblxuICBpc1RpdGxlVGVtcGxhdGUoKSB7IHJldHVybiB0aGlzLnRpdGxlIGluc3RhbmNlb2YgVGVtcGxhdGVSZWY7IH1cbn1cblxuLyoqXG4gKiBBIGxpZ2h0d2VpZ2h0IGFuZCBleHRlbnNpYmxlIGRpcmVjdGl2ZSBmb3IgZmFuY3kgcG9wb3ZlciBjcmVhdGlvbi5cbiAqL1xuQERpcmVjdGl2ZSh7c2VsZWN0b3I6ICdbbmdiUG9wb3Zlcl0nLCBleHBvcnRBczogJ25nYlBvcG92ZXInfSlcbmV4cG9ydCBjbGFzcyBOZ2JQb3BvdmVyIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcG9wb3ZlciBzaG91bGQgYmUgY2xvc2VkIG9uIGBFc2NhcGVgIGtleSBhbmQgaW5zaWRlL291dHNpZGUgY2xpY2tzOlxuICAgKlxuICAgKiAqIGB0cnVlYCAtIGNsb3NlcyBvbiBib3RoIG91dHNpZGUgYW5kIGluc2lkZSBjbGlja3MgYXMgd2VsbCBhcyBgRXNjYXBlYCBwcmVzc2VzXG4gICAqICogYGZhbHNlYCAtIGRpc2FibGVzIHRoZSBhdXRvQ2xvc2UgZmVhdHVyZSAoTkI6IHRyaWdnZXJzIHN0aWxsIGFwcGx5KVxuICAgKiAqIGBcImluc2lkZVwiYCAtIGNsb3NlcyBvbiBpbnNpZGUgY2xpY2tzIGFzIHdlbGwgYXMgRXNjYXBlIHByZXNzZXNcbiAgICogKiBgXCJvdXRzaWRlXCJgIC0gY2xvc2VzIG9uIG91dHNpZGUgY2xpY2tzIChzb21ldGltZXMgYWxzbyBhY2hpZXZhYmxlIHRocm91Z2ggdHJpZ2dlcnMpXG4gICAqIGFzIHdlbGwgYXMgYEVzY2FwZWAgcHJlc3Nlc1xuICAgKlxuICAgKiBAc2luY2UgMy4wLjBcbiAgICovXG4gIEBJbnB1dCgpIGF1dG9DbG9zZTogYm9vbGVhbiB8ICdpbnNpZGUnIHwgJ291dHNpZGUnO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RyaW5nIGNvbnRlbnQgb3IgYSBgVGVtcGxhdGVSZWZgIGZvciB0aGUgY29udGVudCB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHBvcG92ZXIuXG4gICAqXG4gICAqIElmIHRoZSB0aXRsZSBhbmQgdGhlIGNvbnRlbnQgYXJlIGVtcHR5LCB0aGUgcG9wb3ZlciB3b24ndCBvcGVuLlxuICAgKi9cbiAgQElucHV0KCkgbmdiUG9wb3Zlcjogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PjtcblxuICAvKipcbiAgICogVGhlIHRpdGxlIG9mIHRoZSBwb3BvdmVyLlxuICAgKlxuICAgKiBJZiB0aGUgdGl0bGUgYW5kIHRoZSBjb250ZW50IGFyZSBlbXB0eSwgdGhlIHBvcG92ZXIgd29uJ3Qgb3Blbi5cbiAgICovXG4gIEBJbnB1dCgpIHBvcG92ZXJUaXRsZTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PjtcblxuICAvKipcbiAgICogVGhlIHByZWZlcnJlZCBwbGFjZW1lbnQgb2YgdGhlIHBvcG92ZXIuXG4gICAqXG4gICAqIFBvc3NpYmxlIHZhbHVlcyBhcmUgYFwidG9wXCJgLCBgXCJ0b3AtbGVmdFwiYCwgYFwidG9wLXJpZ2h0XCJgLCBgXCJib3R0b21cImAsIGBcImJvdHRvbS1sZWZ0XCJgLFxuICAgKiBgXCJib3R0b20tcmlnaHRcImAsIGBcImxlZnRcImAsIGBcImxlZnQtdG9wXCJgLCBgXCJsZWZ0LWJvdHRvbVwiYCwgYFwicmlnaHRcImAsIGBcInJpZ2h0LXRvcFwiYCxcbiAgICogYFwicmlnaHQtYm90dG9tXCJgXG4gICAqXG4gICAqIEFjY2VwdHMgYW4gYXJyYXkgb2Ygc3RyaW5ncyBvciBhIHN0cmluZyB3aXRoIHNwYWNlIHNlcGFyYXRlZCBwb3NzaWJsZSB2YWx1ZXMuXG4gICAqXG4gICAqIFRoZSBkZWZhdWx0IG9yZGVyIG9mIHByZWZlcmVuY2UgaXMgYFwiYXV0b1wiYCAoc2FtZSBhcyB0aGUgc2VxdWVuY2UgYWJvdmUpLlxuICAgKlxuICAgKiBQbGVhc2Ugc2VlIHRoZSBbcG9zaXRpb25pbmcgb3ZlcnZpZXddKCMvcG9zaXRpb25pbmcpIGZvciBtb3JlIGRldGFpbHMuXG4gICAqL1xuICBASW5wdXQoKSBwbGFjZW1lbnQ6IFBsYWNlbWVudEFycmF5O1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgZXZlbnRzIHRoYXQgc2hvdWxkIHRyaWdnZXIgdGhlIHRvb2x0aXAuXG4gICAqXG4gICAqIFN1cHBvcnRzIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgZXZlbnQgbmFtZXMuXG4gICAqIEZvciBtb3JlIGRldGFpbHMgc2VlIHRoZSBbdHJpZ2dlcnMgZGVtb10oIy9jb21wb25lbnRzL3BvcG92ZXIvZXhhbXBsZXMjdHJpZ2dlcnMpLlxuICAgKi9cbiAgQElucHV0KCkgdHJpZ2dlcnM6IHN0cmluZztcblxuICAvKipcbiAgICogQSBzZWxlY3RvciBzcGVjaWZ5aW5nIHRoZSBlbGVtZW50IHRoZSBwb3BvdmVyIHNob3VsZCBiZSBhcHBlbmRlZCB0by5cbiAgICpcbiAgICogQ3VycmVudGx5IG9ubHkgc3VwcG9ydHMgYGJvZHlgLlxuICAgKi9cbiAgQElucHV0KCkgY29udGFpbmVyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgcG9wb3ZlciBpcyBkaXNhYmxlZCBhbmQgd29uJ3QgYmUgZGlzcGxheWVkLlxuICAgKlxuICAgKiBAc2luY2UgMS4xLjBcbiAgICovXG4gIEBJbnB1dCgpIGRpc2FibGVQb3BvdmVyOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCBjbGFzcyBhcHBsaWVkIHRvIHRoZSBwb3BvdmVyIHdpbmRvdyBlbGVtZW50LlxuICAgKlxuICAgKiBAc2luY2UgMi4yLjBcbiAgICovXG4gIEBJbnB1dCgpIHBvcG92ZXJDbGFzczogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgb3BlbmluZyBkZWxheSBpbiBtcy4gV29ya3Mgb25seSBmb3IgXCJub24tbWFudWFsXCIgb3BlbmluZyB0cmlnZ2VycyBkZWZpbmVkIGJ5IHRoZSBgdHJpZ2dlcnNgIGlucHV0LlxuICAgKlxuICAgKiBAc2luY2UgNC4xLjBcbiAgICovXG4gIEBJbnB1dCgpIG9wZW5EZWxheTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgY2xvc2luZyBkZWxheSBpbiBtcy4gV29ya3Mgb25seSBmb3IgXCJub24tbWFudWFsXCIgb3BlbmluZyB0cmlnZ2VycyBkZWZpbmVkIGJ5IHRoZSBgdHJpZ2dlcnNgIGlucHV0LlxuICAgKlxuICAgKiBAc2luY2UgNC4xLjBcbiAgICovXG4gIEBJbnB1dCgpIGNsb3NlRGVsYXk6IG51bWJlcjtcblxuICAvKipcbiAgICogQW4gZXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBwb3BvdmVyIGlzIHNob3duLiBDb250YWlucyBubyBwYXlsb2FkLlxuICAgKi9cbiAgQE91dHB1dCgpIHNob3duID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKlxuICAgKiBBbiBldmVudCBlbWl0dGVkIHdoZW4gdGhlIHBvcG92ZXIgaXMgaGlkZGVuLiBDb250YWlucyBubyBwYXlsb2FkLlxuICAgKi9cbiAgQE91dHB1dCgpIGhpZGRlbiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBwcml2YXRlIF9uZ2JQb3BvdmVyV2luZG93SWQgPSBgbmdiLXBvcG92ZXItJHtuZXh0SWQrK31gO1xuICBwcml2YXRlIF9wb3B1cFNlcnZpY2U6IFBvcHVwU2VydmljZTxOZ2JQb3BvdmVyV2luZG93PjtcbiAgcHJpdmF0ZSBfd2luZG93UmVmOiBDb21wb25lbnRSZWY8TmdiUG9wb3ZlcldpbmRvdz47XG4gIHByaXZhdGUgX3VucmVnaXN0ZXJMaXN0ZW5lcnNGbjtcbiAgcHJpdmF0ZSBfem9uZVN1YnNjcmlwdGlvbjogYW55O1xuICBwcml2YXRlIF9pc0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmRpc2FibGVQb3BvdmVyKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLm5nYlBvcG92ZXIgJiYgIXRoaXMucG9wb3ZlclRpdGxlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiwgcHJpdmF0ZSBfcmVuZGVyZXI6IFJlbmRlcmVyMiwgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsIGNvbmZpZzogTmdiUG9wb3ZlckNvbmZpZyxcbiAgICAgIHByaXZhdGUgX25nWm9uZTogTmdab25lLCBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIF9kb2N1bWVudDogYW55LCBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICBwcml2YXRlIF9hcHBsaWNhdGlvblJlZjogQXBwbGljYXRpb25SZWYpIHtcbiAgICB0aGlzLmF1dG9DbG9zZSA9IGNvbmZpZy5hdXRvQ2xvc2U7XG4gICAgdGhpcy5wbGFjZW1lbnQgPSBjb25maWcucGxhY2VtZW50O1xuICAgIHRoaXMudHJpZ2dlcnMgPSBjb25maWcudHJpZ2dlcnM7XG4gICAgdGhpcy5jb250YWluZXIgPSBjb25maWcuY29udGFpbmVyO1xuICAgIHRoaXMuZGlzYWJsZVBvcG92ZXIgPSBjb25maWcuZGlzYWJsZVBvcG92ZXI7XG4gICAgdGhpcy5wb3BvdmVyQ2xhc3MgPSBjb25maWcucG9wb3ZlckNsYXNzO1xuICAgIHRoaXMub3BlbkRlbGF5ID0gY29uZmlnLm9wZW5EZWxheTtcbiAgICB0aGlzLmNsb3NlRGVsYXkgPSBjb25maWcuY2xvc2VEZWxheTtcbiAgICB0aGlzLl9wb3B1cFNlcnZpY2UgPSBuZXcgUG9wdXBTZXJ2aWNlPE5nYlBvcG92ZXJXaW5kb3c+KFxuICAgICAgICBOZ2JQb3BvdmVyV2luZG93LCBpbmplY3Rvciwgdmlld0NvbnRhaW5lclJlZiwgX3JlbmRlcmVyLCBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIF9hcHBsaWNhdGlvblJlZik7XG5cbiAgICB0aGlzLl96b25lU3Vic2NyaXB0aW9uID0gX25nWm9uZS5vblN0YWJsZS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX3dpbmRvd1JlZikge1xuICAgICAgICBwb3NpdGlvbkVsZW1lbnRzKFxuICAgICAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCB0aGlzLl93aW5kb3dSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudCwgdGhpcy5wbGFjZW1lbnQsXG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lciA9PT0gJ2JvZHknLCAnYnMtcG9wb3ZlcicpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW5zIHRoZSBwb3BvdmVyLlxuICAgKlxuICAgKiBUaGlzIGlzIGNvbnNpZGVyZWQgdG8gYmUgYSBcIm1hbnVhbFwiIHRyaWdnZXJpbmcuXG4gICAqIFRoZSBgY29udGV4dGAgaXMgYW4gb3B0aW9uYWwgdmFsdWUgdG8gYmUgaW5qZWN0ZWQgaW50byB0aGUgcG9wb3ZlciB0ZW1wbGF0ZSB3aGVuIGl0IGlzIGNyZWF0ZWQuXG4gICAqL1xuICBvcGVuKGNvbnRleHQ/OiBhbnkpIHtcbiAgICBpZiAoIXRoaXMuX3dpbmRvd1JlZiAmJiAhdGhpcy5faXNEaXNhYmxlZCgpKSB7XG4gICAgICB0aGlzLl93aW5kb3dSZWYgPSB0aGlzLl9wb3B1cFNlcnZpY2Uub3Blbih0aGlzLm5nYlBvcG92ZXIsIGNvbnRleHQpO1xuICAgICAgdGhpcy5fd2luZG93UmVmLmluc3RhbmNlLnRpdGxlID0gdGhpcy5wb3BvdmVyVGl0bGU7XG4gICAgICB0aGlzLl93aW5kb3dSZWYuaW5zdGFuY2UuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgICB0aGlzLl93aW5kb3dSZWYuaW5zdGFuY2UucG9wb3ZlckNsYXNzID0gdGhpcy5wb3BvdmVyQ2xhc3M7XG4gICAgICB0aGlzLl93aW5kb3dSZWYuaW5zdGFuY2UuaWQgPSB0aGlzLl9uZ2JQb3BvdmVyV2luZG93SWQ7XG5cbiAgICAgIHRoaXMuX3JlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdhcmlhLWRlc2NyaWJlZGJ5JywgdGhpcy5fbmdiUG9wb3ZlcldpbmRvd0lkKTtcblxuICAgICAgaWYgKHRoaXMuY29udGFpbmVyID09PSAnYm9keScpIHtcbiAgICAgICAgdGhpcy5fZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmNvbnRhaW5lcikuYXBwZW5kQ2hpbGQodGhpcy5fd2luZG93UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICAvLyBXZSBuZWVkIHRvIGRldGVjdCBjaGFuZ2VzLCBiZWNhdXNlIHdlIGRvbid0IGtub3cgd2hlcmUgLm9wZW4oKSBtaWdodCBiZSBjYWxsZWQgZnJvbS5cbiAgICAgIC8vIEV4LiBvcGVuaW5nIHBvcG92ZXIgZnJvbSBvbmUgb2YgbGlmZWN5Y2xlIGhvb2tzIHRoYXQgcnVuIGFmdGVyIHRoZSBDRFxuICAgICAgLy8gKHNheSBmcm9tIG5nQWZ0ZXJWaWV3SW5pdCkgd2lsbCByZXN1bHQgaW4gJ0V4cHJlc3Npb25IYXNDaGFuZ2VkJyBleGNlcHRpb25cbiAgICAgIHRoaXMuX3dpbmRvd1JlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgIC8vIFdlIG5lZWQgdG8gbWFyayBmb3IgY2hlY2ssIGJlY2F1c2UgcG9wb3ZlciB3b24ndCB3b3JrIGluc2lkZSB0aGUgT25QdXNoIGNvbXBvbmVudC5cbiAgICAgIC8vIEV4LiB3aGVuIHdlIHVzZSBleHByZXNzaW9uIGxpa2UgYHt7IHBvcG92ZXIuaXNPcGVuKCkgOiAnb3BlbmVkJyA6ICdjbG9zZWQnIH19YFxuICAgICAgLy8gaW5zaWRlIHRoZSB0ZW1wbGF0ZSBvZiBhbiBPblB1c2ggY29tcG9uZW50IGFuZCB3ZSBjaGFuZ2UgdGhlIHBvcG92ZXIgZnJvbVxuICAgICAgLy8gb3BlbiAtPiBjbG9zZWQsIHRoZSBleHByZXNzaW9uIGluIHF1ZXN0aW9uIHdvbid0IGJlIHVwZGF0ZWQgdW5sZXNzIHdlIGV4cGxpY2l0bHlcbiAgICAgIC8vIG1hcmsgdGhlIHBhcmVudCBjb21wb25lbnQgdG8gYmUgY2hlY2tlZC5cbiAgICAgIHRoaXMuX3dpbmRvd1JlZi5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcblxuICAgICAgbmdiQXV0b0Nsb3NlKFxuICAgICAgICAgIHRoaXMuX25nWm9uZSwgdGhpcy5fZG9jdW1lbnQsIHRoaXMuYXV0b0Nsb3NlLCAoKSA9PiB0aGlzLmNsb3NlKCksIHRoaXMuaGlkZGVuLFxuICAgICAgICAgIFt0aGlzLl93aW5kb3dSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudF0pO1xuICAgICAgdGhpcy5zaG93bi5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyB0aGUgcG9wb3Zlci5cbiAgICpcbiAgICogVGhpcyBpcyBjb25zaWRlcmVkIHRvIGJlIGEgXCJtYW51YWxcIiB0cmlnZ2VyaW5nIG9mIHRoZSBwb3BvdmVyLlxuICAgKi9cbiAgY2xvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3dpbmRvd1JlZikge1xuICAgICAgdGhpcy5fcmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2FyaWEtZGVzY3JpYmVkYnknKTtcbiAgICAgIHRoaXMuX3BvcHVwU2VydmljZS5jbG9zZSgpO1xuICAgICAgdGhpcy5fd2luZG93UmVmID0gbnVsbDtcbiAgICAgIHRoaXMuaGlkZGVuLmVtaXQoKTtcbiAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIHRoZSBwb3BvdmVyLlxuICAgKlxuICAgKiBUaGlzIGlzIGNvbnNpZGVyZWQgdG8gYmUgYSBcIm1hbnVhbFwiIHRyaWdnZXJpbmcgb2YgdGhlIHBvcG92ZXIuXG4gICAqL1xuICB0b2dnbGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3dpbmRvd1JlZikge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wZW4oKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAsIGlmIHRoZSBwb3BvdmVyIGlzIGN1cnJlbnRseSBzaG93bi5cbiAgICovXG4gIGlzT3BlbigpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX3dpbmRvd1JlZiAhPSBudWxsOyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5fdW5yZWdpc3Rlckxpc3RlbmVyc0ZuID0gbGlzdGVuVG9UcmlnZ2VycyhcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIsIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgdGhpcy50cmlnZ2VycywgdGhpcy5pc09wZW4uYmluZCh0aGlzKSwgdGhpcy5vcGVuLmJpbmQodGhpcyksXG4gICAgICAgIHRoaXMuY2xvc2UuYmluZCh0aGlzKSwgK3RoaXMub3BlbkRlbGF5LCArdGhpcy5jbG9zZURlbGF5KTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAvLyBjbG9zZSBwb3BvdmVyIGlmIHRpdGxlIGFuZCBjb250ZW50IGJlY29tZSBlbXB0eSwgb3IgZGlzYWJsZVBvcG92ZXIgc2V0IHRvIHRydWVcbiAgICBpZiAoKGNoYW5nZXNbJ25nYlBvcG92ZXInXSB8fCBjaGFuZ2VzWydwb3BvdmVyVGl0bGUnXSB8fCBjaGFuZ2VzWydkaXNhYmxlUG9wb3ZlciddKSAmJiB0aGlzLl9pc0Rpc2FibGVkKCkpIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmNsb3NlKCk7XG4gICAgLy8gVGhpcyBjaGVjayBpcyBuZWVkZWQgYXMgaXQgbWlnaHQgaGFwcGVuIHRoYXQgbmdPbkRlc3Ryb3kgaXMgY2FsbGVkIGJlZm9yZSBuZ09uSW5pdFxuICAgIC8vIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucywgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcC9pc3N1ZXMvMjE5OVxuICAgIGlmICh0aGlzLl91bnJlZ2lzdGVyTGlzdGVuZXJzRm4pIHtcbiAgICAgIHRoaXMuX3VucmVnaXN0ZXJMaXN0ZW5lcnNGbigpO1xuICAgIH1cbiAgICB0aGlzLl96b25lU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/popover/popover.module.js b/dist/sunbird-ui-components/esm5/popover/popover.module.js new file mode 100644 index 0000000..604f131 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/popover/popover.module.js @@ -0,0 +1,24 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgModule } from '@angular/core'; +import { NgbPopover, NgbPopoverWindow } from './popover'; +import { CommonModule } from '@angular/common'; +export { NgbPopover } from './popover'; +export { NgbPopoverConfig } from './popover-config'; +var NgbPopoverModule = /** @class */ (function () { + function NgbPopoverModule() { + } + NgbPopoverModule.decorators = [ + { type: NgModule, args: [{ + declarations: [NgbPopover, NgbPopoverWindow], + exports: [NgbPopover], + imports: [CommonModule], + entryComponents: [NgbPopoverWindow] + },] } + ]; + return NgbPopoverModule; +}()); +export { NgbPopoverModule }; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5tb2R1bGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJwb3BvdmVyL3BvcG92ZXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXZDLE9BQU8sRUFBQyxVQUFVLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDdkQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRTdDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDckMsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFHbEQ7SUFBQTtJQU9BLENBQUM7O2dCQVBBLFFBQVEsU0FBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyxVQUFVLEVBQUUsZ0JBQWdCLENBQUM7b0JBQzVDLE9BQU8sRUFBRSxDQUFDLFVBQVUsQ0FBQztvQkFDckIsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO29CQUN2QixlQUFlLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztpQkFDcEM7O0lBRUQsdUJBQUM7Q0FBQSxBQVBELElBT0M7U0FEWSxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge05nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtOZ2JQb3BvdmVyLCBOZ2JQb3BvdmVyV2luZG93fSBmcm9tICcuL3BvcG92ZXInO1xuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmV4cG9ydCB7TmdiUG9wb3Zlcn0gZnJvbSAnLi9wb3BvdmVyJztcbmV4cG9ydCB7TmdiUG9wb3ZlckNvbmZpZ30gZnJvbSAnLi9wb3BvdmVyLWNvbmZpZyc7XG5leHBvcnQge1BsYWNlbWVudH0gZnJvbSAnLi4vdXRpbC9wb3NpdGlvbmluZyc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW05nYlBvcG92ZXIsIE5nYlBvcG92ZXJXaW5kb3ddLFxuICBleHBvcnRzOiBbTmdiUG9wb3Zlcl0sXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBlbnRyeUNvbXBvbmVudHM6IFtOZ2JQb3BvdmVyV2luZG93XVxufSlcbmV4cG9ydCBjbGFzcyBOZ2JQb3BvdmVyTW9kdWxlIHtcbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/progressbar/progressbar-config.js b/dist/sunbird-ui-components/esm5/progressbar/progressbar-config.js new file mode 100644 index 0000000..b72150c --- /dev/null +++ b/dist/sunbird-ui-components/esm5/progressbar/progressbar-config.js @@ -0,0 +1,41 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Injectable } from '@angular/core'; +import * as i0 from "@angular/core"; +/** + * A configuration service for the [`NgbProgressbar`](#/components/progressbar/api#NgbProgressbar) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the progress bars used in the application. + */ +var NgbProgressbarConfig = /** @class */ (function () { + function NgbProgressbarConfig() { + this.max = 100; + this.animated = false; + this.striped = false; + this.showValue = false; + } + NgbProgressbarConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ NgbProgressbarConfig.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function NgbProgressbarConfig_Factory() { return new NgbProgressbarConfig(); }, token: NgbProgressbarConfig, providedIn: "root" }); + return NgbProgressbarConfig; +}()); +export { NgbProgressbarConfig }; +if (false) { + /** @type {?} */ + NgbProgressbarConfig.prototype.max; + /** @type {?} */ + NgbProgressbarConfig.prototype.animated; + /** @type {?} */ + NgbProgressbarConfig.prototype.striped; + /** @type {?} */ + NgbProgressbarConfig.prototype.type; + /** @type {?} */ + NgbProgressbarConfig.prototype.showValue; + /** @type {?} */ + NgbProgressbarConfig.prototype.height; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3NiYXItY29uZmlnLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsicHJvZ3Jlc3NiYXIvcHJvZ3Jlc3NiYXItY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQVF6QztJQUFBO1FBRUUsUUFBRyxHQUFHLEdBQUcsQ0FBQztRQUNWLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUVoQixjQUFTLEdBQUcsS0FBSyxDQUFDO0tBRW5COztnQkFSQSxVQUFVLFNBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDOzs7K0JBUmhDO0NBZ0JDLEFBUkQsSUFRQztTQVBZLG9CQUFvQjs7O0lBQy9CLG1DQUFVOztJQUNWLHdDQUFpQjs7SUFDakIsdUNBQWdCOztJQUNoQixvQ0FBYTs7SUFDYix5Q0FBa0I7O0lBQ2xCLHNDQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBBIGNvbmZpZ3VyYXRpb24gc2VydmljZSBmb3IgdGhlIFtgTmdiUHJvZ3Jlc3NiYXJgXSgjL2NvbXBvbmVudHMvcHJvZ3Jlc3NiYXIvYXBpI05nYlByb2dyZXNzYmFyKSBjb21wb25lbnQuXG4gKlxuICogWW91IGNhbiBpbmplY3QgdGhpcyBzZXJ2aWNlLCB0eXBpY2FsbHkgaW4geW91ciByb290IGNvbXBvbmVudCwgYW5kIGN1c3RvbWl6ZSB0aGUgdmFsdWVzIG9mIGl0cyBwcm9wZXJ0aWVzIGluXG4gKiBvcmRlciB0byBwcm92aWRlIGRlZmF1bHQgdmFsdWVzIGZvciBhbGwgdGhlIHByb2dyZXNzIGJhcnMgdXNlZCBpbiB0aGUgYXBwbGljYXRpb24uXG4gKi9cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIE5nYlByb2dyZXNzYmFyQ29uZmlnIHtcbiAgbWF4ID0gMTAwO1xuICBhbmltYXRlZCA9IGZhbHNlO1xuICBzdHJpcGVkID0gZmFsc2U7XG4gIHR5cGU6IHN0cmluZztcbiAgc2hvd1ZhbHVlID0gZmFsc2U7XG4gIGhlaWdodDogc3RyaW5nO1xufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/progressbar/progressbar.js b/dist/sunbird-ui-components/esm5/progressbar/progressbar.js new file mode 100644 index 0000000..83d7b47 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/progressbar/progressbar.js @@ -0,0 +1,108 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Component, Input, ChangeDetectionStrategy } from '@angular/core'; +import { getValueInRange } from '../util/util'; +import { NgbProgressbarConfig } from './progressbar-config'; +/** + * A directive that provides feedback on the progress of a workflow or an action. + */ +var NgbProgressbar = /** @class */ (function () { + function NgbProgressbar(config) { + /** + * The current value for the progress bar. + * + * Should be in the `[0, max]` range. + */ + this.value = 0; + this.max = config.max; + this.animated = config.animated; + this.striped = config.striped; + this.type = config.type; + this.showValue = config.showValue; + this.height = config.height; + } + /** + * @return {?} + */ + NgbProgressbar.prototype.getValue = /** + * @return {?} + */ + function () { return getValueInRange(this.value, this.max); }; + /** + * @return {?} + */ + NgbProgressbar.prototype.getPercentValue = /** + * @return {?} + */ + function () { return 100 * this.getValue() / this.max; }; + NgbProgressbar.decorators = [ + { type: Component, args: [{ + selector: 'ngb-progressbar', + changeDetection: ChangeDetectionStrategy.OnPush, + template: "\n
\n
\n {{getPercentValue()}}%\n
\n
\n " + }] } + ]; + /** @nocollapse */ + NgbProgressbar.ctorParameters = function () { return [ + { type: NgbProgressbarConfig } + ]; }; + NgbProgressbar.propDecorators = { + max: [{ type: Input }], + animated: [{ type: Input }], + striped: [{ type: Input }], + showValue: [{ type: Input }], + type: [{ type: Input }], + value: [{ type: Input }], + height: [{ type: Input }] + }; + return NgbProgressbar; +}()); +export { NgbProgressbar }; +if (false) { + /** + * The maximal value to be displayed in the progressbar. + * @type {?} + */ + NgbProgressbar.prototype.max; + /** + * If `true`, the stripes on the progressbar are animated. + * + * Takes effect only for browsers supporting CSS3 animations, and if `striped` is `true`. + * @type {?} + */ + NgbProgressbar.prototype.animated; + /** + * If `true`, the progress bars will be displayed as striped. + * @type {?} + */ + NgbProgressbar.prototype.striped; + /** + * If `true`, the current percentage will be shown in the `xx%` format. + * @type {?} + */ + NgbProgressbar.prototype.showValue; + /** + * The type of the progress bar. + * + * Currently Bootstrap supports `"success"`, `"info"`, `"warning"` or `"danger"`. + * @type {?} + */ + NgbProgressbar.prototype.type; + /** + * The current value for the progress bar. + * + * Should be in the `[0, max]` range. + * @type {?} + */ + NgbProgressbar.prototype.value; + /** + * THe height of the progress bar. + * + * Accepts any valid CSS height values, ex. `"2rem"` + * @type {?} + */ + NgbProgressbar.prototype.height; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3NiYXIuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJwcm9ncmVzc2Jhci9wcm9ncmVzc2Jhci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsdUJBQXVCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUM3QyxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQzs7OztBQUsxRDtJQXlERSx3QkFBWSxNQUE0Qjs7Ozs7O1FBVC9CLFVBQUssR0FBRyxDQUFDLENBQUM7UUFVakIsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUNoQyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDOUIsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQztRQUNsQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDOUIsQ0FBQzs7OztJQUVELGlDQUFROzs7SUFBUixjQUFhLE9BQU8sZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7OztJQUU1RCx3Q0FBZTs7O0lBQWYsY0FBb0IsT0FBTyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDOztnQkFwRS9ELFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsaUJBQWlCO29CQUMzQixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsUUFBUSxFQUFFLG9nQkFRVDtpQkFDRjs7OztnQkFqQk8sb0JBQW9COzs7c0JBc0J6QixLQUFLOzJCQU9MLEtBQUs7MEJBS0wsS0FBSzs0QkFLTCxLQUFLO3VCQU9MLEtBQUs7d0JBT0wsS0FBSzt5QkFPTCxLQUFLOztJQWNSLHFCQUFDO0NBQUEsQUFyRUQsSUFxRUM7U0F4RFksY0FBYzs7Ozs7O0lBSXpCLDZCQUFxQjs7Ozs7OztJQU9yQixrQ0FBMkI7Ozs7O0lBSzNCLGlDQUEwQjs7Ozs7SUFLMUIsbUNBQTRCOzs7Ozs7O0lBTzVCLDhCQUFzQjs7Ozs7OztJQU90QiwrQkFBbUI7Ozs7Ozs7SUFPbkIsZ0NBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIElucHV0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge2dldFZhbHVlSW5SYW5nZX0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCB7TmdiUHJvZ3Jlc3NiYXJDb25maWd9IGZyb20gJy4vcHJvZ3Jlc3NiYXItY29uZmlnJztcblxuLyoqXG4gKiBBIGRpcmVjdGl2ZSB0aGF0IHByb3ZpZGVzIGZlZWRiYWNrIG9uIHRoZSBwcm9ncmVzcyBvZiBhIHdvcmtmbG93IG9yIGFuIGFjdGlvbi5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmdiLXByb2dyZXNzYmFyJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cInByb2dyZXNzXCIgW3N0eWxlLmhlaWdodF09XCJoZWlnaHRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1iYXJ7e3R5cGUgPyAnIGJnLScgKyB0eXBlIDogJyd9fXt7YW5pbWF0ZWQgPyAnIHByb2dyZXNzLWJhci1hbmltYXRlZCcgOiAnJ319e3tzdHJpcGVkID9cbiAgICAnIHByb2dyZXNzLWJhci1zdHJpcGVkJyA6ICcnfX1cIiByb2xlPVwicHJvZ3Jlc3NiYXJcIiBbc3R5bGUud2lkdGguJV09XCJnZXRQZXJjZW50VmFsdWUoKVwiXG4gICAgW2F0dHIuYXJpYS12YWx1ZW5vd109XCJnZXRWYWx1ZSgpXCIgYXJpYS12YWx1ZW1pbj1cIjBcIiBbYXR0ci5hcmlhLXZhbHVlbWF4XT1cIm1heFwiPlxuICAgICAgICA8c3BhbiAqbmdJZj1cInNob3dWYWx1ZVwiIGkxOG49XCJAQG5nYi5wcm9ncmVzc2Jhci52YWx1ZVwiPnt7Z2V0UGVyY2VudFZhbHVlKCl9fSU8L3NwYW4+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGBcbn0pXG5leHBvcnQgY2xhc3MgTmdiUHJvZ3Jlc3NiYXIge1xuICAvKipcbiAgICogVGhlIG1heGltYWwgdmFsdWUgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBwcm9ncmVzc2Jhci5cbiAgICovXG4gIEBJbnB1dCgpIG1heDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBzdHJpcGVzIG9uIHRoZSBwcm9ncmVzc2JhciBhcmUgYW5pbWF0ZWQuXG4gICAqXG4gICAqIFRha2VzIGVmZmVjdCBvbmx5IGZvciBicm93c2VycyBzdXBwb3J0aW5nIENTUzMgYW5pbWF0aW9ucywgYW5kIGlmIGBzdHJpcGVkYCBpcyBgdHJ1ZWAuXG4gICAqL1xuICBASW5wdXQoKSBhbmltYXRlZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgcHJvZ3Jlc3MgYmFycyB3aWxsIGJlIGRpc3BsYXllZCBhcyBzdHJpcGVkLlxuICAgKi9cbiAgQElucHV0KCkgc3RyaXBlZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY3VycmVudCBwZXJjZW50YWdlIHdpbGwgYmUgc2hvd24gaW4gdGhlIGB4eCVgIGZvcm1hdC5cbiAgICovXG4gIEBJbnB1dCgpIHNob3dWYWx1ZTogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIHByb2dyZXNzIGJhci5cbiAgICpcbiAgICogQ3VycmVudGx5IEJvb3RzdHJhcCBzdXBwb3J0cyBgXCJzdWNjZXNzXCJgLCBgXCJpbmZvXCJgLCBgXCJ3YXJuaW5nXCJgIG9yIGBcImRhbmdlclwiYC5cbiAgICovXG4gIEBJbnB1dCgpIHR5cGU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgdmFsdWUgZm9yIHRoZSBwcm9ncmVzcyBiYXIuXG4gICAqXG4gICAqIFNob3VsZCBiZSBpbiB0aGUgYFswLCBtYXhdYCByYW5nZS5cbiAgICovXG4gIEBJbnB1dCgpIHZhbHVlID0gMDtcblxuICAvKipcbiAgICogVEhlIGhlaWdodCBvZiB0aGUgcHJvZ3Jlc3MgYmFyLlxuICAgKlxuICAgKiBBY2NlcHRzIGFueSB2YWxpZCBDU1MgaGVpZ2h0IHZhbHVlcywgZXguIGBcIjJyZW1cImBcbiAgICovXG4gIEBJbnB1dCgpIGhlaWdodDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogTmdiUHJvZ3Jlc3NiYXJDb25maWcpIHtcbiAgICB0aGlzLm1heCA9IGNvbmZpZy5tYXg7XG4gICAgdGhpcy5hbmltYXRlZCA9IGNvbmZpZy5hbmltYXRlZDtcbiAgICB0aGlzLnN0cmlwZWQgPSBjb25maWcuc3RyaXBlZDtcbiAgICB0aGlzLnR5cGUgPSBjb25maWcudHlwZTtcbiAgICB0aGlzLnNob3dWYWx1ZSA9IGNvbmZpZy5zaG93VmFsdWU7XG4gICAgdGhpcy5oZWlnaHQgPSBjb25maWcuaGVpZ2h0O1xuICB9XG5cbiAgZ2V0VmFsdWUoKSB7IHJldHVybiBnZXRWYWx1ZUluUmFuZ2UodGhpcy52YWx1ZSwgdGhpcy5tYXgpOyB9XG5cbiAgZ2V0UGVyY2VudFZhbHVlKCkgeyByZXR1cm4gMTAwICogdGhpcy5nZXRWYWx1ZSgpIC8gdGhpcy5tYXg7IH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/progressbar/progressbar.module.js b/dist/sunbird-ui-components/esm5/progressbar/progressbar.module.js new file mode 100644 index 0000000..f6fdf0e --- /dev/null +++ b/dist/sunbird-ui-components/esm5/progressbar/progressbar.module.js @@ -0,0 +1,19 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { NgbProgressbar } from './progressbar'; +export { NgbProgressbar } from './progressbar'; +export { NgbProgressbarConfig } from './progressbar-config'; +var NgbProgressbarModule = /** @class */ (function () { + function NgbProgressbarModule() { + } + NgbProgressbarModule.decorators = [ + { type: NgModule, args: [{ declarations: [NgbProgressbar], exports: [NgbProgressbar], imports: [CommonModule] },] } + ]; + return NgbProgressbarModule; +}()); +export { NgbProgressbarModule }; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3NiYXIubW9kdWxlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsicHJvZ3Jlc3NiYXIvcHJvZ3Jlc3NiYXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUU3QyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRTdDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDN0MsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFMUQ7SUFBQTtJQUVBLENBQUM7O2dCQUZBLFFBQVEsU0FBQyxFQUFDLFlBQVksRUFBRSxDQUFDLGNBQWMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLGNBQWMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFDOztJQUU5RiwyQkFBQztDQUFBLEFBRkQsSUFFQztTQURZLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmltcG9ydCB7TmdiUHJvZ3Jlc3NiYXJ9IGZyb20gJy4vcHJvZ3Jlc3NiYXInO1xuXG5leHBvcnQge05nYlByb2dyZXNzYmFyfSBmcm9tICcuL3Byb2dyZXNzYmFyJztcbmV4cG9ydCB7TmdiUHJvZ3Jlc3NiYXJDb25maWd9IGZyb20gJy4vcHJvZ3Jlc3NiYXItY29uZmlnJztcblxuQE5nTW9kdWxlKHtkZWNsYXJhdGlvbnM6IFtOZ2JQcm9ncmVzc2Jhcl0sIGV4cG9ydHM6IFtOZ2JQcm9ncmVzc2Jhcl0sIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdfSlcbmV4cG9ydCBjbGFzcyBOZ2JQcm9ncmVzc2Jhck1vZHVsZSB7XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/rating/rating-config.js b/dist/sunbird-ui-components/esm5/rating/rating-config.js new file mode 100644 index 0000000..1855c66 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/rating/rating-config.js @@ -0,0 +1,34 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Injectable } from '@angular/core'; +import * as i0 from "@angular/core"; +/** + * A configuration service for the [`NgbRating`](#/components/rating/api#NgbRating) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the ratings used in the application. + */ +var NgbRatingConfig = /** @class */ (function () { + function NgbRatingConfig() { + this.max = 10; + this.readonly = false; + this.resettable = false; + } + NgbRatingConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ NgbRatingConfig.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function NgbRatingConfig_Factory() { return new NgbRatingConfig(); }, token: NgbRatingConfig, providedIn: "root" }); + return NgbRatingConfig; +}()); +export { NgbRatingConfig }; +if (false) { + /** @type {?} */ + NgbRatingConfig.prototype.max; + /** @type {?} */ + NgbRatingConfig.prototype.readonly; + /** @type {?} */ + NgbRatingConfig.prototype.resettable; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF0aW5nLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbInJhdGluZy9yYXRpbmctY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQVF6QztJQUFBO1FBRUUsUUFBRyxHQUFHLEVBQUUsQ0FBQztRQUNULGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsZUFBVSxHQUFHLEtBQUssQ0FBQztLQUNwQjs7Z0JBTEEsVUFBVSxTQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQzs7OzBCQVJoQztDQWFDLEFBTEQsSUFLQztTQUpZLGVBQWU7OztJQUMxQiw4QkFBUzs7SUFDVCxtQ0FBaUI7O0lBQ2pCLHFDQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogQSBjb25maWd1cmF0aW9uIHNlcnZpY2UgZm9yIHRoZSBbYE5nYlJhdGluZ2BdKCMvY29tcG9uZW50cy9yYXRpbmcvYXBpI05nYlJhdGluZykgY29tcG9uZW50LlxuICpcbiAqIFlvdSBjYW4gaW5qZWN0IHRoaXMgc2VydmljZSwgdHlwaWNhbGx5IGluIHlvdXIgcm9vdCBjb21wb25lbnQsIGFuZCBjdXN0b21pemUgdGhlIHZhbHVlcyBvZiBpdHMgcHJvcGVydGllcyBpblxuICogb3JkZXIgdG8gcHJvdmlkZSBkZWZhdWx0IHZhbHVlcyBmb3IgYWxsIHRoZSByYXRpbmdzIHVzZWQgaW4gdGhlIGFwcGxpY2F0aW9uLlxuICovXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBOZ2JSYXRpbmdDb25maWcge1xuICBtYXggPSAxMDtcbiAgcmVhZG9ubHkgPSBmYWxzZTtcbiAgcmVzZXR0YWJsZSA9IGZhbHNlO1xufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/rating/rating.js b/dist/sunbird-ui-components/esm5/rating/rating.js new file mode 100644 index 0000000..3dceedf --- /dev/null +++ b/dist/sunbird-ui-components/esm5/rating/rating.js @@ -0,0 +1,391 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Component, ChangeDetectionStrategy, Input, Output, EventEmitter, TemplateRef, ContentChild, forwardRef, ChangeDetectorRef } from '@angular/core'; +import { NgbRatingConfig } from './rating-config'; +import { getValueInRange } from '../util/util'; +import { Key } from '../util/key'; +import { NG_VALUE_ACCESSOR } from '@angular/forms'; +/** + * The context for the custom star display template defined in the `starTemplate`. + * @record + */ +export function StarTemplateContext() { } +if (false) { + /** + * The star fill percentage, an integer in the `[0, 100]` range. + * @type {?} + */ + StarTemplateContext.prototype.fill; + /** + * Index of the star, starts with `0`. + * @type {?} + */ + StarTemplateContext.prototype.index; +} +/** @type {?} */ +var NGB_RATING_VALUE_ACCESSOR = { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef((/** + * @return {?} + */ + function () { return NgbRating; })), + multi: true +}; +/** + * A directive that helps visualising and interacting with a star rating bar. + */ +var NgbRating = /** @class */ (function () { + function NgbRating(config, _changeDetectorRef) { + this._changeDetectorRef = _changeDetectorRef; + this.contexts = []; + this.disabled = false; + /** + * An event emitted when the user is hovering over a given rating. + * + * Event payload equals to the rating being hovered over. + */ + this.hover = new EventEmitter(); + /** + * An event emitted when the user stops hovering over a given rating. + * + * Event payload equals to the rating of the last item being hovered over. + */ + this.leave = new EventEmitter(); + /** + * An event emitted when the user selects a new rating. + * + * Event payload equals to the newly selected rating. + */ + this.rateChange = new EventEmitter(true); + this.onChange = (/** + * @param {?} _ + * @return {?} + */ + function (_) { }); + this.onTouched = (/** + * @return {?} + */ + function () { }); + this.max = config.max; + this.readonly = config.readonly; + } + /** + * @return {?} + */ + NgbRating.prototype.ariaValueText = /** + * @return {?} + */ + function () { return this.nextRate + " out of " + this.max; }; + /** + * @param {?} value + * @return {?} + */ + NgbRating.prototype.enter = /** + * @param {?} value + * @return {?} + */ + function (value) { + if (!this.readonly && !this.disabled) { + this._updateState(value); + } + this.hover.emit(value); + }; + /** + * @return {?} + */ + NgbRating.prototype.handleBlur = /** + * @return {?} + */ + function () { this.onTouched(); }; + /** + * @param {?} value + * @return {?} + */ + NgbRating.prototype.handleClick = /** + * @param {?} value + * @return {?} + */ + function (value) { this.update(this.resettable && this.rate === value ? 0 : value); }; + /** + * @param {?} event + * @return {?} + */ + NgbRating.prototype.handleKeyDown = /** + * @param {?} event + * @return {?} + */ + function (event) { + // tslint:disable-next-line:deprecation + switch (event.which) { + case Key.ArrowDown: + case Key.ArrowLeft: + this.update(this.rate - 1); + break; + case Key.ArrowUp: + case Key.ArrowRight: + this.update(this.rate + 1); + break; + case Key.Home: + this.update(0); + break; + case Key.End: + this.update(this.max); + break; + default: + return; + } + // note 'return' in default case + event.preventDefault(); + }; + /** + * @param {?} changes + * @return {?} + */ + NgbRating.prototype.ngOnChanges = /** + * @param {?} changes + * @return {?} + */ + function (changes) { + if (changes['rate']) { + this.update(this.rate); + } + }; + /** + * @return {?} + */ + NgbRating.prototype.ngOnInit = /** + * @return {?} + */ + function () { + this.contexts = Array.from({ length: this.max }, (/** + * @param {?} v + * @param {?} k + * @return {?} + */ + function (v, k) { return ({ fill: 0, index: k }); })); + this._updateState(this.rate); + }; + /** + * @param {?} fn + * @return {?} + */ + NgbRating.prototype.registerOnChange = /** + * @param {?} fn + * @return {?} + */ + function (fn) { this.onChange = fn; }; + /** + * @param {?} fn + * @return {?} + */ + NgbRating.prototype.registerOnTouched = /** + * @param {?} fn + * @return {?} + */ + function (fn) { this.onTouched = fn; }; + /** + * @return {?} + */ + NgbRating.prototype.reset = /** + * @return {?} + */ + function () { + this.leave.emit(this.nextRate); + this._updateState(this.rate); + }; + /** + * @param {?} isDisabled + * @return {?} + */ + NgbRating.prototype.setDisabledState = /** + * @param {?} isDisabled + * @return {?} + */ + function (isDisabled) { this.disabled = isDisabled; }; + /** + * @param {?} value + * @param {?=} internalChange + * @return {?} + */ + NgbRating.prototype.update = /** + * @param {?} value + * @param {?=} internalChange + * @return {?} + */ + function (value, internalChange) { + if (internalChange === void 0) { internalChange = true; } + /** @type {?} */ + var newRate = getValueInRange(value, this.max, 0); + if (!this.readonly && !this.disabled && this.rate !== newRate) { + this.rate = newRate; + this.rateChange.emit(this.rate); + } + if (internalChange) { + this.onChange(this.rate); + this.onTouched(); + } + this._updateState(this.rate); + }; + /** + * @param {?} value + * @return {?} + */ + NgbRating.prototype.writeValue = /** + * @param {?} value + * @return {?} + */ + function (value) { + this.update(value, false); + this._changeDetectorRef.markForCheck(); + }; + /** + * @private + * @param {?} index + * @return {?} + */ + NgbRating.prototype._getFillValue = /** + * @private + * @param {?} index + * @return {?} + */ + function (index) { + /** @type {?} */ + var diff = this.nextRate - index; + if (diff >= 1) { + return 100; + } + if (diff < 1 && diff > 0) { + return parseInt((diff * 100).toFixed(2), 10); + } + return 0; + }; + /** + * @private + * @param {?} nextValue + * @return {?} + */ + NgbRating.prototype._updateState = /** + * @private + * @param {?} nextValue + * @return {?} + */ + function (nextValue) { + var _this = this; + this.nextRate = nextValue; + this.contexts.forEach((/** + * @param {?} context + * @param {?} index + * @return {?} + */ + function (context, index) { return context.fill = _this._getFillValue(index); })); + }; + NgbRating.decorators = [ + { type: Component, args: [{ + selector: 'ngb-rating', + changeDetection: ChangeDetectionStrategy.OnPush, + host: { + 'class': 'd-inline-flex', + 'tabindex': '0', + 'role': 'slider', + 'aria-valuemin': '0', + '[attr.aria-valuemax]': 'max', + '[attr.aria-valuenow]': 'nextRate', + '[attr.aria-valuetext]': 'ariaValueText()', + '[attr.aria-disabled]': 'readonly ? true : null', + '(blur)': 'handleBlur()', + '(keydown)': 'handleKeyDown($event)', + '(mouseleave)': 'reset()' + }, + template: "\n {{ fill === 100 ? '★' : '☆' }}\n \n ({{ index < nextRate ? '*' : ' ' }})\n \n \n \n \n \n ", + providers: [NGB_RATING_VALUE_ACCESSOR] + }] } + ]; + /** @nocollapse */ + NgbRating.ctorParameters = function () { return [ + { type: NgbRatingConfig }, + { type: ChangeDetectorRef } + ]; }; + NgbRating.propDecorators = { + max: [{ type: Input }], + rate: [{ type: Input }], + readonly: [{ type: Input }], + resettable: [{ type: Input }], + starTemplate: [{ type: Input }], + starTemplateFromContent: [{ type: ContentChild, args: [TemplateRef, { static: false },] }], + hover: [{ type: Output }], + leave: [{ type: Output }], + rateChange: [{ type: Output }] + }; + return NgbRating; +}()); +export { NgbRating }; +if (false) { + /** @type {?} */ + NgbRating.prototype.contexts; + /** @type {?} */ + NgbRating.prototype.disabled; + /** @type {?} */ + NgbRating.prototype.nextRate; + /** + * The maximal rating that can be given. + * @type {?} + */ + NgbRating.prototype.max; + /** + * The current rating. Could be a decimal value like `3.75`. + * @type {?} + */ + NgbRating.prototype.rate; + /** + * If `true`, the rating can't be changed. + * @type {?} + */ + NgbRating.prototype.readonly; + /** + * If `true`, the rating can be reset to `0` by mouse clicking currently set rating. + * @type {?} + */ + NgbRating.prototype.resettable; + /** + * The template to override the way each star is displayed. + * + * Alternatively put an `` as the only child of your `` element + * @type {?} + */ + NgbRating.prototype.starTemplate; + /** @type {?} */ + NgbRating.prototype.starTemplateFromContent; + /** + * An event emitted when the user is hovering over a given rating. + * + * Event payload equals to the rating being hovered over. + * @type {?} + */ + NgbRating.prototype.hover; + /** + * An event emitted when the user stops hovering over a given rating. + * + * Event payload equals to the rating of the last item being hovered over. + * @type {?} + */ + NgbRating.prototype.leave; + /** + * An event emitted when the user selects a new rating. + * + * Event payload equals to the newly selected rating. + * @type {?} + */ + NgbRating.prototype.rateChange; + /** @type {?} */ + NgbRating.prototype.onChange; + /** @type {?} */ + NgbRating.prototype.onTouched; + /** + * @type {?} + * @private + */ + NgbRating.prototype._changeDetectorRef; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF0aW5nLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsicmF0aW5nL3JhdGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCx1QkFBdUIsRUFDdkIsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBRVosV0FBVyxFQUdYLFlBQVksRUFDWixVQUFVLEVBQ1YsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQzdDLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDaEMsT0FBTyxFQUF1QixpQkFBaUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7OztBQUt2RSx5Q0FVQzs7Ozs7O0lBTkMsbUNBQWE7Ozs7O0lBS2Isb0NBQWM7OztJQUdWLHlCQUF5QixHQUFHO0lBQ2hDLE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVU7OztJQUFDLGNBQU0sT0FBQSxTQUFTLEVBQVQsQ0FBUyxFQUFDO0lBQ3hDLEtBQUssRUFBRSxJQUFJO0NBQ1o7Ozs7QUFLRDtJQXVGRSxtQkFBWSxNQUF1QixFQUFVLGtCQUFxQztRQUFyQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW1CO1FBekRsRixhQUFRLEdBQTBCLEVBQUUsQ0FBQztRQUNyQyxhQUFRLEdBQUcsS0FBSyxDQUFDOzs7Ozs7UUFxQ1AsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7Ozs7OztRQU9uQyxVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQzs7Ozs7O1FBT25DLGVBQVUsR0FBRyxJQUFJLFlBQVksQ0FBUyxJQUFJLENBQUMsQ0FBQztRQUV0RCxhQUFROzs7O1FBQUcsVUFBQyxDQUFN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QUFFLDRrQkFTVDtvQkFDRCxTQUFTLEVBQUUsQ0FBQyx5QkFBeUIsQ0FBQztpQkFDdkM7Ozs7Z0JBeERPLGVBQWU7Z0JBRnJCLGlCQUFpQjs7O3NCQXFFaEIsS0FBSzt1QkFLTCxLQUFLOzJCQUtMLEtBQUs7NkJBS0wsS0FBSzsrQkFPTCxLQUFLOzBDQUNMLFlBQVksU0FBQyxXQUFXLEVBQUUsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFDO3dCQU96QyxNQUFNO3dCQU9OLE1BQU07NkJBT04sTUFBTTs7SUF5R1QsZ0JBQUM7Q0FBQSxBQTNMRCxJQTJMQztTQS9KWSxTQUFTOzs7SUFFcEIsNkJBQXFDOztJQUNyQyw2QkFBaUI7O0lBQ2pCLDZCQUFpQjs7Ozs7SUFNakIsd0JBQXFCOzs7OztJQUtyQix5QkFBc0I7Ozs7O0lBS3RCLDZCQUEyQjs7Ozs7SUFLM0IsK0JBQTZCOzs7Ozs7O0lBTzdCLGlDQUF3RDs7SUFDeEQsNENBQXNHOzs7Ozs7O0lBT3RHLDBCQUE2Qzs7Ozs7OztJQU83QywwQkFBNkM7Ozs7Ozs7SUFPN0MsK0JBQXNEOztJQUV0RCw2QkFBMEI7O0lBQzFCLDhCQUFxQjs7Ozs7SUFFZ0IsdUNBQTZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBPbkluaXQsXG4gIFRlbXBsYXRlUmVmLFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIENvbnRlbnRDaGlsZCxcbiAgZm9yd2FyZFJlZixcbiAgQ2hhbmdlRGV0ZWN0b3JSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge05nYlJhdGluZ0NvbmZpZ30gZnJvbSAnLi9yYXRpbmctY29uZmlnJztcbmltcG9ydCB7Z2V0VmFsdWVJblJhbmdlfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IHtLZXl9IGZyb20gJy4uL3V0aWwva2V5JztcbmltcG9ydCB7Q29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbi8qKlxuICogVGhlIGNvbnRleHQgZm9yIHRoZSBjdXN0b20gc3RhciBkaXNwbGF5IHRlbXBsYXRlIGRlZmluZWQgaW4gdGhlIGBzdGFyVGVtcGxhdGVgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0YXJUZW1wbGF0ZUNvbnRleHQge1xuICAvKipcbiAgICogVGhlIHN0YXIgZmlsbCBwZXJjZW50YWdlLCBhbiBpbnRlZ2VyIGluIHRoZSBgWzAsIDEwMF1gIHJhbmdlLlxuICAgKi9cbiAgZmlsbDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBJbmRleCBvZiB0aGUgc3Rhciwgc3RhcnRzIHdpdGggYDBgLlxuICAgKi9cbiAgaW5kZXg6IG51bWJlcjtcbn1cblxuY29uc3QgTkdCX1JBVElOR19WQUxVRV9BQ0NFU1NPUiA9IHtcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE5nYlJhdGluZyksXG4gIG11bHRpOiB0cnVlXG59O1xuXG4vKipcbiAqIEEgZGlyZWN0aXZlIHRoYXQgaGVscHMgdmlzdWFsaXNpbmcgYW5kIGludGVyYWN0aW5nIHdpdGggYSBzdGFyIHJhdGluZyBiYXIuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25nYi1yYXRpbmcnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaG9zdDoge1xuICAgICdjbGFzcyc6ICdkLWlubGluZS1mbGV4JyxcbiAgICAndGFiaW5kZXgnOiAnMCcsXG4gICAgJ3JvbGUnOiAnc2xpZGVyJyxcbiAgICAnYXJpYS12YWx1ZW1pbic6ICcwJyxcbiAgICAnW2F0dHIuYXJpYS12YWx1ZW1heF0nOiAnbWF4JyxcbiAgICAnW2F0dHIuYXJpYS12YWx1ZW5vd10nOiAnbmV4dFJhdGUnLFxuICAgICdbYXR0ci5hcmlhLXZhbHVldGV4dF0nOiAnYXJpYVZhbHVlVGV4dCgpJyxcbiAgICAnW2F0dHIuYXJpYS1kaXNhYmxlZF0nOiAncmVhZG9ubHkgPyB0cnVlIDogbnVsbCcsXG4gICAgJyhibHVyKSc6ICdoYW5kbGVCbHVyKCknLFxuICAgICcoa2V5ZG93biknOiAnaGFuZGxlS2V5RG93bigkZXZlbnQpJyxcbiAgICAnKG1vdXNlbGVhdmUpJzogJ3Jlc2V0KCknXG4gIH0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPG5nLXRlbXBsYXRlICN0IGxldC1maWxsPVwiZmlsbFwiPnt7IGZpbGwgPT09IDEwMCA/ICcmIzk3MzM7JyA6ICcmIzk3MzQ7JyB9fTwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlIG5nRm9yIFtuZ0Zvck9mXT1cImNvbnRleHRzXCIgbGV0LWluZGV4PVwiaW5kZXhcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPih7eyBpbmRleCA8IG5leHRSYXRlID8gJyonIDogJyAnIH19KTwvc3Bhbj5cbiAgICAgIDxzcGFuIChtb3VzZWVudGVyKT1cImVudGVyKGluZGV4ICsgMSlcIiAoY2xpY2spPVwiaGFuZGxlQ2xpY2soaW5kZXggKyAxKVwiIFtzdHlsZS5jdXJzb3JdPVwicmVhZG9ubHkgfHwgZGlzYWJsZWQgPyAnZGVmYXVsdCcgOiAncG9pbnRlcidcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInN0YXJUZW1wbGF0ZSB8fCBzdGFyVGVtcGxhdGVGcm9tQ29udGVudCB8fCB0XCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImNvbnRleHRzW2luZGV4XVwiPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9zcGFuPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIGAsXG4gIHByb3ZpZGVyczogW05HQl9SQVRJTkdfVkFMVUVfQUNDRVNTT1JdXG59KVxuZXhwb3J0IGNsYXNzIE5nYlJhdGluZyBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICAgIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgY29udGV4dHM6IFN0YXJUZW1wbGF0ZUNvbnRleHRbXSA9IFtdO1xuICBkaXNhYmxlZCA9IGZhbHNlO1xuICBuZXh0UmF0ZTogbnVtYmVyO1xuXG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbWFsIHJhdGluZyB0aGF0IGNhbiBiZSBnaXZlbi5cbiAgICovXG4gIEBJbnB1dCgpIG1heDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCByYXRpbmcuIENvdWxkIGJlIGEgZGVjaW1hbCB2YWx1ZSBsaWtlIGAzLjc1YC5cbiAgICovXG4gIEBJbnB1dCgpIHJhdGU6IG51bWJlcjtcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgcmF0aW5nIGNhbid0IGJlIGNoYW5nZWQuXG4gICAqL1xuICBASW5wdXQoKSByZWFkb25seTogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgcmF0aW5nIGNhbiBiZSByZXNldCB0byBgMGAgYnkgbW91c2UgY2xpY2tpbmcgY3VycmVudGx5IHNldCByYXRpbmcuXG4gICAqL1xuICBASW5wdXQoKSByZXNldHRhYmxlOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdG8gb3ZlcnJpZGUgdGhlIHdheSBlYWNoIHN0YXIgaXMgZGlzcGxheWVkLlxuICAgKlxuICAgKiBBbHRlcm5hdGl2ZWx5IHB1dCBhbiBgPG5nLXRlbXBsYXRlPmAgYXMgdGhlIG9ubHkgY2hpbGQgb2YgeW91ciBgPG5nYi1yYXRpbmc+YCBlbGVtZW50XG4gICAqL1xuICBASW5wdXQoKSBzdGFyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPFN0YXJUZW1wbGF0ZUNvbnRleHQ+O1xuICBAQ29udGVudENoaWxkKFRlbXBsYXRlUmVmLCB7c3RhdGljOiBmYWxzZX0pIHN0YXJUZW1wbGF0ZUZyb21Db250ZW50OiBUZW1wbGF0ZVJlZjxTdGFyVGVtcGxhdGVDb250ZXh0PjtcblxuICAvKipcbiAgICogQW4gZXZlbnQgZW1pdHRlZCB3aGVuIHRoZSB1c2VyIGlzIGhvdmVyaW5nIG92ZXIgYSBnaXZlbiByYXRpbmcuXG4gICAqXG4gICAqIEV2ZW50IHBheWxvYWQgZXF1YWxzIHRvIHRoZSByYXRpbmcgYmVpbmcgaG92ZXJlZCBvdmVyLlxuICAgKi9cbiAgQE91dHB1dCgpIGhvdmVyID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgLyoqXG4gICAqIEFuIGV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgdXNlciBzdG9wcyBob3ZlcmluZyBvdmVyIGEgZ2l2ZW4gcmF0aW5nLlxuICAgKlxuICAgKiBFdmVudCBwYXlsb2FkIGVxdWFscyB0byB0aGUgcmF0aW5nIG9mIHRoZSBsYXN0IGl0ZW0gYmVpbmcgaG92ZXJlZCBvdmVyLlxuICAgKi9cbiAgQE91dHB1dCgpIGxlYXZlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgLyoqXG4gICAqIEFuIGV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgdXNlciBzZWxlY3RzIGEgbmV3IHJhdGluZy5cbiAgICpcbiAgICogRXZlbnQgcGF5bG9hZCBlcXVhbHMgdG8gdGhlIG5ld2x5IHNlbGVjdGVkIHJhdGluZy5cbiAgICovXG4gIEBPdXRwdXQoKSByYXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KHRydWUpO1xuXG4gIG9uQ2hhbmdlID0gKF86IGFueSkgPT4ge307XG4gIG9uVG91Y2hlZCA9ICgpID0+IHt9O1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogTmdiUmF0aW5nQ29uZmlnLCBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICB0aGlzLm1heCA9IGNvbmZpZy5tYXg7XG4gICAgdGhpcy5yZWFkb25seSA9IGNvbmZpZy5yZWFkb25seTtcbiAgfVxuXG4gIGFyaWFWYWx1ZVRleHQoKSB7IHJldHVybiBgJHt0aGlzLm5leHRSYXRlfSBvdXQgb2YgJHt0aGlzLm1heH1gOyB9XG5cbiAgZW50ZXIodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5yZWFkb25seSAmJiAhdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5fdXBkYXRlU3RhdGUodmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLmhvdmVyLmVtaXQodmFsdWUpO1xuICB9XG5cbiAgaGFuZGxlQmx1cigpIHsgdGhpcy5vblRvdWNoZWQoKTsgfVxuXG4gIGhhbmRsZUNsaWNrKHZhbHVlOiBudW1iZXIpIHsgdGhpcy51cGRhdGUodGhpcy5yZXNldHRhYmxlICYmIHRoaXMucmF0ZSA9PT0gdmFsdWUgPyAwIDogdmFsdWUpOyB9XG5cbiAgaGFuZGxlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpkZXByZWNhdGlvblxuICAgIHN3aXRjaCAoZXZlbnQud2hpY2gpIHtcbiAgICAgIGNhc2UgS2V5LkFycm93RG93bjpcbiAgICAgIGNhc2UgS2V5LkFycm93TGVmdDpcbiAgICAgICAgdGhpcy51cGRhdGUodGhpcy5yYXRlIC0gMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBLZXkuQXJyb3dVcDpcbiAgICAgIGNhc2UgS2V5LkFycm93UmlnaHQ6XG4gICAgICAgIHRoaXMudXBkYXRlKHRoaXMucmF0ZSArIDEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgS2V5LkhvbWU6XG4gICAgICAgIHRoaXMudXBkYXRlKDApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgS2V5LkVuZDpcbiAgICAgICAgdGhpcy51cGRhdGUodGhpcy5tYXgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBub3RlICdyZXR1cm4nIGluIGRlZmF1bHQgY2FzZVxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXNbJ3JhdGUnXSkge1xuICAgICAgdGhpcy51cGRhdGUodGhpcy5yYXRlKTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRleHRzID0gQXJyYXkuZnJvbSh7bGVuZ3RoOiB0aGlzLm1heH0sICh2LCBrKSA9PiAoe2ZpbGw6IDAsIGluZGV4OiBrfSkpO1xuICAgIHRoaXMuX3VwZGF0ZVN0YXRlKHRoaXMucmF0ZSk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IGFueSkgPT4gYW55KTogdm9pZCB7IHRoaXMub25DaGFuZ2UgPSBmbjsgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiBhbnkpOiB2b2lkIHsgdGhpcy5vblRvdWNoZWQgPSBmbjsgfVxuXG4gIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMubGVhdmUuZW1pdCh0aGlzLm5leHRSYXRlKTtcbiAgICB0aGlzLl91cGRhdGVTdGF0ZSh0aGlzLnJhdGUpO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKSB7IHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkOyB9XG5cbiAgdXBkYXRlKHZhbHVlOiBudW1iZXIsIGludGVybmFsQ2hhbmdlID0gdHJ1ZSk6IHZvaWQge1xuICAgIGNvbnN0IG5ld1JhdGUgPSBnZXRWYWx1ZUluUmFuZ2UodmFsdWUsIHRoaXMubWF4LCAwKTtcbiAgICBpZiAoIXRoaXMucmVhZG9ubHkgJiYgIXRoaXMuZGlzYWJsZWQgJiYgdGhpcy5yYXRlICE9PSBuZXdSYXRlKSB7XG4gICAgICB0aGlzLnJhdGUgPSBuZXdSYXRlO1xuICAgICAgdGhpcy5yYXRlQ2hhbmdlLmVtaXQodGhpcy5yYXRlKTtcbiAgICB9XG4gICAgaWYgKGludGVybmFsQ2hhbmdlKSB7XG4gICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMucmF0ZSk7XG4gICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgIH1cbiAgICB0aGlzLl91cGRhdGVTdGF0ZSh0aGlzLnJhdGUpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZSkge1xuICAgIHRoaXMudXBkYXRlKHZhbHVlLCBmYWxzZSk7XG4gICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIF9nZXRGaWxsVmFsdWUoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgZGlmZiA9IHRoaXMubmV4dFJhdGUgLSBpbmRleDtcblxuICAgIGlmIChkaWZmID49IDEpIHtcbiAgICAgIHJldHVybiAxMDA7XG4gICAgfVxuICAgIGlmIChkaWZmIDwgMSAmJiBkaWZmID4gMCkge1xuICAgICAgcmV0dXJuIHBhcnNlSW50KChkaWZmICogMTAwKS50b0ZpeGVkKDIpLCAxMCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVTdGF0ZShuZXh0VmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMubmV4dFJhdGUgPSBuZXh0VmFsdWU7XG4gICAgdGhpcy5jb250ZXh0cy5mb3JFYWNoKChjb250ZXh0LCBpbmRleCkgPT4gY29udGV4dC5maWxsID0gdGhpcy5fZ2V0RmlsbFZhbHVlKGluZGV4KSk7XG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/rating/rating.module.js b/dist/sunbird-ui-components/esm5/rating/rating.module.js new file mode 100644 index 0000000..cd1d932 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/rating/rating.module.js @@ -0,0 +1,19 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { NgbRating } from './rating'; +export { NgbRating } from './rating'; +export { NgbRatingConfig } from './rating-config'; +var NgbRatingModule = /** @class */ (function () { + function NgbRatingModule() { + } + NgbRatingModule.decorators = [ + { type: NgModule, args: [{ declarations: [NgbRating], exports: [NgbRating], imports: [CommonModule] },] } + ]; + return NgbRatingModule; +}()); +export { NgbRatingModule }; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF0aW5nLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbInJhdGluZy9yYXRpbmcubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUU3QyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBRW5DLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDbkMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRWhEO0lBQUE7SUFFQSxDQUFDOztnQkFGQSxRQUFRLFNBQUMsRUFBQyxZQUFZLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBQzs7SUFFcEYsc0JBQUM7Q0FBQSxBQUZELElBRUM7U0FEWSxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHtOZ2JSYXRpbmd9IGZyb20gJy4vcmF0aW5nJztcblxuZXhwb3J0IHtOZ2JSYXRpbmd9IGZyb20gJy4vcmF0aW5nJztcbmV4cG9ydCB7TmdiUmF0aW5nQ29uZmlnfSBmcm9tICcuL3JhdGluZy1jb25maWcnO1xuXG5ATmdNb2R1bGUoe2RlY2xhcmF0aW9uczogW05nYlJhdGluZ10sIGV4cG9ydHM6IFtOZ2JSYXRpbmddLCBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXX0pXG5leHBvcnQgY2xhc3MgTmdiUmF0aW5nTW9kdWxlIHtcbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/sunbird-ui-components.js b/dist/sunbird-ui-components/esm5/sunbird-ui-components.js new file mode 100644 index 0000000..a6c87d0 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/sunbird-ui-components.js @@ -0,0 +1,33 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * Generated bundle index. Do not edit. + */ +export { NgbAccordion, NgbAccordionConfig, NgbAccordionModule, NgbPanel, NgbPanelContent, NgbPanelHeader, NgbPanelTitle, NgbPanelToggle, SbCard, SbCardConfig, SbCardModule, NgbAlert, NgbAlertConfig, NgbAlertModule, NgbButtonLabel, NgbButtonsModule, NgbCheckBox, NgbRadio, NgbRadioGroup, NgbCarousel, NgbCarouselConfig, NgbCarouselModule, NgbSlide, NgbSlideEventDirection, NgbSlideEventSource, NgbCollapse, NgbCollapseModule, NgbCalendar, NgbCalendarGregorian, NgbCalendarHebrew, NgbCalendarIslamicCivil, NgbCalendarIslamicUmalqura, NgbCalendarPersian, NgbDate, NgbDateAdapter, NgbDateNativeAdapter, NgbDateNativeUTCAdapter, NgbDateParserFormatter, NgbDatepicker, NgbDatepickerConfig, NgbDatepickerI18n, NgbDatepickerI18nHebrew, NgbDatepickerModule, NgbInputDatepicker, NgbDropdown, NgbDropdownAnchor, NgbDropdownConfig, NgbDropdownItem, NgbDropdownMenu, NgbDropdownModule, NgbDropdownToggle, ModalDismissReasons, NgbActiveModal, NgbModal, NgbModalConfig, NgbModalModule, NgbModalRef, NgbPagination, NgbPaginationConfig, NgbPaginationEllipsis, NgbPaginationFirst, NgbPaginationLast, NgbPaginationModule, NgbPaginationNext, NgbPaginationNumber, NgbPaginationPrevious, NgbPopover, NgbPopoverConfig, NgbPopoverModule, NgbProgressbar, NgbProgressbarConfig, NgbProgressbarModule, NgbRating, NgbRatingConfig, NgbRatingModule, NgbTab, NgbTabContent, NgbTabset, NgbTabsetConfig, NgbTabsetModule, NgbTabTitle, NgbTimeAdapter, NgbTimepickerI18n, NgbTimepicker, NgbTimepickerConfig, NgbTimepickerModule, NgbToast, NgbToastConfig, NgbToastHeader, NgbToastModule, NgbTooltip, NgbTooltipConfig, NgbTooltipModule, NgbHighlight, NgbTypeahead, NgbTypeaheadConfig, NgbTypeaheadModule, NgbModule } from './index'; +export { NGB_CAROUSEL_DIRECTIVES as ɵa } from './carousel/carousel'; +export { NGB_DATEPICKER_DATE_ADAPTER_FACTORY as ɵi, NgbDateStructAdapter as ɵj } from './datepicker/adapters/ngb-date-adapter'; +export { NgbDatepickerDayView as ɵd } from './datepicker/datepicker-day-view'; +export { NGB_DATEPICKER_18N_FACTORY as ɵg, NgbDatepickerI18nDefault as ɵh } from './datepicker/datepicker-i18n'; +export { NgbDatepickerKeyMapService as ɵv } from './datepicker/datepicker-keymap-service'; +export { NgbDatepickerMonthView as ɵc } from './datepicker/datepicker-month-view'; +export { NgbDatepickerNavigation as ɵe } from './datepicker/datepicker-navigation'; +export { NgbDatepickerNavigationSelect as ɵf } from './datepicker/datepicker-navigation-select'; +export { NgbDatepickerService as ɵu } from './datepicker/datepicker-service'; +export { NgbCalendarHijri as ɵbd } from './datepicker/hijri/ngb-calendar-hijri'; +export { NGB_DATEPICKER_CALENDAR_FACTORY as ɵb } from './datepicker/ngb-calendar'; +export { NGB_DATEPICKER_PARSER_FORMATTER_FACTORY as ɵk, NgbDateISOParserFormatter as ɵl } from './datepicker/ngb-date-parser-formatter'; +export { NgbNavbar as ɵm } from './dropdown/dropdown'; +export { NgbModalBackdrop as ɵw } from './modal/modal-backdrop'; +export { NgbModalStack as ɵy } from './modal/modal-stack'; +export { NgbModalWindow as ɵx } from './modal/modal-window'; +export { NgbPopoverWindow as ɵn } from './popover/popover'; +export { NGB_DATEPICKER_TIME_ADAPTER_FACTORY as ɵo, NgbTimeStructAdapter as ɵp } from './timepicker/ngb-time-adapter'; +export { NGB_TIMEPICKER_I18N_FACTORY as ɵq, NgbTimepickerI18nDefault as ɵr } from './timepicker/timepicker-i18n'; +export { NgbTooltipWindow as ɵs } from './tooltip/tooltip'; +export { NgbTypeaheadWindow as ɵt } from './typeahead/typeahead-window'; +export { ARIA_LIVE_DELAY as ɵba, ARIA_LIVE_DELAY_FACTORY as ɵbb, Live as ɵbc } from './util/accessibility/live'; +export { ContentRef as ɵbe } from './util/popup'; +export { ScrollBar as ɵz } from './util/scrollbar'; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VuYmlyZC11aS1jb21wb25lbnRzLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsic3VuYmlyZC11aS1jb21wb25lbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFJQSxtcERBQWMsU0FBUyxDQUFDO0FBRXhCLE9BQU8sRUFBQyx1QkFBdUIsSUFBSSxFQUFFLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRSxPQUFPLEVBQUMsbUNBQW1DLElBQUksRUFBRSxFQUFDLG9CQUFvQixJQUFJLEVBQUUsRUFBQyxNQUFNLHdDQUF3QyxDQUFDO0FBQzVILE9BQU8sRUFBQyxvQkFBb0IsSUFBSSxFQUFFLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUM1RSxPQUFPLEVBQUMsMEJBQTBCLElBQUksRUFBRSxFQUFDLHdCQUF3QixJQUFJLEVBQUUsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQzdHLE9BQU8sRUFBQywwQkFBMEIsSUFBSSxFQUFFLEVBQUMsTUFBTSx3Q0FBd0MsQ0FBQztBQUN4RixPQUFPLEVBQUMsc0JBQXNCLElBQUksRUFBRSxFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDaEYsT0FBTyxFQUFDLHVCQUF1QixJQUFJLEVBQUUsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBQ2pGLE9BQU8sRUFBQyw2QkFBNkIsSUFBSSxFQUFFLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUM5RixPQUFPLEVBQUMsb0JBQW9CLElBQUksRUFBRSxFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDM0UsT0FBTyxFQUFDLGdCQUFnQixJQUFJLEdBQUcsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBQzlFLE9BQU8sRUFBQywrQkFBK0IsSUFBSSxFQUFFLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRixPQUFPLEVBQUMsdUNBQXVDLElBQUksRUFBRSxFQUFDLHlCQUF5QixJQUFJLEVBQUUsRUFBQyxNQUFNLHdDQUF3QyxDQUFDO0FBQ3JJLE9BQU8sRUFBQyxTQUFTLElBQUksRUFBRSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFDLGdCQUFnQixJQUFJLEVBQUUsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQzlELE9BQU8sRUFBQyxhQUFhLElBQUksRUFBRSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDeEQsT0FBTyxFQUFDLGNBQWMsSUFBSSxFQUFFLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRCxPQUFPLEVBQUMsZ0JBQWdCLElBQUksRUFBRSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDekQsT0FBTyxFQUFDLG1DQUFtQyxJQUFJLEVBQUUsRUFBQyxvQkFBb0IsSUFBSSxFQUFFLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUNuSCxPQUFPLEVBQUMsMkJBQTJCLElBQUksRUFBRSxFQUFDLHdCQUF3QixJQUFJLEVBQUUsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQzlHLE9BQU8sRUFBQyxnQkFBZ0IsSUFBSSxFQUFFLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsa0JBQWtCLElBQUksRUFBRSxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDdEUsT0FBTyxFQUFDLGVBQWUsSUFBSSxHQUFHLEVBQUMsdUJBQXVCLElBQUksR0FBRyxFQUFDLElBQUksSUFBSSxHQUFHLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RyxPQUFPLEVBQUMsVUFBVSxJQUFJLEdBQUcsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUMvQyxPQUFPLEVBQUMsU0FBUyxJQUFJLEVBQUUsRUFBQyxNQUFNLGtCQUFrQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcblxuZXhwb3J0IHtOR0JfQ0FST1VTRUxfRElSRUNUSVZFUyBhcyDJtWF9IGZyb20gJy4vY2Fyb3VzZWwvY2Fyb3VzZWwnO1xuZXhwb3J0IHtOR0JfREFURVBJQ0tFUl9EQVRFX0FEQVBURVJfRkFDVE9SWSBhcyDJtWksTmdiRGF0ZVN0cnVjdEFkYXB0ZXIgYXMgybVqfSBmcm9tICcuL2RhdGVwaWNrZXIvYWRhcHRlcnMvbmdiLWRhdGUtYWRhcHRlcic7XG5leHBvcnQge05nYkRhdGVwaWNrZXJEYXlWaWV3IGFzIMm1ZH0gZnJvbSAnLi9kYXRlcGlja2VyL2RhdGVwaWNrZXItZGF5LXZpZXcnO1xuZXhwb3J0IHtOR0JfREFURVBJQ0tFUl8xOE5fRkFDVE9SWSBhcyDJtWcsTmdiRGF0ZXBpY2tlckkxOG5EZWZhdWx0IGFzIMm1aH0gZnJvbSAnLi9kYXRlcGlja2VyL2RhdGVwaWNrZXItaTE4bic7XG5leHBvcnQge05nYkRhdGVwaWNrZXJLZXlNYXBTZXJ2aWNlIGFzIMm1dn0gZnJvbSAnLi9kYXRlcGlja2VyL2RhdGVwaWNrZXIta2V5bWFwLXNlcnZpY2UnO1xuZXhwb3J0IHtOZ2JEYXRlcGlja2VyTW9udGhWaWV3IGFzIMm1Y30gZnJvbSAnLi9kYXRlcGlja2VyL2RhdGVwaWNrZXItbW9udGgtdmlldyc7XG5leHBvcnQge05nYkRhdGVwaWNrZXJOYXZpZ2F0aW9uIGFzIMm1ZX0gZnJvbSAnLi9kYXRlcGlja2VyL2RhdGVwaWNrZXItbmF2aWdhdGlvbic7XG5leHBvcnQge05nYkRhdGVwaWNrZXJOYXZpZ2F0aW9uU2VsZWN0IGFzIMm1Zn0gZnJvbSAnLi9kYXRlcGlja2VyL2RhdGVwaWNrZXItbmF2aWdhdGlvbi1zZWxlY3QnO1xuZXhwb3J0IHtOZ2JEYXRlcGlja2VyU2VydmljZSBhcyDJtXV9IGZyb20gJy4vZGF0ZXBpY2tlci9kYXRlcGlja2VyLXNlcnZpY2UnO1xuZXhwb3J0IHtOZ2JDYWxlbmRhckhpanJpIGFzIMm1YmR9IGZyb20gJy4vZGF0ZXBpY2tlci9oaWpyaS9uZ2ItY2FsZW5kYXItaGlqcmknO1xuZXhwb3J0IHtOR0JfREFURVBJQ0tFUl9DQUxFTkRBUl9GQUNUT1JZIGFzIMm1Yn0gZnJvbSAnLi9kYXRlcGlja2VyL25nYi1jYWxlbmRhcic7XG5leHBvcnQge05HQl9EQVRFUElDS0VSX1BBUlNFUl9GT1JNQVRURVJfRkFDVE9SWSBhcyDJtWssTmdiRGF0ZUlTT1BhcnNlckZvcm1hdHRlciBhcyDJtWx9IGZyb20gJy4vZGF0ZXBpY2tlci9uZ2ItZGF0ZS1wYXJzZXItZm9ybWF0dGVyJztcbmV4cG9ydCB7TmdiTmF2YmFyIGFzIMm1bX0gZnJvbSAnLi9kcm9wZG93bi9kcm9wZG93bic7XG5leHBvcnQge05nYk1vZGFsQmFja2Ryb3AgYXMgybV3fSBmcm9tICcuL21vZGFsL21vZGFsLWJhY2tkcm9wJztcbmV4cG9ydCB7TmdiTW9kYWxTdGFjayBhcyDJtXl9IGZyb20gJy4vbW9kYWwvbW9kYWwtc3RhY2snO1xuZXhwb3J0IHtOZ2JNb2RhbFdpbmRvdyBhcyDJtXh9IGZyb20gJy4vbW9kYWwvbW9kYWwtd2luZG93JztcbmV4cG9ydCB7TmdiUG9wb3ZlcldpbmRvdyBhcyDJtW59IGZyb20gJy4vcG9wb3Zlci9wb3BvdmVyJztcbmV4cG9ydCB7TkdCX0RBVEVQSUNLRVJfVElNRV9BREFQVEVSX0ZBQ1RPUlkgYXMgybVvLE5nYlRpbWVTdHJ1Y3RBZGFwdGVyIGFzIMm1cH0gZnJvbSAnLi90aW1lcGlja2VyL25nYi10aW1lLWFkYXB0ZXInO1xuZXhwb3J0IHtOR0JfVElNRVBJQ0tFUl9JMThOX0ZBQ1RPUlkgYXMgybVxLE5nYlRpbWVwaWNrZXJJMThuRGVmYXVsdCBhcyDJtXJ9IGZyb20gJy4vdGltZXBpY2tlci90aW1lcGlja2VyLWkxOG4nO1xuZXhwb3J0IHtOZ2JUb29sdGlwV2luZG93IGFzIMm1c30gZnJvbSAnLi90b29sdGlwL3Rvb2x0aXAnO1xuZXhwb3J0IHtOZ2JUeXBlYWhlYWRXaW5kb3cgYXMgybV0fSBmcm9tICcuL3R5cGVhaGVhZC90eXBlYWhlYWQtd2luZG93JztcbmV4cG9ydCB7QVJJQV9MSVZFX0RFTEFZIGFzIMm1YmEsQVJJQV9MSVZFX0RFTEFZX0ZBQ1RPUlkgYXMgybViYixMaXZlIGFzIMm1YmN9IGZyb20gJy4vdXRpbC9hY2Nlc3NpYmlsaXR5L2xpdmUnO1xuZXhwb3J0IHtDb250ZW50UmVmIGFzIMm1YmV9IGZyb20gJy4vdXRpbC9wb3B1cCc7XG5leHBvcnQge1Njcm9sbEJhciBhcyDJtXp9IGZyb20gJy4vdXRpbC9zY3JvbGxiYXInOyJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/tabset/tabset-config.js b/dist/sunbird-ui-components/esm5/tabset/tabset-config.js new file mode 100644 index 0000000..ca79626 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/tabset/tabset-config.js @@ -0,0 +1,34 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Injectable } from '@angular/core'; +import * as i0 from "@angular/core"; +/** + * A configuration service for the [`NgbTabset`](#/components/tabset/api#NgbTabset) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the tabsets used in the application. + */ +var NgbTabsetConfig = /** @class */ (function () { + function NgbTabsetConfig() { + this.justify = 'start'; + this.orientation = 'horizontal'; + this.type = 'tabs'; + } + NgbTabsetConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ NgbTabsetConfig.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function NgbTabsetConfig_Factory() { return new NgbTabsetConfig(); }, token: NgbTabsetConfig, providedIn: "root" }); + return NgbTabsetConfig; +}()); +export { NgbTabsetConfig }; +if (false) { + /** @type {?} */ + NgbTabsetConfig.prototype.justify; + /** @type {?} */ + NgbTabsetConfig.prototype.orientation; + /** @type {?} */ + NgbTabsetConfig.prototype.type; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFic2V0LWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbInRhYnNldC90YWJzZXQtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQVF6QztJQUFBO1FBRUUsWUFBTyxHQUFzRCxPQUFPLENBQUM7UUFDckUsZ0JBQVcsR0FBOEIsWUFBWSxDQUFDO1FBQ3RELFNBQUksR0FBcUIsTUFBTSxDQUFDO0tBQ2pDOztnQkFMQSxVQUFVLFNBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDOzs7MEJBUmhDO0NBYUMsQUFMRCxJQUtDO1NBSlksZUFBZTs7O0lBQzFCLGtDQUFxRTs7SUFDckUsc0NBQXNEOztJQUN0RCwrQkFBZ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIEEgY29uZmlndXJhdGlvbiBzZXJ2aWNlIGZvciB0aGUgW2BOZ2JUYWJzZXRgXSgjL2NvbXBvbmVudHMvdGFic2V0L2FwaSNOZ2JUYWJzZXQpIGNvbXBvbmVudC5cbiAqXG4gKiBZb3UgY2FuIGluamVjdCB0aGlzIHNlcnZpY2UsIHR5cGljYWxseSBpbiB5b3VyIHJvb3QgY29tcG9uZW50LCBhbmQgY3VzdG9taXplIHRoZSB2YWx1ZXMgb2YgaXRzIHByb3BlcnRpZXMgaW5cbiAqIG9yZGVyIHRvIHByb3ZpZGUgZGVmYXVsdCB2YWx1ZXMgZm9yIGFsbCB0aGUgdGFic2V0cyB1c2VkIGluIHRoZSBhcHBsaWNhdGlvbi5cbiAqL1xuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgTmdiVGFic2V0Q29uZmlnIHtcbiAganVzdGlmeTogJ3N0YXJ0JyB8ICdjZW50ZXInIHwgJ2VuZCcgfCAnZmlsbCcgfCAnanVzdGlmaWVkJyA9ICdzdGFydCc7XG4gIG9yaWVudGF0aW9uOiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnID0gJ2hvcml6b250YWwnO1xuICB0eXBlOiAndGFicycgfCAncGlsbHMnID0gJ3RhYnMnO1xufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/tabset/tabset.js b/dist/sunbird-ui-components/esm5/tabset/tabset.js new file mode 100644 index 0000000..5740042 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/tabset/tabset.js @@ -0,0 +1,316 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Component, Input, ContentChildren, QueryList, Directive, TemplateRef, Output, EventEmitter } from '@angular/core'; +import { NgbTabsetConfig } from './tabset-config'; +/** @type {?} */ +var nextId = 0; +/** + * A directive to wrap tab titles that need to contain HTML markup or other directives. + * + * Alternatively you could use the `NgbTab.title` input for string titles. + */ +var NgbTabTitle = /** @class */ (function () { + function NgbTabTitle(templateRef) { + this.templateRef = templateRef; + } + NgbTabTitle.decorators = [ + { type: Directive, args: [{ selector: 'ng-template[ngbTabTitle]' },] } + ]; + /** @nocollapse */ + NgbTabTitle.ctorParameters = function () { return [ + { type: TemplateRef } + ]; }; + return NgbTabTitle; +}()); +export { NgbTabTitle }; +if (false) { + /** @type {?} */ + NgbTabTitle.prototype.templateRef; +} +/** + * A directive to wrap content to be displayed in a tab. + */ +var NgbTabContent = /** @class */ (function () { + function NgbTabContent(templateRef) { + this.templateRef = templateRef; + } + NgbTabContent.decorators = [ + { type: Directive, args: [{ selector: 'ng-template[ngbTabContent]' },] } + ]; + /** @nocollapse */ + NgbTabContent.ctorParameters = function () { return [ + { type: TemplateRef } + ]; }; + return NgbTabContent; +}()); +export { NgbTabContent }; +if (false) { + /** @type {?} */ + NgbTabContent.prototype.templateRef; +} +/** + * A directive representing an individual tab. + */ +var NgbTab = /** @class */ (function () { + function NgbTab() { + /** + * The tab identifier. + * + * Must be unique for the entire document for proper accessibility support. + */ + this.id = "ngb-tab-" + nextId++; + /** + * If `true`, the current tab is disabled and can't be toggled. + */ + this.disabled = false; + } + /** + * @return {?} + */ + NgbTab.prototype.ngAfterContentChecked = /** + * @return {?} + */ + function () { + // We are using @ContentChildren instead of @ContentChild as in the Angular version being used + // only @ContentChildren allows us to specify the {descendants: false} option. + // Without {descendants: false} we are hitting bugs described in: + // https://github.com/ng-bootstrap/ng-bootstrap/issues/2240 + this.titleTpl = this.titleTpls.first; + this.contentTpl = this.contentTpls.first; + }; + NgbTab.decorators = [ + { type: Directive, args: [{ selector: 'ngb-tab' },] } + ]; + NgbTab.propDecorators = { + id: [{ type: Input }], + title: [{ type: Input }], + disabled: [{ type: Input }], + titleTpls: [{ type: ContentChildren, args: [NgbTabTitle, { descendants: false },] }], + contentTpls: [{ type: ContentChildren, args: [NgbTabContent, { descendants: false },] }] + }; + return NgbTab; +}()); +export { NgbTab }; +if (false) { + /** + * The tab identifier. + * + * Must be unique for the entire document for proper accessibility support. + * @type {?} + */ + NgbTab.prototype.id; + /** + * The tab title. + * + * Use the [`NgbTabTitle`](#/components/tabset/api#NgbTabTitle) directive for non-string titles. + * @type {?} + */ + NgbTab.prototype.title; + /** + * If `true`, the current tab is disabled and can't be toggled. + * @type {?} + */ + NgbTab.prototype.disabled; + /** @type {?} */ + NgbTab.prototype.titleTpl; + /** @type {?} */ + NgbTab.prototype.contentTpl; + /** @type {?} */ + NgbTab.prototype.titleTpls; + /** @type {?} */ + NgbTab.prototype.contentTpls; +} +/** + * The payload of the change event fired right before the tab change. + * @record + */ +export function NgbTabChangeEvent() { } +if (false) { + /** + * The id of the currently active tab. + * @type {?} + */ + NgbTabChangeEvent.prototype.activeId; + /** + * The id of the newly selected tab. + * @type {?} + */ + NgbTabChangeEvent.prototype.nextId; + /** + * Calling this function will prevent tab switching. + * @type {?} + */ + NgbTabChangeEvent.prototype.preventDefault; +} +/** + * A component that makes it easy to create tabbed interface. + */ +var NgbTabset = /** @class */ (function () { + function NgbTabset(config) { + /** + * If `true`, non-visible tabs content will be removed from DOM. Otherwise it will just be hidden. + */ + this.destroyOnHide = true; + /** + * A tab change event emitted right before the tab change happens. + * + * See [`NgbTabChangeEvent`](#/components/tabset/api#NgbTabChangeEvent) for payload details. + */ + this.tabChange = new EventEmitter(); + this.type = config.type; + this.justify = config.justify; + this.orientation = config.orientation; + } + Object.defineProperty(NgbTabset.prototype, "justify", { + /** + * The horizontal alignment of the tabs with flexbox utilities. + */ + set: /** + * The horizontal alignment of the tabs with flexbox utilities. + * @param {?} className + * @return {?} + */ + function (className) { + if (className === 'fill' || className === 'justified') { + this.justifyClass = "nav-" + className; + } + else { + this.justifyClass = "justify-content-" + className; + } + }, + enumerable: true, + configurable: true + }); + /** + * Selects the tab with the given id and shows its associated content panel. + * + * Any other tab that was previously selected becomes unselected and its associated pane is removed from DOM or + * hidden depending on the `destroyOnHide` value. + */ + /** + * Selects the tab with the given id and shows its associated content panel. + * + * Any other tab that was previously selected becomes unselected and its associated pane is removed from DOM or + * hidden depending on the `destroyOnHide` value. + * @param {?} tabId + * @return {?} + */ + NgbTabset.prototype.select = /** + * Selects the tab with the given id and shows its associated content panel. + * + * Any other tab that was previously selected becomes unselected and its associated pane is removed from DOM or + * hidden depending on the `destroyOnHide` value. + * @param {?} tabId + * @return {?} + */ + function (tabId) { + /** @type {?} */ + var selectedTab = this._getTabById(tabId); + if (selectedTab && !selectedTab.disabled && this.activeId !== selectedTab.id) { + /** @type {?} */ + var defaultPrevented_1 = false; + this.tabChange.emit({ activeId: this.activeId, nextId: selectedTab.id, preventDefault: (/** + * @return {?} + */ + function () { defaultPrevented_1 = true; }) }); + if (!defaultPrevented_1) { + this.activeId = selectedTab.id; + } + } + }; + /** + * @return {?} + */ + NgbTabset.prototype.ngAfterContentChecked = /** + * @return {?} + */ + function () { + // auto-correct activeId that might have been set incorrectly as input + /** @type {?} */ + var activeTab = this._getTabById(this.activeId); + this.activeId = activeTab ? activeTab.id : (this.tabs.length ? this.tabs.first.id : null); + }; + /** + * @private + * @param {?} id + * @return {?} + */ + NgbTabset.prototype._getTabById = /** + * @private + * @param {?} id + * @return {?} + */ + function (id) { + /** @type {?} */ + var tabsWithId = this.tabs.filter((/** + * @param {?} tab + * @return {?} + */ + function (tab) { return tab.id === id; })); + return tabsWithId.length ? tabsWithId[0] : null; + }; + NgbTabset.decorators = [ + { type: Component, args: [{ + selector: 'ngb-tabset', + exportAs: 'ngbTabset', + template: "\n \n
\n \n \n \n
\n
\n \n " + }] } + ]; + /** @nocollapse */ + NgbTabset.ctorParameters = function () { return [ + { type: NgbTabsetConfig } + ]; }; + NgbTabset.propDecorators = { + tabs: [{ type: ContentChildren, args: [NgbTab,] }], + activeId: [{ type: Input }], + destroyOnHide: [{ type: Input }], + justify: [{ type: Input }], + orientation: [{ type: Input }], + type: [{ type: Input }], + tabChange: [{ type: Output }] + }; + return NgbTabset; +}()); +export { NgbTabset }; +if (false) { + /** @type {?} */ + NgbTabset.prototype.justifyClass; + /** @type {?} */ + NgbTabset.prototype.tabs; + /** + * The identifier of the tab that should be opened **initially**. + * + * For subsequent tab switches use the `.select()` method and the `(tabChange)` event. + * @type {?} + */ + NgbTabset.prototype.activeId; + /** + * If `true`, non-visible tabs content will be removed from DOM. Otherwise it will just be hidden. + * @type {?} + */ + NgbTabset.prototype.destroyOnHide; + /** + * The orientation of the tabset. + * @type {?} + */ + NgbTabset.prototype.orientation; + /** + * Type of navigation to be used for tabs. + * + * Currently Bootstrap supports only `"tabs"` and `"pills"`. + * + * Since `3.0.0` can also be an arbitrary string (ex. for custom themes). + * @type {?} + */ + NgbTabset.prototype.type; + /** + * A tab change event emitted right before the tab change happens. + * + * See [`NgbTabChangeEvent`](#/components/tabset/api#NgbTabChangeEvent) for payload details. + * @type {?} + */ + NgbTabset.prototype.tabChange; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFic2V0LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsidGFic2V0L3RhYnNldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsZUFBZSxFQUNmLFNBQVMsRUFDVCxTQUFTLEVBQ1QsV0FBVyxFQUVYLE1BQU0sRUFDTixZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLGlCQUFpQixDQUFDOztJQUU1QyxNQUFNLEdBQUcsQ0FBQzs7Ozs7O0FBT2Q7SUFFRSxxQkFBbUIsV0FBNkI7UUFBN0IsZ0JBQVcsR0FBWCxXQUFXLENBQWtCO0lBQUcsQ0FBQzs7Z0JBRnJELFNBQVMsU0FBQyxFQUFDLFFBQVEsRUFBRSwwQkFBMEIsRUFBQzs7OztnQkFkL0MsV0FBVzs7SUFpQmIsa0JBQUM7Q0FBQSxBQUhELElBR0M7U0FGWSxXQUFXOzs7SUFDVixrQ0FBb0M7Ozs7O0FBTWxEO0lBRUUsdUJBQW1CLFdBQTZCO1FBQTdCLGdCQUFXLEdBQVgsV0FBVyxDQUFrQjtJQUFHLENBQUM7O2dCQUZyRCxTQUFTLFNBQUMsRUFBQyxRQUFRLEVBQUUsNEJBQTRCLEVBQUM7Ozs7Z0JBdEJqRCxXQUFXOztJQXlCYixvQkFBQztDQUFBLEFBSEQsSUFHQztTQUZZLGFBQWE7OztJQUNaLG9DQUFvQzs7Ozs7QUFNbEQ7SUFBQTs7Ozs7O1FBT1csT0FBRSxHQUFHLGFBQVcsTUFBTSxFQUFJLENBQUM7Ozs7UUFZM0IsYUFBUSxHQUFHLEtBQUssQ0FBQztJQWdCNUIsQ0FBQzs7OztJQVJDLHNDQUFxQjs7O0lBQXJCO1FBQ0UsOEZBQThGO1FBQzlGLDhFQUE4RTtRQUM5RSxpRUFBaUU7UUFDakUsMkRBQTJEO1FBQzNELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENB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LE9BQUEsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQWIsQ0FBYSxFQUFDO1FBQ2pFLE9BQU8sVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDbEQsQ0FBQzs7Z0JBaEhGLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsWUFBWTtvQkFDdEIsUUFBUSxFQUFFLFdBQVc7b0JBQ3JCLFFBQVEsRUFBRSxxdUNBc0JUO2lCQUNGOzs7O2dCQS9HTyxlQUFlOzs7dUJBbUhwQixlQUFlLFNBQUMsTUFBTTsyQkFPdEIsS0FBSztnQ0FLTCxLQUFLOzBCQUtMLEtBQUs7OEJBWUwsS0FBSzt1QkFTTCxLQUFLOzRCQU9MLE1BQU07O0lBc0NULGdCQUFDO0NBQUEsQUFqSEQsSUFpSEM7U0F0RlksU0FBUzs7O0lBQ3BCLGlDQUFxQjs7SUFFckIseUJBQWlEOzs7Ozs7O0lBT2pELDZCQUEwQjs7Ozs7SUFLMUIsa0NBQThCOzs7OztJQWlCOUIsZ0NBQWdEOzs7Ozs7Ozs7SUFTaEQseUJBQXlDOzs7Ozs7O0lBT3pDLDhCQUE0RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgUXVlcnlMaXN0LFxuICBEaXJlY3RpdmUsXG4gIFRlbXBsYXRlUmVmLFxuICBBZnRlckNvbnRlbnRDaGVja2VkLFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TmdiVGFic2V0Q29uZmlnfSBmcm9tICcuL3RhYnNldC1jb25maWcnO1xuXG5sZXQgbmV4dElkID0gMDtcblxuLyoqXG4gKiBBIGRpcmVjdGl2ZSB0byB3cmFwIHRhYiB0aXRsZXMgdGhhdCBuZWVkIHRvIGNvbnRhaW4gSFRNTCBtYXJrdXAgb3Igb3RoZXIgZGlyZWN0aXZlcy5cbiAqXG4gKiBBbHRlcm5hdGl2ZWx5IHlvdSBjb3VsZCB1c2UgdGhlIGBOZ2JUYWIudGl0bGVgIGlucHV0IGZvciBzdHJpbmcgdGl0bGVzLlxuICovXG5ARGlyZWN0aXZlKHtzZWxlY3RvcjogJ25nLXRlbXBsYXRlW25nYlRhYlRpdGxlXSd9KVxuZXhwb3J0IGNsYXNzIE5nYlRhYlRpdGxlIHtcbiAgY29uc3RydWN0b3IocHVibGljIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+KSB7fVxufVxuXG4vKipcbiAqIEEgZGlyZWN0aXZlIHRvIHdyYXAgY29udGVudCB0byBiZSBkaXNwbGF5ZWQgaW4gYSB0YWIuXG4gKi9cbkBEaXJlY3RpdmUoe3NlbGVjdG9yOiAnbmctdGVtcGxhdGVbbmdiVGFiQ29udGVudF0nfSlcbmV4cG9ydCBjbGFzcyBOZ2JUYWJDb250ZW50IHtcbiAgY29uc3RydWN0b3IocHVibGljIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+KSB7fVxufVxuXG4vKipcbiAqIEEgZGlyZWN0aXZlIHJlcHJlc2VudGluZyBhbiBpbmRpdmlkdWFsIHRhYi5cbiAqL1xuQERpcmVjdGl2ZSh7c2VsZWN0b3I6ICduZ2ItdGFiJ30pXG5leHBvcnQgY2xhc3MgTmdiVGFiIGltcGxlbWVudHMgQWZ0ZXJDb250ZW50Q2hlY2tlZCB7XG4gIC8qKlxuICAgKiBUaGUgdGFiIGlkZW50aWZpZXIuXG4gICAqXG4gICAqIE11c3QgYmUgdW5pcXVlIGZvciB0aGUgZW50aXJlIGRvY3VtZW50IGZvciBwcm9wZXIgYWNjZXNzaWJpbGl0eSBzdXBwb3J0LlxuICAgKi9cbiAgQElucHV0KCkgaWQgPSBgbmdiLXRhYi0ke25leHRJZCsrfWA7XG5cbiAgLyoqXG4gICAqIFRoZSB0YWIgdGl0bGUuXG4gICAqXG4gICAqIFVzZSB0aGUgW2BOZ2JUYWJUaXRsZWBdKCMvY29tcG9uZW50cy90YWJzZXQvYXBpI05nYlRhYlRpdGxlKSBkaXJlY3RpdmUgZm9yIG5vbi1zdHJpbmcgdGl0bGVzLlxuICAgKi9cbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZztcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY3VycmVudCB0YWIgaXMgZGlzYWJsZWQgYW5kIGNhbid0IGJlIHRvZ2dsZWQuXG4gICAqL1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gIHRpdGxlVHBsOiBOZ2JUYWJUaXRsZSB8IG51bGw7XG4gIGNvbnRlbnRUcGw6IE5nYlRhYkNvbnRlbnQgfCBudWxsO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oTmdiVGFiVGl0bGUsIHtkZXNjZW5kYW50czogZmFsc2V9KSB0aXRsZVRwbHM6IFF1ZXJ5TGlzdDxOZ2JUYWJUaXRsZT47XG4gIEBDb250ZW50Q2hpbGRyZW4oTmdiVGFiQ29udGVudCwge2Rlc2NlbmRhbnRzOiBmYWxzZX0pIGNvbnRlbnRUcGxzOiBRdWVyeUxpc3Q8TmdiVGFiQ29udGVudD47XG5cbiAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCkge1xuICAgIC8vIFdlIGFyZSB1c2luZyBAQ29udGVudENoaWxkcmVuIGluc3RlYWQgb2YgQENvbnRlbnRDaGlsZCBhcyBpbiB0aGUgQW5ndWxhciB2ZXJzaW9uIGJlaW5nIHVzZWRcbiAgICAvLyBvbmx5IEBDb250ZW50Q2hpbGRyZW4gYWxsb3dzIHVzIHRvIHNwZWNpZnkgdGhlIHtkZXNjZW5kYW50czogZmFsc2V9IG9wdGlvbi5cbiAgICAvLyBXaXRob3V0IHtkZXNjZW5kYW50czogZmFsc2V9IHdlIGFyZSBoaXR0aW5nIGJ1Z3MgZGVzY3JpYmVkIGluOlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9uZy1ib290c3RyYXAvbmctYm9vdHN0cmFwL2lzc3Vlcy8yMjQwXG4gICAgdGhpcy50aXRsZVRwbCA9IHRoaXMudGl0bGVUcGxzLmZpcnN0O1xuICAgIHRoaXMuY29udGVudFRwbCA9IHRoaXMuY29udGVudFRwbHMuZmlyc3Q7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgcGF5bG9hZCBvZiB0aGUgY2hhbmdlIGV2ZW50IGZpcmVkIHJpZ2h0IGJlZm9yZSB0aGUgdGFiIGNoYW5nZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZ2JUYWJDaGFuZ2VFdmVudCB7XG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIGN1cnJlbnRseSBhY3RpdmUgdGFiLlxuICAgKi9cbiAgYWN0aXZlSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBuZXdseSBzZWxlY3RlZCB0YWIuXG4gICAqL1xuICBuZXh0SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgcHJldmVudCB0YWIgc3dpdGNoaW5nLlxuICAgKi9cbiAgcHJldmVudERlZmF1bHQ6ICgpID0+IHZvaWQ7XG59XG5cbi8qKlxuICogQSBjb21wb25lbnQgdGhhdCBtYWtlcyBpdCBlYXN5IHRvIGNyZWF0ZSB0YWJiZWQgaW50ZXJmYWNlLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ2ItdGFic2V0JyxcbiAgZXhwb3J0QXM6ICduZ2JUYWJzZXQnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDx1bCBbY2xhc3NdPVwiJ25hdiBuYXYtJyArIHR5cGUgKyAob3JpZW50YXRpb24gPT0gJ2hvcml6b250YWwnPyAgJyAnICsganVzdGlmeUNsYXNzIDogJyBmbGV4LWNvbHVtbicpXCIgcm9sZT1cInRhYmxpc3RcIj5cbiAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgKm5nRm9yPVwibGV0IHRhYiBvZiB0YWJzXCI+XG4gICAgICAgIDxhIFtpZF09XCJ0YWIuaWRcIiBjbGFzcz1cIm5hdi1saW5rXCIgW2NsYXNzLmFjdGl2ZV09XCJ0YWIuaWQgPT09IGFjdGl2ZUlkXCIgW2NsYXNzLmRpc2FibGVkXT1cInRhYi5kaXNhYmxlZFwiXG4gICAgICAgICAgaHJlZiAoY2xpY2spPVwic2VsZWN0KHRhYi5pZCk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCIgcm9sZT1cInRhYlwiIFthdHRyLnRhYmluZGV4XT1cIih0YWIuZGlzYWJsZWQgPyAnLTEnOiB1bmRlZmluZWQpXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cIighZGVzdHJveU9uSGlkZSB8fCB0YWIuaWQgPT09IGFjdGl2ZUlkID8gdGFiLmlkICsgJy1wYW5lbCcgOiBudWxsKVwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJ0YWIuaWQgPT09IGFjdGl2ZUlkXCIgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJ0YWIuZGlzYWJsZWRcIj5cbiAgICAgICAgICB7e3RhYi50aXRsZX19PG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRhYi50aXRsZVRwbD8udGVtcGxhdGVSZWZcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2E+XG4gICAgICA8L2xpPlxuICAgIDwvdWw+XG4gICAgPGRpdiBjbGFzcz1cInRhYi1jb250ZW50XCI+XG4gICAgICA8bmctdGVtcGxhdGUgbmdGb3IgbGV0LXRhYiBbbmdGb3JPZl09XCJ0YWJzXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInRhYi1wYW5lIHt7dGFiLmlkID09PSBhY3RpdmVJZCA/ICdhY3RpdmUnIDogbnVsbH19XCJcbiAgICAgICAgICAqbmdJZj1cIiFkZXN0cm95T25IaWRlIHx8IHRhYi5pZCA9PT0gYWN0aXZlSWRcIlxuICAgICAgICAgIHJvbGU9XCJ0YWJwYW5lbFwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cInRhYi5pZFwiIGlkPVwie3t0YWIuaWR9fS1wYW5lbFwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJ0YWIuY29udGVudFRwbD8udGVtcGxhdGVSZWZcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gIGBcbn0pXG5leHBvcnQgY2xhc3MgTmdiVGFic2V0IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50Q2hlY2tlZCB7XG4gIGp1c3RpZnlDbGFzczogc3RyaW5nO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oTmdiVGFiKSB0YWJzOiBRdWVyeUxpc3Q8TmdiVGFiPjtcblxuICAvKipcbiAgICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIHRhYiB0aGF0IHNob3VsZCBiZSBvcGVuZWQgKippbml0aWFsbHkqKi5cbiAgICpcbiAgICogRm9yIHN1YnNlcXVlbnQgdGFiIHN3aXRjaGVzIHVzZSB0aGUgYC5zZWxlY3QoKWAgbWV0aG9kIGFuZCB0aGUgYCh0YWJDaGFuZ2UpYCBldmVudC5cbiAgICovXG4gIEBJbnB1dCgpIGFjdGl2ZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgbm9uLXZpc2libGUgdGFicyBjb250ZW50IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIERPTS4gT3RoZXJ3aXNlIGl0IHdpbGwganVzdCBiZSBoaWRkZW4uXG4gICAqL1xuICBASW5wdXQoKSBkZXN0cm95T25IaWRlID0gdHJ1ZTtcblxuICAvKipcbiAgICogVGhlIGhvcml6b250YWwgYWxpZ25tZW50IG9mIHRoZSB0YWJzIHdpdGggZmxleGJveCB1dGlsaXRpZXMuXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQganVzdGlmeShjbGFzc05hbWU6ICdzdGFydCcgfCAnY2VudGVyJyB8ICdlbmQnIHwgJ2ZpbGwnIHwgJ2p1c3RpZmllZCcpIHtcbiAgICBpZiAoY2xhc3NOYW1lID09PSAnZmlsbCcgfHwgY2xhc3NOYW1lID09PSAnanVzdGlmaWVkJykge1xuICAgICAgdGhpcy5qdXN0aWZ5Q2xhc3MgPSBgbmF2LSR7Y2xhc3NOYW1lfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuanVzdGlmeUNsYXNzID0gYGp1c3RpZnktY29udGVudC0ke2NsYXNzTmFtZX1gO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgb3JpZW50YXRpb24gb2YgdGhlIHRhYnNldC5cbiAgICovXG4gIEBJbnB1dCgpIG9yaWVudGF0aW9uOiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnO1xuXG4gIC8qKlxuICAgKiBUeXBlIG9mIG5hdmlnYXRpb24gdG8gYmUgdXNlZCBmb3IgdGFicy5cbiAgICpcbiAgICogQ3VycmVudGx5IEJvb3RzdHJhcCBzdXBwb3J0cyBvbmx5IGBcInRhYnNcImAgYW5kIGBcInBpbGxzXCJgLlxuICAgKlxuICAgKiBTaW5jZSBgMy4wLjBgIGNhbiBhbHNvIGJlIGFuIGFyYml0cmFyeSBzdHJpbmcgKGV4LiBmb3IgY3VzdG9tIHRoZW1lcykuXG4gICAqL1xuICBASW5wdXQoKSB0eXBlOiAndGFicycgfCAncGlsbHMnIHwgc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHRhYiBjaGFuZ2UgZXZlbnQgZW1pdHRlZCByaWdodCBiZWZvcmUgdGhlIHRhYiBjaGFuZ2UgaGFwcGVucy5cbiAgICpcbiAgICogU2VlIFtgTmdiVGFiQ2hhbmdlRXZlbnRgXSgjL2NvbXBvbmVudHMvdGFic2V0L2FwaSNOZ2JUYWJDaGFuZ2VFdmVudCkgZm9yIHBheWxvYWQgZGV0YWlscy5cbiAgICovXG4gIEBPdXRwdXQoKSB0YWJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPE5nYlRhYkNoYW5nZUV2ZW50PigpO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogTmdiVGFic2V0Q29uZmlnKSB7XG4gICAgdGhpcy50eXBlID0gY29uZmlnLnR5cGU7XG4gICAgdGhpcy5qdXN0aWZ5ID0gY29uZmlnLmp1c3RpZnk7XG4gICAgdGhpcy5vcmllbnRhdGlvbiA9IGNvbmZpZy5vcmllbnRhdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3RzIHRoZSB0YWIgd2l0aCB0aGUgZ2l2ZW4gaWQgYW5kIHNob3dzIGl0cyBhc3NvY2lhdGVkIGNvbnRlbnQgcGFuZWwuXG4gICAqXG4gICAqIEFueSBvdGhlciB0YWIgdGhhdCB3YXMgcHJldmlvdXNseSBzZWxlY3RlZCBiZWNvbWVzIHVuc2VsZWN0ZWQgYW5kIGl0cyBhc3NvY2lhdGVkIHBhbmUgaXMgcmVtb3ZlZCBmcm9tIERPTSBvclxuICAgKiBoaWRkZW4gZGVwZW5kaW5nIG9uIHRoZSBgZGVzdHJveU9uSGlkZWAgdmFsdWUuXG4gICAqL1xuICBzZWxlY3QodGFiSWQ6IHN0cmluZykge1xuICAgIGxldCBzZWxlY3RlZFRhYiA9IHRoaXMuX2dldFRhYkJ5SWQodGFiSWQpO1xuICAgIGlmIChzZWxlY3RlZFRhYiAmJiAhc2VsZWN0ZWRUYWIuZGlzYWJsZWQgJiYgdGhpcy5hY3RpdmVJZCAhPT0gc2VsZWN0ZWRUYWIuaWQpIHtcbiAgICAgIGxldCBkZWZhdWx0UHJldmVudGVkID0gZmFsc2U7XG5cbiAgICAgIHRoaXMudGFiQ2hhbmdlLmVtaXQoXG4gICAgICAgICAge2FjdGl2ZUlkOiB0aGlzLmFjdGl2ZUlkLCBuZXh0SWQ6IHNlbGVjdGVkVGFiLmlkLCBwcmV2ZW50RGVmYXVsdDogKCkgPT4geyBkZWZhdWx0UHJldmVudGVkID0gdHJ1ZTsgfX0pO1xuXG4gICAgICBpZiAoIWRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVJZCA9IHNlbGVjdGVkVGFiLmlkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpIHtcbiAgICAvLyBhdXRvLWNvcnJlY3QgYWN0aXZlSWQgdGhhdCBtaWdodCBoYXZlIGJlZW4gc2V0IGluY29ycmVjdGx5IGFzIGlucHV0XG4gICAgbGV0IGFjdGl2ZVRhYiA9IHRoaXMuX2dldFRhYkJ5SWQodGhpcy5hY3RpdmVJZCk7XG4gICAgdGhpcy5hY3RpdmVJZCA9IGFjdGl2ZVRhYiA/IGFjdGl2ZVRhYi5pZCA6ICh0aGlzLnRhYnMubGVuZ3RoID8gdGhpcy50YWJzLmZpcnN0LmlkIDogbnVsbCk7XG4gIH1cblxuICBwcml2YXRlIF9nZXRUYWJCeUlkKGlkOiBzdHJpbmcpOiBOZ2JUYWIge1xuICAgIGxldCB0YWJzV2l0aElkOiBOZ2JUYWJbXSA9IHRoaXMudGFicy5maWx0ZXIodGFiID0+IHRhYi5pZCA9PT0gaWQpO1xuICAgIHJldHVybiB0YWJzV2l0aElkLmxlbmd0aCA/IHRhYnNXaXRoSWRbMF0gOiBudWxsO1xuICB9XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/tabset/tabset.module.js b/dist/sunbird-ui-components/esm5/tabset/tabset.module.js new file mode 100644 index 0000000..733848d --- /dev/null +++ b/dist/sunbird-ui-components/esm5/tabset/tabset.module.js @@ -0,0 +1,21 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { NgbTabset, NgbTab, NgbTabContent, NgbTabTitle } from './tabset'; +export { NgbTabset, NgbTab, NgbTabContent, NgbTabTitle } from './tabset'; +export { NgbTabsetConfig } from './tabset-config'; +/** @type {?} */ +var NGB_TABSET_DIRECTIVES = [NgbTabset, NgbTab, NgbTabContent, NgbTabTitle]; +var NgbTabsetModule = /** @class */ (function () { + function NgbTabsetModule() { + } + NgbTabsetModule.decorators = [ + { type: NgModule, args: [{ declarations: NGB_TABSET_DIRECTIVES, exports: NGB_TABSET_DIRECTIVES, imports: [CommonModule] },] } + ]; + return NgbTabsetModule; +}()); +export { NgbTabsetModule }; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFic2V0Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbInRhYnNldC90YWJzZXQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUU3QyxPQUFPLEVBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBRXZFLE9BQU8sRUFBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQW9CLE1BQU0sVUFBVSxDQUFDO0FBQzFGLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQzs7SUFFMUMscUJBQXFCLEdBQUcsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxXQUFXLENBQUM7QUFFN0U7SUFBQTtJQUVBLENBQUM7O2dCQUZBLFFBQVEsU0FBQyxFQUFDLFlBQVksRUFBRSxxQkFBcUIsRUFBRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUM7O0lBRXhHLHNCQUFDO0NBQUEsQUFGRCxJQUVDO1NBRFksZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmltcG9ydCB7TmdiVGFic2V0LCBOZ2JUYWIsIE5nYlRhYkNvbnRlbnQsIE5nYlRhYlRpdGxlfSBmcm9tICcuL3RhYnNldCc7XG5cbmV4cG9ydCB7TmdiVGFic2V0LCBOZ2JUYWIsIE5nYlRhYkNvbnRlbnQsIE5nYlRhYlRpdGxlLCBOZ2JUYWJDaGFuZ2VFdmVudH0gZnJvbSAnLi90YWJzZXQnO1xuZXhwb3J0IHtOZ2JUYWJzZXRDb25maWd9IGZyb20gJy4vdGFic2V0LWNvbmZpZyc7XG5cbmNvbnN0IE5HQl9UQUJTRVRfRElSRUNUSVZFUyA9IFtOZ2JUYWJzZXQsIE5nYlRhYiwgTmdiVGFiQ29udGVudCwgTmdiVGFiVGl0bGVdO1xuXG5ATmdNb2R1bGUoe2RlY2xhcmF0aW9uczogTkdCX1RBQlNFVF9ESVJFQ1RJVkVTLCBleHBvcnRzOiBOR0JfVEFCU0VUX0RJUkVDVElWRVMsIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdfSlcbmV4cG9ydCBjbGFzcyBOZ2JUYWJzZXRNb2R1bGUge1xufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/timepicker/ngb-time-adapter.js b/dist/sunbird-ui-components/esm5/timepicker/ngb-time-adapter.js new file mode 100644 index 0000000..eaf3db8 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/timepicker/ngb-time-adapter.js @@ -0,0 +1,103 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import * as tslib_1 from "tslib"; +import { Injectable } from '@angular/core'; +import { isInteger } from '../util/util'; +import * as i0 from "@angular/core"; +/** + * @return {?} + */ +export function NGB_DATEPICKER_TIME_ADAPTER_FACTORY() { + return new NgbTimeStructAdapter(); +} +/** + * An abstract service that does the conversion between the internal timepicker `NgbTimeStruct` model and + * any provided user time model `T`, ex. a string, a native date, etc. + * + * The adapter is used **only** for conversion when binding timepicker to a form control, + * ex. `[(ngModel)]="userTimeModel"`. Here `userTimeModel` can be of any type. + * + * The default timepicker implementation assumes we use `NgbTimeStruct` as a user model. + * + * See the [custom time adapter demo](#/components/timepicker/examples#adapter) for an example. + * + * \@since 2.2.0 + * @abstract + * @template T + */ +var NgbTimeAdapter = /** @class */ (function () { + function NgbTimeAdapter() { + } + NgbTimeAdapter.decorators = [ + { type: Injectable, args: [{ providedIn: 'root', useFactory: NGB_DATEPICKER_TIME_ADAPTER_FACTORY },] } + ]; + /** @nocollapse */ NgbTimeAdapter.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: NGB_DATEPICKER_TIME_ADAPTER_FACTORY, token: NgbTimeAdapter, providedIn: "root" }); + return NgbTimeAdapter; +}()); +export { NgbTimeAdapter }; +if (false) { + /** + * Converts a user-model time of type `T` to an `NgbTimeStruct` for internal use. + * @abstract + * @param {?} value + * @return {?} + */ + NgbTimeAdapter.prototype.fromModel = function (value) { }; + /** + * Converts an internal `NgbTimeStruct` time to a user-model time of type `T`. + * @abstract + * @param {?} time + * @return {?} + */ + NgbTimeAdapter.prototype.toModel = function (time) { }; +} +var NgbTimeStructAdapter = /** @class */ (function (_super) { + tslib_1.__extends(NgbTimeStructAdapter, _super); + function NgbTimeStructAdapter() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * Converts a NgbTimeStruct value into NgbTimeStruct value + */ + /** + * Converts a NgbTimeStruct value into NgbTimeStruct value + * @param {?} time + * @return {?} + */ + NgbTimeStructAdapter.prototype.fromModel = /** + * Converts a NgbTimeStruct value into NgbTimeStruct value + * @param {?} time + * @return {?} + */ + function (time) { + return (time && isInteger(time.hour) && isInteger(time.minute)) ? + { hour: time.hour, minute: time.minute, second: isInteger(time.second) ? time.second : null } : + null; + }; + /** + * Converts a NgbTimeStruct value into NgbTimeStruct value + */ + /** + * Converts a NgbTimeStruct value into NgbTimeStruct value + * @param {?} time + * @return {?} + */ + NgbTimeStructAdapter.prototype.toModel = /** + * Converts a NgbTimeStruct value into NgbTimeStruct value + * @param {?} time + * @return {?} + */ + function (time) { + return (time && isInteger(time.hour) && isInteger(time.minute)) ? + { hour: time.hour, minute: time.minute, second: isInteger(time.second) ? time.second : null } : + null; + }; + NgbTimeStructAdapter.decorators = [ + { type: Injectable } + ]; + return NgbTimeStructAdapter; +}(NgbTimeAdapter)); +export { NgbTimeStructAdapter }; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdiLXRpbWUtYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbInRpbWVwaWNrZXIvbmdiLXRpbWUtYWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFekMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGNBQWMsQ0FBQzs7Ozs7QUFFdkMsTUFBTSxVQUFVLG1DQUFtQztJQUNqRCxPQUFPLElBQUksb0JBQW9CLEVBQUUsQ0FBQztBQUNwQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBZUQ7SUFBQTtLQVdDOztnQkFYQSxVQUFVLFNBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxtQ0FBbUMsRUFBQzs7O3lCQXJCakY7Q0FnQ0MsQUFYRCxJQVdDO1NBVnFCLGNBQWM7Ozs7Ozs7O0lBSWxDLDBEQUE0Qzs7Ozs7OztJQUs1Qyx1REFBeUM7O0FBRzNDO0lBQzBDLGdEQUE2QjtJQUR2RTs7SUFtQkEsQ0FBQztJQWpCQzs7T0FFRzs7Ozs7O0lBQ0gsd0NBQVM7Ozs7O0lBQVQsVUFBVSxJQUFtQjtRQUMzQixPQUFPLENBQUMsSUFBSSxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0QsRUFBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQztZQUM3RixJQUFJLENBQUM7SUFDWCxDQUFDO0lBRUQ7O09BRUc7Ozs7OztJQUNILHNDQUFPOzs7OztJQUFQLFVBQVEsSUFBbUI7UUFDekIsT0FBTyxDQUFDLElBQUksSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdELEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBQyxDQUFDLENBQUM7WUFDN0YsSUFBSSxDQUFDO0lBQ1gsQ0FBQzs7Z0JBbEJGLFVBQVU7O0lBbUJYLDJCQUFDO0NBQUEsQUFuQkQsQ0FDMEMsY0FBYyxHQWtCdkQ7U0FsQlksb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TmdiVGltZVN0cnVjdH0gZnJvbSAnLi9uZ2ItdGltZS1zdHJ1Y3QnO1xuaW1wb3J0IHtpc0ludGVnZXJ9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBOR0JfREFURVBJQ0tFUl9USU1FX0FEQVBURVJfRkFDVE9SWSgpIHtcbiAgcmV0dXJuIG5ldyBOZ2JUaW1lU3RydWN0QWRhcHRlcigpO1xufVxuXG4vKipcbiAqIEFuIGFic3RyYWN0IHNlcnZpY2UgdGhhdCBkb2VzIHRoZSBjb252ZXJzaW9uIGJldHdlZW4gdGhlIGludGVybmFsIHRpbWVwaWNrZXIgYE5nYlRpbWVTdHJ1Y3RgIG1vZGVsIGFuZFxuICogYW55IHByb3ZpZGVkIHVzZXIgdGltZSBtb2RlbCBgVGAsIGV4LiBhIHN0cmluZywgYSBuYXRpdmUgZGF0ZSwgZXRjLlxuICpcbiAqIFRoZSBhZGFwdGVyIGlzIHVzZWQgKipvbmx5KiogZm9yIGNvbnZlcnNpb24gd2hlbiBiaW5kaW5nIHRpbWVwaWNrZXIgdG8gYSBmb3JtIGNvbnRyb2wsXG4gKiBleC4gYFsobmdNb2RlbCldPVwidXNlclRpbWVNb2RlbFwiYC4gSGVyZSBgdXNlclRpbWVNb2RlbGAgY2FuIGJlIG9mIGFueSB0eXBlLlxuICpcbiAqIFRoZSBkZWZhdWx0IHRpbWVwaWNrZXIgaW1wbGVtZW50YXRpb24gYXNzdW1lcyB3ZSB1c2UgYE5nYlRpbWVTdHJ1Y3RgIGFzIGEgdXNlciBtb2RlbC5cbiAqXG4gKiBTZWUgdGhlIFtjdXN0b20gdGltZSBhZGFwdGVyIGRlbW9dKCMvY29tcG9uZW50cy90aW1lcGlja2VyL2V4YW1wbGVzI2FkYXB0ZXIpIGZvciBhbiBleGFtcGxlLlxuICpcbiAqIEBzaW5jZSAyLjIuMFxuICovXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnLCB1c2VGYWN0b3J5OiBOR0JfREFURVBJQ0tFUl9USU1FX0FEQVBURVJfRkFDVE9SWX0pXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTmdiVGltZUFkYXB0ZXI8VD4ge1xuICAvKipcbiAgICogQ29udmVydHMgYSB1c2VyLW1vZGVsIHRpbWUgb2YgdHlwZSBgVGAgdG8gYW4gYE5nYlRpbWVTdHJ1Y3RgIGZvciBpbnRlcm5hbCB1c2UuXG4gICAqL1xuICBhYnN0cmFjdCBmcm9tTW9kZWwodmFsdWU6IFQpOiBOZ2JUaW1lU3RydWN0O1xuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhbiBpbnRlcm5hbCBgTmdiVGltZVN0cnVjdGAgdGltZSB0byBhIHVzZXItbW9kZWwgdGltZSBvZiB0eXBlIGBUYC5cbiAgICovXG4gIGFic3RyYWN0IHRvTW9kZWwodGltZTogTmdiVGltZVN0cnVjdCk6IFQ7XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBOZ2JUaW1lU3RydWN0QWRhcHRlciBleHRlbmRzIE5nYlRpbWVBZGFwdGVyPE5nYlRpbWVTdHJ1Y3Q+IHtcbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgTmdiVGltZVN0cnVjdCB2YWx1ZSBpbnRvIE5nYlRpbWVTdHJ1Y3QgdmFsdWVcbiAgICovXG4gIGZyb21Nb2RlbCh0aW1lOiBOZ2JUaW1lU3RydWN0KTogTmdiVGltZVN0cnVjdCB7XG4gICAgcmV0dXJuICh0aW1lICYmIGlzSW50ZWdlcih0aW1lLmhvdXIpICYmIGlzSW50ZWdlcih0aW1lLm1pbnV0ZSkpID9cbiAgICAgICAge2hvdXI6IHRpbWUuaG91ciwgbWludXRlOiB0aW1lLm1pbnV0ZSwgc2Vjb25kOiBpc0ludGVnZXIodGltZS5zZWNvbmQpID8gdGltZS5zZWNvbmQgOiBudWxsfSA6XG4gICAgICAgIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYSBOZ2JUaW1lU3RydWN0IHZhbHVlIGludG8gTmdiVGltZVN0cnVjdCB2YWx1ZVxuICAgKi9cbiAgdG9Nb2RlbCh0aW1lOiBOZ2JUaW1lU3RydWN0KTogTmdiVGltZVN0cnVjdCB7XG4gICAgcmV0dXJuICh0aW1lICYmIGlzSW50ZWdlcih0aW1lLmhvdXIpICYmIGlzSW50ZWdlcih0aW1lLm1pbnV0ZSkpID9cbiAgICAgICAge2hvdXI6IHRpbWUuaG91ciwgbWludXRlOiB0aW1lLm1pbnV0ZSwgc2Vjb25kOiBpc0ludGVnZXIodGltZS5zZWNvbmQpID8gdGltZS5zZWNvbmQgOiBudWxsfSA6XG4gICAgICAgIG51bGw7XG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/timepicker/ngb-time-struct.js b/dist/sunbird-ui-components/esm5/timepicker/ngb-time-struct.js new file mode 100644 index 0000000..3bdb2c7 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/timepicker/ngb-time-struct.js @@ -0,0 +1,27 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * An interface for the time model used by the timepicker. + * @record + */ +export function NgbTimeStruct() { } +if (false) { + /** + * The hour in the `[0, 23]` range. + * @type {?} + */ + NgbTimeStruct.prototype.hour; + /** + * The minute in the `[0, 59]` range. + * @type {?} + */ + NgbTimeStruct.prototype.minute; + /** + * The second in the `[0, 59]` range. + * @type {?} + */ + NgbTimeStruct.prototype.second; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdiLXRpbWUtc3RydWN0LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsidGltZXBpY2tlci9uZ2ItdGltZS1zdHJ1Y3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFHQSxtQ0FlQzs7Ozs7O0lBWEMsNkJBQWE7Ozs7O0lBS2IsK0JBQWU7Ozs7O0lBS2YsK0JBQWUiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEFuIGludGVyZmFjZSBmb3IgdGhlIHRpbWUgbW9kZWwgdXNlZCBieSB0aGUgdGltZXBpY2tlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZ2JUaW1lU3RydWN0IHtcbiAgLyoqXG4gICAqIFRoZSBob3VyIGluIHRoZSBgWzAsIDIzXWAgcmFuZ2UuXG4gICAqL1xuICBob3VyOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBtaW51dGUgaW4gdGhlIGBbMCwgNTldYCByYW5nZS5cbiAgICovXG4gIG1pbnV0ZTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgc2Vjb25kIGluIHRoZSBgWzAsIDU5XWAgcmFuZ2UuXG4gICAqL1xuICBzZWNvbmQ6IG51bWJlcjtcbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/timepicker/ngb-time.js b/dist/sunbird-ui-components/esm5/timepicker/ngb-time.js new file mode 100644 index 0000000..edf36c8 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/timepicker/ngb-time.js @@ -0,0 +1,128 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { isNumber, toInteger } from '../util/util'; +var NgbTime = /** @class */ (function () { + function NgbTime(hour, minute, second) { + this.hour = toInteger(hour); + this.minute = toInteger(minute); + this.second = toInteger(second); + } + /** + * @param {?=} step + * @return {?} + */ + NgbTime.prototype.changeHour = /** + * @param {?=} step + * @return {?} + */ + function (step) { + if (step === void 0) { step = 1; } + this.updateHour((isNaN(this.hour) ? 0 : this.hour) + step); + }; + /** + * @param {?} hour + * @return {?} + */ + NgbTime.prototype.updateHour = /** + * @param {?} hour + * @return {?} + */ + function (hour) { + if (isNumber(hour)) { + this.hour = (hour < 0 ? 24 + hour : hour) % 24; + } + else { + this.hour = NaN; + } + }; + /** + * @param {?=} step + * @return {?} + */ + NgbTime.prototype.changeMinute = /** + * @param {?=} step + * @return {?} + */ + function (step) { + if (step === void 0) { step = 1; } + this.updateMinute((isNaN(this.minute) ? 0 : this.minute) + step); + }; + /** + * @param {?} minute + * @return {?} + */ + NgbTime.prototype.updateMinute = /** + * @param {?} minute + * @return {?} + */ + function (minute) { + if (isNumber(minute)) { + this.minute = minute % 60 < 0 ? 60 + minute % 60 : minute % 60; + this.changeHour(Math.floor(minute / 60)); + } + else { + this.minute = NaN; + } + }; + /** + * @param {?=} step + * @return {?} + */ + NgbTime.prototype.changeSecond = /** + * @param {?=} step + * @return {?} + */ + function (step) { + if (step === void 0) { step = 1; } + this.updateSecond((isNaN(this.second) ? 0 : this.second) + step); + }; + /** + * @param {?} second + * @return {?} + */ + NgbTime.prototype.updateSecond = /** + * @param {?} second + * @return {?} + */ + function (second) { + if (isNumber(second)) { + this.second = second < 0 ? 60 + second % 60 : second % 60; + this.changeMinute(Math.floor(second / 60)); + } + else { + this.second = NaN; + } + }; + /** + * @param {?=} checkSecs + * @return {?} + */ + NgbTime.prototype.isValid = /** + * @param {?=} checkSecs + * @return {?} + */ + function (checkSecs) { + if (checkSecs === void 0) { checkSecs = true; } + return isNumber(this.hour) && isNumber(this.minute) && (checkSecs ? isNumber(this.second) : true); + }; + /** + * @return {?} + */ + NgbTime.prototype.toString = /** + * @return {?} + */ + function () { return (this.hour || 0) + ":" + (this.minute || 0) + ":" + (this.second || 0); }; + return NgbTime; +}()); +export { NgbTime }; +if (false) { + /** @type {?} */ + NgbTime.prototype.hour; + /** @type {?} */ + NgbTime.prototype.minute; + /** @type {?} */ + NgbTime.prototype.second; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdiLXRpbWUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJ0aW1lcGlja2VyL25nYi10aW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFFLFNBQVMsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUVqRDtJQUtFLGlCQUFZLElBQWEsRUFBRSxNQUFlLEVBQUUsTUFBZTtRQUN6RCxJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsQyxDQUFDOzs7OztJQUVELDRCQUFVOzs7O0lBQVYsVUFBVyxJQUFRO1FBQVIscUJBQUEsRUFBQSxRQUFRO1FBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQUMsQ0FBQzs7Ozs7SUFFcEYsNEJBQVU7Ozs7SUFBVixVQUFXLElBQVk7UUFDckIsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbEIsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUNoRDthQUFNO1lBQ0wsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7U0FDakI7SUFDSCxDQUFDOzs7OztJQUVELDhCQUFZOzs7O0lBQVosVUFBYSxJQUFRO1FBQVIscUJBQUEsRUFBQSxRQUFRO1FBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQUMsQ0FBQzs7Ozs7SUFFNUYsOEJBQVk7Ozs7SUFBWixVQUFhLE1BQWM7UUFDekIsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDL0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQzFDO2FBQU07WUFDTCxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztTQUNuQjtJQUNILENBQUM7Ozs7O0lBRUQsOEJBQVk7Ozs7SUFBWixVQUFhLElBQVE7UUFBUixxQkFBQSxFQUFBLFFBQVE7UUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFBQyxDQUFDOzs7OztJQUU1Riw4QkFBWTs7OztJQUFaLFVBQWEsTUFBYztRQUN6QixJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNwQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1lBQzFELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUM1QzthQUFNO1lBQ0wsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7U0FDbkI7SUFDSCxDQUFDOzs7OztJQUVELHlCQUFPOzs7O0lBQVAsVUFBUSxTQUFnQjtRQUFoQiwwQkFBQSxFQUFBLGdCQUFnQjtRQUN0QixPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEcsQ0FBQzs7OztJQUVELDBCQUFROzs7SUFBUixjQUFhLE9BQU8sQ0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBSSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsV0FBSSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBRSxDQUFDLENBQUMsQ0FBQztJQUNwRixjQUFDO0FBQUQsQ0FBQyxBQWhERCxJQWdEQzs7OztJQS9DQyx1QkFBYTs7SUFDYix5QkFBZTs7SUFDZix5QkFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aXNOdW1iZXIsIHRvSW50ZWdlcn0gZnJvbSAnLi4vdXRpbC91dGlsJztcblxuZXhwb3J0IGNsYXNzIE5nYlRpbWUge1xuICBob3VyOiBudW1iZXI7XG4gIG1pbnV0ZTogbnVtYmVyO1xuICBzZWNvbmQ6IG51bWJlcjtcblxuICBjb25zdHJ1Y3Rvcihob3VyPzogbnVtYmVyLCBtaW51dGU/OiBudW1iZXIsIHNlY29uZD86IG51bWJlcikge1xuICAgIHRoaXMuaG91ciA9IHRvSW50ZWdlcihob3VyKTtcbiAgICB0aGlzLm1pbnV0ZSA9IHRvSW50ZWdlcihtaW51dGUpO1xuICAgIHRoaXMuc2Vjb25kID0gdG9JbnRlZ2VyKHNlY29uZCk7XG4gIH1cblxuICBjaGFuZ2VIb3VyKHN0ZXAgPSAxKSB7IHRoaXMudXBkYXRlSG91cigoaXNOYU4odGhpcy5ob3VyKSA/IDAgOiB0aGlzLmhvdXIpICsgc3RlcCk7IH1cblxuICB1cGRhdGVIb3VyKGhvdXI6IG51bWJlcikge1xuICAgIGlmIChpc051bWJlcihob3VyKSkge1xuICAgICAgdGhpcy5ob3VyID0gKGhvdXIgPCAwID8gMjQgKyBob3VyIDogaG91cikgJSAyNDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ob3VyID0gTmFOO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZU1pbnV0ZShzdGVwID0gMSkgeyB0aGlzLnVwZGF0ZU1pbnV0ZSgoaXNOYU4odGhpcy5taW51dGUpID8gMCA6IHRoaXMubWludXRlKSArIHN0ZXApOyB9XG5cbiAgdXBkYXRlTWludXRlKG1pbnV0ZTogbnVtYmVyKSB7XG4gICAgaWYgKGlzTnVtYmVyKG1pbnV0ZSkpIHtcbiAgICAgIHRoaXMubWludXRlID0gbWludXRlICUgNjAgPCAwID8gNjAgKyBtaW51dGUgJSA2MCA6IG1pbnV0ZSAlIDYwO1xuICAgICAgdGhpcy5jaGFuZ2VIb3VyKE1hdGguZmxvb3IobWludXRlIC8gNjApKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5taW51dGUgPSBOYU47XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlU2Vjb25kKHN0ZXAgPSAxKSB7IHRoaXMudXBkYXRlU2Vjb25kKChpc05hTih0aGlzLnNlY29uZCkgPyAwIDogdGhpcy5zZWNvbmQpICsgc3RlcCk7IH1cblxuICB1cGRhdGVTZWNvbmQoc2Vjb25kOiBudW1iZXIpIHtcbiAgICBpZiAoaXNOdW1iZXIoc2Vjb25kKSkge1xuICAgICAgdGhpcy5zZWNvbmQgPSBzZWNvbmQgPCAwID8gNjAgKyBzZWNvbmQgJSA2MCA6IHNlY29uZCAlIDYwO1xuICAgICAgdGhpcy5jaGFuZ2VNaW51dGUoTWF0aC5mbG9vcihzZWNvbmQgLyA2MCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlY29uZCA9IE5hTjtcbiAgICB9XG4gIH1cblxuICBpc1ZhbGlkKGNoZWNrU2VjcyA9IHRydWUpIHtcbiAgICByZXR1cm4gaXNOdW1iZXIodGhpcy5ob3VyKSAmJiBpc051bWJlcih0aGlzLm1pbnV0ZSkgJiYgKGNoZWNrU2VjcyA/IGlzTnVtYmVyKHRoaXMuc2Vjb25kKSA6IHRydWUpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7IHJldHVybiBgJHt0aGlzLmhvdXIgfHwgMH06JHt0aGlzLm1pbnV0ZSB8fCAwfToke3RoaXMuc2Vjb25kIHx8IDB9YDsgfVxufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/timepicker/timepicker-config.js b/dist/sunbird-ui-components/esm5/timepicker/timepicker-config.js new file mode 100644 index 0000000..08268a6 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/timepicker/timepicker-config.js @@ -0,0 +1,52 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Injectable } from '@angular/core'; +import * as i0 from "@angular/core"; +/** + * A configuration service for the [`NgbTimepicker`](#/components/timepicker/api#NgbTimepicker) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the timepickers used in the application. + */ +var NgbTimepickerConfig = /** @class */ (function () { + function NgbTimepickerConfig() { + this.meridian = false; + this.spinners = true; + this.seconds = false; + this.hourStep = 1; + this.minuteStep = 1; + this.secondStep = 1; + this.disabled = false; + this.readonlyInputs = false; + this.size = 'medium'; + } + NgbTimepickerConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ NgbTimepickerConfig.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function NgbTimepickerConfig_Factory() { return new NgbTimepickerConfig(); }, token: NgbTimepickerConfig, providedIn: "root" }); + return NgbTimepickerConfig; +}()); +export { NgbTimepickerConfig }; +if (false) { + /** @type {?} */ + NgbTimepickerConfig.prototype.meridian; + /** @type {?} */ + NgbTimepickerConfig.prototype.spinners; + /** @type {?} */ + NgbTimepickerConfig.prototype.seconds; + /** @type {?} */ + NgbTimepickerConfig.prototype.hourStep; + /** @type {?} */ + NgbTimepickerConfig.prototype.minuteStep; + /** @type {?} */ + NgbTimepickerConfig.prototype.secondStep; + /** @type {?} */ + NgbTimepickerConfig.prototype.disabled; + /** @type {?} */ + NgbTimepickerConfig.prototype.readonlyInputs; + /** @type {?} */ + NgbTimepickerConfig.prototype.size; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXBpY2tlci1jb25maWcuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJ0aW1lcGlja2VyL3RpbWVwaWNrZXItY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQVF6QztJQUFBO1FBRUUsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixhQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsYUFBUSxHQUFHLENBQUMsQ0FBQztRQUNiLGVBQVUsR0FBRyxDQUFDLENBQUM7UUFDZixlQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUN2QixTQUFJLEdBQWlDLFFBQVEsQ0FBQztLQUMvQzs7Z0JBWEEsVUFBVSxTQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQzs7OzhCQVJoQztDQW1CQyxBQVhELElBV0M7U0FWWSxtQkFBbUI7OztJQUM5Qix1Q0FBaUI7O0lBQ2pCLHVDQUFnQjs7SUFDaEIsc0NBQWdCOztJQUNoQix1Q0FBYTs7SUFDYix5Q0FBZTs7SUFDZix5Q0FBZTs7SUFDZix1Q0FBaUI7O0lBQ2pCLDZDQUF1Qjs7SUFDdkIsbUNBQThDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBBIGNvbmZpZ3VyYXRpb24gc2VydmljZSBmb3IgdGhlIFtgTmdiVGltZXBpY2tlcmBdKCMvY29tcG9uZW50cy90aW1lcGlja2VyL2FwaSNOZ2JUaW1lcGlja2VyKSBjb21wb25lbnQuXG4gKlxuICogWW91IGNhbiBpbmplY3QgdGhpcyBzZXJ2aWNlLCB0eXBpY2FsbHkgaW4geW91ciByb290IGNvbXBvbmVudCwgYW5kIGN1c3RvbWl6ZSB0aGUgdmFsdWVzIG9mIGl0cyBwcm9wZXJ0aWVzIGluXG4gKiBvcmRlciB0byBwcm92aWRlIGRlZmF1bHQgdmFsdWVzIGZvciBhbGwgdGhlIHRpbWVwaWNrZXJzIHVzZWQgaW4gdGhlIGFwcGxpY2F0aW9uLlxuICovXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBOZ2JUaW1lcGlja2VyQ29uZmlnIHtcbiAgbWVyaWRpYW4gPSBmYWxzZTtcbiAgc3Bpbm5lcnMgPSB0cnVlO1xuICBzZWNvbmRzID0gZmFsc2U7XG4gIGhvdXJTdGVwID0gMTtcbiAgbWludXRlU3RlcCA9IDE7XG4gIHNlY29uZFN0ZXAgPSAxO1xuICBkaXNhYmxlZCA9IGZhbHNlO1xuICByZWFkb25seUlucHV0cyA9IGZhbHNlO1xuICBzaXplOiAnc21hbGwnIHwgJ21lZGl1bScgfCAnbGFyZ2UnID0gJ21lZGl1bSc7XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/timepicker/timepicker-i18n.js b/dist/sunbird-ui-components/esm5/timepicker/timepicker-i18n.js new file mode 100644 index 0000000..0ee6933 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/timepicker/timepicker-i18n.js @@ -0,0 +1,84 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import * as tslib_1 from "tslib"; +import { Inject, Injectable, LOCALE_ID } from '@angular/core'; +import { FormStyle, getLocaleDayPeriods, TranslationWidth } from '@angular/common'; +import * as i0 from "@angular/core"; +/** + * @param {?} locale + * @return {?} + */ +export function NGB_TIMEPICKER_I18N_FACTORY(locale) { + return new NgbTimepickerI18nDefault(locale); +} +/** + * Type of the service supplying day periods (for example, 'AM' and 'PM') to NgbTimepicker component. + * The default implementation of this service honors the Angular locale, and uses the registered locale data, + * as explained in the Angular i18n guide. + * @abstract + */ +var NgbTimepickerI18n = /** @class */ (function () { + function NgbTimepickerI18n() { + } + NgbTimepickerI18n.decorators = [ + { type: Injectable, args: [{ providedIn: 'root', useFactory: NGB_TIMEPICKER_I18N_FACTORY, deps: [LOCALE_ID] },] } + ]; + /** @nocollapse */ NgbTimepickerI18n.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function NgbTimepickerI18n_Factory() { return NGB_TIMEPICKER_I18N_FACTORY(i0.ɵɵinject(i0.LOCALE_ID)); }, token: NgbTimepickerI18n, providedIn: "root" }); + return NgbTimepickerI18n; +}()); +export { NgbTimepickerI18n }; +if (false) { + /** + * Returns the name for the period before midday. + * @abstract + * @return {?} + */ + NgbTimepickerI18n.prototype.getMorningPeriod = function () { }; + /** + * Returns the name for the period after midday. + * @abstract + * @return {?} + */ + NgbTimepickerI18n.prototype.getAfternoonPeriod = function () { }; +} +var NgbTimepickerI18nDefault = /** @class */ (function (_super) { + tslib_1.__extends(NgbTimepickerI18nDefault, _super); + function NgbTimepickerI18nDefault(locale) { + var _this = _super.call(this) || this; + _this._periods = getLocaleDayPeriods(locale, FormStyle.Standalone, TranslationWidth.Narrow); + return _this; + } + /** + * @return {?} + */ + NgbTimepickerI18nDefault.prototype.getMorningPeriod = /** + * @return {?} + */ + function () { return this._periods[0]; }; + /** + * @return {?} + */ + NgbTimepickerI18nDefault.prototype.getAfternoonPeriod = /** + * @return {?} + */ + function () { return this._periods[1]; }; + NgbTimepickerI18nDefault.decorators = [ + { type: Injectable } + ]; + /** @nocollapse */ + NgbTimepickerI18nDefault.ctorParameters = function () { return [ + { type: String, decorators: [{ type: Inject, args: [LOCALE_ID,] }] } + ]; }; + return NgbTimepickerI18nDefault; +}(NgbTimepickerI18n)); +export { NgbTimepickerI18nDefault }; +if (false) { + /** + * @type {?} + * @private + */ + NgbTimepickerI18nDefault.prototype._periods; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXBpY2tlci1pMThuLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsidGltZXBpY2tlci90aW1lcGlja2VyLWkxOG4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDNUQsT0FBTyxFQUFDLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7QUFFakYsTUFBTSxVQUFVLDJCQUEyQixDQUFDLE1BQU07SUFDaEQsT0FBTyxJQUFJLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzlDLENBQUM7Ozs7Ozs7QUFPRDtJQUFBO0tBV0M7O2dCQVhBLFVBQVUsU0FBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLDJCQUEyQixFQUFFLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFDOzs7NEJBWjVGO0NBdUJDLEFBWEQsSUFXQztTQVZxQixpQkFBaUI7Ozs7Ozs7SUFJckMsK0RBQW9DOzs7Ozs7SUFLcEMsaUVBQXNDOztBQUd4QztJQUM4QyxvREFBaUI7SUFHN0Qsa0NBQStCLE1BQWM7UUFBN0MsWUFDRSxpQkFBTyxTQUdSO1FBREMsS0FBSSxDQUFDLFFBQVEsR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQzs7SUFDN0YsQ0FBQzs7OztJQUVELG1EQUFnQjs7O0lBQWhCLGNBQTZCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Ozs7SUFFdkQscURBQWtCOzs7SUFBbEIsY0FBK0IsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7Z0JBWjFELFVBQVU7Ozs7NkNBSUksTUFBTSxTQUFDLFNBQVM7O0lBUy9CLCtCQUFDO0NBQUEsQUFiRCxDQUM4QyxpQkFBaUIsR0FZOUQ7U0FaWSx3QkFBd0I7Ozs7OztJQUNuQyw0Q0FBbUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZSwgTE9DQUxFX0lEfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Rm9ybVN0eWxlLCBnZXRMb2NhbGVEYXlQZXJpb2RzLCBUcmFuc2xhdGlvbldpZHRofSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5leHBvcnQgZnVuY3Rpb24gTkdCX1RJTUVQSUNLRVJfSTE4Tl9GQUNUT1JZKGxvY2FsZSkge1xuICByZXR1cm4gbmV3IE5nYlRpbWVwaWNrZXJJMThuRGVmYXVsdChsb2NhbGUpO1xufVxuXG4vKipcbiAqIFR5cGUgb2YgdGhlIHNlcnZpY2Ugc3VwcGx5aW5nIGRheSBwZXJpb2RzIChmb3IgZXhhbXBsZSwgJ0FNJyBhbmQgJ1BNJykgdG8gTmdiVGltZXBpY2tlciBjb21wb25lbnQuXG4gKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIHNlcnZpY2UgaG9ub3JzIHRoZSBBbmd1bGFyIGxvY2FsZSwgYW5kIHVzZXMgdGhlIHJlZ2lzdGVyZWQgbG9jYWxlIGRhdGEsXG4gKiBhcyBleHBsYWluZWQgaW4gdGhlIEFuZ3VsYXIgaTE4biBndWlkZS5cbiAqL1xuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290JywgdXNlRmFjdG9yeTogTkdCX1RJTUVQSUNLRVJfSTE4Tl9GQUNUT1JZLCBkZXBzOiBbTE9DQUxFX0lEXX0pXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTmdiVGltZXBpY2tlckkxOG4ge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgbmFtZSBmb3IgdGhlIHBlcmlvZCBiZWZvcmUgbWlkZGF5LlxuICAgKi9cbiAgYWJzdHJhY3QgZ2V0TW9ybmluZ1BlcmlvZCgpOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG5hbWUgZm9yIHRoZSBwZXJpb2QgYWZ0ZXIgbWlkZGF5LlxuICAgKi9cbiAgYWJzdHJhY3QgZ2V0QWZ0ZXJub29uUGVyaW9kKCk6IHN0cmluZztcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE5nYlRpbWVwaWNrZXJJMThuRGVmYXVsdCBleHRlbmRzIE5nYlRpbWVwaWNrZXJJMThuIHtcbiAgcHJpdmF0ZSBfcGVyaW9kczogW3N0cmluZywgc3RyaW5nXTtcblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KExPQ0FMRV9JRCkgbG9jYWxlOiBzdHJpbmcpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5fcGVyaW9kcyA9IGdldExvY2FsZURheVBlcmlvZHMobG9jYWxlLCBGb3JtU3R5bGUuU3RhbmRhbG9uZSwgVHJhbnNsYXRpb25XaWR0aC5OYXJyb3cpO1xuICB9XG5cbiAgZ2V0TW9ybmluZ1BlcmlvZCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5fcGVyaW9kc1swXTsgfVxuXG4gIGdldEFmdGVybm9vblBlcmlvZCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5fcGVyaW9kc1sxXTsgfVxufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/timepicker/timepicker.js b/dist/sunbird-ui-components/esm5/timepicker/timepicker.js new file mode 100644 index 0000000..2177d8d --- /dev/null +++ b/dist/sunbird-ui-components/esm5/timepicker/timepicker.js @@ -0,0 +1,420 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { ChangeDetectorRef, Component, forwardRef, Input, ViewEncapsulation } from '@angular/core'; +import { NG_VALUE_ACCESSOR } from '@angular/forms'; +import { isInteger, isNumber, padNumber, toInteger } from '../util/util'; +import { NgbTime } from './ngb-time'; +import { NgbTimepickerConfig } from './timepicker-config'; +import { NgbTimeAdapter } from './ngb-time-adapter'; +import { NgbTimepickerI18n } from './timepicker-i18n'; +/** @type {?} */ +var NGB_TIMEPICKER_VALUE_ACCESSOR = { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef((/** + * @return {?} + */ + function () { return NgbTimepicker; })), + multi: true +}; +/** + * A directive that helps with wth picking hours, minutes and seconds. + */ +var NgbTimepicker = /** @class */ (function () { + function NgbTimepicker(_config, _ngbTimeAdapter, _cd, i18n) { + this._config = _config; + this._ngbTimeAdapter = _ngbTimeAdapter; + this._cd = _cd; + this.i18n = i18n; + this.onChange = (/** + * @param {?} _ + * @return {?} + */ + function (_) { }); + this.onTouched = (/** + * @return {?} + */ + function () { }); + this.meridian = _config.meridian; + this.spinners = _config.spinners; + this.seconds = _config.seconds; + this.hourStep = _config.hourStep; + this.minuteStep = _config.minuteStep; + this.secondStep = _config.secondStep; + this.disabled = _config.disabled; + this.readonlyInputs = _config.readonlyInputs; + this.size = _config.size; + } + Object.defineProperty(NgbTimepicker.prototype, "hourStep", { + get: /** + * @return {?} + */ + function () { return this._hourStep; }, + /** + * The number of hours to add/subtract when clicking hour spinners. + */ + set: /** + * The number of hours to add/subtract when clicking hour spinners. + * @param {?} step + * @return {?} + */ + function (step) { + this._hourStep = isInteger(step) ? step : this._config.hourStep; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbTimepicker.prototype, "minuteStep", { + get: /** + * @return {?} + */ + function () { return this._minuteStep; }, + /** + * The number of minutes to add/subtract when clicking minute spinners. + */ + set: /** + * The number of minutes to add/subtract when clicking minute spinners. + * @param {?} step + * @return {?} + */ + function (step) { + this._minuteStep = isInteger(step) ? step : this._config.minuteStep; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbTimepicker.prototype, "secondStep", { + get: /** + * @return {?} + */ + function () { return this._secondStep; }, + /** + * The number of seconds to add/subtract when clicking second spinners. + */ + set: /** + * The number of seconds to add/subtract when clicking second spinners. + * @param {?} step + * @return {?} + */ + function (step) { + this._secondStep = isInteger(step) ? step : this._config.secondStep; + }, + enumerable: true, + configurable: true + }); + /** + * @param {?} value + * @return {?} + */ + NgbTimepicker.prototype.writeValue = /** + * @param {?} value + * @return {?} + */ + function (value) { + /** @type {?} */ + var structValue = this._ngbTimeAdapter.fromModel(value); + this.model = structValue ? new NgbTime(structValue.hour, structValue.minute, structValue.second) : new NgbTime(); + if (!this.seconds && (!structValue || !isNumber(structValue.second))) { + this.model.second = 0; + } + this._cd.markForCheck(); + }; + /** + * @param {?} fn + * @return {?} + */ + NgbTimepicker.prototype.registerOnChange = /** + * @param {?} fn + * @return {?} + */ + function (fn) { this.onChange = fn; }; + /** + * @param {?} fn + * @return {?} + */ + NgbTimepicker.prototype.registerOnTouched = /** + * @param {?} fn + * @return {?} + */ + function (fn) { this.onTouched = fn; }; + /** + * @param {?} isDisabled + * @return {?} + */ + NgbTimepicker.prototype.setDisabledState = /** + * @param {?} isDisabled + * @return {?} + */ + function (isDisabled) { this.disabled = isDisabled; }; + /** + * @param {?} step + * @return {?} + */ + NgbTimepicker.prototype.changeHour = /** + * @param {?} step + * @return {?} + */ + function (step) { + this.model.changeHour(step); + this.propagateModelChange(); + }; + /** + * @param {?} step + * @return {?} + */ + NgbTimepicker.prototype.changeMinute = /** + * @param {?} step + * @return {?} + */ + function (step) { + this.model.changeMinute(step); + this.propagateModelChange(); + }; + /** + * @param {?} step + * @return {?} + */ + NgbTimepicker.prototype.changeSecond = /** + * @param {?} step + * @return {?} + */ + function (step) { + this.model.changeSecond(step); + this.propagateModelChange(); + }; + /** + * @param {?} newVal + * @return {?} + */ + NgbTimepicker.prototype.updateHour = /** + * @param {?} newVal + * @return {?} + */ + function (newVal) { + /** @type {?} */ + var isPM = this.model.hour >= 12; + /** @type {?} */ + var enteredHour = toInteger(newVal); + if (this.meridian && (isPM && enteredHour < 12 || !isPM && enteredHour === 12)) { + this.model.updateHour(enteredHour + 12); + } + else { + this.model.updateHour(enteredHour); + } + this.propagateModelChange(); + }; + /** + * @param {?} newVal + * @return {?} + */ + NgbTimepicker.prototype.updateMinute = /** + * @param {?} newVal + * @return {?} + */ + function (newVal) { + this.model.updateMinute(toInteger(newVal)); + this.propagateModelChange(); + }; + /** + * @param {?} newVal + * @return {?} + */ + NgbTimepicker.prototype.updateSecond = /** + * @param {?} newVal + * @return {?} + */ + function (newVal) { + this.model.updateSecond(toInteger(newVal)); + this.propagateModelChange(); + }; + /** + * @return {?} + */ + NgbTimepicker.prototype.toggleMeridian = /** + * @return {?} + */ + function () { + if (this.meridian) { + this.changeHour(12); + } + }; + /** + * @param {?} value + * @return {?} + */ + NgbTimepicker.prototype.formatHour = /** + * @param {?} value + * @return {?} + */ + function (value) { + if (isNumber(value)) { + if (this.meridian) { + return padNumber(value % 12 === 0 ? 12 : value % 12); + } + else { + return padNumber(value % 24); + } + } + else { + return padNumber(NaN); + } + }; + /** + * @param {?} value + * @return {?} + */ + NgbTimepicker.prototype.formatMinSec = /** + * @param {?} value + * @return {?} + */ + function (value) { return padNumber(value); }; + Object.defineProperty(NgbTimepicker.prototype, "isSmallSize", { + get: /** + * @return {?} + */ + function () { return this.size === 'small'; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbTimepicker.prototype, "isLargeSize", { + get: /** + * @return {?} + */ + function () { return this.size === 'large'; }, + enumerable: true, + configurable: true + }); + /** + * @param {?} changes + * @return {?} + */ + NgbTimepicker.prototype.ngOnChanges = /** + * @param {?} changes + * @return {?} + */ + function (changes) { + if (changes['seconds'] && !this.seconds && this.model && !isNumber(this.model.second)) { + this.model.second = 0; + this.propagateModelChange(false); + } + }; + /** + * @private + * @param {?=} touched + * @return {?} + */ + NgbTimepicker.prototype.propagateModelChange = /** + * @private + * @param {?=} touched + * @return {?} + */ + function (touched) { + if (touched === void 0) { touched = true; } + if (touched) { + this.onTouched(); + } + if (this.model.isValid(this.seconds)) { + this.onChange(this._ngbTimeAdapter.toModel({ hour: this.model.hour, minute: this.model.minute, second: this.model.second })); + } + else { + this.onChange(this._ngbTimeAdapter.toModel(null)); + } + }; + NgbTimepicker.decorators = [ + { type: Component, args: [{ + selector: 'ngb-timepicker', + encapsulation: ViewEncapsulation.None, + template: "\n
\n
\n
\n \n \n \n
\n
:
\n
\n \n \n \n
\n
:
\n
\n \n \n \n
\n
\n
\n \n
\n
\n
\n ", + providers: [NGB_TIMEPICKER_VALUE_ACCESSOR], + styles: ["ngb-timepicker{font-size:1rem}.ngb-tp{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.ngb-tp-input-container{width:4em}.ngb-tp-chevron::before{border-style:solid;border-width:.29em .29em 0 0;content:\"\";display:inline-block;height:.69em;left:.05em;position:relative;top:.15em;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);vertical-align:middle;width:.69em}.ngb-tp-chevron.bottom:before{top:-.3em;-webkit-transform:rotate(135deg);transform:rotate(135deg)}.ngb-tp-input{text-align:center}.ngb-tp-hour,.ngb-tp-meridian,.ngb-tp-minute,.ngb-tp-second{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-align:center;align-items:center;-ms-flex-pack:distribute;justify-content:space-around}.ngb-tp-spacer{width:1em;text-align:center}"] + }] } + ]; + /** @nocollapse */ + NgbTimepicker.ctorParameters = function () { return [ + { type: NgbTimepickerConfig }, + { type: NgbTimeAdapter }, + { type: ChangeDetectorRef }, + { type: NgbTimepickerI18n } + ]; }; + NgbTimepicker.propDecorators = { + meridian: [{ type: Input }], + spinners: [{ type: Input }], + seconds: [{ type: Input }], + hourStep: [{ type: Input }], + minuteStep: [{ type: Input }], + secondStep: [{ type: Input }], + readonlyInputs: [{ type: Input }], + size: [{ type: Input }] + }; + return NgbTimepicker; +}()); +export { NgbTimepicker }; +if (false) { + /** @type {?} */ + NgbTimepicker.prototype.disabled; + /** @type {?} */ + NgbTimepicker.prototype.model; + /** + * @type {?} + * @private + */ + NgbTimepicker.prototype._hourStep; + /** + * @type {?} + * @private + */ + NgbTimepicker.prototype._minuteStep; + /** + * @type {?} + * @private + */ + NgbTimepicker.prototype._secondStep; + /** + * Whether to display 12H or 24H mode. + * @type {?} + */ + NgbTimepicker.prototype.meridian; + /** + * If `true`, the spinners above and below inputs are visible. + * @type {?} + */ + NgbTimepicker.prototype.spinners; + /** + * If `true`, it is possible to select seconds. + * @type {?} + */ + NgbTimepicker.prototype.seconds; + /** + * If `true`, the timepicker is readonly and can't be changed. + * @type {?} + */ + NgbTimepicker.prototype.readonlyInputs; + /** + * The size of inputs and buttons. + * @type {?} + */ + NgbTimepicker.prototype.size; + /** @type {?} */ + NgbTimepicker.prototype.onChange; + /** @type {?} */ + NgbTimepicker.prototype.onTouched; + /** + * @type {?} + * @private + */ + NgbTimepicker.prototype._config; + /** + * @type {?} + * @private + */ + NgbTimepicker.prototype._ngbTimeAdapter; + /** + * @type {?} + * @private + */ + NgbTimepicker.prototype._cd; + /** @type {?} */ + NgbTimepicker.prototype.i18n; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXBpY2tlci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbInRpbWVwaWNrZXIvdGltZXBpY2tlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLEtBQUssRUFHTCxpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF1QixpQkFBaUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXZFLE9BQU8sRUFBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDdkUsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFlBQVksQ0FBQztBQUNuQyxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7O0lBRTlDLDZCQUE2QixHQUFHO0lBQ3BDLE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVU7OztJQUFDLGNBQU0sT0FBQSxhQUFhLEVBQWIsQ0FBYSxFQUFDO0lBQzVDLEtBQUssRUFBRSxJQUFJO0NBQ1o7Ozs7QUFLRDtJQW1KRSx1QkFDcUIsT0FBNEIsRUFBVSxlQUFvQyxFQUNuRixHQUFzQixFQUFTLElBQXVCO1FBRDdDLFlBQU8sR0FBUCxPQUFPLENBQXFCO1FBQVUsb0JBQWUsR0FBZixlQUFlLENBQXFCO1FBQ25GLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQVMsU0FBSSxHQUFKLElBQUksQ0FBbUI7UUFZbEUsYUFBUTs7OztRQUFHLFVBQUMsQ0FBTSxJQUFNLENBQUMsRUFBQztRQUMxQixjQUFTOzs7UUFBRyxjQUFPLENBQUMsRUFBQztRQVpuQixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDakMsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUMvQixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDakMsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUNyQyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDakMsSUFBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDO1FBQzdDLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztJQUMzQixDQUFDO0lBakRELHNCQUNJLG1DQUFROzs7O1FBSVosY0FBeUIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQVJqRDs7V0FFRzs7Ozs7O1FBQ0gsVUFDYSxJQUFZO1lBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO1FBQ2xFLENBQUM7OztPQUFBO0lBT0Qsc0JBQ0kscUNBQVU7Ozs7UUFJZCxjQUEyQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBUnJEOztXQUVHOzs7Ozs7UUFDSCxVQUNlLElBQVk7WUFDekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7UUFDdEUsQ0FBQzs7O09BQUE7SUFPRCxzQkFDSSxxQ0FBVTs7OztRQUlkLGNBQTJCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFSckQ7O1dBRUc7Ozs7OztRQUNILFVBQ2UsSUFBWTtZQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUN0RSxDQUFDOzs7T0FBQTs7Ozs7SUErQkQsa0NBQVU7Ozs7SUFBVixVQUFXLEtBQUs7O1lBQ1IsV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztRQUN6RCxJQUFJLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNqSCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsV0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFO1lBQ3BFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztTQUN2QjtRQUNELElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQzs7Ozs7SUFFRCx3Q0FBZ0I7Ozs7SUFBaEIsVUFBaUIsRUFBdUIsSUFBVSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7Ozs7O0lBRXZFLHlDQUFpQjs7OztJQUFqQixVQUFrQixFQUFhLElBQVUsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDOzs7OztJQUUvRCx3Q0FBZ0I7Ozs7SUFBaEIsVUFBaUIsVUFBbUIsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUM7Ozs7O0lBRXJFLGtDQUFVOzs7O0lBQVYsVUFBVyxJQUFZO1FBQ3JCLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQzlCLENBQUM7Ozs7O0lBRUQsb0NBQVk7Ozs7SUFBWixVQUFhLElBQVk7UUFDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDOUIsQ0FBQzs7Ozs7SUFFRCxvQ0FBWTs7OztJQUFaLFVBQWEsSUFBWTtRQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUM5QixDQUFDOzs7OztJQUVELGtDQUFVOzs7O0lBQVYsVUFBVyxNQUFjOztZQUNqQixJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksRUFBRTs7WUFDNUIsV0FBVyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDckMsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxJQUFJLFdBQVcsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLElBQUksV0FBVyxLQUFLLEVBQUUsQ0FBQyxFQUFFO1lBQzlFLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUMsQ0FBQztTQUN6QzthQUFNO1lBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDcEM7UUFDRCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUM5QixDQUFDOzs7OztJQUVELG9DQUFZOzs7O0lBQVosVUFBYSxNQUFjO1FBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQzlCLENBQUM7Ozs7O0lBRUQsb0NBQVk7Ozs7SUFBWixVQUFhLE1BQWM7UUFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDOUIsQ0FBQzs7OztJQUVELHNDQUFjOzs7SUFBZDtRQUNFLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQixJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ3JCO0lBQ0gsQ0FBQzs7Ozs7SUFFRCxrQ0FBVTs7OztJQUFWLFVBQVcsS0FBYTtRQUN0QixJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNuQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ2pCLE9BQU8sU0FBUyxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQzthQUN0RDtpQkFBTTtnQkFDTCxPQUFPLFNBQVMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUM7YUFDOUI7U0FDRjthQUFNO1lBQ0wsT0FBTyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDdkI7SUFDSCxDQUFDOzs7OztJQUVELG9DQUFZOzs7O0lBQVosVUFBYSxLQUFhLElBQUksT0FBTyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXhELHNCQUFJLHNDQUFXOzs7O1FBQWYsY0FBNkIsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUM7OztPQUFBO0lBRTVELHNCQUFJLHNDQUFXOzs7O1FBQWYsY0FBNkIsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUM7OztPQUFBOzs7OztJQUU1RCxtQ0FBVzs7OztJQUFYLFVBQVksT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNyRixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDdEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ2xDO0lBQ0gsQ0FBQzs7Ozs7O0lBRU8sNENBQW9COzs7OztJQUE1QixVQUE2QixPQUFjO1FBQWQsd0JBQUEsRUFBQSxjQUFjO1FBQ3pDLElBQUksT0FBTyxFQUFFO1lBQ1gsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ2xCO1FBQ0QsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDcEMsSUFBSSxDQUFDLFFBQVEsQ0FDVCxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxFQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2xIO2FBQU07WUFDTCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDbkQ7SUFDSCxDQUFDOztnQkFoUUYsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO29CQUVyQyxRQUFRLEVBQUUsK3NMQTRFVDtvQkFDRCxTQUFTLEVBQUUsQ0FBQyw2QkFBNkIsQ0FBQzs7aUJBQzNDOzs7O2dCQS9GTyxtQkFBbUI7Z0JBQ25CLGNBQWM7Z0JBYnBCLGlCQUFpQjtnQkFjWCxpQkFBaUI7OzsyQkEwR3RCLEtBQUs7MkJBS0wsS0FBSzswQkFLTCxLQUFLOzJCQUtMLEtBQUs7NkJBVUwsS0FBSzs2QkFVTCxLQUFLO2lDQVVMLEtBQUs7dUJBS0wsS0FBSzs7SUFnSFIsb0JBQUM7Q0FBQSxBQWpRRCxJQWlRQztTQTlLWSxhQUFhOzs7SUFFeEIsaUNBQWtCOztJQUNsQiw4QkFBZTs7Ozs7SUFFZixrQ0FBMEI7Ozs7O0lBQzFCLG9DQUE0Qjs7Ozs7SUFDNUIsb0NBQTRCOzs7OztJQUs1QixpQ0FBMkI7Ozs7O0lBSzNCLGlDQUEyQjs7Ozs7SUFLM0IsZ0NBQTBCOzs7OztJQW1DMUIsdUNBQWlDOzs7OztJQUtqQyw2QkFBNEM7O0lBZ0I1QyxpQ0FBMEI7O0lBQzFCLGtDQUFxQjs7Ozs7SUFkakIsZ0NBQTZDOzs7OztJQUFFLHdDQUE0Qzs7Ozs7SUFDM0YsNEJBQThCOztJQUFFLDZCQUE4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIGZvcndhcmRSZWYsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1J9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHtpc0ludGVnZXIsIGlzTnVtYmVyLCBwYWROdW1iZXIsIHRvSW50ZWdlcn0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCB7TmdiVGltZX0gZnJvbSAnLi9uZ2ItdGltZSc7XG5pbXBvcnQge05nYlRpbWVwaWNrZXJDb25maWd9IGZyb20gJy4vdGltZXBpY2tlci1jb25maWcnO1xuaW1wb3J0IHtOZ2JUaW1lQWRhcHRlcn0gZnJvbSAnLi9uZ2ItdGltZS1hZGFwdGVyJztcbmltcG9ydCB7TmdiVGltZXBpY2tlckkxOG59IGZyb20gJy4vdGltZXBpY2tlci1pMThuJztcblxuY29uc3QgTkdCX1RJTUVQSUNLRVJfVkFMVUVfQUNDRVNTT1IgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBOZ2JUaW1lcGlja2VyKSxcbiAgbXVsdGk6IHRydWVcbn07XG5cbi8qKlxuICogQSBkaXJlY3RpdmUgdGhhdCBoZWxwcyB3aXRoIHd0aCBwaWNraW5nIGhvdXJzLCBtaW51dGVzIGFuZCBzZWNvbmRzLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ2ItdGltZXBpY2tlcicsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHN0eWxlVXJsczogWycuL3RpbWVwaWNrZXIuc2NzcyddLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxmaWVsZHNldCBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbY2xhc3MuZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJuZ2ItdHBcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm5nYi10cC1pbnB1dC1jb250YWluZXIgbmdiLXRwLWhvdXJcIj5cbiAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwic3Bpbm5lcnNcIiB0YWJpbmRleD1cIi0xXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJjaGFuZ2VIb3VyKGhvdXJTdGVwKVwiXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tbGlua1wiIFtjbGFzcy5idG4tc21dPVwiaXNTbWFsbFNpemVcIiBbY2xhc3MuYnRuLWxnXT1cImlzTGFyZ2VTaXplXCIgW2NsYXNzLmRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGV2cm9uIG5nYi10cC1jaGV2cm9uXCI+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCIgaTE4bj1cIkBAbmdiLnRpbWVwaWNrZXIuaW5jcmVtZW50LWhvdXJzXCI+SW5jcmVtZW50IGhvdXJzPC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwibmdiLXRwLWlucHV0IGZvcm0tY29udHJvbFwiIFtjbGFzcy5mb3JtLWNvbnRyb2wtc21dPVwiaXNTbWFsbFNpemVcIiBbY2xhc3MuZm9ybS1jb250cm9sLWxnXT1cImlzTGFyZ2VTaXplXCJcbiAgICAgICAgICAgIG1heGxlbmd0aD1cIjJcIiBwbGFjZWhvbGRlcj1cIkhIXCIgaTE4bi1wbGFjZWhvbGRlcj1cIkBAbmdiLnRpbWVwaWNrZXIuSEhcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cImZvcm1hdEhvdXIobW9kZWw/LmhvdXIpXCIgKGNoYW5nZSk9XCJ1cGRhdGVIb3VyKCRldmVudC50YXJnZXQudmFsdWUpXCJcbiAgICAgICAgICAgIFtyZWFkT25seV09XCJyZWFkb25seUlucHV0c1wiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIGFyaWEtbGFiZWw9XCJIb3Vyc1wiIGkxOG4tYXJpYS1sYWJlbD1cIkBAbmdiLnRpbWVwaWNrZXIuaG91cnNcIlxuICAgICAgICAgICAgKGtleWRvd24uQXJyb3dVcCk9XCJjaGFuZ2VIb3VyKGhvdXJTdGVwKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgICAgICAgKGtleWRvd24uQXJyb3dEb3duKT1cImNoYW5nZUhvdXIoLWhvdXJTdGVwKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIj5cbiAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwic3Bpbm5lcnNcIiB0YWJpbmRleD1cIi0xXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJjaGFuZ2VIb3VyKC1ob3VyU3RlcClcIlxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWxpbmtcIiBbY2xhc3MuYnRuLXNtXT1cImlzU21hbGxTaXplXCIgW2NsYXNzLmJ0bi1sZ109XCJpc0xhcmdlU2l6ZVwiIFtjbGFzcy5kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hldnJvbiBuZ2ItdHAtY2hldnJvbiBib3R0b21cIj48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIiBpMThuPVwiQEBuZ2IudGltZXBpY2tlci5kZWNyZW1lbnQtaG91cnNcIj5EZWNyZW1lbnQgaG91cnM8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibmdiLXRwLXNwYWNlclwiPjo8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm5nYi10cC1pbnB1dC1jb250YWluZXIgbmdiLXRwLW1pbnV0ZVwiPlxuICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJzcGlubmVyc1wiIHRhYmluZGV4PVwiLTFcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNoYW5nZU1pbnV0ZShtaW51dGVTdGVwKVwiXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tbGlua1wiIFtjbGFzcy5idG4tc21dPVwiaXNTbWFsbFNpemVcIiBbY2xhc3MuYnRuLWxnXT1cImlzTGFyZ2VTaXplXCIgW2NsYXNzLmRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGV2cm9uIG5nYi10cC1jaGV2cm9uXCI+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCIgaTE4bj1cIkBAbmdiLnRpbWVwaWNrZXIuaW5jcmVtZW50LW1pbnV0ZXNcIj5JbmNyZW1lbnQgbWludXRlczwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cIm5nYi10cC1pbnB1dCBmb3JtLWNvbnRyb2xcIiBbY2xhc3MuZm9ybS1jb250cm9sLXNtXT1cImlzU21hbGxTaXplXCIgW2NsYXNzLmZvcm0tY29udHJvbC1sZ109XCJpc0xhcmdlU2l6ZVwiXG4gICAgICAgICAgICBtYXhsZW5ndGg9XCIyXCIgcGxhY2Vob2xkZXI9XCJNTVwiIGkxOG4tcGxhY2Vob2xkZXI9XCJAQG5nYi50aW1lcGlja2VyLk1NXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJmb3JtYXRNaW5TZWMobW9kZWw/Lm1pbnV0ZSlcIiAoY2hhbmdlKT1cInVwZGF0ZU1pbnV0ZSgkZXZlbnQudGFyZ2V0LnZhbHVlKVwiXG4gICAgICAgICAgICBbcmVhZE9ubHldPVwicmVhZG9ubHlJbnB1dHNcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBhcmlhLWxhYmVsPVwiTWludXRlc1wiIGkxOG4tYXJpYS1sYWJlbD1cIkBAbmdiLnRpbWVwaWNrZXIubWludXRlc1wiXG4gICAgICAgICAgICAoa2V5ZG93bi5BcnJvd1VwKT1cImNoYW5nZU1pbnV0ZShtaW51dGVTdGVwKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgICAgICAgKGtleWRvd24uQXJyb3dEb3duKT1cImNoYW5nZU1pbnV0ZSgtbWludXRlU3RlcCk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCI+XG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInNwaW5uZXJzXCIgdGFiaW5kZXg9XCItMVwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiY2hhbmdlTWludXRlKC1taW51dGVTdGVwKVwiXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tbGlua1wiIFtjbGFzcy5idG4tc21dPVwiaXNTbWFsbFNpemVcIiBbY2xhc3MuYnRuLWxnXT1cImlzTGFyZ2VTaXplXCIgIFtjbGFzcy5kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hldnJvbiBuZ2ItdHAtY2hldnJvbiBib3R0b21cIj48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIiAgaTE4bj1cIkBAbmdiLnRpbWVwaWNrZXIuZGVjcmVtZW50LW1pbnV0ZXNcIj5EZWNyZW1lbnQgbWludXRlczwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzZWNvbmRzXCIgY2xhc3M9XCJuZ2ItdHAtc3BhY2VyXCI+OjwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2Vjb25kc1wiIGNsYXNzPVwibmdiLXRwLWlucHV0LWNvbnRhaW5lciBuZ2ItdHAtc2Vjb25kXCI+XG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInNwaW5uZXJzXCIgdGFiaW5kZXg9XCItMVwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiY2hhbmdlU2Vjb25kKHNlY29uZFN0ZXApXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCIgW2NsYXNzLmJ0bi1zbV09XCJpc1NtYWxsU2l6ZVwiIFtjbGFzcy5idG4tbGddPVwiaXNMYXJnZVNpemVcIiBbY2xhc3MuZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoZXZyb24gbmdiLXRwLWNoZXZyb25cIj48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIiBpMThuPVwiQEBuZ2IudGltZXBpY2tlci5pbmNyZW1lbnQtc2Vjb25kc1wiPkluY3JlbWVudCBzZWNvbmRzPC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwibmdiLXRwLWlucHV0IGZvcm0tY29udHJvbFwiIFtjbGFzcy5mb3JtLWNvbnRyb2wtc21dPVwiaXNTbWFsbFNpemVcIiBbY2xhc3MuZm9ybS1jb250cm9sLWxnXT1cImlzTGFyZ2VTaXplXCJcbiAgICAgICAgICAgIG1heGxlbmd0aD1cIjJcIiBwbGFjZWhvbGRlcj1cIlNTXCIgaTE4bi1wbGFjZWhvbGRlcj1cIkBAbmdiLnRpbWVwaWNrZXIuU1NcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cImZvcm1hdE1pblNlYyhtb2RlbD8uc2Vjb25kKVwiIChjaGFuZ2UpPVwidXBkYXRlU2Vjb25kKCRldmVudC50YXJnZXQudmFsdWUpXCJcbiAgICAgICAgICAgIFtyZWFkT25seV09XCJyZWFkb25seUlucHV0c1wiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIGFyaWEtbGFiZWw9XCJTZWNvbmRzXCIgaTE4bi1hcmlhLWxhYmVsPVwiQEBuZ2IudGltZXBpY2tlci5zZWNvbmRzXCJcbiAgICAgICAgICAgIChrZXlkb3duLkFycm93VXApPVwiY2hhbmdlU2Vjb25kKHNlY29uZFN0ZXApOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgICAgICAoa2V5ZG93bi5BcnJvd0Rvd24pPVwiY2hhbmdlU2Vjb25kKC1zZWNvbmRTdGVwKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIj5cbiAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwic3Bpbm5lcnNcIiB0YWJpbmRleD1cIi0xXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJjaGFuZ2VTZWNvbmQoLXNlY29uZFN0ZXApXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCIgW2NsYXNzLmJ0bi1zbV09XCJpc1NtYWxsU2l6ZVwiIFtjbGFzcy5idG4tbGddPVwiaXNMYXJnZVNpemVcIiAgW2NsYXNzLmRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGV2cm9uIG5nYi10cC1jaGV2cm9uIGJvdHRvbVwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiIGkxOG49XCJAQG5nYi50aW1lcGlja2VyLmRlY3JlbWVudC1zZWNvbmRzXCI+RGVjcmVtZW50IHNlY29uZHM8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwibWVyaWRpYW5cIiBjbGFzcz1cIm5nYi10cC1zcGFjZXJcIj48L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cIm1lcmlkaWFuXCIgY2xhc3M9XCJuZ2ItdHAtbWVyaWRpYW5cIj5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5XCIgW2NsYXNzLmJ0bi1zbV09XCJpc1NtYWxsU2l6ZVwiIFtjbGFzcy5idG4tbGddPVwiaXNMYXJnZVNpemVcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgW2NsYXNzLmRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVNZXJpZGlhbigpXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibW9kZWw/LmhvdXIgPj0gMTI7IGVsc2UgYW1cIiBpMThuPVwiQEBuZ2IudGltZXBpY2tlci5QTVwiPnt7IGkxOG4uZ2V0QWZ0ZXJub29uUGVyaW9kKCkgfX08L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYW0gaTE4bj1cIkBAbmdiLnRpbWVwaWNrZXIuQU1cIj57eyBpMThuLmdldE1vcm5pbmdQZXJpb2QoKSB9fTwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9maWVsZHNldD5cbiAgYCxcbiAgcHJvdmlkZXJzOiBbTkdCX1RJTUVQSUNLRVJfVkFMVUVfQUNDRVNTT1JdXG59KVxuZXhwb3J0IGNsYXNzIE5nYlRpbWVwaWNrZXIgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgICBPbkNoYW5nZXMge1xuICBkaXNhYmxlZDogYm9vbGVhbjtcbiAgbW9kZWw6IE5nYlRpbWU7XG5cbiAgcHJpdmF0ZSBfaG91clN0ZXA6IG51bWJlcjtcbiAgcHJpdmF0ZSBfbWludXRlU3RlcDogbnVtYmVyO1xuICBwcml2YXRlIF9zZWNvbmRTdGVwOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGlzcGxheSAxMkggb3IgMjRIIG1vZGUuXG4gICAqL1xuICBASW5wdXQoKSBtZXJpZGlhbjogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgc3Bpbm5lcnMgYWJvdmUgYW5kIGJlbG93IGlucHV0cyBhcmUgdmlzaWJsZS5cbiAgICovXG4gIEBJbnB1dCgpIHNwaW5uZXJzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGl0IGlzIHBvc3NpYmxlIHRvIHNlbGVjdCBzZWNvbmRzLlxuICAgKi9cbiAgQElucHV0KCkgc2Vjb25kczogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBob3VycyB0byBhZGQvc3VidHJhY3Qgd2hlbiBjbGlja2luZyBob3VyIHNwaW5uZXJzLlxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IGhvdXJTdGVwKHN0ZXA6IG51bWJlcikge1xuICAgIHRoaXMuX2hvdXJTdGVwID0gaXNJbnRlZ2VyKHN0ZXApID8gc3RlcCA6IHRoaXMuX2NvbmZpZy5ob3VyU3RlcDtcbiAgfVxuXG4gIGdldCBob3VyU3RlcCgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5faG91clN0ZXA7IH1cblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBtaW51dGVzIHRvIGFkZC9zdWJ0cmFjdCB3aGVuIGNsaWNraW5nIG1pbnV0ZSBzcGlubmVycy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBtaW51dGVTdGVwKHN0ZXA6IG51bWJlcikge1xuICAgIHRoaXMuX21pbnV0ZVN0ZXAgPSBpc0ludGVnZXIoc3RlcCkgPyBzdGVwIDogdGhpcy5fY29uZmlnLm1pbnV0ZVN0ZXA7XG4gIH1cblxuICBnZXQgbWludXRlU3RlcCgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5fbWludXRlU3RlcDsgfVxuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIHNlY29uZHMgdG8gYWRkL3N1YnRyYWN0IHdoZW4gY2xpY2tpbmcgc2Vjb25kIHNwaW5uZXJzLlxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IHNlY29uZFN0ZXAoc3RlcDogbnVtYmVyKSB7XG4gICAgdGhpcy5fc2Vjb25kU3RlcCA9IGlzSW50ZWdlcihzdGVwKSA/IHN0ZXAgOiB0aGlzLl9jb25maWcuc2Vjb25kU3RlcDtcbiAgfVxuXG4gIGdldCBzZWNvbmRTdGVwKCk6IG51bWJlciB7IHJldHVybiB0aGlzLl9zZWNvbmRTdGVwOyB9XG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHRpbWVwaWNrZXIgaXMgcmVhZG9ubHkgYW5kIGNhbid0IGJlIGNoYW5nZWQuXG4gICAqL1xuICBASW5wdXQoKSByZWFkb25seUlucHV0czogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHNpemUgb2YgaW5wdXRzIGFuZCBidXR0b25zLlxuICAgKi9cbiAgQElucHV0KCkgc2l6ZTogJ3NtYWxsJyB8ICdtZWRpdW0nIHwgJ2xhcmdlJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2NvbmZpZzogTmdiVGltZXBpY2tlckNvbmZpZywgcHJpdmF0ZSBfbmdiVGltZUFkYXB0ZXI6IE5nYlRpbWVBZGFwdGVyPGFueT4sXG4gICAgICBwcml2YXRlIF9jZDogQ2hhbmdlRGV0ZWN0b3JSZWYsIHB1YmxpYyBpMThuOiBOZ2JUaW1lcGlja2VySTE4bikge1xuICAgIHRoaXMubWVyaWRpYW4gPSBfY29uZmlnLm1lcmlkaWFuO1xuICAgIHRoaXMuc3Bpbm5lcnMgPSBfY29uZmlnLnNwaW5uZXJzO1xuICAgIHRoaXMuc2Vjb25kcyA9IF9jb25maWcuc2Vjb25kcztcbiAgICB0aGlzLmhvdXJTdGVwID0gX2NvbmZpZy5ob3VyU3RlcDtcbiAgICB0aGlzLm1pbnV0ZVN0ZXAgPSBfY29uZmlnLm1pbnV0ZVN0ZXA7XG4gICAgdGhpcy5zZWNvbmRTdGVwID0gX2NvbmZpZy5zZWNvbmRTdGVwO1xuICAgIHRoaXMuZGlzYWJsZWQgPSBfY29uZmlnLmRpc2FibGVkO1xuICAgIHRoaXMucmVhZG9ubHlJbnB1dHMgPSBfY29uZmlnLnJlYWRvbmx5SW5wdXRzO1xuICAgIHRoaXMuc2l6ZSA9IF9jb25maWcuc2l6ZTtcbiAgfVxuXG4gIG9uQ2hhbmdlID0gKF86IGFueSkgPT4ge307XG4gIG9uVG91Y2hlZCA9ICgpID0+IHt9O1xuXG4gIHdyaXRlVmFsdWUodmFsdWUpIHtcbiAgICBjb25zdCBzdHJ1Y3RWYWx1ZSA9IHRoaXMuX25nYlRpbWVBZGFwdGVyLmZyb21Nb2RlbCh2YWx1ZSk7XG4gICAgdGhpcy5tb2RlbCA9IHN0cnVjdFZhbHVlID8gbmV3IE5nYlRpbWUoc3RydWN0VmFsdWUuaG91ciwgc3RydWN0VmFsdWUubWludXRlLCBzdHJ1Y3RWYWx1ZS5zZWNvbmQpIDogbmV3IE5nYlRpbWUoKTtcbiAgICBpZiAoIXRoaXMuc2Vjb25kcyAmJiAoIXN0cnVjdFZhbHVlIHx8ICFpc051bWJlcihzdHJ1Y3RWYWx1ZS5zZWNvbmQpKSkge1xuICAgICAgdGhpcy5tb2RlbC5zZWNvbmQgPSAwO1xuICAgIH1cbiAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogYW55KSA9PiBhbnkpOiB2b2lkIHsgdGhpcy5vbkNoYW5nZSA9IGZuOyB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IGFueSk6IHZvaWQgeyB0aGlzLm9uVG91Y2hlZCA9IGZuOyB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKSB7IHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkOyB9XG5cbiAgY2hhbmdlSG91cihzdGVwOiBudW1iZXIpIHtcbiAgICB0aGlzLm1vZGVsLmNoYW5nZUhvdXIoc3RlcCk7XG4gICAgdGhpcy5wcm9wYWdhdGVNb2RlbENoYW5nZSgpO1xuICB9XG5cbiAgY2hhbmdlTWludXRlKHN0ZXA6IG51bWJlcikge1xuICAgIHRoaXMubW9kZWwuY2hhbmdlTWludXRlKHN0ZXApO1xuICAgIHRoaXMucHJvcGFnYXRlTW9kZWxDaGFuZ2UoKTtcbiAgfVxuXG4gIGNoYW5nZVNlY29uZChzdGVwOiBudW1iZXIpIHtcbiAgICB0aGlzLm1vZGVsLmNoYW5nZVNlY29uZChzdGVwKTtcbiAgICB0aGlzLnByb3BhZ2F0ZU1vZGVsQ2hhbmdlKCk7XG4gIH1cblxuICB1cGRhdGVIb3VyKG5ld1ZhbDogc3RyaW5nKSB7XG4gICAgY29uc3QgaXNQTSA9IHRoaXMubW9kZWwuaG91ciA+PSAxMjtcbiAgICBjb25zdCBlbnRlcmVkSG91ciA9IHRvSW50ZWdlcihuZXdWYWwpO1xuICAgIGlmICh0aGlzLm1lcmlkaWFuICYmIChpc1BNICYmIGVudGVyZWRIb3VyIDwgMTIgfHwgIWlzUE0gJiYgZW50ZXJlZEhvdXIgPT09IDEyKSkge1xuICAgICAgdGhpcy5tb2RlbC51cGRhdGVIb3VyKGVudGVyZWRIb3VyICsgMTIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1vZGVsLnVwZGF0ZUhvdXIoZW50ZXJlZEhvdXIpO1xuICAgIH1cbiAgICB0aGlzLnByb3BhZ2F0ZU1vZGVsQ2hhbmdlKCk7XG4gIH1cblxuICB1cGRhdGVNaW51dGUobmV3VmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLm1vZGVsLnVwZGF0ZU1pbnV0ZSh0b0ludGVnZXIobmV3VmFsKSk7XG4gICAgdGhpcy5wcm9wYWdhdGVNb2RlbENoYW5nZSgpO1xuICB9XG5cbiAgdXBkYXRlU2Vjb25kKG5ld1ZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5tb2RlbC51cGRhdGVTZWNvbmQodG9JbnRlZ2VyKG5ld1ZhbCkpO1xuICAgIHRoaXMucHJvcGFnYXRlTW9kZWxDaGFuZ2UoKTtcbiAgfVxuXG4gIHRvZ2dsZU1lcmlkaWFuKCkge1xuICAgIGlmICh0aGlzLm1lcmlkaWFuKSB7XG4gICAgICB0aGlzLmNoYW5nZUhvdXIoMTIpO1xuICAgIH1cbiAgfVxuXG4gIGZvcm1hdEhvdXIodmFsdWU6IG51bWJlcikge1xuICAgIGlmIChpc051bWJlcih2YWx1ZSkpIHtcbiAgICAgIGlmICh0aGlzLm1lcmlkaWFuKSB7XG4gICAgICAgIHJldHVybiBwYWROdW1iZXIodmFsdWUgJSAxMiA9PT0gMCA/IDEyIDogdmFsdWUgJSAxMik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcGFkTnVtYmVyKHZhbHVlICUgMjQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcGFkTnVtYmVyKE5hTik7XG4gICAgfVxuICB9XG5cbiAgZm9ybWF0TWluU2VjKHZhbHVlOiBudW1iZXIpIHsgcmV0dXJuIHBhZE51bWJlcih2YWx1ZSk7IH1cblxuICBnZXQgaXNTbWFsbFNpemUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLnNpemUgPT09ICdzbWFsbCc7IH1cblxuICBnZXQgaXNMYXJnZVNpemUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLnNpemUgPT09ICdsYXJnZSc7IH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ3NlY29uZHMnXSAmJiAhdGhpcy5zZWNvbmRzICYmIHRoaXMubW9kZWwgJiYgIWlzTnVtYmVyKHRoaXMubW9kZWwuc2Vjb25kKSkge1xuICAgICAgdGhpcy5tb2RlbC5zZWNvbmQgPSAwO1xuICAgICAgdGhpcy5wcm9wYWdhdGVNb2RlbENoYW5nZShmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwcm9wYWdhdGVNb2RlbENoYW5nZSh0b3VjaGVkID0gdHJ1ZSkge1xuICAgIGlmICh0b3VjaGVkKSB7XG4gICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5tb2RlbC5pc1ZhbGlkKHRoaXMuc2Vjb25kcykpIHtcbiAgICAgIHRoaXMub25DaGFuZ2UoXG4gICAgICAgICAgdGhpcy5fbmdiVGltZUFkYXB0ZXIudG9Nb2RlbCh7aG91cjogdGhpcy5tb2RlbC5ob3VyLCBtaW51dGU6IHRoaXMubW9kZWwubWludXRlLCBzZWNvbmQ6IHRoaXMubW9kZWwuc2Vjb25kfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuX25nYlRpbWVBZGFwdGVyLnRvTW9kZWwobnVsbCkpO1xuICAgIH1cbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/timepicker/timepicker.module.js b/dist/sunbird-ui-components/esm5/timepicker/timepicker.module.js new file mode 100644 index 0000000..3b87bf9 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/timepicker/timepicker.module.js @@ -0,0 +1,21 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { NgbTimepicker } from './timepicker'; +export { NgbTimepicker } from './timepicker'; +export { NgbTimepickerConfig } from './timepicker-config'; +export { NgbTimeAdapter } from './ngb-time-adapter'; +export { NgbTimepickerI18n } from './timepicker-i18n'; +var NgbTimepickerModule = /** @class */ (function () { + function NgbTimepickerModule() { + } + NgbTimepickerModule.decorators = [ + { type: NgModule, args: [{ declarations: [NgbTimepicker], exports: [NgbTimepicker], imports: [CommonModule] },] } + ]; + return NgbTimepickerModule; +}()); +export { NgbTimepickerModule }; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXBpY2tlci5tb2R1bGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJ0aW1lcGlja2VyL3RpbWVwaWNrZXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUU3QyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRTNDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDM0MsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFeEQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRXBEO0lBQUE7SUFFQSxDQUFDOztnQkFGQSxRQUFRLFNBQUMsRUFBQyxZQUFZLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBQzs7SUFFNUYsMEJBQUM7Q0FBQSxBQUZELElBRUM7U0FEWSxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge05nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQge05nYlRpbWVwaWNrZXJ9IGZyb20gJy4vdGltZXBpY2tlcic7XG5cbmV4cG9ydCB7TmdiVGltZXBpY2tlcn0gZnJvbSAnLi90aW1lcGlja2VyJztcbmV4cG9ydCB7TmdiVGltZXBpY2tlckNvbmZpZ30gZnJvbSAnLi90aW1lcGlja2VyLWNvbmZpZyc7XG5leHBvcnQge05nYlRpbWVTdHJ1Y3R9IGZyb20gJy4vbmdiLXRpbWUtc3RydWN0JztcbmV4cG9ydCB7TmdiVGltZUFkYXB0ZXJ9IGZyb20gJy4vbmdiLXRpbWUtYWRhcHRlcic7XG5leHBvcnQge05nYlRpbWVwaWNrZXJJMThufSBmcm9tICcuL3RpbWVwaWNrZXItaTE4bic7XG5cbkBOZ01vZHVsZSh7ZGVjbGFyYXRpb25zOiBbTmdiVGltZXBpY2tlcl0sIGV4cG9ydHM6IFtOZ2JUaW1lcGlja2VyXSwgaW1wb3J0czogW0NvbW1vbk1vZHVsZV19KVxuZXhwb3J0IGNsYXNzIE5nYlRpbWVwaWNrZXJNb2R1bGUge1xufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/toast/toast-config.js b/dist/sunbird-ui-components/esm5/toast/toast-config.js new file mode 100644 index 0000000..4bab564 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/toast/toast-config.js @@ -0,0 +1,64 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Injectable } from '@angular/core'; +import * as i0 from "@angular/core"; +/** + * Interface used to type all toast config options. See `NgbToastConfig`. + * + * \@since 5.0.0 + * @record + */ +export function NgbToastOptions() { } +if (false) { + /** + * Specify if the toast component should emit the `hide()` output + * after a certain `delay` in ms. + * @type {?|undefined} + */ + NgbToastOptions.prototype.autohide; + /** + * Delay in ms after which the `hide()` output should be emitted. + * @type {?|undefined} + */ + NgbToastOptions.prototype.delay; + /** + * Type of aria-live attribute to be used. + * + * Could be one of these 2 values (as string): + * - `polite` (default) + * - `alert` + * @type {?|undefined} + */ + NgbToastOptions.prototype.ariaLive; +} +/** + * Configuration service for the NgbToast component. You can inject this service, typically in your root component, + * and customize the values of its properties in order to provide default values for all the toasts used in the + * application. + * + * \@since 5.0.0 + */ +var NgbToastConfig = /** @class */ (function () { + function NgbToastConfig() { + this.autohide = true; + this.delay = 500; + this.ariaLive = 'polite'; + } + NgbToastConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ NgbToastConfig.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function NgbToastConfig_Factory() { return new NgbToastConfig(); }, token: NgbToastConfig, providedIn: "root" }); + return NgbToastConfig; +}()); +export { NgbToastConfig }; +if (false) { + /** @type {?} */ + NgbToastConfig.prototype.autohide; + /** @type {?} */ + NgbToastConfig.prototype.delay; + /** @type {?} */ + NgbToastConfig.prototype.ariaLive; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3QtY29uZmlnLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsidG9hc3QvdG9hc3QtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQU96QyxxQ0FvQkM7Ozs7Ozs7SUFmQyxtQ0FBbUI7Ozs7O0lBS25CLGdDQUFlOzs7Ozs7Ozs7SUFTZixtQ0FBOEI7Ozs7Ozs7OztBQVVoQztJQUFBO1FBRUUsYUFBUSxHQUFHLElBQUksQ0FBQztRQUNoQixVQUFLLEdBQUcsR0FBRyxDQUFDO1FBQ1osYUFBUSxHQUF1QixRQUFRLENBQUM7S0FDekM7O2dCQUxBLFVBQVUsU0FBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUM7Ozt5QkFwQ2hDO0NBeUNDLEFBTEQsSUFLQztTQUpZLGNBQWM7OztJQUN6QixrQ0FBZ0I7O0lBQ2hCLCtCQUFZOztJQUNaLGtDQUF3QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogSW50ZXJmYWNlIHVzZWQgdG8gdHlwZSBhbGwgdG9hc3QgY29uZmlnIG9wdGlvbnMuIFNlZSBgTmdiVG9hc3RDb25maWdgLlxuICpcbiAqIEBzaW5jZSA1LjAuMFxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5nYlRvYXN0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBTcGVjaWZ5IGlmIHRoZSB0b2FzdCBjb21wb25lbnQgc2hvdWxkIGVtaXQgdGhlIGBoaWRlKClgIG91dHB1dFxuICAgKiBhZnRlciBhIGNlcnRhaW4gYGRlbGF5YCBpbiBtcy5cbiAgICovXG4gIGF1dG9oaWRlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRGVsYXkgaW4gbXMgYWZ0ZXIgd2hpY2ggdGhlIGBoaWRlKClgIG91dHB1dCBzaG91bGQgYmUgZW1pdHRlZC5cbiAgICovXG4gIGRlbGF5PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUeXBlIG9mIGFyaWEtbGl2ZSBhdHRyaWJ1dGUgdG8gYmUgdXNlZC5cbiAgICpcbiAgICogQ291bGQgYmUgb25lIG9mIHRoZXNlIDIgdmFsdWVzIChhcyBzdHJpbmcpOlxuICAgKiAtIGBwb2xpdGVgIChkZWZhdWx0KVxuICAgKiAtIGBhbGVydGBcbiAgICovXG4gIGFyaWFMaXZlPzogJ3BvbGl0ZScgfCAnYWxlcnQnO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gc2VydmljZSBmb3IgdGhlIE5nYlRvYXN0IGNvbXBvbmVudC4gWW91IGNhbiBpbmplY3QgdGhpcyBzZXJ2aWNlLCB0eXBpY2FsbHkgaW4geW91ciByb290IGNvbXBvbmVudCxcbiAqIGFuZCBjdXN0b21pemUgdGhlIHZhbHVlcyBvZiBpdHMgcHJvcGVydGllcyBpbiBvcmRlciB0byBwcm92aWRlIGRlZmF1bHQgdmFsdWVzIGZvciBhbGwgdGhlIHRvYXN0cyB1c2VkIGluIHRoZVxuICogYXBwbGljYXRpb24uXG4gKlxuICogQHNpbmNlIDUuMC4wXG4gKi9cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIE5nYlRvYXN0Q29uZmlnIGltcGxlbWVudHMgTmdiVG9hc3RPcHRpb25zIHtcbiAgYXV0b2hpZGUgPSB0cnVlO1xuICBkZWxheSA9IDUwMDtcbiAgYXJpYUxpdmU6ICdwb2xpdGUnIHwgJ2FsZXJ0JyA9ICdwb2xpdGUnO1xufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/toast/toast.js b/dist/sunbird-ui-components/esm5/toast/toast.js new file mode 100644 index 0000000..5e202ad --- /dev/null +++ b/dist/sunbird-ui-components/esm5/toast/toast.js @@ -0,0 +1,190 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Attribute, Component, ContentChild, Directive, EventEmitter, Input, Output, TemplateRef, ViewEncapsulation, } from '@angular/core'; +import { NgbToastConfig } from './toast-config'; +/** + * This directive allows the usage of HTML markup or other directives + * inside of the toast's header. + * + * \@since 5.0.0 + */ +var NgbToastHeader = /** @class */ (function () { + function NgbToastHeader() { + } + NgbToastHeader.decorators = [ + { type: Directive, args: [{ selector: '[ngbToastHeader]' },] } + ]; + return NgbToastHeader; +}()); +export { NgbToastHeader }; +/** + * Toasts provide feedback messages as notifications to the user. + * Goal is to mimic the push notifications available both on mobile and desktop operating systems. + * + * \@since 5.0.0 + */ +var NgbToast = /** @class */ (function () { + function NgbToast(ariaLive, config) { + this.ariaLive = ariaLive; + /** + * A template like `` can be + * used in the projected content to allow markup usage. + */ + this.contentHeaderTpl = null; + /** + * An event fired immediately when toast's `hide()` method has been called. + * It can only occur in 2 different scenarios: + * - `autohide` timeout fires + * - user clicks on a closing cross (×) + * + * Additionally this output is purely informative. The toast won't disappear. It's up to the user to take care of + * that. + */ + this.hideOutput = new EventEmitter(); + if (this.ariaLive == null) { + this.ariaLive = config.ariaLive; + } + this.delay = config.delay; + this.autohide = config.autohide; + } + /** + * @return {?} + */ + NgbToast.prototype.ngAfterContentInit = /** + * @return {?} + */ + function () { this._init(); }; + /** + * @param {?} changes + * @return {?} + */ + NgbToast.prototype.ngOnChanges = /** + * @param {?} changes + * @return {?} + */ + function (changes) { + if ('autohide' in changes) { + this._clearTimeout(); + this._init(); + } + }; + /** + * @return {?} + */ + NgbToast.prototype.hide = /** + * @return {?} + */ + function () { + this._clearTimeout(); + this.hideOutput.emit(); + }; + /** + * @private + * @return {?} + */ + NgbToast.prototype._init = /** + * @private + * @return {?} + */ + function () { + var _this = this; + if (this.autohide && !this._timeoutID) { + this._timeoutID = setTimeout((/** + * @return {?} + */ + function () { return _this.hide(); }), this.delay); + } + }; + /** + * @private + * @return {?} + */ + NgbToast.prototype._clearTimeout = /** + * @private + * @return {?} + */ + function () { + if (this._timeoutID) { + clearTimeout(this._timeoutID); + this._timeoutID = null; + } + }; + NgbToast.decorators = [ + { type: Component, args: [{ + selector: 'ngb-toast', + exportAs: 'ngbToast', + encapsulation: ViewEncapsulation.None, + host: { + 'role': 'alert', + '[attr.aria-live]': 'ariaLive', + 'aria-atomic': 'true', + '[class.toast]': 'true', + '[class.show]': 'true', + '[class.autohide]': 'autohide', + }, + template: "\n \n {{header}}\n \n \n
\n \n \n
\n
\n
\n \n
\n ", + styles: [".ngb-toasts{position:fixed;top:0;right:0;margin:.5em;z-index:1200}ngb-toast .toast-header .close{margin-left:auto;margin-bottom:.25rem}"] + }] } + ]; + /** @nocollapse */ + NgbToast.ctorParameters = function () { return [ + { type: String, decorators: [{ type: Attribute, args: ['aria-live',] }] }, + { type: NgbToastConfig } + ]; }; + NgbToast.propDecorators = { + delay: [{ type: Input }], + autohide: [{ type: Input }], + header: [{ type: Input }], + contentHeaderTpl: [{ type: ContentChild, args: [NgbToastHeader, { read: TemplateRef, static: true },] }], + hideOutput: [{ type: Output, args: ['hide',] }] + }; + return NgbToast; +}()); +export { NgbToast }; +if (false) { + /** + * @type {?} + * @private + */ + NgbToast.prototype._timeoutID; + /** + * Delay after which the toast will hide (ms). + * default: `500` (ms) (inherited from NgbToastConfig) + * @type {?} + */ + NgbToast.prototype.delay; + /** + * Auto hide the toast after a delay in ms. + * default: `true` (inherited from NgbToastConfig) + * @type {?} + */ + NgbToast.prototype.autohide; + /** + * Text to be used as toast's header. + * Ignored if a ContentChild template is specified at the same time. + * @type {?} + */ + NgbToast.prototype.header; + /** + * A template like `` can be + * used in the projected content to allow markup usage. + * @type {?} + */ + NgbToast.prototype.contentHeaderTpl; + /** + * An event fired immediately when toast's `hide()` method has been called. + * It can only occur in 2 different scenarios: + * - `autohide` timeout fires + * - user clicks on a closing cross (×) + * + * Additionally this output is purely informative. The toast won't disappear. It's up to the user to take care of + * that. + * @type {?} + */ + NgbToast.prototype.hideOutput; + /** @type {?} */ + NgbToast.prototype.ariaLive; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3QuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJ0b2FzdC90b2FzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFTixXQUFXLEVBQ1gsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7OztBQVE5QztJQUFBO0lBRUEsQ0FBQzs7Z0JBRkEsU0FBUyxTQUFDLEVBQUMsUUFBUSxFQUFFLGtCQUFrQixFQUFDOztJQUV6QyxxQkFBQztDQUFBLEFBRkQsSUFFQztTQURZLGNBQWM7Ozs7Ozs7QUFTM0I7SUFxRUUsa0JBQTJDLFFBQWdCLEVBQUUsTUFBc0I7UUFBeEMsYUFBUSxHQUFSLFFBQVEsQ0FBUTs7Ozs7UUFiTSxxQkFBZ0IsR0FBMkIsSUFBSSxDQUFDOzs7Ozs7Ozs7O1FBV2pHLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBR3BELElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLEVBQUU7WUFDekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO1NBQ2pDO1FBQ0QsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztJQUNsQyxDQUFDOzs7O0lBRUQscUNBQWtCOzs7SUFBbEIsY0FBdUIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQzs7Ozs7SUFFdEMsOEJBQVc7Ozs7SUFBWCxVQUFZLE9BQXNCO1FBQ2hDLElBQUksVUFBVSxJQUFJLE9BQU8sRUFBRTtZQUN6QixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ2Q7SUFDSCxDQUFDOzs7O0lBRUQsdUJBQUk7OztJQUFKO1FBQ0UsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekIsQ0FBQzs7Ozs7SUFFTyx3QkFBSzs7OztJQUFiO1FBQUEsaUJBSUM7UUFIQyxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVTs7O1lBQUMsY0FBTSxPQUFBLEtBQUksQ0FBQyxJQUFJLEVBQUUsRUFBWCxDQUFXLEdBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzdEO0lBQ0gsQ0FBQzs7Ozs7SUFFTyxnQ0FBYTs7OztJQUFyQjtRQUNFLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQzs7Z0JBdEdGLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsV0FBVztvQkFDckIsUUFBUSxFQUFFLFVBQVU7b0JBQ3BCLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO29CQUNyQyxJQUFJLEVBQUU7d0JBQ0osTUFBTSxFQUFFLE9BQU87d0JBQ2Ysa0JBQWtCLEVBQUUsVUFBVTt3QkFDOUIsYUFBYSxFQUFFLE1BQU07d0JBQ3JCLGVBQWUsRUFBRSxNQUFNO3dCQUN2QixjQUFjLEVBQUUsTUFBTTt3QkFDdEIsa0JBQWtCLEVBQUUsVUFBVTtxQkFDL0I7b0JBQ0QsUUFBUSxFQUFFLGdtQkFlVDs7aUJBRUY7Ozs7NkNBd0NjLFNBQVMsU0FBQyxXQUFXO2dCQXZGNUIsY0FBYzs7O3dCQXdEbkIsS0FBSzsyQkFNTCxLQUFLO3lCQU1MLEtBQUs7bUNBTUwsWUFBWSxTQUFDLGNBQWMsRUFBRSxFQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBQzs2QkFXOUQsTUFBTSxTQUFDLE1BQU07O0lBb0NoQixlQUFDO0NBQUEsQUF2R0QsSUF1R0M7U0F6RVksUUFBUTs7Ozs7O0lBRW5CLDhCQUFtQjs7Ozs7O0lBTW5CLHlCQUF1Qjs7Ozs7O0lBTXZCLDRCQUEyQjs7Ozs7O0lBTTNCLDBCQUF3Qjs7Ozs7O0lBTXhCLG9DQUFpSDs7Ozs7Ozs7Ozs7SUFXakgsOEJBQXNEOztJQUUxQyw0QkFBK0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBBdHRyaWJ1dGUsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBEaXJlY3RpdmUsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge05nYlRvYXN0Q29uZmlnfSBmcm9tICcuL3RvYXN0LWNvbmZpZyc7XG5cbi8qKlxuICogVGhpcyBkaXJlY3RpdmUgYWxsb3dzIHRoZSB1c2FnZSBvZiBIVE1MIG1hcmt1cCBvciBvdGhlciBkaXJlY3RpdmVzXG4gKiBpbnNpZGUgb2YgdGhlIHRvYXN0J3MgaGVhZGVyLlxuICpcbiAqIEBzaW5jZSA1LjAuMFxuICovXG5ARGlyZWN0aXZlKHtzZWxlY3RvcjogJ1tuZ2JUb2FzdEhlYWRlcl0nfSlcbmV4cG9ydCBjbGFzcyBOZ2JUb2FzdEhlYWRlciB7XG59XG5cbi8qKlxuICogVG9hc3RzIHByb3ZpZGUgZmVlZGJhY2sgbWVzc2FnZXMgYXMgbm90aWZpY2F0aW9ucyB0byB0aGUgdXNlci5cbiAqIEdvYWwgaXMgdG8gbWltaWMgdGhlIHB1c2ggbm90aWZpY2F0aW9ucyBhdmFpbGFibGUgYm90aCBvbiBtb2JpbGUgYW5kIGRlc2t0b3Agb3BlcmF0aW5nIHN5c3RlbXMuXG4gKlxuICogQHNpbmNlIDUuMC4wXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25nYi10b2FzdCcsXG4gIGV4cG9ydEFzOiAnbmdiVG9hc3QnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBob3N0OiB7XG4gICAgJ3JvbGUnOiAnYWxlcnQnLFxuICAgICdbYXR0ci5hcmlhLWxpdmVdJzogJ2FyaWFMaXZlJyxcbiAgICAnYXJpYS1hdG9taWMnOiAndHJ1ZScsXG4gICAgJ1tjbGFzcy50b2FzdF0nOiAndHJ1ZScsXG4gICAgJ1tjbGFzcy5zaG93XSc6ICd0cnVlJyxcbiAgICAnW2NsYXNzLmF1dG9oaWRlXSc6ICdhdXRvaGlkZScsXG4gIH0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPG5nLXRlbXBsYXRlICNoZWFkZXJUcGw+XG4gICAgICA8c3Ryb25nIGNsYXNzPVwibXItYXV0b1wiPnt7aGVhZGVyfX08L3N0cm9uZz5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJjb250ZW50SGVhZGVyVHBsIHx8IGhlYWRlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cInRvYXN0LWhlYWRlclwiPlxuICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29udGVudEhlYWRlclRwbCB8fCBoZWFkZXJUcGxcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsb3NlXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgaTE4bi1hcmlhLWxhYmVsPVwiQEBuZ2IudG9hc3QuY2xvc2UtYXJpYVwiIChjbGljayk9XCJoaWRlKClcIj5cbiAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPGRpdiBjbGFzcz1cInRvYXN0LWJvZHlcIj5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVVcmxzOiBbJy4vdG9hc3Quc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIE5nYlRvYXN0IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBPbkNoYW5nZXMge1xuICBwcml2YXRlIF90aW1lb3V0SUQ7XG5cbiAgLyoqXG4gICAqIERlbGF5IGFmdGVyIHdoaWNoIHRoZSB0b2FzdCB3aWxsIGhpZGUgKG1zKS5cbiAgICogZGVmYXVsdDogYDUwMGAgKG1zKSAoaW5oZXJpdGVkIGZyb20gTmdiVG9hc3RDb25maWcpXG4gICAqL1xuICBASW5wdXQoKSBkZWxheTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBdXRvIGhpZGUgdGhlIHRvYXN0IGFmdGVyIGEgZGVsYXkgaW4gbXMuXG4gICAqIGRlZmF1bHQ6IGB0cnVlYCAoaW5oZXJpdGVkIGZyb20gTmdiVG9hc3RDb25maWcpXG4gICAqL1xuICBASW5wdXQoKSBhdXRvaGlkZTogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGV4dCB0byBiZSB1c2VkIGFzIHRvYXN0J3MgaGVhZGVyLlxuICAgKiBJZ25vcmVkIGlmIGEgQ29udGVudENoaWxkIHRlbXBsYXRlIGlzIHNwZWNpZmllZCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgKi9cbiAgQElucHV0KCkgaGVhZGVyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgdGVtcGxhdGUgbGlrZSBgPG5nLXRlbXBsYXRlIG5nYlRvYXN0SGVhZGVyPjwvbmctdGVtcGxhdGU+YCBjYW4gYmVcbiAgICogdXNlZCBpbiB0aGUgcHJvamVjdGVkIGNvbnRlbnQgdG8gYWxsb3cgbWFya3VwIHVzYWdlLlxuICAgKi9cbiAgQENvbnRlbnRDaGlsZChOZ2JUb2FzdEhlYWRlciwge3JlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWV9KSBjb250ZW50SGVhZGVyVHBsOiBUZW1wbGF0ZVJlZjxhbnk+fCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogQW4gZXZlbnQgZmlyZWQgaW1tZWRpYXRlbHkgd2hlbiB0b2FzdCdzIGBoaWRlKClgIG1ldGhvZCBoYXMgYmVlbiBjYWxsZWQuXG4gICAqIEl0IGNhbiBvbmx5IG9jY3VyIGluIDIgZGlmZmVyZW50IHNjZW5hcmlvczpcbiAgICogLSBgYXV0b2hpZGVgIHRpbWVvdXQgZmlyZXNcbiAgICogLSB1c2VyIGNsaWNrcyBvbiBhIGNsb3NpbmcgY3Jvc3MgKCZ0aW1lcylcbiAgICpcbiAgICogQWRkaXRpb25hbGx5IHRoaXMgb3V0cHV0IGlzIHB1cmVseSBpbmZvcm1hdGl2ZS4gVGhlIHRvYXN0IHdvbid0IGRpc2FwcGVhci4gSXQncyB1cCB0byB0aGUgdXNlciB0byB0YWtlIGNhcmUgb2ZcbiAgICogdGhhdC5cbiAgICovXG4gIEBPdXRwdXQoJ2hpZGUnKSBoaWRlT3V0cHV0ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKEBBdHRyaWJ1dGUoJ2FyaWEtbGl2ZScpIHB1YmxpYyBhcmlhTGl2ZTogc3RyaW5nLCBjb25maWc6IE5nYlRvYXN0Q29uZmlnKSB7XG4gICAgaWYgKHRoaXMuYXJpYUxpdmUgPT0gbnVsbCkge1xuICAgICAgdGhpcy5hcmlhTGl2ZSA9IGNvbmZpZy5hcmlhTGl2ZTtcbiAgICB9XG4gICAgdGhpcy5kZWxheSA9IGNvbmZpZy5kZWxheTtcbiAgICB0aGlzLmF1dG9oaWRlID0gY29uZmlnLmF1dG9oaWRlO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkgeyB0aGlzLl9pbml0KCk7IH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKCdhdXRvaGlkZScgaW4gY2hhbmdlcykge1xuICAgICAgdGhpcy5fY2xlYXJUaW1lb3V0KCk7XG4gICAgICB0aGlzLl9pbml0KCk7XG4gICAgfVxuICB9XG5cbiAgaGlkZSgpIHtcbiAgICB0aGlzLl9jbGVhclRpbWVvdXQoKTtcbiAgICB0aGlzLmhpZGVPdXRwdXQuZW1pdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdCgpIHtcbiAgICBpZiAodGhpcy5hdXRvaGlkZSAmJiAhdGhpcy5fdGltZW91dElEKSB7XG4gICAgICB0aGlzLl90aW1lb3V0SUQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuaGlkZSgpLCB0aGlzLmRlbGF5KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9jbGVhclRpbWVvdXQoKSB7XG4gICAgaWYgKHRoaXMuX3RpbWVvdXRJRCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXRJRCk7XG4gICAgICB0aGlzLl90aW1lb3V0SUQgPSBudWxsO1xuICAgIH1cbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/toast/toast.module.js b/dist/sunbird-ui-components/esm5/toast/toast.module.js new file mode 100644 index 0000000..a2b224b --- /dev/null +++ b/dist/sunbird-ui-components/esm5/toast/toast.module.js @@ -0,0 +1,19 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { NgbToast, NgbToastHeader } from './toast'; +export { NgbToast, NgbToastHeader } from './toast'; +export { NgbToastConfig } from './toast-config'; +var NgbToastModule = /** @class */ (function () { + function NgbToastModule() { + } + NgbToastModule.decorators = [ + { type: NgModule, args: [{ declarations: [NgbToast, NgbToastHeader], imports: [CommonModule], exports: [NgbToast, NgbToastHeader] },] } + ]; + return NgbToastModule; +}()); +export { NgbToastModule }; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3QubW9kdWxlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsidG9hc3QvdG9hc3QubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV2QyxPQUFPLEVBQUMsUUFBUSxFQUFFLGNBQWMsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUVqRCxPQUFPLEVBQUMsUUFBUSxFQUFFLGNBQWMsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUNqRCxPQUFPLEVBQUMsY0FBYyxFQUFrQixNQUFNLGdCQUFnQixDQUFDO0FBRS9EO0lBQUE7SUFFQSxDQUFDOztnQkFGQSxRQUFRLFNBQUMsRUFBQyxZQUFZLEVBQUUsQ0FBQyxRQUFRLEVBQUUsY0FBYyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFLGNBQWMsQ0FBQyxFQUFDOztJQUVsSCxxQkFBQztDQUFBLEFBRkQsSUFFQztTQURZLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7TmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge05nYlRvYXN0LCBOZ2JUb2FzdEhlYWRlcn0gZnJvbSAnLi90b2FzdCc7XG5cbmV4cG9ydCB7TmdiVG9hc3QsIE5nYlRvYXN0SGVhZGVyfSBmcm9tICcuL3RvYXN0JztcbmV4cG9ydCB7TmdiVG9hc3RDb25maWcsIE5nYlRvYXN0T3B0aW9uc30gZnJvbSAnLi90b2FzdC1jb25maWcnO1xuXG5ATmdNb2R1bGUoe2RlY2xhcmF0aW9uczogW05nYlRvYXN0LCBOZ2JUb2FzdEhlYWRlcl0sIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLCBleHBvcnRzOiBbTmdiVG9hc3QsIE5nYlRvYXN0SGVhZGVyXX0pXG5leHBvcnQgY2xhc3MgTmdiVG9hc3RNb2R1bGUge1xufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/tooltip/tooltip-config.js b/dist/sunbird-ui-components/esm5/tooltip/tooltip-config.js new file mode 100644 index 0000000..f4b0aa7 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/tooltip/tooltip-config.js @@ -0,0 +1,47 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Injectable } from '@angular/core'; +import * as i0 from "@angular/core"; +/** + * A configuration service for the [`NgbTooltip`](#/components/tooltip/api#NgbTooltip) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the tooltips used in the application. + */ +var NgbTooltipConfig = /** @class */ (function () { + function NgbTooltipConfig() { + this.autoClose = true; + this.placement = 'auto'; + this.triggers = 'hover focus'; + this.disableTooltip = false; + this.openDelay = 0; + this.closeDelay = 0; + } + NgbTooltipConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ NgbTooltipConfig.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function NgbTooltipConfig_Factory() { return new NgbTooltipConfig(); }, token: NgbTooltipConfig, providedIn: "root" }); + return NgbTooltipConfig; +}()); +export { NgbTooltipConfig }; +if (false) { + /** @type {?} */ + NgbTooltipConfig.prototype.autoClose; + /** @type {?} */ + NgbTooltipConfig.prototype.placement; + /** @type {?} */ + NgbTooltipConfig.prototype.triggers; + /** @type {?} */ + NgbTooltipConfig.prototype.container; + /** @type {?} */ + NgbTooltipConfig.prototype.disableTooltip; + /** @type {?} */ + NgbTooltipConfig.prototype.tooltipClass; + /** @type {?} */ + NgbTooltipConfig.prototype.openDelay; + /** @type {?} */ + NgbTooltipConfig.prototype.closeDelay; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC1jb25maWcuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJ0b29sdGlwL3Rvb2x0aXAtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQVN6QztJQUFBO1FBRUUsY0FBUyxHQUFtQyxJQUFJLENBQUM7UUFDakQsY0FBUyxHQUFtQixNQUFNLENBQUM7UUFDbkMsYUFBUSxHQUFHLGFBQWEsQ0FBQztRQUV6QixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUV2QixjQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsZUFBVSxHQUFHLENBQUMsQ0FBQztLQUNoQjs7Z0JBVkEsVUFBVSxTQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQzs7OzJCQVRoQztDQW1CQyxBQVZELElBVUM7U0FUWSxnQkFBZ0I7OztJQUMzQixxQ0FBaUQ7O0lBQ2pELHFDQUFtQzs7SUFDbkMsb0NBQXlCOztJQUN6QixxQ0FBa0I7O0lBQ2xCLDBDQUF1Qjs7SUFDdkIsd0NBQXFCOztJQUNyQixxQ0FBYzs7SUFDZCxzQ0FBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1BsYWNlbWVudEFycmF5fSBmcm9tICcuLi91dGlsL3Bvc2l0aW9uaW5nJztcblxuLyoqXG4gKiBBIGNvbmZpZ3VyYXRpb24gc2VydmljZSBmb3IgdGhlIFtgTmdiVG9vbHRpcGBdKCMvY29tcG9uZW50cy90b29sdGlwL2FwaSNOZ2JUb29sdGlwKSBjb21wb25lbnQuXG4gKlxuICogWW91IGNhbiBpbmplY3QgdGhpcyBzZXJ2aWNlLCB0eXBpY2FsbHkgaW4geW91ciByb290IGNvbXBvbmVudCwgYW5kIGN1c3RvbWl6ZSB0aGUgdmFsdWVzIG9mIGl0cyBwcm9wZXJ0aWVzIGluXG4gKiBvcmRlciB0byBwcm92aWRlIGRlZmF1bHQgdmFsdWVzIGZvciBhbGwgdGhlIHRvb2x0aXBzIHVzZWQgaW4gdGhlIGFwcGxpY2F0aW9uLlxuICovXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBOZ2JUb29sdGlwQ29uZmlnIHtcbiAgYXV0b0Nsb3NlOiBib29sZWFuIHwgJ2luc2lkZScgfCAnb3V0c2lkZScgPSB0cnVlO1xuICBwbGFjZW1lbnQ6IFBsYWNlbWVudEFycmF5ID0gJ2F1dG8nO1xuICB0cmlnZ2VycyA9ICdob3ZlciBmb2N1cyc7XG4gIGNvbnRhaW5lcjogc3RyaW5nO1xuICBkaXNhYmxlVG9vbHRpcCA9IGZhbHNlO1xuICB0b29sdGlwQ2xhc3M6IHN0cmluZztcbiAgb3BlbkRlbGF5ID0gMDtcbiAgY2xvc2VEZWxheSA9IDA7XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/tooltip/tooltip.js b/dist/sunbird-ui-components/esm5/tooltip/tooltip.js new file mode 100644 index 0000000..479d86c --- /dev/null +++ b/dist/sunbird-ui-components/esm5/tooltip/tooltip.js @@ -0,0 +1,416 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Component, Directive, Input, Output, EventEmitter, ChangeDetectionStrategy, Inject, Injector, Renderer2, ElementRef, ViewContainerRef, ComponentFactoryResolver, NgZone, ViewEncapsulation, ChangeDetectorRef, ApplicationRef } from '@angular/core'; +import { DOCUMENT } from '@angular/common'; +import { listenToTriggers } from '../util/triggers'; +import { ngbAutoClose } from '../util/autoclose'; +import { positionElements } from '../util/positioning'; +import { PopupService } from '../util/popup'; +import { NgbTooltipConfig } from './tooltip-config'; +/** @type {?} */ +var nextId = 0; +var NgbTooltipWindow = /** @class */ (function () { + function NgbTooltipWindow() { + } + NgbTooltipWindow.decorators = [ + { type: Component, args: [{ + selector: 'ngb-tooltip-window', + changeDetection: ChangeDetectionStrategy.OnPush, + encapsulation: ViewEncapsulation.None, + host: { '[class]': '"tooltip show" + (tooltipClass ? " " + tooltipClass : "")', 'role': 'tooltip', '[id]': 'id' }, + template: "
", + styles: ["ngb-tooltip-window.bs-tooltip-bottom .arrow,ngb-tooltip-window.bs-tooltip-top .arrow{left:calc(50% - .4rem)}ngb-tooltip-window.bs-tooltip-bottom-left .arrow,ngb-tooltip-window.bs-tooltip-top-left .arrow{left:1em}ngb-tooltip-window.bs-tooltip-bottom-right .arrow,ngb-tooltip-window.bs-tooltip-top-right .arrow{left:auto;right:.8rem}ngb-tooltip-window.bs-tooltip-left .arrow,ngb-tooltip-window.bs-tooltip-right .arrow{top:calc(50% - .4rem)}ngb-tooltip-window.bs-tooltip-left-top .arrow,ngb-tooltip-window.bs-tooltip-right-top .arrow{top:.4rem}ngb-tooltip-window.bs-tooltip-left-bottom .arrow,ngb-tooltip-window.bs-tooltip-right-bottom .arrow{top:auto;bottom:.4rem}"] + }] } + ]; + NgbTooltipWindow.propDecorators = { + id: [{ type: Input }], + tooltipClass: [{ type: Input }] + }; + return NgbTooltipWindow; +}()); +export { NgbTooltipWindow }; +if (false) { + /** @type {?} */ + NgbTooltipWindow.prototype.id; + /** @type {?} */ + NgbTooltipWindow.prototype.tooltipClass; +} +/** + * A lightweight and extensible directive for fancy tooltip creation. + */ +var NgbTooltip = /** @class */ (function () { + function NgbTooltip(_elementRef, _renderer, injector, componentFactoryResolver, viewContainerRef, config, _ngZone, _document, _changeDetector, _applicationRef) { + var _this = this; + this._elementRef = _elementRef; + this._renderer = _renderer; + this._ngZone = _ngZone; + this._document = _document; + this._changeDetector = _changeDetector; + this._applicationRef = _applicationRef; + /** + * An event emitted when the tooltip is shown. Contains no payload. + */ + this.shown = new EventEmitter(); + /** + * An event emitted when the popover is hidden. Contains no payload. + */ + this.hidden = new EventEmitter(); + this._ngbTooltipWindowId = "ngb-tooltip-" + nextId++; + this.autoClose = config.autoClose; + this.placement = config.placement; + this.triggers = config.triggers; + this.container = config.container; + this.disableTooltip = config.disableTooltip; + this.tooltipClass = config.tooltipClass; + this.openDelay = config.openDelay; + this.closeDelay = config.closeDelay; + this._popupService = new PopupService(NgbTooltipWindow, injector, viewContainerRef, _renderer, componentFactoryResolver, _applicationRef); + this._zoneSubscription = _ngZone.onStable.subscribe((/** + * @return {?} + */ + function () { + if (_this._windowRef) { + positionElements(_this._elementRef.nativeElement, _this._windowRef.location.nativeElement, _this.placement, _this.container === 'body', 'bs-tooltip'); + } + })); + } + Object.defineProperty(NgbTooltip.prototype, "ngbTooltip", { + get: /** + * @return {?} + */ + function () { return this._ngbTooltip; }, + /** + * The string content or a `TemplateRef` for the content to be displayed in the tooltip. + * + * If the content if falsy, the tooltip won't open. + */ + set: /** + * The string content or a `TemplateRef` for the content to be displayed in the tooltip. + * + * If the content if falsy, the tooltip won't open. + * @param {?} value + * @return {?} + */ + function (value) { + this._ngbTooltip = value; + if (!value && this._windowRef) { + this.close(); + } + }, + enumerable: true, + configurable: true + }); + /** + * Opens the tooltip. + * + * This is considered to be a "manual" triggering. + * The `context` is an optional value to be injected into the tooltip template when it is created. + */ + /** + * Opens the tooltip. + * + * This is considered to be a "manual" triggering. + * The `context` is an optional value to be injected into the tooltip template when it is created. + * @param {?=} context + * @return {?} + */ + NgbTooltip.prototype.open = /** + * Opens the tooltip. + * + * This is considered to be a "manual" triggering. + * The `context` is an optional value to be injected into the tooltip template when it is created. + * @param {?=} context + * @return {?} + */ + function (context) { + var _this = this; + if (!this._windowRef && this._ngbTooltip && !this.disableTooltip) { + this._windowRef = this._popupService.open(this._ngbTooltip, context); + this._windowRef.instance.tooltipClass = this.tooltipClass; + this._windowRef.instance.id = this._ngbTooltipWindowId; + this._renderer.setAttribute(this._elementRef.nativeElement, 'aria-describedby', this._ngbTooltipWindowId); + if (this.container === 'body') { + this._document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement); + } + // We need to detect changes, because we don't know where .open() might be called from. + // Ex. opening tooltip from one of lifecycle hooks that run after the CD + // (say from ngAfterViewInit) will result in 'ExpressionHasChanged' exception + this._windowRef.changeDetectorRef.detectChanges(); + // We need to mark for check, because tooltip won't work inside the OnPush component. + // Ex. when we use expression like `{{ tooltip.isOpen() : 'opened' : 'closed' }}` + // inside the template of an OnPush component and we change the tooltip from + // open -> closed, the expression in question won't be updated unless we explicitly + // mark the parent component to be checked. + this._windowRef.changeDetectorRef.markForCheck(); + ngbAutoClose(this._ngZone, this._document, this.autoClose, (/** + * @return {?} + */ + function () { return _this.close(); }), this.hidden, [this._windowRef.location.nativeElement]); + this.shown.emit(); + } + }; + /** + * Closes the tooltip. + * + * This is considered to be a "manual" triggering of the tooltip. + */ + /** + * Closes the tooltip. + * + * This is considered to be a "manual" triggering of the tooltip. + * @return {?} + */ + NgbTooltip.prototype.close = /** + * Closes the tooltip. + * + * This is considered to be a "manual" triggering of the tooltip. + * @return {?} + */ + function () { + if (this._windowRef != null) { + this._renderer.removeAttribute(this._elementRef.nativeElement, 'aria-describedby'); + this._popupService.close(); + this._windowRef = null; + this.hidden.emit(); + this._changeDetector.markForCheck(); + } + }; + /** + * Toggles the tooltip. + * + * This is considered to be a "manual" triggering of the tooltip. + */ + /** + * Toggles the tooltip. + * + * This is considered to be a "manual" triggering of the tooltip. + * @return {?} + */ + NgbTooltip.prototype.toggle = /** + * Toggles the tooltip. + * + * This is considered to be a "manual" triggering of the tooltip. + * @return {?} + */ + function () { + if (this._windowRef) { + this.close(); + } + else { + this.open(); + } + }; + /** + * Returns `true`, if the popover is currently shown. + */ + /** + * Returns `true`, if the popover is currently shown. + * @return {?} + */ + NgbTooltip.prototype.isOpen = /** + * Returns `true`, if the popover is currently shown. + * @return {?} + */ + function () { return this._windowRef != null; }; + /** + * @return {?} + */ + NgbTooltip.prototype.ngOnInit = /** + * @return {?} + */ + function () { + this._unregisterListenersFn = listenToTriggers(this._renderer, this._elementRef.nativeElement, this.triggers, this.isOpen.bind(this), this.open.bind(this), this.close.bind(this), +this.openDelay, +this.closeDelay); + }; + /** + * @return {?} + */ + NgbTooltip.prototype.ngOnDestroy = /** + * @return {?} + */ + function () { + this.close(); + // This check is needed as it might happen that ngOnDestroy is called before ngOnInit + // under certain conditions, see: https://github.com/ng-bootstrap/ng-bootstrap/issues/2199 + if (this._unregisterListenersFn) { + this._unregisterListenersFn(); + } + this._zoneSubscription.unsubscribe(); + }; + NgbTooltip.decorators = [ + { type: Directive, args: [{ selector: '[ngbTooltip]', exportAs: 'ngbTooltip' },] } + ]; + /** @nocollapse */ + NgbTooltip.ctorParameters = function () { return [ + { type: ElementRef }, + { type: Renderer2 }, + { type: Injector }, + { type: ComponentFactoryResolver }, + { type: ViewContainerRef }, + { type: NgbTooltipConfig }, + { type: NgZone }, + { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }, + { type: ChangeDetectorRef }, + { type: ApplicationRef } + ]; }; + NgbTooltip.propDecorators = { + autoClose: [{ type: Input }], + placement: [{ type: Input }], + triggers: [{ type: Input }], + container: [{ type: Input }], + disableTooltip: [{ type: Input }], + tooltipClass: [{ type: Input }], + openDelay: [{ type: Input }], + closeDelay: [{ type: Input }], + shown: [{ type: Output }], + hidden: [{ type: Output }], + ngbTooltip: [{ type: Input }] + }; + return NgbTooltip; +}()); +export { NgbTooltip }; +if (false) { + /** + * Indicates whether the tooltip should be closed on `Escape` key and inside/outside clicks: + * + * * `true` - closes on both outside and inside clicks as well as `Escape` presses + * * `false` - disables the autoClose feature (NB: triggers still apply) + * * `"inside"` - closes on inside clicks as well as Escape presses + * * `"outside"` - closes on outside clicks (sometimes also achievable through triggers) + * as well as `Escape` presses + * + * \@since 3.0.0 + * @type {?} + */ + NgbTooltip.prototype.autoClose; + /** + * The preferred placement of the tooltip. + * + * Possible values are `"top"`, `"top-left"`, `"top-right"`, `"bottom"`, `"bottom-left"`, + * `"bottom-right"`, `"left"`, `"left-top"`, `"left-bottom"`, `"right"`, `"right-top"`, + * `"right-bottom"` + * + * Accepts an array of strings or a string with space separated possible values. + * + * The default order of preference is `"auto"` (same as the sequence above). + * + * Please see the [positioning overview](#/positioning) for more details. + * @type {?} + */ + NgbTooltip.prototype.placement; + /** + * Specifies events that should trigger the tooltip. + * + * Supports a space separated list of event names. + * For more details see the [triggers demo](#/components/tooltip/examples#triggers). + * @type {?} + */ + NgbTooltip.prototype.triggers; + /** + * A selector specifying the element the tooltip should be appended to. + * + * Currently only supports `"body"`. + * @type {?} + */ + NgbTooltip.prototype.container; + /** + * If `true`, tooltip is disabled and won't be displayed. + * + * \@since 1.1.0 + * @type {?} + */ + NgbTooltip.prototype.disableTooltip; + /** + * An optional class applied to the tooltip window element. + * + * \@since 3.2.0 + * @type {?} + */ + NgbTooltip.prototype.tooltipClass; + /** + * The opening delay in ms. Works only for "non-manual" opening triggers defined by the `triggers` input. + * + * \@since 4.1.0 + * @type {?} + */ + NgbTooltip.prototype.openDelay; + /** + * The closing delay in ms. Works only for "non-manual" opening triggers defined by the `triggers` input. + * + * \@since 4.1.0 + * @type {?} + */ + NgbTooltip.prototype.closeDelay; + /** + * An event emitted when the tooltip is shown. Contains no payload. + * @type {?} + */ + NgbTooltip.prototype.shown; + /** + * An event emitted when the popover is hidden. Contains no payload. + * @type {?} + */ + NgbTooltip.prototype.hidden; + /** + * @type {?} + * @private + */ + NgbTooltip.prototype._ngbTooltip; + /** + * @type {?} + * @private + */ + NgbTooltip.prototype._ngbTooltipWindowId; + /** + * @type {?} + * @private + */ + NgbTooltip.prototype._popupService; + /** + * @type {?} + * @private + */ + NgbTooltip.prototype._windowRef; + /** + * @type {?} + * @private + */ + NgbTooltip.prototype._unregisterListenersFn; + /** + * @type {?} + * @private + */ + NgbTooltip.prototype._zoneSubscription; + /** + * @type {?} + * @private + */ + NgbTooltip.prototype._elementRef; + /** + * @type {?} + * @private + */ + NgbTooltip.prototype._renderer; + /** + * @type {?} + * @private + */ + NgbTooltip.prototype._ngZone; + /** + * @type {?} + * @private + */ + NgbTooltip.prototype._document; + /** + * @type {?} + * @private + */ + NgbTooltip.prototype._changeDetector; + /** + * @type {?} + * @private + */ + NgbTooltip.prototype._applicationRef; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbInRvb2x0aXAvdG9vbHRpcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osdUJBQXVCLEVBR3ZCLE1BQU0sRUFDTixRQUFRLEVBQ1IsU0FBUyxFQUVULFVBQVUsRUFFVixnQkFBZ0IsRUFDaEIsd0JBQXdCLEVBQ3hCLE1BQU0sRUFDTixpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2pCLGNBQWMsRUFDZixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFekMsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQy9DLE9BQU8sRUFBQyxnQkFBZ0IsRUFBaUIsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGtCQUFrQixDQUFDOztJQUU5QyxNQUFNLEdBQUcsQ0FBQztBQUVkO0lBQUE7SUFXQSxDQUFDOztnQkFYQSxTQUFTLFNBQUM7b0JBQ1QsUUFBUSxFQUFFLG9CQUFvQjtvQkFDOUIsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO29CQUNyQyxJQUFJLEVBQUUsRUFBQyxTQUFTLEVBQUUsMkRBQTJELEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFDO29CQUMvRyxRQUFRLEVBQUUseUZBQXFGOztpQkFFaEc7OztxQkFFRSxLQUFLOytCQUNM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c0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBEaXJlY3RpdmUsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIE9uSW5pdCxcbiAgT25EZXN0cm95LFxuICBJbmplY3QsXG4gIEluamVjdG9yLFxuICBSZW5kZXJlcjIsXG4gIENvbXBvbmVudFJlZixcbiAgRWxlbWVudFJlZixcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgTmdab25lLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIEFwcGxpY2F0aW9uUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtET0NVTUVOVH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHtsaXN0ZW5Ub1RyaWdnZXJzfSBmcm9tICcuLi91dGlsL3RyaWdnZXJzJztcbmltcG9ydCB7bmdiQXV0b0Nsb3NlfSBmcm9tICcuLi91dGlsL2F1dG9jbG9zZSc7XG5pbXBvcnQge3Bvc2l0aW9uRWxlbWVudHMsIFBsYWNlbWVudEFycmF5fSBmcm9tICcuLi91dGlsL3Bvc2l0aW9uaW5nJztcbmltcG9ydCB7UG9wdXBTZXJ2aWNlfSBmcm9tICcuLi91dGlsL3BvcHVwJztcblxuaW1wb3J0IHtOZ2JUb29sdGlwQ29uZmlnfSBmcm9tICcuL3Rvb2x0aXAtY29uZmlnJztcblxubGV0IG5leHRJZCA9IDA7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25nYi10b29sdGlwLXdpbmRvdycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBob3N0OiB7J1tjbGFzc10nOiAnXCJ0b29sdGlwIHNob3dcIiArICh0b29sdGlwQ2xhc3MgPyBcIiBcIiArIHRvb2x0aXBDbGFzcyA6IFwiXCIpJywgJ3JvbGUnOiAndG9vbHRpcCcsICdbaWRdJzogJ2lkJ30sXG4gIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cImFycm93XCI+PC9kaXY+PGRpdiBjbGFzcz1cInRvb2x0aXAtaW5uZXJcIj48bmctY29udGVudD48L25nLWNvbnRlbnQ+PC9kaXY+YCxcbiAgc3R5bGVVcmxzOiBbJy4vdG9vbHRpcC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTmdiVG9vbHRpcFdpbmRvdyB7XG4gIEBJbnB1dCgpIGlkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRvb2x0aXBDbGFzczogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgbGlnaHR3ZWlnaHQgYW5kIGV4dGVuc2libGUgZGlyZWN0aXZlIGZvciBmYW5jeSB0b29sdGlwIGNyZWF0aW9uLlxuICovXG5ARGlyZWN0aXZlKHtzZWxlY3RvcjogJ1tuZ2JUb29sdGlwXScsIGV4cG9ydEFzOiAnbmdiVG9vbHRpcCd9KVxuZXhwb3J0IGNsYXNzIE5nYlRvb2x0aXAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdG9vbHRpcCBzaG91bGQgYmUgY2xvc2VkIG9uIGBFc2NhcGVgIGtleSBhbmQgaW5zaWRlL291dHNpZGUgY2xpY2tzOlxuICAgKlxuICAgKiAqIGB0cnVlYCAtIGNsb3NlcyBvbiBib3RoIG91dHNpZGUgYW5kIGluc2lkZSBjbGlja3MgYXMgd2VsbCBhcyBgRXNjYXBlYCBwcmVzc2VzXG4gICAqICogYGZhbHNlYCAtIGRpc2FibGVzIHRoZSBhdXRvQ2xvc2UgZmVhdHVyZSAoTkI6IHRyaWdnZXJzIHN0aWxsIGFwcGx5KVxuICAgKiAqIGBcImluc2lkZVwiYCAtIGNsb3NlcyBvbiBpbnNpZGUgY2xpY2tzIGFzIHdlbGwgYXMgRXNjYXBlIHByZXNzZXNcbiAgICogKiBgXCJvdXRzaWRlXCJgIC0gY2xvc2VzIG9uIG91dHNpZGUgY2xpY2tzIChzb21ldGltZXMgYWxzbyBhY2hpZXZhYmxlIHRocm91Z2ggdHJpZ2dlcnMpXG4gICAqIGFzIHdlbGwgYXMgYEVzY2FwZWAgcHJlc3Nlc1xuICAgKlxuICAgKiBAc2luY2UgMy4wLjBcbiAgICovXG4gIEBJbnB1dCgpIGF1dG9DbG9zZTogYm9vbGVhbiB8ICdpbnNpZGUnIHwgJ291dHNpZGUnO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJlZmVycmVkIHBsYWNlbWVudCBvZiB0aGUgdG9vbHRpcC5cbiAgICpcbiAgICogUG9zc2libGUgdmFsdWVzIGFyZSBgXCJ0b3BcImAsIGBcInRvcC1sZWZ0XCJgLCBgXCJ0b3AtcmlnaHRcImAsIGBcImJvdHRvbVwiYCwgYFwiYm90dG9tLWxlZnRcImAsXG4gICAqIGBcImJvdHRvbS1yaWdodFwiYCwgYFwibGVmdFwiYCwgYFwibGVmdC10b3BcImAsIGBcImxlZnQtYm90dG9tXCJgLCBgXCJyaWdodFwiYCwgYFwicmlnaHQtdG9wXCJgLFxuICAgKiBgXCJyaWdodC1ib3R0b21cImBcbiAgICpcbiAgICogQWNjZXB0cyBhbiBhcnJheSBvZiBzdHJpbmdzIG9yIGEgc3RyaW5nIHdpdGggc3BhY2Ugc2VwYXJhdGVkIHBvc3NpYmxlIHZhbHVlcy5cbiAgICpcbiAgICogVGhlIGRlZmF1bHQgb3JkZXIgb2YgcHJlZmVyZW5jZSBpcyBgXCJhdXRvXCJgIChzYW1lIGFzIHRoZSBzZXF1ZW5jZSBhYm92ZSkuXG4gICAqXG4gICAqIFBsZWFzZSBzZWUgdGhlIFtwb3NpdGlvbmluZyBvdmVydmlld10oIy9wb3NpdGlvbmluZykgZm9yIG1vcmUgZGV0YWlscy5cbiAgICovXG4gIEBJbnB1dCgpIHBsYWNlbWVudDogUGxhY2VtZW50QXJyYXk7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyBldmVudHMgdGhhdCBzaG91bGQgdHJpZ2dlciB0aGUgdG9vbHRpcC5cbiAgICpcbiAgICogU3VwcG9ydHMgYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBldmVudCBuYW1lcy5cbiAgICogRm9yIG1vcmUgZGV0YWlscyBzZWUgdGhlIFt0cmlnZ2VycyBkZW1vXSgjL2NvbXBvbmVudHMvdG9vbHRpcC9leGFtcGxlcyN0cmlnZ2VycykuXG4gICAqL1xuICBASW5wdXQoKSB0cmlnZ2Vyczogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHNlbGVjdG9yIHNwZWNpZnlpbmcgdGhlIGVsZW1lbnQgdGhlIHRvb2x0aXAgc2hvdWxkIGJlIGFwcGVuZGVkIHRvLlxuICAgKlxuICAgKiBDdXJyZW50bHkgb25seSBzdXBwb3J0cyBgXCJib2R5XCJgLlxuICAgKi9cbiAgQElucHV0KCkgY29udGFpbmVyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdG9vbHRpcCBpcyBkaXNhYmxlZCBhbmQgd29uJ3QgYmUgZGlzcGxheWVkLlxuICAgKlxuICAgKiBAc2luY2UgMS4xLjBcbiAgICovXG4gIEBJbnB1dCgpIGRpc2FibGVUb29sdGlwOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCBjbGFzcyBhcHBsaWVkIHRvIHRoZSB0b29sdGlwIHdpbmRvdyBlbGVtZW50LlxuICAgKlxuICAgKiBAc2luY2UgMy4yLjBcbiAgICovXG4gIEBJbnB1dCgpIHRvb2x0aXBDbGFzczogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgb3BlbmluZyBkZWxheSBpbiBtcy4gV29ya3Mgb25seSBmb3IgXCJub24tbWFudWFsXCIgb3BlbmluZyB0cmlnZ2VycyBkZWZpbmVkIGJ5IHRoZSBgdHJpZ2dlcnNgIGlucHV0LlxuICAgKlxuICAgKiBAc2luY2UgNC4xLjBcbiAgICovXG4gIEBJbnB1dCgpIG9wZW5EZWxheTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgY2xvc2luZyBkZWxheSBpbiBtcy4gV29ya3Mgb25seSBmb3IgXCJub24tbWFudWFsXCIgb3BlbmluZyB0cmlnZ2VycyBkZWZpbmVkIGJ5IHRoZSBgdHJpZ2dlcnNgIGlucHV0LlxuICAgKlxuICAgKiBAc2luY2UgNC4xLjBcbiAgICovXG4gIEBJbnB1dCgpIGNsb3NlRGVsYXk6IG51bWJlcjtcblxuICAvKipcbiAgICogQW4gZXZlbnQgZW1pdHRlZCB3aGVuIHRoZSB0b29sdGlwIGlzIHNob3duLiBDb250YWlucyBubyBwYXlsb2FkLlxuICAgKi9cbiAgQE91dHB1dCgpIHNob3duID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAvKipcbiAgICogQW4gZXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBwb3BvdmVyIGlzIGhpZGRlbi4gQ29udGFpbnMgbm8gcGF5bG9hZC5cbiAgICovXG4gIEBPdXRwdXQoKSBoaWRkZW4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHJpdmF0ZSBfbmdiVG9vbHRpcDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PjtcbiAgcHJpdmF0ZSBfbmdiVG9vbHRpcFdpbmRvd0lkID0gYG5nYi10b29sdGlwLSR7bmV4dElkKyt9YDtcbiAgcHJpdmF0ZSBfcG9wdXBTZXJ2aWNlOiBQb3B1cFNlcnZpY2U8TmdiVG9vbHRpcFdpbmRvdz47XG4gIHByaXZhdGUgX3dpbmRvd1JlZjogQ29tcG9uZW50UmVmPE5nYlRvb2x0aXBXaW5kb3c+O1xuICBwcml2YXRlIF91bnJlZ2lzdGVyTGlzdGVuZXJzRm47XG4gIHByaXZhdGUgX3pvbmVTdWJzY3JpcHRpb246IGFueTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LCBwcml2YXRlIF9yZW5kZXJlcjogUmVuZGVyZXIyLCBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZiwgY29uZmlnOiBOZ2JUb29sdGlwQ29uZmlnLFxuICAgICAgcHJpdmF0ZSBfbmdab25lOiBOZ1pvbmUsIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgX2RvY3VtZW50OiBhbnksIHByaXZhdGUgX2NoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgIHByaXZhdGUgX2FwcGxpY2F0aW9uUmVmOiBBcHBsaWNhdGlvblJlZikge1xuICAgIHRoaXMuYXV0b0Nsb3NlID0gY29uZmlnLmF1dG9DbG9zZTtcbiAgICB0aGlzLnBsYWNlbWVudCA9IGNvbmZpZy5wbGFjZW1lbnQ7XG4gICAgdGhpcy50cmlnZ2VycyA9IGNvbmZpZy50cmlnZ2VycztcbiAgICB0aGlzLmNvbnRhaW5lciA9IGNvbmZpZy5jb250YWluZXI7XG4gICAgdGhpcy5kaXNhYmxlVG9vbHRpcCA9IGNvbmZpZy5kaXNhYmxlVG9vbHRpcDtcbiAgICB0aGlzLnRvb2x0aXBDbGFzcyA9IGNvbmZpZy50b29sdGlwQ2xhc3M7XG4gICAgdGhpcy5vcGVuRGVsYXkgPSBjb25maWcub3BlbkRlbGF5O1xuICAgIHRoaXMuY2xvc2VEZWxheSA9IGNvbmZpZy5jbG9zZURlbGF5O1xuICAgIHRoaXMuX3BvcHVwU2VydmljZSA9IG5ldyBQb3B1cFNlcnZpY2U8TmdiVG9vbHRpcFdpbmRvdz4oXG4gICAgICAgIE5nYlRvb2x0aXBXaW5kb3csIGluamVjdG9yLCB2aWV3Q29udGFpbmVyUmVmLCBfcmVuZGVyZXIsIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgX2FwcGxpY2F0aW9uUmVmKTtcblxuICAgIHRoaXMuX3pvbmVTdWJzY3JpcHRpb24gPSBfbmdab25lLm9uU3RhYmxlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fd2luZG93UmVmKSB7XG4gICAgICAgIHBvc2l0aW9uRWxlbWVudHMoXG4gICAgICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHRoaXMuX3dpbmRvd1JlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LCB0aGlzLnBsYWNlbWVudCxcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyID09PSAnYm9keScsICdicy10b29sdGlwJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHN0cmluZyBjb250ZW50IG9yIGEgYFRlbXBsYXRlUmVmYCBmb3IgdGhlIGNvbnRlbnQgdG8gYmUgZGlzcGxheWVkIGluIHRoZSB0b29sdGlwLlxuICAgKlxuICAgKiBJZiB0aGUgY29udGVudCBpZiBmYWxzeSwgdGhlIHRvb2x0aXAgd29uJ3Qgb3Blbi5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBuZ2JUb29sdGlwKHZhbHVlOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+KSB7XG4gICAgdGhpcy5fbmdiVG9vbHRpcCA9IHZhbHVlO1xuICAgIGlmICghdmFsdWUgJiYgdGhpcy5fd2luZG93UmVmKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IG5nYlRvb2x0aXAoKSB7IHJldHVybiB0aGlzLl9uZ2JUb29sdGlwOyB9XG5cbiAgLyoqXG4gICAqIE9wZW5zIHRoZSB0b29sdGlwLlxuICAgKlxuICAgKiBUaGlzIGlzIGNvbnNpZGVyZWQgdG8gYmUgYSBcIm1hbnVhbFwiIHRyaWdnZXJpbmcuXG4gICAqIFRoZSBgY29udGV4dGAgaXMgYW4gb3B0aW9uYWwgdmFsdWUgdG8gYmUgaW5qZWN0ZWQgaW50byB0aGUgdG9vbHRpcCB0ZW1wbGF0ZSB3aGVuIGl0IGlzIGNyZWF0ZWQuXG4gICAqL1xuICBvcGVuKGNvbnRleHQ/OiBhbnkpIHtcbiAgICBpZiAoIXRoaXMuX3dpbmRvd1JlZiAmJiB0aGlzLl9uZ2JUb29sdGlwICYmICF0aGlzLmRpc2FibGVUb29sdGlwKSB7XG4gICAgICB0aGlzLl93aW5kb3dSZWYgPSB0aGlzLl9wb3B1cFNlcnZpY2Uub3Blbih0aGlzLl9uZ2JUb29sdGlwLCBjb250ZXh0KTtcbiAgICAgIHRoaXMuX3dpbmRvd1JlZi5pbnN0YW5jZS50b29sdGlwQ2xhc3MgPSB0aGlzLnRvb2x0aXBDbGFzcztcbiAgICAgIHRoaXMuX3dpbmRvd1JlZi5pbnN0YW5jZS5pZCA9IHRoaXMuX25nYlRvb2x0aXBXaW5kb3dJZDtcblxuICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2FyaWEtZGVzY3JpYmVkYnknLCB0aGlzLl9uZ2JUb29sdGlwV2luZG93SWQpO1xuXG4gICAgICBpZiAodGhpcy5jb250YWluZXIgPT09ICdib2R5Jykge1xuICAgICAgICB0aGlzLl9kb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuY29udGFpbmVyKS5hcHBlbmRDaGlsZCh0aGlzLl93aW5kb3dSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFdlIG5lZWQgdG8gZGV0ZWN0IGNoYW5nZXMsIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyB3aGVyZSAub3BlbigpIG1pZ2h0IGJlIGNhbGxlZCBmcm9tLlxuICAgICAgLy8gRXguIG9wZW5pbmcgdG9vbHRpcCBmcm9tIG9uZSBvZiBsaWZlY3ljbGUgaG9va3MgdGhhdCBydW4gYWZ0ZXIgdGhlIENEXG4gICAgICAvLyAoc2F5IGZyb20gbmdBZnRlclZpZXdJbml0KSB3aWxsIHJlc3VsdCBpbiAnRXhwcmVzc2lvbkhhc0NoYW5nZWQnIGV4Y2VwdGlvblxuICAgICAgdGhpcy5fd2luZG93UmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgLy8gV2UgbmVlZCB0byBtYXJrIGZvciBjaGVjaywgYmVjYXVzZSB0b29sdGlwIHdvbid0IHdvcmsgaW5zaWRlIHRoZSBPblB1c2ggY29tcG9uZW50LlxuICAgICAgLy8gRXguIHdoZW4gd2UgdXNlIGV4cHJlc3Npb24gbGlrZSBge3sgdG9vbHRpcC5pc09wZW4oKSA6ICdvcGVuZWQnIDogJ2Nsb3NlZCcgfX1gXG4gICAgICAvLyBpbnNpZGUgdGhlIHRlbXBsYXRlIG9mIGFuIE9uUHVzaCBjb21wb25lbnQgYW5kIHdlIGNoYW5nZSB0aGUgdG9vbHRpcCBmcm9tXG4gICAgICAvLyBvcGVuIC0+IGNsb3NlZCwgdGhlIGV4cHJlc3Npb24gaW4gcXVlc3Rpb24gd29uJ3QgYmUgdXBkYXRlZCB1bmxlc3Mgd2UgZXhwbGljaXRseVxuICAgICAgLy8gbWFyayB0aGUgcGFyZW50IGNvbXBvbmVudCB0byBiZSBjaGVja2VkLlxuICAgICAgdGhpcy5fd2luZG93UmVmLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgICBuZ2JBdXRvQ2xvc2UoXG4gICAgICAgICAgdGhpcy5fbmdab25lLCB0aGlzLl9kb2N1bWVudCwgdGhpcy5hdXRvQ2xvc2UsICgpID0+IHRoaXMuY2xvc2UoKSwgdGhpcy5oaWRkZW4sXG4gICAgICAgICAgW3RoaXMuX3dpbmRvd1JlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50XSk7XG5cbiAgICAgIHRoaXMuc2hvd24uZW1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIHRvb2x0aXAuXG4gICAqXG4gICAqIFRoaXMgaXMgY29uc2lkZXJlZCB0byBiZSBhIFwibWFudWFsXCIgdHJpZ2dlcmluZyBvZiB0aGUgdG9vbHRpcC5cbiAgICovXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl93aW5kb3dSZWYgIT0gbnVsbCkge1xuICAgICAgdGhpcy5fcmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2FyaWEtZGVzY3JpYmVkYnknKTtcbiAgICAgIHRoaXMuX3BvcHVwU2VydmljZS5jbG9zZSgpO1xuICAgICAgdGhpcy5fd2luZG93UmVmID0gbnVsbDtcbiAgICAgIHRoaXMuaGlkZGVuLmVtaXQoKTtcbiAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIHRoZSB0b29sdGlwLlxuICAgKlxuICAgKiBUaGlzIGlzIGNvbnNpZGVyZWQgdG8gYmUgYSBcIm1hbnVhbFwiIHRyaWdnZXJpbmcgb2YgdGhlIHRvb2x0aXAuXG4gICAqL1xuICB0b2dnbGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3dpbmRvd1JlZikge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wZW4oKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAsIGlmIHRoZSBwb3BvdmVyIGlzIGN1cnJlbnRseSBzaG93bi5cbiAgICovXG4gIGlzT3BlbigpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX3dpbmRvd1JlZiAhPSBudWxsOyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5fdW5yZWdpc3Rlckxpc3RlbmVyc0ZuID0gbGlzdGVuVG9UcmlnZ2VycyhcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIsIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgdGhpcy50cmlnZ2VycywgdGhpcy5pc09wZW4uYmluZCh0aGlzKSwgdGhpcy5vcGVuLmJpbmQodGhpcyksXG4gICAgICAgIHRoaXMuY2xvc2UuYmluZCh0aGlzKSwgK3RoaXMub3BlbkRlbGF5LCArdGhpcy5jbG9zZURlbGF5KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgICAvLyBUaGlzIGNoZWNrIGlzIG5lZWRlZCBhcyBpdCBtaWdodCBoYXBwZW4gdGhhdCBuZ09uRGVzdHJveSBpcyBjYWxsZWQgYmVmb3JlIG5nT25Jbml0XG4gICAgLy8gdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLCBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9uZy1ib290c3RyYXAvbmctYm9vdHN0cmFwL2lzc3Vlcy8yMTk5XG4gICAgaWYgKHRoaXMuX3VucmVnaXN0ZXJMaXN0ZW5lcnNGbikge1xuICAgICAgdGhpcy5fdW5yZWdpc3Rlckxpc3RlbmVyc0ZuKCk7XG4gICAgfVxuICAgIHRoaXMuX3pvbmVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/tooltip/tooltip.module.js b/dist/sunbird-ui-components/esm5/tooltip/tooltip.module.js new file mode 100644 index 0000000..fa8c22a --- /dev/null +++ b/dist/sunbird-ui-components/esm5/tooltip/tooltip.module.js @@ -0,0 +1,18 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgModule } from '@angular/core'; +import { NgbTooltip, NgbTooltipWindow } from './tooltip'; +export { NgbTooltipConfig } from './tooltip-config'; +export { NgbTooltip } from './tooltip'; +var NgbTooltipModule = /** @class */ (function () { + function NgbTooltipModule() { + } + NgbTooltipModule.decorators = [ + { type: NgModule, args: [{ declarations: [NgbTooltip, NgbTooltipWindow], exports: [NgbTooltip], entryComponents: [NgbTooltipWindow] },] } + ]; + return NgbTooltipModule; +}()); +export { NgbTooltipModule }; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC5tb2R1bGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJ0b29sdGlwL3Rvb2x0aXAubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXZDLE9BQU8sRUFBQyxVQUFVLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFdkQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUdyQztJQUFBO0lBRUEsQ0FBQzs7Z0JBRkEsUUFBUSxTQUFDLEVBQUMsWUFBWSxFQUFFLENBQUMsVUFBVSxFQUFFLGdCQUFnQixDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsRUFBQzs7SUFFcEgsdUJBQUM7Q0FBQSxBQUZELElBRUM7U0FEWSxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge05nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtOZ2JUb29sdGlwLCBOZ2JUb29sdGlwV2luZG93fSBmcm9tICcuL3Rvb2x0aXAnO1xuXG5leHBvcnQge05nYlRvb2x0aXBDb25maWd9IGZyb20gJy4vdG9vbHRpcC1jb25maWcnO1xuZXhwb3J0IHtOZ2JUb29sdGlwfSBmcm9tICcuL3Rvb2x0aXAnO1xuZXhwb3J0IHtQbGFjZW1lbnR9IGZyb20gJy4uL3V0aWwvcG9zaXRpb25pbmcnO1xuXG5ATmdNb2R1bGUoe2RlY2xhcmF0aW9uczogW05nYlRvb2x0aXAsIE5nYlRvb2x0aXBXaW5kb3ddLCBleHBvcnRzOiBbTmdiVG9vbHRpcF0sIGVudHJ5Q29tcG9uZW50czogW05nYlRvb2x0aXBXaW5kb3ddfSlcbmV4cG9ydCBjbGFzcyBOZ2JUb29sdGlwTW9kdWxlIHtcbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/typeahead/highlight.js b/dist/sunbird-ui-components/esm5/typeahead/highlight.js new file mode 100644 index 0000000..bf6e4f7 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/typeahead/highlight.js @@ -0,0 +1,89 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Component, Input, ChangeDetectionStrategy, ViewEncapsulation } from '@angular/core'; +import { regExpEscape, toString } from '../util/util'; +/** + * A component that helps with text highlighting. + * + * If splits the `result` text into parts that contain the searched `term` and generates the HTML markup to simplify + * highlighting: + * + * Ex. `result="Alaska"` and `term="as"` will produce `Alaska`. + */ +var NgbHighlight = /** @class */ (function () { + function NgbHighlight() { + /** + * The CSS class for `` elements wrapping the `term` inside the `result`. + */ + this.highlightClass = 'ngb-highlight'; + } + /** + * @param {?} changes + * @return {?} + */ + NgbHighlight.prototype.ngOnChanges = /** + * @param {?} changes + * @return {?} + */ + function (changes) { + /** @type {?} */ + var result = toString(this.result); + /** @type {?} */ + var terms = Array.isArray(this.term) ? this.term : [this.term]; + /** @type {?} */ + var escapedTerms = terms.map((/** + * @param {?} term + * @return {?} + */ + function (term) { return regExpEscape(toString(term)); })).filter((/** + * @param {?} term + * @return {?} + */ + function (term) { return term; })); + this.parts = escapedTerms.length ? result.split(new RegExp("(" + escapedTerms.join('|') + ")", 'gmi')) : [result]; + }; + NgbHighlight.decorators = [ + { type: Component, args: [{ + selector: 'ngb-highlight', + changeDetection: ChangeDetectionStrategy.OnPush, + encapsulation: ViewEncapsulation.None, + template: "" + + "{{part}}{{part}}" + + "", + styles: [".ngb-highlight{font-weight:700}"] + }] } + ]; + NgbHighlight.propDecorators = { + highlightClass: [{ type: Input }], + result: [{ type: Input }], + term: [{ type: Input }] + }; + return NgbHighlight; +}()); +export { NgbHighlight }; +if (false) { + /** @type {?} */ + NgbHighlight.prototype.parts; + /** + * The CSS class for `` elements wrapping the `term` inside the `result`. + * @type {?} + */ + NgbHighlight.prototype.highlightClass; + /** + * The text highlighting is added to. + * + * If the `term` is found inside this text, it will be highlighted. + * If the `term` contains array then all the items from it will be highlighted inside the text. + * @type {?} + */ + NgbHighlight.prototype.result; + /** + * The term or array of terms to be highlighted. + * Since version `v4.2.0` term could be a `string[]` + * @type {?} + */ + NgbHighlight.prototype.term; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlnaGxpZ2h0LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsidHlwZWFoZWFkL2hpZ2hsaWdodC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQWEsdUJBQXVCLEVBQWlCLGlCQUFpQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3JILE9BQU8sRUFBQyxZQUFZLEVBQUUsUUFBUSxFQUFDLE1BQU0sY0FBYyxDQUFDOzs7Ozs7Ozs7QUFVcEQ7SUFBQTs7OztRQWVXLG1CQUFjLEdBQUcsZUFBZSxDQUFDO0lBd0I1QyxDQUFDOzs7OztJQVJDLGtDQUFXOzs7O0lBQVgsVUFBWSxPQUFzQjs7WUFDMUIsTUFBTSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDOztZQUU5QixLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQzs7WUFDMUQsWUFBWSxHQUFHLEtBQUssQ0FBQyxHQUFHOzs7O1FBQUMsVUFBQSxJQUFJLElBQUksT0FBQSxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQTVCLENBQTRCLEVBQUMsQ0FBQyxNQUFNOzs7O1FBQUMsVUFBQSxJQUFJLElBQUksT0FBQSxJQUFJLEVBQUosQ0FBSSxFQUFDO1FBRXpGLElBQUksQ0FBQyxLQUFLLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9HLENBQUM7O2dCQXRDRixTQUFTLFNBQUM7b0JBQ1QsUUFBUSxFQUFFLGVBQWU7b0JBQ3pCLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtvQkFDckMsUUFBUSxFQUFFLG9FQUFnRTt3QkFDdEUsc0hBQWtIO3dCQUNsSCxnQkFBZ0I7O2lCQUVyQjs7O2lDQU9FLEtBQUs7eUJBUUwsS0FBSzt1QkFNTCxLQUFLOztJQVVSLG1CQUFDO0NBQUEsQUF2Q0QsSUF1Q0M7U0E5QlksWUFBWTs7O0lBQ3ZCLDZCQUFnQjs7Ozs7SUFLaEIsc0NBQTBDOzs7Ozs7OztJQVExQyw4QkFBd0I7Ozs7OztJQU14Qiw0QkFBaUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5wdXQsIE9uQ2hhbmdlcywgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIFNpbXBsZUNoYW5nZXMsIFZpZXdFbmNhcHN1bGF0aW9ufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7cmVnRXhwRXNjYXBlLCB0b1N0cmluZ30gZnJvbSAnLi4vdXRpbC91dGlsJztcblxuLyoqXG4gKiBBIGNvbXBvbmVudCB0aGF0IGhlbHBzIHdpdGggdGV4dCBoaWdobGlnaHRpbmcuXG4gKlxuICogSWYgc3BsaXRzIHRoZSBgcmVzdWx0YCB0ZXh0IGludG8gcGFydHMgdGhhdCBjb250YWluIHRoZSBzZWFyY2hlZCBgdGVybWAgYW5kIGdlbmVyYXRlcyB0aGUgSFRNTCBtYXJrdXAgdG8gc2ltcGxpZnlcbiAqIGhpZ2hsaWdodGluZzpcbiAqXG4gKiBFeC4gYHJlc3VsdD1cIkFsYXNrYVwiYCBhbmQgYHRlcm09XCJhc1wiYCB3aWxsIHByb2R1Y2UgYEFsPHNwYW4gY2xhc3M9XCJuZ2ItaGlnaGxpZ2h0XCI+YXM8L3NwYW4+a2FgLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ2ItaGlnaGxpZ2h0JyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHRlbXBsYXRlOiBgPG5nLXRlbXBsYXRlIG5nRm9yIFtuZ0Zvck9mXT1cInBhcnRzXCIgbGV0LXBhcnQgbGV0LWlzT2RkPVwib2RkXCI+YCArXG4gICAgICBgPHNwYW4gKm5nSWY9XCJpc09kZDsgZWxzZSBldmVuXCIgW2NsYXNzXT1cImhpZ2hsaWdodENsYXNzXCI+e3twYXJ0fX08L3NwYW4+PG5nLXRlbXBsYXRlICNldmVuPnt7cGFydH19PC9uZy10ZW1wbGF0ZT5gICtcbiAgICAgIGA8L25nLXRlbXBsYXRlPmAsICAvLyB0ZW1wbGF0ZSBuZWVkcyB0byBiZSBmb3JtYXR0ZWQgaW4gYSBjZXJ0YWluIHdheSBzbyB3ZSBkb24ndCBhZGQgZW1wdHkgdGV4dCBub2Rlc1xuICBzdHlsZVVybHM6IFsnLi9oaWdobGlnaHQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIE5nYkhpZ2hsaWdodCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIHBhcnRzOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIENTUyBjbGFzcyBmb3IgYDxzcGFuPmAgZWxlbWVudHMgd3JhcHBpbmcgdGhlIGB0ZXJtYCBpbnNpZGUgdGhlIGByZXN1bHRgLlxuICAgKi9cbiAgQElucHV0KCkgaGlnaGxpZ2h0Q2xhc3MgPSAnbmdiLWhpZ2hsaWdodCc7XG5cbiAgLyoqXG4gICAqIFRoZSB0ZXh0IGhpZ2hsaWdodGluZyBpcyBhZGRlZCB0by5cbiAgICpcbiAgICogSWYgdGhlIGB0ZXJtYCBpcyBmb3VuZCBpbnNpZGUgdGhpcyB0ZXh0LCBpdCB3aWxsIGJlIGhpZ2hsaWdodGVkLlxuICAgKiBJZiB0aGUgYHRlcm1gIGNvbnRhaW5zIGFycmF5IHRoZW4gYWxsIHRoZSBpdGVtcyBmcm9tIGl0IHdpbGwgYmUgaGlnaGxpZ2h0ZWQgaW5zaWRlIHRoZSB0ZXh0LlxuICAgKi9cbiAgQElucHV0KCkgcmVzdWx0OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0ZXJtIG9yIGFycmF5IG9mIHRlcm1zIHRvIGJlIGhpZ2hsaWdodGVkLlxuICAgKiBTaW5jZSB2ZXJzaW9uIGB2NC4yLjBgIHRlcm0gY291bGQgYmUgYSBgc3RyaW5nW11gXG4gICAqL1xuICBASW5wdXQoKSB0ZXJtOiBzdHJpbmcgfCBzdHJpbmdbXTtcblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gdG9TdHJpbmcodGhpcy5yZXN1bHQpO1xuXG4gICAgY29uc3QgdGVybXMgPSBBcnJheS5pc0FycmF5KHRoaXMudGVybSkgPyB0aGlzLnRlcm0gOiBbdGhpcy50ZXJtXTtcbiAgICBjb25zdCBlc2NhcGVkVGVybXMgPSB0ZXJtcy5tYXAodGVybSA9PiByZWdFeHBFc2NhcGUodG9TdHJpbmcodGVybSkpKS5maWx0ZXIodGVybSA9PiB0ZXJtKTtcblxuICAgIHRoaXMucGFydHMgPSBlc2NhcGVkVGVybXMubGVuZ3RoID8gcmVzdWx0LnNwbGl0KG5ldyBSZWdFeHAoYCgke2VzY2FwZWRUZXJtcy5qb2luKCd8Jyl9KWAsICdnbWknKSkgOiBbcmVzdWx0XTtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/typeahead/typeahead-config.js b/dist/sunbird-ui-components/esm5/typeahead/typeahead-config.js new file mode 100644 index 0000000..b9d8805 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/typeahead/typeahead-config.js @@ -0,0 +1,39 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Injectable } from '@angular/core'; +import * as i0 from "@angular/core"; +/** + * A configuration service for the [`NgbTypeahead`](#/components/typeahead/api#NgbTypeahead) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the typeaheads used in the application. + */ +var NgbTypeaheadConfig = /** @class */ (function () { + function NgbTypeaheadConfig() { + this.editable = true; + this.focusFirst = true; + this.showHint = false; + this.placement = ['bottom-left', 'bottom-right', 'top-left', 'top-right']; + } + NgbTypeaheadConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ NgbTypeaheadConfig.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function NgbTypeaheadConfig_Factory() { return new NgbTypeaheadConfig(); }, token: NgbTypeaheadConfig, providedIn: "root" }); + return NgbTypeaheadConfig; +}()); +export { NgbTypeaheadConfig }; +if (false) { + /** @type {?} */ + NgbTypeaheadConfig.prototype.container; + /** @type {?} */ + NgbTypeaheadConfig.prototype.editable; + /** @type {?} */ + NgbTypeaheadConfig.prototype.focusFirst; + /** @type {?} */ + NgbTypeaheadConfig.prototype.showHint; + /** @type {?} */ + NgbTypeaheadConfig.prototype.placement; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWFoZWFkLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbInR5cGVhaGVhZC90eXBlYWhlYWQtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQVN6QztJQUFBO1FBR0UsYUFBUSxHQUFHLElBQUksQ0FBQztRQUNoQixlQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsY0FBUyxHQUFtQixDQUFDLGFBQWEsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0tBQ3RGOztnQkFQQSxVQUFVLFNBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDOzs7NkJBVGhDO0NBZ0JDLEFBUEQsSUFPQztTQU5ZLGtCQUFrQjs7O0lBQzdCLHVDQUFVOztJQUNWLHNDQUFnQjs7SUFDaEIsd0NBQWtCOztJQUNsQixzQ0FBaUI7O0lBQ2pCLHVDQUFxRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1BsYWNlbWVudEFycmF5fSBmcm9tICcuLi91dGlsL3Bvc2l0aW9uaW5nJztcblxuLyoqXG4gKiBBIGNvbmZpZ3VyYXRpb24gc2VydmljZSBmb3IgdGhlIFtgTmdiVHlwZWFoZWFkYF0oIy9jb21wb25lbnRzL3R5cGVhaGVhZC9hcGkjTmdiVHlwZWFoZWFkKSBjb21wb25lbnQuXG4gKlxuICogWW91IGNhbiBpbmplY3QgdGhpcyBzZXJ2aWNlLCB0eXBpY2FsbHkgaW4geW91ciByb290IGNvbXBvbmVudCwgYW5kIGN1c3RvbWl6ZSB0aGUgdmFsdWVzIG9mIGl0cyBwcm9wZXJ0aWVzIGluXG4gKiBvcmRlciB0byBwcm92aWRlIGRlZmF1bHQgdmFsdWVzIGZvciBhbGwgdGhlIHR5cGVhaGVhZHMgdXNlZCBpbiB0aGUgYXBwbGljYXRpb24uXG4gKi9cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIE5nYlR5cGVhaGVhZENvbmZpZyB7XG4gIGNvbnRhaW5lcjtcbiAgZWRpdGFibGUgPSB0cnVlO1xuICBmb2N1c0ZpcnN0ID0gdHJ1ZTtcbiAgc2hvd0hpbnQgPSBmYWxzZTtcbiAgcGxhY2VtZW50OiBQbGFjZW1lbnRBcnJheSA9IFsnYm90dG9tLWxlZnQnLCAnYm90dG9tLXJpZ2h0JywgJ3RvcC1sZWZ0JywgJ3RvcC1yaWdodCddO1xufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/typeahead/typeahead-window.js b/dist/sunbird-ui-components/esm5/typeahead/typeahead-window.js new file mode 100644 index 0000000..903ff06 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/typeahead/typeahead-window.js @@ -0,0 +1,202 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Component, Input, Output, EventEmitter, TemplateRef } from '@angular/core'; +import { toString } from '../util/util'; +/** + * The context for the typeahead result template in case you want to override the default one. + * @record + */ +export function ResultTemplateContext() { } +if (false) { + /** + * Your typeahead result item. + * @type {?} + */ + ResultTemplateContext.prototype.result; + /** + * Search term from the `` used to get current result. + * @type {?} + */ + ResultTemplateContext.prototype.term; +} +var NgbTypeaheadWindow = /** @class */ (function () { + function NgbTypeaheadWindow() { + this.activeIdx = 0; + /** + * Flag indicating if the first row should be active initially + */ + this.focusFirst = true; + /** + * A function used to format a given result before display. This function should return a formatted string without any + * HTML markup + */ + this.formatter = toString; + /** + * Event raised when user selects a particular result row + */ + this.selectEvent = new EventEmitter(); + this.activeChangeEvent = new EventEmitter(); + } + /** + * @return {?} + */ + NgbTypeaheadWindow.prototype.hasActive = /** + * @return {?} + */ + function () { return this.activeIdx > -1 && this.activeIdx < this.results.length; }; + /** + * @return {?} + */ + NgbTypeaheadWindow.prototype.getActive = /** + * @return {?} + */ + function () { return this.results[this.activeIdx]; }; + /** + * @param {?} activeIdx + * @return {?} + */ + NgbTypeaheadWindow.prototype.markActive = /** + * @param {?} activeIdx + * @return {?} + */ + function (activeIdx) { + this.activeIdx = activeIdx; + this._activeChanged(); + }; + /** + * @return {?} + */ + NgbTypeaheadWindow.prototype.next = /** + * @return {?} + */ + function () { + if (this.activeIdx === this.results.length - 1) { + this.activeIdx = this.focusFirst ? (this.activeIdx + 1) % this.results.length : -1; + } + else { + this.activeIdx++; + } + this._activeChanged(); + }; + /** + * @return {?} + */ + NgbTypeaheadWindow.prototype.prev = /** + * @return {?} + */ + function () { + if (this.activeIdx < 0) { + this.activeIdx = this.results.length - 1; + } + else if (this.activeIdx === 0) { + this.activeIdx = this.focusFirst ? this.results.length - 1 : -1; + } + else { + this.activeIdx--; + } + this._activeChanged(); + }; + /** + * @return {?} + */ + NgbTypeaheadWindow.prototype.resetActive = /** + * @return {?} + */ + function () { + this.activeIdx = this.focusFirst ? 0 : -1; + this._activeChanged(); + }; + /** + * @param {?} item + * @return {?} + */ + NgbTypeaheadWindow.prototype.select = /** + * @param {?} item + * @return {?} + */ + function (item) { this.selectEvent.emit(item); }; + /** + * @return {?} + */ + NgbTypeaheadWindow.prototype.ngOnInit = /** + * @return {?} + */ + function () { this.resetActive(); }; + /** + * @private + * @return {?} + */ + NgbTypeaheadWindow.prototype._activeChanged = /** + * @private + * @return {?} + */ + function () { + this.activeChangeEvent.emit(this.activeIdx >= 0 ? this.id + '-' + this.activeIdx : undefined); + }; + NgbTypeaheadWindow.decorators = [ + { type: Component, args: [{ + selector: 'ngb-typeahead-window', + exportAs: 'ngbTypeaheadWindow', + host: { '(mousedown)': '$event.preventDefault()', 'class': 'dropdown-menu show', 'role': 'listbox', '[id]': 'id' }, + template: "\n \n \n \n \n \n \n " + }] } + ]; + NgbTypeaheadWindow.propDecorators = { + id: [{ type: Input }], + focusFirst: [{ type: Input }], + results: [{ type: Input }], + term: [{ type: Input }], + formatter: [{ type: Input }], + resultTemplate: [{ type: Input }], + selectEvent: [{ type: Output, args: ['select',] }], + activeChangeEvent: [{ type: Output, args: ['activeChange',] }] + }; + return NgbTypeaheadWindow; +}()); +export { NgbTypeaheadWindow }; +if (false) { + /** @type {?} */ + NgbTypeaheadWindow.prototype.activeIdx; + /** + * The id for the typeahead window. The id should be unique and the same + * as the associated typeahead's id. + * @type {?} + */ + NgbTypeaheadWindow.prototype.id; + /** + * Flag indicating if the first row should be active initially + * @type {?} + */ + NgbTypeaheadWindow.prototype.focusFirst; + /** + * Typeahead match results to be displayed + * @type {?} + */ + NgbTypeaheadWindow.prototype.results; + /** + * Search term used to get current results + * @type {?} + */ + NgbTypeaheadWindow.prototype.term; + /** + * A function used to format a given result before display. This function should return a formatted string without any + * HTML markup + * @type {?} + */ + NgbTypeaheadWindow.prototype.formatter; + /** + * A template to override a matching result default display + * @type {?} + */ + NgbTypeaheadWindow.prototype.resultTemplate; + /** + * Event raised when user selects a particular result row + * @type {?} + */ + NgbTypeaheadWindow.prototype.selectEvent; + /** @type {?} */ + NgbTypeaheadWindow.prototype.activeChangeEvent; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWFoZWFkLXdpbmRvdy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbInR5cGVhaGVhZC90eXBlYWhlYWQtd2luZG93LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBUyxNQUFNLGVBQWUsQ0FBQztBQUUxRixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sY0FBYyxDQUFDOzs7OztBQUt0QywyQ0FVQzs7Ozs7O0lBTkMsdUNBQVk7Ozs7O0lBS1oscUNBQWE7O0FBR2Y7SUFBQTtRQXFCRSxjQUFTLEdBQUcsQ0FBQyxDQUFDOzs7O1FBV0wsZUFBVSxHQUFHLElBQUksQ0FBQzs7Ozs7UUFnQmxCLGNBQVMsR0FBRyxRQUFRLENBQUM7Ozs7UUFVWixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFM0Isc0JBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQTJDakUsQ0FBQzs7OztJQXpDQyxzQ0FBUzs7O0lBQVQsY0FBYyxPQUFPLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Ozs7SUFFbkYsc0NBQVM7OztJQUFULGNBQWMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7Ozs7O0lBRXBELHVDQUFVOzs7O0lBQVYsVUFBVyxTQUFpQjtRQUMxQixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEIsQ0FBQzs7OztJQUVELGlDQUFJOzs7SUFBSjtRQUNFLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDOUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3BGO2FBQU07WUFDTCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDbEI7UUFDRCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEIsQ0FBQzs7OztJQUVELGlDQUFJOzs7SUFBSjtRQUNFLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLEVBQUU7WUFDdEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7U0FDMUM7YUFBTSxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssQ0FBQyxFQUFFO1lBQy9CLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNqRTthQUFNO1lBQ0wsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ2xCO1FBQ0QsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7Ozs7SUFFRCx3Q0FBVzs7O0lBQVg7UUFDRSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7Ozs7O0lBRUQsbUNBQU07Ozs7SUFBTixVQUFPLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Ozs7SUFFN0MscUNBQVE7OztJQUFSLGNBQWEsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQzs7Ozs7SUFFMUIsMkNBQWM7Ozs7SUFBdEI7UUFDRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNoRyxDQUFDOztnQkF0R0YsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxzQkFBc0I7b0JBQ2hDLFFBQVEsRUFBRSxvQkFBb0I7b0JBQzlCLElBQUksRUFBRSxFQUFDLGFBQWEsRUFBRSx5QkFBeUIsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFDO29CQUNoSCxRQUFRLEVBQUUsZ3RCQWNUO2lCQUNGOzs7cUJBUUUsS0FBSzs2QkFLTCxLQUFLOzBCQUtMLEtBQUs7dUJBS0wsS0FBSzs0QkFNTCxLQUFLO2lDQUtMLEtBQUs7OEJBS0wsTUFBTSxTQUFDLFFBQVE7b0NBRWYsTUFBTSxTQUFDLGNBQWM7O0lBMkN4Qix5QkFBQztDQUFBLEFBdkdELElBdUdDO1NBbkZZLGtCQUFrQjs7O0lBQzdCLHVDQUFjOzs7Ozs7SUFNZCxnQ0FBb0I7Ozs7O0lBS3BCLHdDQUEyQjs7Ozs7SUFLM0IscUNBQWlCOzs7OztJQUtqQixrQ0FBc0I7Ozs7OztJQU10Qix1Q0FBOEI7Ozs7O0lBSzlCLDRDQUE0RDs7Ozs7SUFLNUQseUNBQW1EOztJQUVuRCwrQ0FBK0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBUZW1wbGF0ZVJlZiwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHt0b1N0cmluZ30gZnJvbSAnLi4vdXRpbC91dGlsJztcblxuLyoqXG4gKiBUaGUgY29udGV4dCBmb3IgdGhlIHR5cGVhaGVhZCByZXN1bHQgdGVtcGxhdGUgaW4gY2FzZSB5b3Ugd2FudCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBvbmUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdWx0VGVtcGxhdGVDb250ZXh0IHtcbiAgLyoqXG4gICAqIFlvdXIgdHlwZWFoZWFkIHJlc3VsdCBpdGVtLlxuICAgKi9cbiAgcmVzdWx0OiBhbnk7XG5cbiAgLyoqXG4gICAqIFNlYXJjaCB0ZXJtIGZyb20gdGhlIGA8aW5wdXQ+YCB1c2VkIHRvIGdldCBjdXJyZW50IHJlc3VsdC5cbiAgICovXG4gIHRlcm06IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmdiLXR5cGVhaGVhZC13aW5kb3cnLFxuICBleHBvcnRBczogJ25nYlR5cGVhaGVhZFdpbmRvdycsXG4gIGhvc3Q6IHsnKG1vdXNlZG93biknOiAnJGV2ZW50LnByZXZlbnREZWZhdWx0KCknLCAnY2xhc3MnOiAnZHJvcGRvd24tbWVudSBzaG93JywgJ3JvbGUnOiAnbGlzdGJveCcsICdbaWRdJzogJ2lkJ30sXG4gIHRlbXBsYXRlOiBgXG4gICAgPG5nLXRlbXBsYXRlICNydCBsZXQtcmVzdWx0PVwicmVzdWx0XCIgbGV0LXRlcm09XCJ0ZXJtXCIgbGV0LWZvcm1hdHRlcj1cImZvcm1hdHRlclwiPlxuICAgICAgPG5nYi1oaWdobGlnaHQgW3Jlc3VsdF09XCJmb3JtYXR0ZXIocmVzdWx0KVwiIFt0ZXJtXT1cInRlcm1cIj48L25nYi1oaWdobGlnaHQ+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgbmdGb3IgW25nRm9yT2ZdPVwicmVzdWx0c1wiIGxldC1yZXN1bHQgbGV0LWlkeD1cImluZGV4XCI+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiByb2xlPVwib3B0aW9uXCJcbiAgICAgICAgW2lkXT1cImlkICsgJy0nICsgaWR4XCJcbiAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJpZHggPT09IGFjdGl2ZUlkeFwiXG4gICAgICAgIChtb3VzZWVudGVyKT1cIm1hcmtBY3RpdmUoaWR4KVwiXG4gICAgICAgIChjbGljayk9XCJzZWxlY3QocmVzdWx0KVwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJyZXN1bHRUZW1wbGF0ZSB8fCBydFwiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntyZXN1bHQ6IHJlc3VsdCwgdGVybTogdGVybSwgZm9ybWF0dGVyOiBmb3JtYXR0ZXJ9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIGBcbn0pXG5leHBvcnQgY2xhc3MgTmdiVHlwZWFoZWFkV2luZG93IGltcGxlbWVudHMgT25Jbml0IHtcbiAgYWN0aXZlSWR4ID0gMDtcblxuICAvKipcbiAgICogIFRoZSBpZCBmb3IgdGhlIHR5cGVhaGVhZCB3aW5kb3cuIFRoZSBpZCBzaG91bGQgYmUgdW5pcXVlIGFuZCB0aGUgc2FtZVxuICAgKiAgYXMgdGhlIGFzc29jaWF0ZWQgdHlwZWFoZWFkJ3MgaWQuXG4gICAqL1xuICBASW5wdXQoKSBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGbGFnIGluZGljYXRpbmcgaWYgdGhlIGZpcnN0IHJvdyBzaG91bGQgYmUgYWN0aXZlIGluaXRpYWxseVxuICAgKi9cbiAgQElucHV0KCkgZm9jdXNGaXJzdCA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFR5cGVhaGVhZCBtYXRjaCByZXN1bHRzIHRvIGJlIGRpc3BsYXllZFxuICAgKi9cbiAgQElucHV0KCkgcmVzdWx0cztcblxuICAvKipcbiAgICogU2VhcmNoIHRlcm0gdXNlZCB0byBnZXQgY3VycmVudCByZXN1bHRzXG4gICAqL1xuICBASW5wdXQoKSB0ZXJtOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdXNlZCB0byBmb3JtYXQgYSBnaXZlbiByZXN1bHQgYmVmb3JlIGRpc3BsYXkuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBhIGZvcm1hdHRlZCBzdHJpbmcgd2l0aG91dCBhbnlcbiAgICogSFRNTCBtYXJrdXBcbiAgICovXG4gIEBJbnB1dCgpIGZvcm1hdHRlciA9IHRvU3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHRlbXBsYXRlIHRvIG92ZXJyaWRlIGEgbWF0Y2hpbmcgcmVzdWx0IGRlZmF1bHQgZGlzcGxheVxuICAgKi9cbiAgQElucHV0KCkgcmVzdWx0VGVtcGxhdGU6IFRlbXBsYXRlUmVmPFJlc3VsdFRlbXBsYXRlQ29udGV4dD47XG5cbiAgLyoqXG4gICAqIEV2ZW50IHJhaXNlZCB3aGVuIHVzZXIgc2VsZWN0cyBhIHBhcnRpY3VsYXIgcmVzdWx0IHJvd1xuICAgKi9cbiAgQE91dHB1dCgnc2VsZWN0Jykgc2VsZWN0RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgnYWN0aXZlQ2hhbmdlJykgYWN0aXZlQ2hhbmdlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgaGFzQWN0aXZlKCkgeyByZXR1cm4gdGhpcy5hY3RpdmVJZHggPiAtMSAmJiB0aGlzLmFjdGl2ZUlkeCA8IHRoaXMucmVzdWx0cy5sZW5ndGg7IH1cblxuICBnZXRBY3RpdmUoKSB7IHJldHVybiB0aGlzLnJlc3VsdHNbdGhpcy5hY3RpdmVJZHhdOyB9XG5cbiAgbWFya0FjdGl2ZShhY3RpdmVJZHg6IG51bWJlcikge1xuICAgIHRoaXMuYWN0aXZlSWR4ID0gYWN0aXZlSWR4O1xuICAgIHRoaXMuX2FjdGl2ZUNoYW5nZWQoKTtcbiAgfVxuXG4gIG5leHQoKSB7XG4gICAgaWYgKHRoaXMuYWN0aXZlSWR4ID09PSB0aGlzLnJlc3VsdHMubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5hY3RpdmVJZHggPSB0aGlzLmZvY3VzRmlyc3QgPyAodGhpcy5hY3RpdmVJZHggKyAxKSAlIHRoaXMucmVzdWx0cy5sZW5ndGggOiAtMTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hY3RpdmVJZHgrKztcbiAgICB9XG4gICAgdGhpcy5fYWN0aXZlQ2hhbmdlZCgpO1xuICB9XG5cbiAgcHJldigpIHtcbiAgICBpZiAodGhpcy5hY3RpdmVJZHggPCAwKSB7XG4gICAgICB0aGlzLmFjdGl2ZUlkeCA9IHRoaXMucmVzdWx0cy5sZW5ndGggLSAxO1xuICAgIH0gZWxzZSBpZiAodGhpcy5hY3RpdmVJZHggPT09IDApIHtcbiAgICAgIHRoaXMuYWN0aXZlSWR4ID0gdGhpcy5mb2N1c0ZpcnN0ID8gdGhpcy5yZXN1bHRzLmxlbmd0aCAtIDEgOiAtMTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hY3RpdmVJZHgtLTtcbiAgICB9XG4gICAgdGhpcy5fYWN0aXZlQ2hhbmdlZCgpO1xuICB9XG5cbiAgcmVzZXRBY3RpdmUoKSB7XG4gICAgdGhpcy5hY3RpdmVJZHggPSB0aGlzLmZvY3VzRmlyc3QgPyAwIDogLTE7XG4gICAgdGhpcy5fYWN0aXZlQ2hhbmdlZCgpO1xuICB9XG5cbiAgc2VsZWN0KGl0ZW0pIHsgdGhpcy5zZWxlY3RFdmVudC5lbWl0KGl0ZW0pOyB9XG5cbiAgbmdPbkluaXQoKSB7IHRoaXMucmVzZXRBY3RpdmUoKTsgfVxuXG4gIHByaXZhdGUgX2FjdGl2ZUNoYW5nZWQoKSB7XG4gICAgdGhpcy5hY3RpdmVDaGFuZ2VFdmVudC5lbWl0KHRoaXMuYWN0aXZlSWR4ID49IDAgPyB0aGlzLmlkICsgJy0nICsgdGhpcy5hY3RpdmVJZHggOiB1bmRlZmluZWQpO1xuICB9XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/typeahead/typeahead.js b/dist/sunbird-ui-components/esm5/typeahead/typeahead.js new file mode 100644 index 0000000..ef8594e --- /dev/null +++ b/dist/sunbird-ui-components/esm5/typeahead/typeahead.js @@ -0,0 +1,730 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { ChangeDetectorRef, ComponentFactoryResolver, Directive, ElementRef, EventEmitter, forwardRef, Inject, Injector, Input, NgZone, Output, Renderer2, TemplateRef, ViewContainerRef, ApplicationRef } from '@angular/core'; +import { NG_VALUE_ACCESSOR } from '@angular/forms'; +import { DOCUMENT } from '@angular/common'; +import { BehaviorSubject, fromEvent, Subject } from 'rxjs'; +import { map, switchMap, tap } from 'rxjs/operators'; +import { Live } from '../util/accessibility/live'; +import { ngbAutoClose } from '../util/autoclose'; +import { Key } from '../util/key'; +import { PopupService } from '../util/popup'; +import { positionElements } from '../util/positioning'; +import { isDefined, toString } from '../util/util'; +import { NgbTypeaheadConfig } from './typeahead-config'; +import { NgbTypeaheadWindow } from './typeahead-window'; +/** @type {?} */ +var NGB_TYPEAHEAD_VALUE_ACCESSOR = { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef((/** + * @return {?} + */ + function () { return NgbTypeahead; })), + multi: true +}; +/** + * An event emitted right before an item is selected from the result list. + * @record + */ +export function NgbTypeaheadSelectItemEvent() { } +if (false) { + /** + * The item from the result list about to be selected. + * @type {?} + */ + NgbTypeaheadSelectItemEvent.prototype.item; + /** + * Calling this function will prevent item selection from happening. + * @type {?} + */ + NgbTypeaheadSelectItemEvent.prototype.preventDefault; +} +/** @type {?} */ +var nextWindowId = 0; +/** + * A directive providing a simple way of creating powerful typeaheads from any text input. + */ +var NgbTypeahead = /** @class */ (function () { + function NgbTypeahead(_elementRef, _viewContainerRef, _renderer, _injector, componentFactoryResolver, config, ngZone, _live, _document, _ngZone, _changeDetector, _applicationRef) { + var _this = this; + this._elementRef = _elementRef; + this._viewContainerRef = _viewContainerRef; + this._renderer = _renderer; + this._injector = _injector; + this._live = _live; + this._document = _document; + this._ngZone = _ngZone; + this._changeDetector = _changeDetector; + this._applicationRef = _applicationRef; + this._closed$ = new Subject(); + /** + * The value for the `autocomplete` attribute for the `` element. + * + * Defaults to `"off"` to disable the native browser autocomplete, but you can override it if necessary. + * + * \@since 2.1.0 + */ + this.autocomplete = 'off'; + /** + * The preferred placement of the typeahead. + * + * Possible values are `"top"`, `"top-left"`, `"top-right"`, `"bottom"`, `"bottom-left"`, + * `"bottom-right"`, `"left"`, `"left-top"`, `"left-bottom"`, `"right"`, `"right-top"`, + * `"right-bottom"` + * + * Accepts an array of strings or a string with space separated possible values. + * + * The default order of preference is `"bottom-left bottom-right top-left top-right"` + * + * Please see the [positioning overview](#/positioning) for more details. + */ + this.placement = 'bottom-left'; + /** + * An event emitted right before an item is selected from the result list. + * + * Event payload is of type [`NgbTypeaheadSelectItemEvent`](#/components/typeahead/api#NgbTypeaheadSelectItemEvent). + */ + this.selectItem = new EventEmitter(); + this.popupId = "ngb-typeahead-" + nextWindowId++; + this._onTouched = (/** + * @return {?} + */ + function () { }); + this._onChange = (/** + * @param {?} _ + * @return {?} + */ + function (_) { }); + this.container = config.container; + this.editable = config.editable; + this.focusFirst = config.focusFirst; + this.showHint = config.showHint; + this.placement = config.placement; + this._valueChanges = fromEvent(_elementRef.nativeElement, 'input') + .pipe(map((/** + * @param {?} $event + * @return {?} + */ + function ($event) { return ((/** @type {?} */ ($event.target))).value; }))); + this._resubscribeTypeahead = new BehaviorSubject(null); + this._popupService = new PopupService(NgbTypeaheadWindow, _injector, _viewContainerRef, _renderer, componentFactoryResolver, _applicationRef); + this._zoneSubscription = ngZone.onStable.subscribe((/** + * @return {?} + */ + function () { + if (_this.isPopupOpen()) { + positionElements(_this._elementRef.nativeElement, _this._windowRef.location.nativeElement, _this.placement, _this.container === 'body'); + } + })); + } + /** + * @return {?} + */ + NgbTypeahead.prototype.ngOnInit = /** + * @return {?} + */ + function () { + var _this = this; + /** @type {?} */ + var inputValues$ = this._valueChanges.pipe(tap((/** + * @param {?} value + * @return {?} + */ + function (value) { + _this._inputValueBackup = _this.showHint ? value : null; + if (_this.editable) { + _this._onChange(value); + } + }))); + /** @type {?} */ + var results$ = inputValues$.pipe(this.ngbTypeahead); + /** @type {?} */ + var processedResults$ = results$.pipe(tap((/** + * @return {?} + */ + function () { + if (!_this.editable) { + _this._onChange(undefined); + } + }))); + /** @type {?} */ + var userInput$ = this._resubscribeTypeahead.pipe(switchMap((/** + * @return {?} + */ + function () { return processedResults$; }))); + this._subscription = this._subscribeToUserInput(userInput$); + }; + /** + * @return {?} + */ + NgbTypeahead.prototype.ngOnDestroy = /** + * @return {?} + */ + function () { + this._closePopup(); + this._unsubscribeFromUserInput(); + this._zoneSubscription.unsubscribe(); + }; + /** + * @param {?} fn + * @return {?} + */ + NgbTypeahead.prototype.registerOnChange = /** + * @param {?} fn + * @return {?} + */ + function (fn) { this._onChange = fn; }; + /** + * @param {?} fn + * @return {?} + */ + NgbTypeahead.prototype.registerOnTouched = /** + * @param {?} fn + * @return {?} + */ + function (fn) { this._onTouched = fn; }; + /** + * @param {?} value + * @return {?} + */ + NgbTypeahead.prototype.writeValue = /** + * @param {?} value + * @return {?} + */ + function (value) { + this._writeInputValue(this._formatItemForInput(value)); + if (this.showHint) { + this._inputValueBackup = value; + } + }; + /** + * @param {?} isDisabled + * @return {?} + */ + NgbTypeahead.prototype.setDisabledState = /** + * @param {?} isDisabled + * @return {?} + */ + function (isDisabled) { + this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled); + }; + /** + * Dismisses typeahead popup window + */ + /** + * Dismisses typeahead popup window + * @return {?} + */ + NgbTypeahead.prototype.dismissPopup = /** + * Dismisses typeahead popup window + * @return {?} + */ + function () { + if (this.isPopupOpen()) { + this._resubscribeTypeahead.next(null); + this._closePopup(); + if (this.showHint && this._inputValueBackup !== null) { + this._writeInputValue(this._inputValueBackup); + } + this._changeDetector.markForCheck(); + } + }; + /** + * Returns true if the typeahead popup window is displayed + */ + /** + * Returns true if the typeahead popup window is displayed + * @return {?} + */ + NgbTypeahead.prototype.isPopupOpen = /** + * Returns true if the typeahead popup window is displayed + * @return {?} + */ + function () { return this._windowRef != null; }; + /** + * @return {?} + */ + NgbTypeahead.prototype.handleBlur = /** + * @return {?} + */ + function () { + this._resubscribeTypeahead.next(null); + this._onTouched(); + }; + /** + * @param {?} event + * @return {?} + */ + NgbTypeahead.prototype.handleKeyDown = /** + * @param {?} event + * @return {?} + */ + function (event) { + if (!this.isPopupOpen()) { + return; + } + // tslint:disable-next-line:deprecation + switch (event.which) { + case Key.ArrowDown: + event.preventDefault(); + this._windowRef.instance.next(); + this._showHint(); + break; + case Key.ArrowUp: + event.preventDefault(); + this._windowRef.instance.prev(); + this._showHint(); + break; + case Key.Enter: + case Key.Tab: + /** @type {?} */ + var result = this._windowRef.instance.getActive(); + if (isDefined(result)) { + event.preventDefault(); + event.stopPropagation(); + this._selectResult(result); + } + this._closePopup(); + break; + } + }; + /** + * @private + * @return {?} + */ + NgbTypeahead.prototype._openPopup = /** + * @private + * @return {?} + */ + function () { + var _this = this; + if (!this.isPopupOpen()) { + this._inputValueBackup = this._elementRef.nativeElement.value; + this._windowRef = this._popupService.open(); + this._windowRef.instance.id = this.popupId; + this._windowRef.instance.selectEvent.subscribe((/** + * @param {?} result + * @return {?} + */ + function (result) { return _this._selectResultClosePopup(result); })); + this._windowRef.instance.activeChangeEvent.subscribe((/** + * @param {?} activeId + * @return {?} + */ + function (activeId) { return _this.activeDescendant = activeId; })); + if (this.container === 'body') { + window.document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement); + } + this._changeDetector.markForCheck(); + ngbAutoClose(this._ngZone, this._document, 'outside', (/** + * @return {?} + */ + function () { return _this.dismissPopup(); }), this._closed$, [this._elementRef.nativeElement, this._windowRef.location.nativeElement]); + } + }; + /** + * @private + * @return {?} + */ + NgbTypeahead.prototype._closePopup = /** + * @private + * @return {?} + */ + function () { + this._closed$.next(); + this._popupService.close(); + this._windowRef = null; + this.activeDescendant = undefined; + }; + /** + * @private + * @param {?} result + * @return {?} + */ + NgbTypeahead.prototype._selectResult = /** + * @private + * @param {?} result + * @return {?} + */ + function (result) { + /** @type {?} */ + var defaultPrevented = false; + this.selectItem.emit({ item: result, preventDefault: (/** + * @return {?} + */ + function () { defaultPrevented = true; }) }); + this._resubscribeTypeahead.next(null); + if (!defaultPrevented) { + this.writeValue(result); + this._onChange(result); + } + }; + /** + * @private + * @param {?} result + * @return {?} + */ + NgbTypeahead.prototype._selectResultClosePopup = /** + * @private + * @param {?} result + * @return {?} + */ + function (result) { + this._selectResult(result); + this._closePopup(); + }; + /** + * @private + * @return {?} + */ + NgbTypeahead.prototype._showHint = /** + * @private + * @return {?} + */ + function () { + if (this.showHint && this._windowRef.instance.hasActive() && this._inputValueBackup != null) { + /** @type {?} */ + var userInputLowerCase = this._inputValueBackup.toLowerCase(); + /** @type {?} */ + var formattedVal = this._formatItemForInput(this._windowRef.instance.getActive()); + if (userInputLowerCase === formattedVal.substr(0, this._inputValueBackup.length).toLowerCase()) { + this._writeInputValue(this._inputValueBackup + formattedVal.substr(this._inputValueBackup.length)); + this._elementRef.nativeElement['setSelectionRange'].apply(this._elementRef.nativeElement, [this._inputValueBackup.length, formattedVal.length]); + } + else { + this._writeInputValue(formattedVal); + } + } + }; + /** + * @private + * @param {?} item + * @return {?} + */ + NgbTypeahead.prototype._formatItemForInput = /** + * @private + * @param {?} item + * @return {?} + */ + function (item) { + return item != null && this.inputFormatter ? this.inputFormatter(item) : toString(item); + }; + /** + * @private + * @param {?} value + * @return {?} + */ + NgbTypeahead.prototype._writeInputValue = /** + * @private + * @param {?} value + * @return {?} + */ + function (value) { + this._renderer.setProperty(this._elementRef.nativeElement, 'value', toString(value)); + }; + /** + * @private + * @param {?} userInput$ + * @return {?} + */ + NgbTypeahead.prototype._subscribeToUserInput = /** + * @private + * @param {?} userInput$ + * @return {?} + */ + function (userInput$) { + var _this = this; + return userInput$.subscribe((/** + * @param {?} results + * @return {?} + */ + function (results) { + if (!results || results.length === 0) { + _this._closePopup(); + } + else { + _this._openPopup(); + _this._windowRef.instance.focusFirst = _this.focusFirst; + _this._windowRef.instance.results = results; + _this._windowRef.instance.term = _this._elementRef.nativeElement.value; + if (_this.resultFormatter) { + _this._windowRef.instance.formatter = _this.resultFormatter; + } + if (_this.resultTemplate) { + _this._windowRef.instance.resultTemplate = _this.resultTemplate; + } + _this._windowRef.instance.resetActive(); + // The observable stream we are subscribing to might have async steps + // and if a component containing typeahead is using the OnPush strategy + // the change detection turn wouldn't be invoked automatically. + _this._windowRef.changeDetectorRef.detectChanges(); + _this._showHint(); + } + // live announcer + /** @type {?} */ + var count = results ? results.length : 0; + _this._live.say(count === 0 ? 'No results available' : count + " result" + (count === 1 ? '' : 's') + " available"); + })); + }; + /** + * @private + * @return {?} + */ + NgbTypeahead.prototype._unsubscribeFromUserInput = /** + * @private + * @return {?} + */ + function () { + if (this._subscription) { + this._subscription.unsubscribe(); + } + this._subscription = null; + }; + NgbTypeahead.decorators = [ + { type: Directive, args: [{ + selector: 'input[ngbTypeahead]', + exportAs: 'ngbTypeahead', + host: { + '(blur)': 'handleBlur()', + '[class.open]': 'isPopupOpen()', + '(keydown)': 'handleKeyDown($event)', + '[autocomplete]': 'autocomplete', + 'autocapitalize': 'off', + 'autocorrect': 'off', + 'role': 'combobox', + 'aria-multiline': 'false', + '[attr.aria-autocomplete]': 'showHint ? "both" : "list"', + '[attr.aria-activedescendant]': 'activeDescendant', + '[attr.aria-owns]': 'isPopupOpen() ? popupId : null', + '[attr.aria-expanded]': 'isPopupOpen()' + }, + providers: [NGB_TYPEAHEAD_VALUE_ACCESSOR] + },] } + ]; + /** @nocollapse */ + NgbTypeahead.ctorParameters = function () { return [ + { type: ElementRef }, + { type: ViewContainerRef }, + { type: Renderer2 }, + { type: Injector }, + { type: ComponentFactoryResolver }, + { type: NgbTypeaheadConfig }, + { type: NgZone }, + { type: Live }, + { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }, + { type: NgZone }, + { type: ChangeDetectorRef }, + { type: ApplicationRef } + ]; }; + NgbTypeahead.propDecorators = { + autocomplete: [{ type: Input }], + container: [{ type: Input }], + editable: [{ type: Input }], + focusFirst: [{ type: Input }], + inputFormatter: [{ type: Input }], + ngbTypeahead: [{ type: Input }], + resultFormatter: [{ type: Input }], + resultTemplate: [{ type: Input }], + showHint: [{ type: Input }], + placement: [{ type: Input }], + selectItem: [{ type: Output }] + }; + return NgbTypeahead; +}()); +export { NgbTypeahead }; +if (false) { + /** + * @type {?} + * @private + */ + NgbTypeahead.prototype._popupService; + /** + * @type {?} + * @private + */ + NgbTypeahead.prototype._subscription; + /** + * @type {?} + * @private + */ + NgbTypeahead.prototype._closed$; + /** + * @type {?} + * @private + */ + NgbTypeahead.prototype._inputValueBackup; + /** + * @type {?} + * @private + */ + NgbTypeahead.prototype._valueChanges; + /** + * @type {?} + * @private + */ + NgbTypeahead.prototype._resubscribeTypeahead; + /** + * @type {?} + * @private + */ + NgbTypeahead.prototype._windowRef; + /** + * @type {?} + * @private + */ + NgbTypeahead.prototype._zoneSubscription; + /** + * The value for the `autocomplete` attribute for the `` element. + * + * Defaults to `"off"` to disable the native browser autocomplete, but you can override it if necessary. + * + * \@since 2.1.0 + * @type {?} + */ + NgbTypeahead.prototype.autocomplete; + /** + * A selector specifying the element the typeahead popup will be appended to. + * + * Currently only supports `"body"`. + * @type {?} + */ + NgbTypeahead.prototype.container; + /** + * If `true`, model values will not be restricted only to items selected from the popup. + * @type {?} + */ + NgbTypeahead.prototype.editable; + /** + * If `true`, the first item in the result list will always stay focused while typing. + * @type {?} + */ + NgbTypeahead.prototype.focusFirst; + /** + * The function that converts an item from the result list to a `string` to display in the `` field. + * + * It is called when the user selects something in the popup or the model value changes, so the input needs to + * be updated. + * @type {?} + */ + NgbTypeahead.prototype.inputFormatter; + /** + * The function that converts a stream of text values from the `` element to the stream of the array of items + * to display in the typeahead popup. + * + * If the resulting observable emits a non-empty array - the popup will be shown. If it emits an empty array - the + * popup will be closed. + * + * See the [basic example](#/components/typeahead/examples#basic) for more details. + * + * Note that the `this` argument is `undefined` so you need to explicitly bind it to a desired "this" target. + * @type {?} + */ + NgbTypeahead.prototype.ngbTypeahead; + /** + * The function that converts an item from the result list to a `string` to display in the popup. + * + * Must be provided, if your `ngbTypeahead` returns something other than `Observable`. + * + * Alternatively for more complex markup in the popup you should use `resultTemplate`. + * @type {?} + */ + NgbTypeahead.prototype.resultFormatter; + /** + * The template to override the way resulting items are displayed in the popup. + * + * See the [ResultTemplateContext](#/components/typeahead/api#ResultTemplateContext) for the template context. + * + * Also see the [template for results demo](#/components/typeahead/examples#template) for more details. + * @type {?} + */ + NgbTypeahead.prototype.resultTemplate; + /** + * If `true`, will show the hint in the `` when an item in the result list matches. + * @type {?} + */ + NgbTypeahead.prototype.showHint; + /** + * The preferred placement of the typeahead. + * + * Possible values are `"top"`, `"top-left"`, `"top-right"`, `"bottom"`, `"bottom-left"`, + * `"bottom-right"`, `"left"`, `"left-top"`, `"left-bottom"`, `"right"`, `"right-top"`, + * `"right-bottom"` + * + * Accepts an array of strings or a string with space separated possible values. + * + * The default order of preference is `"bottom-left bottom-right top-left top-right"` + * + * Please see the [positioning overview](#/positioning) for more details. + * @type {?} + */ + NgbTypeahead.prototype.placement; + /** + * An event emitted right before an item is selected from the result list. + * + * Event payload is of type [`NgbTypeaheadSelectItemEvent`](#/components/typeahead/api#NgbTypeaheadSelectItemEvent). + * @type {?} + */ + NgbTypeahead.prototype.selectItem; + /** @type {?} */ + NgbTypeahead.prototype.activeDescendant; + /** @type {?} */ + NgbTypeahead.prototype.popupId; + /** + * @type {?} + * @private + */ + NgbTypeahead.prototype._onTouched; + /** + * @type {?} + * @private + */ + NgbTypeahead.prototype._onChange; + /** + * @type {?} + * @private + */ + NgbTypeahead.prototype._elementRef; + /** + * @type {?} + * @private + */ + NgbTypeahead.prototype._viewContainerRef; + /** + * @type {?} + * @private + */ + NgbTypeahead.prototype._renderer; + /** + * @type {?} + * @private + */ + NgbTypeahead.prototype._injector; + /** + * @type {?} + * @private + */ + NgbTypeahead.prototype._live; + /** + * @type {?} + * @private + */ + NgbTypeahead.prototype._document; + /** + * @type {?} + * @private + */ + NgbTypeahead.prototype._ngZone; + /** + * @type {?} + * @private + */ + NgbTypeahead.prototype._changeDetector; + /** + * @type {?} + * @private + */ + NgbTypeahead.prototype._applicationRef; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWFoZWFkLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsidHlwZWFoZWFkL3R5cGVhaGVhZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNMLGlCQUFpQixFQUNqQix3QkFBd0IsRUFFeEIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUNMLE1BQU0sRUFHTixNQUFNLEVBQ04sU0FBUyxFQUNULFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsY0FBYyxFQUNmLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBdUIsaUJBQWlCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFDLGVBQWUsRUFBRSxTQUFTLEVBQWMsT0FBTyxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBQ25GLE9BQU8sRUFBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRW5ELE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDL0MsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNoQyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBaUIsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRSxPQUFPLEVBQUMsU0FBUyxFQUFFLFFBQVEsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUVqRCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RCxPQUFPLEVBQUMsa0JBQWtCLEVBQXdCLE1BQU0s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TCxLQUFLOzZCQU9MLE1BQU07O0lBdU9ULG1CQUFDO0NBQUEsQUEvVkQsSUErVkM7U0E1VVksWUFBWTs7Ozs7O0lBRXZCLHFDQUF3RDs7Ozs7SUFDeEQscUNBQW9DOzs7OztJQUNwQyxnQ0FBaUM7Ozs7O0lBQ2pDLHlDQUFrQzs7Ozs7SUFDbEMscUNBQTBDOzs7OztJQUMxQyw2Q0FBb0Q7Ozs7O0lBQ3BELGtDQUFxRDs7Ozs7SUFDckQseUNBQStCOzs7Ozs7Ozs7SUFTL0Isb0NBQThCOzs7Ozs7O0lBTzlCLGlDQUEyQjs7Ozs7SUFLM0IsZ0NBQTJCOzs7OztJQUszQixrQ0FBNkI7Ozs7Ozs7O0lBUTdCLHNDQUErQzs7Ozs7Ozs7Ozs7OztJQWEvQyxvQ0FBdUU7Ozs7Ozs7OztJQVN2RSx1Q0FBZ0Q7Ozs7Ozs7OztJQVNoRCxzQ0FBNEQ7Ozs7O0lBSzVELGdDQUEyQjs7Ozs7Ozs7Ozs7Ozs7O0lBZTNCLGlDQUFtRDs7Ozs7OztJQU9uRCxrQ0FBdUU7O0lBRXZFLHdDQUF5Qjs7SUFDekIsK0JBQTRDOzs7OztJQUU1QyxrQ0FBOEI7Ozs7O0lBQzlCLGlDQUFtQzs7Ozs7SUFHL0IsbUNBQWlEOzs7OztJQUFFLHlDQUEyQzs7Ozs7SUFDOUYsaUNBQTRCOzs7OztJQUFFLGlDQUEyQjs7Ozs7SUFDYiw2QkFBbUI7Ozs7O0lBQUUsaUNBQXdDOzs7OztJQUN6RywrQkFBdUI7Ozs7O0lBQUUsdUNBQTBDOzs7OztJQUFFLHVDQUF1QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gIENvbXBvbmVudFJlZixcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEluamVjdCxcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFJlbmRlcmVyMixcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIEFwcGxpY2F0aW9uUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1J9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7RE9DVU1FTlR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgZnJvbUV2ZW50LCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXAsIHN3aXRjaE1hcCwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7TGl2ZX0gZnJvbSAnLi4vdXRpbC9hY2Nlc3NpYmlsaXR5L2xpdmUnO1xuaW1wb3J0IHtuZ2JBdXRvQ2xvc2V9IGZyb20gJy4uL3V0aWwvYXV0b2Nsb3NlJztcbmltcG9ydCB7S2V5fSBmcm9tICcuLi91dGlsL2tleSc7XG5pbXBvcnQge1BvcHVwU2VydmljZX0gZnJvbSAnLi4vdXRpbC9wb3B1cCc7XG5pbXBvcnQge1BsYWNlbWVudEFycmF5LCBwb3NpdGlvbkVsZW1lbnRzfSBmcm9tICcuLi91dGlsL3Bvc2l0aW9uaW5nJztcbmltcG9ydCB7aXNEZWZpbmVkLCB0b1N0cmluZ30gZnJvbSAnLi4vdXRpbC91dGlsJztcblxuaW1wb3J0IHtOZ2JUeXBlYWhlYWRDb25maWd9IGZyb20gJy4vdHlwZWFoZWFkLWNvbmZpZyc7XG5pbXBvcnQge05nYlR5cGVhaGVhZFdpbmRvdywgUmVzdWx0VGVtcGxhdGVDb250ZXh0fSBmcm9tICcuL3R5cGVhaGVhZC13aW5kb3cnO1xuXG5cbmNvbnN0IE5HQl9UWVBFQUhFQURfVkFMVUVfQUNDRVNTT1IgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBOZ2JUeXBlYWhlYWQpLFxuICBtdWx0aTogdHJ1ZVxufTtcblxuLyoqXG4gKiBBbiBldmVudCBlbWl0dGVkIHJpZ2h0IGJlZm9yZSBhbiBpdGVtIGlzIHNlbGVjdGVkIGZyb20gdGhlIHJlc3VsdCBsaXN0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5nYlR5cGVhaGVhZFNlbGVjdEl0ZW1FdmVudCB7XG4gIC8qKlxuICAgKiBUaGUgaXRlbSBmcm9tIHRoZSByZXN1bHQgbGlzdCBhYm91dCB0byBiZSBzZWxlY3RlZC5cbiAgICovXG4gIGl0ZW06IGFueTtcblxuICAvKipcbiAgICogQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgcHJldmVudCBpdGVtIHNlbGVjdGlvbiBmcm9tIGhhcHBlbmluZy5cbiAgICovXG4gIHByZXZlbnREZWZhdWx0OiAoKSA9PiB2b2lkO1xufVxuXG5sZXQgbmV4dFdpbmRvd0lkID0gMDtcblxuLyoqXG4gKiBBIGRpcmVjdGl2ZSBwcm92aWRpbmcgYSBzaW1wbGUgd2F5IG9mIGNyZWF0aW5nIHBvd2VyZnVsIHR5cGVhaGVhZHMgZnJvbSBhbnkgdGV4dCBpbnB1dC5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnaW5wdXRbbmdiVHlwZWFoZWFkXScsXG4gIGV4cG9ydEFzOiAnbmdiVHlwZWFoZWFkJyxcbiAgaG9zdDoge1xuICAgICcoYmx1ciknOiAnaGFuZGxlQmx1cigpJyxcbiAgICAnW2NsYXNzLm9wZW5dJzogJ2lzUG9wdXBPcGVuKCknLFxuICAgICcoa2V5ZG93biknOiAnaGFuZGxlS2V5RG93bigkZXZlbnQpJyxcbiAgICAnW2F1dG9jb21wbGV0ZV0nOiAnYXV0b2NvbXBsZXRlJyxcbiAgICAnYXV0b2NhcGl0YWxpemUnOiAnb2ZmJyxcbiAgICAnYXV0b2NvcnJlY3QnOiAnb2ZmJyxcbiAgICAncm9sZSc6ICdjb21ib2JveCcsXG4gICAgJ2FyaWEtbXVsdGlsaW5lJzogJ2ZhbHNlJyxcbiAgICAnW2F0dHIuYXJpYS1hdXRvY29tcGxldGVdJzogJ3Nob3dIaW50ID8gXCJib3RoXCIgOiBcImxpc3RcIicsXG4gICAgJ1thdHRyLmFyaWEtYWN0aXZlZGVzY2VuZGFudF0nOiAnYWN0aXZlRGVzY2VuZGFudCcsXG4gICAgJ1thdHRyLmFyaWEtb3duc10nOiAnaXNQb3B1cE9wZW4oKSA/IHBvcHVwSWQgOiBudWxsJyxcbiAgICAnW2F0dHIuYXJpYS1leHBhbmRlZF0nOiAnaXNQb3B1cE9wZW4oKSdcbiAgfSxcbiAgcHJvdmlkZXJzOiBbTkdCX1RZUEVBSEVBRF9WQUxVRV9BQ0NFU1NPUl1cbn0pXG5leHBvcnQgY2xhc3MgTmdiVHlwZWFoZWFkIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gICAgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIF9wb3B1cFNlcnZpY2U6IFBvcHVwU2VydmljZTxOZ2JUeXBlYWhlYWRXaW5kb3c+O1xuICBwcml2YXRlIF9zdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBfY2xvc2VkJCA9IG5ldyBTdWJqZWN0KCk7XG4gIHByaXZhdGUgX2lucHV0VmFsdWVCYWNrdXA6IHN0cmluZztcbiAgcHJpdmF0ZSBfdmFsdWVDaGFuZ2VzOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIHByaXZhdGUgX3Jlc3Vic2NyaWJlVHlwZWFoZWFkOiBCZWhhdmlvclN1YmplY3Q8YW55PjtcbiAgcHJpdmF0ZSBfd2luZG93UmVmOiBDb21wb25lbnRSZWY8TmdiVHlwZWFoZWFkV2luZG93PjtcbiAgcHJpdmF0ZSBfem9uZVN1YnNjcmlwdGlvbjogYW55O1xuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgZm9yIHRoZSBgYXV0b2NvbXBsZXRlYCBhdHRyaWJ1dGUgZm9yIHRoZSBgPGlucHV0PmAgZWxlbWVudC5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gYFwib2ZmXCJgIHRvIGRpc2FibGUgdGhlIG5hdGl2ZSBicm93c2VyIGF1dG9jb21wbGV0ZSwgYnV0IHlvdSBjYW4gb3ZlcnJpZGUgaXQgaWYgbmVjZXNzYXJ5LlxuICAgKlxuICAgKiBAc2luY2UgMi4xLjBcbiAgICovXG4gIEBJbnB1dCgpIGF1dG9jb21wbGV0ZSA9ICdvZmYnO1xuXG4gIC8qKlxuICAgKiBBIHNlbGVjdG9yIHNwZWNpZnlpbmcgdGhlIGVsZW1lbnQgdGhlIHR5cGVhaGVhZCBwb3B1cCB3aWxsIGJlIGFwcGVuZGVkIHRvLlxuICAgKlxuICAgKiBDdXJyZW50bHkgb25seSBzdXBwb3J0cyBgXCJib2R5XCJgLlxuICAgKi9cbiAgQElucHV0KCkgY29udGFpbmVyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgbW9kZWwgdmFsdWVzIHdpbGwgbm90IGJlIHJlc3RyaWN0ZWQgb25seSB0byBpdGVtcyBzZWxlY3RlZCBmcm9tIHRoZSBwb3B1cC5cbiAgICovXG4gIEBJbnB1dCgpIGVkaXRhYmxlOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBmaXJzdCBpdGVtIGluIHRoZSByZXN1bHQgbGlzdCB3aWxsIGFsd2F5cyBzdGF5IGZvY3VzZWQgd2hpbGUgdHlwaW5nLlxuICAgKi9cbiAgQElucHV0KCkgZm9jdXNGaXJzdDogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGZ1bmN0aW9uIHRoYXQgY29udmVydHMgYW4gaXRlbSBmcm9tIHRoZSByZXN1bHQgbGlzdCB0byBhIGBzdHJpbmdgIHRvIGRpc3BsYXkgaW4gdGhlIGA8aW5wdXQ+YCBmaWVsZC5cbiAgICpcbiAgICogSXQgaXMgY2FsbGVkIHdoZW4gdGhlIHVzZXIgc2VsZWN0cyBzb21ldGhpbmcgaW4gdGhlIHBvcHVwIG9yIHRoZSBtb2RlbCB2YWx1ZSBjaGFuZ2VzLCBzbyB0aGUgaW5wdXQgbmVlZHMgdG9cbiAgICogYmUgdXBkYXRlZC5cbiAgICovXG4gIEBJbnB1dCgpIGlucHV0Rm9ybWF0dGVyOiAoaXRlbTogYW55KSA9PiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBmdW5jdGlvbiB0aGF0IGNvbnZlcnRzIGEgc3RyZWFtIG9mIHRleHQgdmFsdWVzIGZyb20gdGhlIGA8aW5wdXQ+YCBlbGVtZW50IHRvIHRoZSBzdHJlYW0gb2YgdGhlIGFycmF5IG9mIGl0ZW1zXG4gICAqIHRvIGRpc3BsYXkgaW4gdGhlIHR5cGVhaGVhZCBwb3B1cC5cbiAgICpcbiAgICogSWYgdGhlIHJlc3VsdGluZyBvYnNlcnZhYmxlIGVtaXRzIGEgbm9uLWVtcHR5IGFycmF5IC0gdGhlIHBvcHVwIHdpbGwgYmUgc2hvd24uIElmIGl0IGVtaXRzIGFuIGVtcHR5IGFycmF5IC0gdGhlXG4gICAqIHBvcHVwIHdpbGwgYmUgY2xvc2VkLlxuICAgKlxuICAgKiBTZWUgdGhlIFtiYXNpYyBleGFtcGxlXSgjL2NvbXBvbmVudHMvdHlwZWFoZWFkL2V4YW1wbGVzI2Jhc2ljKSBmb3IgbW9yZSBkZXRhaWxzLlxuICAgKlxuICAgKiBOb3RlIHRoYXQgdGhlIGB0aGlzYCBhcmd1bWVudCBpcyBgdW5kZWZpbmVkYCBzbyB5b3UgbmVlZCB0byBleHBsaWNpdGx5IGJpbmQgaXQgdG8gYSBkZXNpcmVkIFwidGhpc1wiIHRhcmdldC5cbiAgICovXG4gIEBJbnB1dCgpIG5nYlR5cGVhaGVhZDogKHRleHQ6IE9ic2VydmFibGU8c3RyaW5nPikgPT4gT2JzZXJ2YWJsZTxhbnlbXT47XG5cbiAgLyoqXG4gICAqIFRoZSBmdW5jdGlvbiB0aGF0IGNvbnZlcnRzIGFuIGl0ZW0gZnJvbSB0aGUgcmVzdWx0IGxpc3QgdG8gYSBgc3RyaW5nYCB0byBkaXNwbGF5IGluIHRoZSBwb3B1cC5cbiAgICpcbiAgICogTXVzdCBiZSBwcm92aWRlZCwgaWYgeW91ciBgbmdiVHlwZWFoZWFkYCByZXR1cm5zIHNvbWV0aGluZyBvdGhlciB0aGFuIGBPYnNlcnZhYmxlPHN0cmluZ1tdPmAuXG4gICAqXG4gICAqIEFsdGVybmF0aXZlbHkgZm9yIG1vcmUgY29tcGxleCBtYXJrdXAgaW4gdGhlIHBvcHVwIHlvdSBzaG91bGQgdXNlIGByZXN1bHRUZW1wbGF0ZWAuXG4gICAqL1xuICBASW5wdXQoKSByZXN1bHRGb3JtYXR0ZXI6IChpdGVtOiBhbnkpID0+IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHRvIG92ZXJyaWRlIHRoZSB3YXkgcmVzdWx0aW5nIGl0ZW1zIGFyZSBkaXNwbGF5ZWQgaW4gdGhlIHBvcHVwLlxuICAgKlxuICAgKiBTZWUgdGhlIFtSZXN1bHRUZW1wbGF0ZUNvbnRleHRdKCMvY29tcG9uZW50cy90eXBlYWhlYWQvYXBpI1Jlc3VsdFRlbXBsYXRlQ29udGV4dCkgZm9yIHRoZSB0ZW1wbGF0ZSBjb250ZXh0LlxuICAgKlxuICAgKiBBbHNvIHNlZSB0aGUgW3RlbXBsYXRlIGZvciByZXN1bHRzIGRlbW9dKCMvY29tcG9uZW50cy90eXBlYWhlYWQvZXhhbXBsZXMjdGVtcGxhdGUpIGZvciBtb3JlIGRldGFpbHMuXG4gICAqL1xuICBASW5wdXQoKSByZXN1bHRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8UmVzdWx0VGVtcGxhdGVDb250ZXh0PjtcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB3aWxsIHNob3cgdGhlIGhpbnQgaW4gdGhlIGA8aW5wdXQ+YCB3aGVuIGFuIGl0ZW0gaW4gdGhlIHJlc3VsdCBsaXN0IG1hdGNoZXMuXG4gICAqL1xuICBASW5wdXQoKSBzaG93SGludDogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHByZWZlcnJlZCBwbGFjZW1lbnQgb2YgdGhlIHR5cGVhaGVhZC5cbiAgICpcbiAgICogUG9zc2libGUgdmFsdWVzIGFyZSBgXCJ0b3BcImAsIGBcInRvcC1sZWZ0XCJgLCBgXCJ0b3AtcmlnaHRcImAsIGBcImJvdHRvbVwiYCwgYFwiYm90dG9tLWxlZnRcImAsXG4gICAqIGBcImJvdHRvbS1yaWdodFwiYCwgYFwibGVmdFwiYCwgYFwibGVmdC10b3BcImAsIGBcImxlZnQtYm90dG9tXCJgLCBgXCJyaWdodFwiYCwgYFwicmlnaHQtdG9wXCJgLFxuICAgKiBgXCJyaWdodC1ib3R0b21cImBcbiAgICpcbiAgICogQWNjZXB0cyBhbiBhcnJheSBvZiBzdHJpbmdzIG9yIGEgc3RyaW5nIHdpdGggc3BhY2Ugc2VwYXJhdGVkIHBvc3NpYmxlIHZhbHVlcy5cbiAgICpcbiAgICogVGhlIGRlZmF1bHQgb3JkZXIgb2YgcHJlZmVyZW5jZSBpcyBgXCJib3R0b20tbGVmdCBib3R0b20tcmlnaHQgdG9wLWxlZnQgdG9wLXJpZ2h0XCJgXG4gICAqXG4gICAqIFBsZWFzZSBzZWUgdGhlIFtwb3NpdGlvbmluZyBvdmVydmlld10oIy9wb3NpdGlvbmluZykgZm9yIG1vcmUgZGV0YWlscy5cbiAgICovXG4gIEBJbnB1dCgpIHBsYWNlbWVudDogUGxhY2VtZW50QXJyYXkgPSAnYm90dG9tLWxlZnQnO1xuXG4gIC8qKlxuICAgKiBBbiBldmVudCBlbWl0dGVkIHJpZ2h0IGJlZm9yZSBhbiBpdGVtIGlzIHNlbGVjdGVkIGZyb20gdGhlIHJlc3VsdCBsaXN0LlxuICAgKlxuICAgKiBFdmVudCBwYXlsb2FkIGlzIG9mIHR5cGUgW2BOZ2JUeXBlYWhlYWRTZWxlY3RJdGVtRXZlbnRgXSgjL2NvbXBvbmVudHMvdHlwZWFoZWFkL2FwaSNOZ2JUeXBlYWhlYWRTZWxlY3RJdGVtRXZlbnQpLlxuICAgKi9cbiAgQE91dHB1dCgpIHNlbGVjdEl0ZW0gPSBuZXcgRXZlbnRFbWl0dGVyPE5nYlR5cGVhaGVhZFNlbGVjdEl0ZW1FdmVudD4oKTtcblxuICBhY3RpdmVEZXNjZW5kYW50OiBzdHJpbmc7XG4gIHBvcHVwSWQgPSBgbmdiLXR5cGVhaGVhZC0ke25leHRXaW5kb3dJZCsrfWA7XG5cbiAgcHJpdmF0ZSBfb25Ub3VjaGVkID0gKCkgPT4ge307XG4gIHByaXZhdGUgX29uQ2hhbmdlID0gKF86IGFueSkgPT4ge307XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+LCBwcml2YXRlIF92aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgICAgcHJpdmF0ZSBfcmVuZGVyZXI6IFJlbmRlcmVyMiwgcHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yLCBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICAgIGNvbmZpZzogTmdiVHlwZWFoZWFkQ29uZmlnLCBuZ1pvbmU6IE5nWm9uZSwgcHJpdmF0ZSBfbGl2ZTogTGl2ZSwgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBfZG9jdW1lbnQ6IGFueSxcbiAgICAgIHByaXZhdGUgX25nWm9uZTogTmdab25lLCBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgX2FwcGxpY2F0aW9uUmVmOiBBcHBsaWNhdGlvblJlZikge1xuICAgIHRoaXMuY29udGFpbmVyID0gY29uZmlnLmNvbnRhaW5lcjtcbiAgICB0aGlzLmVkaXRhYmxlID0gY29uZmlnLmVkaXRhYmxlO1xuICAgIHRoaXMuZm9jdXNGaXJzdCA9IGNvbmZpZy5mb2N1c0ZpcnN0O1xuICAgIHRoaXMuc2hvd0hpbnQgPSBjb25maWcuc2hvd0hpbnQ7XG4gICAgdGhpcy5wbGFjZW1lbnQgPSBjb25maWcucGxhY2VtZW50O1xuXG4gICAgdGhpcy5fdmFsdWVDaGFuZ2VzID0gZnJvbUV2ZW50PEV2ZW50PihfZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnaW5wdXQnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucGlwZShtYXAoJGV2ZW50ID0+ICgkZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlKSk7XG5cbiAgICB0aGlzLl9yZXN1YnNjcmliZVR5cGVhaGVhZCA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XG5cbiAgICB0aGlzLl9wb3B1cFNlcnZpY2UgPSBuZXcgUG9wdXBTZXJ2aWNlPE5nYlR5cGVhaGVhZFdpbmRvdz4oXG4gICAgICAgIE5nYlR5cGVhaGVhZFdpbmRvdywgX2luamVjdG9yLCBfdmlld0NvbnRhaW5lclJlZiwgX3JlbmRlcmVyLCBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIF9hcHBsaWNhdGlvblJlZik7XG5cbiAgICB0aGlzLl96b25lU3Vic2NyaXB0aW9uID0gbmdab25lLm9uU3RhYmxlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1BvcHVwT3BlbigpKSB7XG4gICAgICAgIHBvc2l0aW9uRWxlbWVudHMoXG4gICAgICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHRoaXMuX3dpbmRvd1JlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LCB0aGlzLnBsYWNlbWVudCxcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyID09PSAnYm9keScpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXRWYWx1ZXMkID0gdGhpcy5fdmFsdWVDaGFuZ2VzLnBpcGUodGFwKHZhbHVlID0+IHtcbiAgICAgIHRoaXMuX2lucHV0VmFsdWVCYWNrdXAgPSB0aGlzLnNob3dIaW50ID8gdmFsdWUgOiBudWxsO1xuICAgICAgaWYgKHRoaXMuZWRpdGFibGUpIHtcbiAgICAgICAgdGhpcy5fb25DaGFuZ2UodmFsdWUpO1xuICAgICAgfVxuICAgIH0pKTtcbiAgICBjb25zdCByZXN1bHRzJCA9IGlucHV0VmFsdWVzJC5waXBlKHRoaXMubmdiVHlwZWFoZWFkKTtcbiAgICBjb25zdCBwcm9jZXNzZWRSZXN1bHRzJCA9IHJlc3VsdHMkLnBpcGUodGFwKCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5lZGl0YWJsZSkge1xuICAgICAgICB0aGlzLl9vbkNoYW5nZSh1bmRlZmluZWQpO1xuICAgICAgfVxuICAgIH0pKTtcbiAgICBjb25zdCB1c2VySW5wdXQkID0gdGhpcy5fcmVzdWJzY3JpYmVUeXBlYWhlYWQucGlwZShzd2l0Y2hNYXAoKCkgPT4gcHJvY2Vzc2VkUmVzdWx0cyQpKTtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24gPSB0aGlzLl9zdWJzY3JpYmVUb1VzZXJJbnB1dCh1c2VySW5wdXQkKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2Nsb3NlUG9wdXAoKTtcbiAgICB0aGlzLl91bnN1YnNjcmliZUZyb21Vc2VySW5wdXQoKTtcbiAgICB0aGlzLl96b25lU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IGFueSkgPT4gYW55KTogdm9pZCB7IHRoaXMuX29uQ2hhbmdlID0gZm47IH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gYW55KTogdm9pZCB7IHRoaXMuX29uVG91Y2hlZCA9IGZuOyB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZSkge1xuICAgIHRoaXMuX3dyaXRlSW5wdXRWYWx1ZSh0aGlzLl9mb3JtYXRJdGVtRm9ySW5wdXQodmFsdWUpKTtcbiAgICBpZiAodGhpcy5zaG93SGludCkge1xuICAgICAgdGhpcy5faW5wdXRWYWx1ZUJhY2t1cCA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2Rpc2FibGVkJywgaXNEaXNhYmxlZCk7XG4gIH1cblxuICAvKipcbiAgICogRGlzbWlzc2VzIHR5cGVhaGVhZCBwb3B1cCB3aW5kb3dcbiAgICovXG4gIGRpc21pc3NQb3B1cCgpIHtcbiAgICBpZiAodGhpcy5pc1BvcHVwT3BlbigpKSB7XG4gICAgICB0aGlzLl9yZXN1YnNjcmliZVR5cGVhaGVhZC5uZXh0KG51bGwpO1xuICAgICAgdGhpcy5fY2xvc2VQb3B1cCgpO1xuICAgICAgaWYgKHRoaXMuc2hvd0hpbnQgJiYgdGhpcy5faW5wdXRWYWx1ZUJhY2t1cCAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLl93cml0ZUlucHV0VmFsdWUodGhpcy5faW5wdXRWYWx1ZUJhY2t1cCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSB0eXBlYWhlYWQgcG9wdXAgd2luZG93IGlzIGRpc3BsYXllZFxuICAgKi9cbiAgaXNQb3B1cE9wZW4oKSB7IHJldHVybiB0aGlzLl93aW5kb3dSZWYgIT0gbnVsbDsgfVxuXG4gIGhhbmRsZUJsdXIoKSB7XG4gICAgdGhpcy5fcmVzdWJzY3JpYmVUeXBlYWhlYWQubmV4dChudWxsKTtcbiAgICB0aGlzLl9vblRvdWNoZWQoKTtcbiAgfVxuXG4gIGhhbmRsZUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuaXNQb3B1cE9wZW4oKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpkZXByZWNhdGlvblxuICAgIHN3aXRjaCAoZXZlbnQud2hpY2gpIHtcbiAgICAgIGNhc2UgS2V5LkFycm93RG93bjpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5fd2luZG93UmVmLmluc3RhbmNlLm5leHQoKTtcbiAgICAgICAgdGhpcy5fc2hvd0hpbnQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEtleS5BcnJvd1VwOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLl93aW5kb3dSZWYuaW5zdGFuY2UucHJldigpO1xuICAgICAgICB0aGlzLl9zaG93SGludCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgS2V5LkVudGVyOlxuICAgICAgY2FzZSBLZXkuVGFiOlxuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLl93aW5kb3dSZWYuaW5zdGFuY2UuZ2V0QWN0aXZlKCk7XG4gICAgICAgIGlmIChpc0RlZmluZWQocmVzdWx0KSkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgdGhpcy5fc2VsZWN0UmVzdWx0KHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2xvc2VQb3B1cCgpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9vcGVuUG9wdXAoKSB7XG4gICAgaWYgKCF0aGlzLmlzUG9wdXBPcGVuKCkpIHtcbiAgICAgIHRoaXMuX2lucHV0VmFsdWVCYWNrdXAgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gICAgICB0aGlzLl93aW5kb3dSZWYgPSB0aGlzLl9wb3B1cFNlcnZpY2Uub3BlbigpO1xuICAgICAgdGhpcy5fd2luZG93UmVmLmluc3RhbmNlLmlkID0gdGhpcy5wb3B1cElkO1xuICAgICAgdGhpcy5fd2luZG93UmVmLmluc3RhbmNlLnNlbGVjdEV2ZW50LnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHRoaXMuX3NlbGVjdFJlc3VsdENsb3NlUG9wdXAocmVzdWx0KSk7XG4gICAgICB0aGlzLl93aW5kb3dSZWYuaW5zdGFuY2UuYWN0aXZlQ2hhbmdlRXZlbnQuc3Vic2NyaWJlKChhY3RpdmVJZDogc3RyaW5nKSA9PiB0aGlzLmFjdGl2ZURlc2NlbmRhbnQgPSBhY3RpdmVJZCk7XG5cbiAgICAgIGlmICh0aGlzLmNvbnRhaW5lciA9PT0gJ2JvZHknKSB7XG4gICAgICAgIHdpbmRvdy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuY29udGFpbmVyKS5hcHBlbmRDaGlsZCh0aGlzLl93aW5kb3dSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgICBuZ2JBdXRvQ2xvc2UoXG4gICAgICAgICAgdGhpcy5fbmdab25lLCB0aGlzLl9kb2N1bWVudCwgJ291dHNpZGUnLCAoKSA9PiB0aGlzLmRpc21pc3NQb3B1cCgpLCB0aGlzLl9jbG9zZWQkLFxuICAgICAgICAgIFt0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHRoaXMuX3dpbmRvd1JlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50XSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfY2xvc2VQb3B1cCgpIHtcbiAgICB0aGlzLl9jbG9zZWQkLm5leHQoKTtcbiAgICB0aGlzLl9wb3B1cFNlcnZpY2UuY2xvc2UoKTtcbiAgICB0aGlzLl93aW5kb3dSZWYgPSBudWxsO1xuICAgIHRoaXMuYWN0aXZlRGVzY2VuZGFudCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgX3NlbGVjdFJlc3VsdChyZXN1bHQ6IGFueSkge1xuICAgIGxldCBkZWZhdWx0UHJldmVudGVkID0gZmFsc2U7XG4gICAgdGhpcy5zZWxlY3RJdGVtLmVtaXQoe2l0ZW06IHJlc3VsdCwgcHJldmVudERlZmF1bHQ6ICgpID0+IHsgZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7IH19KTtcbiAgICB0aGlzLl9yZXN1YnNjcmliZVR5cGVhaGVhZC5uZXh0KG51bGwpO1xuXG4gICAgaWYgKCFkZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICB0aGlzLndyaXRlVmFsdWUocmVzdWx0KTtcbiAgICAgIHRoaXMuX29uQ2hhbmdlKHJlc3VsdCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc2VsZWN0UmVzdWx0Q2xvc2VQb3B1cChyZXN1bHQ6IGFueSkge1xuICAgIHRoaXMuX3NlbGVjdFJlc3VsdChyZXN1bHQpO1xuICAgIHRoaXMuX2Nsb3NlUG9wdXAoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3Nob3dIaW50KCkge1xuICAgIGlmICh0aGlzLnNob3dIaW50ICYmIHRoaXMuX3dpbmRvd1JlZi5pbnN0YW5jZS5oYXNBY3RpdmUoKSAmJiB0aGlzLl9pbnB1dFZhbHVlQmFja3VwICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IHVzZXJJbnB1dExvd2VyQ2FzZSA9IHRoaXMuX2lucHV0VmFsdWVCYWNrdXAudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IGZvcm1hdHRlZFZhbCA9IHRoaXMuX2Zvcm1hdEl0ZW1Gb3JJbnB1dCh0aGlzLl93aW5kb3dSZWYuaW5zdGFuY2UuZ2V0QWN0aXZlKCkpO1xuXG4gICAgICBpZiAodXNlcklucHV0TG93ZXJDYXNlID09PSBmb3JtYXR0ZWRWYWwuc3Vic3RyKDAsIHRoaXMuX2lucHV0VmFsdWVCYWNrdXAubGVuZ3RoKS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIHRoaXMuX3dyaXRlSW5wdXRWYWx1ZSh0aGlzLl9pbnB1dFZhbHVlQmFja3VwICsgZm9ybWF0dGVkVmFsLnN1YnN0cih0aGlzLl9pbnB1dFZhbHVlQmFja3VwLmxlbmd0aCkpO1xuICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnRbJ3NldFNlbGVjdGlvblJhbmdlJ10uYXBwbHkoXG4gICAgICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIFt0aGlzLl9pbnB1dFZhbHVlQmFja3VwLmxlbmd0aCwgZm9ybWF0dGVkVmFsLmxlbmd0aF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fd3JpdGVJbnB1dFZhbHVlKGZvcm1hdHRlZFZhbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZm9ybWF0SXRlbUZvcklucHV0KGl0ZW06IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGl0ZW0gIT0gbnVsbCAmJiB0aGlzLmlucHV0Rm9ybWF0dGVyID8gdGhpcy5pbnB1dEZvcm1hdHRlcihpdGVtKSA6IHRvU3RyaW5nKGl0ZW0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfd3JpdGVJbnB1dFZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICd2YWx1ZScsIHRvU3RyaW5nKHZhbHVlKSk7XG4gIH1cblxuICBwcml2YXRlIF9zdWJzY3JpYmVUb1VzZXJJbnB1dCh1c2VySW5wdXQkOiBPYnNlcnZhYmxlPGFueVtdPik6IFN1YnNjcmlwdGlvbiB7XG4gICAgcmV0dXJuIHVzZXJJbnB1dCQuc3Vic2NyaWJlKChyZXN1bHRzKSA9PiB7XG4gICAgICBpZiAoIXJlc3VsdHMgfHwgcmVzdWx0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5fY2xvc2VQb3B1cCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fb3BlblBvcHVwKCk7XG4gICAgICAgIHRoaXMuX3dpbmRvd1JlZi5pbnN0YW5jZS5mb2N1c0ZpcnN0ID0gdGhpcy5mb2N1c0ZpcnN0O1xuICAgICAgICB0aGlzLl93aW5kb3dSZWYuaW5zdGFuY2UucmVzdWx0cyA9IHJlc3VsdHM7XG4gICAgICAgIHRoaXMuX3dpbmRvd1JlZi5pbnN0YW5jZS50ZXJtID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlO1xuICAgICAgICBpZiAodGhpcy5yZXN1bHRGb3JtYXR0ZXIpIHtcbiAgICAgICAgICB0aGlzLl93aW5kb3dSZWYuaW5zdGFuY2UuZm9ybWF0dGVyID0gdGhpcy5yZXN1bHRGb3JtYXR0ZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucmVzdWx0VGVtcGxhdGUpIHtcbiAgICAgICAgICB0aGlzLl93aW5kb3dSZWYuaW5zdGFuY2UucmVzdWx0VGVtcGxhdGUgPSB0aGlzLnJlc3VsdFRlbXBsYXRlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3dpbmRvd1JlZi5pbnN0YW5jZS5yZXNldEFjdGl2ZSgpO1xuXG4gICAgICAgIC8vIFRoZSBvYnNlcnZhYmxlIHN0cmVhbSB3ZSBhcmUgc3Vic2NyaWJpbmcgdG8gbWlnaHQgaGF2ZSBhc3luYyBzdGVwc1xuICAgICAgICAvLyBhbmQgaWYgYSBjb21wb25lbnQgY29udGFpbmluZyB0eXBlYWhlYWQgaXMgdXNpbmcgdGhlIE9uUHVzaCBzdHJhdGVneVxuICAgICAgICAvLyB0aGUgY2hhbmdlIGRldGVjdGlvbiB0dXJuIHdvdWxkbid0IGJlIGludm9rZWQgYXV0b21hdGljYWxseS5cbiAgICAgICAgdGhpcy5fd2luZG93UmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICB0aGlzLl9zaG93SGludCgpO1xuICAgICAgfVxuXG4gICAgICAvLyBsaXZlIGFubm91bmNlclxuICAgICAgY29uc3QgY291bnQgPSByZXN1bHRzID8gcmVzdWx0cy5sZW5ndGggOiAwO1xuICAgICAgdGhpcy5fbGl2ZS5zYXkoY291bnQgPT09IDAgPyAnTm8gcmVzdWx0cyBhdmFpbGFibGUnIDogYCR7Y291bnR9IHJlc3VsdCR7Y291bnQgPT09IDEgPyAnJyA6ICdzJ30gYXZhaWxhYmxlYCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF91bnN1YnNjcmliZUZyb21Vc2VySW5wdXQoKSB7XG4gICAgaWYgKHRoaXMuX3N1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbiA9IG51bGw7XG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/typeahead/typeahead.module.js b/dist/sunbird-ui-components/esm5/typeahead/typeahead.module.js new file mode 100644 index 0000000..14030c4 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/typeahead/typeahead.module.js @@ -0,0 +1,28 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { NgbHighlight } from './highlight'; +import { NgbTypeaheadWindow } from './typeahead-window'; +import { NgbTypeahead } from './typeahead'; +export { NgbHighlight } from './highlight'; +export { NgbTypeaheadWindow } from './typeahead-window'; +export { NgbTypeaheadConfig } from './typeahead-config'; +export { NgbTypeahead } from './typeahead'; +var NgbTypeaheadModule = /** @class */ (function () { + function NgbTypeaheadModule() { + } + NgbTypeaheadModule.decorators = [ + { type: NgModule, args: [{ + declarations: [NgbTypeahead, NgbHighlight, NgbTypeaheadWindow], + exports: [NgbTypeahead, NgbHighlight], + imports: [CommonModule], + entryComponents: [NgbTypeaheadWindow] + },] } + ]; + return NgbTypeaheadModule; +}()); +export { NgbTypeaheadModule }; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWFoZWFkLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbInR5cGVhaGVhZC90eXBlYWhlYWQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUU3QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQ3RELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFekMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RCxPQUFPLEVBQUMsWUFBWSxFQUE4QixNQUFNLGFBQWEsQ0FBQztBQUV0RTtJQUFBO0lBT0EsQ0FBQzs7Z0JBUEEsUUFBUSxTQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLFlBQVksRUFBRSxZQUFZLEVBQUUsa0JBQWtCLENBQUM7b0JBQzlELE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUM7b0JBQ3JDLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDdkIsZUFBZSxFQUFFLENBQUMsa0JBQWtCLENBQUM7aUJBQ3RDOztJQUVELHlCQUFDO0NBQUEsQUFQRCxJQU9DO1NBRFksa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHtOZ2JIaWdobGlnaHR9IGZyb20gJy4vaGlnaGxpZ2h0JztcbmltcG9ydCB7TmdiVHlwZWFoZWFkV2luZG93fSBmcm9tICcuL3R5cGVhaGVhZC13aW5kb3cnO1xuaW1wb3J0IHtOZ2JUeXBlYWhlYWR9IGZyb20gJy4vdHlwZWFoZWFkJztcblxuZXhwb3J0IHtOZ2JIaWdobGlnaHR9IGZyb20gJy4vaGlnaGxpZ2h0JztcbmV4cG9ydCB7TmdiVHlwZWFoZWFkV2luZG93fSBmcm9tICcuL3R5cGVhaGVhZC13aW5kb3cnO1xuZXhwb3J0IHtOZ2JUeXBlYWhlYWRDb25maWd9IGZyb20gJy4vdHlwZWFoZWFkLWNvbmZpZyc7XG5leHBvcnQge05nYlR5cGVhaGVhZCwgTmdiVHlwZWFoZWFkU2VsZWN0SXRlbUV2ZW50fSBmcm9tICcuL3R5cGVhaGVhZCc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW05nYlR5cGVhaGVhZCwgTmdiSGlnaGxpZ2h0LCBOZ2JUeXBlYWhlYWRXaW5kb3ddLFxuICBleHBvcnRzOiBbTmdiVHlwZWFoZWFkLCBOZ2JIaWdobGlnaHRdLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgZW50cnlDb21wb25lbnRzOiBbTmdiVHlwZWFoZWFkV2luZG93XVxufSlcbmV4cG9ydCBjbGFzcyBOZ2JUeXBlYWhlYWRNb2R1bGUge1xufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/util/accessibility/live.js b/dist/sunbird-ui-components/esm5/util/accessibility/live.js new file mode 100644 index 0000000..061b009 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/util/accessibility/live.js @@ -0,0 +1,104 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Injectable, Inject, InjectionToken } from '@angular/core'; +import { DOCUMENT } from '@angular/common'; +import * as i0 from "@angular/core"; +import * as i1 from "@angular/common"; +/** @type {?} */ +export var ARIA_LIVE_DELAY = new InjectionToken('live announcer delay', { providedIn: 'root', factory: ARIA_LIVE_DELAY_FACTORY }); +/** + * @return {?} + */ +export function ARIA_LIVE_DELAY_FACTORY() { + return 100; +} +/** + * @param {?} document + * @param {?=} lazyCreate + * @return {?} + */ +function getLiveElement(document, lazyCreate) { + if (lazyCreate === void 0) { lazyCreate = false; } + /** @type {?} */ + var element = (/** @type {?} */ (document.body.querySelector('#ngb-live'))); + if (element == null && lazyCreate) { + element = document.createElement('div'); + element.setAttribute('id', 'ngb-live'); + element.setAttribute('aria-live', 'polite'); + element.setAttribute('aria-atomic', 'true'); + element.classList.add('sr-only'); + document.body.appendChild(element); + } + return element; +} +var Live = /** @class */ (function () { + function Live(_document, _delay) { + this._document = _document; + this._delay = _delay; + } + /** + * @return {?} + */ + Live.prototype.ngOnDestroy = /** + * @return {?} + */ + function () { + /** @type {?} */ + var element = getLiveElement(this._document); + if (element) { + element.parentElement.removeChild(element); + } + }; + /** + * @param {?} message + * @return {?} + */ + Live.prototype.say = /** + * @param {?} message + * @return {?} + */ + function (message) { + /** @type {?} */ + var element = getLiveElement(this._document, true); + /** @type {?} */ + var delay = this._delay; + element.textContent = ''; + /** @type {?} */ + var setText = (/** + * @return {?} + */ + function () { return element.textContent = message; }); + if (delay === null) { + setText(); + } + else { + setTimeout(setText, delay); + } + }; + Live.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ + Live.ctorParameters = function () { return [ + { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }, + { type: undefined, decorators: [{ type: Inject, args: [ARIA_LIVE_DELAY,] }] } + ]; }; + /** @nocollapse */ Live.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function Live_Factory() { return new Live(i0.ɵɵinject(i1.DOCUMENT), i0.ɵɵinject(ARIA_LIVE_DELAY)); }, token: Live, providedIn: "root" }); + return Live; +}()); +export { Live }; +if (false) { + /** + * @type {?} + * @private + */ + Live.prototype._document; + /** + * @type {?} + * @private + */ + Live.prototype._delay; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbInV0aWwvYWNjZXNzaWJpbGl0eS9saXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDNUUsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlCQUFpQixDQUFDOzs7O0FBT3pDLE1BQU0sS0FBTyxlQUFlLEdBQUcsSUFBSSxjQUFjLENBQzdDLHNCQUFzQixFQUFFLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUMsQ0FBQzs7OztBQUNuRixNQUFNLFVBQVUsdUJBQXVCO0lBQ3JDLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQzs7Ozs7O0FBR0QsU0FBUyxjQUFjLENBQUMsUUFBYSxFQUFFLFVBQWtCO0lBQWxCLDJCQUFBLEVBQUEsa0JBQWtCOztRQUNuRCxPQUFPLEdBQUcsbUJBQUEsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEVBQWU7SUFFckUsSUFBSSxPQUFPLElBQUksSUFBSSxJQUFJLFVBQVUsRUFBRTtRQUNqQyxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV4QyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN2QyxPQUFPLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM1QyxPQUFPLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUU1QyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVqQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUNwQztJQUVELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFJRDtJQUVFLGNBQXNDLFNBQWMsRUFBbUMsTUFBVztRQUE1RCxjQUFTLEdBQVQsU0FBUyxDQUFLO1FBQW1DLFdBQU0sR0FBTixNQUFNLENBQUs7SUFBRyxDQUFDOzs7O0lBRXRHLDBCQUFXOzs7SUFBWDs7WUFDUSxPQUFPLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDOUMsSUFBSSxPQUFPLEVBQUU7WUFDWCxPQUFPLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUM1QztJQUNILENBQUM7Ozs7O0lBRUQsa0JBQUc7Ozs7SUFBSCxVQUFJLE9BQWU7O1lBQ1gsT0FBTyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQzs7WUFDOUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNO1FBRXpCLE9BQU8sQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDOztZQUNuQixPQUFPOzs7UUFBRyxjQUFNLE9BQUEsT0FBTyxDQUFDLFdBQVcsR0FBRyxPQUFPLEVBQTdCLENBQTZCLENBQUE7UUFDbkQsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFO1lBQ2xCLE9BQU8sRUFBRSxDQUFDO1NBQ1g7YUFBTTtZQUNMLFVBQVUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDNUI7SUFDSCxDQUFDOztnQkF0QkYsVUFBVSxTQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQzs7OztnREFFakIsTUFBTSxTQUFDLFFBQVE7Z0RBQTJCLE1BQU0sU0FBQyxlQUFlOzs7ZUFyQy9FO0NBMERDLEFBdkJELElBdUJDO1NBdEJZLElBQUk7Ozs7OztJQUNILHlCQUF3Qzs7Ozs7SUFBRSxzQkFBNEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIEluamVjdCwgSW5qZWN0aW9uVG9rZW4sIE9uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0RPQ1VNRU5UfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5cblxuLy8gdXNlZnVsbmVzcyAoYW5kIGRlZmF1bHQgdmFsdWUpIG9mIGRlbGF5IGRvY3VtZW50ZWQgaW4gTWF0ZXJpYWwncyBDREtcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL21hdGVyaWFsMi9ibG9iLzY0MDVkYTliOGU4NTMyYTdlNWM4NTRjOTIwZWUxODE1YzI3NWQ3MzQvc3JjL2Nkay9hMTF5L2xpdmUtYW5ub3VuY2VyL2xpdmUtYW5ub3VuY2VyLnRzI0w1MFxuZXhwb3J0IHR5cGUgQVJJQV9MSVZFX0RFTEFZX1RZUEUgPSBudW1iZXIgfCBudWxsO1xuZXhwb3J0IGNvbnN0IEFSSUFfTElWRV9ERUxBWSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxBUklBX0xJVkVfREVMQVlfVFlQRT4oXG4gICAgJ2xpdmUgYW5ub3VuY2VyIGRlbGF5Jywge3Byb3ZpZGVkSW46ICdyb290JywgZmFjdG9yeTogQVJJQV9MSVZFX0RFTEFZX0ZBQ1RPUll9KTtcbmV4cG9ydCBmdW5jdGlvbiBBUklBX0xJVkVfREVMQVlfRkFDVE9SWSgpOiBudW1iZXIge1xuICByZXR1cm4gMTAwO1xufVxuXG5cbmZ1bmN0aW9uIGdldExpdmVFbGVtZW50KGRvY3VtZW50OiBhbnksIGxhenlDcmVhdGUgPSBmYWxzZSk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yKCcjbmdiLWxpdmUnKSBhcyBIVE1MRWxlbWVudDtcblxuICBpZiAoZWxlbWVudCA9PSBudWxsICYmIGxhenlDcmVhdGUpIHtcbiAgICBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnaWQnLCAnbmdiLWxpdmUnKTtcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1saXZlJywgJ3BvbGl0ZScpO1xuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWF0b21pYycsICd0cnVlJyk7XG5cbiAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoJ3NyLW9ubHknKTtcblxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudDtcbn1cblxuXG5cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIExpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBjb25zdHJ1Y3RvcihASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIF9kb2N1bWVudDogYW55LCBASW5qZWN0KEFSSUFfTElWRV9ERUxBWSkgcHJpdmF0ZSBfZGVsYXk6IGFueSkge31cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gZ2V0TGl2ZUVsZW1lbnQodGhpcy5fZG9jdW1lbnQpO1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICBlbGVtZW50LnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoZWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgc2F5KG1lc3NhZ2U6IHN0cmluZykge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBnZXRMaXZlRWxlbWVudCh0aGlzLl9kb2N1bWVudCwgdHJ1ZSk7XG4gICAgY29uc3QgZGVsYXkgPSB0aGlzLl9kZWxheTtcblxuICAgIGVsZW1lbnQudGV4dENvbnRlbnQgPSAnJztcbiAgICBjb25zdCBzZXRUZXh0ID0gKCkgPT4gZWxlbWVudC50ZXh0Q29udGVudCA9IG1lc3NhZ2U7XG4gICAgaWYgKGRlbGF5ID09PSBudWxsKSB7XG4gICAgICBzZXRUZXh0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFRpbWVvdXQoc2V0VGV4dCwgZGVsYXkpO1xuICAgIH1cbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/util/autoclose.js b/dist/sunbird-ui-components/esm5/util/autoclose.js new file mode 100644 index 0000000..0ecf3ba --- /dev/null +++ b/dist/sunbird-ui-components/esm5/util/autoclose.js @@ -0,0 +1,113 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import * as tslib_1 from "tslib"; +import { fromEvent, race } from 'rxjs'; +import { delay, filter, map, takeUntil, withLatestFrom } from 'rxjs/operators'; +import { Key } from './key'; +import { closest } from './util'; +/** @type {?} */ +var isContainedIn = (/** + * @param {?} element + * @param {?=} array + * @return {?} + */ +function (element, array) { + return array ? array.some((/** + * @param {?} item + * @return {?} + */ + function (item) { return item.contains(element); })) : false; +}); +var ɵ0 = isContainedIn; +/** @type {?} */ +var matchesSelectorIfAny = (/** + * @param {?} element + * @param {?=} selector + * @return {?} + */ +function (element, selector) { + return !selector || closest(element, selector) != null; +}); +var ɵ1 = matchesSelectorIfAny; +// we'll have to use 'touch' events instead of 'mouse' events on iOS and add a more significant delay +// to avoid re-opening when handling (click) on a toggling element +// TODO: use proper Angular platform detection when NgbAutoClose becomes a service and we can inject PLATFORM_ID +/** @type {?} */ +var iOS = false; +if (typeof navigator !== 'undefined') { + iOS = !!navigator.userAgent && /iPad|iPhone|iPod/.test(navigator.userAgent); +} +/** + * @param {?} zone + * @param {?} document + * @param {?} type + * @param {?} close + * @param {?} closed$ + * @param {?} insideElements + * @param {?=} ignoreElements + * @param {?=} insideSelector + * @return {?} + */ +export function ngbAutoClose(zone, document, type, close, closed$, insideElements, ignoreElements, insideSelector) { + // closing on ESC and outside clicks + if (type) { + zone.runOutsideAngular((/** + * @return {?} + */ + function () { + /** @type {?} */ + var shouldCloseOnClick = (/** + * @param {?} event + * @return {?} + */ + function (event) { + /** @type {?} */ + var element = (/** @type {?} */ (event.target)); + if ((event instanceof MouseEvent && event.button === 2) || isContainedIn(element, ignoreElements)) { + return false; + } + if (type === 'inside') { + return isContainedIn(element, insideElements) && matchesSelectorIfAny(element, insideSelector); + } + else if (type === 'outside') { + return !isContainedIn(element, insideElements); + } + else /* if (type === true) */ { + return matchesSelectorIfAny(element, insideSelector) || !isContainedIn(element, insideElements); + } + }); + /** @type {?} */ + var escapes$ = fromEvent(document, 'keydown') + .pipe(takeUntil(closed$), + // tslint:disable-next-line:deprecation + filter((/** + * @param {?} e + * @return {?} + */ + function (e) { return e.which === Key.Escape; }))); + // we have to pre-calculate 'shouldCloseOnClick' on 'mousedown/touchstart', + // because on 'mouseup/touchend' DOM nodes might be detached + /** @type {?} */ + var mouseDowns$ = fromEvent(document, iOS ? 'touchstart' : 'mousedown') + .pipe(map(shouldCloseOnClick), takeUntil(closed$)); + /** @type {?} */ + var closeableClicks$ = (/** @type {?} */ (fromEvent(document, iOS ? 'touchend' : 'mouseup') + .pipe(withLatestFrom(mouseDowns$), filter((/** + * @param {?} __0 + * @return {?} + */ + function (_a) { + var _b = tslib_1.__read(_a, 2), _ = _b[0], shouldClose = _b[1]; + return shouldClose; + })), delay(iOS ? 16 : 0), takeUntil(closed$)))); + race([escapes$, closeableClicks$]).subscribe((/** + * @return {?} + */ + function () { return zone.run(close); })); + })); + } +} +export { ɵ0, ɵ1 }; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2Nsb3NlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsidXRpbC9hdXRvY2xvc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSxPQUFPLEVBQUMsU0FBUyxFQUFjLElBQUksRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNqRCxPQUFPLEVBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzdFLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFFBQVEsQ0FBQzs7SUFFekIsYUFBYTs7Ozs7QUFBRyxVQUFDLE9BQW9CLEVBQUUsS0FBcUI7SUFDOUQsT0FBQSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJOzs7O0lBQUMsVUFBQSxJQUFJLElBQUksT0FBQSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUF0QixDQUFzQixFQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUs7QUFBMUQsQ0FBMEQsQ0FBQTs7O0lBRXhELG9CQUFvQjs7Ozs7QUFBRyxVQUFDLE9BQW9CLEVBQUUsUUFBaUI7SUFDakUsT0FBQSxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxJQUFJLElBQUk7QUFBL0MsQ0FBK0MsQ0FBQTs7Ozs7O0lBSy9DLEdBQUcsR0FBRyxLQUFLO0FBQ2YsSUFBSSxPQUFPLFNBQVMsS0FBSyxXQUFXLEVBQUU7SUFDcEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7Q0FDN0U7Ozs7Ozs7Ozs7OztBQUVELE1BQU0sVUFBVSxZQUFZLENBQ3hCLElBQVksRUFBRSxRQUFhLEVBQUUsSUFBb0MsRUFBRSxLQUFpQixFQUFFLE9BQXdCLEVBQzlHLGNBQTZCLEVBQUUsY0FBOEIsRUFBRSxjQUF1QjtJQUN4RixvQ0FBb0M7SUFDcEMsSUFBSSxJQUFJLEVBQUU7UUFDUixJQUFJLENBQUMsaUJBQWlCOzs7UUFBQzs7Z0JBRWYsa0JBQWtCOzs7O1lBQUcsVUFBQyxLQUE4Qjs7b0JBQ2xELE9BQU8sR0FBRyxtQkFBQSxLQUFLLENBQUMsTUFBTSxFQUFlO2dCQUMzQyxJQUFJLENBQUMsS0FBSyxZQUFZLFVBQVUsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLEVBQUU7b0JBQ2pHLE9BQU8sS0FBSyxDQUFDO2lCQUNkO2dCQUNELElBQUksSUFBSSxLQUFLLFFBQVEsRUFBRTtvQkFDckIsT0FBTyxhQUFhLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxJQUFJLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztpQkFDaEc7cUJBQU0sSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFO29CQUM3QixPQUFPLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztpQkFDaEQ7cUJBQU0sd0JBQXdCLENBQUM7b0JBQzlCLE9BQU8sb0JBQW9CLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztpQkFDakc7WUFDSCxDQUFDLENBQUE7O2dCQUVLLFFBQVEsR0FBRyxTQUFTLENBQWdCLFFBQVEsRUFBRSxTQUFTLENBQUM7aUJBQ3hDLElBQUksQ0FDRCxTQUFTLENBQUMsT0FBTyxDQUFDO1lBQ2xCLHVDQUF1QztZQUN2QyxNQUFNOzs7O1lBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsS0FBSyxLQUFLLEdBQUcsQ0FBQyxNQUFNLEVBQXRCLENBQXNCLEVBQUMsQ0FBQzs7OztnQkFLdkQsV0FBVyxHQUFHLFNBQVMsQ0FBYSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztpQkFDNUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQzs7Z0JBRXBFLGdCQUFnQixHQUFHLG1CQUFBLFNBQVMsQ0FBYSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztpQkFDeEQsSUFBSSxDQUNELGNBQWMsQ0FBQyxXQUFXLENBQUMsRUFBRSxNQUFNOzs7O1lBQUMsVUFBQyxFQUFnQjtvQkFBaEIsMEJBQWdCLEVBQWYsU0FBQyxFQUFFLG1CQUFXO2dCQUFNLE9BQUEsV0FBVztZQUFYLENBQVcsRUFBQyxFQUN0RSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUEwQjtZQUduRyxJQUFJLENBQVEsQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLFNBQVM7OztZQUFDLGNBQU0sT0FBQSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFmLENBQWUsRUFBQyxDQUFDO1FBQzdFLENBQUMsRUFBQyxDQUFDO0tBQ0o7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOZ1pvbmV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtmcm9tRXZlbnQsIE9ic2VydmFibGUsIHJhY2V9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtkZWxheSwgZmlsdGVyLCBtYXAsIHRha2VVbnRpbCwgd2l0aExhdGVzdEZyb219IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7S2V5fSBmcm9tICcuL2tleSc7XG5pbXBvcnQge2Nsb3Nlc3R9IGZyb20gJy4vdXRpbCc7XG5cbmNvbnN0IGlzQ29udGFpbmVkSW4gPSAoZWxlbWVudDogSFRNTEVsZW1lbnQsIGFycmF5PzogSFRNTEVsZW1lbnRbXSkgPT5cbiAgICBhcnJheSA/IGFycmF5LnNvbWUoaXRlbSA9PiBpdGVtLmNvbnRhaW5zKGVsZW1lbnQpKSA6IGZhbHNlO1xuXG5jb25zdCBtYXRjaGVzU2VsZWN0b3JJZkFueSA9IChlbGVtZW50OiBIVE1MRWxlbWVudCwgc2VsZWN0b3I/OiBzdHJpbmcpID0+XG4gICAgIXNlbGVjdG9yIHx8IGNsb3Nlc3QoZWxlbWVudCwgc2VsZWN0b3IpICE9IG51bGw7XG5cbi8vIHdlJ2xsIGhhdmUgdG8gdXNlICd0b3VjaCcgZXZlbnRzIGluc3RlYWQgb2YgJ21vdXNlJyBldmVudHMgb24gaU9TIGFuZCBhZGQgYSBtb3JlIHNpZ25pZmljYW50IGRlbGF5XG4vLyB0byBhdm9pZCByZS1vcGVuaW5nIHdoZW4gaGFuZGxpbmcgKGNsaWNrKSBvbiBhIHRvZ2dsaW5nIGVsZW1lbnRcbi8vIFRPRE86IHVzZSBwcm9wZXIgQW5ndWxhciBwbGF0Zm9ybSBkZXRlY3Rpb24gd2hlbiBOZ2JBdXRvQ2xvc2UgYmVjb21lcyBhIHNlcnZpY2UgYW5kIHdlIGNhbiBpbmplY3QgUExBVEZPUk1fSURcbmxldCBpT1MgPSBmYWxzZTtcbmlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJykge1xuICBpT1MgPSAhIW5hdmlnYXRvci51c2VyQWdlbnQgJiYgL2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZ2JBdXRvQ2xvc2UoXG4gICAgem9uZTogTmdab25lLCBkb2N1bWVudDogYW55LCB0eXBlOiBib29sZWFuIHwgJ2luc2lkZScgfCAnb3V0c2lkZScsIGNsb3NlOiAoKSA9PiB2b2lkLCBjbG9zZWQkOiBPYnNlcnZhYmxlPGFueT4sXG4gICAgaW5zaWRlRWxlbWVudHM6IEhUTUxFbGVtZW50W10sIGlnbm9yZUVsZW1lbnRzPzogSFRNTEVsZW1lbnRbXSwgaW5zaWRlU2VsZWN0b3I/OiBzdHJpbmcpIHtcbiAgLy8gY2xvc2luZyBvbiBFU0MgYW5kIG91dHNpZGUgY2xpY2tzXG4gIGlmICh0eXBlKSB7XG4gICAgem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG5cbiAgICAgIGNvbnN0IHNob3VsZENsb3NlT25DbGljayA9IChldmVudDogTW91c2VFdmVudCB8IFRvdWNoRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgaWYgKChldmVudCBpbnN0YW5jZW9mIE1vdXNlRXZlbnQgJiYgZXZlbnQuYnV0dG9uID09PSAyKSB8fCBpc0NvbnRhaW5lZEluKGVsZW1lbnQsIGlnbm9yZUVsZW1lbnRzKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZSA9PT0gJ2luc2lkZScpIHtcbiAgICAgICAgICByZXR1cm4gaXNDb250YWluZWRJbihlbGVtZW50LCBpbnNpZGVFbGVtZW50cykgJiYgbWF0Y2hlc1NlbGVjdG9ySWZBbnkoZWxlbWVudCwgaW5zaWRlU2VsZWN0b3IpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvdXRzaWRlJykge1xuICAgICAgICAgIHJldHVybiAhaXNDb250YWluZWRJbihlbGVtZW50LCBpbnNpZGVFbGVtZW50cyk7XG4gICAgICAgIH0gZWxzZSAvKiBpZiAodHlwZSA9PT0gdHJ1ZSkgKi8ge1xuICAgICAgICAgIHJldHVybiBtYXRjaGVzU2VsZWN0b3JJZkFueShlbGVtZW50LCBpbnNpZGVTZWxlY3RvcikgfHwgIWlzQ29udGFpbmVkSW4oZWxlbWVudCwgaW5zaWRlRWxlbWVudHMpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBlc2NhcGVzJCA9IGZyb21FdmVudDxLZXlib2FyZEV2ZW50Pihkb2N1bWVudCwgJ2tleWRvd24nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFrZVVudGlsKGNsb3NlZCQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpkZXByZWNhdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihlID0+IGUud2hpY2ggPT09IEtleS5Fc2NhcGUpKTtcblxuXG4gICAgICAvLyB3ZSBoYXZlIHRvIHByZS1jYWxjdWxhdGUgJ3Nob3VsZENsb3NlT25DbGljaycgb24gJ21vdXNlZG93bi90b3VjaHN0YXJ0JyxcbiAgICAgIC8vIGJlY2F1c2Ugb24gJ21vdXNldXAvdG91Y2hlbmQnIERPTSBub2RlcyBtaWdodCBiZSBkZXRhY2hlZFxuICAgICAgY29uc3QgbW91c2VEb3ducyQgPSBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZG9jdW1lbnQsIGlPUyA/ICd0b3VjaHN0YXJ0JyA6ICdtb3VzZWRvd24nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUobWFwKHNob3VsZENsb3NlT25DbGljayksIHRha2VVbnRpbChjbG9zZWQkKSk7XG5cbiAgICAgIGNvbnN0IGNsb3NlYWJsZUNsaWNrcyQgPSBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZG9jdW1lbnQsIGlPUyA/ICd0b3VjaGVuZCcgOiAnbW91c2V1cCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aExhdGVzdEZyb20obW91c2VEb3ducyQpLCBmaWx0ZXIoKFtfLCBzaG91bGRDbG9zZV0pID0+IHNob3VsZENsb3NlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5KGlPUyA/IDE2IDogMCksIHRha2VVbnRpbChjbG9zZWQkKSkgYXMgT2JzZXJ2YWJsZTxNb3VzZUV2ZW50PjtcblxuXG4gICAgICByYWNlPEV2ZW50PihbZXNjYXBlcyQsIGNsb3NlYWJsZUNsaWNrcyRdKS5zdWJzY3JpYmUoKCkgPT4gem9uZS5ydW4oY2xvc2UpKTtcbiAgICB9KTtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/util/focus-trap.js b/dist/sunbird-ui-components/esm5/util/focus-trap.js new file mode 100644 index 0000000..e9a64ea --- /dev/null +++ b/dist/sunbird-ui-components/esm5/util/focus-trap.js @@ -0,0 +1,98 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import * as tslib_1 from "tslib"; +import { fromEvent } from 'rxjs'; +import { filter, map, takeUntil, withLatestFrom } from 'rxjs/operators'; +import { Key } from '../util/key'; +/** @type {?} */ +var FOCUSABLE_ELEMENTS_SELECTOR = [ + 'a[href]', 'button:not([disabled])', 'input:not([disabled]):not([type="hidden"])', 'select:not([disabled])', + 'textarea:not([disabled])', '[contenteditable]', '[tabindex]:not([tabindex="-1"])' +].join(', '); +/** + * Returns first and last focusable elements inside of a given element based on specific CSS selector + * @param {?} element + * @return {?} + */ +export function getFocusableBoundaryElements(element) { + /** @type {?} */ + var list = Array.from((/** @type {?} */ (element.querySelectorAll(FOCUSABLE_ELEMENTS_SELECTOR)))) + .filter((/** + * @param {?} el + * @return {?} + */ + function (el) { return el.tabIndex !== -1; })); + return [list[0], list[list.length - 1]]; +} +/** + * Function that enforces browser focus to be trapped inside a DOM element. + * + * Works only for clicks inside the element and navigation with 'Tab', ignoring clicks outside of the element + * + * \@param element The element around which focus will be trapped inside + * \@param stopFocusTrap$ The observable stream. When completed the focus trap will clean up listeners + * and free internal resources + * \@param refocusOnClick Put the focus back to the last focused element whenever a click occurs on element (default to + * false) + * @type {?} + */ +export var ngbFocusTrap = (/** + * @param {?} element + * @param {?} stopFocusTrap$ + * @param {?=} refocusOnClick + * @return {?} + */ +function (element, stopFocusTrap$, refocusOnClick) { + if (refocusOnClick === void 0) { refocusOnClick = false; } + // last focused element + /** @type {?} */ + var lastFocusedElement$ = fromEvent(element, 'focusin').pipe(takeUntil(stopFocusTrap$), map((/** + * @param {?} e + * @return {?} + */ + function (e) { return e.target; }))); + // 'tab' / 'shift+tab' stream + fromEvent(element, 'keydown') + .pipe(takeUntil(stopFocusTrap$), + // tslint:disable:deprecation + filter((/** + * @param {?} e + * @return {?} + */ + function (e) { return e.which === Key.Tab; })), + // tslint:enable:deprecation + withLatestFrom(lastFocusedElement$)) + .subscribe((/** + * @param {?} __0 + * @return {?} + */ + function (_a) { + var _b = tslib_1.__read(_a, 2), tabEvent = _b[0], focusedElement = _b[1]; + var _c = tslib_1.__read(getFocusableBoundaryElements(element), 2), first = _c[0], last = _c[1]; + if ((focusedElement === first || focusedElement === element) && tabEvent.shiftKey) { + last.focus(); + tabEvent.preventDefault(); + } + if (focusedElement === last && !tabEvent.shiftKey) { + first.focus(); + tabEvent.preventDefault(); + } + })); + // inside click + if (refocusOnClick) { + fromEvent(element, 'click') + .pipe(takeUntil(stopFocusTrap$), withLatestFrom(lastFocusedElement$), map((/** + * @param {?} arr + * @return {?} + */ + function (arr) { return (/** @type {?} */ (arr[1])); }))) + .subscribe((/** + * @param {?} lastFocusedElement + * @return {?} + */ + function (lastFocusedElement) { return lastFocusedElement.focus(); })); + } +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9jdXMtdHJhcC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbInV0aWwvZm9jdXMtdHJhcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQWEsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXRFLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxhQUFhLENBQUM7O0lBRzFCLDJCQUEyQixHQUFHO0lBQ2xDLFNBQVMsRUFBRSx3QkFBd0IsRUFBRSw0Q0FBNEMsRUFBRSx3QkFBd0I7SUFDM0csMEJBQTBCLEVBQUUsbUJBQW1CLEVBQUUsaUNBQWlDO0NBQ25GLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQzs7Ozs7O0FBS1osTUFBTSxVQUFVLDRCQUE0QixDQUFDLE9BQW9COztRQUN6RCxJQUFJLEdBQ04sS0FBSyxDQUFDLElBQUksQ0FBQyxtQkFBQSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsMkJBQTJCLENBQUMsRUFBMkIsQ0FBQztTQUN2RixNQUFNOzs7O0lBQUMsVUFBQSxFQUFFLElBQUksT0FBQSxFQUFFLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQyxFQUFsQixDQUFrQixFQUFDO0lBQ3pDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQyxDQUFDOzs7Ozs7Ozs7Ozs7O0FBYUQsTUFBTSxLQUFPLFlBQVk7Ozs7OztBQUFHLFVBQUMsT0FBb0IsRUFBRSxjQUErQixFQUFFLGNBQXNCO0lBQXRCLCtCQUFBLEVBQUEsc0JBQXNCOzs7UUFFbEcsbUJBQW1CLEdBQ3JCLFNBQVMsQ0FBYSxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsRUFBRSxHQUFHOzs7O0lBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsTUFBTSxFQUFSLENBQVEsRUFBQyxDQUFDO0lBRWpHLDZCQUE2QjtJQUM3QixTQUFTLENBQWdCLE9BQU8sRUFBRSxTQUFTLENBQUM7U0FDdkMsSUFBSSxDQUNELFNBQVMsQ0FBQyxjQUFjLENBQUM7SUFDekIsNkJBQTZCO0lBQzdCLE1BQU07Ozs7SUFBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsQ0FBQyxLQUFLLEtBQUssR0FBRyxDQUFDLEdBQUcsRUFBbkIsQ0FBbUIsRUFBQztJQUNoQyw0QkFBNEI7SUFDNUIsY0FBYyxDQUFDLG1CQUFtQixDQUFDLENBQUM7U0FDdkMsU0FBUzs7OztJQUFDLFVBQUMsRUFBMEI7WUFBMUIsMEJBQTBCLEVBQXpCLGdCQUFRLEVBQUUsc0JBQWM7UUFDOUIsSUFBQSw2REFBcUQsRUFBcEQsYUFBSyxFQUFFLFlBQTZDO1FBRTFELElBQUksQ0FBQyxjQUFjLEtBQUssS0FBSyxJQUFJLGNBQWMsS0FBSyxPQUFPLENBQUMsSUFBSSxRQUFRLENBQUMsUUFBUSxFQUFFO1lBQ2pGLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNiLFFBQVEsQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUMzQjtRQUVELElBQUksY0FBYyxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUU7WUFDakQsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2QsUUFBUSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQzNCO0lBQ0gsQ0FBQyxFQUFDLENBQUM7SUFFUCxlQUFlO0lBQ2YsSUFBSSxjQUFjLEVBQUU7UUFDbEIsU0FBUyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUM7YUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsRUFBRSxjQUFjLENBQUMsbUJBQW1CLENBQUMsRUFBRSxHQUFHOzs7O1FBQUMsVUFBQSxHQUFHLFdBQUksbUJBQUEsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFlLEdBQUEsRUFBQyxDQUFDO2FBQ3ZHLFNBQVM7Ozs7UUFBQyxVQUFBLGtCQUFrQixJQUFJLE9BQUEsa0JBQWtCLENBQUMsS0FBSyxFQUFFLEVBQTFCLENBQTBCLEVBQUMsQ0FBQztLQUNsRTtBQUNILENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZnJvbUV2ZW50LCBPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZmlsdGVyLCBtYXAsIHRha2VVbnRpbCwgd2l0aExhdGVzdEZyb219IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtLZXl9IGZyb20gJy4uL3V0aWwva2V5JztcblxuXG5jb25zdCBGT0NVU0FCTEVfRUxFTUVOVFNfU0VMRUNUT1IgPSBbXG4gICdhW2hyZWZdJywgJ2J1dHRvbjpub3QoW2Rpc2FibGVkXSknLCAnaW5wdXQ6bm90KFtkaXNhYmxlZF0pOm5vdChbdHlwZT1cImhpZGRlblwiXSknLCAnc2VsZWN0Om5vdChbZGlzYWJsZWRdKScsXG4gICd0ZXh0YXJlYTpub3QoW2Rpc2FibGVkXSknLCAnW2NvbnRlbnRlZGl0YWJsZV0nLCAnW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJ1xuXS5qb2luKCcsICcpO1xuXG4vKipcbiAqIFJldHVybnMgZmlyc3QgYW5kIGxhc3QgZm9jdXNhYmxlIGVsZW1lbnRzIGluc2lkZSBvZiBhIGdpdmVuIGVsZW1lbnQgYmFzZWQgb24gc3BlY2lmaWMgQ1NTIHNlbGVjdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb2N1c2FibGVCb3VuZGFyeUVsZW1lbnRzKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRbXSB7XG4gIGNvbnN0IGxpc3Q6IEhUTUxFbGVtZW50W10gPVxuICAgICAgQXJyYXkuZnJvbShlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoRk9DVVNBQkxFX0VMRU1FTlRTX1NFTEVDVE9SKSBhcyBOb2RlTGlzdE9mPEhUTUxFbGVtZW50PilcbiAgICAgICAgICAuZmlsdGVyKGVsID0+IGVsLnRhYkluZGV4ICE9PSAtMSk7XG4gIHJldHVybiBbbGlzdFswXSwgbGlzdFtsaXN0Lmxlbmd0aCAtIDFdXTtcbn1cblxuLyoqXG4gKiBGdW5jdGlvbiB0aGF0IGVuZm9yY2VzIGJyb3dzZXIgZm9jdXMgdG8gYmUgdHJhcHBlZCBpbnNpZGUgYSBET00gZWxlbWVudC5cbiAqXG4gKiBXb3JrcyBvbmx5IGZvciBjbGlja3MgaW5zaWRlIHRoZSBlbGVtZW50IGFuZCBuYXZpZ2F0aW9uIHdpdGggJ1RhYicsIGlnbm9yaW5nIGNsaWNrcyBvdXRzaWRlIG9mIHRoZSBlbGVtZW50XG4gKlxuICogQHBhcmFtIGVsZW1lbnQgVGhlIGVsZW1lbnQgYXJvdW5kIHdoaWNoIGZvY3VzIHdpbGwgYmUgdHJhcHBlZCBpbnNpZGVcbiAqIEBwYXJhbSBzdG9wRm9jdXNUcmFwJCBUaGUgb2JzZXJ2YWJsZSBzdHJlYW0uIFdoZW4gY29tcGxldGVkIHRoZSBmb2N1cyB0cmFwIHdpbGwgY2xlYW4gdXAgbGlzdGVuZXJzXG4gKiBhbmQgZnJlZSBpbnRlcm5hbCByZXNvdXJjZXNcbiAqIEBwYXJhbSByZWZvY3VzT25DbGljayBQdXQgdGhlIGZvY3VzIGJhY2sgdG8gdGhlIGxhc3QgZm9jdXNlZCBlbGVtZW50IHdoZW5ldmVyIGEgY2xpY2sgb2NjdXJzIG9uIGVsZW1lbnQgKGRlZmF1bHQgdG9cbiAqIGZhbHNlKVxuICovXG5leHBvcnQgY29uc3QgbmdiRm9jdXNUcmFwID0gKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBzdG9wRm9jdXNUcmFwJDogT2JzZXJ2YWJsZTxhbnk+LCByZWZvY3VzT25DbGljayA9IGZhbHNlKSA9PiB7XG4gIC8vIGxhc3QgZm9jdXNlZCBlbGVtZW50XG4gIGNvbnN0IGxhc3RGb2N1c2VkRWxlbWVudCQgPVxuICAgICAgZnJvbUV2ZW50PEZvY3VzRXZlbnQ+KGVsZW1lbnQsICdmb2N1c2luJykucGlwZSh0YWtlVW50aWwoc3RvcEZvY3VzVHJhcCQpLCBtYXAoZSA9PiBlLnRhcmdldCkpO1xuXG4gIC8vICd0YWInIC8gJ3NoaWZ0K3RhYicgc3RyZWFtXG4gIGZyb21FdmVudDxLZXlib2FyZEV2ZW50PihlbGVtZW50LCAna2V5ZG93bicpXG4gICAgICAucGlwZShcbiAgICAgICAgICB0YWtlVW50aWwoc3RvcEZvY3VzVHJhcCQpLFxuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlOmRlcHJlY2F0aW9uXG4gICAgICAgICAgZmlsdGVyKGUgPT4gZS53aGljaCA9PT0gS2V5LlRhYiksXG4gICAgICAgICAgLy8gdHNsaW50OmVuYWJsZTpkZXByZWNhdGlvblxuICAgICAgICAgIHdpdGhMYXRlc3RGcm9tKGxhc3RGb2N1c2VkRWxlbWVudCQpKVxuICAgICAgLnN1YnNjcmliZSgoW3RhYkV2ZW50LCBmb2N1c2VkRWxlbWVudF0pID0+IHtcbiAgICAgICAgY29uc3RbZmlyc3QsIGxhc3RdID0gZ2V0Rm9jdXNhYmxlQm91bmRhcnlFbGVtZW50cyhlbGVtZW50KTtcblxuICAgICAgICBpZiAoKGZvY3VzZWRFbGVtZW50ID09PSBmaXJzdCB8fCBmb2N1c2VkRWxlbWVudCA9PT0gZWxlbWVudCkgJiYgdGFiRXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICBsYXN0LmZvY3VzKCk7XG4gICAgICAgICAgdGFiRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmb2N1c2VkRWxlbWVudCA9PT0gbGFzdCAmJiAhdGFiRXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICBmaXJzdC5mb2N1cygpO1xuICAgICAgICAgIHRhYkV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gIC8vIGluc2lkZSBjbGlja1xuICBpZiAocmVmb2N1c09uQ2xpY2spIHtcbiAgICBmcm9tRXZlbnQoZWxlbWVudCwgJ2NsaWNrJylcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHN0b3BGb2N1c1RyYXAkKSwgd2l0aExhdGVzdEZyb20obGFzdEZvY3VzZWRFbGVtZW50JCksIG1hcChhcnIgPT4gYXJyWzFdIGFzIEhUTUxFbGVtZW50KSlcbiAgICAgICAgLnN1YnNjcmliZShsYXN0Rm9jdXNlZEVsZW1lbnQgPT4gbGFzdEZvY3VzZWRFbGVtZW50LmZvY3VzKCkpO1xuICB9XG59O1xuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/util/key.js b/dist/sunbird-ui-components/esm5/util/key.js new file mode 100644 index 0000000..3fbaab8 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/util/key.js @@ -0,0 +1,33 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @enum {number} */ +var Key = { + Tab: 9, + Enter: 13, + Escape: 27, + Space: 32, + PageUp: 33, + PageDown: 34, + End: 35, + Home: 36, + ArrowLeft: 37, + ArrowUp: 38, + ArrowRight: 39, + ArrowDown: 40, +}; +export { Key }; +Key[Key.Tab] = 'Tab'; +Key[Key.Enter] = 'Enter'; +Key[Key.Escape] = 'Escape'; +Key[Key.Space] = 'Space'; +Key[Key.PageUp] = 'PageUp'; +Key[Key.PageDown] = 'PageDown'; +Key[Key.End] = 'End'; +Key[Key.Home] = 'Home'; +Key[Key.ArrowLeft] = 'ArrowLeft'; +Key[Key.ArrowUp] = 'ArrowUp'; +Key[Key.ArrowRight] = 'ArrowRight'; +Key[Key.ArrowDown] = 'ArrowDown'; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsidXRpbC9rZXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0lBQ0UsTUFBTztJQUNQLFNBQVU7SUFDVixVQUFXO0lBQ1gsU0FBVTtJQUNWLFVBQVc7SUFDWCxZQUFhO0lBQ2IsT0FBUTtJQUNSLFFBQVM7SUFDVCxhQUFjO0lBQ2QsV0FBWTtJQUNaLGNBQWU7SUFDZixhQUFjIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGVudW0gS2V5IHtcbiAgVGFiID0gOSxcbiAgRW50ZXIgPSAxMyxcbiAgRXNjYXBlID0gMjcsXG4gIFNwYWNlID0gMzIsXG4gIFBhZ2VVcCA9IDMzLFxuICBQYWdlRG93biA9IDM0LFxuICBFbmQgPSAzNSxcbiAgSG9tZSA9IDM2LFxuICBBcnJvd0xlZnQgPSAzNyxcbiAgQXJyb3dVcCA9IDM4LFxuICBBcnJvd1JpZ2h0ID0gMzksXG4gIEFycm93RG93biA9IDQwXG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/util/popup.js b/dist/sunbird-ui-components/esm5/util/popup.js new file mode 100644 index 0000000..e9f7c63 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/util/popup.js @@ -0,0 +1,146 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { TemplateRef } from '@angular/core'; +var ContentRef = /** @class */ (function () { + function ContentRef(nodes, viewRef, componentRef) { + this.nodes = nodes; + this.viewRef = viewRef; + this.componentRef = componentRef; + } + return ContentRef; +}()); +export { ContentRef }; +if (false) { + /** @type {?} */ + ContentRef.prototype.nodes; + /** @type {?} */ + ContentRef.prototype.viewRef; + /** @type {?} */ + ContentRef.prototype.componentRef; +} +/** + * @template T + */ +var /** + * @template T + */ +PopupService = /** @class */ (function () { + function PopupService(_type, _injector, _viewContainerRef, _renderer, _componentFactoryResolver, _applicationRef) { + this._type = _type; + this._injector = _injector; + this._viewContainerRef = _viewContainerRef; + this._renderer = _renderer; + this._componentFactoryResolver = _componentFactoryResolver; + this._applicationRef = _applicationRef; + } + /** + * @param {?=} content + * @param {?=} context + * @return {?} + */ + PopupService.prototype.open = /** + * @param {?=} content + * @param {?=} context + * @return {?} + */ + function (content, context) { + if (!this._windowRef) { + this._contentRef = this._getContentRef(content, context); + this._windowRef = this._viewContainerRef.createComponent(this._componentFactoryResolver.resolveComponentFactory(this._type), 0, this._injector, this._contentRef.nodes); + } + return this._windowRef; + }; + /** + * @return {?} + */ + PopupService.prototype.close = /** + * @return {?} + */ + function () { + if (this._windowRef) { + this._viewContainerRef.remove(this._viewContainerRef.indexOf(this._windowRef.hostView)); + this._windowRef = null; + if (this._contentRef.viewRef) { + this._applicationRef.detachView(this._contentRef.viewRef); + this._contentRef.viewRef.destroy(); + this._contentRef = null; + } + } + }; + /** + * @private + * @param {?} content + * @param {?=} context + * @return {?} + */ + PopupService.prototype._getContentRef = /** + * @private + * @param {?} content + * @param {?=} context + * @return {?} + */ + function (content, context) { + if (!content) { + return new ContentRef([]); + } + else if (content instanceof TemplateRef) { + /** @type {?} */ + var viewRef = content.createEmbeddedView(context); + this._applicationRef.attachView(viewRef); + return new ContentRef([viewRef.rootNodes], viewRef); + } + else { + return new ContentRef([[this._renderer.createText("" + content)]]); + } + }; + return PopupService; +}()); +/** + * @template T + */ +export { PopupService }; +if (false) { + /** + * @type {?} + * @private + */ + PopupService.prototype._windowRef; + /** + * @type {?} + * @private + */ + PopupService.prototype._contentRef; + /** + * @type {?} + * @private + */ + PopupService.prototype._type; + /** + * @type {?} + * @private + */ + PopupService.prototype._injector; + /** + * @type {?} + * @private + */ + PopupService.prototype._viewContainerRef; + /** + * @type {?} + * @private + */ + PopupService.prototype._renderer; + /** + * @type {?} + * @private + */ + PopupService.prototype._componentFactoryResolver; + /** + * @type {?} + * @private + */ + PopupService.prototype._applicationRef; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wdXAuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJ1dGlsL3BvcHVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBRUwsV0FBVyxFQU9aLE1BQU0sZUFBZSxDQUFDO0FBRXZCO0lBQ0Usb0JBQW1CLEtBQVksRUFBUyxPQUFpQixFQUFTLFlBQWdDO1FBQS9FLFVBQUssR0FBTCxLQUFLLENBQU87UUFBUyxZQUFPLEdBQVAsT0FBTyxDQUFVO1FBQVMsaUJBQVksR0FBWixZQUFZLENBQW9CO0lBQUcsQ0FBQztJQUN4RyxpQkFBQztBQUFELENBQUMsQUFGRCxJQUVDOzs7O0lBRGEsMkJBQW1COztJQUFFLDZCQUF3Qjs7SUFBRSxrQ0FBdUM7Ozs7O0FBR3BHOzs7O0lBSUUsc0JBQ1ksS0FBVSxFQUFVLFNBQW1CLEVBQVUsaUJBQW1DLEVBQ3BGLFNBQW9CLEVBQVUseUJBQW1ELEVBQ2pGLGVBQStCO1FBRi9CLFVBQUssR0FBTCxLQUFLLENBQUs7UUFBVSxjQUFTLEdBQVQsU0FBUyxDQUFVO1FBQVUsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFrQjtRQUNwRixjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQVUsOEJBQXlCLEdBQXpCLHlCQUF5QixDQUEwQjtRQUNqRixvQkFBZSxHQUFmLGVBQWUsQ0FBZ0I7SUFBRyxDQUFDOzs7Ozs7SUFFL0MsMkJBQUk7Ozs7O0lBQUosVUFBSyxPQUFtQyxFQUFFLE9BQWE7UUFDckQsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDcEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQ3BELElBQUksQ0FBQyx5QkFBeUIsQ0FBQyx1QkFBdUIsQ0FBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQ3hGLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDN0I7UUFFRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQzs7OztJQUVELDRCQUFLOzs7SUFBTDtRQUNFLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ3hGLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBRXZCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzFELElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNuQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQzthQUN6QjtTQUNGO0lBQ0gsQ0FBQzs7Ozs7OztJQUVPLHFDQUFjOzs7Ozs7SUFBdEIsVUFBdUIsT0FBa0MsRUFBRSxPQUFhO1FBQ3RFLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDWixPQUFPLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQzNCO2FBQU0sSUFBSSxPQUFPLFlBQVksV0FBVyxFQUFFOztnQkFDbkMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUM7WUFDbkQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDekMsT0FBTyxJQUFJLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztTQUNyRDthQUFNO1lBQ0wsT0FBTyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsS0FBRyxPQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNwRTtJQUNILENBQUM7SUFDSCxtQkFBQztBQUFELENBQUMsQUE1Q0QsSUE0Q0M7Ozs7Ozs7Ozs7SUEzQ0Msa0NBQW9DOzs7OztJQUNwQyxtQ0FBZ0M7Ozs7O0lBRzVCLDZCQUFrQjs7Ozs7SUFBRSxpQ0FBMkI7Ozs7O0lBQUUseUNBQTJDOzs7OztJQUM1RixpQ0FBNEI7Ozs7O0lBQUUsaURBQTJEOzs7OztJQUN6Rix1Q0FBdUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBJbmplY3RvcixcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdSZWYsXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIFJlbmRlcmVyMixcbiAgQ29tcG9uZW50UmVmLFxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gIEFwcGxpY2F0aW9uUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgY2xhc3MgQ29udGVudFJlZiB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBub2RlczogYW55W10sIHB1YmxpYyB2aWV3UmVmPzogVmlld1JlZiwgcHVibGljIGNvbXBvbmVudFJlZj86IENvbXBvbmVudFJlZjxhbnk+KSB7fVxufVxuXG5leHBvcnQgY2xhc3MgUG9wdXBTZXJ2aWNlPFQ+IHtcbiAgcHJpdmF0ZSBfd2luZG93UmVmOiBDb21wb25lbnRSZWY8VD47XG4gIHByaXZhdGUgX2NvbnRlbnRSZWY6IENvbnRlbnRSZWY7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICBwcml2YXRlIF90eXBlOiBhbnksIHByaXZhdGUgX2luamVjdG9yOiBJbmplY3RvciwgcHJpdmF0ZSBfdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICAgIHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjIsIHByaXZhdGUgX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgICAgcHJpdmF0ZSBfYXBwbGljYXRpb25SZWY6IEFwcGxpY2F0aW9uUmVmKSB7fVxuXG4gIG9wZW4oY29udGVudD86IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4sIGNvbnRleHQ/OiBhbnkpOiBDb21wb25lbnRSZWY8VD4ge1xuICAgIGlmICghdGhpcy5fd2luZG93UmVmKSB7XG4gICAgICB0aGlzLl9jb250ZW50UmVmID0gdGhpcy5fZ2V0Q29udGVudFJlZihjb250ZW50LCBjb250ZXh0KTtcbiAgICAgIHRoaXMuX3dpbmRvd1JlZiA9IHRoaXMuX3ZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KFxuICAgICAgICAgIHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeTxUPih0aGlzLl90eXBlKSwgMCwgdGhpcy5faW5qZWN0b3IsXG4gICAgICAgICAgdGhpcy5fY29udGVudFJlZi5ub2Rlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3dpbmRvd1JlZjtcbiAgfVxuXG4gIGNsb3NlKCkge1xuICAgIGlmICh0aGlzLl93aW5kb3dSZWYpIHtcbiAgICAgIHRoaXMuX3ZpZXdDb250YWluZXJSZWYucmVtb3ZlKHRoaXMuX3ZpZXdDb250YWluZXJSZWYuaW5kZXhPZih0aGlzLl93aW5kb3dSZWYuaG9zdFZpZXcpKTtcbiAgICAgIHRoaXMuX3dpbmRvd1JlZiA9IG51bGw7XG5cbiAgICAgIGlmICh0aGlzLl9jb250ZW50UmVmLnZpZXdSZWYpIHtcbiAgICAgICAgdGhpcy5fYXBwbGljYXRpb25SZWYuZGV0YWNoVmlldyh0aGlzLl9jb250ZW50UmVmLnZpZXdSZWYpO1xuICAgICAgICB0aGlzLl9jb250ZW50UmVmLnZpZXdSZWYuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLl9jb250ZW50UmVmID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9nZXRDb250ZW50UmVmKGNvbnRlbnQ6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4sIGNvbnRleHQ/OiBhbnkpOiBDb250ZW50UmVmIHtcbiAgICBpZiAoIWNvbnRlbnQpIHtcbiAgICAgIHJldHVybiBuZXcgQ29udGVudFJlZihbXSk7XG4gICAgfSBlbHNlIGlmIChjb250ZW50IGluc3RhbmNlb2YgVGVtcGxhdGVSZWYpIHtcbiAgICAgIGNvbnN0IHZpZXdSZWYgPSBjb250ZW50LmNyZWF0ZUVtYmVkZGVkVmlldyhjb250ZXh0KTtcbiAgICAgIHRoaXMuX2FwcGxpY2F0aW9uUmVmLmF0dGFjaFZpZXcodmlld1JlZik7XG4gICAgICByZXR1cm4gbmV3IENvbnRlbnRSZWYoW3ZpZXdSZWYucm9vdE5vZGVzXSwgdmlld1JlZik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgQ29udGVudFJlZihbW3RoaXMuX3JlbmRlcmVyLmNyZWF0ZVRleHQoYCR7Y29udGVudH1gKV1dKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/util/positioning.js b/dist/sunbird-ui-components/esm5/util/positioning.js new file mode 100644 index 0000000..7e0f73a --- /dev/null +++ b/dist/sunbird-ui-components/esm5/util/positioning.js @@ -0,0 +1,384 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import * as tslib_1 from "tslib"; +// previous version: +// https://github.com/angular-ui/bootstrap/blob/07c31d0731f7cb068a1932b8e01d2312b796b4ec/src/position/position.js +var +// previous version: +// https://github.com/angular-ui/bootstrap/blob/07c31d0731f7cb068a1932b8e01d2312b796b4ec/src/position/position.js +Positioning = /** @class */ (function () { + function Positioning() { + } + /** + * @private + * @param {?} element + * @return {?} + */ + Positioning.prototype.getAllStyles = /** + * @private + * @param {?} element + * @return {?} + */ + function (element) { return window.getComputedStyle(element); }; + /** + * @private + * @param {?} element + * @param {?} prop + * @return {?} + */ + Positioning.prototype.getStyle = /** + * @private + * @param {?} element + * @param {?} prop + * @return {?} + */ + function (element, prop) { return this.getAllStyles(element)[prop]; }; + /** + * @private + * @param {?} element + * @return {?} + */ + Positioning.prototype.isStaticPositioned = /** + * @private + * @param {?} element + * @return {?} + */ + function (element) { + return (this.getStyle(element, 'position') || 'static') === 'static'; + }; + /** + * @private + * @param {?} element + * @return {?} + */ + Positioning.prototype.offsetParent = /** + * @private + * @param {?} element + * @return {?} + */ + function (element) { + /** @type {?} */ + var offsetParentEl = (/** @type {?} */ (element.offsetParent)) || document.documentElement; + while (offsetParentEl && offsetParentEl !== document.documentElement && this.isStaticPositioned(offsetParentEl)) { + offsetParentEl = (/** @type {?} */ (offsetParentEl.offsetParent)); + } + return offsetParentEl || document.documentElement; + }; + /** + * @param {?} element + * @param {?=} round + * @return {?} + */ + Positioning.prototype.position = /** + * @param {?} element + * @param {?=} round + * @return {?} + */ + function (element, round) { + if (round === void 0) { round = true; } + /** @type {?} */ + var elPosition; + /** @type {?} */ + var parentOffset = { width: 0, height: 0, top: 0, bottom: 0, left: 0, right: 0 }; + if (this.getStyle(element, 'position') === 'fixed') { + elPosition = element.getBoundingClientRect(); + elPosition = { + top: elPosition.top, + bottom: elPosition.bottom, + left: elPosition.left, + right: elPosition.right, + height: elPosition.height, + width: elPosition.width + }; + } + else { + /** @type {?} */ + var offsetParentEl = this.offsetParent(element); + elPosition = this.offset(element, false); + if (offsetParentEl !== document.documentElement) { + parentOffset = this.offset(offsetParentEl, false); + } + parentOffset.top += offsetParentEl.clientTop; + parentOffset.left += offsetParentEl.clientLeft; + } + elPosition.top -= parentOffset.top; + elPosition.bottom -= parentOffset.top; + elPosition.left -= parentOffset.left; + elPosition.right -= parentOffset.left; + if (round) { + elPosition.top = Math.round(elPosition.top); + elPosition.bottom = Math.round(elPosition.bottom); + elPosition.left = Math.round(elPosition.left); + elPosition.right = Math.round(elPosition.right); + } + return elPosition; + }; + /** + * @param {?} element + * @param {?=} round + * @return {?} + */ + Positioning.prototype.offset = /** + * @param {?} element + * @param {?=} round + * @return {?} + */ + function (element, round) { + if (round === void 0) { round = true; } + /** @type {?} */ + var elBcr = element.getBoundingClientRect(); + /** @type {?} */ + var viewportOffset = { + top: window.pageYOffset - document.documentElement.clientTop, + left: window.pageXOffset - document.documentElement.clientLeft + }; + /** @type {?} */ + var elOffset = { + height: elBcr.height || element.offsetHeight, + width: elBcr.width || element.offsetWidth, + top: elBcr.top + viewportOffset.top, + bottom: elBcr.bottom + viewportOffset.top, + left: elBcr.left + viewportOffset.left, + right: elBcr.right + viewportOffset.left + }; + if (round) { + elOffset.height = Math.round(elOffset.height); + elOffset.width = Math.round(elOffset.width); + elOffset.top = Math.round(elOffset.top); + elOffset.bottom = Math.round(elOffset.bottom); + elOffset.left = Math.round(elOffset.left); + elOffset.right = Math.round(elOffset.right); + } + return elOffset; + }; + /* + Return false if the element to position is outside the viewport + */ + /* + Return false if the element to position is outside the viewport + */ + /** + * @param {?} hostElement + * @param {?} targetElement + * @param {?} placement + * @param {?=} appendToBody + * @return {?} + */ + Positioning.prototype.positionElements = /* + Return false if the element to position is outside the viewport + */ + /** + * @param {?} hostElement + * @param {?} targetElement + * @param {?} placement + * @param {?=} appendToBody + * @return {?} + */ + function (hostElement, targetElement, placement, appendToBody) { + var _a = tslib_1.__read(placement.split('-'), 2), _b = _a[0], placementPrimary = _b === void 0 ? 'top' : _b, _c = _a[1], placementSecondary = _c === void 0 ? 'center' : _c; + /** @type {?} */ + var hostElPosition = appendToBody ? this.offset(hostElement, false) : this.position(hostElement, false); + /** @type {?} */ + var targetElStyles = this.getAllStyles(targetElement); + /** @type {?} */ + var marginTop = parseFloat(targetElStyles.marginTop); + /** @type {?} */ + var marginBottom = parseFloat(targetElStyles.marginBottom); + /** @type {?} */ + var marginLeft = parseFloat(targetElStyles.marginLeft); + /** @type {?} */ + var marginRight = parseFloat(targetElStyles.marginRight); + /** @type {?} */ + var topPosition = 0; + /** @type {?} */ + var leftPosition = 0; + switch (placementPrimary) { + case 'top': + topPosition = (hostElPosition.top - (targetElement.offsetHeight + marginTop + marginBottom)); + break; + case 'bottom': + topPosition = (hostElPosition.top + hostElPosition.height); + break; + case 'left': + leftPosition = (hostElPosition.left - (targetElement.offsetWidth + marginLeft + marginRight)); + break; + case 'right': + leftPosition = (hostElPosition.left + hostElPosition.width); + break; + } + switch (placementSecondary) { + case 'top': + topPosition = hostElPosition.top; + break; + case 'bottom': + topPosition = hostElPosition.top + hostElPosition.height - targetElement.offsetHeight; + break; + case 'left': + leftPosition = hostElPosition.left; + break; + case 'right': + leftPosition = hostElPosition.left + hostElPosition.width - targetElement.offsetWidth; + break; + case 'center': + if (placementPrimary === 'top' || placementPrimary === 'bottom') { + leftPosition = (hostElPosition.left + hostElPosition.width / 2 - targetElement.offsetWidth / 2); + } + else { + topPosition = (hostElPosition.top + hostElPosition.height / 2 - targetElement.offsetHeight / 2); + } + break; + } + /// The translate3d/gpu acceleration render a blurry text on chrome, the next line is commented until a browser fix + // targetElement.style.transform = `translate3d(${Math.round(leftPosition)}px, ${Math.floor(topPosition)}px, 0px)`; + targetElement.style.transform = "translate(" + Math.round(leftPosition) + "px, " + Math.round(topPosition) + "px)"; + // Check if the targetElement is inside the viewport + /** @type {?} */ + var targetElBCR = targetElement.getBoundingClientRect(); + /** @type {?} */ + var html = document.documentElement; + /** @type {?} */ + var windowHeight = window.innerHeight || html.clientHeight; + /** @type {?} */ + var windowWidth = window.innerWidth || html.clientWidth; + return targetElBCR.left >= 0 && targetElBCR.top >= 0 && targetElBCR.right <= windowWidth && + targetElBCR.bottom <= windowHeight; + }; + return Positioning; +}()); +// previous version: +// https://github.com/angular-ui/bootstrap/blob/07c31d0731f7cb068a1932b8e01d2312b796b4ec/src/position/position.js +export { Positioning }; +/** @type {?} */ +var placementSeparator = /\s+/; +/** @type {?} */ +var positionService = new Positioning(); +/* + * Accept the placement array and applies the appropriate placement dependent on the viewport. + * Returns the applied placement. + * In case of auto placement, placements are selected in order + * 'top', 'bottom', 'left', 'right', + * 'top-left', 'top-right', + * 'bottom-left', 'bottom-right', + * 'left-top', 'left-bottom', + * 'right-top', 'right-bottom'. + * */ +/** + * @param {?} hostElement + * @param {?} targetElement + * @param {?} placement + * @param {?=} appendToBody + * @param {?=} baseClass + * @return {?} + */ +export function positionElements(hostElement, targetElement, placement, appendToBody, baseClass) { + var e_1, _a; + /** @type {?} */ + var placementVals = Array.isArray(placement) ? placement : (/** @type {?} */ (placement.split(placementSeparator))); + /** @type {?} */ + var allowedPlacements = [ + 'top', 'bottom', 'left', 'right', 'top-left', 'top-right', 'bottom-left', 'bottom-right', 'left-top', 'left-bottom', + 'right-top', 'right-bottom' + ]; + /** @type {?} */ + var classList = targetElement.classList; + /** @type {?} */ + var addClassesToTarget = (/** + * @param {?} targetPlacement + * @return {?} + */ + function (targetPlacement) { + var _a = tslib_1.__read(targetPlacement.split('-'), 2), primary = _a[0], secondary = _a[1]; + /** @type {?} */ + var classes = []; + if (baseClass) { + classes.push(baseClass + "-" + primary); + if (secondary) { + classes.push(baseClass + "-" + primary + "-" + secondary); + } + classes.forEach((/** + * @param {?} classname + * @return {?} + */ + function (classname) { classList.add(classname); })); + } + return classes; + }); + // Remove old placement classes to avoid issues + if (baseClass) { + allowedPlacements.forEach((/** + * @param {?} placementToRemove + * @return {?} + */ + function (placementToRemove) { classList.remove(baseClass + "-" + placementToRemove); })); + } + // replace auto placement with other placements + /** @type {?} */ + var hasAuto = placementVals.findIndex((/** + * @param {?} val + * @return {?} + */ + function (val) { return val === 'auto'; })); + if (hasAuto >= 0) { + allowedPlacements.forEach((/** + * @param {?} obj + * @return {?} + */ + function (obj) { + if (placementVals.find((/** + * @param {?} val + * @return {?} + */ + function (val) { return val.search('^' + obj) !== -1; })) == null) { + placementVals.splice(hasAuto++, 1, (/** @type {?} */ (obj))); + } + })); + } + // coordinates where to position + // Required for transform: + /** @type {?} */ + var style = targetElement.style; + style.position = 'absolute'; + style.top = '0'; + style.left = '0'; + style['will-change'] = 'transform'; + /** @type {?} */ + var testPlacement; + /** @type {?} */ + var isInViewport = false; + try { + for (var placementVals_1 = tslib_1.__values(placementVals), placementVals_1_1 = placementVals_1.next(); !placementVals_1_1.done; placementVals_1_1 = placementVals_1.next()) { + testPlacement = placementVals_1_1.value; + /** @type {?} */ + var addedClasses = addClassesToTarget(testPlacement); + if (positionService.positionElements(hostElement, targetElement, testPlacement, appendToBody)) { + isInViewport = true; + break; + } + // Remove the baseClasses for further calculation + if (baseClass) { + addedClasses.forEach((/** + * @param {?} classname + * @return {?} + */ + function (classname) { classList.remove(classname); })); + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (placementVals_1_1 && !placementVals_1_1.done && (_a = placementVals_1.return)) _a.call(placementVals_1); + } + finally { if (e_1) throw e_1.error; } + } + if (!isInViewport) { + // If nothing match, the first placement is the default one + testPlacement = placementVals[0]; + addClassesToTarget(testPlacement); + positionService.positionElements(hostElement, targetElement, testPlacement, appendToBody); + } + return testPlacement; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zaXRpb25pbmcuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJ1dGlsL3Bvc2l0aW9uaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFFQTs7OztJQUFBO0lBNkpBLENBQUM7Ozs7OztJQTVKUyxrQ0FBWTs7Ozs7SUFBcEIsVUFBcUIsT0FBb0IsSUFBSSxPQUFPLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Ozs7Ozs7SUFFL0UsOEJBQVE7Ozs7OztJQUFoQixVQUFpQixPQUFvQixFQUFFLElBQVksSUFBWSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7Ozs7SUFFakcsd0NBQWtCOzs7OztJQUExQixVQUEyQixPQUFvQjtRQUM3QyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLElBQUksUUFBUSxDQUFDLEtBQUssUUFBUSxDQUFDO0lBQ3ZFLENBQUM7Ozs7OztJQUVPLGtDQUFZOzs7OztJQUFwQixVQUFxQixPQUFvQjs7WUFDbkMsY0FBYyxHQUFHLG1CQUFhLE9BQU8sQ0FBQyxZQUFZLEVBQUEsSUFBSSxRQUFRLENBQUMsZUFBZTtRQUVsRixPQUFPLGNBQWMsSUFBSSxjQUFjLEtBQUssUUFBUSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFDL0csY0FBYyxHQUFHLG1CQUFhLGNBQWMsQ0FBQyxZQUFZLEVBQUEsQ0FBQztTQUMzRDtRQUVELE9BQU8sY0FBYyxJQUFJLFFBQVEsQ0FBQyxlQUFlLENBQUM7SUFDcEQsQ0FBQzs7Ozs7O0lBRUQsOEJBQVE7Ozs7O0lBQVIsVUFBUyxPQUFvQixFQUFFLEtBQVk7UUFBWixzQkFBQSxFQUFBLFlBQVk7O1lBQ3JD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LEdBQUcsa0JBQWtCLENBQUMsYUFBYSxDQUFDO1lBRXBELElBQUksZUFBZSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFlBQVksQ0FBQyxFQUFFO2dCQUM3RixZQUFZLEdBQUcsSUFBSSxDQUFDO2dCQUNwQixNQUFNO2FBQ1A7WUFFRCxpREFBaUQ7WUFDakQsSUFBSSxTQUFTLEVBQUU7Z0JBQ2IsWUFBWSxDQUFDLE9BQU87Ozs7Z0JBQUMsVUFBQyxTQUFTLElBQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDO2FBQ3ZFO1NBQ0Y7Ozs7Ozs7OztJQUVELElBQUksQ0FBQyxZQUFZLEVBQUU7UUFDakIsMkRBQTJEO1FBQzNELGFBQWEsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDbEMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFlBQVksQ0FBQyxDQUFDO0tBQzNGO0lBRUQsT0FBTyxhQUFhLENBQUM7QUFDdkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIHByZXZpb3VzIHZlcnNpb246XG4vLyBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci11aS9ib290c3RyYXAvYmxvYi8wN2MzMWQwNzMxZjdjYjA2OGExOTMyYjhlMDFkMjMxMmI3OTZiNGVjL3NyYy9wb3NpdGlvbi9wb3NpdGlvbi5qc1xuZXhwb3J0IGNsYXNzIFBvc2l0aW9uaW5nIHtcbiAgcHJpdmF0ZSBnZXRBbGxTdHlsZXMoZWxlbWVudDogSFRNTEVsZW1lbnQpIHsgcmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpOyB9XG5cbiAgcHJpdmF0ZSBnZXRTdHlsZShlbGVtZW50OiBIVE1MRWxlbWVudCwgcHJvcDogc3RyaW5nKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuZ2V0QWxsU3R5bGVzKGVsZW1lbnQpW3Byb3BdOyB9XG5cbiAgcHJpdmF0ZSBpc1N0YXRpY1Bvc2l0aW9uZWQoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMuZ2V0U3R5bGUoZWxlbWVudCwgJ3Bvc2l0aW9uJykgfHwgJ3N0YXRpYycpID09PSAnc3RhdGljJztcbiAgfVxuXG4gIHByaXZhdGUgb2Zmc2V0UGFyZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnQge1xuICAgIGxldCBvZmZzZXRQYXJlbnRFbCA9IDxIVE1MRWxlbWVudD5lbGVtZW50Lm9mZnNldFBhcmVudCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgICB3aGlsZSAob2Zmc2V0UGFyZW50RWwgJiYgb2Zmc2V0UGFyZW50RWwgIT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiB0aGlzLmlzU3RhdGljUG9zaXRpb25lZChvZmZzZXRQYXJlbnRFbCkpIHtcbiAgICAgIG9mZnNldFBhcmVudEVsID0gPEhUTUxFbGVtZW50Pm9mZnNldFBhcmVudEVsLm9mZnNldFBhcmVudDtcbiAgICB9XG5cbiAgICByZXR1cm4gb2Zmc2V0UGFyZW50RWwgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICB9XG5cbiAgcG9zaXRpb24oZWxlbWVudDogSFRNTEVsZW1lbnQsIHJvdW5kID0gdHJ1ZSk6IENsaWVudFJlY3Qge1xuICAgIGxldCBlbFBvc2l0aW9uOiBDbGllbnRSZWN0O1xuICAgIGxldCBwYXJlbnRPZmZzZXQ6IENsaWVudFJlY3QgPSB7d2lkdGg6IDAsIGhlaWdodDogMCwgdG9wOiAwLCBib3R0b206IDAsIGxlZnQ6IDAsIHJpZ2h0OiAwfTtcblxuICAgIGlmICh0aGlzLmdldFN0eWxlKGVsZW1lbnQsICdwb3NpdGlvbicpID09PSAnZml4ZWQnKSB7XG4gICAgICBlbFBvc2l0aW9uID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGVsUG9zaXRpb24gPSB7XG4gICAgICAgIHRvcDogZWxQb3NpdGlvbi50b3AsXG4gICAgICAgIGJvdHRvbTogZWxQb3NpdGlvbi5ib3R0b20sXG4gICAgICAgIGxlZnQ6IGVsUG9zaXRpb24ubGVmdCxcbiAgICAgICAgcmlnaHQ6IGVsUG9zaXRpb24ucmlnaHQsXG4gICAgICAgIGhlaWdodDogZWxQb3NpdGlvbi5oZWlnaHQsXG4gICAgICAgIHdpZHRoOiBlbFBvc2l0aW9uLndpZHRoXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBvZmZzZXRQYXJlbnRFbCA9IHRoaXMub2Zmc2V0UGFyZW50KGVsZW1lbnQpO1xuXG4gICAgICBlbFBvc2l0aW9uID0gdGhpcy5vZmZzZXQoZWxlbWVudCwgZmFsc2UpO1xuXG4gICAgICBpZiAob2Zmc2V0UGFyZW50RWwgIT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgICAgICBwYXJlbnRPZmZzZXQgPSB0aGlzLm9mZnNldChvZmZzZXRQYXJlbnRFbCwgZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICBwYXJlbnRPZmZzZXQudG9wICs9IG9mZnNldFBhcmVudEVsLmNsaWVudFRvcDtcbiAgICAgIHBhcmVudE9mZnNldC5sZWZ0ICs9IG9mZnNldFBhcmVudEVsLmNsaWVudExlZnQ7XG4gICAgfVxuXG4gICAgZWxQb3NpdGlvbi50b3AgLT0gcGFyZW50T2Zmc2V0LnRvcDtcbiAgICBlbFBvc2l0aW9uLmJvdHRvbSAtPSBwYXJlbnRPZmZzZXQudG9wO1xuICAgIGVsUG9zaXRpb24ubGVmdCAtPSBwYXJlbnRPZmZzZXQubGVmdDtcbiAgICBlbFBvc2l0aW9uLnJpZ2h0IC09IHBhcmVudE9mZnNldC5sZWZ0O1xuXG4gICAgaWYgKHJvdW5kKSB7XG4gICAgICBlbFBvc2l0aW9uLnRvcCA9IE1hdGgucm91bmQoZWxQb3NpdGlvbi50b3ApO1xuICAgICAgZWxQb3NpdGlvbi5ib3R0b20gPSBNYXRoLnJvdW5kKGVsUG9zaXRpb24uYm90dG9tKTtcbiAgICAgIGVsUG9zaXRpb24ubGVmdCA9IE1hdGgucm91bmQoZWxQb3NpdGlvbi5sZWZ0KTtcbiAgICAgIGVsUG9zaXRpb24ucmlnaHQgPSBNYXRoLnJvdW5kKGVsUG9zaXRpb24ucmlnaHQpO1xuICAgIH1cblxuICAgIHJldHVybiBlbFBvc2l0aW9uO1xuICB9XG5cbiAgb2Zmc2V0KGVsZW1lbnQ6IEhUTUxFbGVtZW50LCByb3VuZCA9IHRydWUpOiBDbGllbnRSZWN0IHtcbiAgICBjb25zdCBlbEJjciA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3Qgdmlld3BvcnRPZmZzZXQgPSB7XG4gICAgICB0b3A6IHdpbmRvdy5wYWdlWU9mZnNldCAtIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRUb3AsXG4gICAgICBsZWZ0OiB3aW5kb3cucGFnZVhPZmZzZXQgLSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50TGVmdFxuICAgIH07XG5cbiAgICBsZXQgZWxPZmZzZXQgPSB7XG4gICAgICBoZWlnaHQ6IGVsQmNyLmhlaWdodCB8fCBlbGVtZW50Lm9mZnNldEhlaWdodCxcbiAgICAgIHdpZHRoOiBlbEJjci53aWR0aCB8fCBlbGVtZW50Lm9mZnNldFdpZHRoLFxuICAgICAgdG9wOiBlbEJjci50b3AgKyB2aWV3cG9ydE9mZnNldC50b3AsXG4gICAgICBib3R0b206IGVsQmNyLmJvdHRvbSArIHZpZXdwb3J0T2Zmc2V0LnRvcCxcbiAgICAgIGxlZnQ6IGVsQmNyLmxlZnQgKyB2aWV3cG9ydE9mZnNldC5sZWZ0LFxuICAgICAgcmlnaHQ6IGVsQmNyLnJpZ2h0ICsgdmlld3BvcnRPZmZzZXQubGVmdFxuICAgIH07XG5cbiAgICBpZiAocm91bmQpIHtcbiAgICAgIGVsT2Zmc2V0LmhlaWdodCA9IE1hdGgucm91bmQoZWxPZmZzZXQuaGVpZ2h0KTtcbiAgICAgIGVsT2Zmc2V0LndpZHRoID0gTWF0aC5yb3VuZChlbE9mZnNldC53aWR0aCk7XG4gICAgICBlbE9mZnNldC50b3AgPSBNYXRoLnJvdW5kKGVsT2Zmc2V0LnRvcCk7XG4gICAgICBlbE9mZnNldC5ib3R0b20gPSBNYXRoLnJvdW5kKGVsT2Zmc2V0LmJvdHRvbSk7XG4gICAgICBlbE9mZnNldC5sZWZ0ID0gTWF0aC5yb3VuZChlbE9mZnNldC5sZWZ0KTtcbiAgICAgIGVsT2Zmc2V0LnJpZ2h0ID0gTWF0aC5yb3VuZChlbE9mZnNldC5yaWdodCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVsT2Zmc2V0O1xuICB9XG5cbiAgLypcbiAgICBSZXR1cm4gZmFsc2UgaWYgdGhlIGVsZW1lbnQgdG8gcG9zaXRpb24gaXMgb3V0c2lkZSB0aGUgdmlld3BvcnRcbiAgKi9cbiAgcG9zaXRpb25FbGVtZW50cyhob3N0RWxlbWVudDogSFRNTEVsZW1lbnQsIHRhcmdldEVsZW1lbnQ6IEhUTUxFbGVtZW50LCBwbGFjZW1lbnQ6IHN0cmluZywgYXBwZW5kVG9Cb2R5PzogYm9vbGVhbik6XG4gICAgICBib29sZWFuIHtcbiAgICBjb25zdFtwbGFjZW1lbnRQcmltYXJ5ID0gJ3RvcCcsIHBsYWNlbWVudFNlY29uZGFyeSA9ICdjZW50ZXInXSA9IHBsYWNlbWVudC5zcGxpdCgnLScpO1xuXG4gICAgY29uc3QgaG9zdEVsUG9zaXRpb24gPSBhcHBlbmRUb0JvZHkgPyB0aGlzLm9mZnNldChob3N0RWxlbWVudCwgZmFsc2UpIDogdGhpcy5wb3NpdGlvbihob3N0RWxlbWVudCwgZmFsc2UpO1xuICAgIGNvbnN0IHRhcmdldEVsU3R5bGVzID0gdGhpcy5nZXRBbGxTdHlsZXModGFyZ2V0RWxlbWVudCk7XG5cbiAgICBjb25zdCBtYXJnaW5Ub3AgPSBwYXJzZUZsb2F0KHRhcmdldEVsU3R5bGVzLm1hcmdpblRvcCk7XG4gICAgY29uc3QgbWFyZ2luQm90dG9tID0gcGFyc2VGbG9hdCh0YXJnZXRFbFN0eWxlcy5tYXJnaW5Cb3R0b20pO1xuICAgIGNvbnN0IG1hcmdpbkxlZnQgPSBwYXJzZUZsb2F0KHRhcmdldEVsU3R5bGVzLm1hcmdpbkxlZnQpO1xuICAgIGNvbnN0IG1hcmdpblJpZ2h0ID0gcGFyc2VGbG9hdCh0YXJnZXRFbFN0eWxlcy5tYXJnaW5SaWdodCk7XG5cbiAgICBsZXQgdG9wUG9zaXRpb24gPSAwO1xuICAgIGxldCBsZWZ0UG9zaXRpb24gPSAwO1xuXG4gICAgc3dpdGNoIChwbGFjZW1lbnRQcmltYXJ5KSB7XG4gICAgICBjYXNlICd0b3AnOlxuICAgICAgICB0b3BQb3NpdGlvbiA9IChob3N0RWxQb3NpdGlvbi50b3AgLSAodGFyZ2V0RWxlbWVudC5vZmZzZXRIZWlnaHQgKyBtYXJnaW5Ub3AgKyBtYXJnaW5Cb3R0b20pKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICB0b3BQb3NpdGlvbiA9IChob3N0RWxQb3NpdGlvbi50b3AgKyBob3N0RWxQb3NpdGlvbi5oZWlnaHQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICBsZWZ0UG9zaXRpb24gPSAoaG9zdEVsUG9zaXRpb24ubGVmdCAtICh0YXJnZXRFbGVtZW50Lm9mZnNldFdpZHRoICsgbWFyZ2luTGVmdCArIG1hcmdpblJpZ2h0KSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICBsZWZ0UG9zaXRpb24gPSAoaG9zdEVsUG9zaXRpb24ubGVmdCArIGhvc3RFbFBvc2l0aW9uLndpZHRoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgc3dpdGNoIChwbGFjZW1lbnRTZWNvbmRhcnkpIHtcbiAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgIHRvcFBvc2l0aW9uID0gaG9zdEVsUG9zaXRpb24udG9wO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgIHRvcFBvc2l0aW9uID0gaG9zdEVsUG9zaXRpb24udG9wICsgaG9zdEVsUG9zaXRpb24uaGVpZ2h0IC0gdGFyZ2V0RWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgIGxlZnRQb3NpdGlvbiA9IGhvc3RFbFBvc2l0aW9uLmxlZnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICBsZWZ0UG9zaXRpb24gPSBob3N0RWxQb3NpdGlvbi5sZWZ0ICsgaG9zdEVsUG9zaXRpb24ud2lkdGggLSB0YXJnZXRFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgIGlmIChwbGFjZW1lbnRQcmltYXJ5ID09PSAndG9wJyB8fCBwbGFjZW1lbnRQcmltYXJ5ID09PSAnYm90dG9tJykge1xuICAgICAgICAgIGxlZnRQb3NpdGlvbiA9IChob3N0RWxQb3NpdGlvbi5sZWZ0ICsgaG9zdEVsUG9zaXRpb24ud2lkdGggLyAyIC0gdGFyZ2V0RWxlbWVudC5vZmZzZXRXaWR0aCAvIDIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRvcFBvc2l0aW9uID0gKGhvc3RFbFBvc2l0aW9uLnRvcCArIGhvc3RFbFBvc2l0aW9uLmhlaWdodCAvIDIgLSB0YXJnZXRFbGVtZW50Lm9mZnNldEhlaWdodCAvIDIpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vLyBUaGUgdHJhbnNsYXRlM2QvZ3B1IGFjY2VsZXJhdGlvbiByZW5kZXIgYSBibHVycnkgdGV4dCBvbiBjaHJvbWUsIHRoZSBuZXh0IGxpbmUgaXMgY29tbWVudGVkIHVudGlsIGEgYnJvd3NlciBmaXhcbiAgICAvLyB0YXJnZXRFbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUzZCgke01hdGgucm91bmQobGVmdFBvc2l0aW9uKX1weCwgJHtNYXRoLmZsb29yKHRvcFBvc2l0aW9uKX1weCwgMHB4KWA7XG4gICAgdGFyZ2V0RWxlbWVudC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlKCR7TWF0aC5yb3VuZChsZWZ0UG9zaXRpb24pfXB4LCAke01hdGgucm91bmQodG9wUG9zaXRpb24pfXB4KWA7XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgdGFyZ2V0RWxlbWVudCBpcyBpbnNpZGUgdGhlIHZpZXdwb3J0XG4gICAgY29uc3QgdGFyZ2V0RWxCQ1IgPSB0YXJnZXRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IGh0bWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgY29uc3Qgd2luZG93SGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0IHx8IGh0bWwuY2xpZW50SGVpZ2h0O1xuICAgIGNvbnN0IHdpbmRvd1dpZHRoID0gd2luZG93LmlubmVyV2lkdGggfHwgaHRtbC5jbGllbnRXaWR0aDtcblxuICAgIHJldHVybiB0YXJnZXRFbEJDUi5sZWZ0ID49IDAgJiYgdGFyZ2V0RWxCQ1IudG9wID49IDAgJiYgdGFyZ2V0RWxCQ1IucmlnaHQgPD0gd2luZG93V2lkdGggJiZcbiAgICAgICAgdGFyZ2V0RWxCQ1IuYm90dG9tIDw9IHdpbmRvd0hlaWdodDtcbiAgfVxufVxuXG5jb25zdCBwbGFjZW1lbnRTZXBhcmF0b3IgPSAvXFxzKy87XG5jb25zdCBwb3NpdGlvblNlcnZpY2UgPSBuZXcgUG9zaXRpb25pbmcoKTtcblxuLypcbiAqIEFjY2VwdCB0aGUgcGxhY2VtZW50IGFycmF5IGFuZCBhcHBsaWVzIHRoZSBhcHByb3ByaWF0ZSBwbGFjZW1lbnQgZGVwZW5kZW50IG9uIHRoZSB2aWV3cG9ydC5cbiAqIFJldHVybnMgdGhlIGFwcGxpZWQgcGxhY2VtZW50LlxuICogSW4gY2FzZSBvZiBhdXRvIHBsYWNlbWVudCwgcGxhY2VtZW50cyBhcmUgc2VsZWN0ZWQgaW4gb3JkZXJcbiAqICAgJ3RvcCcsICdib3R0b20nLCAnbGVmdCcsICdyaWdodCcsXG4gKiAgICd0b3AtbGVmdCcsICd0b3AtcmlnaHQnLFxuICogICAnYm90dG9tLWxlZnQnLCAnYm90dG9tLXJpZ2h0JyxcbiAqICAgJ2xlZnQtdG9wJywgJ2xlZnQtYm90dG9tJyxcbiAqICAgJ3JpZ2h0LXRvcCcsICdyaWdodC1ib3R0b20nLlxuICogKi9cbmV4cG9ydCBmdW5jdGlvbiBwb3NpdGlvbkVsZW1lbnRzKFxuICAgIGhvc3RFbGVtZW50OiBIVE1MRWxlbWVudCwgdGFyZ2V0RWxlbWVudDogSFRNTEVsZW1lbnQsIHBsYWNlbWVudDogc3RyaW5nIHwgUGxhY2VtZW50IHwgUGxhY2VtZW50QXJyYXksXG4gICAgYXBwZW5kVG9Cb2R5PzogYm9vbGVhbiwgYmFzZUNsYXNzPzogc3RyaW5nKTogUGxhY2VtZW50IHtcbiAgbGV0IHBsYWNlbWVudFZhbHM6IEFycmF5PFBsYWNlbWVudD4gPVxuICAgICAgQXJyYXkuaXNBcnJheShwbGFjZW1lbnQpID8gcGxhY2VtZW50IDogcGxhY2VtZW50LnNwbGl0KHBsYWNlbWVudFNlcGFyYXRvcikgYXMgQXJyYXk8UGxhY2VtZW50PjtcblxuICBjb25zdCBhbGxvd2VkUGxhY2VtZW50cyA9IFtcbiAgICAndG9wJywgJ2JvdHRvbScsICdsZWZ0JywgJ3JpZ2h0JywgJ3RvcC1sZWZ0JywgJ3RvcC1yaWdodCcsICdib3R0b20tbGVmdCcsICdib3R0b20tcmlnaHQnLCAnbGVmdC10b3AnLCAnbGVmdC1ib3R0b20nLFxuICAgICdyaWdodC10b3AnLCAncmlnaHQtYm90dG9tJ1xuICBdO1xuXG4gIGNvbnN0IGNsYXNzTGlzdCA9IHRhcmdldEVsZW1lbnQuY2xhc3NMaXN0O1xuICBjb25zdCBhZGRDbGFzc2VzVG9UYXJnZXQgPSAodGFyZ2V0UGxhY2VtZW50OiBQbGFjZW1lbnQpOiBBcnJheTxzdHJpbmc+ID0+IHtcbiAgICBjb25zdFtwcmltYXJ5LCBzZWNvbmRhcnldID0gdGFyZ2V0UGxhY2VtZW50LnNwbGl0KCctJyk7XG4gICAgY29uc3QgY2xhc3NlcyA9IFtdO1xuICAgIGlmIChiYXNlQ2xhc3MpIHtcbiAgICAgIGNsYXNzZXMucHVzaChgJHtiYXNlQ2xhc3N9LSR7cHJpbWFyeX1gKTtcbiAgICAgIGlmIChzZWNvbmRhcnkpIHtcbiAgICAgICAgY2xhc3Nlcy5wdXNoKGAke2Jhc2VDbGFzc30tJHtwcmltYXJ5fS0ke3NlY29uZGFyeX1gKTtcbiAgICAgIH1cblxuICAgICAgY2xhc3Nlcy5mb3JFYWNoKChjbGFzc25hbWUpID0+IHsgY2xhc3NMaXN0LmFkZChjbGFzc25hbWUpOyB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGNsYXNzZXM7XG4gIH07XG5cbiAgLy8gUmVtb3ZlIG9sZCBwbGFjZW1lbnQgY2xhc3NlcyB0byBhdm9pZCBpc3N1ZXNcbiAgaWYgKGJhc2VDbGFzcykge1xuICAgIGFsbG93ZWRQbGFjZW1lbnRzLmZvckVhY2goKHBsYWNlbWVudFRvUmVtb3ZlKSA9PiB7IGNsYXNzTGlzdC5yZW1vdmUoYCR7YmFzZUNsYXNzfS0ke3BsYWNlbWVudFRvUmVtb3ZlfWApOyB9KTtcbiAgfVxuXG4gIC8vIHJlcGxhY2UgYXV0byBwbGFjZW1lbnQgd2l0aCBvdGhlciBwbGFjZW1lbnRzXG4gIGxldCBoYXNBdXRvID0gcGxhY2VtZW50VmFscy5maW5kSW5kZXgodmFsID0+IHZhbCA9PT0gJ2F1dG8nKTtcbiAgaWYgKGhhc0F1dG8gPj0gMCkge1xuICAgIGFsbG93ZWRQbGFjZW1lbnRzLmZvckVhY2goZnVuY3Rpb24ob2JqKSB7XG4gICAgICBpZiAocGxhY2VtZW50VmFscy5maW5kKHZhbCA9PiB2YWwuc2VhcmNoKCdeJyArIG9iaikgIT09IC0xKSA9PSBudWxsKSB7XG4gICAgICAgIHBsYWNlbWVudFZhbHMuc3BsaWNlKGhhc0F1dG8rKywgMSwgb2JqIGFzIFBsYWNlbWVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBjb29yZGluYXRlcyB3aGVyZSB0byBwb3NpdGlvblxuXG4gIC8vIFJlcXVpcmVkIGZvciB0cmFuc2Zvcm06XG4gIGNvbnN0IHN0eWxlID0gdGFyZ2V0RWxlbWVudC5zdHlsZTtcbiAgc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICBzdHlsZS50b3AgPSAnMCc7XG4gIHN0eWxlLmxlZnQgPSAnMCc7XG4gIHN0eWxlWyd3aWxsLWNoYW5nZSddID0gJ3RyYW5zZm9ybSc7XG5cbiAgbGV0IHRlc3RQbGFjZW1lbnQ6IFBsYWNlbWVudDtcbiAgbGV0IGlzSW5WaWV3cG9ydCA9IGZhbHNlO1xuICBmb3IgKHRlc3RQbGFjZW1lbnQgb2YgcGxhY2VtZW50VmFscykge1xuICAgIGxldCBhZGRlZENsYXNzZXMgPSBhZGRDbGFzc2VzVG9UYXJnZXQodGVzdFBsYWNlbWVudCk7XG5cbiAgICBpZiAocG9zaXRpb25TZXJ2aWNlLnBvc2l0aW9uRWxlbWVudHMoaG9zdEVsZW1lbnQsIHRhcmdldEVsZW1lbnQsIHRlc3RQbGFjZW1lbnQsIGFwcGVuZFRvQm9keSkpIHtcbiAgICAgIGlzSW5WaWV3cG9ydCA9IHRydWU7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgdGhlIGJhc2VDbGFzc2VzIGZvciBmdXJ0aGVyIGNhbGN1bGF0aW9uXG4gICAgaWYgKGJhc2VDbGFzcykge1xuICAgICAgYWRkZWRDbGFzc2VzLmZvckVhY2goKGNsYXNzbmFtZSkgPT4geyBjbGFzc0xpc3QucmVtb3ZlKGNsYXNzbmFtZSk7IH0pO1xuICAgIH1cbiAgfVxuXG4gIGlmICghaXNJblZpZXdwb3J0KSB7XG4gICAgLy8gSWYgbm90aGluZyBtYXRjaCwgdGhlIGZpcnN0IHBsYWNlbWVudCBpcyB0aGUgZGVmYXVsdCBvbmVcbiAgICB0ZXN0UGxhY2VtZW50ID0gcGxhY2VtZW50VmFsc1swXTtcbiAgICBhZGRDbGFzc2VzVG9UYXJnZXQodGVzdFBsYWNlbWVudCk7XG4gICAgcG9zaXRpb25TZXJ2aWNlLnBvc2l0aW9uRWxlbWVudHMoaG9zdEVsZW1lbnQsIHRhcmdldEVsZW1lbnQsIHRlc3RQbGFjZW1lbnQsIGFwcGVuZFRvQm9keSk7XG4gIH1cblxuICByZXR1cm4gdGVzdFBsYWNlbWVudDtcbn1cblxuZXhwb3J0IHR5cGUgUGxhY2VtZW50ID0gJ2F1dG8nIHwgJ3RvcCcgfCAnYm90dG9tJyB8ICdsZWZ0JyB8ICdyaWdodCcgfCAndG9wLWxlZnQnIHwgJ3RvcC1yaWdodCcgfCAnYm90dG9tLWxlZnQnIHxcbiAgICAnYm90dG9tLXJpZ2h0JyB8ICdsZWZ0LXRvcCcgfCAnbGVmdC1ib3R0b20nIHwgJ3JpZ2h0LXRvcCcgfCAncmlnaHQtYm90dG9tJztcblxuZXhwb3J0IHR5cGUgUGxhY2VtZW50QXJyYXkgPSBQbGFjZW1lbnQgfCBBcnJheTxQbGFjZW1lbnQ+fCBzdHJpbmc7XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/util/scrollbar.js b/dist/sunbird-ui-components/esm5/util/scrollbar.js new file mode 100644 index 0000000..8ecf003 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/util/scrollbar.js @@ -0,0 +1,149 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Injectable, Inject } from '@angular/core'; +import { DOCUMENT } from '@angular/common'; +import * as i0 from "@angular/core"; +import * as i1 from "@angular/common"; +/** @type {?} */ +var noop = (/** + * @return {?} + */ +function () { }); +var ɵ0 = noop; +/** + * Utility to handle the scrollbar. + * + * It allows to compensate the lack of a vertical scrollbar by adding an + * equivalent padding on the right of the body, and to remove this compensation. + */ +var ScrollBar = /** @class */ (function () { + function ScrollBar(_document) { + this._document = _document; + } + /** + * Detects if a scrollbar is present and if yes, already compensates for its + * removal by adding an equivalent padding on the right of the body. + * + * @return a callback used to revert the compensation (noop if there was none, + * otherwise a function removing the padding) + */ + /** + * Detects if a scrollbar is present and if yes, already compensates for its + * removal by adding an equivalent padding on the right of the body. + * + * @return {?} a callback used to revert the compensation (noop if there was none, + * otherwise a function removing the padding) + */ + ScrollBar.prototype.compensate = /** + * Detects if a scrollbar is present and if yes, already compensates for its + * removal by adding an equivalent padding on the right of the body. + * + * @return {?} a callback used to revert the compensation (noop if there was none, + * otherwise a function removing the padding) + */ + function () { return !this._isPresent() ? noop : this._adjustBody(this._getWidth()); }; + /** + * Adds a padding of the given width on the right of the body. + * + * @return a callback used to revert the padding to its previous value + */ + /** + * Adds a padding of the given width on the right of the body. + * + * @private + * @param {?} width + * @return {?} a callback used to revert the padding to its previous value + */ + ScrollBar.prototype._adjustBody = /** + * Adds a padding of the given width on the right of the body. + * + * @private + * @param {?} width + * @return {?} a callback used to revert the padding to its previous value + */ + function (width) { + /** @type {?} */ + var body = this._document.body; + /** @type {?} */ + var userSetPadding = body.style.paddingRight; + /** @type {?} */ + var paddingAmount = parseFloat(window.getComputedStyle(body)['padding-right']); + body.style['padding-right'] = paddingAmount + width + "px"; + return (/** + * @return {?} + */ + function () { return body.style['padding-right'] = userSetPadding; }); + }; + /** + * Tells whether a scrollbar is currently present on the body. + * + * @return true if scrollbar is present, false otherwise + */ + /** + * Tells whether a scrollbar is currently present on the body. + * + * @private + * @return {?} true if scrollbar is present, false otherwise + */ + ScrollBar.prototype._isPresent = /** + * Tells whether a scrollbar is currently present on the body. + * + * @private + * @return {?} true if scrollbar is present, false otherwise + */ + function () { + /** @type {?} */ + var rect = this._document.body.getBoundingClientRect(); + return rect.left + rect.right < window.innerWidth; + }; + /** + * Calculates and returns the width of a scrollbar. + * + * @return the width of a scrollbar on this page + */ + /** + * Calculates and returns the width of a scrollbar. + * + * @private + * @return {?} the width of a scrollbar on this page + */ + ScrollBar.prototype._getWidth = /** + * Calculates and returns the width of a scrollbar. + * + * @private + * @return {?} the width of a scrollbar on this page + */ + function () { + /** @type {?} */ + var measurer = this._document.createElement('div'); + measurer.className = 'modal-scrollbar-measure'; + /** @type {?} */ + var body = this._document.body; + body.appendChild(measurer); + /** @type {?} */ + var width = measurer.getBoundingClientRect().width - measurer.clientWidth; + body.removeChild(measurer); + return width; + }; + ScrollBar.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ + ScrollBar.ctorParameters = function () { return [ + { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] } + ]; }; + /** @nocollapse */ ScrollBar.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function ScrollBar_Factory() { return new ScrollBar(i0.ɵɵinject(i1.DOCUMENT)); }, token: ScrollBar, providedIn: "root" }); + return ScrollBar; +}()); +export { ScrollBar }; +if (false) { + /** + * @type {?} + * @private + */ + ScrollBar.prototype._document; +} +export { ɵ0 }; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsYmFyLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtZWQvc3VuYmlyZC11aS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsidXRpbC9zY3JvbGxiYXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQzs7OztJQUduQyxJQUFJOzs7QUFBRyxjQUFPLENBQUMsQ0FBQTs7Ozs7Ozs7QUFlckI7SUFFRSxtQkFBc0MsU0FBYztRQUFkLGNBQVMsR0FBVCxTQUFTLENBQUs7SUFBRyxDQUFDO0lBRXhEOzs7Ozs7T0FNRzs7Ozs7Ozs7SUFDSCw4QkFBVTs7Ozs7OztJQUFWLGNBQXFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFN0c7Ozs7T0FJRzs7Ozs7Ozs7SUFDSywrQkFBVzs7Ozs7OztJQUFuQixVQUFvQixLQUFhOztZQUN6QixJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJOztZQUMxQixjQUFjLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZOztZQUN4QyxhQUFhLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNoRixJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxHQUFNLGFBQWEsR0FBRyxLQUFLLE9BQUksQ0FBQztRQUMzRDs7O1FBQU8sY0FBTSxPQUFBLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLEdBQUcsY0FBYyxFQUE1QyxDQUE0QyxFQUFDO0lBQzVELENBQUM7SUFFRDs7OztPQUlHOzs7Ozs7O0lBQ0ssOEJBQVU7Ozs7OztJQUFsQjs7WUFDUSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUU7UUFDeEQsT0FBTyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7Ozs7T0FJRzs7Ozs7OztJQUNLLDZCQUFTOzs7Ozs7SUFBakI7O1lBQ1EsUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztRQUNwRCxRQUFRLENBQUMsU0FBUyxHQUFHLHlCQUF5QixDQUFDOztZQUV6QyxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJO1FBQ2hDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7O1lBQ3JCLEtBQUssR0FBRyxRQUFRLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLFdBQVc7UUFDM0UsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUUzQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7O2dCQW5ERixVQUFVLFNBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDOzs7O2dEQUVqQixNQUFNLFNBQUMsUUFBUTs7O29CQXJCOUI7Q0F1RUMsQUFwREQsSUFvREM7U0FuRFksU0FBUzs7Ozs7O0lBQ1IsOEJBQXdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlLCBJbmplY3R9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtET0NVTUVOVH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuXG5jb25zdCBub29wID0gKCkgPT4ge307XG5cblxuXG4vKiogVHlwZSBmb3IgdGhlIGNhbGxiYWNrIHVzZWQgdG8gcmV2ZXJ0IHRoZSBzY3JvbGxiYXIgY29tcGVuc2F0aW9uLiAqL1xuZXhwb3J0IHR5cGUgQ29tcGVuc2F0aW9uUmV2ZXJ0ZXIgPSAoKSA9PiB2b2lkO1xuXG5cblxuLyoqXG4gKiBVdGlsaXR5IHRvIGhhbmRsZSB0aGUgc2Nyb2xsYmFyLlxuICpcbiAqIEl0IGFsbG93cyB0byBjb21wZW5zYXRlIHRoZSBsYWNrIG9mIGEgdmVydGljYWwgc2Nyb2xsYmFyIGJ5IGFkZGluZyBhblxuICogZXF1aXZhbGVudCBwYWRkaW5nIG9uIHRoZSByaWdodCBvZiB0aGUgYm9keSwgYW5kIHRvIHJlbW92ZSB0aGlzIGNvbXBlbnNhdGlvbi5cbiAqL1xuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgU2Nyb2xsQmFyIHtcbiAgY29uc3RydWN0b3IoQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBfZG9jdW1lbnQ6IGFueSkge31cblxuICAvKipcbiAgICogRGV0ZWN0cyBpZiBhIHNjcm9sbGJhciBpcyBwcmVzZW50IGFuZCBpZiB5ZXMsIGFscmVhZHkgY29tcGVuc2F0ZXMgZm9yIGl0c1xuICAgKiByZW1vdmFsIGJ5IGFkZGluZyBhbiBlcXVpdmFsZW50IHBhZGRpbmcgb24gdGhlIHJpZ2h0IG9mIHRoZSBib2R5LlxuICAgKlxuICAgKiBAcmV0dXJuIGEgY2FsbGJhY2sgdXNlZCB0byByZXZlcnQgdGhlIGNvbXBlbnNhdGlvbiAobm9vcCBpZiB0aGVyZSB3YXMgbm9uZSxcbiAgICogb3RoZXJ3aXNlIGEgZnVuY3Rpb24gcmVtb3ZpbmcgdGhlIHBhZGRpbmcpXG4gICAqL1xuICBjb21wZW5zYXRlKCk6IENvbXBlbnNhdGlvblJldmVydGVyIHsgcmV0dXJuICF0aGlzLl9pc1ByZXNlbnQoKSA/IG5vb3AgOiB0aGlzLl9hZGp1c3RCb2R5KHRoaXMuX2dldFdpZHRoKCkpOyB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBwYWRkaW5nIG9mIHRoZSBnaXZlbiB3aWR0aCBvbiB0aGUgcmlnaHQgb2YgdGhlIGJvZHkuXG4gICAqXG4gICAqIEByZXR1cm4gYSBjYWxsYmFjayB1c2VkIHRvIHJldmVydCB0aGUgcGFkZGluZyB0byBpdHMgcHJldmlvdXMgdmFsdWVcbiAgICovXG4gIHByaXZhdGUgX2FkanVzdEJvZHkod2lkdGg6IG51bWJlcik6IENvbXBlbnNhdGlvblJldmVydGVyIHtcbiAgICBjb25zdCBib2R5ID0gdGhpcy5fZG9jdW1lbnQuYm9keTtcbiAgICBjb25zdCB1c2VyU2V0UGFkZGluZyA9IGJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0O1xuICAgIGNvbnN0IHBhZGRpbmdBbW91bnQgPSBwYXJzZUZsb2F0KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGJvZHkpWydwYWRkaW5nLXJpZ2h0J10pO1xuICAgIGJvZHkuc3R5bGVbJ3BhZGRpbmctcmlnaHQnXSA9IGAke3BhZGRpbmdBbW91bnQgKyB3aWR0aH1weGA7XG4gICAgcmV0dXJuICgpID0+IGJvZHkuc3R5bGVbJ3BhZGRpbmctcmlnaHQnXSA9IHVzZXJTZXRQYWRkaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIFRlbGxzIHdoZXRoZXIgYSBzY3JvbGxiYXIgaXMgY3VycmVudGx5IHByZXNlbnQgb24gdGhlIGJvZHkuXG4gICAqXG4gICAqIEByZXR1cm4gdHJ1ZSBpZiBzY3JvbGxiYXIgaXMgcHJlc2VudCwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBwcml2YXRlIF9pc1ByZXNlbnQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcmVjdCA9IHRoaXMuX2RvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgcmV0dXJuIHJlY3QubGVmdCArIHJlY3QucmlnaHQgPCB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIGFuZCByZXR1cm5zIHRoZSB3aWR0aCBvZiBhIHNjcm9sbGJhci5cbiAgICpcbiAgICogQHJldHVybiB0aGUgd2lkdGggb2YgYSBzY3JvbGxiYXIgb24gdGhpcyBwYWdlXG4gICAqL1xuICBwcml2YXRlIF9nZXRXaWR0aCgpOiBudW1iZXIge1xuICAgIGNvbnN0IG1lYXN1cmVyID0gdGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgbWVhc3VyZXIuY2xhc3NOYW1lID0gJ21vZGFsLXNjcm9sbGJhci1tZWFzdXJlJztcblxuICAgIGNvbnN0IGJvZHkgPSB0aGlzLl9kb2N1bWVudC5ib2R5O1xuICAgIGJvZHkuYXBwZW5kQ2hpbGQobWVhc3VyZXIpO1xuICAgIGNvbnN0IHdpZHRoID0gbWVhc3VyZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggLSBtZWFzdXJlci5jbGllbnRXaWR0aDtcbiAgICBib2R5LnJlbW92ZUNoaWxkKG1lYXN1cmVyKTtcblxuICAgIHJldHVybiB3aWR0aDtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/util/triggers.js b/dist/sunbird-ui-components/esm5/util/triggers.js new file mode 100644 index 0000000..f0d5205 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/util/triggers.js @@ -0,0 +1,241 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Observable, merge } from 'rxjs'; +import { share, filter, delay, map } from 'rxjs/operators'; +var Trigger = /** @class */ (function () { + function Trigger(open, close) { + this.open = open; + this.close = close; + if (!close) { + this.close = open; + } + } + /** + * @return {?} + */ + Trigger.prototype.isManual = /** + * @return {?} + */ + function () { return this.open === 'manual' || this.close === 'manual'; }; + return Trigger; +}()); +export { Trigger }; +if (false) { + /** @type {?} */ + Trigger.prototype.open; + /** @type {?} */ + Trigger.prototype.close; +} +/** @type {?} */ +var DEFAULT_ALIASES = { + 'hover': ['mouseenter', 'mouseleave'], + 'focus': ['focusin', 'focusout'], +}; +/** + * @param {?} triggers + * @param {?=} aliases + * @return {?} + */ +export function parseTriggers(triggers, aliases) { + if (aliases === void 0) { aliases = DEFAULT_ALIASES; } + /** @type {?} */ + var trimmedTriggers = (triggers || '').trim(); + if (trimmedTriggers.length === 0) { + return []; + } + /** @type {?} */ + var parsedTriggers = trimmedTriggers.split(/\s+/).map((/** + * @param {?} trigger + * @return {?} + */ + function (trigger) { return trigger.split(':'); })).map((/** + * @param {?} triggerPair + * @return {?} + */ + function (triggerPair) { + /** @type {?} */ + var alias = aliases[triggerPair[0]] || triggerPair; + return new Trigger(alias[0], alias[1]); + })); + /** @type {?} */ + var manualTriggers = parsedTriggers.filter((/** + * @param {?} triggerPair + * @return {?} + */ + function (triggerPair) { return triggerPair.isManual(); })); + if (manualTriggers.length > 1) { + throw 'Triggers parse error: only one manual trigger is allowed'; + } + if (manualTriggers.length === 1 && parsedTriggers.length > 1) { + throw 'Triggers parse error: manual trigger can\'t be mixed with other triggers'; + } + return parsedTriggers; +} +/** + * @param {?} renderer + * @param {?} nativeElement + * @param {?} triggers + * @param {?} isOpenedFn + * @return {?} + */ +export function observeTriggers(renderer, nativeElement, triggers, isOpenedFn) { + return new Observable((/** + * @param {?} subscriber + * @return {?} + */ + function (subscriber) { + /** @type {?} */ + var listeners = []; + /** @type {?} */ + var openFn = (/** + * @return {?} + */ + function () { return subscriber.next(true); }); + /** @type {?} */ + var closeFn = (/** + * @return {?} + */ + function () { return subscriber.next(false); }); + /** @type {?} */ + var toggleFn = (/** + * @return {?} + */ + function () { return subscriber.next(!isOpenedFn()); }); + triggers.forEach((/** + * @param {?} trigger + * @return {?} + */ + function (trigger) { + if (trigger.open === trigger.close) { + listeners.push(renderer.listen(nativeElement, trigger.open, toggleFn)); + } + else { + listeners.push(renderer.listen(nativeElement, trigger.open, openFn), renderer.listen(nativeElement, trigger.close, closeFn)); + } + })); + return (/** + * @return {?} + */ + function () { listeners.forEach((/** + * @param {?} unsubscribeFn + * @return {?} + */ + function (unsubscribeFn) { return unsubscribeFn(); })); }); + })); +} +/** @type {?} */ +var delayOrNoop = (/** + * @template T + * @param {?} time + * @return {?} + */ +function (time) { return time > 0 ? delay(time) : (/** + * @param {?} a + * @return {?} + */ +function (a) { return a; }); }); +var ɵ0 = delayOrNoop; +/** + * @param {?} openDelay + * @param {?} closeDelay + * @param {?} isOpenedFn + * @return {?} + */ +export function triggerDelay(openDelay, closeDelay, isOpenedFn) { + return (/** + * @param {?} input$ + * @return {?} + */ + function (input$) { + /** @type {?} */ + var pending = null; + /** @type {?} */ + var filteredInput$ = input$.pipe(map((/** + * @param {?} open + * @return {?} + */ + function (open) { return ({ open: open }); })), filter((/** + * @param {?} event + * @return {?} + */ + function (event) { + /** @type {?} */ + var currentlyOpen = isOpenedFn(); + if (currentlyOpen !== event.open && (!pending || pending.open === currentlyOpen)) { + pending = event; + return true; + } + if (pending && pending.open !== event.open) { + pending = null; + } + return false; + })), share()); + /** @type {?} */ + var delayedOpen$ = filteredInput$.pipe(filter((/** + * @param {?} event + * @return {?} + */ + function (event) { return event.open; })), delayOrNoop(openDelay)); + /** @type {?} */ + var delayedClose$ = filteredInput$.pipe(filter((/** + * @param {?} event + * @return {?} + */ + function (event) { return !event.open; })), delayOrNoop(closeDelay)); + return merge(delayedOpen$, delayedClose$) + .pipe(filter((/** + * @param {?} event + * @return {?} + */ + function (event) { + if (event === pending) { + pending = null; + return event.open !== isOpenedFn(); + } + return false; + })), map((/** + * @param {?} event + * @return {?} + */ + function (event) { return event.open; }))); + }); +} +/** + * @param {?} renderer + * @param {?} nativeElement + * @param {?} triggers + * @param {?} isOpenedFn + * @param {?} openFn + * @param {?} closeFn + * @param {?=} openDelay + * @param {?=} closeDelay + * @return {?} + */ +export function listenToTriggers(renderer, nativeElement, triggers, isOpenedFn, openFn, closeFn, openDelay, closeDelay) { + if (openDelay === void 0) { openDelay = 0; } + if (closeDelay === void 0) { closeDelay = 0; } + /** @type {?} */ + var parsedTriggers = parseTriggers(triggers); + if (parsedTriggers.length === 1 && parsedTriggers[0].isManual()) { + return (/** + * @return {?} + */ + function () { }); + } + /** @type {?} */ + var subscription = observeTriggers(renderer, nativeElement, parsedTriggers, isOpenedFn) + .pipe(triggerDelay(openDelay, closeDelay, isOpenedFn)) + .subscribe((/** + * @param {?} open + * @return {?} + */ + function (open) { return (open ? openFn() : closeFn()); })); + return (/** + * @return {?} + */ + function () { return subscription.unsubscribe(); }); +} +export { ɵ0 }; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJpZ2dlcnMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1lZC9zdW5iaXJkLXVpLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJ1dGlsL3RyaWdnZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLEtBQUssRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFekQ7SUFDRSxpQkFBbUIsSUFBWSxFQUFTLEtBQWM7UUFBbkMsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUFTLFVBQUssR0FBTCxLQUFLLENBQVM7UUFDcEQsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNWLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1NBQ25CO0lBQ0gsQ0FBQzs7OztJQUVELDBCQUFROzs7SUFBUixjQUFhLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQzFFLGNBQUM7QUFBRCxDQUFDLEFBUkQsSUFRQzs7OztJQVBhLHVCQUFtQjs7SUFBRSx3QkFBcUI7OztJQVNsRCxlQUFlLEdBQUc7SUFDdEIsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQztJQUNyQyxPQUFPLEVBQUUsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDO0NBQ2pDOzs7Ozs7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFDLFFBQWdCLEVBQUUsT0FBeUI7SUFBekIsd0JBQUEsRUFBQSx5QkFBeUI7O1FBQ2pFLGVBQWUsR0FBRyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUU7SUFFL0MsSUFBSSxlQUFlLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUNoQyxPQUFPLEVBQUUsQ0FBQztLQUNYOztRQUVLLGNB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QUFPLEtBQUssQ0FBQztRQUNmLENBQUMsRUFBQyxFQUNGLEdBQUc7Ozs7UUFBQyxVQUFBLEtBQUssSUFBSSxPQUFBLEtBQUssQ0FBQyxJQUFJLEVBQVYsQ0FBVSxFQUFDLENBQUMsQ0FBQztJQUNwQyxDQUFDLEVBQUM7QUFDSixDQUFDOzs7Ozs7Ozs7Ozs7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCLENBQzVCLFFBQWEsRUFBRSxhQUFrQixFQUFFLFFBQWdCLEVBQUUsVUFBeUIsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFNBQWEsRUFDOUcsVUFBYztJQURtRiwwQkFBQSxFQUFBLGFBQWE7SUFDOUcsMkJBQUEsRUFBQSxjQUFjOztRQUNWLGNBQWMsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDO0lBRTlDLElBQUksY0FBYyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1FBQy9EOzs7UUFBTyxjQUFPLENBQUMsRUFBQztLQUNqQjs7UUFFSyxZQUFZLEdBQUcsZUFBZSxDQUFDLFFBQVEsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLFVBQVUsQ0FBQztTQUMvRCxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7U0FDckQsU0FBUzs7OztJQUFDLFVBQUEsSUFBSSxJQUFJLE9BQUEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUE3QixDQUE2QixFQUFDO0lBRTFFOzs7SUFBTyxjQUFNLE9BQUEsWUFBWSxDQUFDLFdBQVcsRUFBRSxFQUExQixDQUEwQixFQUFDO0FBQzFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge09ic2VydmFibGUsIG1lcmdlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7c2hhcmUsIGZpbHRlciwgZGVsYXksIG1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5leHBvcnQgY2xhc3MgVHJpZ2dlciB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBvcGVuOiBzdHJpbmcsIHB1YmxpYyBjbG9zZT86IHN0cmluZykge1xuICAgIGlmICghY2xvc2UpIHtcbiAgICAgIHRoaXMuY2xvc2UgPSBvcGVuO1xuICAgIH1cbiAgfVxuXG4gIGlzTWFudWFsKCkgeyByZXR1cm4gdGhpcy5vcGVuID09PSAnbWFudWFsJyB8fCB0aGlzLmNsb3NlID09PSAnbWFudWFsJzsgfVxufVxuXG5jb25zdCBERUZBVUxUX0FMSUFTRVMgPSB7XG4gICdob3Zlcic6IFsnbW91c2VlbnRlcicsICdtb3VzZWxlYXZlJ10sXG4gICdmb2N1cyc6IFsnZm9jdXNpbicsICdmb2N1c291dCddLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVHJpZ2dlcnModHJpZ2dlcnM6IHN0cmluZywgYWxpYXNlcyA9IERFRkFVTFRfQUxJQVNFUyk6IFRyaWdnZXJbXSB7XG4gIGNvbnN0IHRyaW1tZWRUcmlnZ2VycyA9ICh0cmlnZ2VycyB8fCAnJykudHJpbSgpO1xuXG4gIGlmICh0cmltbWVkVHJpZ2dlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgcGFyc2VkVHJpZ2dlcnMgPSB0cmltbWVkVHJpZ2dlcnMuc3BsaXQoL1xccysvKS5tYXAodHJpZ2dlciA9PiB0cmlnZ2VyLnNwbGl0KCc6JykpLm1hcCgodHJpZ2dlclBhaXIpID0+IHtcbiAgICBsZXQgYWxpYXMgPSBhbGlhc2VzW3RyaWdnZXJQYWlyWzBdXSB8fCB0cmlnZ2VyUGFpcjtcbiAgICByZXR1cm4gbmV3IFRyaWdnZXIoYWxpYXNbMF0sIGFsaWFzWzFdKTtcbiAgfSk7XG5cbiAgY29uc3QgbWFudWFsVHJpZ2dlcnMgPSBwYXJzZWRUcmlnZ2Vycy5maWx0ZXIodHJpZ2dlclBhaXIgPT4gdHJpZ2dlclBhaXIuaXNNYW51YWwoKSk7XG5cbiAgaWYgKG1hbnVhbFRyaWdnZXJzLmxlbmd0aCA+IDEpIHtcbiAgICB0aHJvdyAnVHJpZ2dlcnMgcGFyc2UgZXJyb3I6IG9ubHkgb25lIG1hbnVhbCB0cmlnZ2VyIGlzIGFsbG93ZWQnO1xuICB9XG5cbiAgaWYgKG1hbnVhbFRyaWdnZXJzLmxlbmd0aCA9PT0gMSAmJiBwYXJzZWRUcmlnZ2Vycy5sZW5ndGggPiAxKSB7XG4gICAgdGhyb3cgJ1RyaWdnZXJzIHBhcnNlIGVycm9yOiBtYW51YWwgdHJpZ2dlciBjYW5cXCd0IGJlIG1peGVkIHdpdGggb3RoZXIgdHJpZ2dlcnMnO1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlZFRyaWdnZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb2JzZXJ2ZVRyaWdnZXJzKHJlbmRlcmVyOiBhbnksIG5hdGl2ZUVsZW1lbnQ6IGFueSwgdHJpZ2dlcnM6IFRyaWdnZXJbXSwgaXNPcGVuZWRGbjogKCkgPT4gYm9vbGVhbikge1xuICByZXR1cm4gbmV3IE9ic2VydmFibGU8Ym9vbGVhbj4oc3Vic2NyaWJlciA9PiB7XG4gICAgY29uc3QgbGlzdGVuZXJzID0gW107XG4gICAgY29uc3Qgb3BlbkZuID0gKCkgPT4gc3Vic2NyaWJlci5uZXh0KHRydWUpO1xuICAgIGNvbnN0IGNsb3NlRm4gPSAoKSA9PiBzdWJzY3JpYmVyLm5leHQoZmFsc2UpO1xuICAgIGNvbnN0IHRvZ2dsZUZuID0gKCkgPT4gc3Vic2NyaWJlci5uZXh0KCFpc09wZW5lZEZuKCkpO1xuXG4gICAgdHJpZ2dlcnMuZm9yRWFjaCgodHJpZ2dlcjogVHJpZ2dlcikgPT4ge1xuICAgICAgaWYgKHRyaWdnZXIub3BlbiA9PT0gdHJpZ2dlci5jbG9zZSkge1xuICAgICAgICBsaXN0ZW5lcnMucHVzaChyZW5kZXJlci5saXN0ZW4obmF0aXZlRWxlbWVudCwgdHJpZ2dlci5vcGVuLCB0b2dnbGVGbikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGlzdGVuZXJzLnB1c2goXG4gICAgICAgICAgICByZW5kZXJlci5saXN0ZW4obmF0aXZlRWxlbWVudCwgdHJpZ2dlci5vcGVuLCBvcGVuRm4pLFxuICAgICAgICAgICAgcmVuZGVyZXIubGlzdGVuKG5hdGl2ZUVsZW1lbnQsIHRyaWdnZXIuY2xvc2UsIGNsb3NlRm4pKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiAoKSA9PiB7IGxpc3RlbmVycy5mb3JFYWNoKHVuc3Vic2NyaWJlRm4gPT4gdW5zdWJzY3JpYmVGbigpKTsgfTtcbiAgfSk7XG59XG5cbmNvbnN0IGRlbGF5T3JOb29wID0gPFQ+KHRpbWU6IG51bWJlcikgPT4gdGltZSA+IDAgPyBkZWxheTxUPih0aW1lKSA6IChhOiBPYnNlcnZhYmxlPFQ+KSA9PiBhO1xuXG5leHBvcnQgZnVuY3Rpb24gdHJpZ2dlckRlbGF5KG9wZW5EZWxheTogbnVtYmVyLCBjbG9zZURlbGF5OiBudW1iZXIsIGlzT3BlbmVkRm46ICgpID0+IGJvb2xlYW4pIHtcbiAgcmV0dXJuIChpbnB1dCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4pID0+IHtcbiAgICBsZXQgcGVuZGluZyA9IG51bGw7XG4gICAgY29uc3QgZmlsdGVyZWRJbnB1dCQgPSBpbnB1dCQucGlwZShcbiAgICAgICAgbWFwKG9wZW4gPT4gKHtvcGVufSkpLCBmaWx0ZXIoZXZlbnQgPT4ge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRseU9wZW4gPSBpc09wZW5lZEZuKCk7XG4gICAgICAgICAgaWYgKGN1cnJlbnRseU9wZW4gIT09IGV2ZW50Lm9wZW4gJiYgKCFwZW5kaW5nIHx8IHBlbmRpbmcub3BlbiA9PT0gY3VycmVudGx5T3BlbikpIHtcbiAgICAgICAgICAgIHBlbmRpbmcgPSBldmVudDtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocGVuZGluZyAmJiBwZW5kaW5nLm9wZW4gIT09IGV2ZW50Lm9wZW4pIHtcbiAgICAgICAgICAgIHBlbmRpbmcgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pLFxuICAgICAgICBzaGFyZSgpKTtcbiAgICBjb25zdCBkZWxheWVkT3BlbiQgPSBmaWx0ZXJlZElucHV0JC5waXBlKGZpbHRlcihldmVudCA9PiBldmVudC5vcGVuKSwgZGVsYXlPck5vb3Aob3BlbkRlbGF5KSk7XG4gICAgY29uc3QgZGVsYXllZENsb3NlJCA9IGZpbHRlcmVkSW5wdXQkLnBpcGUoZmlsdGVyKGV2ZW50ID0+ICFldmVudC5vcGVuKSwgZGVsYXlPck5vb3AoY2xvc2VEZWxheSkpO1xuICAgIHJldHVybiBtZXJnZShkZWxheWVkT3BlbiQsIGRlbGF5ZWRDbG9zZSQpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgICAgZmlsdGVyKGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgaWYgKGV2ZW50ID09PSBwZW5kaW5nKSB7XG4gICAgICAgICAgICAgICAgcGVuZGluZyA9IG51bGw7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50Lm9wZW4gIT09IGlzT3BlbmVkRm4oKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG1hcChldmVudCA9PiBldmVudC5vcGVuKSk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsaXN0ZW5Ub1RyaWdnZXJzKFxuICAgIHJlbmRlcmVyOiBhbnksIG5hdGl2ZUVsZW1lbnQ6IGFueSwgdHJpZ2dlcnM6IHN0cmluZywgaXNPcGVuZWRGbjogKCkgPT4gYm9vbGVhbiwgb3BlbkZuLCBjbG9zZUZuLCBvcGVuRGVsYXkgPSAwLFxuICAgIGNsb3NlRGVsYXkgPSAwKSB7XG4gIGNvbnN0IHBhcnNlZFRyaWdnZXJzID0gcGFyc2VUcmlnZ2Vycyh0cmlnZ2Vycyk7XG5cbiAgaWYgKHBhcnNlZFRyaWdnZXJzLmxlbmd0aCA9PT0gMSAmJiBwYXJzZWRUcmlnZ2Vyc1swXS5pc01hbnVhbCgpKSB7XG4gICAgcmV0dXJuICgpID0+IHt9O1xuICB9XG5cbiAgY29uc3Qgc3Vic2NyaXB0aW9uID0gb2JzZXJ2ZVRyaWdnZXJzKHJlbmRlcmVyLCBuYXRpdmVFbGVtZW50LCBwYXJzZWRUcmlnZ2VycywgaXNPcGVuZWRGbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKHRyaWdnZXJEZWxheShvcGVuRGVsYXksIGNsb3NlRGVsYXksIGlzT3BlbmVkRm4pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZShvcGVuID0+IChvcGVuID8gb3BlbkZuKCkgOiBjbG9zZUZuKCkpKTtcblxuICByZXR1cm4gKCkgPT4gc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG59XG4iXX0= \ No newline at end of file diff --git a/dist/sunbird-ui-components/esm5/util/util.js b/dist/sunbird-ui-components/esm5/util/util.js new file mode 100644 index 0000000..eb2e583 --- /dev/null +++ b/dist/sunbird-ui-components/esm5/util/util.js @@ -0,0 +1,121 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * @param {?} value + * @return {?} + */ +export function toInteger(value) { + return parseInt("" + value, 10); +} +/** + * @param {?} value + * @return {?} + */ +export function toString(value) { + return (value !== undefined && value !== null) ? "" + value : ''; +} +/** + * @param {?} value + * @param {?} max + * @param {?=} min + * @return {?} + */ +export function getValueInRange(value, max, min) { + if (min === void 0) { min = 0; } + return Math.max(Math.min(value, max), min); +} +/** + * @param {?} value + * @return {?} + */ +export function isString(value) { + return typeof value === 'string'; +} +/** + * @param {?} value + * @return {?} + */ +export function isNumber(value) { + return !isNaN(toInteger(value)); +} +/** + * @param {?} value + * @return {?} + */ +export function isInteger(value) { + return typeof value === 'number' && isFinite(value) && Math.floor(value) === value; +} +/** + * @param {?} value + * @return {?} + */ +export function isDefined(value) { + return value !== undefined && value !== null; +} +/** + * @param {?} value + * @return {?} + */ +export function padNumber(value) { + if (isNumber(value)) { + return ("0" + value).slice(-2); + } + else { + return ''; + } +} +/** + * @param {?} text + * @return {?} + */ +export function regExpEscape(text) { + return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); +} +/** + * @param {?} element + * @param {?} className + * @return {?} + */ +export function hasClassName(element, className) { + return element && element.className && element.className.split && + element.className.split(/\s+/).indexOf(className) >= 0; +} +if (typeof Element !== 'undefined' && !Element.prototype.closest) { + // Polyfill for ie10+ + if (!Element.prototype.matches) { + // IE uses the non-standard name: msMatchesSelector + Element.prototype.matches = ((/** @type {?} */ (Element.prototype))).msMatchesSelector || Element.prototype.webkitMatchesSelector; + } + Element.prototype.closest = (/** + * @param {?} s + * @return {?} + */ + function (s) { + /** @type {?} */ + var el = this; + if (!document.documentElement.contains(el)) { + return null; + } + do { + if (el.matches(s)) { + return el; + } + el = el.parentElement || el.parentNode; + } while (el !== null && el.nodeType === 1); + return null; + }); +} +/** + * @param {?} element + * @param {?} selector + * @return {?} + */ +export function closest(element, selector) { + if (!selector) { + return null; + } + return element.closest(selector); +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWVkL3N1bmJpcmQtdWktY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbInV0aWwvdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLE1BQU0sVUFBVSxTQUFTLENBQUMsS0FBVTtJQUNsQyxPQUFPLFFBQVEsQ0FBQyxLQUFHLEtBQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNsQyxDQUFDOzs7OztBQUVELE1BQU0sVUFBVSxRQUFRLENBQUMsS0FBVTtJQUNqQyxPQUFPLENBQUMsS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUcsS0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDbkUsQ0FBQzs7Ozs7OztBQUVELE1BQU0sVUFBVSxlQUFlLENBQUMsS0FBYSxFQUFFLEdBQVcsRUFBRSxHQUFPO0lBQVAsb0JBQUEsRUFBQSxPQUFPO0lBQ2pFLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM3QyxDQUFDOzs7OztBQUVELE1BQU0sVUFBVSxRQUFRLENBQUMsS0FBVTtJQUNqQyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQztBQUNuQyxDQUFDOzs7OztBQUVELE1BQU0sVUFBVSxRQUFRLENBQUMsS0FBVTtJQUNqQyxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2xDLENBQUM7Ozs7O0FBRUQsTUFBTSxVQUFVLFNBQVMsQ0FBQyxLQUFVO0lBQ2xDLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssQ0FBQztBQUNyRixDQUFDOzs7OztBQUVELE1BQU0sVUFBVSxTQUFTLENBQUMsS0FBVTtJQUNsQyxPQUFPLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQztBQUMvQyxDQUFDOzs7OztBQUVELE1BQU0sVUFBVSxTQUFTLENBQUMsS0FBYTtJQUNyQyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNuQixPQUFPLENBQUEsTUFBSSxLQUFPLENBQUEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUM5QjtTQUFNO1FBQ0wsT0FBTyxFQUFFLENBQUM7S0FDWDtBQUNILENBQUM7Ozs7O0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FBQyxJQUFJO0lBQy9CLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQywwQkFBMEIsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMxRCxDQUFDOzs7Ozs7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLE9BQVksRUFBRSxTQUFpQjtJQUMxRCxPQUFPLE9BQU8sSUFBSSxPQUFPLENBQUMsU0FBUyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSztRQUMxRCxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzdELENBQUM7QUFFRCxJQUFJLE9BQU8sT0FBTyxLQUFLLFdBQVcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFO0lBQ2hFLHFCQUFxQjtJQUVyQixJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUU7UUFDOUIsbURBQW1EO1FBQ25ELE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxHQUFHLENBQUMsbUJBQUEsT0FBTyxDQUFDLFNBQVMsRUFBTyxDQUFDLENBQUMsaUJBQWlCLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQztLQUNySDtJQUVELE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTzs7OztJQUFHLFVBQVMsQ0FBUzs7WUFDeEMsRUFBRSxHQUFHLElBQUk7UUFDYixJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDMUMsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELEdBQUc7WUFDRCxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2pCLE9BQU8sRUFBRSxDQUFDO2FBQ1g7WUFDRCxFQUFFLEdBQUcsRUFBRSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDO1NBQ3hDLFFBQVEsRUFBRSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUMsUUFBUSxLQUFLLENBQUMsRUFBRTtRQUMzQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUMsQ0FBQSxDQUFDO0NBQ0g7Ozs7OztBQUVELE1BQU0sVUFBVSxPQUFPLENBQUMsT0FBb0IsRUFBRSxRQUFRO0lBQ3BELElBQUksQ0FBQyxRQUFRLEVBQUU7UUFDYixPQUFPLElBQUksQ0FBQztLQUNiO0lBRUQsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ25DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gdG9JbnRlZ2VyKHZhbHVlOiBhbnkpOiBudW1iZXIge1xuICByZXR1cm4gcGFyc2VJbnQoYCR7dmFsdWV9YCwgMTApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9TdHJpbmcodmFsdWU6IGFueSk6IHN0cmluZyB7XG4gIHJldHVybiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCkgPyBgJHt2YWx1ZX1gIDogJyc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWYWx1ZUluUmFuZ2UodmFsdWU6IG51bWJlciwgbWF4OiBudW1iZXIsIG1pbiA9IDApOiBudW1iZXIge1xuICByZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4odmFsdWUsIG1heCksIG1pbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1N0cmluZyh2YWx1ZTogYW55KTogdmFsdWUgaXMgc3RyaW5nIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZyc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlcih2YWx1ZTogYW55KTogdmFsdWUgaXMgbnVtYmVyIHtcbiAgcmV0dXJuICFpc05hTih0b0ludGVnZXIodmFsdWUpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSW50ZWdlcih2YWx1ZTogYW55KTogdmFsdWUgaXMgbnVtYmVyIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUodmFsdWUpICYmIE1hdGguZmxvb3IodmFsdWUpID09PSB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGVmaW5lZCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFkTnVtYmVyKHZhbHVlOiBudW1iZXIpIHtcbiAgaWYgKGlzTnVtYmVyKHZhbHVlKSkge1xuICAgIHJldHVybiBgMCR7dmFsdWV9YC5zbGljZSgtMik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdFeHBFc2NhcGUodGV4dCkge1xuICByZXR1cm4gdGV4dC5yZXBsYWNlKC9bLVtcXF17fSgpKis/LixcXFxcXiR8I1xcc10vZywgJ1xcXFwkJicpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzQ2xhc3NOYW1lKGVsZW1lbnQ6IGFueSwgY2xhc3NOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGVsZW1lbnQgJiYgZWxlbWVudC5jbGFzc05hbWUgJiYgZWxlbWVudC5jbGFzc05hbWUuc3BsaXQgJiZcbiAgICAgIGVsZW1lbnQuY2xhc3NOYW1lLnNwbGl0KC9cXHMrLykuaW5kZXhPZihjbGFzc05hbWUpID49IDA7XG59XG5cbmlmICh0eXBlb2YgRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgIUVsZW1lbnQucHJvdG90eXBlLmNsb3Nlc3QpIHtcbiAgLy8gUG9seWZpbGwgZm9yIGllMTArXG5cbiAgaWYgKCFFbGVtZW50LnByb3RvdHlwZS5tYXRjaGVzKSB7XG4gICAgLy8gSUUgdXNlcyB0aGUgbm9uLXN0YW5kYXJkIG5hbWU6IG1zTWF0Y2hlc1NlbGVjdG9yXG4gICAgRWxlbWVudC5wcm90b3R5cGUubWF0Y2hlcyA9IChFbGVtZW50LnByb3RvdHlwZSBhcyBhbnkpLm1zTWF0Y2hlc1NlbGVjdG9yIHx8IEVsZW1lbnQucHJvdG90eXBlLndlYmtpdE1hdGNoZXNTZWxlY3RvcjtcbiAgfVxuXG4gIEVsZW1lbnQucHJvdG90eXBlLmNsb3Nlc3QgPSBmdW5jdGlvbihzOiBzdHJpbmcpIHtcbiAgICBsZXQgZWwgPSB0aGlzO1xuICAgIGlmICghZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNvbnRhaW5zKGVsKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGRvIHtcbiAgICAgIGlmIChlbC5tYXRjaGVzKHMpKSB7XG4gICAgICAgIHJldHVybiBlbDtcbiAgICAgIH1cbiAgICAgIGVsID0gZWwucGFyZW50RWxlbWVudCB8fCBlbC5wYXJlbnROb2RlO1xuICAgIH0gd2hpbGUgKGVsICE9PSBudWxsICYmIGVsLm5vZGVUeXBlID09PSAxKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsb3Nlc3QoZWxlbWVudDogSFRNTEVsZW1lbnQsIHNlbGVjdG9yKTogSFRNTEVsZW1lbnQge1xuICBpZiAoIXNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudC5jbG9zZXN0KHNlbGVjdG9yKTtcbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/sunbird-ui-components/fesm2015/sunbird-ui-components.js b/dist/sunbird-ui-components/fesm2015/sunbird-ui-components.js new file mode 100644 index 0000000..d2dbcf4 --- /dev/null +++ b/dist/sunbird-ui-components/fesm2015/sunbird-ui-components.js @@ -0,0 +1,10860 @@ +import { Injectable, ɵɵdefineInjectable, EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Renderer2, ElementRef, Input, Output, NgModule, Directive, TemplateRef, ContentChildren, Optional, Host, forwardRef, ChangeDetectorRef, Inject, PLATFORM_ID, NgZone, HostListener, LOCALE_ID, ɵɵinject, ViewChild, ViewContainerRef, ComponentFactoryResolver, ContentChild, Injector, ApplicationRef, RendererFactory2, INJECTOR, Attribute, InjectionToken } from '@angular/core'; +import { CommonModule, isPlatformBrowser, getLocaleDayNames, FormStyle, TranslationWidth, getLocaleMonthNames, formatDate, DOCUMENT, getLocaleDayPeriods } from '@angular/common'; +import { NG_VALUE_ACCESSOR, NG_VALIDATORS, FormsModule } from '@angular/forms'; +import { Subject, BehaviorSubject, combineLatest, timer, NEVER, fromEvent, merge, race, Observable } from 'rxjs'; +import { map, startWith, distinctUntilChanged, switchMap, takeUntil, filter, take, withLatestFrom, delay, share, tap } from 'rxjs/operators'; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * A configuration service for the [SbCard](#/components/alert/api#SbCard) component. + * + * You can inject this service, typically in your root component, and customize its properties + * to provide default values for all alerts used in the application. + */ +class SbCardConfig { + constructor() { + this.dismissible = true; + this.type = 'warning'; + } +} +SbCardConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } +]; +/** @nocollapse */ SbCardConfig.ngInjectableDef = ɵɵdefineInjectable({ factory: function SbCardConfig_Factory() { return new SbCardConfig(); }, token: SbCardConfig, providedIn: "root" }); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * Alert is a component to provide contextual feedback messages for user. + * + * It supports several alert types and can be dismissed. + */ +class SbCard { + /** + * @param {?} config + * @param {?} _renderer + * @param {?} _element + */ + constructor(config, _renderer, _element) { + this._renderer = _renderer; + this._element = _element; + /** + * An event emitted when the close button is clicked. It has no payload and only relevant for dismissible alerts. + */ + this.close = new EventEmitter(); + this.dismissible = config.dismissible; + this.type = config.type; + } + /** + * @return {?} + */ + closeHandler() { this.close.emit(null); } + /** + * @param {?} changes + * @return {?} + */ + ngOnChanges(changes) { + /** @type {?} */ + const typeChange = changes['type']; + if (typeChange && !typeChange.firstChange) { + this._renderer.removeClass(this._element.nativeElement, `alert-${typeChange.previousValue}`); + this._renderer.addClass(this._element.nativeElement, `alert-${typeChange.currentValue}`); + } + } + /** + * @return {?} + */ + ngOnInit() { this._renderer.addClass(this._element.nativeElement, `alert-${this.type}`); } +} +SbCard.decorators = [ + { type: Component, args: [{ + selector: 'sb-card', + changeDetection: ChangeDetectionStrategy.OnPush, + encapsulation: ViewEncapsulation.None, + host: { 'role': 'alert', 'class': 'alert', '[class.alert-dismissible]': 'dismissible' }, + template: ` + + + `, + styles: ["ngb-alert{display:block}"] + }] } +]; +/** @nocollapse */ +SbCard.ctorParameters = () => [ + { type: SbCardConfig }, + { type: Renderer2 }, + { type: ElementRef } +]; +SbCard.propDecorators = { + dismissible: [{ type: Input }], + type: [{ type: Input }], + close: [{ type: Output }] +}; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +class SbCardModule { +} +SbCardModule.decorators = [ + { type: NgModule, args: [{ declarations: [SbCard], exports: [SbCard], imports: [CommonModule], entryComponents: [SbCard] },] } +]; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * @param {?} value + * @return {?} + */ +function toInteger(value) { + return parseInt(`${value}`, 10); +} +/** + * @param {?} value + * @return {?} + */ +function toString(value) { + return (value !== undefined && value !== null) ? `${value}` : ''; +} +/** + * @param {?} value + * @param {?} max + * @param {?=} min + * @return {?} + */ +function getValueInRange(value, max, min = 0) { + return Math.max(Math.min(value, max), min); +} +/** + * @param {?} value + * @return {?} + */ +function isString(value) { + return typeof value === 'string'; +} +/** + * @param {?} value + * @return {?} + */ +function isNumber(value) { + return !isNaN(toInteger(value)); +} +/** + * @param {?} value + * @return {?} + */ +function isInteger(value) { + return typeof value === 'number' && isFinite(value) && Math.floor(value) === value; +} +/** + * @param {?} value + * @return {?} + */ +function isDefined(value) { + return value !== undefined && value !== null; +} +/** + * @param {?} value + * @return {?} + */ +function padNumber(value) { + if (isNumber(value)) { + return `0${value}`.slice(-2); + } + else { + return ''; + } +} +/** + * @param {?} text + * @return {?} + */ +function regExpEscape(text) { + return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); +} +/** + * @param {?} element + * @param {?} className + * @return {?} + */ +function hasClassName(element, className) { + return element && element.className && element.className.split && + element.className.split(/\s+/).indexOf(className) >= 0; +} +if (typeof Element !== 'undefined' && !Element.prototype.closest) { + // Polyfill for ie10+ + if (!Element.prototype.matches) { + // IE uses the non-standard name: msMatchesSelector + Element.prototype.matches = ((/** @type {?} */ (Element.prototype))).msMatchesSelector || Element.prototype.webkitMatchesSelector; + } + Element.prototype.closest = (/** + * @param {?} s + * @return {?} + */ + function (s) { + /** @type {?} */ + let el = this; + if (!document.documentElement.contains(el)) { + return null; + } + do { + if (el.matches(s)) { + return el; + } + el = el.parentElement || el.parentNode; + } while (el !== null && el.nodeType === 1); + return null; + }); +} +/** + * @param {?} element + * @param {?} selector + * @return {?} + */ +function closest(element, selector) { + if (!selector) { + return null; + } + return element.closest(selector); +} + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * A configuration service for the [NgbAccordion](#/components/accordion/api#NgbAccordion) component. + * + * You can inject this service, typically in your root component, and customize its properties + * to provide default values for all accordions used in the application. + */ +class NgbAccordionConfig { + constructor() { + this.closeOthers = false; + } +} +NgbAccordionConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } +]; +/** @nocollapse */ NgbAccordionConfig.ngInjectableDef = ɵɵdefineInjectable({ factory: function NgbAccordionConfig_Factory() { return new NgbAccordionConfig(); }, token: NgbAccordionConfig, providedIn: "root" }); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @type {?} */ +let nextId = 0; +/** + * A directive that wraps an accordion panel header with any HTML markup and a toggling button + * marked with [`NgbPanelToggle`](#/components/accordion/api#NgbPanelToggle). + * See the [header customization demo](#/components/accordion/examples#header) for more details. + * + * You can also use [`NgbPanelTitle`](#/components/accordion/api#NgbPanelTitle) to customize only the panel title. + * + * \@since 4.1.0 + */ +class NgbPanelHeader { + /** + * @param {?} templateRef + */ + constructor(templateRef) { + this.templateRef = templateRef; + } +} +NgbPanelHeader.decorators = [ + { type: Directive, args: [{ selector: 'ng-template[ngbPanelHeader]' },] } +]; +/** @nocollapse */ +NgbPanelHeader.ctorParameters = () => [ + { type: TemplateRef } +]; +/** + * A directive that wraps only the panel title with HTML markup inside. + * + * You can also use [`NgbPanelHeader`](#/components/accordion/api#NgbPanelHeader) to customize the full panel header. + */ +class NgbPanelTitle { + /** + * @param {?} templateRef + */ + constructor(templateRef) { + this.templateRef = templateRef; + } +} +NgbPanelTitle.decorators = [ + { type: Directive, args: [{ selector: 'ng-template[ngbPanelTitle]' },] } +]; +/** @nocollapse */ +NgbPanelTitle.ctorParameters = () => [ + { type: TemplateRef } +]; +/** + * A directive that wraps the accordion panel content. + */ +class NgbPanelContent { + /** + * @param {?} templateRef + */ + constructor(templateRef) { + this.templateRef = templateRef; + } +} +NgbPanelContent.decorators = [ + { type: Directive, args: [{ selector: 'ng-template[ngbPanelContent]' },] } +]; +/** @nocollapse */ +NgbPanelContent.ctorParameters = () => [ + { type: TemplateRef } +]; +/** + * A directive that wraps an individual accordion panel with title and collapsible content. + */ +class NgbPanel { + constructor() { + /** + * If `true`, the panel is disabled an can't be toggled. + */ + this.disabled = false; + /** + * An optional id for the panel that must be unique on the page. + * + * If not provided, it will be auto-generated in the `ngb-panel-xxx` format. + */ + this.id = `ngb-panel-${nextId++}`; + this.isOpen = false; + } + /** + * @return {?} + */ + ngAfterContentChecked() { + // We are using @ContentChildren instead of @ContentChild as in the Angular version being used + // only @ContentChildren allows us to specify the {descendants: false} option. + // Without {descendants: false} we are hitting bugs described in: + // https://github.com/ng-bootstrap/ng-bootstrap/issues/2240 + this.titleTpl = this.titleTpls.first; + this.headerTpl = this.headerTpls.first; + this.contentTpl = this.contentTpls.first; + } +} +NgbPanel.decorators = [ + { type: Directive, args: [{ selector: 'ngb-panel' },] } +]; +NgbPanel.propDecorators = { + disabled: [{ type: Input }], + id: [{ type: Input }], + title: [{ type: Input }], + type: [{ type: Input }], + titleTpls: [{ type: ContentChildren, args: [NgbPanelTitle, { descendants: false },] }], + headerTpls: [{ type: ContentChildren, args: [NgbPanelHeader, { descendants: false },] }], + contentTpls: [{ type: ContentChildren, args: [NgbPanelContent, { descendants: false },] }] +}; +/** + * Accordion is a collection of collapsible panels (bootstrap cards). + * + * It can ensure only one panel is opened at a time and allows to customize panel + * headers. + */ +class NgbAccordion { + /** + * @param {?} config + */ + constructor(config) { + /** + * An array or comma separated strings of panel ids that should be opened **initially**. + * + * For subsequent changes use methods like `expand()`, `collapse()`, etc. and + * the `(panelChange)` event. + */ + this.activeIds = []; + /** + * If `true`, panel content will be detached from DOM and not simply hidden when the panel is collapsed. + */ + this.destroyOnHide = true; + /** + * Event emitted right before the panel toggle happens. + * + * See [NgbPanelChangeEvent](#/components/accordion/api#NgbPanelChangeEvent) for payload details. + */ + this.panelChange = new EventEmitter(); + this.type = config.type; + this.closeOtherPanels = config.closeOthers; + } + /** + * Checks if a panel with a given id is expanded. + * @param {?} panelId + * @return {?} + */ + isExpanded(panelId) { return this.activeIds.indexOf(panelId) > -1; } + /** + * Expands a panel with a given id. + * + * Has no effect if the panel is already expanded or disabled. + * @param {?} panelId + * @return {?} + */ + expand(panelId) { this._changeOpenState(this._findPanelById(panelId), true); } + /** + * Expands all panels, if `[closeOthers]` is `false`. + * + * If `[closeOthers]` is `true`, it will expand the first panel, unless there is already a panel opened. + * @return {?} + */ + expandAll() { + if (this.closeOtherPanels) { + if (this.activeIds.length === 0 && this.panels.length) { + this._changeOpenState(this.panels.first, true); + } + } + else { + this.panels.forEach((/** + * @param {?} panel + * @return {?} + */ + panel => this._changeOpenState(panel, true))); + } + } + /** + * Collapses a panel with the given id. + * + * Has no effect if the panel is already collapsed or disabled. + * @param {?} panelId + * @return {?} + */ + collapse(panelId) { this._changeOpenState(this._findPanelById(panelId), false); } + /** + * Collapses all opened panels. + * @return {?} + */ + collapseAll() { + this.panels.forEach((/** + * @param {?} panel + * @return {?} + */ + (panel) => { this._changeOpenState(panel, false); })); + } + /** + * Toggles a panel with the given id. + * + * Has no effect if the panel is disabled. + * @param {?} panelId + * @return {?} + */ + toggle(panelId) { + /** @type {?} */ + const panel = this._findPanelById(panelId); + if (panel) { + this._changeOpenState(panel, !panel.isOpen); + } + } + /** + * @return {?} + */ + ngAfterContentChecked() { + // active id updates + if (isString(this.activeIds)) { + this.activeIds = this.activeIds.split(/\s*,\s*/); + } + // update panels open states + this.panels.forEach((/** + * @param {?} panel + * @return {?} + */ + panel => panel.isOpen = !panel.disabled && this.activeIds.indexOf(panel.id) > -1)); + // closeOthers updates + if (this.activeIds.length > 1 && this.closeOtherPanels) { + this._closeOthers(this.activeIds[0]); + this._updateActiveIds(); + } + } + /** + * @private + * @param {?} panel + * @param {?} nextState + * @return {?} + */ + _changeOpenState(panel, nextState) { + if (panel && !panel.disabled && panel.isOpen !== nextState) { + /** @type {?} */ + let defaultPrevented = false; + this.panelChange.emit({ panelId: panel.id, nextState: nextState, preventDefault: (/** + * @return {?} + */ + () => { defaultPrevented = true; }) }); + if (!defaultPrevented) { + panel.isOpen = nextState; + if (nextState && this.closeOtherPanels) { + this._closeOthers(panel.id); + } + this._updateActiveIds(); + } + } + } + /** + * @private + * @param {?} panelId + * @return {?} + */ + _closeOthers(panelId) { + this.panels.forEach((/** + * @param {?} panel + * @return {?} + */ + panel => { + if (panel.id !== panelId) { + panel.isOpen = false; + } + })); + } + /** + * @private + * @param {?} panelId + * @return {?} + */ + _findPanelById(panelId) { return this.panels.find((/** + * @param {?} p + * @return {?} + */ + p => p.id === panelId)); } + /** + * @private + * @return {?} + */ + _updateActiveIds() { + this.activeIds = this.panels.filter((/** + * @param {?} panel + * @return {?} + */ + panel => panel.isOpen && !panel.disabled)).map((/** + * @param {?} panel + * @return {?} + */ + panel => panel.id)); + } +} +NgbAccordion.decorators = [ + { type: Component, args: [{ + selector: 'ngb-accordion', + exportAs: 'ngbAccordion', + host: { 'class': 'accordion', 'role': 'tablist', '[attr.aria-multiselectable]': '!closeOtherPanels' }, + template: ` + + + + +
+ +
+
+ +
+
+
+
+ ` + }] } +]; +/** @nocollapse */ +NgbAccordion.ctorParameters = () => [ + { type: NgbAccordionConfig } +]; +NgbAccordion.propDecorators = { + panels: [{ type: ContentChildren, args: [NgbPanel,] }], + activeIds: [{ type: Input }], + closeOtherPanels: [{ type: Input, args: ['closeOthers',] }], + destroyOnHide: [{ type: Input }], + type: [{ type: Input }], + panelChange: [{ type: Output }] +}; +/** + * A directive to put on a button that toggles panel opening and closing. + * + * To be used inside the [`NgbPanelHeader`](#/components/accordion/api#NgbPanelHeader) + * + * \@since 4.1.0 + */ +class NgbPanelToggle { + /** + * @param {?} accordion + * @param {?} panel + */ + constructor(accordion, panel) { + this.accordion = accordion; + this.panel = panel; + } + /** + * @param {?} panel + * @return {?} + */ + set ngbPanelToggle(panel) { + if (panel) { + this.panel = panel; + } + } +} +NgbPanelToggle.decorators = [ + { type: Directive, args: [{ + selector: 'button[ngbPanelToggle]', + host: { + 'type': 'button', + '[disabled]': 'panel.disabled', + '[class.collapsed]': '!panel.isOpen', + '[attr.aria-expanded]': 'panel.isOpen', + '[attr.aria-controls]': 'panel.id', + '(click)': 'accordion.toggle(panel.id)' + } + },] } +]; +/** @nocollapse */ +NgbPanelToggle.ctorParameters = () => [ + { type: NgbAccordion }, + { type: NgbPanel, decorators: [{ type: Optional }, { type: Host }] } +]; +NgbPanelToggle.propDecorators = { + ngbPanelToggle: [{ type: Input }] +}; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @type {?} */ +const NGB_ACCORDION_DIRECTIVES = [NgbAccordion, NgbPanel, NgbPanelTitle, NgbPanelContent, NgbPanelHeader, NgbPanelToggle]; +class NgbAccordionModule { +} +NgbAccordionModule.decorators = [ + { type: NgModule, args: [{ declarations: NGB_ACCORDION_DIRECTIVES, exports: NGB_ACCORDION_DIRECTIVES, imports: [CommonModule] },] } +]; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * A configuration service for the [NgbAlert](#/components/alert/api#NgbAlert) component. + * + * You can inject this service, typically in your root component, and customize its properties + * to provide default values for all alerts used in the application. + */ +class NgbAlertConfig { + constructor() { + this.dismissible = true; + this.type = 'warning'; + } +} +NgbAlertConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } +]; +/** @nocollapse */ NgbAlertConfig.ngInjectableDef = ɵɵdefineInjectable({ factory: function NgbAlertConfig_Factory() { return new NgbAlertConfig(); }, token: NgbAlertConfig, providedIn: "root" }); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * Alert is a component to provide contextual feedback messages for user. + * + * It supports several alert types and can be dismissed. + */ +class NgbAlert { + /** + * @param {?} config + * @param {?} _renderer + * @param {?} _element + */ + constructor(config, _renderer, _element) { + this._renderer = _renderer; + this._element = _element; + /** + * An event emitted when the close button is clicked. It has no payload and only relevant for dismissible alerts. + */ + this.close = new EventEmitter(); + this.dismissible = config.dismissible; + this.type = config.type; + } + /** + * @return {?} + */ + closeHandler() { this.close.emit(null); } + /** + * @param {?} changes + * @return {?} + */ + ngOnChanges(changes) { + /** @type {?} */ + const typeChange = changes['type']; + if (typeChange && !typeChange.firstChange) { + this._renderer.removeClass(this._element.nativeElement, `alert-${typeChange.previousValue}`); + this._renderer.addClass(this._element.nativeElement, `alert-${typeChange.currentValue}`); + } + } + /** + * @return {?} + */ + ngOnInit() { this._renderer.addClass(this._element.nativeElement, `alert-${this.type}`); } +} +NgbAlert.decorators = [ + { type: Component, args: [{ + selector: 'ngb-alert', + changeDetection: ChangeDetectionStrategy.OnPush, + encapsulation: ViewEncapsulation.None, + host: { 'role': 'alert', 'class': 'alert', '[class.alert-dismissible]': 'dismissible' }, + template: ` + + + `, + styles: ["ngb-alert{display:block}"] + }] } +]; +/** @nocollapse */ +NgbAlert.ctorParameters = () => [ + { type: NgbAlertConfig }, + { type: Renderer2 }, + { type: ElementRef } +]; +NgbAlert.propDecorators = { + dismissible: [{ type: Input }], + type: [{ type: Input }], + close: [{ type: Output }] +}; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +class NgbAlertModule { +} +NgbAlertModule.decorators = [ + { type: NgModule, args: [{ declarations: [NgbAlert], exports: [NgbAlert], imports: [CommonModule], entryComponents: [NgbAlert] },] } +]; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +class NgbButtonLabel { +} +NgbButtonLabel.decorators = [ + { type: Directive, args: [{ + selector: '[ngbButtonLabel]', + host: { '[class.btn]': 'true', '[class.active]': 'active', '[class.disabled]': 'disabled', '[class.focus]': 'focused' } + },] } +]; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @type {?} */ +const NGB_CHECKBOX_VALUE_ACCESSOR = { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef((/** + * @return {?} + */ + () => NgbCheckBox)), + multi: true +}; +/** + * Allows to easily create Bootstrap-style checkbox buttons. + * + * Integrates with forms, so the value of a checked button is bound to the underlying form control + * either in a reactive or template-driven way. + */ +class NgbCheckBox { + /** + * @param {?} _label + * @param {?} _cd + */ + constructor(_label, _cd) { + this._label = _label; + this._cd = _cd; + /** + * If `true`, the checkbox button will be disabled + */ + this.disabled = false; + /** + * The form control value when the checkbox is checked. + */ + this.valueChecked = true; + /** + * The form control value when the checkbox is unchecked. + */ + this.valueUnChecked = false; + this.onChange = (/** + * @param {?} _ + * @return {?} + */ + (_) => { }); + this.onTouched = (/** + * @return {?} + */ + () => { }); + } + /** + * @param {?} isFocused + * @return {?} + */ + set focused(isFocused) { + this._label.focused = isFocused; + if (!isFocused) { + this.onTouched(); + } + } + /** + * @param {?} $event + * @return {?} + */ + onInputChange($event) { + /** @type {?} */ + const modelToPropagate = $event.target.checked ? this.valueChecked : this.valueUnChecked; + this.onChange(modelToPropagate); + this.onTouched(); + this.writeValue(modelToPropagate); + } + /** + * @param {?} fn + * @return {?} + */ + registerOnChange(fn) { this.onChange = fn; } + /** + * @param {?} fn + * @return {?} + */ + registerOnTouched(fn) { this.onTouched = fn; } + /** + * @param {?} isDisabled + * @return {?} + */ + setDisabledState(isDisabled) { + this.disabled = isDisabled; + this._label.disabled = isDisabled; + } + /** + * @param {?} value + * @return {?} + */ + writeValue(value) { + this.checked = value === this.valueChecked; + this._label.active = this.checked; + // label won't be updated, if it is inside the OnPush component when [ngModel] changes + this._cd.markForCheck(); + } +} +NgbCheckBox.decorators = [ + { type: Directive, args: [{ + selector: '[ngbButton][type=checkbox]', + host: { + 'autocomplete': 'off', + '[checked]': 'checked', + '[disabled]': 'disabled', + '(change)': 'onInputChange($event)', + '(focus)': 'focused = true', + '(blur)': 'focused = false' + }, + providers: [NGB_CHECKBOX_VALUE_ACCESSOR] + },] } +]; +/** @nocollapse */ +NgbCheckBox.ctorParameters = () => [ + { type: NgbButtonLabel }, + { type: ChangeDetectorRef } +]; +NgbCheckBox.propDecorators = { + disabled: [{ type: Input }], + valueChecked: [{ type: Input }], + valueUnChecked: [{ type: Input }] +}; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @type {?} */ +const NGB_RADIO_VALUE_ACCESSOR = { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef((/** + * @return {?} + */ + () => NgbRadioGroup)), + multi: true +}; +/** @type {?} */ +let nextId$1 = 0; +/** + * Allows to easily create Bootstrap-style radio buttons. + * + * Integrates with forms, so the value of a checked button is bound to the underlying form control + * either in a reactive or template-driven way. + */ +class NgbRadioGroup { + constructor() { + this._radios = new Set(); + this._value = null; + /** + * Name of the radio group applied to radio input elements. + * + * Will be applied to all radio input elements inside the group, + * unless [`NgbRadio`](#/components/buttons/api#NgbRadio)'s specify names themselves. + * + * If not provided, will be generated in the `ngb-radio-xx` format. + */ + this.name = `ngb-radio-${nextId$1++}`; + this.onChange = (/** + * @param {?} _ + * @return {?} + */ + (_) => { }); + this.onTouched = (/** + * @return {?} + */ + () => { }); + } + /** + * @return {?} + */ + get disabled() { return this._disabled; } + /** + * @param {?} isDisabled + * @return {?} + */ + set disabled(isDisabled) { this.setDisabledState(isDisabled); } + /** + * @param {?} radio + * @return {?} + */ + onRadioChange(radio) { + this.writeValue(radio.value); + this.onChange(radio.value); + } + /** + * @return {?} + */ + onRadioValueUpdate() { this._updateRadiosValue(); } + /** + * @param {?} radio + * @return {?} + */ + register(radio) { this._radios.add(radio); } + /** + * @param {?} fn + * @return {?} + */ + registerOnChange(fn) { this.onChange = fn; } + /** + * @param {?} fn + * @return {?} + */ + registerOnTouched(fn) { this.onTouched = fn; } + /** + * @param {?} isDisabled + * @return {?} + */ + setDisabledState(isDisabled) { + this._disabled = isDisabled; + this._updateRadiosDisabled(); + } + /** + * @param {?} radio + * @return {?} + */ + unregister(radio) { this._radios.delete(radio); } + /** + * @param {?} value + * @return {?} + */ + writeValue(value) { + this._value = value; + this._updateRadiosValue(); + } + /** + * @private + * @return {?} + */ + _updateRadiosValue() { this._radios.forEach((/** + * @param {?} radio + * @return {?} + */ + (radio) => radio.updateValue(this._value))); } + /** + * @private + * @return {?} + */ + _updateRadiosDisabled() { this._radios.forEach((/** + * @param {?} radio + * @return {?} + */ + (radio) => radio.updateDisabled())); } +} +NgbRadioGroup.decorators = [ + { type: Directive, args: [{ selector: '[ngbRadioGroup]', host: { 'role': 'radiogroup' }, providers: [NGB_RADIO_VALUE_ACCESSOR] },] } +]; +NgbRadioGroup.propDecorators = { + name: [{ type: Input }] +}; +/** + * A directive that marks an input of type "radio" as a part of the + * [`NgbRadioGroup`](#/components/buttons/api#NgbRadioGroup). + */ +class NgbRadio { + /** + * @param {?} _group + * @param {?} _label + * @param {?} _renderer + * @param {?} _element + * @param {?} _cd + */ + constructor(_group, _label, _renderer, _element, _cd) { + this._group = _group; + this._label = _label; + this._renderer = _renderer; + this._element = _element; + this._cd = _cd; + this._value = null; + this._group.register(this); + this.updateDisabled(); + } + /** + * The form control value when current radio button is checked. + * @param {?} value + * @return {?} + */ + set value(value) { + this._value = value; + /** @type {?} */ + const stringValue = value ? value.toString() : ''; + this._renderer.setProperty(this._element.nativeElement, 'value', stringValue); + this._group.onRadioValueUpdate(); + } + /** + * If `true`, current radio button will be disabled. + * @param {?} isDisabled + * @return {?} + */ + set disabled(isDisabled) { + this._disabled = isDisabled !== false; + this.updateDisabled(); + } + /** + * @param {?} isFocused + * @return {?} + */ + set focused(isFocused) { + if (this._label) { + this._label.focused = isFocused; + } + if (!isFocused) { + this._group.onTouched(); + } + } + /** + * @return {?} + */ + get checked() { return this._checked; } + /** + * @return {?} + */ + get disabled() { return this._group.disabled || this._disabled; } + /** + * @return {?} + */ + get value() { return this._value; } + /** + * @return {?} + */ + get nameAttr() { return this.name || this._group.name; } + /** + * @return {?} + */ + ngOnDestroy() { this._group.unregister(this); } + /** + * @return {?} + */ + onChange() { this._group.onRadioChange(this); } + /** + * @param {?} value + * @return {?} + */ + updateValue(value) { + // label won't be updated, if it is inside the OnPush component when [ngModel] changes + if (this.value !== value) { + this._cd.markForCheck(); + } + this._checked = this.value === value; + this._label.active = this._checked; + } + /** + * @return {?} + */ + updateDisabled() { this._label.disabled = this.disabled; } +} +NgbRadio.decorators = [ + { type: Directive, args: [{ + selector: '[ngbButton][type=radio]', + host: { + '[checked]': 'checked', + '[disabled]': 'disabled', + '[name]': 'nameAttr', + '(change)': 'onChange()', + '(focus)': 'focused = true', + '(blur)': 'focused = false' + } + },] } +]; +/** @nocollapse */ +NgbRadio.ctorParameters = () => [ + { type: NgbRadioGroup }, + { type: NgbButtonLabel }, + { type: Renderer2 }, + { type: ElementRef }, + { type: ChangeDetectorRef } +]; +NgbRadio.propDecorators = { + name: [{ type: Input }], + value: [{ type: Input, args: ['value',] }], + disabled: [{ type: Input, args: ['disabled',] }] +}; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @type {?} */ +const NGB_BUTTON_DIRECTIVES = [NgbButtonLabel, NgbCheckBox, NgbRadioGroup, NgbRadio]; +class NgbButtonsModule { +} +NgbButtonsModule.decorators = [ + { type: NgModule, args: [{ declarations: NGB_BUTTON_DIRECTIVES, exports: NGB_BUTTON_DIRECTIVES },] } +]; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * A configuration service for the [NgbCarousel](#/components/carousel/api#NgbCarousel) component. + * + * You can inject this service, typically in your root component, and customize its properties + * to provide default values for all carousels used in the application. + */ +class NgbCarouselConfig { + constructor() { + this.interval = 5000; + this.wrap = true; + this.keyboard = true; + this.pauseOnHover = true; + this.showNavigationArrows = true; + this.showNavigationIndicators = true; + } +} +NgbCarouselConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } +]; +/** @nocollapse */ NgbCarouselConfig.ngInjectableDef = ɵɵdefineInjectable({ factory: function NgbCarouselConfig_Factory() { return new NgbCarouselConfig(); }, token: NgbCarouselConfig, providedIn: "root" }); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @type {?} */ +let nextId$2 = 0; +/** + * A directive that wraps the individual carousel slide. + */ +class NgbSlide { + /** + * @param {?} tplRef + */ + constructor(tplRef) { + this.tplRef = tplRef; + /** + * Slide id that must be unique for the entire document. + * + * If not provided, will be generated in the `ngb-slide-xx` format. + */ + this.id = `ngb-slide-${nextId$2++}`; + } +} +NgbSlide.decorators = [ + { type: Directive, args: [{ selector: 'ng-template[ngbSlide]' },] } +]; +/** @nocollapse */ +NgbSlide.ctorParameters = () => [ + { type: TemplateRef } +]; +NgbSlide.propDecorators = { + id: [{ type: Input }] +}; +/** + * Carousel is a component to easily create and control slideshows. + * + * Allows to set intervals, change the way user interacts with the slides and provides a programmatic API. + */ +class NgbCarousel { + /** + * @param {?} config + * @param {?} _platformId + * @param {?} _ngZone + * @param {?} _cd + */ + constructor(config, _platformId, _ngZone, _cd) { + this._platformId = _platformId; + this._ngZone = _ngZone; + this._cd = _cd; + this.NgbSlideEventSource = NgbSlideEventSource; + this._destroy$ = new Subject(); + this._interval$ = new BehaviorSubject(0); + this._mouseHover$ = new BehaviorSubject(false); + this._pauseOnHover$ = new BehaviorSubject(false); + this._pause$ = new BehaviorSubject(false); + this._wrap$ = new BehaviorSubject(false); + /** + * An event emitted right after the slide transition is completed. + * + * See [`NgbSlideEvent`](#/components/carousel/api#NgbSlideEvent) for payload details. + */ + this.slide = new EventEmitter(); + this.interval = config.interval; + this.wrap = config.wrap; + this.keyboard = config.keyboard; + this.pauseOnHover = config.pauseOnHover; + this.showNavigationArrows = config.showNavigationArrows; + this.showNavigationIndicators = config.showNavigationIndicators; + } + /** + * Time in milliseconds before the next slide is shown. + * @param {?} value + * @return {?} + */ + set interval(value) { + this._interval$.next(value); + } + /** + * @return {?} + */ + get interval() { return this._interval$.value; } + /** + * If `true`, will 'wrap' the carousel by switching from the last slide back to the first. + * @param {?} value + * @return {?} + */ + set wrap(value) { + this._wrap$.next(value); + } + /** + * @return {?} + */ + get wrap() { return this._wrap$.value; } + /** + * If `true`, will pause slide switching when mouse cursor hovers the slide. + * + * \@since 2.2.0 + * @param {?} value + * @return {?} + */ + set pauseOnHover(value) { + this._pauseOnHover$.next(value); + } + /** + * @return {?} + */ + get pauseOnHover() { return this._pauseOnHover$.value; } + /** + * @return {?} + */ + mouseEnter() { + this._mouseHover$.next(true); + } + /** + * @return {?} + */ + mouseLeave() { + this._mouseHover$.next(false); + } + /** + * @return {?} + */ + ngAfterContentInit() { + // setInterval() doesn't play well with SSR and protractor, + // so we should run it in the browser and outside Angular + if (isPlatformBrowser(this._platformId)) { + this._ngZone.runOutsideAngular((/** + * @return {?} + */ + () => { + /** @type {?} */ + const hasNextSlide$ = combineLatest(this.slide.pipe(map((/** + * @param {?} slideEvent + * @return {?} + */ + slideEvent => slideEvent.current)), startWith(this.activeId)), this._wrap$, this.slides.changes.pipe(startWith(null))) + .pipe(map((/** + * @param {?} __0 + * @return {?} + */ + ([currentSlideId, wrap]) => { + /** @type {?} */ + const slideArr = this.slides.toArray(); + /** @type {?} */ + const currentSlideIdx = this._getSlideIdxById(currentSlideId); + return wrap ? slideArr.length > 1 : currentSlideIdx < slideArr.length - 1; + })), distinctUntilChanged()); + combineLatest(this._pause$, this._pauseOnHover$, this._mouseHover$, this._interval$, hasNextSlide$) + .pipe(map((/** + * @param {?} __0 + * @return {?} + */ + ([pause, pauseOnHover, mouseHover, interval, hasNextSlide]) => ((pause || (pauseOnHover && mouseHover) || !hasNextSlide) ? 0 : interval))), distinctUntilChanged(), switchMap((/** + * @param {?} interval + * @return {?} + */ + interval => interval > 0 ? timer(interval, interval) : NEVER)), takeUntil(this._destroy$)) + .subscribe((/** + * @return {?} + */ + () => this._ngZone.run((/** + * @return {?} + */ + () => this.next(NgbSlideEventSource.TIMER))))); + })); + } + this.slides.changes.pipe(takeUntil(this._destroy$)).subscribe((/** + * @return {?} + */ + () => this._cd.markForCheck())); + } + /** + * @return {?} + */ + ngAfterContentChecked() { + /** @type {?} */ + let activeSlide = this._getSlideById(this.activeId); + this.activeId = activeSlide ? activeSlide.id : (this.slides.length ? this.slides.first.id : null); + } + /** + * @return {?} + */ + ngOnDestroy() { this._destroy$.next(); } + /** + * Navigates to a slide with the specified identifier. + * @param {?} slideId + * @param {?=} source + * @return {?} + */ + select(slideId, source) { + this._cycleToSelected(slideId, this._getSlideEventDirection(this.activeId, slideId), source); + } + /** + * Navigates to the previous slide. + * @param {?=} source + * @return {?} + */ + prev(source) { + this._cycleToSelected(this._getPrevSlide(this.activeId), NgbSlideEventDirection.RIGHT, source); + } + /** + * Navigates to the next slide. + * @param {?=} source + * @return {?} + */ + next(source) { + this._cycleToSelected(this._getNextSlide(this.activeId), NgbSlideEventDirection.LEFT, source); + } + /** + * Pauses cycling through the slides. + * @return {?} + */ + pause() { this._pause$.next(true); } + /** + * Restarts cycling through the slides from left to right. + * @return {?} + */ + cycle() { this._pause$.next(false); } + /** + * @private + * @param {?} slideIdx + * @param {?} direction + * @param {?=} source + * @return {?} + */ + _cycleToSelected(slideIdx, direction, source) { + /** @type {?} */ + let selectedSlide = this._getSlideById(slideIdx); + if (selectedSlide && selectedSlide.id !== this.activeId) { + this.slide.emit({ prev: this.activeId, current: selectedSlide.id, direction: direction, paused: this._pause$.value, source }); + this.activeId = selectedSlide.id; + } + // we get here after the interval fires or any external API call like next(), prev() or select() + this._cd.markForCheck(); + } + /** + * @private + * @param {?} currentActiveSlideId + * @param {?} nextActiveSlideId + * @return {?} + */ + _getSlideEventDirection(currentActiveSlideId, nextActiveSlideId) { + /** @type {?} */ + const currentActiveSlideIdx = this._getSlideIdxById(currentActiveSlideId); + /** @type {?} */ + const nextActiveSlideIdx = this._getSlideIdxById(nextActiveSlideId); + return currentActiveSlideIdx > nextActiveSlideIdx ? NgbSlideEventDirection.RIGHT : NgbSlideEventDirection.LEFT; + } + /** + * @private + * @param {?} slideId + * @return {?} + */ + _getSlideById(slideId) { return this.slides.find((/** + * @param {?} slide + * @return {?} + */ + slide => slide.id === slideId)); } + /** + * @private + * @param {?} slideId + * @return {?} + */ + _getSlideIdxById(slideId) { + return this.slides.toArray().indexOf(this._getSlideById(slideId)); + } + /** + * @private + * @param {?} currentSlideId + * @return {?} + */ + _getNextSlide(currentSlideId) { + /** @type {?} */ + const slideArr = this.slides.toArray(); + /** @type {?} */ + const currentSlideIdx = this._getSlideIdxById(currentSlideId); + /** @type {?} */ + const isLastSlide = currentSlideIdx === slideArr.length - 1; + return isLastSlide ? (this.wrap ? slideArr[0].id : slideArr[slideArr.length - 1].id) : + slideArr[currentSlideIdx + 1].id; + } + /** + * @private + * @param {?} currentSlideId + * @return {?} + */ + _getPrevSlide(currentSlideId) { + /** @type {?} */ + const slideArr = this.slides.toArray(); + /** @type {?} */ + const currentSlideIdx = this._getSlideIdxById(currentSlideId); + /** @type {?} */ + const isFirstSlide = currentSlideIdx === 0; + return isFirstSlide ? (this.wrap ? slideArr[slideArr.length - 1].id : slideArr[0].id) : + slideArr[currentSlideIdx - 1].id; + } +} +NgbCarousel.decorators = [ + { type: Component, args: [{ + selector: 'ngb-carousel', + exportAs: 'ngbCarousel', + changeDetection: ChangeDetectionStrategy.OnPush, + host: { + 'class': 'carousel slide', + '[style.display]': '"block"', + 'tabIndex': '0', + '(keydown.arrowLeft)': 'keyboard && prev(NgbSlideEventSource.ARROW_LEFT)', + '(keydown.arrowRight)': 'keyboard && next(NgbSlideEventSource.ARROW_RIGHT)' + }, + template: ` + + + + + Previous + + + + Next + + ` + }] } +]; +/** @nocollapse */ +NgbCarousel.ctorParameters = () => [ + { type: NgbCarouselConfig }, + { type: undefined, decorators: [{ type: Inject, args: [PLATFORM_ID,] }] }, + { type: NgZone }, + { type: ChangeDetectorRef } +]; +NgbCarousel.propDecorators = { + slides: [{ type: ContentChildren, args: [NgbSlide,] }], + activeId: [{ type: Input }], + interval: [{ type: Input }], + wrap: [{ type: Input }], + keyboard: [{ type: Input }], + pauseOnHover: [{ type: Input }], + showNavigationArrows: [{ type: Input }], + showNavigationIndicators: [{ type: Input }], + slide: [{ type: Output }], + mouseEnter: [{ type: HostListener, args: ['mouseenter',] }], + mouseLeave: [{ type: HostListener, args: ['mouseleave',] }] +}; +/** @enum {string} */ +const NgbSlideEventDirection = { + LEFT: (/** @type {?} */ ('left')), + RIGHT: (/** @type {?} */ ('right')), +}; +/** @enum {string} */ +const NgbSlideEventSource = { + TIMER: 'timer', + ARROW_LEFT: 'arrowLeft', + ARROW_RIGHT: 'arrowRight', + INDICATOR: 'indicator', +}; +/** @type {?} */ +const NGB_CAROUSEL_DIRECTIVES = [NgbCarousel, NgbSlide]; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +class NgbCarouselModule { +} +NgbCarouselModule.decorators = [ + { type: NgModule, args: [{ declarations: NGB_CAROUSEL_DIRECTIVES, exports: NGB_CAROUSEL_DIRECTIVES, imports: [CommonModule] },] } +]; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * A directive to provide a simple way of hiding and showing elements on the page. + */ +class NgbCollapse { + constructor() { + /** + * If `true`, will collapse the element or show it otherwise. + */ + this.collapsed = false; + } +} +NgbCollapse.decorators = [ + { type: Directive, args: [{ + selector: '[ngbCollapse]', + exportAs: 'ngbCollapse', + host: { '[class.collapse]': 'true', '[class.show]': '!collapsed' } + },] } +]; +NgbCollapse.propDecorators = { + collapsed: [{ type: Input, args: ['ngbCollapse',] }] +}; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +class NgbCollapseModule { +} +NgbCollapseModule.decorators = [ + { type: NgModule, args: [{ declarations: [NgbCollapse], exports: [NgbCollapse] },] } +]; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * A simple class that represents a date that datepicker also uses internally. + * + * It is the implementation of the `NgbDateStruct` interface that adds some convenience methods, + * like `.equals()`, `.before()`, etc. + * + * All datepicker APIs consume `NgbDateStruct`, but return `NgbDate`. + * + * In many cases it is simpler to manipulate these objects together with + * [`NgbCalendar`](#/components/datepicker/api#NgbCalendar) than native JS Dates. + * + * See the [date format overview](#/components/datepicker/overview#date-model) for more details. + * + * \@since 3.0.0 + */ +class NgbDate { + /** + * A **static method** that creates a new date object from the `NgbDateStruct`, + * + * ex. `NgbDate.from({year: 2000, month: 5, day: 1})`. + * + * If the `date` is already of `NgbDate` type, the method will return the same object. + * @param {?} date + * @return {?} + */ + static from(date) { + if (date instanceof NgbDate) { + return date; + } + return date ? new NgbDate(date.year, date.month, date.day) : null; + } + /** + * @param {?} year + * @param {?} month + * @param {?} day + */ + constructor(year, month, day) { + this.year = isInteger(year) ? year : null; + this.month = isInteger(month) ? month : null; + this.day = isInteger(day) ? day : null; + } + /** + * Checks if the current date is equal to another date. + * @param {?} other + * @return {?} + */ + equals(other) { + return other && this.year === other.year && this.month === other.month && this.day === other.day; + } + /** + * Checks if the current date is before another date. + * @param {?} other + * @return {?} + */ + before(other) { + if (!other) { + return false; + } + if (this.year === other.year) { + if (this.month === other.month) { + return this.day === other.day ? false : this.day < other.day; + } + else { + return this.month < other.month; + } + } + else { + return this.year < other.year; + } + } + /** + * Checks if the current date is after another date. + * @param {?} other + * @return {?} + */ + after(other) { + if (!other) { + return false; + } + if (this.year === other.year) { + if (this.month === other.month) { + return this.day === other.day ? false : this.day > other.day; + } + else { + return this.month > other.month; + } + } + else { + return this.year > other.year; + } + } +} + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * @param {?} jsDate + * @return {?} + */ +function fromJSDate(jsDate) { + return new NgbDate(jsDate.getFullYear(), jsDate.getMonth() + 1, jsDate.getDate()); +} +/** + * @param {?} date + * @return {?} + */ +function toJSDate(date) { + /** @type {?} */ + const jsDate = new Date(date.year, date.month - 1, date.day, 12); + // this is done avoid 30 -> 1930 conversion + if (!isNaN(jsDate.getTime())) { + jsDate.setFullYear(date.year); + } + return jsDate; +} +/** + * @return {?} + */ +function NGB_DATEPICKER_CALENDAR_FACTORY() { + return new NgbCalendarGregorian(); +} +/** + * A service that represents the calendar used by the datepicker. + * + * The default implementation uses the Gregorian calendar. You can inject it in your own + * implementations if necessary to simplify `NgbDate` calculations. + * @abstract + */ +class NgbCalendar { +} +NgbCalendar.decorators = [ + { type: Injectable, args: [{ providedIn: 'root', useFactory: NGB_DATEPICKER_CALENDAR_FACTORY },] } +]; +/** @nocollapse */ NgbCalendar.ngInjectableDef = ɵɵdefineInjectable({ factory: NGB_DATEPICKER_CALENDAR_FACTORY, token: NgbCalendar, providedIn: "root" }); +class NgbCalendarGregorian extends NgbCalendar { + /** + * @return {?} + */ + getDaysPerWeek() { return 7; } + /** + * @return {?} + */ + getMonths() { return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; } + /** + * @return {?} + */ + getWeeksPerMonth() { return 6; } + /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + getNext(date, period = 'd', number = 1) { + /** @type {?} */ + let jsDate = toJSDate(date); + switch (period) { + case 'y': + return new NgbDate(date.year + number, 1, 1); + case 'm': + jsDate = new Date(date.year, date.month + number - 1, 1, 12); + break; + case 'd': + jsDate.setDate(jsDate.getDate() + number); + break; + default: + return date; + } + return fromJSDate(jsDate); + } + /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + getPrev(date, period = 'd', number = 1) { return this.getNext(date, period, -number); } + /** + * @param {?} date + * @return {?} + */ + getWeekday(date) { + /** @type {?} */ + let jsDate = toJSDate(date); + /** @type {?} */ + let day = jsDate.getDay(); + // in JS Date Sun=0, in ISO 8601 Sun=7 + return day === 0 ? 7 : day; + } + /** + * @param {?} week + * @param {?} firstDayOfWeek + * @return {?} + */ + getWeekNumber(week, firstDayOfWeek) { + // in JS Date Sun=0, in ISO 8601 Sun=7 + if (firstDayOfWeek === 7) { + firstDayOfWeek = 0; + } + /** @type {?} */ + const thursdayIndex = (4 + 7 - firstDayOfWeek) % 7; + /** @type {?} */ + let date = week[thursdayIndex]; + /** @type {?} */ + const jsDate = toJSDate(date); + jsDate.setDate(jsDate.getDate() + 4 - (jsDate.getDay() || 7)); // Thursday + // Thursday + /** @type {?} */ + const time = jsDate.getTime(); + jsDate.setMonth(0); // Compare with Jan 1 + jsDate.setDate(1); + return Math.floor(Math.round((time - jsDate.getTime()) / 86400000) / 7) + 1; + } + /** + * @return {?} + */ + getToday() { return fromJSDate(new Date()); } + /** + * @param {?} date + * @return {?} + */ + isValid(date) { + if (!date || !isInteger(date.year) || !isInteger(date.month) || !isInteger(date.day)) { + return false; + } + // year 0 doesn't exist in Gregorian calendar + if (date.year === 0) { + return false; + } + /** @type {?} */ + const jsDate = toJSDate(date); + return !isNaN(jsDate.getTime()) && jsDate.getFullYear() === date.year && jsDate.getMonth() + 1 === date.month && + jsDate.getDate() === date.day; + } +} +NgbCalendarGregorian.decorators = [ + { type: Injectable } +]; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * @param {?} prev + * @param {?} next + * @return {?} + */ +function isChangedDate(prev, next) { + return !dateComparator(prev, next); +} +/** + * @param {?} prev + * @param {?} next + * @return {?} + */ +function isChangedMonth(prev, next) { + return !prev && !next ? false : !prev || !next ? true : prev.year !== next.year || prev.month !== next.month; +} +/** + * @param {?} prev + * @param {?} next + * @return {?} + */ +function dateComparator(prev, next) { + return (!prev && !next) || (!!prev && !!next && prev.equals(next)); +} +/** + * @param {?} minDate + * @param {?} maxDate + * @return {?} + */ +function checkMinBeforeMax(minDate, maxDate) { + if (maxDate && minDate && maxDate.before(minDate)) { + throw new Error(`'maxDate' ${maxDate} should be greater than 'minDate' ${minDate}`); + } +} +/** + * @param {?} date + * @param {?} minDate + * @param {?} maxDate + * @return {?} + */ +function checkDateInRange(date, minDate, maxDate) { + if (date && minDate && date.before(minDate)) { + return minDate; + } + if (date && maxDate && date.after(maxDate)) { + return maxDate; + } + return date; +} +/** + * @param {?} date + * @param {?} state + * @return {?} + */ +function isDateSelectable(date, state) { + const { minDate, maxDate, disabled, markDisabled } = state; + // clang-format off + return !(!isDefined(date) || + disabled || + (markDisabled && markDisabled(date, { year: date.year, month: date.month })) || + (minDate && date.before(minDate)) || + (maxDate && date.after(maxDate))); + // clang-format on +} +/** + * @param {?} calendar + * @param {?} date + * @param {?} minDate + * @param {?} maxDate + * @return {?} + */ +function generateSelectBoxMonths(calendar, date, minDate, maxDate) { + if (!date) { + return []; + } + /** @type {?} */ + let months = calendar.getMonths(date.year); + if (minDate && date.year === minDate.year) { + /** @type {?} */ + const index = months.findIndex((/** + * @param {?} month + * @return {?} + */ + month => month === minDate.month)); + months = months.slice(index); + } + if (maxDate && date.year === maxDate.year) { + /** @type {?} */ + const index = months.findIndex((/** + * @param {?} month + * @return {?} + */ + month => month === maxDate.month)); + months = months.slice(0, index + 1); + } + return months; +} +/** + * @param {?} date + * @param {?} minDate + * @param {?} maxDate + * @return {?} + */ +function generateSelectBoxYears(date, minDate, maxDate) { + if (!date) { + return []; + } + /** @type {?} */ + const start = minDate && minDate.year || date.year - 10; + /** @type {?} */ + const end = maxDate && maxDate.year || date.year + 10; + return Array.from({ length: end - start + 1 }, (/** + * @param {?} e + * @param {?} i + * @return {?} + */ + (e, i) => start + i)); +} +/** + * @param {?} calendar + * @param {?} date + * @param {?} maxDate + * @return {?} + */ +function nextMonthDisabled(calendar, date, maxDate) { + return maxDate && calendar.getNext(date, 'm').after(maxDate); +} +/** + * @param {?} calendar + * @param {?} date + * @param {?} minDate + * @return {?} + */ +function prevMonthDisabled(calendar, date, minDate) { + /** @type {?} */ + const prevDate = calendar.getPrev(date, 'm'); + return minDate && (prevDate.year === minDate.year && prevDate.month < minDate.month || + prevDate.year < minDate.year && minDate.month === 1); +} +/** + * @param {?} calendar + * @param {?} date + * @param {?} state + * @param {?} i18n + * @param {?} force + * @return {?} + */ +function buildMonths(calendar, date, state, i18n, force) { + const { displayMonths, months } = state; + // move old months to a temporary array + /** @type {?} */ + const monthsToReuse = months.splice(0, months.length); + // generate new first dates, nullify or reuse months + /** @type {?} */ + const firstDates = Array.from({ length: displayMonths }, (/** + * @param {?} _ + * @param {?} i + * @return {?} + */ + (_, i) => { + /** @type {?} */ + const firstDate = calendar.getNext(date, 'm', i); + months[i] = null; + if (!force) { + /** @type {?} */ + const reusedIndex = monthsToReuse.findIndex((/** + * @param {?} month + * @return {?} + */ + month => month.firstDate.equals(firstDate))); + // move reused month back to months + if (reusedIndex !== -1) { + months[i] = monthsToReuse.splice(reusedIndex, 1)[0]; + } + } + return firstDate; + })); + // rebuild nullified months + firstDates.forEach((/** + * @param {?} firstDate + * @param {?} i + * @return {?} + */ + (firstDate, i) => { + if (months[i] === null) { + months[i] = buildMonth(calendar, firstDate, state, i18n, monthsToReuse.shift() || (/** @type {?} */ ({}))); + } + })); + return months; +} +/** + * @param {?} calendar + * @param {?} date + * @param {?} state + * @param {?} i18n + * @param {?=} month + * @return {?} + */ +function buildMonth(calendar, date, state, i18n, month = (/** @type {?} */ ({}))) { + const { dayTemplateData, minDate, maxDate, firstDayOfWeek, markDisabled, outsideDays } = state; + /** @type {?} */ + const calendarToday = calendar.getToday(); + month.firstDate = null; + month.lastDate = null; + month.number = date.month; + month.year = date.year; + month.weeks = month.weeks || []; + month.weekdays = month.weekdays || []; + date = getFirstViewDate(calendar, date, firstDayOfWeek); + // month has weeks + for (let week = 0; week < calendar.getWeeksPerMonth(); week++) { + /** @type {?} */ + let weekObject = month.weeks[week]; + if (!weekObject) { + weekObject = month.weeks[week] = { number: 0, days: [], collapsed: true }; + } + /** @type {?} */ + const days = weekObject.days; + // week has days + for (let day = 0; day < calendar.getDaysPerWeek(); day++) { + if (week === 0) { + month.weekdays[day] = calendar.getWeekday(date); + } + /** @type {?} */ + const newDate = new NgbDate(date.year, date.month, date.day); + /** @type {?} */ + const nextDate = calendar.getNext(newDate); + /** @type {?} */ + const ariaLabel = i18n.getDayAriaLabel(newDate); + // marking date as disabled + /** @type {?} */ + let disabled = !!((minDate && newDate.before(minDate)) || (maxDate && newDate.after(maxDate))); + if (!disabled && markDisabled) { + disabled = markDisabled(newDate, { month: month.number, year: month.year }); + } + // today + /** @type {?} */ + let today = newDate.equals(calendarToday); + // adding user-provided data to the context + /** @type {?} */ + let contextUserData = dayTemplateData ? dayTemplateData(newDate, { month: month.number, year: month.year }) : undefined; + // saving first date of the month + if (month.firstDate === null && newDate.month === month.number) { + month.firstDate = newDate; + } + // saving last date of the month + if (newDate.month === month.number && nextDate.month !== month.number) { + month.lastDate = newDate; + } + /** @type {?} */ + let dayObject = days[day]; + if (!dayObject) { + dayObject = days[day] = (/** @type {?} */ ({})); + } + dayObject.date = newDate; + dayObject.context = Object.assign(dayObject.context || {}, { + $implicit: newDate, + date: newDate, + data: contextUserData, + currentMonth: month.number, disabled, + focused: false, + selected: false, today + }); + dayObject.tabindex = -1; + dayObject.ariaLabel = ariaLabel; + dayObject.hidden = false; + date = nextDate; + } + weekObject.number = calendar.getWeekNumber(days.map((/** + * @param {?} day + * @return {?} + */ + day => day.date)), firstDayOfWeek); + // marking week as collapsed + weekObject.collapsed = outsideDays === 'collapsed' && days[0].date.month !== month.number && + days[days.length - 1].date.month !== month.number; + } + return month; +} +/** + * @param {?} calendar + * @param {?} date + * @param {?} firstDayOfWeek + * @return {?} + */ +function getFirstViewDate(calendar, date, firstDayOfWeek) { + /** @type {?} */ + const daysPerWeek = calendar.getDaysPerWeek(); + /** @type {?} */ + const firstMonthDate = new NgbDate(date.year, date.month, 1); + /** @type {?} */ + const dayOfWeek = calendar.getWeekday(firstMonthDate) % daysPerWeek; + return calendar.getPrev(firstMonthDate, 'd', (daysPerWeek + dayOfWeek - firstDayOfWeek) % daysPerWeek); +} + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * @param {?} locale + * @return {?} + */ +function NGB_DATEPICKER_18N_FACTORY(locale) { + return new NgbDatepickerI18nDefault(locale); +} +/** + * A service supplying i18n data to the datepicker component. + * + * The default implementation of this service uses the Angular locale and registered locale data for + * weekdays and month names (as explained in the Angular i18n guide). + * + * It also provides a way to i18n data that depends on calendar calculations, like aria labels, day, week and year + * numerals. For other static labels the datepicker uses the default Angular i18n. + * + * See the [i18n demo](#/components/datepicker/examples#i18n) and + * [Hebrew calendar demo](#/components/datepicker/calendars#hebrew) on how to extend this class and define + * a custom provider for i18n. + * @abstract + */ +class NgbDatepickerI18n { + /** + * Returns the textual representation of a day that is rendered in a day cell. + * + * \@since 3.0.0 + * @param {?} date + * @return {?} + */ + getDayNumerals(date) { return `${date.day}`; } + /** + * Returns the textual representation of a week number rendered by datepicker. + * + * \@since 3.0.0 + * @param {?} weekNumber + * @return {?} + */ + getWeekNumerals(weekNumber) { return `${weekNumber}`; } + /** + * Returns the textual representation of a year that is rendered in the datepicker year select box. + * + * \@since 3.0.0 + * @param {?} year + * @return {?} + */ + getYearNumerals(year) { return `${year}`; } +} +NgbDatepickerI18n.decorators = [ + { type: Injectable, args: [{ providedIn: 'root', useFactory: NGB_DATEPICKER_18N_FACTORY, deps: [LOCALE_ID] },] } +]; +/** @nocollapse */ NgbDatepickerI18n.ngInjectableDef = ɵɵdefineInjectable({ factory: function NgbDatepickerI18n_Factory() { return NGB_DATEPICKER_18N_FACTORY(ɵɵinject(LOCALE_ID)); }, token: NgbDatepickerI18n, providedIn: "root" }); +class NgbDatepickerI18nDefault extends NgbDatepickerI18n { + /** + * @param {?} _locale + */ + constructor(_locale) { + super(); + this._locale = _locale; + /** @type {?} */ + const weekdaysStartingOnSunday = getLocaleDayNames(_locale, FormStyle.Standalone, TranslationWidth.Short); + this._weekdaysShort = weekdaysStartingOnSunday.map((/** + * @param {?} day + * @param {?} index + * @return {?} + */ + (day, index) => weekdaysStartingOnSunday[(index + 1) % 7])); + this._monthsShort = getLocaleMonthNames(_locale, FormStyle.Standalone, TranslationWidth.Abbreviated); + this._monthsFull = getLocaleMonthNames(_locale, FormStyle.Standalone, TranslationWidth.Wide); + } + /** + * @param {?} weekday + * @return {?} + */ + getWeekdayShortName(weekday) { return this._weekdaysShort[weekday - 1]; } + /** + * @param {?} month + * @return {?} + */ + getMonthShortName(month) { return this._monthsShort[month - 1]; } + /** + * @param {?} month + * @return {?} + */ + getMonthFullName(month) { return this._monthsFull[month - 1]; } + /** + * @param {?} date + * @return {?} + */ + getDayAriaLabel(date) { + /** @type {?} */ + const jsDate = new Date(date.year, date.month - 1, date.day); + return formatDate(jsDate, 'fullDate', this._locale); + } +} +NgbDatepickerI18nDefault.decorators = [ + { type: Injectable } +]; +/** @nocollapse */ +NgbDatepickerI18nDefault.ctorParameters = () => [ + { type: String, decorators: [{ type: Inject, args: [LOCALE_ID,] }] } +]; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +class NgbDatepickerService { + /** + * @param {?} _calendar + * @param {?} _i18n + */ + constructor(_calendar, _i18n) { + this._calendar = _calendar; + this._i18n = _i18n; + this._model$ = new Subject(); + this._select$ = new Subject(); + this._state = { + disabled: false, + displayMonths: 1, + firstDayOfWeek: 1, + focusVisible: false, + months: [], + navigation: 'select', + outsideDays: 'visible', + prevDisabled: false, + nextDisabled: false, + selectBoxes: { years: [], months: [] }, + selectedDate: null + }; + } + /** + * @return {?} + */ + get model$() { return this._model$.pipe(filter((/** + * @param {?} model + * @return {?} + */ + model => model.months.length > 0))); } + /** + * @return {?} + */ + get select$() { return this._select$.pipe(filter((/** + * @param {?} date + * @return {?} + */ + date => date !== null))); } + /** + * @param {?} dayTemplateData + * @return {?} + */ + set dayTemplateData(dayTemplateData) { + if (this._state.dayTemplateData !== dayTemplateData) { + this._nextState({ dayTemplateData }); + } + } + /** + * @param {?} disabled + * @return {?} + */ + set disabled(disabled) { + if (this._state.disabled !== disabled) { + this._nextState({ disabled }); + } + } + /** + * @param {?} displayMonths + * @return {?} + */ + set displayMonths(displayMonths) { + displayMonths = toInteger(displayMonths); + if (isInteger(displayMonths) && displayMonths > 0 && this._state.displayMonths !== displayMonths) { + this._nextState({ displayMonths }); + } + } + /** + * @param {?} firstDayOfWeek + * @return {?} + */ + set firstDayOfWeek(firstDayOfWeek) { + firstDayOfWeek = toInteger(firstDayOfWeek); + if (isInteger(firstDayOfWeek) && firstDayOfWeek >= 0 && this._state.firstDayOfWeek !== firstDayOfWeek) { + this._nextState({ firstDayOfWeek }); + } + } + /** + * @param {?} focusVisible + * @return {?} + */ + set focusVisible(focusVisible) { + if (this._state.focusVisible !== focusVisible && !this._state.disabled) { + this._nextState({ focusVisible }); + } + } + /** + * @param {?} date + * @return {?} + */ + set maxDate(date) { + /** @type {?} */ + const maxDate = this.toValidDate(date, null); + if (isChangedDate(this._state.maxDate, maxDate)) { + this._nextState({ maxDate }); + } + } + /** + * @param {?} markDisabled + * @return {?} + */ + set markDisabled(markDisabled) { + if (this._state.markDisabled !== markDisabled) { + this._nextState({ markDisabled }); + } + } + /** + * @param {?} date + * @return {?} + */ + set minDate(date) { + /** @type {?} */ + const minDate = this.toValidDate(date, null); + if (isChangedDate(this._state.minDate, minDate)) { + this._nextState({ minDate }); + } + } + /** + * @param {?} navigation + * @return {?} + */ + set navigation(navigation) { + if (this._state.navigation !== navigation) { + this._nextState({ navigation }); + } + } + /** + * @param {?} outsideDays + * @return {?} + */ + set outsideDays(outsideDays) { + if (this._state.outsideDays !== outsideDays) { + this._nextState({ outsideDays }); + } + } + /** + * @param {?} date + * @return {?} + */ + focus(date) { + if (!this._state.disabled && this._calendar.isValid(date) && isChangedDate(this._state.focusDate, date)) { + this._nextState({ focusDate: date }); + } + } + /** + * @param {?=} period + * @param {?=} number + * @return {?} + */ + focusMove(period, number) { + this.focus(this._calendar.getNext(this._state.focusDate, period, number)); + } + /** + * @return {?} + */ + focusSelect() { + if (isDateSelectable(this._state.focusDate, this._state)) { + this.select(this._state.focusDate, { emitEvent: true }); + } + } + /** + * @param {?} date + * @return {?} + */ + open(date) { + /** @type {?} */ + const firstDate = this.toValidDate(date, this._calendar.getToday()); + if (!this._state.disabled && (!this._state.firstDate || isChangedMonth(this._state.firstDate, date))) { + this._nextState({ firstDate }); + } + } + /** + * @param {?} date + * @param {?=} options + * @return {?} + */ + select(date, options = {}) { + /** @type {?} */ + const selectedDate = this.toValidDate(date, null); + if (!this._state.disabled) { + if (isChangedDate(this._state.selectedDate, selectedDate)) { + this._nextState({ selectedDate }); + } + if (options.emitEvent && isDateSelectable(selectedDate, this._state)) { + this._select$.next(selectedDate); + } + } + } + /** + * @param {?} date + * @param {?=} defaultValue + * @return {?} + */ + toValidDate(date, defaultValue) { + /** @type {?} */ + const ngbDate = NgbDate.from(date); + if (defaultValue === undefined) { + defaultValue = this._calendar.getToday(); + } + return this._calendar.isValid(ngbDate) ? ngbDate : defaultValue; + } + /** + * @private + * @param {?} patch + * @return {?} + */ + _nextState(patch) { + /** @type {?} */ + const newState = this._updateState(patch); + this._patchContexts(newState); + this._state = newState; + this._model$.next(this._state); + } + /** + * @private + * @param {?} state + * @return {?} + */ + _patchContexts(state) { + const { months, displayMonths, selectedDate, focusDate, focusVisible, disabled, outsideDays } = state; + state.months.forEach((/** + * @param {?} month + * @return {?} + */ + month => { + month.weeks.forEach((/** + * @param {?} week + * @return {?} + */ + week => { + week.days.forEach((/** + * @param {?} day + * @return {?} + */ + day => { + // patch focus flag + if (focusDate) { + day.context.focused = focusDate.equals(day.date) && focusVisible; + } + // calculating tabindex + day.tabindex = !disabled && day.date.equals(focusDate) && focusDate.month === month.number ? 0 : -1; + // override context disabled + if (disabled === true) { + day.context.disabled = true; + } + // patch selection flag + if (selectedDate !== undefined) { + day.context.selected = selectedDate !== null && selectedDate.equals(day.date); + } + // visibility + if (month.number !== day.date.month) { + day.hidden = outsideDays === 'hidden' || outsideDays === 'collapsed' || + (displayMonths > 1 && day.date.after(months[0].firstDate) && + day.date.before(months[displayMonths - 1].lastDate)); + } + })); + })); + })); + } + /** + * @private + * @param {?} patch + * @return {?} + */ + _updateState(patch) { + // patching fields + /** @type {?} */ + const state = Object.assign({}, this._state, patch); + /** @type {?} */ + let startDate = state.firstDate; + // min/max dates changed + if ('minDate' in patch || 'maxDate' in patch) { + checkMinBeforeMax(state.minDate, state.maxDate); + state.focusDate = checkDateInRange(state.focusDate, state.minDate, state.maxDate); + state.firstDate = checkDateInRange(state.firstDate, state.minDate, state.maxDate); + startDate = state.focusDate; + } + // disabled + if ('disabled' in patch) { + state.focusVisible = false; + } + // initial rebuild via 'select()' + if ('selectedDate' in patch && this._state.months.length === 0) { + startDate = state.selectedDate; + } + // terminate early if only focus visibility was changed + if ('focusVisible' in patch) { + return state; + } + // focus date changed + if ('focusDate' in patch) { + state.focusDate = checkDateInRange(state.focusDate, state.minDate, state.maxDate); + startDate = state.focusDate; + // nothing to rebuild if only focus changed and it is still visible + if (state.months.length !== 0 && !state.focusDate.before(state.firstDate) && + !state.focusDate.after(state.lastDate)) { + return state; + } + } + // first date changed + if ('firstDate' in patch) { + state.firstDate = checkDateInRange(state.firstDate, state.minDate, state.maxDate); + startDate = state.firstDate; + } + // rebuilding months + if (startDate) { + /** @type {?} */ + const forceRebuild = 'dayTemplateData' in patch || 'firstDayOfWeek' in patch || 'markDisabled' in patch || + 'minDate' in patch || 'maxDate' in patch || 'disabled' in patch || 'outsideDays' in patch; + /** @type {?} */ + const months = buildMonths(this._calendar, startDate, state, this._i18n, forceRebuild); + // updating months and boundary dates + state.months = months; + state.firstDate = months.length > 0 ? months[0].firstDate : undefined; + state.lastDate = months.length > 0 ? months[months.length - 1].lastDate : undefined; + // reset selected date if 'markDisabled' returns true + if ('selectedDate' in patch && !isDateSelectable(state.selectedDate, state)) { + state.selectedDate = null; + } + // adjusting focus after months were built + if ('firstDate' in patch) { + if (state.focusDate === undefined || state.focusDate.before(state.firstDate) || + state.focusDate.after(state.lastDate)) { + state.focusDate = startDate; + } + } + // adjusting months/years for the select box navigation + /** @type {?} */ + const yearChanged = !this._state.firstDate || this._state.firstDate.year !== state.firstDate.year; + /** @type {?} */ + const monthChanged = !this._state.firstDate || this._state.firstDate.month !== state.firstDate.month; + if (state.navigation === 'select') { + // years -> boundaries (min/max were changed) + if ('minDate' in patch || 'maxDate' in patch || state.selectBoxes.years.length === 0 || yearChanged) { + state.selectBoxes.years = generateSelectBoxYears(state.firstDate, state.minDate, state.maxDate); + } + // months -> when current year or boundaries change + if ('minDate' in patch || 'maxDate' in patch || state.selectBoxes.months.length === 0 || yearChanged) { + state.selectBoxes.months = + generateSelectBoxMonths(this._calendar, state.firstDate, state.minDate, state.maxDate); + } + } + else { + state.selectBoxes = { years: [], months: [] }; + } + // updating navigation arrows -> boundaries change (min/max) or month/year changes + if ((state.navigation === 'arrows' || state.navigation === 'select') && + (monthChanged || yearChanged || 'minDate' in patch || 'maxDate' in patch || 'disabled' in patch)) { + state.prevDisabled = state.disabled || prevMonthDisabled(this._calendar, state.firstDate, state.minDate); + state.nextDisabled = state.disabled || nextMonthDisabled(this._calendar, state.lastDate, state.maxDate); + } + } + return state; + } +} +NgbDatepickerService.decorators = [ + { type: Injectable } +]; +/** @nocollapse */ +NgbDatepickerService.ctorParameters = () => [ + { type: NgbCalendar }, + { type: NgbDatepickerI18n } +]; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @enum {number} */ +const Key = { + Tab: 9, + Enter: 13, + Escape: 27, + Space: 32, + PageUp: 33, + PageDown: 34, + End: 35, + Home: 36, + ArrowLeft: 37, + ArrowUp: 38, + ArrowRight: 39, + ArrowDown: 40, +}; +Key[Key.Tab] = 'Tab'; +Key[Key.Enter] = 'Enter'; +Key[Key.Escape] = 'Escape'; +Key[Key.Space] = 'Space'; +Key[Key.PageUp] = 'PageUp'; +Key[Key.PageDown] = 'PageDown'; +Key[Key.End] = 'End'; +Key[Key.Home] = 'Home'; +Key[Key.ArrowLeft] = 'ArrowLeft'; +Key[Key.ArrowUp] = 'ArrowUp'; +Key[Key.ArrowRight] = 'ArrowRight'; +Key[Key.ArrowDown] = 'ArrowDown'; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +class NgbDatepickerKeyMapService { + /** + * @param {?} _service + * @param {?} _calendar + */ + constructor(_service, _calendar) { + this._service = _service; + this._calendar = _calendar; + _service.model$.subscribe((/** + * @param {?} model + * @return {?} + */ + model => { + this._minDate = model.minDate; + this._maxDate = model.maxDate; + this._firstViewDate = model.firstDate; + this._lastViewDate = model.lastDate; + })); + } + /** + * @param {?} event + * @return {?} + */ + processKey(event) { + // tslint:disable-next-line:deprecation + switch (event.which) { + case Key.PageUp: + this._service.focusMove(event.shiftKey ? 'y' : 'm', -1); + break; + case Key.PageDown: + this._service.focusMove(event.shiftKey ? 'y' : 'm', 1); + break; + case Key.End: + this._service.focus(event.shiftKey ? this._maxDate : this._lastViewDate); + break; + case Key.Home: + this._service.focus(event.shiftKey ? this._minDate : this._firstViewDate); + break; + case Key.ArrowLeft: + this._service.focusMove('d', -1); + break; + case Key.ArrowUp: + this._service.focusMove('d', -this._calendar.getDaysPerWeek()); + break; + case Key.ArrowRight: + this._service.focusMove('d', 1); + break; + case Key.ArrowDown: + this._service.focusMove('d', this._calendar.getDaysPerWeek()); + break; + case Key.Enter: + case Key.Space: + this._service.focusSelect(); + break; + default: + return; + } + // note 'return' in default case + event.preventDefault(); + event.stopPropagation(); + } +} +NgbDatepickerKeyMapService.decorators = [ + { type: Injectable } +]; +/** @nocollapse */ +NgbDatepickerKeyMapService.ctorParameters = () => [ + { type: NgbDatepickerService }, + { type: NgbCalendar } +]; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @enum {number} */ +const NavigationEvent = { + PREV: 0, + NEXT: 1, +}; +NavigationEvent[NavigationEvent.PREV] = 'PREV'; +NavigationEvent[NavigationEvent.NEXT] = 'NEXT'; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * A configuration service for the [`NgbDatepicker`](#/components/datepicker/api#NgbDatepicker) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the datepickers used in the application. + */ +class NgbDatepickerConfig { + constructor() { + this.displayMonths = 1; + this.firstDayOfWeek = 1; + this.navigation = 'select'; + this.outsideDays = 'visible'; + this.showWeekdays = true; + this.showWeekNumbers = false; + } +} +NgbDatepickerConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } +]; +/** @nocollapse */ NgbDatepickerConfig.ngInjectableDef = ɵɵdefineInjectable({ factory: function NgbDatepickerConfig_Factory() { return new NgbDatepickerConfig(); }, token: NgbDatepickerConfig, providedIn: "root" }); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * @return {?} + */ +function NGB_DATEPICKER_DATE_ADAPTER_FACTORY() { + return new NgbDateStructAdapter(); +} +/** + * An abstract service that does the conversion between the internal datepicker `NgbDateStruct` model and + * any provided user date model `D`, ex. a string, a native date, etc. + * + * The adapter is used **only** for conversion when binding datepicker to a form control, + * ex. `[(ngModel)]="userDateModel"`. Here `userDateModel` can be of any type. + * + * The default datepicker implementation assumes we use `NgbDateStruct` as a user model. + * + * See the [date format overview](#/components/datepicker/overview#date-model) for more details + * and the [custom adapter demo](#/components/datepicker/examples#adapter) for an example. + * @abstract + * @template D + */ +class NgbDateAdapter { +} +NgbDateAdapter.decorators = [ + { type: Injectable, args: [{ providedIn: 'root', useFactory: NGB_DATEPICKER_DATE_ADAPTER_FACTORY },] } +]; +/** @nocollapse */ NgbDateAdapter.ngInjectableDef = ɵɵdefineInjectable({ factory: NGB_DATEPICKER_DATE_ADAPTER_FACTORY, token: NgbDateAdapter, providedIn: "root" }); +class NgbDateStructAdapter extends NgbDateAdapter { + /** + * Converts a NgbDateStruct value into NgbDateStruct value + * @param {?} date + * @return {?} + */ + fromModel(date) { + return (date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day)) ? + { year: date.year, month: date.month, day: date.day } : + null; + } + /** + * Converts a NgbDateStruct value into NgbDateStruct value + * @param {?} date + * @return {?} + */ + toModel(date) { + return (date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day)) ? + { year: date.year, month: date.month, day: date.day } : + null; + } +} +NgbDateStructAdapter.decorators = [ + { type: Injectable } +]; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @type {?} */ +const NGB_DATEPICKER_VALUE_ACCESSOR = { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef((/** + * @return {?} + */ + () => NgbDatepicker)), + multi: true +}; +/** + * A highly configurable component that helps you with selecting calendar dates. + * + * `NgbDatepicker` is meant to be displayed inline on a page or put inside a popup. + */ +class NgbDatepicker { + /** + * @param {?} _keyMapService + * @param {?} _service + * @param {?} _calendar + * @param {?} i18n + * @param {?} config + * @param {?} _cd + * @param {?} _elementRef + * @param {?} _ngbDateAdapter + * @param {?} _ngZone + */ + constructor(_keyMapService, _service, _calendar, i18n, config, _cd, _elementRef, _ngbDateAdapter, _ngZone) { + this._keyMapService = _keyMapService; + this._service = _service; + this._calendar = _calendar; + this.i18n = i18n; + this._cd = _cd; + this._elementRef = _elementRef; + this._ngbDateAdapter = _ngbDateAdapter; + this._ngZone = _ngZone; + this._destroyed$ = new Subject(); + /** + * An event emitted right before the navigation happens and displayed month changes. + * + * See [`NgbDatepickerNavigateEvent`](#/components/datepicker/api#NgbDatepickerNavigateEvent) for the payload info. + */ + this.navigate = new EventEmitter(); + /** + * An event emitted when user selects a date using keyboard or mouse. + * + * The payload of the event is currently selected `NgbDate`. + */ + this.select = new EventEmitter(); + this.onChange = (/** + * @param {?} _ + * @return {?} + */ + (_) => { }); + this.onTouched = (/** + * @return {?} + */ + () => { }); + ['dayTemplate', 'dayTemplateData', 'displayMonths', 'firstDayOfWeek', 'footerTemplate', 'markDisabled', 'minDate', + 'maxDate', 'navigation', 'outsideDays', 'showWeekdays', 'showWeekNumbers', 'startDate'] + .forEach((/** + * @param {?} input + * @return {?} + */ + input => this[input] = config[input])); + _service.select$.pipe(takeUntil(this._destroyed$)).subscribe((/** + * @param {?} date + * @return {?} + */ + date => { this.select.emit(date); })); + _service.model$.pipe(takeUntil(this._destroyed$)).subscribe((/** + * @param {?} model + * @return {?} + */ + model => { + /** @type {?} */ + const newDate = model.firstDate; + /** @type {?} */ + const oldDate = this.model ? this.model.firstDate : null; + /** @type {?} */ + let navigationPrevented = false; + // emitting navigation event if the first month changes + if (!newDate.equals(oldDate)) { + this.navigate.emit({ + current: oldDate ? { year: oldDate.year, month: oldDate.month } : null, + next: { year: newDate.year, month: newDate.month }, + preventDefault: (/** + * @return {?} + */ + () => navigationPrevented = true) + }); + // can't prevent the very first navigation + if (navigationPrevented && oldDate !== null) { + this._service.open(oldDate); + return; + } + } + /** @type {?} */ + const newSelectedDate = model.selectedDate; + /** @type {?} */ + const newFocusedDate = model.focusDate; + /** @type {?} */ + const oldFocusedDate = this.model ? this.model.focusDate : null; + this.model = model; + // handling selection change + if (isChangedDate(newSelectedDate, this._controlValue)) { + this._controlValue = newSelectedDate; + this.onTouched(); + this.onChange(this._ngbDateAdapter.toModel(newSelectedDate)); + } + // handling focus change + if (isChangedDate(newFocusedDate, oldFocusedDate) && oldFocusedDate && model.focusVisible) { + this.focus(); + } + _cd.markForCheck(); + })); + } + /** + * @return {?} + */ + focus() { + this._ngZone.onStable.asObservable().pipe(take(1)).subscribe((/** + * @return {?} + */ + () => { + /** @type {?} */ + const elementToFocus = this._elementRef.nativeElement.querySelector('div.ngb-dp-day[tabindex="0"]'); + if (elementToFocus) { + elementToFocus.focus(); + } + })); + } + /** + * Navigates to the provided date. + * + * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec. + * If nothing or invalid date provided calendar will open current month. + * + * Use the `[startDate]` input as an alternative. + * @param {?=} date + * @return {?} + */ + navigateTo(date) { + this._service.open(NgbDate.from(date ? date.day ? (/** @type {?} */ (date)) : Object.assign({}, date, { day: 1 }) : null)); + } + /** + * @return {?} + */ + ngAfterViewInit() { + this._ngZone.runOutsideAngular((/** + * @return {?} + */ + () => { + /** @type {?} */ + const focusIns$ = fromEvent(this._monthsEl.nativeElement, 'focusin'); + /** @type {?} */ + const focusOuts$ = fromEvent(this._monthsEl.nativeElement, 'focusout'); + // we're changing 'focusVisible' only when entering or leaving months view + // and ignoring all focus events where both 'target' and 'related' target are day cells + merge(focusIns$, focusOuts$) + .pipe(filter((/** + * @param {?} __0 + * @return {?} + */ + ({ target, relatedTarget }) => !(hasClassName(target, 'ngb-dp-day') && hasClassName(relatedTarget, 'ngb-dp-day')))), takeUntil(this._destroyed$)) + .subscribe((/** + * @param {?} __0 + * @return {?} + */ + ({ type }) => this._ngZone.run((/** + * @return {?} + */ + () => this._service.focusVisible = type === 'focusin')))); + })); + } + /** + * @return {?} + */ + ngOnDestroy() { this._destroyed$.next(); } + /** + * @return {?} + */ + ngOnInit() { + if (this.model === undefined) { + ['dayTemplateData', 'displayMonths', 'markDisabled', 'firstDayOfWeek', 'navigation', 'minDate', 'maxDate', + 'outsideDays'] + .forEach((/** + * @param {?} input + * @return {?} + */ + input => this._service[input] = this[input])); + this.navigateTo(this.startDate); + } + } + /** + * @param {?} changes + * @return {?} + */ + ngOnChanges(changes) { + ['dayTemplateData', 'displayMonths', 'markDisabled', 'firstDayOfWeek', 'navigation', 'minDate', 'maxDate', + 'outsideDays'] + .filter((/** + * @param {?} input + * @return {?} + */ + input => input in changes)) + .forEach((/** + * @param {?} input + * @return {?} + */ + input => this._service[input] = this[input])); + if ('startDate' in changes) { + const { currentValue, previousValue } = changes.startDate; + if (isChangedMonth(previousValue, currentValue)) { + this.navigateTo(this.startDate); + } + } + } + /** + * @param {?} date + * @return {?} + */ + onDateSelect(date) { + this._service.focus(date); + this._service.select(date, { emitEvent: true }); + } + /** + * @param {?} event + * @return {?} + */ + onKeyDown(event) { this._keyMapService.processKey(event); } + /** + * @param {?} date + * @return {?} + */ + onNavigateDateSelect(date) { this._service.open(date); } + /** + * @param {?} event + * @return {?} + */ + onNavigateEvent(event) { + switch (event) { + case NavigationEvent.PREV: + this._service.open(this._calendar.getPrev(this.model.firstDate, 'm', 1)); + break; + case NavigationEvent.NEXT: + this._service.open(this._calendar.getNext(this.model.firstDate, 'm', 1)); + break; + } + } + /** + * @param {?} fn + * @return {?} + */ + registerOnChange(fn) { this.onChange = fn; } + /** + * @param {?} fn + * @return {?} + */ + registerOnTouched(fn) { this.onTouched = fn; } + /** + * @param {?} isDisabled + * @return {?} + */ + setDisabledState(isDisabled) { this._service.disabled = isDisabled; } + /** + * @param {?} value + * @return {?} + */ + writeValue(value) { + this._controlValue = NgbDate.from(this._ngbDateAdapter.fromModel(value)); + this._service.select(this._controlValue); + } +} +NgbDatepicker.decorators = [ + { type: Component, args: [{ + exportAs: 'ngbDatepicker', + selector: 'ngb-datepicker', + changeDetection: ChangeDetectionStrategy.OnPush, + encapsulation: ViewEncapsulation.None, + template: ` + +
+
+
+ +
+ + +
+ +
+ +
+
+ {{ i18n.getMonthFullName(month.number, month.year) }} {{ i18n.getYearNumerals(month.year) }} +
+ + +
+
+
+ + + `, + providers: [NGB_DATEPICKER_VALUE_ACCESSOR, NgbDatepickerService, NgbDatepickerKeyMapService], + styles: ["ngb-datepicker{border:1px solid #dfdfdf;border-radius:.25rem;display:inline-block}ngb-datepicker-month-view{pointer-events:auto}ngb-datepicker.dropdown-menu{padding:0}.ngb-dp-body{z-index:1050}.ngb-dp-header{border-bottom:0;border-radius:.25rem .25rem 0 0;padding-top:.25rem;background-color:#f8f9fa}.ngb-dp-months{display:-ms-flexbox;display:flex}.ngb-dp-month{pointer-events:none}.ngb-dp-month-name{font-size:larger;height:2rem;line-height:2rem;text-align:center;background-color:#f8f9fa}.ngb-dp-month+.ngb-dp-month .ngb-dp-month-name,.ngb-dp-month+.ngb-dp-month .ngb-dp-week{padding-left:1rem}.ngb-dp-month:last-child .ngb-dp-week{padding-right:.25rem}.ngb-dp-month:first-child .ngb-dp-week{padding-left:.25rem}.ngb-dp-month .ngb-dp-week:last-child{padding-bottom:.25rem}"] + }] } +]; +/** @nocollapse */ +NgbDatepicker.ctorParameters = () => [ + { type: NgbDatepickerKeyMapService }, + { type: NgbDatepickerService }, + { type: NgbCalendar }, + { type: NgbDatepickerI18n }, + { type: NgbDatepickerConfig }, + { type: ChangeDetectorRef }, + { type: ElementRef }, + { type: NgbDateAdapter }, + { type: NgZone } +]; +NgbDatepicker.propDecorators = { + _monthsEl: [{ type: ViewChild, args: ['months', { static: true },] }], + dayTemplate: [{ type: Input }], + dayTemplateData: [{ type: Input }], + displayMonths: [{ type: Input }], + firstDayOfWeek: [{ type: Input }], + footerTemplate: [{ type: Input }], + markDisabled: [{ type: Input }], + maxDate: [{ type: Input }], + minDate: [{ type: Input }], + navigation: [{ type: Input }], + outsideDays: [{ type: Input }], + showWeekdays: [{ type: Input }], + showWeekNumbers: [{ type: Input }], + startDate: [{ type: Input }], + navigate: [{ type: Output }], + select: [{ type: Output }] +}; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +class NgbDatepickerMonthView { + /** + * @param {?} i18n + */ + constructor(i18n) { + this.i18n = i18n; + this.select = new EventEmitter(); + } + /** + * @param {?} day + * @return {?} + */ + doSelect(day) { + if (!day.context.disabled && !day.hidden) { + this.select.emit(day.date); + } + } +} +NgbDatepickerMonthView.decorators = [ + { type: Component, args: [{ + selector: 'ngb-datepicker-month-view', + host: { 'role': 'grid' }, + encapsulation: ViewEncapsulation.None, + template: ` +
+
+
+ {{ i18n.getWeekdayShortName(w) }} +
+
+ +
+
{{ i18n.getWeekNumerals(week.number) }}
+
+ + + +
+
+
+ `, + styles: ["ngb-datepicker-month-view{display:block}.ngb-dp-week-number,.ngb-dp-weekday{line-height:2rem;text-align:center;font-style:italic}.ngb-dp-weekday{color:#5bc0de;color:var(--info)}.ngb-dp-week{border-radius:.25rem;display:-ms-flexbox;display:flex}.ngb-dp-weekdays{border-bottom:1px solid rgba(0,0,0,.125);border-radius:0}.ngb-dp-day,.ngb-dp-week-number,.ngb-dp-weekday{width:2rem;height:2rem}.ngb-dp-day{cursor:pointer}.ngb-dp-day.disabled,.ngb-dp-day.hidden{cursor:default}"] + }] } +]; +/** @nocollapse */ +NgbDatepickerMonthView.ctorParameters = () => [ + { type: NgbDatepickerI18n } +]; +NgbDatepickerMonthView.propDecorators = { + dayTemplate: [{ type: Input }], + month: [{ type: Input }], + showWeekdays: [{ type: Input }], + showWeekNumbers: [{ type: Input }], + select: [{ type: Output }] +}; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +class NgbDatepickerNavigation { + /** + * @param {?} i18n + */ + constructor(i18n) { + this.i18n = i18n; + this.navigation = NavigationEvent; + this.months = []; + this.navigate = new EventEmitter(); + this.select = new EventEmitter(); + } +} +NgbDatepickerNavigation.decorators = [ + { type: Component, args: [{ + selector: 'ngb-datepicker-navigation', + changeDetection: ChangeDetectionStrategy.OnPush, + encapsulation: ViewEncapsulation.None, + template: ` +
+ +
+ + + + +
+
+ {{ i18n.getMonthFullName(month.number, month.year) }} {{ i18n.getYearNumerals(month.year) }} +
+
+
+
+ +
+ `, + styles: ["ngb-datepicker-navigation{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.ngb-dp-navigation-chevron{border-style:solid;border-width:.2em .2em 0 0;display:inline-block;width:.75em;height:.75em;margin-left:.25em;margin-right:.15em;-webkit-transform:rotate(-135deg);transform:rotate(-135deg)}.right .ngb-dp-navigation-chevron{-webkit-transform:rotate(45deg);transform:rotate(45deg);margin-left:.15em;margin-right:.25em}.ngb-dp-arrow{display:-ms-flexbox;display:flex;-ms-flex:1 1 auto;flex:1 1 auto;padding-right:0;padding-left:0;margin:0;width:2rem;height:2rem}.ngb-dp-arrow.right{-ms-flex-pack:end;justify-content:flex-end}.ngb-dp-arrow-btn{padding:0 .25rem;margin:0 .5rem;border:none;background-color:transparent;z-index:1}.ngb-dp-arrow-btn:focus{outline-width:1px;outline-style:auto}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.ngb-dp-arrow-btn:focus{outline-style:solid}}.ngb-dp-month-name{font-size:larger;height:2rem;line-height:2rem;text-align:center}.ngb-dp-navigation-select{display:-ms-flexbox;display:flex;-ms-flex:1 1 9rem;flex:1 1 9rem}"] + }] } +]; +/** @nocollapse */ +NgbDatepickerNavigation.ctorParameters = () => [ + { type: NgbDatepickerI18n } +]; +NgbDatepickerNavigation.propDecorators = { + date: [{ type: Input }], + disabled: [{ type: Input }], + months: [{ type: Input }], + showSelect: [{ type: Input }], + prevDisabled: [{ type: Input }], + nextDisabled: [{ type: Input }], + selectBoxes: [{ type: Input }], + navigate: [{ type: Output }], + select: [{ type: Output }] +}; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @type {?} */ +const isContainedIn = (/** + * @param {?} element + * @param {?=} array + * @return {?} + */ +(element, array) => array ? array.some((/** + * @param {?} item + * @return {?} + */ +item => item.contains(element))) : false); +/** @type {?} */ +const matchesSelectorIfAny = (/** + * @param {?} element + * @param {?=} selector + * @return {?} + */ +(element, selector) => !selector || closest(element, selector) != null); +// we'll have to use 'touch' events instead of 'mouse' events on iOS and add a more significant delay +// to avoid re-opening when handling (click) on a toggling element +// TODO: use proper Angular platform detection when NgbAutoClose becomes a service and we can inject PLATFORM_ID +/** @type {?} */ +let iOS = false; +if (typeof navigator !== 'undefined') { + iOS = !!navigator.userAgent && /iPad|iPhone|iPod/.test(navigator.userAgent); +} +/** + * @param {?} zone + * @param {?} document + * @param {?} type + * @param {?} close + * @param {?} closed$ + * @param {?} insideElements + * @param {?=} ignoreElements + * @param {?=} insideSelector + * @return {?} + */ +function ngbAutoClose(zone, document, type, close, closed$, insideElements, ignoreElements, insideSelector) { + // closing on ESC and outside clicks + if (type) { + zone.runOutsideAngular((/** + * @return {?} + */ + () => { + /** @type {?} */ + const shouldCloseOnClick = (/** + * @param {?} event + * @return {?} + */ + (event) => { + /** @type {?} */ + const element = (/** @type {?} */ (event.target)); + if ((event instanceof MouseEvent && event.button === 2) || isContainedIn(element, ignoreElements)) { + return false; + } + if (type === 'inside') { + return isContainedIn(element, insideElements) && matchesSelectorIfAny(element, insideSelector); + } + else if (type === 'outside') { + return !isContainedIn(element, insideElements); + } + else /* if (type === true) */ { + return matchesSelectorIfAny(element, insideSelector) || !isContainedIn(element, insideElements); + } + }); + /** @type {?} */ + const escapes$ = fromEvent(document, 'keydown') + .pipe(takeUntil(closed$), + // tslint:disable-next-line:deprecation + filter((/** + * @param {?} e + * @return {?} + */ + e => e.which === Key.Escape))); + // we have to pre-calculate 'shouldCloseOnClick' on 'mousedown/touchstart', + // because on 'mouseup/touchend' DOM nodes might be detached + /** @type {?} */ + const mouseDowns$ = fromEvent(document, iOS ? 'touchstart' : 'mousedown') + .pipe(map(shouldCloseOnClick), takeUntil(closed$)); + /** @type {?} */ + const closeableClicks$ = (/** @type {?} */ (fromEvent(document, iOS ? 'touchend' : 'mouseup') + .pipe(withLatestFrom(mouseDowns$), filter((/** + * @param {?} __0 + * @return {?} + */ + ([_, shouldClose]) => shouldClose)), delay(iOS ? 16 : 0), takeUntil(closed$)))); + race([escapes$, closeableClicks$]).subscribe((/** + * @return {?} + */ + () => zone.run(close))); + })); + } +} + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @type {?} */ +const FOCUSABLE_ELEMENTS_SELECTOR = [ + 'a[href]', 'button:not([disabled])', 'input:not([disabled]):not([type="hidden"])', 'select:not([disabled])', + 'textarea:not([disabled])', '[contenteditable]', '[tabindex]:not([tabindex="-1"])' +].join(', '); +/** + * Returns first and last focusable elements inside of a given element based on specific CSS selector + * @param {?} element + * @return {?} + */ +function getFocusableBoundaryElements(element) { + /** @type {?} */ + const list = Array.from((/** @type {?} */ (element.querySelectorAll(FOCUSABLE_ELEMENTS_SELECTOR)))) + .filter((/** + * @param {?} el + * @return {?} + */ + el => el.tabIndex !== -1)); + return [list[0], list[list.length - 1]]; +} +/** + * Function that enforces browser focus to be trapped inside a DOM element. + * + * Works only for clicks inside the element and navigation with 'Tab', ignoring clicks outside of the element + * + * \@param element The element around which focus will be trapped inside + * \@param stopFocusTrap$ The observable stream. When completed the focus trap will clean up listeners + * and free internal resources + * \@param refocusOnClick Put the focus back to the last focused element whenever a click occurs on element (default to + * false) + * @type {?} + */ +const ngbFocusTrap = (/** + * @param {?} element + * @param {?} stopFocusTrap$ + * @param {?=} refocusOnClick + * @return {?} + */ +(element, stopFocusTrap$, refocusOnClick = false) => { + // last focused element + /** @type {?} */ + const lastFocusedElement$ = fromEvent(element, 'focusin').pipe(takeUntil(stopFocusTrap$), map((/** + * @param {?} e + * @return {?} + */ + e => e.target))); + // 'tab' / 'shift+tab' stream + fromEvent(element, 'keydown') + .pipe(takeUntil(stopFocusTrap$), + // tslint:disable:deprecation + filter((/** + * @param {?} e + * @return {?} + */ + e => e.which === Key.Tab)), + // tslint:enable:deprecation + withLatestFrom(lastFocusedElement$)) + .subscribe((/** + * @param {?} __0 + * @return {?} + */ + ([tabEvent, focusedElement]) => { + const [first, last] = getFocusableBoundaryElements(element); + if ((focusedElement === first || focusedElement === element) && tabEvent.shiftKey) { + last.focus(); + tabEvent.preventDefault(); + } + if (focusedElement === last && !tabEvent.shiftKey) { + first.focus(); + tabEvent.preventDefault(); + } + })); + // inside click + if (refocusOnClick) { + fromEvent(element, 'click') + .pipe(takeUntil(stopFocusTrap$), withLatestFrom(lastFocusedElement$), map((/** + * @param {?} arr + * @return {?} + */ + arr => (/** @type {?} */ (arr[1]))))) + .subscribe((/** + * @param {?} lastFocusedElement + * @return {?} + */ + lastFocusedElement => lastFocusedElement.focus())); + } +}); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +// previous version: +// https://github.com/angular-ui/bootstrap/blob/07c31d0731f7cb068a1932b8e01d2312b796b4ec/src/position/position.js +class Positioning { + /** + * @private + * @param {?} element + * @return {?} + */ + getAllStyles(element) { return window.getComputedStyle(element); } + /** + * @private + * @param {?} element + * @param {?} prop + * @return {?} + */ + getStyle(element, prop) { return this.getAllStyles(element)[prop]; } + /** + * @private + * @param {?} element + * @return {?} + */ + isStaticPositioned(element) { + return (this.getStyle(element, 'position') || 'static') === 'static'; + } + /** + * @private + * @param {?} element + * @return {?} + */ + offsetParent(element) { + /** @type {?} */ + let offsetParentEl = (/** @type {?} */ (element.offsetParent)) || document.documentElement; + while (offsetParentEl && offsetParentEl !== document.documentElement && this.isStaticPositioned(offsetParentEl)) { + offsetParentEl = (/** @type {?} */ (offsetParentEl.offsetParent)); + } + return offsetParentEl || document.documentElement; + } + /** + * @param {?} element + * @param {?=} round + * @return {?} + */ + position(element, round = true) { + /** @type {?} */ + let elPosition; + /** @type {?} */ + let parentOffset = { width: 0, height: 0, top: 0, bottom: 0, left: 0, right: 0 }; + if (this.getStyle(element, 'position') === 'fixed') { + elPosition = element.getBoundingClientRect(); + elPosition = { + top: elPosition.top, + bottom: elPosition.bottom, + left: elPosition.left, + right: elPosition.right, + height: elPosition.height, + width: elPosition.width + }; + } + else { + /** @type {?} */ + const offsetParentEl = this.offsetParent(element); + elPosition = this.offset(element, false); + if (offsetParentEl !== document.documentElement) { + parentOffset = this.offset(offsetParentEl, false); + } + parentOffset.top += offsetParentEl.clientTop; + parentOffset.left += offsetParentEl.clientLeft; + } + elPosition.top -= parentOffset.top; + elPosition.bottom -= parentOffset.top; + elPosition.left -= parentOffset.left; + elPosition.right -= parentOffset.left; + if (round) { + elPosition.top = Math.round(elPosition.top); + elPosition.bottom = Math.round(elPosition.bottom); + elPosition.left = Math.round(elPosition.left); + elPosition.right = Math.round(elPosition.right); + } + return elPosition; + } + /** + * @param {?} element + * @param {?=} round + * @return {?} + */ + offset(element, round = true) { + /** @type {?} */ + const elBcr = element.getBoundingClientRect(); + /** @type {?} */ + const viewportOffset = { + top: window.pageYOffset - document.documentElement.clientTop, + left: window.pageXOffset - document.documentElement.clientLeft + }; + /** @type {?} */ + let elOffset = { + height: elBcr.height || element.offsetHeight, + width: elBcr.width || element.offsetWidth, + top: elBcr.top + viewportOffset.top, + bottom: elBcr.bottom + viewportOffset.top, + left: elBcr.left + viewportOffset.left, + right: elBcr.right + viewportOffset.left + }; + if (round) { + elOffset.height = Math.round(elOffset.height); + elOffset.width = Math.round(elOffset.width); + elOffset.top = Math.round(elOffset.top); + elOffset.bottom = Math.round(elOffset.bottom); + elOffset.left = Math.round(elOffset.left); + elOffset.right = Math.round(elOffset.right); + } + return elOffset; + } + /* + Return false if the element to position is outside the viewport + */ + /** + * @param {?} hostElement + * @param {?} targetElement + * @param {?} placement + * @param {?=} appendToBody + * @return {?} + */ + positionElements(hostElement, targetElement, placement, appendToBody) { + const [placementPrimary = 'top', placementSecondary = 'center'] = placement.split('-'); + /** @type {?} */ + const hostElPosition = appendToBody ? this.offset(hostElement, false) : this.position(hostElement, false); + /** @type {?} */ + const targetElStyles = this.getAllStyles(targetElement); + /** @type {?} */ + const marginTop = parseFloat(targetElStyles.marginTop); + /** @type {?} */ + const marginBottom = parseFloat(targetElStyles.marginBottom); + /** @type {?} */ + const marginLeft = parseFloat(targetElStyles.marginLeft); + /** @type {?} */ + const marginRight = parseFloat(targetElStyles.marginRight); + /** @type {?} */ + let topPosition = 0; + /** @type {?} */ + let leftPosition = 0; + switch (placementPrimary) { + case 'top': + topPosition = (hostElPosition.top - (targetElement.offsetHeight + marginTop + marginBottom)); + break; + case 'bottom': + topPosition = (hostElPosition.top + hostElPosition.height); + break; + case 'left': + leftPosition = (hostElPosition.left - (targetElement.offsetWidth + marginLeft + marginRight)); + break; + case 'right': + leftPosition = (hostElPosition.left + hostElPosition.width); + break; + } + switch (placementSecondary) { + case 'top': + topPosition = hostElPosition.top; + break; + case 'bottom': + topPosition = hostElPosition.top + hostElPosition.height - targetElement.offsetHeight; + break; + case 'left': + leftPosition = hostElPosition.left; + break; + case 'right': + leftPosition = hostElPosition.left + hostElPosition.width - targetElement.offsetWidth; + break; + case 'center': + if (placementPrimary === 'top' || placementPrimary === 'bottom') { + leftPosition = (hostElPosition.left + hostElPosition.width / 2 - targetElement.offsetWidth / 2); + } + else { + topPosition = (hostElPosition.top + hostElPosition.height / 2 - targetElement.offsetHeight / 2); + } + break; + } + /// The translate3d/gpu acceleration render a blurry text on chrome, the next line is commented until a browser fix + // targetElement.style.transform = `translate3d(${Math.round(leftPosition)}px, ${Math.floor(topPosition)}px, 0px)`; + targetElement.style.transform = `translate(${Math.round(leftPosition)}px, ${Math.round(topPosition)}px)`; + // Check if the targetElement is inside the viewport + /** @type {?} */ + const targetElBCR = targetElement.getBoundingClientRect(); + /** @type {?} */ + const html = document.documentElement; + /** @type {?} */ + const windowHeight = window.innerHeight || html.clientHeight; + /** @type {?} */ + const windowWidth = window.innerWidth || html.clientWidth; + return targetElBCR.left >= 0 && targetElBCR.top >= 0 && targetElBCR.right <= windowWidth && + targetElBCR.bottom <= windowHeight; + } +} +/** @type {?} */ +const placementSeparator = /\s+/; +/** @type {?} */ +const positionService = new Positioning(); +/* + * Accept the placement array and applies the appropriate placement dependent on the viewport. + * Returns the applied placement. + * In case of auto placement, placements are selected in order + * 'top', 'bottom', 'left', 'right', + * 'top-left', 'top-right', + * 'bottom-left', 'bottom-right', + * 'left-top', 'left-bottom', + * 'right-top', 'right-bottom'. + * */ +/** + * @param {?} hostElement + * @param {?} targetElement + * @param {?} placement + * @param {?=} appendToBody + * @param {?=} baseClass + * @return {?} + */ +function positionElements(hostElement, targetElement, placement, appendToBody, baseClass) { + /** @type {?} */ + let placementVals = Array.isArray(placement) ? placement : (/** @type {?} */ (placement.split(placementSeparator))); + /** @type {?} */ + const allowedPlacements = [ + 'top', 'bottom', 'left', 'right', 'top-left', 'top-right', 'bottom-left', 'bottom-right', 'left-top', 'left-bottom', + 'right-top', 'right-bottom' + ]; + /** @type {?} */ + const classList = targetElement.classList; + /** @type {?} */ + const addClassesToTarget = (/** + * @param {?} targetPlacement + * @return {?} + */ + (targetPlacement) => { + const [primary, secondary] = targetPlacement.split('-'); + /** @type {?} */ + const classes = []; + if (baseClass) { + classes.push(`${baseClass}-${primary}`); + if (secondary) { + classes.push(`${baseClass}-${primary}-${secondary}`); + } + classes.forEach((/** + * @param {?} classname + * @return {?} + */ + (classname) => { classList.add(classname); })); + } + return classes; + }); + // Remove old placement classes to avoid issues + if (baseClass) { + allowedPlacements.forEach((/** + * @param {?} placementToRemove + * @return {?} + */ + (placementToRemove) => { classList.remove(`${baseClass}-${placementToRemove}`); })); + } + // replace auto placement with other placements + /** @type {?} */ + let hasAuto = placementVals.findIndex((/** + * @param {?} val + * @return {?} + */ + val => val === 'auto')); + if (hasAuto >= 0) { + allowedPlacements.forEach((/** + * @param {?} obj + * @return {?} + */ + function (obj) { + if (placementVals.find((/** + * @param {?} val + * @return {?} + */ + val => val.search('^' + obj) !== -1)) == null) { + placementVals.splice(hasAuto++, 1, (/** @type {?} */ (obj))); + } + })); + } + // coordinates where to position + // Required for transform: + /** @type {?} */ + const style = targetElement.style; + style.position = 'absolute'; + style.top = '0'; + style.left = '0'; + style['will-change'] = 'transform'; + /** @type {?} */ + let testPlacement; + /** @type {?} */ + let isInViewport = false; + for (testPlacement of placementVals) { + /** @type {?} */ + let addedClasses = addClassesToTarget(testPlacement); + if (positionService.positionElements(hostElement, targetElement, testPlacement, appendToBody)) { + isInViewport = true; + break; + } + // Remove the baseClasses for further calculation + if (baseClass) { + addedClasses.forEach((/** + * @param {?} classname + * @return {?} + */ + (classname) => { classList.remove(classname); })); + } + } + if (!isInViewport) { + // If nothing match, the first placement is the default one + testPlacement = placementVals[0]; + addClassesToTarget(testPlacement); + positionService.positionElements(hostElement, targetElement, testPlacement, appendToBody); + } + return testPlacement; +} + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * @return {?} + */ +function NGB_DATEPICKER_PARSER_FORMATTER_FACTORY() { + return new NgbDateISOParserFormatter(); +} +/** + * An abstract service for parsing and formatting dates for the + * [`NgbInputDatepicker`](#/components/datepicker/api#NgbInputDatepicker) directive. + * Converts between the internal `NgbDateStruct` model presentation and a `string` that is displayed in the + * input element. + * + * When user types something in the input this service attempts to parse it into a `NgbDateStruct` object. + * And vice versa, when users selects a date in the calendar with the mouse, it must be displayed as a `string` + * in the input. + * + * Default implementation uses the ISO 8601 format, but you can provide another implementation via DI + * to use an alternative string format or a custom parsing logic. + * + * See the [date format overview](#/components/datepicker/overview#date-model) for more details. + * @abstract + */ +class NgbDateParserFormatter { +} +NgbDateParserFormatter.decorators = [ + { type: Injectable, args: [{ providedIn: 'root', useFactory: NGB_DATEPICKER_PARSER_FORMATTER_FACTORY },] } +]; +/** @nocollapse */ NgbDateParserFormatter.ngInjectableDef = ɵɵdefineInjectable({ factory: NGB_DATEPICKER_PARSER_FORMATTER_FACTORY, token: NgbDateParserFormatter, providedIn: "root" }); +class NgbDateISOParserFormatter extends NgbDateParserFormatter { + /** + * @param {?} value + * @return {?} + */ + parse(value) { + if (value) { + /** @type {?} */ + const dateParts = value.trim().split('-'); + if (dateParts.length === 1 && isNumber(dateParts[0])) { + return { year: toInteger(dateParts[0]), month: null, day: null }; + } + else if (dateParts.length === 2 && isNumber(dateParts[0]) && isNumber(dateParts[1])) { + return { year: toInteger(dateParts[0]), month: toInteger(dateParts[1]), day: null }; + } + else if (dateParts.length === 3 && isNumber(dateParts[0]) && isNumber(dateParts[1]) && isNumber(dateParts[2])) { + return { year: toInteger(dateParts[0]), month: toInteger(dateParts[1]), day: toInteger(dateParts[2]) }; + } + } + return null; + } + /** + * @param {?} date + * @return {?} + */ + format(date) { + return date ? + `${date.year}-${isNumber(date.month) ? padNumber(date.month) : ''}-${isNumber(date.day) ? padNumber(date.day) : ''}` : + ''; + } +} +NgbDateISOParserFormatter.decorators = [ + { type: Injectable } +]; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @type {?} */ +const NGB_DATEPICKER_VALUE_ACCESSOR$1 = { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef((/** + * @return {?} + */ + () => NgbInputDatepicker)), + multi: true +}; +/** @type {?} */ +const NGB_DATEPICKER_VALIDATOR = { + provide: NG_VALIDATORS, + useExisting: forwardRef((/** + * @return {?} + */ + () => NgbInputDatepicker)), + multi: true +}; +/** + * A directive that allows to stick a datepicker popup to an input field. + * + * Manages interaction with the input field itself, does value formatting and provides forms integration. + */ +class NgbInputDatepicker { + /** + * @param {?} _parserFormatter + * @param {?} _elRef + * @param {?} _vcRef + * @param {?} _renderer + * @param {?} _cfr + * @param {?} _ngZone + * @param {?} _service + * @param {?} _calendar + * @param {?} _dateAdapter + * @param {?} _document + * @param {?} _changeDetector + */ + constructor(_parserFormatter, _elRef, _vcRef, _renderer, _cfr, _ngZone, _service, _calendar, _dateAdapter, _document, _changeDetector) { + this._parserFormatter = _parserFormatter; + this._elRef = _elRef; + this._vcRef = _vcRef; + this._renderer = _renderer; + this._cfr = _cfr; + this._ngZone = _ngZone; + this._service = _service; + this._calendar = _calendar; + this._dateAdapter = _dateAdapter; + this._document = _document; + this._changeDetector = _changeDetector; + this._cRef = null; + this._disabled = false; + /** + * Indicates whether the datepicker popup should be closed automatically after date selection / outside click or not. + * + * * `true` - the popup will close on both date selection and outside click. + * * `false` - the popup can only be closed manually via `close()` or `toggle()` methods. + * * `"inside"` - the popup will close on date selection, but not outside clicks. + * * `"outside"` - the popup will close only on the outside click and not on date selection/inside clicks. + * + * \@since 3.0.0 + */ + this.autoClose = true; + /** + * The preferred placement of the datepicker popup. + * + * Possible values are `"top"`, `"top-left"`, `"top-right"`, `"bottom"`, `"bottom-left"`, + * `"bottom-right"`, `"left"`, `"left-top"`, `"left-bottom"`, `"right"`, `"right-top"`, + * `"right-bottom"` + * + * Accepts an array of strings or a string with space separated possible values. + * + * The default order of preference is `"bottom-left bottom-right top-left top-right"` + * + * Please see the [positioning overview](#/positioning) for more details. + */ + this.placement = ['bottom-left', 'bottom-right', 'top-left', 'top-right']; + /** + * An event emitted when user selects a date using keyboard or mouse. + * + * The payload of the event is currently selected `NgbDate`. + * + * \@since 1.1.1 + */ + this.dateSelect = new EventEmitter(); + /** + * Event emitted right after the navigation happens and displayed month changes. + * + * See [`NgbDatepickerNavigateEvent`](#/components/datepicker/api#NgbDatepickerNavigateEvent) for the payload info. + */ + this.navigate = new EventEmitter(); + /** + * An event fired after closing datepicker window. + * + * \@since 4.2.0 + */ + this.closed = new EventEmitter(); + this._onChange = (/** + * @param {?} _ + * @return {?} + */ + (_) => { }); + this._onTouched = (/** + * @return {?} + */ + () => { }); + this._validatorChange = (/** + * @return {?} + */ + () => { }); + this._zoneSubscription = _ngZone.onStable.subscribe((/** + * @return {?} + */ + () => this._updatePopupPosition())); + } + /** + * @return {?} + */ + get disabled() { + return this._disabled; + } + /** + * @param {?} value + * @return {?} + */ + set disabled(value) { + this._disabled = value === '' || (value && value !== 'false'); + if (this.isOpen()) { + this._cRef.instance.setDisabledState(this._disabled); + } + } + /** + * @param {?} fn + * @return {?} + */ + registerOnChange(fn) { this._onChange = fn; } + /** + * @param {?} fn + * @return {?} + */ + registerOnTouched(fn) { this._onTouched = fn; } + /** + * @param {?} fn + * @return {?} + */ + registerOnValidatorChange(fn) { this._validatorChange = fn; } + /** + * @param {?} isDisabled + * @return {?} + */ + setDisabledState(isDisabled) { this.disabled = isDisabled; } + /** + * @param {?} c + * @return {?} + */ + validate(c) { + /** @type {?} */ + const value = c.value; + if (value === null || value === undefined) { + return null; + } + /** @type {?} */ + const ngbDate = this._fromDateStruct(this._dateAdapter.fromModel(value)); + if (!this._calendar.isValid(ngbDate)) { + return { 'ngbDate': { invalid: c.value } }; + } + if (this.minDate && ngbDate.before(NgbDate.from(this.minDate))) { + return { 'ngbDate': { requiredBefore: this.minDate } }; + } + if (this.maxDate && ngbDate.after(NgbDate.from(this.maxDate))) { + return { 'ngbDate': { requiredAfter: this.maxDate } }; + } + } + /** + * @param {?} value + * @return {?} + */ + writeValue(value) { + this._model = this._fromDateStruct(this._dateAdapter.fromModel(value)); + this._writeModelValue(this._model); + } + /** + * @param {?} value + * @param {?=} updateView + * @return {?} + */ + manualDateChange(value, updateView = false) { + /** @type {?} */ + const inputValueChanged = value !== this._inputValue; + if (inputValueChanged) { + this._inputValue = value; + this._model = this._fromDateStruct(this._parserFormatter.parse(value)); + } + if (inputValueChanged || !updateView) { + this._onChange(this._model ? this._dateAdapter.toModel(this._model) : (value === '' ? null : value)); + } + if (updateView && this._model) { + this._writeModelValue(this._model); + } + } + /** + * @return {?} + */ + isOpen() { return !!this._cRef; } + /** + * Opens the datepicker popup. + * + * If the related form control contains a valid date, the corresponding month will be opened. + * @return {?} + */ + open() { + if (!this.isOpen()) { + /** @type {?} */ + const cf = this._cfr.resolveComponentFactory(NgbDatepicker); + this._cRef = this._vcRef.createComponent(cf); + this._applyPopupStyling(this._cRef.location.nativeElement); + this._applyDatepickerInputs(this._cRef.instance); + this._subscribeForDatepickerOutputs(this._cRef.instance); + this._cRef.instance.ngOnInit(); + this._cRef.instance.writeValue(this._dateAdapter.toModel(this._model)); + // date selection event handling + this._cRef.instance.registerOnChange((/** + * @param {?} selectedDate + * @return {?} + */ + (selectedDate) => { + this.writeValue(selectedDate); + this._onChange(selectedDate); + this._onTouched(); + })); + this._cRef.changeDetectorRef.detectChanges(); + this._cRef.instance.setDisabledState(this.disabled); + if (this.container === 'body') { + window.document.querySelector(this.container).appendChild(this._cRef.location.nativeElement); + } + // focus handling + ngbFocusTrap(this._cRef.location.nativeElement, this.closed, true); + this._cRef.instance.focus(); + ngbAutoClose(this._ngZone, this._document, this.autoClose, (/** + * @return {?} + */ + () => this.close()), this.closed, [], [this._elRef.nativeElement, this._cRef.location.nativeElement]); + } + } + /** + * Closes the datepicker popup. + * @return {?} + */ + close() { + if (this.isOpen()) { + this._vcRef.remove(this._vcRef.indexOf(this._cRef.hostView)); + this._cRef = null; + this.closed.emit(); + this._changeDetector.markForCheck(); + } + } + /** + * Toggles the datepicker popup. + * @return {?} + */ + toggle() { + if (this.isOpen()) { + this.close(); + } + else { + this.open(); + } + } + /** + * Navigates to the provided date. + * + * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec. + * If nothing or invalid date provided calendar will open current month. + * + * Use the `[startDate]` input as an alternative. + * @param {?=} date + * @return {?} + */ + navigateTo(date) { + if (this.isOpen()) { + this._cRef.instance.navigateTo(date); + } + } + /** + * @return {?} + */ + onBlur() { this._onTouched(); } + /** + * @param {?} changes + * @return {?} + */ + ngOnChanges(changes) { + if (changes['minDate'] || changes['maxDate']) { + this._validatorChange(); + } + } + /** + * @return {?} + */ + ngOnDestroy() { + this.close(); + this._zoneSubscription.unsubscribe(); + } + /** + * @private + * @param {?} datepickerInstance + * @return {?} + */ + _applyDatepickerInputs(datepickerInstance) { + ['dayTemplate', 'dayTemplateData', 'displayMonths', 'firstDayOfWeek', 'footerTemplate', 'markDisabled', 'minDate', + 'maxDate', 'navigation', 'outsideDays', 'showNavigation', 'showWeekdays', 'showWeekNumbers'] + .forEach((/** + * @param {?} optionName + * @return {?} + */ + (optionName) => { + if (this[optionName] !== undefined) { + datepickerInstance[optionName] = this[optionName]; + } + })); + datepickerInstance.startDate = this.startDate || this._model; + } + /** + * @private + * @param {?} nativeElement + * @return {?} + */ + _applyPopupStyling(nativeElement) { + this._renderer.addClass(nativeElement, 'dropdown-menu'); + this._renderer.addClass(nativeElement, 'show'); + if (this.container === 'body') { + this._renderer.addClass(nativeElement, 'ngb-dp-body'); + } + } + /** + * @private + * @param {?} datepickerInstance + * @return {?} + */ + _subscribeForDatepickerOutputs(datepickerInstance) { + datepickerInstance.navigate.subscribe((/** + * @param {?} navigateEvent + * @return {?} + */ + navigateEvent => this.navigate.emit(navigateEvent))); + datepickerInstance.select.subscribe((/** + * @param {?} date + * @return {?} + */ + date => { + this.dateSelect.emit(date); + if (this.autoClose === true || this.autoClose === 'inside') { + this.close(); + } + })); + } + /** + * @private + * @param {?} model + * @return {?} + */ + _writeModelValue(model) { + /** @type {?} */ + const value = this._parserFormatter.format(model); + this._inputValue = value; + this._renderer.setProperty(this._elRef.nativeElement, 'value', value); + if (this.isOpen()) { + this._cRef.instance.writeValue(this._dateAdapter.toModel(model)); + this._onTouched(); + } + } + /** + * @private + * @param {?} date + * @return {?} + */ + _fromDateStruct(date) { + /** @type {?} */ + const ngbDate = date ? new NgbDate(date.year, date.month, date.day) : null; + return this._calendar.isValid(ngbDate) ? ngbDate : null; + } + /** + * @private + * @return {?} + */ + _updatePopupPosition() { + if (!this._cRef) { + return; + } + /** @type {?} */ + let hostElement; + if (typeof this.positionTarget === 'string') { + hostElement = window.document.querySelector(this.positionTarget); + } + else if (this.positionTarget instanceof HTMLElement) { + hostElement = this.positionTarget; + } + else { + hostElement = this._elRef.nativeElement; + } + if (this.positionTarget && !hostElement) { + throw new Error('ngbDatepicker could not find element declared in [positionTarget] to position against.'); + } + positionElements(hostElement, this._cRef.location.nativeElement, this.placement, this.container === 'body'); + } +} +NgbInputDatepicker.decorators = [ + { type: Directive, args: [{ + selector: 'input[ngbDatepicker]', + exportAs: 'ngbDatepicker', + host: { + '(input)': 'manualDateChange($event.target.value)', + '(change)': 'manualDateChange($event.target.value, true)', + '(blur)': 'onBlur()', + '[disabled]': 'disabled' + }, + providers: [NGB_DATEPICKER_VALUE_ACCESSOR$1, NGB_DATEPICKER_VALIDATOR, NgbDatepickerService] + },] } +]; +/** @nocollapse */ +NgbInputDatepicker.ctorParameters = () => [ + { type: NgbDateParserFormatter }, + { type: ElementRef }, + { type: ViewContainerRef }, + { type: Renderer2 }, + { type: ComponentFactoryResolver }, + { type: NgZone }, + { type: NgbDatepickerService }, + { type: NgbCalendar }, + { type: NgbDateAdapter }, + { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }, + { type: ChangeDetectorRef } +]; +NgbInputDatepicker.propDecorators = { + autoClose: [{ type: Input }], + dayTemplate: [{ type: Input }], + dayTemplateData: [{ type: Input }], + displayMonths: [{ type: Input }], + firstDayOfWeek: [{ type: Input }], + footerTemplate: [{ type: Input }], + markDisabled: [{ type: Input }], + minDate: [{ type: Input }], + maxDate: [{ type: Input }], + navigation: [{ type: Input }], + outsideDays: [{ type: Input }], + placement: [{ type: Input }], + showWeekdays: [{ type: Input }], + showWeekNumbers: [{ type: Input }], + startDate: [{ type: Input }], + container: [{ type: Input }], + positionTarget: [{ type: Input }], + dateSelect: [{ type: Output }], + navigate: [{ type: Output }], + closed: [{ type: Output }], + disabled: [{ type: Input }] +}; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +class NgbDatepickerDayView { + /** + * @param {?} i18n + */ + constructor(i18n) { + this.i18n = i18n; + } + /** + * @return {?} + */ + isMuted() { return !this.selected && (this.date.month !== this.currentMonth || this.disabled); } +} +NgbDatepickerDayView.decorators = [ + { type: Component, args: [{ + selector: '[ngbDatepickerDayView]', + changeDetection: ChangeDetectionStrategy.OnPush, + encapsulation: ViewEncapsulation.None, + host: { + 'class': 'btn-light', + '[class.bg-primary]': 'selected', + '[class.text-white]': 'selected', + '[class.text-muted]': 'isMuted()', + '[class.outside]': 'isMuted()', + '[class.active]': 'focused' + }, + template: `{{ i18n.getDayNumerals(date) }}`, + styles: ["[ngbDatepickerDayView]{text-align:center;width:2rem;height:2rem;line-height:2rem;border-radius:.25rem;background:0 0}[ngbDatepickerDayView].outside{opacity:.5}"] + }] } +]; +/** @nocollapse */ +NgbDatepickerDayView.ctorParameters = () => [ + { type: NgbDatepickerI18n } +]; +NgbDatepickerDayView.propDecorators = { + currentMonth: [{ type: Input }], + date: [{ type: Input }], + disabled: [{ type: Input }], + focused: [{ type: Input }], + selected: [{ type: Input }] +}; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +class NgbDatepickerNavigationSelect { + /** + * @param {?} i18n + */ + constructor(i18n) { + this.i18n = i18n; + this.select = new EventEmitter(); + } + /** + * @param {?} month + * @return {?} + */ + changeMonth(month) { this.select.emit(new NgbDate(this.date.year, toInteger(month), 1)); } + /** + * @param {?} year + * @return {?} + */ + changeYear(year) { this.select.emit(new NgbDate(toInteger(year), this.date.month, 1)); } +} +NgbDatepickerNavigationSelect.decorators = [ + { type: Component, args: [{ + selector: 'ngb-datepicker-navigation-select', + changeDetection: ChangeDetectionStrategy.OnPush, + encapsulation: ViewEncapsulation.None, + template: ` + + `, + styles: ["ngb-datepicker-navigation-select>.custom-select{-ms-flex:1 1 auto;flex:1 1 auto;padding:0 .5rem;font-size:.875rem;height:1.85rem}"] + }] } +]; +/** @nocollapse */ +NgbDatepickerNavigationSelect.ctorParameters = () => [ + { type: NgbDatepickerI18n } +]; +NgbDatepickerNavigationSelect.propDecorators = { + date: [{ type: Input }], + disabled: [{ type: Input }], + months: [{ type: Input }], + years: [{ type: Input }], + select: [{ type: Output }] +}; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * @abstract + */ +class NgbCalendarHijri extends NgbCalendar { + /** + * @return {?} + */ + getDaysPerWeek() { return 7; } + /** + * @return {?} + */ + getMonths() { return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; } + /** + * @return {?} + */ + getWeeksPerMonth() { return 6; } + /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + getNext(date, period = 'd', number = 1) { + date = new NgbDate(date.year, date.month, date.day); + switch (period) { + case 'y': + date = this._setYear(date, date.year + number); + date.month = 1; + date.day = 1; + return date; + case 'm': + date = this._setMonth(date, date.month + number); + date.day = 1; + return date; + case 'd': + return this._setDay(date, date.day + number); + default: + return date; + } + } + /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + getPrev(date, period = 'd', number = 1) { return this.getNext(date, period, -number); } + /** + * @param {?} date + * @return {?} + */ + getWeekday(date) { + /** @type {?} */ + const day = this.toGregorian(date).getDay(); + // in JS Date Sun=0, in ISO 8601 Sun=7 + return day === 0 ? 7 : day; + } + /** + * @param {?} week + * @param {?} firstDayOfWeek + * @return {?} + */ + getWeekNumber(week, firstDayOfWeek) { + // in JS Date Sun=0, in ISO 8601 Sun=7 + if (firstDayOfWeek === 7) { + firstDayOfWeek = 0; + } + /** @type {?} */ + const thursdayIndex = (4 + 7 - firstDayOfWeek) % 7; + /** @type {?} */ + const date = week[thursdayIndex]; + /** @type {?} */ + const jsDate = this.toGregorian(date); + jsDate.setDate(jsDate.getDate() + 4 - (jsDate.getDay() || 7)); // Thursday + // Thursday + /** @type {?} */ + const time = jsDate.getTime(); + /** @type {?} */ + const MuhDate = this.toGregorian(new NgbDate(date.year, 1, 1)); + return Math.floor(Math.round((time - MuhDate.getTime()) / 86400000) / 7) + 1; + } + /** + * @return {?} + */ + getToday() { return this.fromGregorian(new Date()); } + /** + * @param {?} date + * @return {?} + */ + isValid(date) { + return date && isNumber(date.year) && isNumber(date.month) && isNumber(date.day) && + !isNaN(this.toGregorian(date).getTime()); + } + /** + * @private + * @param {?} date + * @param {?} day + * @return {?} + */ + _setDay(date, day) { + day = +day; + /** @type {?} */ + let mDays = this.getDaysPerMonth(date.month, date.year); + if (day <= 0) { + while (day <= 0) { + date = this._setMonth(date, date.month - 1); + mDays = this.getDaysPerMonth(date.month, date.year); + day += mDays; + } + } + else if (day > mDays) { + while (day > mDays) { + day -= mDays; + date = this._setMonth(date, date.month + 1); + mDays = this.getDaysPerMonth(date.month, date.year); + } + } + date.day = day; + return date; + } + /** + * @private + * @param {?} date + * @param {?} month + * @return {?} + */ + _setMonth(date, month) { + month = +month; + date.year = date.year + Math.floor((month - 1) / 12); + date.month = Math.floor(((month - 1) % 12 + 12) % 12) + 1; + return date; + } + /** + * @private + * @param {?} date + * @param {?} year + * @return {?} + */ + _setYear(date, year) { + date.year = +year; + return date; + } +} +NgbCalendarHijri.decorators = [ + { type: Injectable } +]; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * Checks if islamic year is a leap year + * @param {?} hYear + * @return {?} + */ +function isIslamicLeapYear(hYear) { + return (14 + 11 * hYear) % 30 < 11; +} +/** + * Checks if gregorian years is a leap year + * @param {?} gDate + * @return {?} + */ +function isGregorianLeapYear(gDate) { + /** @type {?} */ + const year = gDate.getFullYear(); + return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0; +} +/** + * Returns the start of Hijri Month. + * `hMonth` is 0 for Muharram, 1 for Safar, etc. + * `hYear` is any Hijri hYear. + * @param {?} hYear + * @param {?} hMonth + * @return {?} + */ +function getIslamicMonthStart(hYear, hMonth) { + return Math.ceil(29.5 * hMonth) + (hYear - 1) * 354 + Math.floor((3 + 11 * hYear) / 30.0); +} +/** + * Returns the start of Hijri year. + * `year` is any Hijri year. + * @param {?} year + * @return {?} + */ +function getIslamicYearStart(year) { + return (year - 1) * 354 + Math.floor((3 + 11 * year) / 30.0); +} +/** + * @param {?} a + * @param {?} b + * @return {?} + */ +function mod(a, b) { + return a - b * Math.floor(a / b); +} +/** + * The civil calendar is one type of Hijri calendars used in islamic countries. + * Uses a fixed cycle of alternating 29- and 30-day months, + * with a leap day added to the last month of 11 out of every 30 years. + * http://cldr.unicode.org/development/development-process/design-proposals/islamic-calendar-types + * All the calculations here are based on the equations from "Calendrical Calculations" By Edward M. Reingold, Nachum + * Dershowitz. + * @type {?} + */ +const GREGORIAN_EPOCH = 1721425.5; +/** @type {?} */ +const ISLAMIC_EPOCH = 1948439.5; +class NgbCalendarIslamicCivil extends NgbCalendarHijri { + /** + * Returns the equivalent islamic(civil) date value for a give input Gregorian date. + * `gDate` is a JS Date to be converted to Hijri. + * @param {?} gDate + * @return {?} + */ + fromGregorian(gDate) { + /** @type {?} */ + const gYear = gDate.getFullYear(); + /** @type {?} */ + const gMonth = gDate.getMonth(); + /** @type {?} */ + const gDay = gDate.getDate(); + /** @type {?} */ + let julianDay = GREGORIAN_EPOCH - 1 + 365 * (gYear - 1) + Math.floor((gYear - 1) / 4) + + -Math.floor((gYear - 1) / 100) + Math.floor((gYear - 1) / 400) + + Math.floor((367 * (gMonth + 1) - 362) / 12 + (gMonth + 1 <= 2 ? 0 : isGregorianLeapYear(gDate) ? -1 : -2) + gDay); + julianDay = Math.floor(julianDay) + 0.5; + /** @type {?} */ + const days = julianDay - ISLAMIC_EPOCH; + /** @type {?} */ + const hYear = Math.floor((30 * days + 10646) / 10631.0); + /** @type {?} */ + let hMonth = Math.ceil((days - 29 - getIslamicYearStart(hYear)) / 29.5); + hMonth = Math.min(hMonth, 11); + /** @type {?} */ + const hDay = Math.ceil(days - getIslamicMonthStart(hYear, hMonth)) + 1; + return new NgbDate(hYear, hMonth + 1, hDay); + } + /** + * Returns the equivalent JS date value for a give input islamic(civil) date. + * `hDate` is an islamic(civil) date to be converted to Gregorian. + * @param {?} hDate + * @return {?} + */ + toGregorian(hDate) { + /** @type {?} */ + const hYear = hDate.year; + /** @type {?} */ + const hMonth = hDate.month - 1; + /** @type {?} */ + const hDay = hDate.day; + /** @type {?} */ + const julianDay = hDay + Math.ceil(29.5 * hMonth) + (hYear - 1) * 354 + Math.floor((3 + 11 * hYear) / 30) + ISLAMIC_EPOCH - 1; + /** @type {?} */ + const wjd = Math.floor(julianDay - 0.5) + 0.5; + /** @type {?} */ + const depoch = wjd - GREGORIAN_EPOCH; + /** @type {?} */ + const quadricent = Math.floor(depoch / 146097); + /** @type {?} */ + const dqc = mod(depoch, 146097); + /** @type {?} */ + const cent = Math.floor(dqc / 36524); + /** @type {?} */ + const dcent = mod(dqc, 36524); + /** @type {?} */ + const quad = Math.floor(dcent / 1461); + /** @type {?} */ + const dquad = mod(dcent, 1461); + /** @type {?} */ + const yindex = Math.floor(dquad / 365); + /** @type {?} */ + let year = quadricent * 400 + cent * 100 + quad * 4 + yindex; + if (!(cent === 4 || yindex === 4)) { + year++; + } + /** @type {?} */ + const gYearStart = GREGORIAN_EPOCH + 365 * (year - 1) + Math.floor((year - 1) / 4) - Math.floor((year - 1) / 100) + + Math.floor((year - 1) / 400); + /** @type {?} */ + const yearday = wjd - gYearStart; + /** @type {?} */ + const tjd = GREGORIAN_EPOCH - 1 + 365 * (year - 1) + Math.floor((year - 1) / 4) - Math.floor((year - 1) / 100) + + Math.floor((year - 1) / 400) + Math.floor(739 / 12 + (isGregorianLeapYear(new Date(year, 3, 1)) ? -1 : -2) + 1); + /** @type {?} */ + const leapadj = wjd < tjd ? 0 : isGregorianLeapYear(new Date(year, 3, 1)) ? 1 : 2; + /** @type {?} */ + const month = Math.floor(((yearday + leapadj) * 12 + 373) / 367); + /** @type {?} */ + const tjd2 = GREGORIAN_EPOCH - 1 + 365 * (year - 1) + Math.floor((year - 1) / 4) - Math.floor((year - 1) / 100) + + Math.floor((year - 1) / 400) + + Math.floor((367 * month - 362) / 12 + (month <= 2 ? 0 : isGregorianLeapYear(new Date(year, month - 1, 1)) ? -1 : -2) + + 1); + /** @type {?} */ + const day = wjd - tjd2 + 1; + return new Date(year, month - 1, day); + } + /** + * Returns the number of days in a specific Hijri month. + * `month` is 1 for Muharram, 2 for Safar, etc. + * `year` is any Hijri year. + * @param {?} month + * @param {?} year + * @return {?} + */ + getDaysPerMonth(month, year) { + year = year + Math.floor(month / 13); + month = ((month - 1) % 12) + 1; + /** @type {?} */ + let length = 29 + month % 2; + if (month === 12 && isIslamicLeapYear(year)) { + length++; + } + return length; + } +} +NgbCalendarIslamicCivil.decorators = [ + { type: Injectable } +]; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * Umalqura calendar is one type of Hijri calendars used in islamic countries. + * This Calendar is used by Saudi Arabia for administrative purpose. + * Unlike tabular calendars, the algorithm involves astronomical calculation, but it's still deterministic. + * http://cldr.unicode.org/development/development-process/design-proposals/islamic-calendar-types + * @type {?} + */ +const GREGORIAN_FIRST_DATE = new Date(1882, 10, 12); +/** @type {?} */ +const GREGORIAN_LAST_DATE = new Date(2174, 10, 25); +/** @type {?} */ +const HIJRI_BEGIN = 1300; +/** @type {?} */ +const HIJRI_END = 1600; +/** @type {?} */ +const ONE_DAY = 1000 * 60 * 60 * 24; +/** @type {?} */ +const MONTH_LENGTH = [ + // 1300-1304 + '101010101010', '110101010100', '111011001001', '011011010100', '011011101010', + // 1305-1309 + '001101101100', '101010101101', '010101010101', '011010101001', '011110010010', + // 1310-1314 + '101110101001', '010111010100', '101011011010', '010101011100', '110100101101', + // 1315-1319 + '011010010101', '011101001010', '101101010100', '101101101010', '010110101101', + // 1320-1324 + '010010101110', '101001001111', '010100010111', '011010001011', '011010100101', + // 1325-1329 + '101011010101', '001011010110', '100101011011', '010010011101', '101001001101', + // 1330-1334 + '110100100110', '110110010101', '010110101100', '100110110110', '001010111010', + // 1335-1339 + '101001011011', '010100101011', '101010010101', '011011001010', '101011101001', + // 1340-1344 + '001011110100', '100101110110', '001010110110', '100101010110', '101011001010', + // 1345-1349 + '101110100100', '101111010010', '010111011001', '001011011100', '100101101101', + // 1350-1354 + '010101001101', '101010100101', '101101010010', '101110100101', '010110110100', + // 1355-1359 + '100110110110', '010101010111', '001010010111', '010101001011', '011010100011', + // 1360-1364 + '011101010010', '101101100101', '010101101010', '101010101011', '010100101011', + // 1365-1369 + '110010010101', '110101001010', '110110100101', '010111001010', '101011010110', + // 1370-1374 + '100101010111', '010010101011', '100101001011', '101010100101', '101101010010', + // 1375-1379 + '101101101010', '010101110101', '001001110110', '100010110111', '010001011011', + // 1380-1384 + '010101010101', '010110101001', '010110110100', '100111011010', '010011011101', + // 1385-1389 + '001001101110', '100100110110', '101010101010', '110101010100', '110110110010', + // 1390-1394 + '010111010101', '001011011010', '100101011011', '010010101011', '101001010101', + // 1395-1399 + '101101001001', '101101100100', '101101110001', '010110110100', '101010110101', + // 1400-1404 + '101001010101', '110100100101', '111010010010', '111011001001', '011011010100', + // 1405-1409 + '101011101001', '100101101011', '010010101011', '101010010011', '110101001001', + // 1410-1414 + '110110100100', '110110110010', '101010111001', '010010111010', '101001011011', + // 1415-1419 + '010100101011', '101010010101', '101100101010', '101101010101', '010101011100', + // 1420-1424 + '010010111101', '001000111101', '100100011101', '101010010101', '101101001010', + // 1425-1429 + '101101011010', '010101101101', '001010110110', '100100111011', '010010011011', + // 1430-1434 + '011001010101', '011010101001', '011101010100', '101101101010', '010101101100', + // 1435-1439 + '101010101101', '010101010101', '101100101001', '101110010010', '101110101001', + // 1440-1444 + '010111010100', '101011011010', '010101011010', '101010101011', '010110010101', + // 1445-1449 + '011101001001', '011101100100', '101110101010', '010110110101', '001010110110', + // 1450-1454 + '101001010110', '111001001101', '101100100101', '101101010010', '101101101010', + // 1455-1459 + '010110101101', '001010101110', '100100101111', '010010010111', '011001001011', + // 1460-1464 + '011010100101', '011010101100', '101011010110', '010101011101', '010010011101', + // 1465-1469 + '101001001101', '110100010110', '110110010101', '010110101010', '010110110101', + // 1470-1474 + '001011011010', '100101011011', '010010101101', '010110010101', '011011001010', + // 1475-1479 + '011011100100', '101011101010', '010011110101', '001010110110', '100101010110', + // 1480-1484 + '101010101010', '101101010100', '101111010010', '010111011001', '001011101010', + // 1485-1489 + '100101101101', '010010101101', '101010010101', '101101001010', '101110100101', + // 1490-1494 + '010110110010', '100110110101', '010011010110', '101010010111', '010101000111', + // 1495-1499 + '011010010011', '011101001001', '101101010101', '010101101010', '101001101011', + // 1500-1504 + '010100101011', '101010001011', '110101000110', '110110100011', '010111001010', + // 1505-1509 + '101011010110', '010011011011', '001001101011', '100101001011', '101010100101', + // 1510-1514 + '101101010010', '101101101001', '010101110101', '000101110110', '100010110111', + // 1515-1519 + '001001011011', '010100101011', '010101100101', '010110110100', '100111011010', + // 1520-1524 + '010011101101', '000101101101', '100010110110', '101010100110', '110101010010', + // 1525-1529 + '110110101001', '010111010100', '101011011010', '100101011011', '010010101011', + // 1530-1534 + '011001010011', '011100101001', '011101100010', '101110101001', '010110110010', + // 1535-1539 + '101010110101', '010101010101', '101100100101', '110110010010', '111011001001', + // 1540-1544 + '011011010010', '101011101001', '010101101011', '010010101011', '101001010101', + // 1545-1549 + '110100101001', '110101010100', '110110101010', '100110110101', '010010111010', + // 1550-1554 + '101000111011', '010010011011', '101001001101', '101010101010', '101011010101', + // 1555-1559 + '001011011010', '100101011101', '010001011110', '101000101110', '110010011010', + // 1560-1564 + '110101010101', '011010110010', '011010111001', '010010111010', '101001011101', + // 1565-1569 + '010100101101', '101010010101', '101101010010', '101110101000', '101110110100', + // 1570-1574 + '010110111001', '001011011010', '100101011010', '101101001010', '110110100100', + // 1575-1579 + '111011010001', '011011101000', '101101101010', '010101101101', '010100110101', + // 1580-1584 + '011010010101', '110101001010', '110110101000', '110111010100', '011011011010', + // 1585-1589 + '010101011011', '001010011101', '011000101011', '101100010101', '101101001010', + // 1590-1594 + '101110010101', '010110101010', '101010101110', '100100101110', '110010001111', + // 1595-1599 + '010100100111', '011010010101', '011010101010', '101011010110', '010101011101', + // 1600 + '001010011101' +]; +/** + * @param {?} date1 + * @param {?} date2 + * @return {?} + */ +function getDaysDiff(date1, date2) { + // Ignores the time part in date1 and date2: + /** @type {?} */ + const time1 = Date.UTC(date1.getFullYear(), date1.getMonth(), date1.getDate()); + /** @type {?} */ + const time2 = Date.UTC(date2.getFullYear(), date2.getMonth(), date2.getDate()); + /** @type {?} */ + const diff = Math.abs(time1 - time2); + return Math.round(diff / ONE_DAY); +} +class NgbCalendarIslamicUmalqura extends NgbCalendarIslamicCivil { + /** + * Returns the equivalent islamic(Umalqura) date value for a give input Gregorian date. + * `gdate` is s JS Date to be converted to Hijri. + * @param {?} gDate + * @return {?} + */ + fromGregorian(gDate) { + /** @type {?} */ + let hDay = 1; + /** @type {?} */ + let hMonth = 0; + /** @type {?} */ + let hYear = 1300; + /** @type {?} */ + let daysDiff = getDaysDiff(gDate, GREGORIAN_FIRST_DATE); + if (gDate.getTime() - GREGORIAN_FIRST_DATE.getTime() >= 0 && gDate.getTime() - GREGORIAN_LAST_DATE.getTime() <= 0) { + /** @type {?} */ + let year = 1300; + for (let i = 0; i < MONTH_LENGTH.length; i++, year++) { + for (let j = 0; j < 12; j++) { + /** @type {?} */ + let numOfDays = +MONTH_LENGTH[i][j] + 29; + if (daysDiff <= numOfDays) { + hDay = daysDiff + 1; + if (hDay > numOfDays) { + hDay = 1; + j++; + } + if (j > 11) { + j = 0; + year++; + } + hMonth = j; + hYear = year; + return new NgbDate(hYear, hMonth + 1, hDay); + } + daysDiff = daysDiff - numOfDays; + } + } + } + else { + return super.fromGregorian(gDate); + } + } + /** + * Converts the current Hijri date to Gregorian. + * @param {?} hDate + * @return {?} + */ + toGregorian(hDate) { + /** @type {?} */ + const hYear = hDate.year; + /** @type {?} */ + const hMonth = hDate.month - 1; + /** @type {?} */ + const hDay = hDate.day; + /** @type {?} */ + let gDate = new Date(GREGORIAN_FIRST_DATE); + /** @type {?} */ + let dayDiff = hDay - 1; + if (hYear >= HIJRI_BEGIN && hYear <= HIJRI_END) { + for (let y = 0; y < hYear - HIJRI_BEGIN; y++) { + for (let m = 0; m < 12; m++) { + dayDiff += +MONTH_LENGTH[y][m] + 29; + } + } + for (let m = 0; m < hMonth; m++) { + dayDiff += +MONTH_LENGTH[hYear - HIJRI_BEGIN][m] + 29; + } + gDate.setDate(GREGORIAN_FIRST_DATE.getDate() + dayDiff); + } + else { + gDate = super.toGregorian(hDate); + } + return gDate; + } + /** + * Returns the number of days in a specific Hijri hMonth. + * `hMonth` is 1 for Muharram, 2 for Safar, etc. + * `hYear` is any Hijri hYear. + * @param {?} hMonth + * @param {?} hYear + * @return {?} + */ + getDaysPerMonth(hMonth, hYear) { + if (hYear >= HIJRI_BEGIN && hYear <= HIJRI_END) { + /** @type {?} */ + const pos = hYear - HIJRI_BEGIN; + return +MONTH_LENGTH[pos][hMonth - 1] + 29; + } + return super.getDaysPerMonth(hMonth, hYear); + } +} +NgbCalendarIslamicUmalqura.decorators = [ + { type: Injectable } +]; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * Returns the equivalent JS date value for a give input Jalali date. + * `jalaliDate` is an Jalali date to be converted to Gregorian. + * @param {?} jalaliDate + * @return {?} + */ +function toGregorian(jalaliDate) { + /** @type {?} */ + let jdn = jalaliToJulian(jalaliDate.year, jalaliDate.month, jalaliDate.day); + /** @type {?} */ + let date = julianToGregorian(jdn); + date.setHours(6, 30, 3, 200); + return date; +} +/** + * Returns the equivalent jalali date value for a give input Gregorian date. + * `gdate` is a JS Date to be converted to jalali. + * utc to local + * @param {?} gdate + * @return {?} + */ +function fromGregorian(gdate) { + /** @type {?} */ + let g2d = gregorianToJulian(gdate.getFullYear(), gdate.getMonth() + 1, gdate.getDate()); + return julianToJalali(g2d); +} +/** + * @param {?} date + * @param {?} yearValue + * @return {?} + */ +function setJalaliYear(date, yearValue) { + date.year = +yearValue; + return date; +} +/** + * @param {?} date + * @param {?} month + * @return {?} + */ +function setJalaliMonth(date, month) { + month = +month; + date.year = date.year + Math.floor((month - 1) / 12); + date.month = Math.floor(((month - 1) % 12 + 12) % 12) + 1; + return date; +} +/** + * @param {?} date + * @param {?} day + * @return {?} + */ +function setJalaliDay(date, day) { + /** @type {?} */ + let mDays = getDaysPerMonth(date.month, date.year); + if (day <= 0) { + while (day <= 0) { + date = setJalaliMonth(date, date.month - 1); + mDays = getDaysPerMonth(date.month, date.year); + day += mDays; + } + } + else if (day > mDays) { + while (day > mDays) { + day -= mDays; + date = setJalaliMonth(date, date.month + 1); + mDays = getDaysPerMonth(date.month, date.year); + } + } + date.day = day; + return date; +} +/** + * @param {?} a + * @param {?} b + * @return {?} + */ +function mod$1(a, b) { + return a - b * Math.floor(a / b); +} +/** + * @param {?} a + * @param {?} b + * @return {?} + */ +function div(a, b) { + return Math.trunc(a / b); +} +/* + This function determines if the Jalali (Persian) year is + leap (366-day long) or is the common year (365 days), and + finds the day in March (Gregorian calendar) of the first + day of the Jalali year (jalaliYear). + @param jalaliYear Jalali calendar year (-61 to 3177) + @return + leap: number of years since the last leap year (0 to 4) + gYear: Gregorian year of the beginning of Jalali year + march: the March day of Farvardin the 1st (1st day of jalaliYear) + @see: http://www.astro.uni.torun.pl/~kb/Papers/EMP/PersianC-EMP.htm + @see: http://www.fourmilab.ch/documents/calendar/ + */ +/** + * @param {?} jalaliYear + * @return {?} + */ +function jalCal(jalaliYear) { + // Jalali years starting the 33-year rule. + /** @type {?} */ + let breaks = [-61, 9, 38, 199, 426, 686, 756, 818, 1111, 1181, 1210, 1635, 2060, 2097, 2192, 2262, 2324, 2394, 2456, 3178]; + /** @type {?} */ + const breaksLength = breaks.length; + /** @type {?} */ + const gYear = jalaliYear + 621; + /** @type {?} */ + let leapJ = -14; + /** @type {?} */ + let jp = breaks[0]; + if (jalaliYear < jp || jalaliYear >= breaks[breaksLength - 1]) { + throw new Error('Invalid Jalali year ' + jalaliYear); + } + // Find the limiting years for the Jalali year jalaliYear. + /** @type {?} */ + let jump; + for (let i = 1; i < breaksLength; i += 1) { + /** @type {?} */ + const jm = breaks[i]; + jump = jm - jp; + if (jalaliYear < jm) { + break; + } + leapJ = leapJ + div(jump, 33) * 8 + div(mod$1(jump, 33), 4); + jp = jm; + } + /** @type {?} */ + let n = jalaliYear - jp; + // Find the number of leap years from AD 621 to the beginning + // of the current Jalali year in the Persian calendar. + leapJ = leapJ + div(n, 33) * 8 + div(mod$1(n, 33) + 3, 4); + if (mod$1(jump, 33) === 4 && jump - n === 4) { + leapJ += 1; + } + // And the same in the Gregorian calendar (until the year gYear). + /** @type {?} */ + const leapG = div(gYear, 4) - div((div(gYear, 100) + 1) * 3, 4) - 150; + // Determine the Gregorian date of Farvardin the 1st. + /** @type {?} */ + const march = 20 + leapJ - leapG; + // Find how many years have passed since the last leap year. + if (jump - n < 6) { + n = n - jump + div(jump + 4, 33) * 33; + } + /** @type {?} */ + let leap = mod$1(mod$1(n + 1, 33) - 1, 4); + if (leap === -1) { + leap = 4; + } + return { leap: leap, gy: gYear, march: march }; +} +/* + Calculates Gregorian and Julian calendar dates from the Julian Day number + (jdn) for the period since jdn=-34839655 (i.e. the year -100100 of both + calendars) to some millions years ahead of the present. + @param jdn Julian Day number + @return + gYear: Calendar year (years BC numbered 0, -1, -2, ...) + gMonth: Calendar month (1 to 12) + gDay: Calendar day of the month M (1 to 28/29/30/31) + */ +/** + * @param {?} julianDayNumber + * @return {?} + */ +function julianToGregorian(julianDayNumber) { + /** @type {?} */ + let j = 4 * julianDayNumber + 139361631; + j = j + div(div(4 * julianDayNumber + 183187720, 146097) * 3, 4) * 4 - 3908; + /** @type {?} */ + const i = div(mod$1(j, 1461), 4) * 5 + 308; + /** @type {?} */ + const gDay = div(mod$1(i, 153), 5) + 1; + /** @type {?} */ + const gMonth = mod$1(div(i, 153), 12) + 1; + /** @type {?} */ + const gYear = div(j, 1461) - 100100 + div(8 - gMonth, 6); + return new Date(gYear, gMonth - 1, gDay); +} +/* + Converts a date of the Jalali calendar to the Julian Day number. + @param jy Jalali year (1 to 3100) + @param jm Jalali month (1 to 12) + @param jd Jalali day (1 to 29/31) + @return Julian Day number + */ +/** + * @param {?} gy + * @param {?} gm + * @param {?} gd + * @return {?} + */ +function gregorianToJulian(gy, gm, gd) { + /** @type {?} */ + let d = div((gy + div(gm - 8, 6) + 100100) * 1461, 4) + div(153 * mod$1(gm + 9, 12) + 2, 5) + gd - 34840408; + d = d - div(div(gy + 100100 + div(gm - 8, 6), 100) * 3, 4) + 752; + return d; +} +/* + Converts the Julian Day number to a date in the Jalali calendar. + @param julianDayNumber Julian Day number + @return + jalaliYear: Jalali year (1 to 3100) + jalaliMonth: Jalali month (1 to 12) + jalaliDay: Jalali day (1 to 29/31) + */ +/** + * @param {?} julianDayNumber + * @return {?} + */ +function julianToJalali(julianDayNumber) { + /** @type {?} */ + let gy = julianToGregorian(julianDayNumber).getFullYear() // Calculate Gregorian year (gy). + ; + /** @type {?} */ + let jalaliYear = gy - 621; + /** @type {?} */ + let r = jalCal(jalaliYear); + /** @type {?} */ + let gregorianDay = gregorianToJulian(gy, 3, r.march); + /** @type {?} */ + let jalaliDay; + /** @type {?} */ + let jalaliMonth; + /** @type {?} */ + let numberOfDays; + // Find number of days that passed since 1 Farvardin. + numberOfDays = julianDayNumber - gregorianDay; + if (numberOfDays >= 0) { + if (numberOfDays <= 185) { + // The first 6 months. + jalaliMonth = 1 + div(numberOfDays, 31); + jalaliDay = mod$1(numberOfDays, 31) + 1; + return new NgbDate(jalaliYear, jalaliMonth, jalaliDay); + } + else { + // The remaining months. + numberOfDays -= 186; + } + } + else { + // Previous Jalali year. + jalaliYear -= 1; + numberOfDays += 179; + if (r.leap === 1) { + numberOfDays += 1; + } + } + jalaliMonth = 7 + div(numberOfDays, 30); + jalaliDay = mod$1(numberOfDays, 30) + 1; + return new NgbDate(jalaliYear, jalaliMonth, jalaliDay); +} +/* + Converts a date of the Jalali calendar to the Julian Day number. + @param jYear Jalali year (1 to 3100) + @param jMonth Jalali month (1 to 12) + @param jDay Jalali day (1 to 29/31) + @return Julian Day number + */ +/** + * @param {?} jYear + * @param {?} jMonth + * @param {?} jDay + * @return {?} + */ +function jalaliToJulian(jYear, jMonth, jDay) { + /** @type {?} */ + let r = jalCal(jYear); + return gregorianToJulian(r.gy, 3, r.march) + (jMonth - 1) * 31 - div(jMonth, 7) * (jMonth - 7) + jDay - 1; +} +/** + * Returns the number of days in a specific jalali month. + * @param {?} month + * @param {?} year + * @return {?} + */ +function getDaysPerMonth(month, year) { + if (month <= 6) { + return 31; + } + if (month <= 11) { + return 30; + } + if (jalCal(year).leap === 0) { + return 30; + } + return 29; +} + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +class NgbCalendarPersian extends NgbCalendar { + /** + * @return {?} + */ + getDaysPerWeek() { return 7; } + /** + * @return {?} + */ + getMonths() { return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; } + /** + * @return {?} + */ + getWeeksPerMonth() { return 6; } + /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + getNext(date, period = 'd', number = 1) { + date = new NgbDate(date.year, date.month, date.day); + switch (period) { + case 'y': + date = setJalaliYear(date, date.year + number); + date.month = 1; + date.day = 1; + return date; + case 'm': + date = setJalaliMonth(date, date.month + number); + date.day = 1; + return date; + case 'd': + return setJalaliDay(date, date.day + number); + default: + return date; + } + } + /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + getPrev(date, period = 'd', number = 1) { return this.getNext(date, period, -number); } + /** + * @param {?} date + * @return {?} + */ + getWeekday(date) { + /** @type {?} */ + const day = toGregorian(date).getDay(); + // in JS Date Sun=0, in ISO 8601 Sun=7 + return day === 0 ? 7 : day; + } + /** + * @param {?} week + * @param {?} firstDayOfWeek + * @return {?} + */ + getWeekNumber(week, firstDayOfWeek) { + // in JS Date Sun=0, in ISO 8601 Sun=7 + if (firstDayOfWeek === 7) { + firstDayOfWeek = 0; + } + /** @type {?} */ + const thursdayIndex = (4 + 7 - firstDayOfWeek) % 7; + /** @type {?} */ + const date = week[thursdayIndex]; + /** @type {?} */ + const jsDate = toGregorian(date); + jsDate.setDate(jsDate.getDate() + 4 - (jsDate.getDay() || 7)); // Thursday + // Thursday + /** @type {?} */ + const time = jsDate.getTime(); + /** @type {?} */ + const startDate = toGregorian(new NgbDate(date.year, 1, 1)); + return Math.floor(Math.round((time - startDate.getTime()) / 86400000) / 7) + 1; + } + /** + * @return {?} + */ + getToday() { return fromGregorian(new Date()); } + /** + * @param {?} date + * @return {?} + */ + isValid(date) { + return date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day) && + !isNaN(toGregorian(date).getTime()); + } +} +NgbCalendarPersian.decorators = [ + { type: Injectable } +]; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @type {?} */ +const PARTS_PER_HOUR = 1080; +/** @type {?} */ +const PARTS_PER_DAY = 24 * PARTS_PER_HOUR; +/** @type {?} */ +const PARTS_FRACTIONAL_MONTH = 12 * PARTS_PER_HOUR + 793; +/** @type {?} */ +const PARTS_PER_MONTH = 29 * PARTS_PER_DAY + PARTS_FRACTIONAL_MONTH; +/** @type {?} */ +const BAHARAD = 11 * PARTS_PER_HOUR + 204; +/** @type {?} */ +const HEBREW_DAY_ON_JAN_1_1970 = 2092591; +/** @type {?} */ +const GREGORIAN_EPOCH$1 = 1721425.5; +/** + * @param {?} year + * @return {?} + */ +function isGregorianLeapYear$1(year) { + return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0; +} +/** + * @param {?} year + * @return {?} + */ +function numberOfFirstDayInYear(year) { + /** @type {?} */ + let monthsBeforeYear = Math.floor((235 * year - 234) / 19); + /** @type {?} */ + let fractionalMonthsBeforeYear = monthsBeforeYear * PARTS_FRACTIONAL_MONTH + BAHARAD; + /** @type {?} */ + let dayNumber = monthsBeforeYear * 29 + Math.floor(fractionalMonthsBeforeYear / PARTS_PER_DAY); + /** @type {?} */ + let timeOfDay = fractionalMonthsBeforeYear % PARTS_PER_DAY; + /** @type {?} */ + let dayOfWeek = dayNumber % 7; + if (dayOfWeek === 2 || dayOfWeek === 4 || dayOfWeek === 6) { + dayNumber++; + dayOfWeek = dayNumber % 7; + } + if (dayOfWeek === 1 && timeOfDay > 15 * PARTS_PER_HOUR + 204 && !isHebrewLeapYear(year)) { + dayNumber += 2; + } + else if (dayOfWeek === 0 && timeOfDay > 21 * PARTS_PER_HOUR + 589 && isHebrewLeapYear(year - 1)) { + dayNumber++; + } + return dayNumber; +} +/** + * @param {?} month + * @param {?} year + * @return {?} + */ +function getDaysInGregorianMonth(month, year) { + /** @type {?} */ + let days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + if (isGregorianLeapYear$1(year)) { + days[1]++; + } + return days[month - 1]; +} +/** + * @param {?} year + * @return {?} + */ +function getHebrewMonths(year) { + return isHebrewLeapYear(year) ? 13 : 12; +} +/** + * Returns the number of days in a specific Hebrew year. + * `year` is any Hebrew year. + * @param {?} year + * @return {?} + */ +function getDaysInHebrewYear(year) { + return numberOfFirstDayInYear(year + 1) - numberOfFirstDayInYear(year); +} +/** + * @param {?} year + * @return {?} + */ +function isHebrewLeapYear(year) { + /** @type {?} */ + let b = (year * 12 + 17) % 19; + return b >= ((b < 0) ? -7 : 12); +} +/** + * Returns the number of days in a specific Hebrew month. + * `month` is 1 for Nisan, 2 for Iyar etc. Note: Hebrew leap year contains 13 months. + * `year` is any Hebrew year. + * @param {?} month + * @param {?} year + * @return {?} + */ +function getDaysInHebrewMonth(month, year) { + /** @type {?} */ + let yearLength = numberOfFirstDayInYear(year + 1) - numberOfFirstDayInYear(year); + /** @type {?} */ + let yearType = (yearLength <= 380 ? yearLength : (yearLength - 30)) - 353; + /** @type {?} */ + let leapYear = isHebrewLeapYear(year); + /** @type {?} */ + let daysInMonth = leapYear ? [30, 29, 29, 29, 30, 30, 29, 30, 29, 30, 29, 30, 29] : + [30, 29, 29, 29, 30, 29, 30, 29, 30, 29, 30, 29]; + if (yearType > 0) { + daysInMonth[2]++; // Kislev gets an extra day in normal or complete years. + } + if (yearType > 1) { + daysInMonth[1]++; // Heshvan gets an extra day in complete years only. + } + return daysInMonth[month - 1]; +} +/** + * @param {?} date + * @return {?} + */ +function getDayNumberInHebrewYear(date) { + /** @type {?} */ + let numberOfDay = 0; + for (let i = 1; i < date.month; i++) { + numberOfDay += getDaysInHebrewMonth(i, date.year); + } + return numberOfDay + date.day; +} +/** + * @param {?} date + * @param {?} val + * @return {?} + */ +function setHebrewMonth(date, val) { + /** @type {?} */ + let after = val >= 0; + if (!after) { + val = -val; + } + while (val > 0) { + if (after) { + if (val > getHebrewMonths(date.year) - date.month) { + val -= getHebrewMonths(date.year) - date.month + 1; + date.year++; + date.month = 1; + } + else { + date.month += val; + val = 0; + } + } + else { + if (val >= date.month) { + date.year--; + val -= date.month; + date.month = getHebrewMonths(date.year); + } + else { + date.month -= val; + val = 0; + } + } + } + return date; +} +/** + * @param {?} date + * @param {?} val + * @return {?} + */ +function setHebrewDay(date, val) { + /** @type {?} */ + let after = val >= 0; + if (!after) { + val = -val; + } + while (val > 0) { + if (after) { + if (val > getDaysInHebrewYear(date.year) - getDayNumberInHebrewYear(date)) { + val -= getDaysInHebrewYear(date.year) - getDayNumberInHebrewYear(date) + 1; + date.year++; + date.month = 1; + date.day = 1; + } + else if (val > getDaysInHebrewMonth(date.month, date.year) - date.day) { + val -= getDaysInHebrewMonth(date.month, date.year) - date.day + 1; + date.month++; + date.day = 1; + } + else { + date.day += val; + val = 0; + } + } + else { + if (val >= date.day) { + val -= date.day; + date.month--; + if (date.month === 0) { + date.year--; + date.month = getHebrewMonths(date.year); + } + date.day = getDaysInHebrewMonth(date.month, date.year); + } + else { + date.day -= val; + val = 0; + } + } + } + return date; +} +/** + * Returns the equivalent Hebrew date value for a give input Gregorian date. + * `gdate` is a JS Date to be converted to Hebrew date. + * @param {?} gdate + * @return {?} + */ +function fromGregorian$1(gdate) { + /** @type {?} */ + const date = new Date(gdate); + /** @type {?} */ + const gYear = date.getFullYear(); + /** @type {?} */ + const gMonth = date.getMonth(); + /** @type {?} */ + const gDay = date.getDate(); + /** @type {?} */ + let julianDay = GREGORIAN_EPOCH$1 - 1 + 365 * (gYear - 1) + Math.floor((gYear - 1) / 4) - + Math.floor((gYear - 1) / 100) + Math.floor((gYear - 1) / 400) + + Math.floor((367 * (gMonth + 1) - 362) / 12 + (gMonth + 1 <= 2 ? 0 : isGregorianLeapYear$1(gYear) ? -1 : -2) + gDay); + julianDay = Math.floor(julianDay + 0.5); + /** @type {?} */ + let daysSinceHebEpoch = julianDay - 347997; + /** @type {?} */ + let monthsSinceHebEpoch = Math.floor(daysSinceHebEpoch * PARTS_PER_DAY / PARTS_PER_MONTH); + /** @type {?} */ + let hYear = Math.floor((monthsSinceHebEpoch * 19 + 234) / 235) + 1; + /** @type {?} */ + let firstDayOfThisYear = numberOfFirstDayInYear(hYear); + /** @type {?} */ + let dayOfYear = daysSinceHebEpoch - firstDayOfThisYear; + while (dayOfYear < 1) { + hYear--; + firstDayOfThisYear = numberOfFirstDayInYear(hYear); + dayOfYear = daysSinceHebEpoch - firstDayOfThisYear; + } + /** @type {?} */ + let hMonth = 1; + /** @type {?} */ + let hDay = dayOfYear; + while (hDay > getDaysInHebrewMonth(hMonth, hYear)) { + hDay -= getDaysInHebrewMonth(hMonth, hYear); + hMonth++; + } + return new NgbDate(hYear, hMonth, hDay); +} +/** + * Returns the equivalent JS date value for a given Hebrew date. + * `hebrewDate` is an Hebrew date to be converted to Gregorian. + * @param {?} hebrewDate + * @return {?} + */ +function toGregorian$1(hebrewDate) { + /** @type {?} */ + const hYear = hebrewDate.year; + /** @type {?} */ + const hMonth = hebrewDate.month; + /** @type {?} */ + const hDay = hebrewDate.day; + /** @type {?} */ + let days = numberOfFirstDayInYear(hYear); + for (let i = 1; i < hMonth; i++) { + days += getDaysInHebrewMonth(i, hYear); + } + days += hDay; + /** @type {?} */ + let diffDays = days - HEBREW_DAY_ON_JAN_1_1970; + /** @type {?} */ + let after = diffDays >= 0; + if (!after) { + diffDays = -diffDays; + } + /** @type {?} */ + let gYear = 1970; + /** @type {?} */ + let gMonth = 1; + /** @type {?} */ + let gDay = 1; + while (diffDays > 0) { + if (after) { + if (diffDays >= (isGregorianLeapYear$1(gYear) ? 366 : 365)) { + diffDays -= isGregorianLeapYear$1(gYear) ? 366 : 365; + gYear++; + } + else if (diffDays >= getDaysInGregorianMonth(gMonth, gYear)) { + diffDays -= getDaysInGregorianMonth(gMonth, gYear); + gMonth++; + } + else { + gDay += diffDays; + diffDays = 0; + } + } + else { + if (diffDays >= (isGregorianLeapYear$1(gYear - 1) ? 366 : 365)) { + diffDays -= isGregorianLeapYear$1(gYear - 1) ? 366 : 365; + gYear--; + } + else { + if (gMonth > 1) { + gMonth--; + } + else { + gMonth = 12; + gYear--; + } + if (diffDays >= getDaysInGregorianMonth(gMonth, gYear)) { + diffDays -= getDaysInGregorianMonth(gMonth, gYear); + } + else { + gDay = getDaysInGregorianMonth(gMonth, gYear) - diffDays + 1; + diffDays = 0; + } + } + } + } + return new Date(gYear, gMonth - 1, gDay); +} +/** + * @param {?} numerals + * @return {?} + */ +function hebrewNumerals(numerals) { + if (!numerals) { + return ''; + } + /** @type {?} */ + const hArray0_9 = ['', '\u05d0', '\u05d1', '\u05d2', '\u05d3', '\u05d4', '\u05d5', '\u05d6', '\u05d7', '\u05d8']; + /** @type {?} */ + const hArray10_19 = [ + '\u05d9', '\u05d9\u05d0', '\u05d9\u05d1', '\u05d9\u05d2', '\u05d9\u05d3', '\u05d8\u05d5', '\u05d8\u05d6', + '\u05d9\u05d6', '\u05d9\u05d7', '\u05d9\u05d8' + ]; + /** @type {?} */ + const hArray20_90 = ['', '', '\u05db', '\u05dc', '\u05de', '\u05e0', '\u05e1', '\u05e2', '\u05e4', '\u05e6']; + /** @type {?} */ + const hArray100_900 = [ + '', '\u05e7', '\u05e8', '\u05e9', '\u05ea', '\u05ea\u05e7', '\u05ea\u05e8', '\u05ea\u05e9', '\u05ea\u05ea', + '\u05ea\u05ea\u05e7' + ]; + /** @type {?} */ + const hArray1000_9000 = [ + '', '\u05d0', '\u05d1', '\u05d1\u05d0', '\u05d1\u05d1', '\u05d4', '\u05d4\u05d0', '\u05d4\u05d1', + '\u05d4\u05d1\u05d0', '\u05d4\u05d1\u05d1' + ]; + /** @type {?} */ + const geresh = '\u05f3'; + /** @type {?} */ + const gershaim = '\u05f4'; + /** @type {?} */ + let mem = 0; + /** @type {?} */ + let result = []; + /** @type {?} */ + let step = 0; + while (numerals > 0) { + /** @type {?} */ + let m = numerals % 10; + if (step === 0) { + mem = m; + } + else if (step === 1) { + if (m !== 1) { + result.unshift(hArray20_90[m], hArray0_9[mem]); + } + else { + result.unshift(hArray10_19[mem]); + } + } + else if (step === 2) { + result.unshift(hArray100_900[m]); + } + else { + if (m !== 5) { + result.unshift(hArray1000_9000[m], geresh, ' '); + } + break; + } + numerals = Math.floor(numerals / 10); + if (step === 0 && numerals === 0) { + result.unshift(hArray0_9[m]); + } + step++; + } + result = result.join('').split(''); + if (result.length === 1) { + result.push(geresh); + } + else if (result.length > 1) { + result.splice(result.length - 1, 0, gershaim); + } + return result.join(''); +} + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * \@since 3.2.0 + */ +class NgbCalendarHebrew extends NgbCalendar { + /** + * @return {?} + */ + getDaysPerWeek() { return 7; } + /** + * @param {?=} year + * @return {?} + */ + getMonths(year) { + if (year && isHebrewLeapYear(year)) { + return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]; + } + else { + return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; + } + } + /** + * @return {?} + */ + getWeeksPerMonth() { return 6; } + /** + * @param {?} date + * @return {?} + */ + isValid(date) { + /** @type {?} */ + let b = date && isNumber(date.year) && isNumber(date.month) && isNumber(date.day); + b = b && date.month > 0 && date.month <= (isHebrewLeapYear(date.year) ? 13 : 12); + b = b && date.day > 0 && date.day <= getDaysInHebrewMonth(date.month, date.year); + return b && !isNaN(toGregorian$1(date).getTime()); + } + /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + getNext(date, period = 'd', number = 1) { + date = new NgbDate(date.year, date.month, date.day); + switch (period) { + case 'y': + date.year += number; + date.month = 1; + date.day = 1; + return date; + case 'm': + date = setHebrewMonth(date, number); + date.day = 1; + return date; + case 'd': + return setHebrewDay(date, number); + default: + return date; + } + } + /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + getPrev(date, period = 'd', number = 1) { return this.getNext(date, period, -number); } + /** + * @param {?} date + * @return {?} + */ + getWeekday(date) { + /** @type {?} */ + const day = toGregorian$1(date).getDay(); + // in JS Date Sun=0, in ISO 8601 Sun=7 + return day === 0 ? 7 : day; + } + /** + * @param {?} week + * @param {?} firstDayOfWeek + * @return {?} + */ + getWeekNumber(week, firstDayOfWeek) { + /** @type {?} */ + const date = week[week.length - 1]; + return Math.ceil(getDayNumberInHebrewYear(date) / 7); + } + /** + * @return {?} + */ + getToday() { return fromGregorian$1(new Date()); } + /** + * \@since 3.4.0 + * @param {?} date + * @return {?} + */ + toGregorian(date) { return fromJSDate(toGregorian$1(date)); } + /** + * \@since 3.4.0 + * @param {?} date + * @return {?} + */ + fromGregorian(date) { return fromGregorian$1(toJSDate(date)); } +} +NgbCalendarHebrew.decorators = [ + { type: Injectable } +]; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @type {?} */ +const WEEKDAYS = ['שני', 'שלישי', 'רביעי', 'חמישי', 'שישי', 'שבת', 'ראשון']; +/** @type {?} */ +const MONTHS = ['תשרי', 'חשון', 'כסלו', 'טבת', 'שבט', 'אדר', 'ניסן', 'אייר', 'סיון', 'תמוז', 'אב', 'אלול']; +/** @type {?} */ +const MONTHS_LEAP = ['תשרי', 'חשון', 'כסלו', 'טבת', 'שבט', 'אדר א׳', 'אדר ב׳', 'ניסן', 'אייר', 'סיון', 'תמוז', 'אב', 'אלול']; +/** + * \@since 3.2.0 + */ +class NgbDatepickerI18nHebrew extends NgbDatepickerI18n { + /** + * @param {?} month + * @param {?=} year + * @return {?} + */ + getMonthShortName(month, year) { return this.getMonthFullName(month, year); } + /** + * @param {?} month + * @param {?=} year + * @return {?} + */ + getMonthFullName(month, year) { + return isHebrewLeapYear(year) ? MONTHS_LEAP[month - 1] : MONTHS[month - 1]; + } + /** + * @param {?} weekday + * @return {?} + */ + getWeekdayShortName(weekday) { return WEEKDAYS[weekday - 1]; } + /** + * @param {?} date + * @return {?} + */ + getDayAriaLabel(date) { + return `${hebrewNumerals(date.day)} ${this.getMonthFullName(date.month, date.year)} ${hebrewNumerals(date.year)}`; + } + /** + * @param {?} date + * @return {?} + */ + getDayNumerals(date) { return hebrewNumerals(date.day); } + /** + * @param {?} weekNumber + * @return {?} + */ + getWeekNumerals(weekNumber) { return hebrewNumerals(weekNumber); } + /** + * @param {?} year + * @return {?} + */ + getYearNumerals(year) { return hebrewNumerals(year); } +} +NgbDatepickerI18nHebrew.decorators = [ + { type: Injectable } +]; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * [`NgbDateAdapter`](#/components/datepicker/api#NgbDateAdapter) implementation that uses + * native javascript dates as a user date model. + */ +class NgbDateNativeAdapter extends NgbDateAdapter { + /** + * Converts a native `Date` to a `NgbDateStruct`. + * @param {?} date + * @return {?} + */ + fromModel(date) { + return (date instanceof Date && !isNaN(date.getTime())) ? this._fromNativeDate(date) : null; + } + /** + * Converts a `NgbDateStruct` to a native `Date`. + * @param {?} date + * @return {?} + */ + toModel(date) { + return date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day) ? this._toNativeDate(date) : + null; + } + /** + * @protected + * @param {?} date + * @return {?} + */ + _fromNativeDate(date) { + return { year: date.getFullYear(), month: date.getMonth() + 1, day: date.getDate() }; + } + /** + * @protected + * @param {?} date + * @return {?} + */ + _toNativeDate(date) { + /** @type {?} */ + const jsDate = new Date(date.year, date.month - 1, date.day, 12); + // avoid 30 -> 1930 conversion + jsDate.setFullYear(date.year); + return jsDate; + } +} +NgbDateNativeAdapter.decorators = [ + { type: Injectable } +]; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * Same as [`NgbDateNativeAdapter`](#/components/datepicker/api#NgbDateNativeAdapter), but with UTC dates. + * + * \@since 3.2.0 + */ +class NgbDateNativeUTCAdapter extends NgbDateNativeAdapter { + /** + * @protected + * @param {?} date + * @return {?} + */ + _fromNativeDate(date) { + return { year: date.getUTCFullYear(), month: date.getUTCMonth() + 1, day: date.getUTCDate() }; + } + /** + * @protected + * @param {?} date + * @return {?} + */ + _toNativeDate(date) { + /** @type {?} */ + const jsDate = new Date(Date.UTC(date.year, date.month - 1, date.day)); + // avoid 30 -> 1930 conversion + jsDate.setUTCFullYear(date.year); + return jsDate; + } +} +NgbDateNativeUTCAdapter.decorators = [ + { type: Injectable } +]; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +class NgbDatepickerModule { +} +NgbDatepickerModule.decorators = [ + { type: NgModule, args: [{ + declarations: [ + NgbDatepicker, NgbDatepickerMonthView, NgbDatepickerNavigation, NgbDatepickerNavigationSelect, NgbDatepickerDayView, + NgbInputDatepicker + ], + exports: [NgbDatepicker, NgbInputDatepicker], + imports: [CommonModule, FormsModule], + entryComponents: [NgbDatepicker] + },] } +]; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * A configuration service for the [`NgbDropdown`](#/components/dropdown/api#NgbDropdown) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the dropdowns used in the application. + */ +class NgbDropdownConfig { + constructor() { + this.autoClose = true; + this.placement = ['bottom-left', 'bottom-right', 'top-left', 'top-right']; + } +} +NgbDropdownConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } +]; +/** @nocollapse */ NgbDropdownConfig.ngInjectableDef = ɵɵdefineInjectable({ factory: function NgbDropdownConfig_Factory() { return new NgbDropdownConfig(); }, token: NgbDropdownConfig, providedIn: "root" }); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +class NgbNavbar { +} +NgbNavbar.decorators = [ + { type: Directive, args: [{ selector: '.navbar' },] } +]; +/** + * A directive you should put put on a dropdown item to enable keyboard navigation. + * Arrow keys will move focus between items marked with this directive. + * + * \@since 4.1.0 + */ +class NgbDropdownItem { + /** + * @param {?} elementRef + */ + constructor(elementRef) { + this.elementRef = elementRef; + this._disabled = false; + } + /** + * @param {?} value + * @return {?} + */ + set disabled(value) { + this._disabled = (/** @type {?} */ (value)) === '' || value === true; // accept an empty attribute as true + } + /** + * @return {?} + */ + get disabled() { return this._disabled; } +} +NgbDropdownItem.decorators = [ + { type: Directive, args: [{ selector: '[ngbDropdownItem]', host: { 'class': 'dropdown-item', '[class.disabled]': 'disabled' } },] } +]; +/** @nocollapse */ +NgbDropdownItem.ctorParameters = () => [ + { type: ElementRef } +]; +NgbDropdownItem.propDecorators = { + disabled: [{ type: Input }] +}; +/** + * A directive that wraps dropdown menu content and dropdown items. + */ +class NgbDropdownMenu { + /** + * @param {?} dropdown + */ + constructor(dropdown) { + this.dropdown = dropdown; + this.placement = 'bottom'; + this.isOpen = false; + } +} +NgbDropdownMenu.decorators = [ + { type: Directive, args: [{ + selector: '[ngbDropdownMenu]', + host: { + '[class.dropdown-menu]': 'true', + '[class.show]': 'dropdown.isOpen()', + '[attr.x-placement]': 'placement', + '(keydown.ArrowUp)': 'dropdown.onKeyDown($event)', + '(keydown.ArrowDown)': 'dropdown.onKeyDown($event)', + '(keydown.Home)': 'dropdown.onKeyDown($event)', + '(keydown.End)': 'dropdown.onKeyDown($event)', + '(keydown.Enter)': 'dropdown.onKeyDown($event)', + '(keydown.Space)': 'dropdown.onKeyDown($event)' + } + },] } +]; +/** @nocollapse */ +NgbDropdownMenu.ctorParameters = () => [ + { type: undefined, decorators: [{ type: Inject, args: [forwardRef((/** + * @return {?} + */ + () => NgbDropdown)),] }] } +]; +NgbDropdownMenu.propDecorators = { + menuItems: [{ type: ContentChildren, args: [NgbDropdownItem,] }] +}; +/** + * A directive to mark an element to which dropdown menu will be anchored. + * + * This is a simple version of the `NgbDropdownToggle` directive. + * It plays the same role, but doesn't listen to click events to toggle dropdown menu thus enabling support + * for events other than click. + * + * \@since 1.1.0 + */ +class NgbDropdownAnchor { + /** + * @param {?} dropdown + * @param {?} _elementRef + */ + constructor(dropdown, _elementRef) { + this.dropdown = dropdown; + this._elementRef = _elementRef; + this.anchorEl = _elementRef.nativeElement; + } + /** + * @return {?} + */ + getNativeElement() { return this._elementRef.nativeElement; } +} +NgbDropdownAnchor.decorators = [ + { type: Directive, args: [{ + selector: '[ngbDropdownAnchor]', + host: { 'class': 'dropdown-toggle', 'aria-haspopup': 'true', '[attr.aria-expanded]': 'dropdown.isOpen()' } + },] } +]; +/** @nocollapse */ +NgbDropdownAnchor.ctorParameters = () => [ + { type: undefined, decorators: [{ type: Inject, args: [forwardRef((/** + * @return {?} + */ + () => NgbDropdown)),] }] }, + { type: ElementRef } +]; +/** + * A directive to mark an element that will toggle dropdown via the `click` event. + * + * You can also use `NgbDropdownAnchor` as an alternative. + */ +class NgbDropdownToggle extends NgbDropdownAnchor { + /** + * @param {?} dropdown + * @param {?} elementRef + */ + constructor(dropdown, elementRef) { + super(dropdown, elementRef); + } +} +NgbDropdownToggle.decorators = [ + { type: Directive, args: [{ + selector: '[ngbDropdownToggle]', + host: { + 'class': 'dropdown-toggle', + 'aria-haspopup': 'true', + '[attr.aria-expanded]': 'dropdown.isOpen()', + '(click)': 'dropdown.toggle()', + '(keydown.ArrowUp)': 'dropdown.onKeyDown($event)', + '(keydown.ArrowDown)': 'dropdown.onKeyDown($event)', + '(keydown.Home)': 'dropdown.onKeyDown($event)', + '(keydown.End)': 'dropdown.onKeyDown($event)' + }, + providers: [{ provide: NgbDropdownAnchor, useExisting: forwardRef((/** + * @return {?} + */ + () => NgbDropdownToggle)) }] + },] } +]; +/** @nocollapse */ +NgbDropdownToggle.ctorParameters = () => [ + { type: undefined, decorators: [{ type: Inject, args: [forwardRef((/** + * @return {?} + */ + () => NgbDropdown)),] }] }, + { type: ElementRef } +]; +/** + * A directive that provides contextual overlays for displaying lists of links and more. + */ +class NgbDropdown { + /** + * @param {?} _changeDetector + * @param {?} config + * @param {?} _document + * @param {?} _ngZone + * @param {?} _elementRef + * @param {?} _renderer + * @param {?} ngbNavbar + */ + constructor(_changeDetector, config, _document, _ngZone, _elementRef, _renderer, ngbNavbar) { + this._changeDetector = _changeDetector; + this._document = _document; + this._ngZone = _ngZone; + this._elementRef = _elementRef; + this._renderer = _renderer; + this._closed$ = new Subject(); + /** + * Defines whether or not the dropdown menu is opened initially. + */ + this._open = false; + /** + * An event fired when the dropdown is opened or closed. + * + * The event payload is a `boolean`: + * * `true` - the dropdown was opened + * * `false` - the dropdown was closed + */ + this.openChange = new EventEmitter(); + this.placement = config.placement; + this.container = config.container; + this.autoClose = config.autoClose; + this.display = ngbNavbar ? 'static' : 'dynamic'; + this._zoneSubscription = _ngZone.onStable.subscribe((/** + * @return {?} + */ + () => { this._positionMenu(); })); + } + /** + * @return {?} + */ + ngAfterContentInit() { + this._ngZone.onStable.pipe(take(1)).subscribe((/** + * @return {?} + */ + () => { + this._applyPlacementClasses(); + if (this._open) { + this._setCloseHandlers(); + } + })); + } + /** + * @param {?} changes + * @return {?} + */ + ngOnChanges(changes) { + if (changes.container && this._open) { + this._applyContainer(this.container); + } + if (changes.placement && !changes.placement.isFirstChange) { + this._applyPlacementClasses(); + } + } + /** + * Checks if the dropdown menu is open. + * @return {?} + */ + isOpen() { return this._open; } + /** + * Opens the dropdown menu. + * @return {?} + */ + open() { + if (!this._open) { + this._open = true; + this._applyContainer(this.container); + this.openChange.emit(true); + this._setCloseHandlers(); + } + } + /** + * @private + * @return {?} + */ + _setCloseHandlers() { + /** @type {?} */ + const anchor = this._anchor; + ngbAutoClose(this._ngZone, this._document, this.autoClose, (/** + * @return {?} + */ + () => this.close()), this._closed$, this._menu ? [this._menuElement.nativeElement] : [], anchor ? [anchor.getNativeElement()] : [], '.dropdown-item,.dropdown-divider'); + } + /** + * Closes the dropdown menu. + * @return {?} + */ + close() { + if (this._open) { + this._open = false; + this._resetContainer(); + this._closed$.next(); + this.openChange.emit(false); + this._changeDetector.markForCheck(); + } + } + /** + * Toggles the dropdown menu. + * @return {?} + */ + toggle() { + if (this.isOpen()) { + this.close(); + } + else { + this.open(); + } + } + /** + * @return {?} + */ + ngOnDestroy() { + this._resetContainer(); + this._closed$.next(); + this._zoneSubscription.unsubscribe(); + } + /** + * @param {?} event + * @return {?} + */ + onKeyDown(event) { + // tslint:disable-next-line:deprecation + /** @type {?} */ + const key = event.which; + /** @type {?} */ + const itemElements = this._getMenuElements(); + /** @type {?} */ + let position = -1; + /** @type {?} */ + let isEventFromItems = false; + /** @type {?} */ + const isEventFromToggle = this._isEventFromToggle(event); + if (!isEventFromToggle && itemElements.length) { + itemElements.forEach((/** + * @param {?} itemElement + * @param {?} index + * @return {?} + */ + (itemElement, index) => { + if (itemElement.contains((/** @type {?} */ (event.target)))) { + isEventFromItems = true; + } + if (itemElement === this._document.activeElement) { + position = index; + } + })); + } + // closing on Enter / Space + if (key === Key.Space || key === Key.Enter) { + if (isEventFromItems && (this.autoClose === true || this.autoClose === 'inside')) { + this.close(); + } + return; + } + // opening / navigating + if (isEventFromToggle || isEventFromItems) { + this.open(); + if (itemElements.length) { + switch (key) { + case Key.ArrowDown: + position = Math.min(position + 1, itemElements.length - 1); + break; + case Key.ArrowUp: + if (this._isDropup() && position === -1) { + position = itemElements.length - 1; + break; + } + position = Math.max(position - 1, 0); + break; + case Key.Home: + position = 0; + break; + case Key.End: + position = itemElements.length - 1; + break; + } + itemElements[position].focus(); + } + event.preventDefault(); + } + } + /** + * @private + * @return {?} + */ + _isDropup() { return this._elementRef.nativeElement.classList.contains('dropup'); } + /** + * @private + * @param {?} event + * @return {?} + */ + _isEventFromToggle(event) { + return this._anchor.getNativeElement().contains((/** @type {?} */ (event.target))); + } + /** + * @private + * @return {?} + */ + _getMenuElements() { + /** @type {?} */ + const menu = this._menu; + if (menu == null) { + return []; + } + return menu.menuItems.filter((/** + * @param {?} item + * @return {?} + */ + item => !item.disabled)).map((/** + * @param {?} item + * @return {?} + */ + item => item.elementRef.nativeElement)); + } + /** + * @private + * @return {?} + */ + _positionMenu() { + /** @type {?} */ + const menu = this._menu; + if (this.isOpen() && menu) { + this._applyPlacementClasses(this.display === 'dynamic' ? + positionElements(this._anchor.anchorEl, this._bodyContainer || this._menuElement.nativeElement, this.placement, this.container === 'body') : + this._getFirstPlacement(this.placement)); + } + } + /** + * @private + * @param {?} placement + * @return {?} + */ + _getFirstPlacement(placement) { + return Array.isArray(placement) ? placement[0] : (/** @type {?} */ (placement.split(' ')[0])); + } + /** + * @private + * @return {?} + */ + _resetContainer() { + /** @type {?} */ + const renderer = this._renderer; + /** @type {?} */ + const menuElement = this._menuElement; + if (menuElement) { + /** @type {?} */ + const dropdownElement = this._elementRef.nativeElement; + /** @type {?} */ + const dropdownMenuElement = menuElement.nativeElement; + renderer.appendChild(dropdownElement, dropdownMenuElement); + renderer.removeStyle(dropdownMenuElement, 'position'); + renderer.removeStyle(dropdownMenuElement, 'transform'); + } + if (this._bodyContainer) { + renderer.removeChild(this._document.body, this._bodyContainer); + this._bodyContainer = null; + } + } + /** + * @private + * @param {?=} container + * @return {?} + */ + _applyContainer(container = null) { + this._resetContainer(); + if (container === 'body') { + /** @type {?} */ + const renderer = this._renderer; + /** @type {?} */ + const dropdownMenuElement = this._menuElement.nativeElement; + /** @type {?} */ + const bodyContainer = this._bodyContainer = this._bodyContainer || renderer.createElement('div'); + // Override some styles to have the positionning working + renderer.setStyle(bodyContainer, 'position', 'absolute'); + renderer.setStyle(dropdownMenuElement, 'position', 'static'); + renderer.setStyle(bodyContainer, 'z-index', '1050'); + renderer.appendChild(bodyContainer, dropdownMenuElement); + renderer.appendChild(this._document.body, bodyContainer); + } + } + /** + * @private + * @param {?=} placement + * @return {?} + */ + _applyPlacementClasses(placement) { + /** @type {?} */ + const menu = this._menu; + if (menu) { + if (!placement) { + placement = this._getFirstPlacement(this.placement); + } + /** @type {?} */ + const renderer = this._renderer; + /** @type {?} */ + const dropdownElement = this._elementRef.nativeElement; + // remove the current placement classes + renderer.removeClass(dropdownElement, 'dropup'); + renderer.removeClass(dropdownElement, 'dropdown'); + menu.placement = this.display === 'static' ? null : placement; + /* + * apply the new placement + * in case of top use up-arrow or down-arrow otherwise + */ + /** @type {?} */ + const dropdownClass = placement.search('^top') !== -1 ? 'dropup' : 'dropdown'; + renderer.addClass(dropdownElement, dropdownClass); + /** @type {?} */ + const bodyContainer = this._bodyContainer; + if (bodyContainer) { + renderer.removeClass(bodyContainer, 'dropup'); + renderer.removeClass(bodyContainer, 'dropdown'); + renderer.addClass(bodyContainer, dropdownClass); + } + } + } +} +NgbDropdown.decorators = [ + { type: Directive, args: [{ selector: '[ngbDropdown]', exportAs: 'ngbDropdown', host: { '[class.show]': 'isOpen()' } },] } +]; +/** @nocollapse */ +NgbDropdown.ctorParameters = () => [ + { type: ChangeDetectorRef }, + { type: NgbDropdownConfig }, + { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }, + { type: NgZone }, + { type: ElementRef }, + { type: Renderer2 }, + { type: NgbNavbar, decorators: [{ type: Optional }] } +]; +NgbDropdown.propDecorators = { + _menu: [{ type: ContentChild, args: [NgbDropdownMenu, { static: false },] }], + _menuElement: [{ type: ContentChild, args: [NgbDropdownMenu, { read: ElementRef, static: false },] }], + _anchor: [{ type: ContentChild, args: [NgbDropdownAnchor, { static: false },] }], + autoClose: [{ type: Input }], + _open: [{ type: Input, args: ['open',] }], + placement: [{ type: Input }], + container: [{ type: Input }], + display: [{ type: Input }], + openChange: [{ type: Output }] +}; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @type {?} */ +const NGB_DROPDOWN_DIRECTIVES = [NgbDropdown, NgbDropdownAnchor, NgbDropdownToggle, NgbDropdownMenu, NgbDropdownItem, NgbNavbar]; +class NgbDropdownModule { +} +NgbDropdownModule.decorators = [ + { type: NgModule, args: [{ declarations: NGB_DROPDOWN_DIRECTIVES, exports: NGB_DROPDOWN_DIRECTIVES },] } +]; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * A configuration service for the [`NgbModal`](#/components/modal/api#NgbModal) service. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all modals used in the application. + * + * \@since 3.1.0 + */ +class NgbModalConfig { + constructor() { + this.backdrop = true; + this.keyboard = true; + } +} +NgbModalConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } +]; +/** @nocollapse */ NgbModalConfig.ngInjectableDef = ɵɵdefineInjectable({ factory: function NgbModalConfig_Factory() { return new NgbModalConfig(); }, token: NgbModalConfig, providedIn: "root" }); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +class ContentRef { + /** + * @param {?} nodes + * @param {?=} viewRef + * @param {?=} componentRef + */ + constructor(nodes, viewRef, componentRef) { + this.nodes = nodes; + this.viewRef = viewRef; + this.componentRef = componentRef; + } +} +/** + * @template T + */ +class PopupService { + /** + * @param {?} _type + * @param {?} _injector + * @param {?} _viewContainerRef + * @param {?} _renderer + * @param {?} _componentFactoryResolver + * @param {?} _applicationRef + */ + constructor(_type, _injector, _viewContainerRef, _renderer, _componentFactoryResolver, _applicationRef) { + this._type = _type; + this._injector = _injector; + this._viewContainerRef = _viewContainerRef; + this._renderer = _renderer; + this._componentFactoryResolver = _componentFactoryResolver; + this._applicationRef = _applicationRef; + } + /** + * @param {?=} content + * @param {?=} context + * @return {?} + */ + open(content, context) { + if (!this._windowRef) { + this._contentRef = this._getContentRef(content, context); + this._windowRef = this._viewContainerRef.createComponent(this._componentFactoryResolver.resolveComponentFactory(this._type), 0, this._injector, this._contentRef.nodes); + } + return this._windowRef; + } + /** + * @return {?} + */ + close() { + if (this._windowRef) { + this._viewContainerRef.remove(this._viewContainerRef.indexOf(this._windowRef.hostView)); + this._windowRef = null; + if (this._contentRef.viewRef) { + this._applicationRef.detachView(this._contentRef.viewRef); + this._contentRef.viewRef.destroy(); + this._contentRef = null; + } + } + } + /** + * @private + * @param {?} content + * @param {?=} context + * @return {?} + */ + _getContentRef(content, context) { + if (!content) { + return new ContentRef([]); + } + else if (content instanceof TemplateRef) { + /** @type {?} */ + const viewRef = content.createEmbeddedView(context); + this._applicationRef.attachView(viewRef); + return new ContentRef([viewRef.rootNodes], viewRef); + } + else { + return new ContentRef([[this._renderer.createText(`${content}`)]]); + } + } +} + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @type {?} */ +const noop = (/** + * @return {?} + */ +() => { }); +/** + * Utility to handle the scrollbar. + * + * It allows to compensate the lack of a vertical scrollbar by adding an + * equivalent padding on the right of the body, and to remove this compensation. + */ +class ScrollBar { + /** + * @param {?} _document + */ + constructor(_document) { + this._document = _document; + } + /** + * Detects if a scrollbar is present and if yes, already compensates for its + * removal by adding an equivalent padding on the right of the body. + * + * @return {?} a callback used to revert the compensation (noop if there was none, + * otherwise a function removing the padding) + */ + compensate() { return !this._isPresent() ? noop : this._adjustBody(this._getWidth()); } + /** + * Adds a padding of the given width on the right of the body. + * + * @private + * @param {?} width + * @return {?} a callback used to revert the padding to its previous value + */ + _adjustBody(width) { + /** @type {?} */ + const body = this._document.body; + /** @type {?} */ + const userSetPadding = body.style.paddingRight; + /** @type {?} */ + const paddingAmount = parseFloat(window.getComputedStyle(body)['padding-right']); + body.style['padding-right'] = `${paddingAmount + width}px`; + return (/** + * @return {?} + */ + () => body.style['padding-right'] = userSetPadding); + } + /** + * Tells whether a scrollbar is currently present on the body. + * + * @private + * @return {?} true if scrollbar is present, false otherwise + */ + _isPresent() { + /** @type {?} */ + const rect = this._document.body.getBoundingClientRect(); + return rect.left + rect.right < window.innerWidth; + } + /** + * Calculates and returns the width of a scrollbar. + * + * @private + * @return {?} the width of a scrollbar on this page + */ + _getWidth() { + /** @type {?} */ + const measurer = this._document.createElement('div'); + measurer.className = 'modal-scrollbar-measure'; + /** @type {?} */ + const body = this._document.body; + body.appendChild(measurer); + /** @type {?} */ + const width = measurer.getBoundingClientRect().width - measurer.clientWidth; + body.removeChild(measurer); + return width; + } +} +ScrollBar.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } +]; +/** @nocollapse */ +ScrollBar.ctorParameters = () => [ + { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] } +]; +/** @nocollapse */ ScrollBar.ngInjectableDef = ɵɵdefineInjectable({ factory: function ScrollBar_Factory() { return new ScrollBar(ɵɵinject(DOCUMENT)); }, token: ScrollBar, providedIn: "root" }); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +class NgbModalBackdrop { +} +NgbModalBackdrop.decorators = [ + { type: Component, args: [{ + selector: 'ngb-modal-backdrop', + template: '', + host: { '[class]': '"modal-backdrop fade show" + (backdropClass ? " " + backdropClass : "")', 'style': 'z-index: 1050' } + }] } +]; +NgbModalBackdrop.propDecorators = { + backdropClass: [{ type: Input }] +}; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * A reference to the currently opened (active) modal. + * + * Instances of this class can be injected into your component passed as modal content. + * So you can `.close()` or `.dismiss()` the modal window from your component. + */ +class NgbActiveModal { + /** + * Closes the modal with an optional `result` value. + * + * The `NgbMobalRef.result` promise will be resolved with the provided value. + * @param {?=} result + * @return {?} + */ + close(result) { } + /** + * Dismisses the modal with an optional `reason` value. + * + * The `NgbModalRef.result` promise will be rejected with the provided value. + * @param {?=} reason + * @return {?} + */ + dismiss(reason) { } +} +/** + * A reference to the newly opened modal returned by the `NgbModal.open()` method. + */ +class NgbModalRef { + /** + * @param {?} _windowCmptRef + * @param {?} _contentRef + * @param {?=} _backdropCmptRef + * @param {?=} _beforeDismiss + */ + constructor(_windowCmptRef, _contentRef, _backdropCmptRef, _beforeDismiss) { + this._windowCmptRef = _windowCmptRef; + this._contentRef = _contentRef; + this._backdropCmptRef = _backdropCmptRef; + this._beforeDismiss = _beforeDismiss; + _windowCmptRef.instance.dismissEvent.subscribe((/** + * @param {?} reason + * @return {?} + */ + (reason) => { this.dismiss(reason); })); + this.result = new Promise((/** + * @param {?} resolve + * @param {?} reject + * @return {?} + */ + (resolve, reject) => { + this._resolve = resolve; + this._reject = reject; + })); + this.result.then(null, (/** + * @return {?} + */ + () => { })); + } + /** + * The instance of a component used for the modal content. + * + * When a `TemplateRef` is used as the content, will return `undefined`. + * @return {?} + */ + get componentInstance() { + if (this._contentRef.componentRef) { + return this._contentRef.componentRef.instance; + } + } + /** + * Closes the modal with an optional `result` value. + * + * The `NgbMobalRef.result` promise will be resolved with the provided value. + * @param {?=} result + * @return {?} + */ + close(result) { + if (this._windowCmptRef) { + this._resolve(result); + this._removeModalElements(); + } + } + /** + * @private + * @param {?=} reason + * @return {?} + */ + _dismiss(reason) { + this._reject(reason); + this._removeModalElements(); + } + /** + * Dismisses the modal with an optional `reason` value. + * + * The `NgbModalRef.result` promise will be rejected with the provided value. + * @param {?=} reason + * @return {?} + */ + dismiss(reason) { + if (this._windowCmptRef) { + if (!this._beforeDismiss) { + this._dismiss(reason); + } + else { + /** @type {?} */ + const dismiss = this._beforeDismiss(); + if (dismiss && dismiss.then) { + dismiss.then((/** + * @param {?} result + * @return {?} + */ + result => { + if (result !== false) { + this._dismiss(reason); + } + }), (/** + * @return {?} + */ + () => { })); + } + else if (dismiss !== false) { + this._dismiss(reason); + } + } + } + } + /** + * @private + * @return {?} + */ + _removeModalElements() { + /** @type {?} */ + const windowNativeEl = this._windowCmptRef.location.nativeElement; + windowNativeEl.parentNode.removeChild(windowNativeEl); + this._windowCmptRef.destroy(); + if (this._backdropCmptRef) { + /** @type {?} */ + const backdropNativeEl = this._backdropCmptRef.location.nativeElement; + backdropNativeEl.parentNode.removeChild(backdropNativeEl); + this._backdropCmptRef.destroy(); + } + if (this._contentRef && this._contentRef.viewRef) { + this._contentRef.viewRef.destroy(); + } + this._windowCmptRef = null; + this._backdropCmptRef = null; + this._contentRef = null; + } +} + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @enum {number} */ +const ModalDismissReasons = { + BACKDROP_CLICK: 0, + ESC: 1, +}; +ModalDismissReasons[ModalDismissReasons.BACKDROP_CLICK] = 'BACKDROP_CLICK'; +ModalDismissReasons[ModalDismissReasons.ESC] = 'ESC'; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +class NgbModalWindow { + /** + * @param {?} _document + * @param {?} _elRef + */ + constructor(_document, _elRef) { + this._document = _document; + this._elRef = _elRef; + this.backdrop = true; + this.keyboard = true; + this.dismissEvent = new EventEmitter(); + } + /** + * @param {?} $event + * @return {?} + */ + backdropClick($event) { + if (this.backdrop === true && this._elRef.nativeElement === $event.target) { + this.dismiss(ModalDismissReasons.BACKDROP_CLICK); + } + } + /** + * @param {?} $event + * @return {?} + */ + escKey($event) { + if (this.keyboard && !$event.defaultPrevented) { + this.dismiss(ModalDismissReasons.ESC); + } + } + /** + * @param {?} reason + * @return {?} + */ + dismiss(reason) { this.dismissEvent.emit(reason); } + /** + * @return {?} + */ + ngOnInit() { this._elWithFocus = this._document.activeElement; } + /** + * @return {?} + */ + ngAfterViewInit() { + if (!this._elRef.nativeElement.contains(document.activeElement)) { + /** @type {?} */ + const autoFocusable = (/** @type {?} */ (this._elRef.nativeElement.querySelector(`[ngbAutofocus]`))); + /** @type {?} */ + const firstFocusable = getFocusableBoundaryElements(this._elRef.nativeElement)[0]; + /** @type {?} */ + const elementToFocus = autoFocusable || firstFocusable || this._elRef.nativeElement; + elementToFocus.focus(); + } + } + /** + * @return {?} + */ + ngOnDestroy() { + /** @type {?} */ + const body = this._document.body; + /** @type {?} */ + const elWithFocus = this._elWithFocus; + /** @type {?} */ + let elementToFocus; + if (elWithFocus && elWithFocus['focus'] && body.contains(elWithFocus)) { + elementToFocus = elWithFocus; + } + else { + elementToFocus = body; + } + elementToFocus.focus(); + this._elWithFocus = null; + } +} +NgbModalWindow.decorators = [ + { type: Component, args: [{ + selector: 'ngb-modal-window', + host: { + '[class]': '"modal fade show d-block" + (windowClass ? " " + windowClass : "")', + 'role': 'dialog', + 'tabindex': '-1', + '(keyup.esc)': 'escKey($event)', + '(click)': 'backdropClick($event)', + '[attr.aria-modal]': 'true', + '[attr.aria-labelledby]': 'ariaLabelledBy', + }, + template: ` +
+ +
+ `, + encapsulation: ViewEncapsulation.None, + styles: ["ngb-modal-window .component-host-scrollable{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;overflow:hidden}"] + }] } +]; +/** @nocollapse */ +NgbModalWindow.ctorParameters = () => [ + { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }, + { type: ElementRef } +]; +NgbModalWindow.propDecorators = { + ariaLabelledBy: [{ type: Input }], + backdrop: [{ type: Input }], + centered: [{ type: Input }], + keyboard: [{ type: Input }], + scrollable: [{ type: Input }], + size: [{ type: Input }], + windowClass: [{ type: Input }], + dismissEvent: [{ type: Output, args: ['dismiss',] }] +}; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +class NgbModalStack { + /** + * @param {?} _applicationRef + * @param {?} _injector + * @param {?} _document + * @param {?} _scrollBar + * @param {?} _rendererFactory + */ + constructor(_applicationRef, _injector, _document, _scrollBar, _rendererFactory) { + this._applicationRef = _applicationRef; + this._injector = _injector; + this._document = _document; + this._scrollBar = _scrollBar; + this._rendererFactory = _rendererFactory; + this._activeWindowCmptHasChanged = new Subject(); + this._ariaHiddenValues = new Map(); + this._backdropAttributes = ['backdropClass']; + this._modalRefs = []; + this._windowAttributes = ['ariaLabelledBy', 'backdrop', 'centered', 'keyboard', 'scrollable', 'size', 'windowClass']; + this._windowCmpts = []; + // Trap focus on active WindowCmpt + this._activeWindowCmptHasChanged.subscribe((/** + * @return {?} + */ + () => { + if (this._windowCmpts.length) { + /** @type {?} */ + const activeWindowCmpt = this._windowCmpts[this._windowCmpts.length - 1]; + ngbFocusTrap(activeWindowCmpt.location.nativeElement, this._activeWindowCmptHasChanged); + this._revertAriaHidden(); + this._setAriaHidden(activeWindowCmpt.location.nativeElement); + } + })); + } + /** + * @param {?} moduleCFR + * @param {?} contentInjector + * @param {?} content + * @param {?} options + * @return {?} + */ + open(moduleCFR, contentInjector, content, options) { + /** @type {?} */ + const containerEl = isDefined(options.container) ? this._document.querySelector(options.container) : this._document.body; + /** @type {?} */ + const renderer = this._rendererFactory.createRenderer(null, null); + /** @type {?} */ + const revertPaddingForScrollBar = this._scrollBar.compensate(); + /** @type {?} */ + const removeBodyClass = (/** + * @return {?} + */ + () => { + if (!this._modalRefs.length) { + renderer.removeClass(this._document.body, 'modal-open'); + this._revertAriaHidden(); + } + }); + if (!containerEl) { + throw new Error(`The specified modal container "${options.container || 'body'}" was not found in the DOM.`); + } + /** @type {?} */ + const activeModal = new NgbActiveModal(); + /** @type {?} */ + const contentRef = this._getContentRef(moduleCFR, options.injector || contentInjector, content, activeModal, options); + /** @type {?} */ + let backdropCmptRef = options.backdrop !== false ? this._attachBackdrop(moduleCFR, containerEl) : null; + /** @type {?} */ + let windowCmptRef = this._attachWindowComponent(moduleCFR, containerEl, contentRef); + /** @type {?} */ + let ngbModalRef = new NgbModalRef(windowCmptRef, contentRef, backdropCmptRef, options.beforeDismiss); + this._registerModalRef(ngbModalRef); + this._registerWindowCmpt(windowCmptRef); + ngbModalRef.result.then(revertPaddingForScrollBar, revertPaddingForScrollBar); + ngbModalRef.result.then(removeBodyClass, removeBodyClass); + activeModal.close = (/** + * @param {?} result + * @return {?} + */ + (result) => { ngbModalRef.close(result); }); + activeModal.dismiss = (/** + * @param {?} reason + * @return {?} + */ + (reason) => { ngbModalRef.dismiss(reason); }); + this._applyWindowOptions(windowCmptRef.instance, options); + if (this._modalRefs.length === 1) { + renderer.addClass(this._document.body, 'modal-open'); + } + if (backdropCmptRef && backdropCmptRef.instance) { + this._applyBackdropOptions(backdropCmptRef.instance, options); + } + return ngbModalRef; + } + /** + * @param {?=} reason + * @return {?} + */ + dismissAll(reason) { this._modalRefs.forEach((/** + * @param {?} ngbModalRef + * @return {?} + */ + ngbModalRef => ngbModalRef.dismiss(reason))); } + /** + * @return {?} + */ + hasOpenModals() { return this._modalRefs.length > 0; } + /** + * @private + * @param {?} moduleCFR + * @param {?} containerEl + * @return {?} + */ + _attachBackdrop(moduleCFR, containerEl) { + /** @type {?} */ + let backdropFactory = moduleCFR.resolveComponentFactory(NgbModalBackdrop); + /** @type {?} */ + let backdropCmptRef = backdropFactory.create(this._injector); + this._applicationRef.attachView(backdropCmptRef.hostView); + containerEl.appendChild(backdropCmptRef.location.nativeElement); + return backdropCmptRef; + } + /** + * @private + * @param {?} moduleCFR + * @param {?} containerEl + * @param {?} contentRef + * @return {?} + */ + _attachWindowComponent(moduleCFR, containerEl, contentRef) { + /** @type {?} */ + let windowFactory = moduleCFR.resolveComponentFactory(NgbModalWindow); + /** @type {?} */ + let windowCmptRef = windowFactory.create(this._injector, contentRef.nodes); + this._applicationRef.attachView(windowCmptRef.hostView); + containerEl.appendChild(windowCmptRef.location.nativeElement); + return windowCmptRef; + } + /** + * @private + * @param {?} windowInstance + * @param {?} options + * @return {?} + */ + _applyWindowOptions(windowInstance, options) { + this._windowAttributes.forEach((/** + * @param {?} optionName + * @return {?} + */ + (optionName) => { + if (isDefined(options[optionName])) { + windowInstance[optionName] = options[optionName]; + } + })); + } + /** + * @private + * @param {?} backdropInstance + * @param {?} options + * @return {?} + */ + _applyBackdropOptions(backdropInstance, options) { + this._backdropAttributes.forEach((/** + * @param {?} optionName + * @return {?} + */ + (optionName) => { + if (isDefined(options[optionName])) { + backdropInstance[optionName] = options[optionName]; + } + })); + } + /** + * @private + * @param {?} moduleCFR + * @param {?} contentInjector + * @param {?} content + * @param {?} activeModal + * @param {?} options + * @return {?} + */ + _getContentRef(moduleCFR, contentInjector, content, activeModal, options) { + if (!content) { + return new ContentRef([]); + } + else if (content instanceof TemplateRef) { + return this._createFromTemplateRef(content, activeModal); + } + else if (isString(content)) { + return this._createFromString(content); + } + else { + return this._createFromComponent(moduleCFR, contentInjector, content, activeModal, options); + } + } + /** + * @private + * @param {?} content + * @param {?} activeModal + * @return {?} + */ + _createFromTemplateRef(content, activeModal) { + /** @type {?} */ + const context = { + $implicit: activeModal, + /** + * @param {?} result + * @return {?} + */ + close(result) { activeModal.close(result); }, + /** + * @param {?} reason + * @return {?} + */ + dismiss(reason) { activeModal.dismiss(reason); } + }; + /** @type {?} */ + const viewRef = content.createEmbeddedView(context); + this._applicationRef.attachView(viewRef); + return new ContentRef([viewRef.rootNodes], viewRef); + } + /** + * @private + * @param {?} content + * @return {?} + */ + _createFromString(content) { + /** @type {?} */ + const component = this._document.createTextNode(`${content}`); + return new ContentRef([[component]]); + } + /** + * @private + * @param {?} moduleCFR + * @param {?} contentInjector + * @param {?} content + * @param {?} context + * @param {?} options + * @return {?} + */ + _createFromComponent(moduleCFR, contentInjector, content, context, options) { + /** @type {?} */ + const contentCmptFactory = moduleCFR.resolveComponentFactory(content); + /** @type {?} */ + const modalContentInjector = Injector.create({ providers: [{ provide: NgbActiveModal, useValue: context }], parent: contentInjector }); + /** @type {?} */ + const componentRef = contentCmptFactory.create(modalContentInjector); + /** @type {?} */ + const componentNativeEl = componentRef.location.nativeElement; + if (options.scrollable) { + ((/** @type {?} */ (componentNativeEl))).classList.add('component-host-scrollable'); + } + this._applicationRef.attachView(componentRef.hostView); + // FIXME: we should here get rid of the component nativeElement + // and use `[Array.from(componentNativeEl.childNodes)]` instead and remove the above CSS class. + return new ContentRef([[componentNativeEl]], componentRef.hostView, componentRef); + } + /** + * @private + * @param {?} element + * @return {?} + */ + _setAriaHidden(element) { + /** @type {?} */ + const parent = element.parentElement; + if (parent && element !== this._document.body) { + Array.from(parent.children).forEach((/** + * @param {?} sibling + * @return {?} + */ + sibling => { + if (sibling !== element && sibling.nodeName !== 'SCRIPT') { + this._ariaHiddenValues.set(sibling, sibling.getAttribute('aria-hidden')); + sibling.setAttribute('aria-hidden', 'true'); + } + })); + this._setAriaHidden(parent); + } + } + /** + * @private + * @return {?} + */ + _revertAriaHidden() { + this._ariaHiddenValues.forEach((/** + * @param {?} value + * @param {?} element + * @return {?} + */ + (value, element) => { + if (value) { + element.setAttribute('aria-hidden', value); + } + else { + element.removeAttribute('aria-hidden'); + } + })); + this._ariaHiddenValues.clear(); + } + /** + * @private + * @param {?} ngbModalRef + * @return {?} + */ + _registerModalRef(ngbModalRef) { + /** @type {?} */ + const unregisterModalRef = (/** + * @return {?} + */ + () => { + /** @type {?} */ + const index = this._modalRefs.indexOf(ngbModalRef); + if (index > -1) { + this._modalRefs.splice(index, 1); + } + }); + this._modalRefs.push(ngbModalRef); + ngbModalRef.result.then(unregisterModalRef, unregisterModalRef); + } + /** + * @private + * @param {?} ngbWindowCmpt + * @return {?} + */ + _registerWindowCmpt(ngbWindowCmpt) { + this._windowCmpts.push(ngbWindowCmpt); + this._activeWindowCmptHasChanged.next(); + ngbWindowCmpt.onDestroy((/** + * @return {?} + */ + () => { + /** @type {?} */ + const index = this._windowCmpts.indexOf(ngbWindowCmpt); + if (index > -1) { + this._windowCmpts.splice(index, 1); + this._activeWindowCmptHasChanged.next(); + } + })); + } +} +NgbModalStack.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } +]; +/** @nocollapse */ +NgbModalStack.ctorParameters = () => [ + { type: ApplicationRef }, + { type: Injector }, + { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }, + { type: ScrollBar }, + { type: RendererFactory2 } +]; +/** @nocollapse */ NgbModalStack.ngInjectableDef = ɵɵdefineInjectable({ factory: function NgbModalStack_Factory() { return new NgbModalStack(ɵɵinject(ApplicationRef), ɵɵinject(INJECTOR), ɵɵinject(DOCUMENT), ɵɵinject(ScrollBar), ɵɵinject(RendererFactory2)); }, token: NgbModalStack, providedIn: "root" }); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * A service for opening modal windows. + * + * Creating a modal is straightforward: create a component or a template and pass it as an argument to + * the `.open()` method. + */ +class NgbModal { + /** + * @param {?} _moduleCFR + * @param {?} _injector + * @param {?} _modalStack + * @param {?} _config + */ + constructor(_moduleCFR, _injector, _modalStack, _config) { + this._moduleCFR = _moduleCFR; + this._injector = _injector; + this._modalStack = _modalStack; + this._config = _config; + } + /** + * Opens a new modal window with the specified content and supplied options. + * + * Content can be provided as a `TemplateRef` or a component type. If you pass a component type as content, + * then instances of those components can be injected with an instance of the `NgbActiveModal` class. You can then + * use `NgbActiveModal` methods to close / dismiss modals from "inside" of your component. + * + * Also see the [`NgbModalOptions`](#/components/modal/api#NgbModalOptions) for the list of supported options. + * @param {?} content + * @param {?=} options + * @return {?} + */ + open(content, options = {}) { + /** @type {?} */ + const combinedOptions = Object.assign({}, this._config, options); + return this._modalStack.open(this._moduleCFR, this._injector, content, combinedOptions); + } + /** + * Dismisses all currently displayed modal windows with the supplied reason. + * + * \@since 3.1.0 + * @param {?=} reason + * @return {?} + */ + dismissAll(reason) { this._modalStack.dismissAll(reason); } + /** + * Indicates if there are currently any open modal windows in the application. + * + * \@since 3.3.0 + * @return {?} + */ + hasOpenModals() { return this._modalStack.hasOpenModals(); } +} +NgbModal.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } +]; +/** @nocollapse */ +NgbModal.ctorParameters = () => [ + { type: ComponentFactoryResolver }, + { type: Injector }, + { type: NgbModalStack }, + { type: NgbModalConfig } +]; +/** @nocollapse */ NgbModal.ngInjectableDef = ɵɵdefineInjectable({ factory: function NgbModal_Factory() { return new NgbModal(ɵɵinject(ComponentFactoryResolver), ɵɵinject(INJECTOR), ɵɵinject(NgbModalStack), ɵɵinject(NgbModalConfig)); }, token: NgbModal, providedIn: "root" }); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +class NgbModalModule { +} +NgbModalModule.decorators = [ + { type: NgModule, args: [{ + declarations: [NgbModalBackdrop, NgbModalWindow], + entryComponents: [NgbModalBackdrop, NgbModalWindow], + providers: [NgbModal] + },] } +]; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * A configuration service for the [`NgbPagination`](#/components/pagination/api#NgbPagination) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the paginations used in the application. + */ +class NgbPaginationConfig { + constructor() { + this.disabled = false; + this.boundaryLinks = false; + this.directionLinks = true; + this.ellipses = true; + this.maxSize = 0; + this.pageSize = 10; + this.rotate = false; + } +} +NgbPaginationConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } +]; +/** @nocollapse */ NgbPaginationConfig.ngInjectableDef = ɵɵdefineInjectable({ factory: function NgbPaginationConfig_Factory() { return new NgbPaginationConfig(); }, token: NgbPaginationConfig, providedIn: "root" }); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * A directive to match the 'ellipsis' link template + * + * \@since 4.1.0 + */ +class NgbPaginationEllipsis { + /** + * @param {?} templateRef + */ + constructor(templateRef) { + this.templateRef = templateRef; + } +} +NgbPaginationEllipsis.decorators = [ + { type: Directive, args: [{ selector: 'ng-template[ngbPaginationEllipsis]' },] } +]; +/** @nocollapse */ +NgbPaginationEllipsis.ctorParameters = () => [ + { type: TemplateRef } +]; +/** + * A directive to match the 'first' link template + * + * \@since 4.1.0 + */ +class NgbPaginationFirst { + /** + * @param {?} templateRef + */ + constructor(templateRef) { + this.templateRef = templateRef; + } +} +NgbPaginationFirst.decorators = [ + { type: Directive, args: [{ selector: 'ng-template[ngbPaginationFirst]' },] } +]; +/** @nocollapse */ +NgbPaginationFirst.ctorParameters = () => [ + { type: TemplateRef } +]; +/** + * A directive to match the 'last' link template + * + * \@since 4.1.0 + */ +class NgbPaginationLast { + /** + * @param {?} templateRef + */ + constructor(templateRef) { + this.templateRef = templateRef; + } +} +NgbPaginationLast.decorators = [ + { type: Directive, args: [{ selector: 'ng-template[ngbPaginationLast]' },] } +]; +/** @nocollapse */ +NgbPaginationLast.ctorParameters = () => [ + { type: TemplateRef } +]; +/** + * A directive to match the 'next' link template + * + * \@since 4.1.0 + */ +class NgbPaginationNext { + /** + * @param {?} templateRef + */ + constructor(templateRef) { + this.templateRef = templateRef; + } +} +NgbPaginationNext.decorators = [ + { type: Directive, args: [{ selector: 'ng-template[ngbPaginationNext]' },] } +]; +/** @nocollapse */ +NgbPaginationNext.ctorParameters = () => [ + { type: TemplateRef } +]; +/** + * A directive to match the page 'number' link template + * + * \@since 4.1.0 + */ +class NgbPaginationNumber { + /** + * @param {?} templateRef + */ + constructor(templateRef) { + this.templateRef = templateRef; + } +} +NgbPaginationNumber.decorators = [ + { type: Directive, args: [{ selector: 'ng-template[ngbPaginationNumber]' },] } +]; +/** @nocollapse */ +NgbPaginationNumber.ctorParameters = () => [ + { type: TemplateRef } +]; +/** + * A directive to match the 'previous' link template + * + * \@since 4.1.0 + */ +class NgbPaginationPrevious { + /** + * @param {?} templateRef + */ + constructor(templateRef) { + this.templateRef = templateRef; + } +} +NgbPaginationPrevious.decorators = [ + { type: Directive, args: [{ selector: 'ng-template[ngbPaginationPrevious]' },] } +]; +/** @nocollapse */ +NgbPaginationPrevious.ctorParameters = () => [ + { type: TemplateRef } +]; +/** + * A component that displays page numbers and allows to customize them in several ways. + */ +class NgbPagination { + /** + * @param {?} config + */ + constructor(config) { + this.pageCount = 0; + this.pages = []; + /** + * The current page. + * + * Page numbers start with `1`. + */ + this.page = 1; + /** + * An event fired when the page is changed. Will fire only if collection size is set and all values are valid. + * + * Event payload is the number of the newly selected page. + * + * Page numbers start with `1`. + */ + this.pageChange = new EventEmitter(true); + this.disabled = config.disabled; + this.boundaryLinks = config.boundaryLinks; + this.directionLinks = config.directionLinks; + this.ellipses = config.ellipses; + this.maxSize = config.maxSize; + this.pageSize = config.pageSize; + this.rotate = config.rotate; + this.size = config.size; + } + /** + * @return {?} + */ + hasPrevious() { return this.page > 1; } + /** + * @return {?} + */ + hasNext() { return this.page < this.pageCount; } + /** + * @return {?} + */ + nextDisabled() { return !this.hasNext() || this.disabled; } + /** + * @return {?} + */ + previousDisabled() { return !this.hasPrevious() || this.disabled; } + /** + * @param {?} pageNumber + * @return {?} + */ + selectPage(pageNumber) { this._updatePages(pageNumber); } + /** + * @param {?} changes + * @return {?} + */ + ngOnChanges(changes) { this._updatePages(this.page); } + /** + * @param {?} pageNumber + * @return {?} + */ + isEllipsis(pageNumber) { return pageNumber === -1; } + /** + * Appends ellipses and first/last page number to the displayed pages + * @private + * @param {?} start + * @param {?} end + * @return {?} + */ + _applyEllipses(start, end) { + if (this.ellipses) { + if (start > 0) { + if (start > 1) { + this.pages.unshift(-1); + } + this.pages.unshift(1); + } + if (end < this.pageCount) { + if (end < (this.pageCount - 1)) { + this.pages.push(-1); + } + this.pages.push(this.pageCount); + } + } + } + /** + * Rotates page numbers based on maxSize items visible. + * Currently selected page stays in the middle: + * + * Ex. for selected page = 6: + * [5,*6*,7] for maxSize = 3 + * [4,5,*6*,7] for maxSize = 4 + * @private + * @return {?} + */ + _applyRotation() { + /** @type {?} */ + let start = 0; + /** @type {?} */ + let end = this.pageCount; + /** @type {?} */ + let leftOffset = Math.floor(this.maxSize / 2); + /** @type {?} */ + let rightOffset = this.maxSize % 2 === 0 ? leftOffset - 1 : leftOffset; + if (this.page <= leftOffset) { + // very beginning, no rotation -> [0..maxSize] + end = this.maxSize; + } + else if (this.pageCount - this.page < leftOffset) { + // very end, no rotation -> [len-maxSize..len] + start = this.pageCount - this.maxSize; + } + else { + // rotate + start = this.page - leftOffset - 1; + end = this.page + rightOffset; + } + return [start, end]; + } + /** + * Paginates page numbers based on maxSize items per page. + * @private + * @return {?} + */ + _applyPagination() { + /** @type {?} */ + let page = Math.ceil(this.page / this.maxSize) - 1; + /** @type {?} */ + let start = page * this.maxSize; + /** @type {?} */ + let end = start + this.maxSize; + return [start, end]; + } + /** + * @private + * @param {?} newPageNo + * @return {?} + */ + _setPageInRange(newPageNo) { + /** @type {?} */ + const prevPageNo = this.page; + this.page = getValueInRange(newPageNo, this.pageCount, 1); + if (this.page !== prevPageNo && isNumber(this.collectionSize)) { + this.pageChange.emit(this.page); + } + } + /** + * @private + * @param {?} newPage + * @return {?} + */ + _updatePages(newPage) { + this.pageCount = Math.ceil(this.collectionSize / this.pageSize); + if (!isNumber(this.pageCount)) { + this.pageCount = 0; + } + // fill-in model needed to render pages + this.pages.length = 0; + for (let i = 1; i <= this.pageCount; i++) { + this.pages.push(i); + } + // set page within 1..max range + this._setPageInRange(newPage); + // apply maxSize if necessary + if (this.maxSize > 0 && this.pageCount > this.maxSize) { + /** @type {?} */ + let start = 0; + /** @type {?} */ + let end = this.pageCount; + // either paginating or rotating page numbers + if (this.rotate) { + [start, end] = this._applyRotation(); + } + else { + [start, end] = this._applyPagination(); + } + this.pages = this.pages.slice(start, end); + // adding ellipses + this._applyEllipses(start, end); + } + } +} +NgbPagination.decorators = [ + { type: Component, args: [{ + selector: 'ngb-pagination', + changeDetection: ChangeDetectionStrategy.OnPush, + host: { 'role': 'navigation' }, + template: ` + + + + + ... + + {{ page }} + (current) + + + ` + }] } +]; +/** @nocollapse */ +NgbPagination.ctorParameters = () => [ + { type: NgbPaginationConfig } +]; +NgbPagination.propDecorators = { + tplEllipsis: [{ type: ContentChild, args: [NgbPaginationEllipsis, { static: false },] }], + tplFirst: [{ type: ContentChild, args: [NgbPaginationFirst, { static: false },] }], + tplLast: [{ type: ContentChild, args: [NgbPaginationLast, { static: false },] }], + tplNext: [{ type: ContentChild, args: [NgbPaginationNext, { static: false },] }], + tplNumber: [{ type: ContentChild, args: [NgbPaginationNumber, { static: false },] }], + tplPrevious: [{ type: ContentChild, args: [NgbPaginationPrevious, { static: false },] }], + disabled: [{ type: Input }], + boundaryLinks: [{ type: Input }], + directionLinks: [{ type: Input }], + ellipses: [{ type: Input }], + rotate: [{ type: Input }], + collectionSize: [{ type: Input }], + maxSize: [{ type: Input }], + page: [{ type: Input }], + pageSize: [{ type: Input }], + pageChange: [{ type: Output }], + size: [{ type: Input }] +}; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @type {?} */ +const DIRECTIVES = [ + NgbPagination, NgbPaginationEllipsis, NgbPaginationFirst, NgbPaginationLast, NgbPaginationNext, NgbPaginationNumber, + NgbPaginationPrevious +]; +class NgbPaginationModule { +} +NgbPaginationModule.decorators = [ + { type: NgModule, args: [{ declarations: DIRECTIVES, exports: DIRECTIVES, imports: [CommonModule] },] } +]; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +class Trigger { + /** + * @param {?} open + * @param {?=} close + */ + constructor(open, close) { + this.open = open; + this.close = close; + if (!close) { + this.close = open; + } + } + /** + * @return {?} + */ + isManual() { return this.open === 'manual' || this.close === 'manual'; } +} +/** @type {?} */ +const DEFAULT_ALIASES = { + 'hover': ['mouseenter', 'mouseleave'], + 'focus': ['focusin', 'focusout'], +}; +/** + * @param {?} triggers + * @param {?=} aliases + * @return {?} + */ +function parseTriggers(triggers, aliases = DEFAULT_ALIASES) { + /** @type {?} */ + const trimmedTriggers = (triggers || '').trim(); + if (trimmedTriggers.length === 0) { + return []; + } + /** @type {?} */ + const parsedTriggers = trimmedTriggers.split(/\s+/).map((/** + * @param {?} trigger + * @return {?} + */ + trigger => trigger.split(':'))).map((/** + * @param {?} triggerPair + * @return {?} + */ + (triggerPair) => { + /** @type {?} */ + let alias = aliases[triggerPair[0]] || triggerPair; + return new Trigger(alias[0], alias[1]); + })); + /** @type {?} */ + const manualTriggers = parsedTriggers.filter((/** + * @param {?} triggerPair + * @return {?} + */ + triggerPair => triggerPair.isManual())); + if (manualTriggers.length > 1) { + throw 'Triggers parse error: only one manual trigger is allowed'; + } + if (manualTriggers.length === 1 && parsedTriggers.length > 1) { + throw 'Triggers parse error: manual trigger can\'t be mixed with other triggers'; + } + return parsedTriggers; +} +/** + * @param {?} renderer + * @param {?} nativeElement + * @param {?} triggers + * @param {?} isOpenedFn + * @return {?} + */ +function observeTriggers(renderer, nativeElement, triggers, isOpenedFn) { + return new Observable((/** + * @param {?} subscriber + * @return {?} + */ + subscriber => { + /** @type {?} */ + const listeners = []; + /** @type {?} */ + const openFn = (/** + * @return {?} + */ + () => subscriber.next(true)); + /** @type {?} */ + const closeFn = (/** + * @return {?} + */ + () => subscriber.next(false)); + /** @type {?} */ + const toggleFn = (/** + * @return {?} + */ + () => subscriber.next(!isOpenedFn())); + triggers.forEach((/** + * @param {?} trigger + * @return {?} + */ + (trigger) => { + if (trigger.open === trigger.close) { + listeners.push(renderer.listen(nativeElement, trigger.open, toggleFn)); + } + else { + listeners.push(renderer.listen(nativeElement, trigger.open, openFn), renderer.listen(nativeElement, trigger.close, closeFn)); + } + })); + return (/** + * @return {?} + */ + () => { listeners.forEach((/** + * @param {?} unsubscribeFn + * @return {?} + */ + unsubscribeFn => unsubscribeFn())); }); + })); +} +/** @type {?} */ +const delayOrNoop = (/** + * @template T + * @param {?} time + * @return {?} + */ +(time) => time > 0 ? delay(time) : (/** + * @param {?} a + * @return {?} + */ +(a) => a)); +/** + * @param {?} openDelay + * @param {?} closeDelay + * @param {?} isOpenedFn + * @return {?} + */ +function triggerDelay(openDelay, closeDelay, isOpenedFn) { + return (/** + * @param {?} input$ + * @return {?} + */ + (input$) => { + /** @type {?} */ + let pending = null; + /** @type {?} */ + const filteredInput$ = input$.pipe(map((/** + * @param {?} open + * @return {?} + */ + open => ({ open }))), filter((/** + * @param {?} event + * @return {?} + */ + event => { + /** @type {?} */ + const currentlyOpen = isOpenedFn(); + if (currentlyOpen !== event.open && (!pending || pending.open === currentlyOpen)) { + pending = event; + return true; + } + if (pending && pending.open !== event.open) { + pending = null; + } + return false; + })), share()); + /** @type {?} */ + const delayedOpen$ = filteredInput$.pipe(filter((/** + * @param {?} event + * @return {?} + */ + event => event.open)), delayOrNoop(openDelay)); + /** @type {?} */ + const delayedClose$ = filteredInput$.pipe(filter((/** + * @param {?} event + * @return {?} + */ + event => !event.open)), delayOrNoop(closeDelay)); + return merge(delayedOpen$, delayedClose$) + .pipe(filter((/** + * @param {?} event + * @return {?} + */ + event => { + if (event === pending) { + pending = null; + return event.open !== isOpenedFn(); + } + return false; + })), map((/** + * @param {?} event + * @return {?} + */ + event => event.open))); + }); +} +/** + * @param {?} renderer + * @param {?} nativeElement + * @param {?} triggers + * @param {?} isOpenedFn + * @param {?} openFn + * @param {?} closeFn + * @param {?=} openDelay + * @param {?=} closeDelay + * @return {?} + */ +function listenToTriggers(renderer, nativeElement, triggers, isOpenedFn, openFn, closeFn, openDelay = 0, closeDelay = 0) { + /** @type {?} */ + const parsedTriggers = parseTriggers(triggers); + if (parsedTriggers.length === 1 && parsedTriggers[0].isManual()) { + return (/** + * @return {?} + */ + () => { }); + } + /** @type {?} */ + const subscription = observeTriggers(renderer, nativeElement, parsedTriggers, isOpenedFn) + .pipe(triggerDelay(openDelay, closeDelay, isOpenedFn)) + .subscribe((/** + * @param {?} open + * @return {?} + */ + open => (open ? openFn() : closeFn()))); + return (/** + * @return {?} + */ + () => subscription.unsubscribe()); +} + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * A configuration service for the [`NgbPopover`](#/components/popover/api#NgbPopover) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the popovers used in the application. + */ +class NgbPopoverConfig { + constructor() { + this.autoClose = true; + this.placement = 'auto'; + this.triggers = 'click'; + this.disablePopover = false; + this.openDelay = 0; + this.closeDelay = 0; + } +} +NgbPopoverConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } +]; +/** @nocollapse */ NgbPopoverConfig.ngInjectableDef = ɵɵdefineInjectable({ factory: function NgbPopoverConfig_Factory() { return new NgbPopoverConfig(); }, token: NgbPopoverConfig, providedIn: "root" }); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @type {?} */ +let nextId$3 = 0; +class NgbPopoverWindow { + /** + * @return {?} + */ + isTitleTemplate() { return this.title instanceof TemplateRef; } +} +NgbPopoverWindow.decorators = [ + { type: Component, args: [{ + selector: 'ngb-popover-window', + changeDetection: ChangeDetectionStrategy.OnPush, + encapsulation: ViewEncapsulation.None, + host: { '[class]': '"popover" + (popoverClass ? " " + popoverClass : "")', 'role': 'tooltip', '[id]': 'id' }, + template: ` +
+

+ {{title}} + +

+
`, + styles: ["ngb-popover-window.bs-popover-bottom>.arrow,ngb-popover-window.bs-popover-top>.arrow{left:50%;margin-left:-.5rem}ngb-popover-window.bs-popover-bottom-left>.arrow,ngb-popover-window.bs-popover-top-left>.arrow{left:2em}ngb-popover-window.bs-popover-bottom-right>.arrow,ngb-popover-window.bs-popover-top-right>.arrow{left:auto;right:2em}ngb-popover-window.bs-popover-left>.arrow,ngb-popover-window.bs-popover-right>.arrow{top:50%;margin-top:-.5rem}ngb-popover-window.bs-popover-left-top>.arrow,ngb-popover-window.bs-popover-right-top>.arrow{top:.7em}ngb-popover-window.bs-popover-left-bottom>.arrow,ngb-popover-window.bs-popover-right-bottom>.arrow{top:auto;bottom:.7em}"] + }] } +]; +NgbPopoverWindow.propDecorators = { + title: [{ type: Input }], + id: [{ type: Input }], + popoverClass: [{ type: Input }], + context: [{ type: Input }] +}; +/** + * A lightweight and extensible directive for fancy popover creation. + */ +class NgbPopover { + /** + * @param {?} _elementRef + * @param {?} _renderer + * @param {?} injector + * @param {?} componentFactoryResolver + * @param {?} viewContainerRef + * @param {?} config + * @param {?} _ngZone + * @param {?} _document + * @param {?} _changeDetector + * @param {?} _applicationRef + */ + constructor(_elementRef, _renderer, injector, componentFactoryResolver, viewContainerRef, config, _ngZone, _document, _changeDetector, _applicationRef) { + this._elementRef = _elementRef; + this._renderer = _renderer; + this._ngZone = _ngZone; + this._document = _document; + this._changeDetector = _changeDetector; + this._applicationRef = _applicationRef; + /** + * An event emitted when the popover is shown. Contains no payload. + */ + this.shown = new EventEmitter(); + /** + * An event emitted when the popover is hidden. Contains no payload. + */ + this.hidden = new EventEmitter(); + this._ngbPopoverWindowId = `ngb-popover-${nextId$3++}`; + this.autoClose = config.autoClose; + this.placement = config.placement; + this.triggers = config.triggers; + this.container = config.container; + this.disablePopover = config.disablePopover; + this.popoverClass = config.popoverClass; + this.openDelay = config.openDelay; + this.closeDelay = config.closeDelay; + this._popupService = new PopupService(NgbPopoverWindow, injector, viewContainerRef, _renderer, componentFactoryResolver, _applicationRef); + this._zoneSubscription = _ngZone.onStable.subscribe((/** + * @return {?} + */ + () => { + if (this._windowRef) { + positionElements(this._elementRef.nativeElement, this._windowRef.location.nativeElement, this.placement, this.container === 'body', 'bs-popover'); + } + })); + } + /** + * @private + * @return {?} + */ + _isDisabled() { + if (this.disablePopover) { + return true; + } + if (!this.ngbPopover && !this.popoverTitle) { + return true; + } + return false; + } + /** + * Opens the popover. + * + * This is considered to be a "manual" triggering. + * The `context` is an optional value to be injected into the popover template when it is created. + * @param {?=} context + * @return {?} + */ + open(context) { + if (!this._windowRef && !this._isDisabled()) { + this._windowRef = this._popupService.open(this.ngbPopover, context); + this._windowRef.instance.title = this.popoverTitle; + this._windowRef.instance.context = context; + this._windowRef.instance.popoverClass = this.popoverClass; + this._windowRef.instance.id = this._ngbPopoverWindowId; + this._renderer.setAttribute(this._elementRef.nativeElement, 'aria-describedby', this._ngbPopoverWindowId); + if (this.container === 'body') { + this._document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement); + } + // We need to detect changes, because we don't know where .open() might be called from. + // Ex. opening popover from one of lifecycle hooks that run after the CD + // (say from ngAfterViewInit) will result in 'ExpressionHasChanged' exception + this._windowRef.changeDetectorRef.detectChanges(); + // We need to mark for check, because popover won't work inside the OnPush component. + // Ex. when we use expression like `{{ popover.isOpen() : 'opened' : 'closed' }}` + // inside the template of an OnPush component and we change the popover from + // open -> closed, the expression in question won't be updated unless we explicitly + // mark the parent component to be checked. + this._windowRef.changeDetectorRef.markForCheck(); + ngbAutoClose(this._ngZone, this._document, this.autoClose, (/** + * @return {?} + */ + () => this.close()), this.hidden, [this._windowRef.location.nativeElement]); + this.shown.emit(); + } + } + /** + * Closes the popover. + * + * This is considered to be a "manual" triggering of the popover. + * @return {?} + */ + close() { + if (this._windowRef) { + this._renderer.removeAttribute(this._elementRef.nativeElement, 'aria-describedby'); + this._popupService.close(); + this._windowRef = null; + this.hidden.emit(); + this._changeDetector.markForCheck(); + } + } + /** + * Toggles the popover. + * + * This is considered to be a "manual" triggering of the popover. + * @return {?} + */ + toggle() { + if (this._windowRef) { + this.close(); + } + else { + this.open(); + } + } + /** + * Returns `true`, if the popover is currently shown. + * @return {?} + */ + isOpen() { return this._windowRef != null; } + /** + * @return {?} + */ + ngOnInit() { + this._unregisterListenersFn = listenToTriggers(this._renderer, this._elementRef.nativeElement, this.triggers, this.isOpen.bind(this), this.open.bind(this), this.close.bind(this), +this.openDelay, +this.closeDelay); + } + /** + * @param {?} changes + * @return {?} + */ + ngOnChanges(changes) { + // close popover if title and content become empty, or disablePopover set to true + if ((changes['ngbPopover'] || changes['popoverTitle'] || changes['disablePopover']) && this._isDisabled()) { + this.close(); + } + } + /** + * @return {?} + */ + ngOnDestroy() { + this.close(); + // This check is needed as it might happen that ngOnDestroy is called before ngOnInit + // under certain conditions, see: https://github.com/ng-bootstrap/ng-bootstrap/issues/2199 + if (this._unregisterListenersFn) { + this._unregisterListenersFn(); + } + this._zoneSubscription.unsubscribe(); + } +} +NgbPopover.decorators = [ + { type: Directive, args: [{ selector: '[ngbPopover]', exportAs: 'ngbPopover' },] } +]; +/** @nocollapse */ +NgbPopover.ctorParameters = () => [ + { type: ElementRef }, + { type: Renderer2 }, + { type: Injector }, + { type: ComponentFactoryResolver }, + { type: ViewContainerRef }, + { type: NgbPopoverConfig }, + { type: NgZone }, + { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }, + { type: ChangeDetectorRef }, + { type: ApplicationRef } +]; +NgbPopover.propDecorators = { + autoClose: [{ type: Input }], + ngbPopover: [{ type: Input }], + popoverTitle: [{ type: Input }], + placement: [{ type: Input }], + triggers: [{ type: Input }], + container: [{ type: Input }], + disablePopover: [{ type: Input }], + popoverClass: [{ type: Input }], + openDelay: [{ type: Input }], + closeDelay: [{ type: Input }], + shown: [{ type: Output }], + hidden: [{ type: Output }] +}; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +class NgbPopoverModule { +} +NgbPopoverModule.decorators = [ + { type: NgModule, args: [{ + declarations: [NgbPopover, NgbPopoverWindow], + exports: [NgbPopover], + imports: [CommonModule], + entryComponents: [NgbPopoverWindow] + },] } +]; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * A configuration service for the [`NgbProgressbar`](#/components/progressbar/api#NgbProgressbar) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the progress bars used in the application. + */ +class NgbProgressbarConfig { + constructor() { + this.max = 100; + this.animated = false; + this.striped = false; + this.showValue = false; + } +} +NgbProgressbarConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } +]; +/** @nocollapse */ NgbProgressbarConfig.ngInjectableDef = ɵɵdefineInjectable({ factory: function NgbProgressbarConfig_Factory() { return new NgbProgressbarConfig(); }, token: NgbProgressbarConfig, providedIn: "root" }); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * A directive that provides feedback on the progress of a workflow or an action. + */ +class NgbProgressbar { + /** + * @param {?} config + */ + constructor(config) { + /** + * The current value for the progress bar. + * + * Should be in the `[0, max]` range. + */ + this.value = 0; + this.max = config.max; + this.animated = config.animated; + this.striped = config.striped; + this.type = config.type; + this.showValue = config.showValue; + this.height = config.height; + } + /** + * @return {?} + */ + getValue() { return getValueInRange(this.value, this.max); } + /** + * @return {?} + */ + getPercentValue() { return 100 * this.getValue() / this.max; } +} +NgbProgressbar.decorators = [ + { type: Component, args: [{ + selector: 'ngb-progressbar', + changeDetection: ChangeDetectionStrategy.OnPush, + template: ` +
+
+ {{getPercentValue()}}% +
+
+ ` + }] } +]; +/** @nocollapse */ +NgbProgressbar.ctorParameters = () => [ + { type: NgbProgressbarConfig } +]; +NgbProgressbar.propDecorators = { + max: [{ type: Input }], + animated: [{ type: Input }], + striped: [{ type: Input }], + showValue: [{ type: Input }], + type: [{ type: Input }], + value: [{ type: Input }], + height: [{ type: Input }] +}; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +class NgbProgressbarModule { +} +NgbProgressbarModule.decorators = [ + { type: NgModule, args: [{ declarations: [NgbProgressbar], exports: [NgbProgressbar], imports: [CommonModule] },] } +]; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * A configuration service for the [`NgbRating`](#/components/rating/api#NgbRating) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the ratings used in the application. + */ +class NgbRatingConfig { + constructor() { + this.max = 10; + this.readonly = false; + this.resettable = false; + } +} +NgbRatingConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } +]; +/** @nocollapse */ NgbRatingConfig.ngInjectableDef = ɵɵdefineInjectable({ factory: function NgbRatingConfig_Factory() { return new NgbRatingConfig(); }, token: NgbRatingConfig, providedIn: "root" }); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @type {?} */ +const NGB_RATING_VALUE_ACCESSOR = { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef((/** + * @return {?} + */ + () => NgbRating)), + multi: true +}; +/** + * A directive that helps visualising and interacting with a star rating bar. + */ +class NgbRating { + /** + * @param {?} config + * @param {?} _changeDetectorRef + */ + constructor(config, _changeDetectorRef) { + this._changeDetectorRef = _changeDetectorRef; + this.contexts = []; + this.disabled = false; + /** + * An event emitted when the user is hovering over a given rating. + * + * Event payload equals to the rating being hovered over. + */ + this.hover = new EventEmitter(); + /** + * An event emitted when the user stops hovering over a given rating. + * + * Event payload equals to the rating of the last item being hovered over. + */ + this.leave = new EventEmitter(); + /** + * An event emitted when the user selects a new rating. + * + * Event payload equals to the newly selected rating. + */ + this.rateChange = new EventEmitter(true); + this.onChange = (/** + * @param {?} _ + * @return {?} + */ + (_) => { }); + this.onTouched = (/** + * @return {?} + */ + () => { }); + this.max = config.max; + this.readonly = config.readonly; + } + /** + * @return {?} + */ + ariaValueText() { return `${this.nextRate} out of ${this.max}`; } + /** + * @param {?} value + * @return {?} + */ + enter(value) { + if (!this.readonly && !this.disabled) { + this._updateState(value); + } + this.hover.emit(value); + } + /** + * @return {?} + */ + handleBlur() { this.onTouched(); } + /** + * @param {?} value + * @return {?} + */ + handleClick(value) { this.update(this.resettable && this.rate === value ? 0 : value); } + /** + * @param {?} event + * @return {?} + */ + handleKeyDown(event) { + // tslint:disable-next-line:deprecation + switch (event.which) { + case Key.ArrowDown: + case Key.ArrowLeft: + this.update(this.rate - 1); + break; + case Key.ArrowUp: + case Key.ArrowRight: + this.update(this.rate + 1); + break; + case Key.Home: + this.update(0); + break; + case Key.End: + this.update(this.max); + break; + default: + return; + } + // note 'return' in default case + event.preventDefault(); + } + /** + * @param {?} changes + * @return {?} + */ + ngOnChanges(changes) { + if (changes['rate']) { + this.update(this.rate); + } + } + /** + * @return {?} + */ + ngOnInit() { + this.contexts = Array.from({ length: this.max }, (/** + * @param {?} v + * @param {?} k + * @return {?} + */ + (v, k) => ({ fill: 0, index: k }))); + this._updateState(this.rate); + } + /** + * @param {?} fn + * @return {?} + */ + registerOnChange(fn) { this.onChange = fn; } + /** + * @param {?} fn + * @return {?} + */ + registerOnTouched(fn) { this.onTouched = fn; } + /** + * @return {?} + */ + reset() { + this.leave.emit(this.nextRate); + this._updateState(this.rate); + } + /** + * @param {?} isDisabled + * @return {?} + */ + setDisabledState(isDisabled) { this.disabled = isDisabled; } + /** + * @param {?} value + * @param {?=} internalChange + * @return {?} + */ + update(value, internalChange = true) { + /** @type {?} */ + const newRate = getValueInRange(value, this.max, 0); + if (!this.readonly && !this.disabled && this.rate !== newRate) { + this.rate = newRate; + this.rateChange.emit(this.rate); + } + if (internalChange) { + this.onChange(this.rate); + this.onTouched(); + } + this._updateState(this.rate); + } + /** + * @param {?} value + * @return {?} + */ + writeValue(value) { + this.update(value, false); + this._changeDetectorRef.markForCheck(); + } + /** + * @private + * @param {?} index + * @return {?} + */ + _getFillValue(index) { + /** @type {?} */ + const diff = this.nextRate - index; + if (diff >= 1) { + return 100; + } + if (diff < 1 && diff > 0) { + return parseInt((diff * 100).toFixed(2), 10); + } + return 0; + } + /** + * @private + * @param {?} nextValue + * @return {?} + */ + _updateState(nextValue) { + this.nextRate = nextValue; + this.contexts.forEach((/** + * @param {?} context + * @param {?} index + * @return {?} + */ + (context, index) => context.fill = this._getFillValue(index))); + } +} +NgbRating.decorators = [ + { type: Component, args: [{ + selector: 'ngb-rating', + changeDetection: ChangeDetectionStrategy.OnPush, + host: { + 'class': 'd-inline-flex', + 'tabindex': '0', + 'role': 'slider', + 'aria-valuemin': '0', + '[attr.aria-valuemax]': 'max', + '[attr.aria-valuenow]': 'nextRate', + '[attr.aria-valuetext]': 'ariaValueText()', + '[attr.aria-disabled]': 'readonly ? true : null', + '(blur)': 'handleBlur()', + '(keydown)': 'handleKeyDown($event)', + '(mouseleave)': 'reset()' + }, + template: ` + {{ fill === 100 ? '★' : '☆' }} + + ({{ index < nextRate ? '*' : ' ' }}) + + + + + + `, + providers: [NGB_RATING_VALUE_ACCESSOR] + }] } +]; +/** @nocollapse */ +NgbRating.ctorParameters = () => [ + { type: NgbRatingConfig }, + { type: ChangeDetectorRef } +]; +NgbRating.propDecorators = { + max: [{ type: Input }], + rate: [{ type: Input }], + readonly: [{ type: Input }], + resettable: [{ type: Input }], + starTemplate: [{ type: Input }], + starTemplateFromContent: [{ type: ContentChild, args: [TemplateRef, { static: false },] }], + hover: [{ type: Output }], + leave: [{ type: Output }], + rateChange: [{ type: Output }] +}; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +class NgbRatingModule { +} +NgbRatingModule.decorators = [ + { type: NgModule, args: [{ declarations: [NgbRating], exports: [NgbRating], imports: [CommonModule] },] } +]; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * A configuration service for the [`NgbTabset`](#/components/tabset/api#NgbTabset) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the tabsets used in the application. + */ +class NgbTabsetConfig { + constructor() { + this.justify = 'start'; + this.orientation = 'horizontal'; + this.type = 'tabs'; + } +} +NgbTabsetConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } +]; +/** @nocollapse */ NgbTabsetConfig.ngInjectableDef = ɵɵdefineInjectable({ factory: function NgbTabsetConfig_Factory() { return new NgbTabsetConfig(); }, token: NgbTabsetConfig, providedIn: "root" }); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @type {?} */ +let nextId$4 = 0; +/** + * A directive to wrap tab titles that need to contain HTML markup or other directives. + * + * Alternatively you could use the `NgbTab.title` input for string titles. + */ +class NgbTabTitle { + /** + * @param {?} templateRef + */ + constructor(templateRef) { + this.templateRef = templateRef; + } +} +NgbTabTitle.decorators = [ + { type: Directive, args: [{ selector: 'ng-template[ngbTabTitle]' },] } +]; +/** @nocollapse */ +NgbTabTitle.ctorParameters = () => [ + { type: TemplateRef } +]; +/** + * A directive to wrap content to be displayed in a tab. + */ +class NgbTabContent { + /** + * @param {?} templateRef + */ + constructor(templateRef) { + this.templateRef = templateRef; + } +} +NgbTabContent.decorators = [ + { type: Directive, args: [{ selector: 'ng-template[ngbTabContent]' },] } +]; +/** @nocollapse */ +NgbTabContent.ctorParameters = () => [ + { type: TemplateRef } +]; +/** + * A directive representing an individual tab. + */ +class NgbTab { + constructor() { + /** + * The tab identifier. + * + * Must be unique for the entire document for proper accessibility support. + */ + this.id = `ngb-tab-${nextId$4++}`; + /** + * If `true`, the current tab is disabled and can't be toggled. + */ + this.disabled = false; + } + /** + * @return {?} + */ + ngAfterContentChecked() { + // We are using @ContentChildren instead of @ContentChild as in the Angular version being used + // only @ContentChildren allows us to specify the {descendants: false} option. + // Without {descendants: false} we are hitting bugs described in: + // https://github.com/ng-bootstrap/ng-bootstrap/issues/2240 + this.titleTpl = this.titleTpls.first; + this.contentTpl = this.contentTpls.first; + } +} +NgbTab.decorators = [ + { type: Directive, args: [{ selector: 'ngb-tab' },] } +]; +NgbTab.propDecorators = { + id: [{ type: Input }], + title: [{ type: Input }], + disabled: [{ type: Input }], + titleTpls: [{ type: ContentChildren, args: [NgbTabTitle, { descendants: false },] }], + contentTpls: [{ type: ContentChildren, args: [NgbTabContent, { descendants: false },] }] +}; +/** + * A component that makes it easy to create tabbed interface. + */ +class NgbTabset { + /** + * @param {?} config + */ + constructor(config) { + /** + * If `true`, non-visible tabs content will be removed from DOM. Otherwise it will just be hidden. + */ + this.destroyOnHide = true; + /** + * A tab change event emitted right before the tab change happens. + * + * See [`NgbTabChangeEvent`](#/components/tabset/api#NgbTabChangeEvent) for payload details. + */ + this.tabChange = new EventEmitter(); + this.type = config.type; + this.justify = config.justify; + this.orientation = config.orientation; + } + /** + * The horizontal alignment of the tabs with flexbox utilities. + * @param {?} className + * @return {?} + */ + set justify(className) { + if (className === 'fill' || className === 'justified') { + this.justifyClass = `nav-${className}`; + } + else { + this.justifyClass = `justify-content-${className}`; + } + } + /** + * Selects the tab with the given id and shows its associated content panel. + * + * Any other tab that was previously selected becomes unselected and its associated pane is removed from DOM or + * hidden depending on the `destroyOnHide` value. + * @param {?} tabId + * @return {?} + */ + select(tabId) { + /** @type {?} */ + let selectedTab = this._getTabById(tabId); + if (selectedTab && !selectedTab.disabled && this.activeId !== selectedTab.id) { + /** @type {?} */ + let defaultPrevented = false; + this.tabChange.emit({ activeId: this.activeId, nextId: selectedTab.id, preventDefault: (/** + * @return {?} + */ + () => { defaultPrevented = true; }) }); + if (!defaultPrevented) { + this.activeId = selectedTab.id; + } + } + } + /** + * @return {?} + */ + ngAfterContentChecked() { + // auto-correct activeId that might have been set incorrectly as input + /** @type {?} */ + let activeTab = this._getTabById(this.activeId); + this.activeId = activeTab ? activeTab.id : (this.tabs.length ? this.tabs.first.id : null); + } + /** + * @private + * @param {?} id + * @return {?} + */ + _getTabById(id) { + /** @type {?} */ + let tabsWithId = this.tabs.filter((/** + * @param {?} tab + * @return {?} + */ + tab => tab.id === id)); + return tabsWithId.length ? tabsWithId[0] : null; + } +} +NgbTabset.decorators = [ + { type: Component, args: [{ + selector: 'ngb-tabset', + exportAs: 'ngbTabset', + template: ` + +
+ +
+ +
+
+
+ ` + }] } +]; +/** @nocollapse */ +NgbTabset.ctorParameters = () => [ + { type: NgbTabsetConfig } +]; +NgbTabset.propDecorators = { + tabs: [{ type: ContentChildren, args: [NgbTab,] }], + activeId: [{ type: Input }], + destroyOnHide: [{ type: Input }], + justify: [{ type: Input }], + orientation: [{ type: Input }], + type: [{ type: Input }], + tabChange: [{ type: Output }] +}; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @type {?} */ +const NGB_TABSET_DIRECTIVES = [NgbTabset, NgbTab, NgbTabContent, NgbTabTitle]; +class NgbTabsetModule { +} +NgbTabsetModule.decorators = [ + { type: NgModule, args: [{ declarations: NGB_TABSET_DIRECTIVES, exports: NGB_TABSET_DIRECTIVES, imports: [CommonModule] },] } +]; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +class NgbTime { + /** + * @param {?=} hour + * @param {?=} minute + * @param {?=} second + */ + constructor(hour, minute, second) { + this.hour = toInteger(hour); + this.minute = toInteger(minute); + this.second = toInteger(second); + } + /** + * @param {?=} step + * @return {?} + */ + changeHour(step = 1) { this.updateHour((isNaN(this.hour) ? 0 : this.hour) + step); } + /** + * @param {?} hour + * @return {?} + */ + updateHour(hour) { + if (isNumber(hour)) { + this.hour = (hour < 0 ? 24 + hour : hour) % 24; + } + else { + this.hour = NaN; + } + } + /** + * @param {?=} step + * @return {?} + */ + changeMinute(step = 1) { this.updateMinute((isNaN(this.minute) ? 0 : this.minute) + step); } + /** + * @param {?} minute + * @return {?} + */ + updateMinute(minute) { + if (isNumber(minute)) { + this.minute = minute % 60 < 0 ? 60 + minute % 60 : minute % 60; + this.changeHour(Math.floor(minute / 60)); + } + else { + this.minute = NaN; + } + } + /** + * @param {?=} step + * @return {?} + */ + changeSecond(step = 1) { this.updateSecond((isNaN(this.second) ? 0 : this.second) + step); } + /** + * @param {?} second + * @return {?} + */ + updateSecond(second) { + if (isNumber(second)) { + this.second = second < 0 ? 60 + second % 60 : second % 60; + this.changeMinute(Math.floor(second / 60)); + } + else { + this.second = NaN; + } + } + /** + * @param {?=} checkSecs + * @return {?} + */ + isValid(checkSecs = true) { + return isNumber(this.hour) && isNumber(this.minute) && (checkSecs ? isNumber(this.second) : true); + } + /** + * @return {?} + */ + toString() { return `${this.hour || 0}:${this.minute || 0}:${this.second || 0}`; } +} + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * A configuration service for the [`NgbTimepicker`](#/components/timepicker/api#NgbTimepicker) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the timepickers used in the application. + */ +class NgbTimepickerConfig { + constructor() { + this.meridian = false; + this.spinners = true; + this.seconds = false; + this.hourStep = 1; + this.minuteStep = 1; + this.secondStep = 1; + this.disabled = false; + this.readonlyInputs = false; + this.size = 'medium'; + } +} +NgbTimepickerConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } +]; +/** @nocollapse */ NgbTimepickerConfig.ngInjectableDef = ɵɵdefineInjectable({ factory: function NgbTimepickerConfig_Factory() { return new NgbTimepickerConfig(); }, token: NgbTimepickerConfig, providedIn: "root" }); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * @return {?} + */ +function NGB_DATEPICKER_TIME_ADAPTER_FACTORY() { + return new NgbTimeStructAdapter(); +} +/** + * An abstract service that does the conversion between the internal timepicker `NgbTimeStruct` model and + * any provided user time model `T`, ex. a string, a native date, etc. + * + * The adapter is used **only** for conversion when binding timepicker to a form control, + * ex. `[(ngModel)]="userTimeModel"`. Here `userTimeModel` can be of any type. + * + * The default timepicker implementation assumes we use `NgbTimeStruct` as a user model. + * + * See the [custom time adapter demo](#/components/timepicker/examples#adapter) for an example. + * + * \@since 2.2.0 + * @abstract + * @template T + */ +class NgbTimeAdapter { +} +NgbTimeAdapter.decorators = [ + { type: Injectable, args: [{ providedIn: 'root', useFactory: NGB_DATEPICKER_TIME_ADAPTER_FACTORY },] } +]; +/** @nocollapse */ NgbTimeAdapter.ngInjectableDef = ɵɵdefineInjectable({ factory: NGB_DATEPICKER_TIME_ADAPTER_FACTORY, token: NgbTimeAdapter, providedIn: "root" }); +class NgbTimeStructAdapter extends NgbTimeAdapter { + /** + * Converts a NgbTimeStruct value into NgbTimeStruct value + * @param {?} time + * @return {?} + */ + fromModel(time) { + return (time && isInteger(time.hour) && isInteger(time.minute)) ? + { hour: time.hour, minute: time.minute, second: isInteger(time.second) ? time.second : null } : + null; + } + /** + * Converts a NgbTimeStruct value into NgbTimeStruct value + * @param {?} time + * @return {?} + */ + toModel(time) { + return (time && isInteger(time.hour) && isInteger(time.minute)) ? + { hour: time.hour, minute: time.minute, second: isInteger(time.second) ? time.second : null } : + null; + } +} +NgbTimeStructAdapter.decorators = [ + { type: Injectable } +]; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * @param {?} locale + * @return {?} + */ +function NGB_TIMEPICKER_I18N_FACTORY(locale) { + return new NgbTimepickerI18nDefault(locale); +} +/** + * Type of the service supplying day periods (for example, 'AM' and 'PM') to NgbTimepicker component. + * The default implementation of this service honors the Angular locale, and uses the registered locale data, + * as explained in the Angular i18n guide. + * @abstract + */ +class NgbTimepickerI18n { +} +NgbTimepickerI18n.decorators = [ + { type: Injectable, args: [{ providedIn: 'root', useFactory: NGB_TIMEPICKER_I18N_FACTORY, deps: [LOCALE_ID] },] } +]; +/** @nocollapse */ NgbTimepickerI18n.ngInjectableDef = ɵɵdefineInjectable({ factory: function NgbTimepickerI18n_Factory() { return NGB_TIMEPICKER_I18N_FACTORY(ɵɵinject(LOCALE_ID)); }, token: NgbTimepickerI18n, providedIn: "root" }); +class NgbTimepickerI18nDefault extends NgbTimepickerI18n { + /** + * @param {?} locale + */ + constructor(locale) { + super(); + this._periods = getLocaleDayPeriods(locale, FormStyle.Standalone, TranslationWidth.Narrow); + } + /** + * @return {?} + */ + getMorningPeriod() { return this._periods[0]; } + /** + * @return {?} + */ + getAfternoonPeriod() { return this._periods[1]; } +} +NgbTimepickerI18nDefault.decorators = [ + { type: Injectable } +]; +/** @nocollapse */ +NgbTimepickerI18nDefault.ctorParameters = () => [ + { type: String, decorators: [{ type: Inject, args: [LOCALE_ID,] }] } +]; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @type {?} */ +const NGB_TIMEPICKER_VALUE_ACCESSOR = { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef((/** + * @return {?} + */ + () => NgbTimepicker)), + multi: true +}; +/** + * A directive that helps with wth picking hours, minutes and seconds. + */ +class NgbTimepicker { + /** + * @param {?} _config + * @param {?} _ngbTimeAdapter + * @param {?} _cd + * @param {?} i18n + */ + constructor(_config, _ngbTimeAdapter, _cd, i18n) { + this._config = _config; + this._ngbTimeAdapter = _ngbTimeAdapter; + this._cd = _cd; + this.i18n = i18n; + this.onChange = (/** + * @param {?} _ + * @return {?} + */ + (_) => { }); + this.onTouched = (/** + * @return {?} + */ + () => { }); + this.meridian = _config.meridian; + this.spinners = _config.spinners; + this.seconds = _config.seconds; + this.hourStep = _config.hourStep; + this.minuteStep = _config.minuteStep; + this.secondStep = _config.secondStep; + this.disabled = _config.disabled; + this.readonlyInputs = _config.readonlyInputs; + this.size = _config.size; + } + /** + * The number of hours to add/subtract when clicking hour spinners. + * @param {?} step + * @return {?} + */ + set hourStep(step) { + this._hourStep = isInteger(step) ? step : this._config.hourStep; + } + /** + * @return {?} + */ + get hourStep() { return this._hourStep; } + /** + * The number of minutes to add/subtract when clicking minute spinners. + * @param {?} step + * @return {?} + */ + set minuteStep(step) { + this._minuteStep = isInteger(step) ? step : this._config.minuteStep; + } + /** + * @return {?} + */ + get minuteStep() { return this._minuteStep; } + /** + * The number of seconds to add/subtract when clicking second spinners. + * @param {?} step + * @return {?} + */ + set secondStep(step) { + this._secondStep = isInteger(step) ? step : this._config.secondStep; + } + /** + * @return {?} + */ + get secondStep() { return this._secondStep; } + /** + * @param {?} value + * @return {?} + */ + writeValue(value) { + /** @type {?} */ + const structValue = this._ngbTimeAdapter.fromModel(value); + this.model = structValue ? new NgbTime(structValue.hour, structValue.minute, structValue.second) : new NgbTime(); + if (!this.seconds && (!structValue || !isNumber(structValue.second))) { + this.model.second = 0; + } + this._cd.markForCheck(); + } + /** + * @param {?} fn + * @return {?} + */ + registerOnChange(fn) { this.onChange = fn; } + /** + * @param {?} fn + * @return {?} + */ + registerOnTouched(fn) { this.onTouched = fn; } + /** + * @param {?} isDisabled + * @return {?} + */ + setDisabledState(isDisabled) { this.disabled = isDisabled; } + /** + * @param {?} step + * @return {?} + */ + changeHour(step) { + this.model.changeHour(step); + this.propagateModelChange(); + } + /** + * @param {?} step + * @return {?} + */ + changeMinute(step) { + this.model.changeMinute(step); + this.propagateModelChange(); + } + /** + * @param {?} step + * @return {?} + */ + changeSecond(step) { + this.model.changeSecond(step); + this.propagateModelChange(); + } + /** + * @param {?} newVal + * @return {?} + */ + updateHour(newVal) { + /** @type {?} */ + const isPM = this.model.hour >= 12; + /** @type {?} */ + const enteredHour = toInteger(newVal); + if (this.meridian && (isPM && enteredHour < 12 || !isPM && enteredHour === 12)) { + this.model.updateHour(enteredHour + 12); + } + else { + this.model.updateHour(enteredHour); + } + this.propagateModelChange(); + } + /** + * @param {?} newVal + * @return {?} + */ + updateMinute(newVal) { + this.model.updateMinute(toInteger(newVal)); + this.propagateModelChange(); + } + /** + * @param {?} newVal + * @return {?} + */ + updateSecond(newVal) { + this.model.updateSecond(toInteger(newVal)); + this.propagateModelChange(); + } + /** + * @return {?} + */ + toggleMeridian() { + if (this.meridian) { + this.changeHour(12); + } + } + /** + * @param {?} value + * @return {?} + */ + formatHour(value) { + if (isNumber(value)) { + if (this.meridian) { + return padNumber(value % 12 === 0 ? 12 : value % 12); + } + else { + return padNumber(value % 24); + } + } + else { + return padNumber(NaN); + } + } + /** + * @param {?} value + * @return {?} + */ + formatMinSec(value) { return padNumber(value); } + /** + * @return {?} + */ + get isSmallSize() { return this.size === 'small'; } + /** + * @return {?} + */ + get isLargeSize() { return this.size === 'large'; } + /** + * @param {?} changes + * @return {?} + */ + ngOnChanges(changes) { + if (changes['seconds'] && !this.seconds && this.model && !isNumber(this.model.second)) { + this.model.second = 0; + this.propagateModelChange(false); + } + } + /** + * @private + * @param {?=} touched + * @return {?} + */ + propagateModelChange(touched = true) { + if (touched) { + this.onTouched(); + } + if (this.model.isValid(this.seconds)) { + this.onChange(this._ngbTimeAdapter.toModel({ hour: this.model.hour, minute: this.model.minute, second: this.model.second })); + } + else { + this.onChange(this._ngbTimeAdapter.toModel(null)); + } + } +} +NgbTimepicker.decorators = [ + { type: Component, args: [{ + selector: 'ngb-timepicker', + encapsulation: ViewEncapsulation.None, + template: ` +
+
+
+ + + +
+
:
+
+ + + +
+
:
+
+ + + +
+
+
+ +
+
+
+ `, + providers: [NGB_TIMEPICKER_VALUE_ACCESSOR], + styles: ["ngb-timepicker{font-size:1rem}.ngb-tp{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.ngb-tp-input-container{width:4em}.ngb-tp-chevron::before{border-style:solid;border-width:.29em .29em 0 0;content:\"\";display:inline-block;height:.69em;left:.05em;position:relative;top:.15em;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);vertical-align:middle;width:.69em}.ngb-tp-chevron.bottom:before{top:-.3em;-webkit-transform:rotate(135deg);transform:rotate(135deg)}.ngb-tp-input{text-align:center}.ngb-tp-hour,.ngb-tp-meridian,.ngb-tp-minute,.ngb-tp-second{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-align:center;align-items:center;-ms-flex-pack:distribute;justify-content:space-around}.ngb-tp-spacer{width:1em;text-align:center}"] + }] } +]; +/** @nocollapse */ +NgbTimepicker.ctorParameters = () => [ + { type: NgbTimepickerConfig }, + { type: NgbTimeAdapter }, + { type: ChangeDetectorRef }, + { type: NgbTimepickerI18n } +]; +NgbTimepicker.propDecorators = { + meridian: [{ type: Input }], + spinners: [{ type: Input }], + seconds: [{ type: Input }], + hourStep: [{ type: Input }], + minuteStep: [{ type: Input }], + secondStep: [{ type: Input }], + readonlyInputs: [{ type: Input }], + size: [{ type: Input }] +}; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +class NgbTimepickerModule { +} +NgbTimepickerModule.decorators = [ + { type: NgModule, args: [{ declarations: [NgbTimepicker], exports: [NgbTimepicker], imports: [CommonModule] },] } +]; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * Configuration service for the NgbToast component. You can inject this service, typically in your root component, + * and customize the values of its properties in order to provide default values for all the toasts used in the + * application. + * + * \@since 5.0.0 + */ +class NgbToastConfig { + constructor() { + this.autohide = true; + this.delay = 500; + this.ariaLive = 'polite'; + } +} +NgbToastConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } +]; +/** @nocollapse */ NgbToastConfig.ngInjectableDef = ɵɵdefineInjectable({ factory: function NgbToastConfig_Factory() { return new NgbToastConfig(); }, token: NgbToastConfig, providedIn: "root" }); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * This directive allows the usage of HTML markup or other directives + * inside of the toast's header. + * + * \@since 5.0.0 + */ +class NgbToastHeader { +} +NgbToastHeader.decorators = [ + { type: Directive, args: [{ selector: '[ngbToastHeader]' },] } +]; +/** + * Toasts provide feedback messages as notifications to the user. + * Goal is to mimic the push notifications available both on mobile and desktop operating systems. + * + * \@since 5.0.0 + */ +class NgbToast { + /** + * @param {?} ariaLive + * @param {?} config + */ + constructor(ariaLive, config) { + this.ariaLive = ariaLive; + /** + * A template like `` can be + * used in the projected content to allow markup usage. + */ + this.contentHeaderTpl = null; + /** + * An event fired immediately when toast's `hide()` method has been called. + * It can only occur in 2 different scenarios: + * - `autohide` timeout fires + * - user clicks on a closing cross (×) + * + * Additionally this output is purely informative. The toast won't disappear. It's up to the user to take care of + * that. + */ + this.hideOutput = new EventEmitter(); + if (this.ariaLive == null) { + this.ariaLive = config.ariaLive; + } + this.delay = config.delay; + this.autohide = config.autohide; + } + /** + * @return {?} + */ + ngAfterContentInit() { this._init(); } + /** + * @param {?} changes + * @return {?} + */ + ngOnChanges(changes) { + if ('autohide' in changes) { + this._clearTimeout(); + this._init(); + } + } + /** + * @return {?} + */ + hide() { + this._clearTimeout(); + this.hideOutput.emit(); + } + /** + * @private + * @return {?} + */ + _init() { + if (this.autohide && !this._timeoutID) { + this._timeoutID = setTimeout((/** + * @return {?} + */ + () => this.hide()), this.delay); + } + } + /** + * @private + * @return {?} + */ + _clearTimeout() { + if (this._timeoutID) { + clearTimeout(this._timeoutID); + this._timeoutID = null; + } + } +} +NgbToast.decorators = [ + { type: Component, args: [{ + selector: 'ngb-toast', + exportAs: 'ngbToast', + encapsulation: ViewEncapsulation.None, + host: { + 'role': 'alert', + '[attr.aria-live]': 'ariaLive', + 'aria-atomic': 'true', + '[class.toast]': 'true', + '[class.show]': 'true', + '[class.autohide]': 'autohide', + }, + template: ` + + {{header}} + + +
+ + +
+
+
+ +
+ `, + styles: [".ngb-toasts{position:fixed;top:0;right:0;margin:.5em;z-index:1200}ngb-toast .toast-header .close{margin-left:auto;margin-bottom:.25rem}"] + }] } +]; +/** @nocollapse */ +NgbToast.ctorParameters = () => [ + { type: String, decorators: [{ type: Attribute, args: ['aria-live',] }] }, + { type: NgbToastConfig } +]; +NgbToast.propDecorators = { + delay: [{ type: Input }], + autohide: [{ type: Input }], + header: [{ type: Input }], + contentHeaderTpl: [{ type: ContentChild, args: [NgbToastHeader, { read: TemplateRef, static: true },] }], + hideOutput: [{ type: Output, args: ['hide',] }] +}; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +class NgbToastModule { +} +NgbToastModule.decorators = [ + { type: NgModule, args: [{ declarations: [NgbToast, NgbToastHeader], imports: [CommonModule], exports: [NgbToast, NgbToastHeader] },] } +]; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * A configuration service for the [`NgbTooltip`](#/components/tooltip/api#NgbTooltip) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the tooltips used in the application. + */ +class NgbTooltipConfig { + constructor() { + this.autoClose = true; + this.placement = 'auto'; + this.triggers = 'hover focus'; + this.disableTooltip = false; + this.openDelay = 0; + this.closeDelay = 0; + } +} +NgbTooltipConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } +]; +/** @nocollapse */ NgbTooltipConfig.ngInjectableDef = ɵɵdefineInjectable({ factory: function NgbTooltipConfig_Factory() { return new NgbTooltipConfig(); }, token: NgbTooltipConfig, providedIn: "root" }); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @type {?} */ +let nextId$5 = 0; +class NgbTooltipWindow { +} +NgbTooltipWindow.decorators = [ + { type: Component, args: [{ + selector: 'ngb-tooltip-window', + changeDetection: ChangeDetectionStrategy.OnPush, + encapsulation: ViewEncapsulation.None, + host: { '[class]': '"tooltip show" + (tooltipClass ? " " + tooltipClass : "")', 'role': 'tooltip', '[id]': 'id' }, + template: `
`, + styles: ["ngb-tooltip-window.bs-tooltip-bottom .arrow,ngb-tooltip-window.bs-tooltip-top .arrow{left:calc(50% - .4rem)}ngb-tooltip-window.bs-tooltip-bottom-left .arrow,ngb-tooltip-window.bs-tooltip-top-left .arrow{left:1em}ngb-tooltip-window.bs-tooltip-bottom-right .arrow,ngb-tooltip-window.bs-tooltip-top-right .arrow{left:auto;right:.8rem}ngb-tooltip-window.bs-tooltip-left .arrow,ngb-tooltip-window.bs-tooltip-right .arrow{top:calc(50% - .4rem)}ngb-tooltip-window.bs-tooltip-left-top .arrow,ngb-tooltip-window.bs-tooltip-right-top .arrow{top:.4rem}ngb-tooltip-window.bs-tooltip-left-bottom .arrow,ngb-tooltip-window.bs-tooltip-right-bottom .arrow{top:auto;bottom:.4rem}"] + }] } +]; +NgbTooltipWindow.propDecorators = { + id: [{ type: Input }], + tooltipClass: [{ type: Input }] +}; +/** + * A lightweight and extensible directive for fancy tooltip creation. + */ +class NgbTooltip { + /** + * @param {?} _elementRef + * @param {?} _renderer + * @param {?} injector + * @param {?} componentFactoryResolver + * @param {?} viewContainerRef + * @param {?} config + * @param {?} _ngZone + * @param {?} _document + * @param {?} _changeDetector + * @param {?} _applicationRef + */ + constructor(_elementRef, _renderer, injector, componentFactoryResolver, viewContainerRef, config, _ngZone, _document, _changeDetector, _applicationRef) { + this._elementRef = _elementRef; + this._renderer = _renderer; + this._ngZone = _ngZone; + this._document = _document; + this._changeDetector = _changeDetector; + this._applicationRef = _applicationRef; + /** + * An event emitted when the tooltip is shown. Contains no payload. + */ + this.shown = new EventEmitter(); + /** + * An event emitted when the popover is hidden. Contains no payload. + */ + this.hidden = new EventEmitter(); + this._ngbTooltipWindowId = `ngb-tooltip-${nextId$5++}`; + this.autoClose = config.autoClose; + this.placement = config.placement; + this.triggers = config.triggers; + this.container = config.container; + this.disableTooltip = config.disableTooltip; + this.tooltipClass = config.tooltipClass; + this.openDelay = config.openDelay; + this.closeDelay = config.closeDelay; + this._popupService = new PopupService(NgbTooltipWindow, injector, viewContainerRef, _renderer, componentFactoryResolver, _applicationRef); + this._zoneSubscription = _ngZone.onStable.subscribe((/** + * @return {?} + */ + () => { + if (this._windowRef) { + positionElements(this._elementRef.nativeElement, this._windowRef.location.nativeElement, this.placement, this.container === 'body', 'bs-tooltip'); + } + })); + } + /** + * The string content or a `TemplateRef` for the content to be displayed in the tooltip. + * + * If the content if falsy, the tooltip won't open. + * @param {?} value + * @return {?} + */ + set ngbTooltip(value) { + this._ngbTooltip = value; + if (!value && this._windowRef) { + this.close(); + } + } + /** + * @return {?} + */ + get ngbTooltip() { return this._ngbTooltip; } + /** + * Opens the tooltip. + * + * This is considered to be a "manual" triggering. + * The `context` is an optional value to be injected into the tooltip template when it is created. + * @param {?=} context + * @return {?} + */ + open(context) { + if (!this._windowRef && this._ngbTooltip && !this.disableTooltip) { + this._windowRef = this._popupService.open(this._ngbTooltip, context); + this._windowRef.instance.tooltipClass = this.tooltipClass; + this._windowRef.instance.id = this._ngbTooltipWindowId; + this._renderer.setAttribute(this._elementRef.nativeElement, 'aria-describedby', this._ngbTooltipWindowId); + if (this.container === 'body') { + this._document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement); + } + // We need to detect changes, because we don't know where .open() might be called from. + // Ex. opening tooltip from one of lifecycle hooks that run after the CD + // (say from ngAfterViewInit) will result in 'ExpressionHasChanged' exception + this._windowRef.changeDetectorRef.detectChanges(); + // We need to mark for check, because tooltip won't work inside the OnPush component. + // Ex. when we use expression like `{{ tooltip.isOpen() : 'opened' : 'closed' }}` + // inside the template of an OnPush component and we change the tooltip from + // open -> closed, the expression in question won't be updated unless we explicitly + // mark the parent component to be checked. + this._windowRef.changeDetectorRef.markForCheck(); + ngbAutoClose(this._ngZone, this._document, this.autoClose, (/** + * @return {?} + */ + () => this.close()), this.hidden, [this._windowRef.location.nativeElement]); + this.shown.emit(); + } + } + /** + * Closes the tooltip. + * + * This is considered to be a "manual" triggering of the tooltip. + * @return {?} + */ + close() { + if (this._windowRef != null) { + this._renderer.removeAttribute(this._elementRef.nativeElement, 'aria-describedby'); + this._popupService.close(); + this._windowRef = null; + this.hidden.emit(); + this._changeDetector.markForCheck(); + } + } + /** + * Toggles the tooltip. + * + * This is considered to be a "manual" triggering of the tooltip. + * @return {?} + */ + toggle() { + if (this._windowRef) { + this.close(); + } + else { + this.open(); + } + } + /** + * Returns `true`, if the popover is currently shown. + * @return {?} + */ + isOpen() { return this._windowRef != null; } + /** + * @return {?} + */ + ngOnInit() { + this._unregisterListenersFn = listenToTriggers(this._renderer, this._elementRef.nativeElement, this.triggers, this.isOpen.bind(this), this.open.bind(this), this.close.bind(this), +this.openDelay, +this.closeDelay); + } + /** + * @return {?} + */ + ngOnDestroy() { + this.close(); + // This check is needed as it might happen that ngOnDestroy is called before ngOnInit + // under certain conditions, see: https://github.com/ng-bootstrap/ng-bootstrap/issues/2199 + if (this._unregisterListenersFn) { + this._unregisterListenersFn(); + } + this._zoneSubscription.unsubscribe(); + } +} +NgbTooltip.decorators = [ + { type: Directive, args: [{ selector: '[ngbTooltip]', exportAs: 'ngbTooltip' },] } +]; +/** @nocollapse */ +NgbTooltip.ctorParameters = () => [ + { type: ElementRef }, + { type: Renderer2 }, + { type: Injector }, + { type: ComponentFactoryResolver }, + { type: ViewContainerRef }, + { type: NgbTooltipConfig }, + { type: NgZone }, + { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }, + { type: ChangeDetectorRef }, + { type: ApplicationRef } +]; +NgbTooltip.propDecorators = { + autoClose: [{ type: Input }], + placement: [{ type: Input }], + triggers: [{ type: Input }], + container: [{ type: Input }], + disableTooltip: [{ type: Input }], + tooltipClass: [{ type: Input }], + openDelay: [{ type: Input }], + closeDelay: [{ type: Input }], + shown: [{ type: Output }], + hidden: [{ type: Output }], + ngbTooltip: [{ type: Input }] +}; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +class NgbTooltipModule { +} +NgbTooltipModule.decorators = [ + { type: NgModule, args: [{ declarations: [NgbTooltip, NgbTooltipWindow], exports: [NgbTooltip], entryComponents: [NgbTooltipWindow] },] } +]; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * A component that helps with text highlighting. + * + * If splits the `result` text into parts that contain the searched `term` and generates the HTML markup to simplify + * highlighting: + * + * Ex. `result="Alaska"` and `term="as"` will produce `Alaska`. + */ +class NgbHighlight { + constructor() { + /** + * The CSS class for `` elements wrapping the `term` inside the `result`. + */ + this.highlightClass = 'ngb-highlight'; + } + /** + * @param {?} changes + * @return {?} + */ + ngOnChanges(changes) { + /** @type {?} */ + const result = toString(this.result); + /** @type {?} */ + const terms = Array.isArray(this.term) ? this.term : [this.term]; + /** @type {?} */ + const escapedTerms = terms.map((/** + * @param {?} term + * @return {?} + */ + term => regExpEscape(toString(term)))).filter((/** + * @param {?} term + * @return {?} + */ + term => term)); + this.parts = escapedTerms.length ? result.split(new RegExp(`(${escapedTerms.join('|')})`, 'gmi')) : [result]; + } +} +NgbHighlight.decorators = [ + { type: Component, args: [{ + selector: 'ngb-highlight', + changeDetection: ChangeDetectionStrategy.OnPush, + encapsulation: ViewEncapsulation.None, + template: `` + + `{{part}}{{part}}` + + ``, + styles: [".ngb-highlight{font-weight:700}"] + }] } +]; +NgbHighlight.propDecorators = { + highlightClass: [{ type: Input }], + result: [{ type: Input }], + term: [{ type: Input }] +}; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +class NgbTypeaheadWindow { + constructor() { + this.activeIdx = 0; + /** + * Flag indicating if the first row should be active initially + */ + this.focusFirst = true; + /** + * A function used to format a given result before display. This function should return a formatted string without any + * HTML markup + */ + this.formatter = toString; + /** + * Event raised when user selects a particular result row + */ + this.selectEvent = new EventEmitter(); + this.activeChangeEvent = new EventEmitter(); + } + /** + * @return {?} + */ + hasActive() { return this.activeIdx > -1 && this.activeIdx < this.results.length; } + /** + * @return {?} + */ + getActive() { return this.results[this.activeIdx]; } + /** + * @param {?} activeIdx + * @return {?} + */ + markActive(activeIdx) { + this.activeIdx = activeIdx; + this._activeChanged(); + } + /** + * @return {?} + */ + next() { + if (this.activeIdx === this.results.length - 1) { + this.activeIdx = this.focusFirst ? (this.activeIdx + 1) % this.results.length : -1; + } + else { + this.activeIdx++; + } + this._activeChanged(); + } + /** + * @return {?} + */ + prev() { + if (this.activeIdx < 0) { + this.activeIdx = this.results.length - 1; + } + else if (this.activeIdx === 0) { + this.activeIdx = this.focusFirst ? this.results.length - 1 : -1; + } + else { + this.activeIdx--; + } + this._activeChanged(); + } + /** + * @return {?} + */ + resetActive() { + this.activeIdx = this.focusFirst ? 0 : -1; + this._activeChanged(); + } + /** + * @param {?} item + * @return {?} + */ + select(item) { this.selectEvent.emit(item); } + /** + * @return {?} + */ + ngOnInit() { this.resetActive(); } + /** + * @private + * @return {?} + */ + _activeChanged() { + this.activeChangeEvent.emit(this.activeIdx >= 0 ? this.id + '-' + this.activeIdx : undefined); + } +} +NgbTypeaheadWindow.decorators = [ + { type: Component, args: [{ + selector: 'ngb-typeahead-window', + exportAs: 'ngbTypeaheadWindow', + host: { '(mousedown)': '$event.preventDefault()', 'class': 'dropdown-menu show', 'role': 'listbox', '[id]': 'id' }, + template: ` + + + + + + + ` + }] } +]; +NgbTypeaheadWindow.propDecorators = { + id: [{ type: Input }], + focusFirst: [{ type: Input }], + results: [{ type: Input }], + term: [{ type: Input }], + formatter: [{ type: Input }], + resultTemplate: [{ type: Input }], + selectEvent: [{ type: Output, args: ['select',] }], + activeChangeEvent: [{ type: Output, args: ['activeChange',] }] +}; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @type {?} */ +const ARIA_LIVE_DELAY = new InjectionToken('live announcer delay', { providedIn: 'root', factory: ARIA_LIVE_DELAY_FACTORY }); +/** + * @return {?} + */ +function ARIA_LIVE_DELAY_FACTORY() { + return 100; +} +/** + * @param {?} document + * @param {?=} lazyCreate + * @return {?} + */ +function getLiveElement(document, lazyCreate = false) { + /** @type {?} */ + let element = (/** @type {?} */ (document.body.querySelector('#ngb-live'))); + if (element == null && lazyCreate) { + element = document.createElement('div'); + element.setAttribute('id', 'ngb-live'); + element.setAttribute('aria-live', 'polite'); + element.setAttribute('aria-atomic', 'true'); + element.classList.add('sr-only'); + document.body.appendChild(element); + } + return element; +} +class Live { + /** + * @param {?} _document + * @param {?} _delay + */ + constructor(_document, _delay) { + this._document = _document; + this._delay = _delay; + } + /** + * @return {?} + */ + ngOnDestroy() { + /** @type {?} */ + const element = getLiveElement(this._document); + if (element) { + element.parentElement.removeChild(element); + } + } + /** + * @param {?} message + * @return {?} + */ + say(message) { + /** @type {?} */ + const element = getLiveElement(this._document, true); + /** @type {?} */ + const delay = this._delay; + element.textContent = ''; + /** @type {?} */ + const setText = (/** + * @return {?} + */ + () => element.textContent = message); + if (delay === null) { + setText(); + } + else { + setTimeout(setText, delay); + } + } +} +Live.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } +]; +/** @nocollapse */ +Live.ctorParameters = () => [ + { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }, + { type: undefined, decorators: [{ type: Inject, args: [ARIA_LIVE_DELAY,] }] } +]; +/** @nocollapse */ Live.ngInjectableDef = ɵɵdefineInjectable({ factory: function Live_Factory() { return new Live(ɵɵinject(DOCUMENT), ɵɵinject(ARIA_LIVE_DELAY)); }, token: Live, providedIn: "root" }); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * A configuration service for the [`NgbTypeahead`](#/components/typeahead/api#NgbTypeahead) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the typeaheads used in the application. + */ +class NgbTypeaheadConfig { + constructor() { + this.editable = true; + this.focusFirst = true; + this.showHint = false; + this.placement = ['bottom-left', 'bottom-right', 'top-left', 'top-right']; + } +} +NgbTypeaheadConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } +]; +/** @nocollapse */ NgbTypeaheadConfig.ngInjectableDef = ɵɵdefineInjectable({ factory: function NgbTypeaheadConfig_Factory() { return new NgbTypeaheadConfig(); }, token: NgbTypeaheadConfig, providedIn: "root" }); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @type {?} */ +const NGB_TYPEAHEAD_VALUE_ACCESSOR = { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef((/** + * @return {?} + */ + () => NgbTypeahead)), + multi: true +}; +/** @type {?} */ +let nextWindowId = 0; +/** + * A directive providing a simple way of creating powerful typeaheads from any text input. + */ +class NgbTypeahead { + /** + * @param {?} _elementRef + * @param {?} _viewContainerRef + * @param {?} _renderer + * @param {?} _injector + * @param {?} componentFactoryResolver + * @param {?} config + * @param {?} ngZone + * @param {?} _live + * @param {?} _document + * @param {?} _ngZone + * @param {?} _changeDetector + * @param {?} _applicationRef + */ + constructor(_elementRef, _viewContainerRef, _renderer, _injector, componentFactoryResolver, config, ngZone, _live, _document, _ngZone, _changeDetector, _applicationRef) { + this._elementRef = _elementRef; + this._viewContainerRef = _viewContainerRef; + this._renderer = _renderer; + this._injector = _injector; + this._live = _live; + this._document = _document; + this._ngZone = _ngZone; + this._changeDetector = _changeDetector; + this._applicationRef = _applicationRef; + this._closed$ = new Subject(); + /** + * The value for the `autocomplete` attribute for the `` element. + * + * Defaults to `"off"` to disable the native browser autocomplete, but you can override it if necessary. + * + * \@since 2.1.0 + */ + this.autocomplete = 'off'; + /** + * The preferred placement of the typeahead. + * + * Possible values are `"top"`, `"top-left"`, `"top-right"`, `"bottom"`, `"bottom-left"`, + * `"bottom-right"`, `"left"`, `"left-top"`, `"left-bottom"`, `"right"`, `"right-top"`, + * `"right-bottom"` + * + * Accepts an array of strings or a string with space separated possible values. + * + * The default order of preference is `"bottom-left bottom-right top-left top-right"` + * + * Please see the [positioning overview](#/positioning) for more details. + */ + this.placement = 'bottom-left'; + /** + * An event emitted right before an item is selected from the result list. + * + * Event payload is of type [`NgbTypeaheadSelectItemEvent`](#/components/typeahead/api#NgbTypeaheadSelectItemEvent). + */ + this.selectItem = new EventEmitter(); + this.popupId = `ngb-typeahead-${nextWindowId++}`; + this._onTouched = (/** + * @return {?} + */ + () => { }); + this._onChange = (/** + * @param {?} _ + * @return {?} + */ + (_) => { }); + this.container = config.container; + this.editable = config.editable; + this.focusFirst = config.focusFirst; + this.showHint = config.showHint; + this.placement = config.placement; + this._valueChanges = fromEvent(_elementRef.nativeElement, 'input') + .pipe(map((/** + * @param {?} $event + * @return {?} + */ + $event => ((/** @type {?} */ ($event.target))).value))); + this._resubscribeTypeahead = new BehaviorSubject(null); + this._popupService = new PopupService(NgbTypeaheadWindow, _injector, _viewContainerRef, _renderer, componentFactoryResolver, _applicationRef); + this._zoneSubscription = ngZone.onStable.subscribe((/** + * @return {?} + */ + () => { + if (this.isPopupOpen()) { + positionElements(this._elementRef.nativeElement, this._windowRef.location.nativeElement, this.placement, this.container === 'body'); + } + })); + } + /** + * @return {?} + */ + ngOnInit() { + /** @type {?} */ + const inputValues$ = this._valueChanges.pipe(tap((/** + * @param {?} value + * @return {?} + */ + value => { + this._inputValueBackup = this.showHint ? value : null; + if (this.editable) { + this._onChange(value); + } + }))); + /** @type {?} */ + const results$ = inputValues$.pipe(this.ngbTypeahead); + /** @type {?} */ + const processedResults$ = results$.pipe(tap((/** + * @return {?} + */ + () => { + if (!this.editable) { + this._onChange(undefined); + } + }))); + /** @type {?} */ + const userInput$ = this._resubscribeTypeahead.pipe(switchMap((/** + * @return {?} + */ + () => processedResults$))); + this._subscription = this._subscribeToUserInput(userInput$); + } + /** + * @return {?} + */ + ngOnDestroy() { + this._closePopup(); + this._unsubscribeFromUserInput(); + this._zoneSubscription.unsubscribe(); + } + /** + * @param {?} fn + * @return {?} + */ + registerOnChange(fn) { this._onChange = fn; } + /** + * @param {?} fn + * @return {?} + */ + registerOnTouched(fn) { this._onTouched = fn; } + /** + * @param {?} value + * @return {?} + */ + writeValue(value) { + this._writeInputValue(this._formatItemForInput(value)); + if (this.showHint) { + this._inputValueBackup = value; + } + } + /** + * @param {?} isDisabled + * @return {?} + */ + setDisabledState(isDisabled) { + this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled); + } + /** + * Dismisses typeahead popup window + * @return {?} + */ + dismissPopup() { + if (this.isPopupOpen()) { + this._resubscribeTypeahead.next(null); + this._closePopup(); + if (this.showHint && this._inputValueBackup !== null) { + this._writeInputValue(this._inputValueBackup); + } + this._changeDetector.markForCheck(); + } + } + /** + * Returns true if the typeahead popup window is displayed + * @return {?} + */ + isPopupOpen() { return this._windowRef != null; } + /** + * @return {?} + */ + handleBlur() { + this._resubscribeTypeahead.next(null); + this._onTouched(); + } + /** + * @param {?} event + * @return {?} + */ + handleKeyDown(event) { + if (!this.isPopupOpen()) { + return; + } + // tslint:disable-next-line:deprecation + switch (event.which) { + case Key.ArrowDown: + event.preventDefault(); + this._windowRef.instance.next(); + this._showHint(); + break; + case Key.ArrowUp: + event.preventDefault(); + this._windowRef.instance.prev(); + this._showHint(); + break; + case Key.Enter: + case Key.Tab: + /** @type {?} */ + const result = this._windowRef.instance.getActive(); + if (isDefined(result)) { + event.preventDefault(); + event.stopPropagation(); + this._selectResult(result); + } + this._closePopup(); + break; + } + } + /** + * @private + * @return {?} + */ + _openPopup() { + if (!this.isPopupOpen()) { + this._inputValueBackup = this._elementRef.nativeElement.value; + this._windowRef = this._popupService.open(); + this._windowRef.instance.id = this.popupId; + this._windowRef.instance.selectEvent.subscribe((/** + * @param {?} result + * @return {?} + */ + (result) => this._selectResultClosePopup(result))); + this._windowRef.instance.activeChangeEvent.subscribe((/** + * @param {?} activeId + * @return {?} + */ + (activeId) => this.activeDescendant = activeId)); + if (this.container === 'body') { + window.document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement); + } + this._changeDetector.markForCheck(); + ngbAutoClose(this._ngZone, this._document, 'outside', (/** + * @return {?} + */ + () => this.dismissPopup()), this._closed$, [this._elementRef.nativeElement, this._windowRef.location.nativeElement]); + } + } + /** + * @private + * @return {?} + */ + _closePopup() { + this._closed$.next(); + this._popupService.close(); + this._windowRef = null; + this.activeDescendant = undefined; + } + /** + * @private + * @param {?} result + * @return {?} + */ + _selectResult(result) { + /** @type {?} */ + let defaultPrevented = false; + this.selectItem.emit({ item: result, preventDefault: (/** + * @return {?} + */ + () => { defaultPrevented = true; }) }); + this._resubscribeTypeahead.next(null); + if (!defaultPrevented) { + this.writeValue(result); + this._onChange(result); + } + } + /** + * @private + * @param {?} result + * @return {?} + */ + _selectResultClosePopup(result) { + this._selectResult(result); + this._closePopup(); + } + /** + * @private + * @return {?} + */ + _showHint() { + if (this.showHint && this._windowRef.instance.hasActive() && this._inputValueBackup != null) { + /** @type {?} */ + const userInputLowerCase = this._inputValueBackup.toLowerCase(); + /** @type {?} */ + const formattedVal = this._formatItemForInput(this._windowRef.instance.getActive()); + if (userInputLowerCase === formattedVal.substr(0, this._inputValueBackup.length).toLowerCase()) { + this._writeInputValue(this._inputValueBackup + formattedVal.substr(this._inputValueBackup.length)); + this._elementRef.nativeElement['setSelectionRange'].apply(this._elementRef.nativeElement, [this._inputValueBackup.length, formattedVal.length]); + } + else { + this._writeInputValue(formattedVal); + } + } + } + /** + * @private + * @param {?} item + * @return {?} + */ + _formatItemForInput(item) { + return item != null && this.inputFormatter ? this.inputFormatter(item) : toString(item); + } + /** + * @private + * @param {?} value + * @return {?} + */ + _writeInputValue(value) { + this._renderer.setProperty(this._elementRef.nativeElement, 'value', toString(value)); + } + /** + * @private + * @param {?} userInput$ + * @return {?} + */ + _subscribeToUserInput(userInput$) { + return userInput$.subscribe((/** + * @param {?} results + * @return {?} + */ + (results) => { + if (!results || results.length === 0) { + this._closePopup(); + } + else { + this._openPopup(); + this._windowRef.instance.focusFirst = this.focusFirst; + this._windowRef.instance.results = results; + this._windowRef.instance.term = this._elementRef.nativeElement.value; + if (this.resultFormatter) { + this._windowRef.instance.formatter = this.resultFormatter; + } + if (this.resultTemplate) { + this._windowRef.instance.resultTemplate = this.resultTemplate; + } + this._windowRef.instance.resetActive(); + // The observable stream we are subscribing to might have async steps + // and if a component containing typeahead is using the OnPush strategy + // the change detection turn wouldn't be invoked automatically. + this._windowRef.changeDetectorRef.detectChanges(); + this._showHint(); + } + // live announcer + /** @type {?} */ + const count = results ? results.length : 0; + this._live.say(count === 0 ? 'No results available' : `${count} result${count === 1 ? '' : 's'} available`); + })); + } + /** + * @private + * @return {?} + */ + _unsubscribeFromUserInput() { + if (this._subscription) { + this._subscription.unsubscribe(); + } + this._subscription = null; + } +} +NgbTypeahead.decorators = [ + { type: Directive, args: [{ + selector: 'input[ngbTypeahead]', + exportAs: 'ngbTypeahead', + host: { + '(blur)': 'handleBlur()', + '[class.open]': 'isPopupOpen()', + '(keydown)': 'handleKeyDown($event)', + '[autocomplete]': 'autocomplete', + 'autocapitalize': 'off', + 'autocorrect': 'off', + 'role': 'combobox', + 'aria-multiline': 'false', + '[attr.aria-autocomplete]': 'showHint ? "both" : "list"', + '[attr.aria-activedescendant]': 'activeDescendant', + '[attr.aria-owns]': 'isPopupOpen() ? popupId : null', + '[attr.aria-expanded]': 'isPopupOpen()' + }, + providers: [NGB_TYPEAHEAD_VALUE_ACCESSOR] + },] } +]; +/** @nocollapse */ +NgbTypeahead.ctorParameters = () => [ + { type: ElementRef }, + { type: ViewContainerRef }, + { type: Renderer2 }, + { type: Injector }, + { type: ComponentFactoryResolver }, + { type: NgbTypeaheadConfig }, + { type: NgZone }, + { type: Live }, + { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }, + { type: NgZone }, + { type: ChangeDetectorRef }, + { type: ApplicationRef } +]; +NgbTypeahead.propDecorators = { + autocomplete: [{ type: Input }], + container: [{ type: Input }], + editable: [{ type: Input }], + focusFirst: [{ type: Input }], + inputFormatter: [{ type: Input }], + ngbTypeahead: [{ type: Input }], + resultFormatter: [{ type: Input }], + resultTemplate: [{ type: Input }], + showHint: [{ type: Input }], + placement: [{ type: Input }], + selectItem: [{ type: Output }] +}; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +class NgbTypeaheadModule { +} +NgbTypeaheadModule.decorators = [ + { type: NgModule, args: [{ + declarations: [NgbTypeahead, NgbHighlight, NgbTypeaheadWindow], + exports: [NgbTypeahead, NgbHighlight], + imports: [CommonModule], + entryComponents: [NgbTypeaheadWindow] + },] } +]; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @type {?} */ +const NGB_MODULES = [ + SbCardModule, NgbAccordionModule, NgbAlertModule, NgbButtonsModule, NgbCarouselModule, NgbCollapseModule, NgbDatepickerModule, + NgbDropdownModule, NgbModalModule, NgbPaginationModule, NgbPopoverModule, NgbProgressbarModule, NgbRatingModule, + NgbTabsetModule, NgbTimepickerModule, NgbToastModule, NgbTooltipModule, NgbTypeaheadModule +]; +class NgbModule { +} +NgbModule.decorators = [ + { type: NgModule, args: [{ imports: NGB_MODULES, exports: NGB_MODULES },] } +]; + +export { ModalDismissReasons, NgbAccordion, NgbAccordionConfig, NgbAccordionModule, NgbActiveModal, NgbAlert, NgbAlertConfig, NgbAlertModule, NgbButtonLabel, NgbButtonsModule, NgbCalendar, NgbCalendarGregorian, NgbCalendarHebrew, NgbCalendarIslamicCivil, NgbCalendarIslamicUmalqura, NgbCalendarPersian, NgbCarousel, NgbCarouselConfig, NgbCarouselModule, NgbCheckBox, NgbCollapse, NgbCollapseModule, NgbDate, NgbDateAdapter, NgbDateNativeAdapter, NgbDateNativeUTCAdapter, NgbDateParserFormatter, NgbDatepicker, NgbDatepickerConfig, NgbDatepickerI18n, NgbDatepickerI18nHebrew, NgbDatepickerModule, NgbDropdown, NgbDropdownAnchor, NgbDropdownConfig, NgbDropdownItem, NgbDropdownMenu, NgbDropdownModule, NgbDropdownToggle, NgbHighlight, NgbInputDatepicker, NgbModal, NgbModalConfig, NgbModalModule, NgbModalRef, NgbModule, NgbPagination, NgbPaginationConfig, NgbPaginationEllipsis, NgbPaginationFirst, NgbPaginationLast, NgbPaginationModule, NgbPaginationNext, NgbPaginationNumber, NgbPaginationPrevious, NgbPanel, NgbPanelContent, NgbPanelHeader, NgbPanelTitle, NgbPanelToggle, NgbPopover, NgbPopoverConfig, NgbPopoverModule, NgbProgressbar, NgbProgressbarConfig, NgbProgressbarModule, NgbRadio, NgbRadioGroup, NgbRating, NgbRatingConfig, NgbRatingModule, NgbSlide, NgbSlideEventDirection, NgbSlideEventSource, NgbTab, NgbTabContent, NgbTabTitle, NgbTabset, NgbTabsetConfig, NgbTabsetModule, NgbTimeAdapter, NgbTimepicker, NgbTimepickerConfig, NgbTimepickerI18n, NgbTimepickerModule, NgbToast, NgbToastConfig, NgbToastHeader, NgbToastModule, NgbTooltip, NgbTooltipConfig, NgbTooltipModule, NgbTypeahead, NgbTypeaheadConfig, NgbTypeaheadModule, SbCard, SbCardConfig, SbCardModule, NGB_CAROUSEL_DIRECTIVES as ɵa, NGB_DATEPICKER_CALENDAR_FACTORY as ɵb, ARIA_LIVE_DELAY as ɵba, ARIA_LIVE_DELAY_FACTORY as ɵbb, Live as ɵbc, NgbCalendarHijri as ɵbd, ContentRef as ɵbe, NgbDatepickerMonthView as ɵc, NgbDatepickerDayView as ɵd, NgbDatepickerNavigation as ɵe, NgbDatepickerNavigationSelect as ɵf, NGB_DATEPICKER_18N_FACTORY as ɵg, NgbDatepickerI18nDefault as ɵh, NGB_DATEPICKER_DATE_ADAPTER_FACTORY as ɵi, NgbDateStructAdapter as ɵj, NGB_DATEPICKER_PARSER_FORMATTER_FACTORY as ɵk, NgbDateISOParserFormatter as ɵl, NgbNavbar as ɵm, NgbPopoverWindow as ɵn, NGB_DATEPICKER_TIME_ADAPTER_FACTORY as ɵo, NgbTimeStructAdapter as ɵp, NGB_TIMEPICKER_I18N_FACTORY as ɵq, NgbTimepickerI18nDefault as ɵr, NgbTooltipWindow as ɵs, NgbTypeaheadWindow as ɵt, NgbDatepickerService as ɵu, NgbDatepickerKeyMapService as ɵv, NgbModalBackdrop as ɵw, NgbModalWindow as ɵx, NgbModalStack as ɵy, ScrollBar as ɵz }; +//# sourceMappingURL=sunbird-ui-components.js.map diff --git a/dist/sunbird-ui-components/fesm2015/sunbird-ui-components.js.map b/dist/sunbird-ui-components/fesm2015/sunbird-ui-components.js.map new file mode 100644 index 0000000..d029eea --- /dev/null +++ b/dist/sunbird-ui-components/fesm2015/sunbird-ui-components.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sunbird-ui-components.js","sources":["ng://@sunbird-ed/sunbird-ui-components/card/card-config.ts","ng://@sunbird-ed/sunbird-ui-components/card/card.ts","ng://@sunbird-ed/sunbird-ui-components/card/card.module.ts","ng://@sunbird-ed/sunbird-ui-components/util/util.ts","ng://@sunbird-ed/sunbird-ui-components/accordion/accordion-config.ts","ng://@sunbird-ed/sunbird-ui-components/accordion/accordion.ts","ng://@sunbird-ed/sunbird-ui-components/accordion/accordion.module.ts","ng://@sunbird-ed/sunbird-ui-components/alert/alert-config.ts","ng://@sunbird-ed/sunbird-ui-components/alert/alert.ts","ng://@sunbird-ed/sunbird-ui-components/alert/alert.module.ts","ng://@sunbird-ed/sunbird-ui-components/buttons/label.ts","ng://@sunbird-ed/sunbird-ui-components/buttons/checkbox.ts","ng://@sunbird-ed/sunbird-ui-components/buttons/radio.ts","ng://@sunbird-ed/sunbird-ui-components/buttons/buttons.module.ts","ng://@sunbird-ed/sunbird-ui-components/carousel/carousel-config.ts","ng://@sunbird-ed/sunbird-ui-components/carousel/carousel.ts","ng://@sunbird-ed/sunbird-ui-components/carousel/carousel.module.ts","ng://@sunbird-ed/sunbird-ui-components/collapse/collapse.ts","ng://@sunbird-ed/sunbird-ui-components/collapse/collapse.module.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/ngb-date.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/ngb-calendar.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker-tools.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker-i18n.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker-service.ts","ng://@sunbird-ed/sunbird-ui-components/util/key.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker-keymap-service.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker-view-model.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker-config.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/adapters/ngb-date-adapter.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker-month-view.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker-navigation.ts","ng://@sunbird-ed/sunbird-ui-components/util/autoclose.ts","ng://@sunbird-ed/sunbird-ui-components/util/focus-trap.ts","ng://@sunbird-ed/sunbird-ui-components/util/positioning.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/ngb-date-parser-formatter.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker-input.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker-day-view.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker-navigation-select.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/hijri/ngb-calendar-hijri.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/hijri/ngb-calendar-islamic-civil.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/hijri/ngb-calendar-islamic-umalqura.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/jalali/jalali.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/jalali/ngb-calendar-persian.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/hebrew/hebrew.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/hebrew/ngb-calendar-hebrew.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/hebrew/datepicker-i18n-hebrew.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/adapters/ngb-date-native-adapter.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/adapters/ngb-date-native-utc-adapter.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker.module.ts","ng://@sunbird-ed/sunbird-ui-components/dropdown/dropdown-config.ts","ng://@sunbird-ed/sunbird-ui-components/dropdown/dropdown.ts","ng://@sunbird-ed/sunbird-ui-components/dropdown/dropdown.module.ts","ng://@sunbird-ed/sunbird-ui-components/modal/modal-config.ts","ng://@sunbird-ed/sunbird-ui-components/util/popup.ts","ng://@sunbird-ed/sunbird-ui-components/util/scrollbar.ts","ng://@sunbird-ed/sunbird-ui-components/modal/modal-backdrop.ts","ng://@sunbird-ed/sunbird-ui-components/modal/modal-ref.ts","ng://@sunbird-ed/sunbird-ui-components/modal/modal-dismiss-reasons.ts","ng://@sunbird-ed/sunbird-ui-components/modal/modal-window.ts","ng://@sunbird-ed/sunbird-ui-components/modal/modal-stack.ts","ng://@sunbird-ed/sunbird-ui-components/modal/modal.ts","ng://@sunbird-ed/sunbird-ui-components/modal/modal.module.ts","ng://@sunbird-ed/sunbird-ui-components/pagination/pagination-config.ts","ng://@sunbird-ed/sunbird-ui-components/pagination/pagination.ts","ng://@sunbird-ed/sunbird-ui-components/pagination/pagination.module.ts","ng://@sunbird-ed/sunbird-ui-components/util/triggers.ts","ng://@sunbird-ed/sunbird-ui-components/popover/popover-config.ts","ng://@sunbird-ed/sunbird-ui-components/popover/popover.ts","ng://@sunbird-ed/sunbird-ui-components/popover/popover.module.ts","ng://@sunbird-ed/sunbird-ui-components/progressbar/progressbar-config.ts","ng://@sunbird-ed/sunbird-ui-components/progressbar/progressbar.ts","ng://@sunbird-ed/sunbird-ui-components/progressbar/progressbar.module.ts","ng://@sunbird-ed/sunbird-ui-components/rating/rating-config.ts","ng://@sunbird-ed/sunbird-ui-components/rating/rating.ts","ng://@sunbird-ed/sunbird-ui-components/rating/rating.module.ts","ng://@sunbird-ed/sunbird-ui-components/tabset/tabset-config.ts","ng://@sunbird-ed/sunbird-ui-components/tabset/tabset.ts","ng://@sunbird-ed/sunbird-ui-components/tabset/tabset.module.ts","ng://@sunbird-ed/sunbird-ui-components/timepicker/ngb-time.ts","ng://@sunbird-ed/sunbird-ui-components/timepicker/timepicker-config.ts","ng://@sunbird-ed/sunbird-ui-components/timepicker/ngb-time-adapter.ts","ng://@sunbird-ed/sunbird-ui-components/timepicker/timepicker-i18n.ts","ng://@sunbird-ed/sunbird-ui-components/timepicker/timepicker.ts","ng://@sunbird-ed/sunbird-ui-components/timepicker/timepicker.module.ts","ng://@sunbird-ed/sunbird-ui-components/toast/toast-config.ts","ng://@sunbird-ed/sunbird-ui-components/toast/toast.ts","ng://@sunbird-ed/sunbird-ui-components/toast/toast.module.ts","ng://@sunbird-ed/sunbird-ui-components/tooltip/tooltip-config.ts","ng://@sunbird-ed/sunbird-ui-components/tooltip/tooltip.ts","ng://@sunbird-ed/sunbird-ui-components/tooltip/tooltip.module.ts","ng://@sunbird-ed/sunbird-ui-components/typeahead/highlight.ts","ng://@sunbird-ed/sunbird-ui-components/typeahead/typeahead-window.ts","ng://@sunbird-ed/sunbird-ui-components/util/accessibility/live.ts","ng://@sunbird-ed/sunbird-ui-components/typeahead/typeahead-config.ts","ng://@sunbird-ed/sunbird-ui-components/typeahead/typeahead.ts","ng://@sunbird-ed/sunbird-ui-components/typeahead/typeahead.module.ts","ng://@sunbird-ed/sunbird-ui-components/index.ts"],"sourcesContent":["import {Injectable} from '@angular/core';\n\n/**\n * A configuration service for the [SbCard](#/components/alert/api#SbCard) component.\n *\n * You can inject this service, typically in your root component, and customize its properties\n * to provide default values for all alerts used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class SbCardConfig {\n dismissible = true;\n type = 'warning';\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n ChangeDetectionStrategy,\n Renderer2,\n ElementRef,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewEncapsulation\n} from '@angular/core';\n\nimport {SbCardConfig} from './card-config';\n\n/**\n * Alert is a component to provide contextual feedback messages for user.\n *\n * It supports several alert types and can be dismissed.\n */\n@Component({\n selector: 'sb-card',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {'role': 'alert', 'class': 'alert', '[class.alert-dismissible]': 'dismissible'},\n template: `\n \n \n `,\n styleUrls: ['./card.scss']\n})\nexport class SbCard implements OnInit,\n OnChanges {\n /**\n * If `true`, alert can be dismissed by the user.\n *\n * The close button (×) will be displayed and you can be notified\n * of the event with the `(close)` output.\n */\n @Input() dismissible: boolean;\n /**\n * Type of the alert.\n *\n * Bootstrap provides styles for the following types: `'success'`, `'info'`, `'warning'`, `'danger'`, `'primary'`,\n * `'secondary'`, `'light'` and `'dark'`.\n */\n @Input() type: string;\n /**\n * An event emitted when the close button is clicked. It has no payload and only relevant for dismissible alerts.\n */\n @Output() close = new EventEmitter();\n\n constructor(config: SbCardConfig, private _renderer: Renderer2, private _element: ElementRef) {\n this.dismissible = config.dismissible;\n this.type = config.type;\n }\n\n closeHandler() { this.close.emit(null); }\n\n ngOnChanges(changes: SimpleChanges) {\n const typeChange = changes['type'];\n if (typeChange && !typeChange.firstChange) {\n this._renderer.removeClass(this._element.nativeElement, `alert-${typeChange.previousValue}`);\n this._renderer.addClass(this._element.nativeElement, `alert-${typeChange.currentValue}`);\n }\n }\n\n ngOnInit() { this._renderer.addClass(this._element.nativeElement, `alert-${this.type}`); }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\nimport {SbCard} from './card';\n\nexport {SbCard} from './card';\nexport {SbCardConfig} from './card-config';\n\n@NgModule({declarations: [SbCard], exports: [SbCard], imports: [CommonModule], entryComponents: [SbCard]})\nexport class SbCardModule {\n}\n","export function toInteger(value: any): number {\n return parseInt(`${value}`, 10);\n}\n\nexport function toString(value: any): string {\n return (value !== undefined && value !== null) ? `${value}` : '';\n}\n\nexport function getValueInRange(value: number, max: number, min = 0): number {\n return Math.max(Math.min(value, max), min);\n}\n\nexport function isString(value: any): value is string {\n return typeof value === 'string';\n}\n\nexport function isNumber(value: any): value is number {\n return !isNaN(toInteger(value));\n}\n\nexport function isInteger(value: any): value is number {\n return typeof value === 'number' && isFinite(value) && Math.floor(value) === value;\n}\n\nexport function isDefined(value: any): boolean {\n return value !== undefined && value !== null;\n}\n\nexport function padNumber(value: number) {\n if (isNumber(value)) {\n return `0${value}`.slice(-2);\n } else {\n return '';\n }\n}\n\nexport function regExpEscape(text) {\n return text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n}\n\nexport function hasClassName(element: any, className: string): boolean {\n return element && element.className && element.className.split &&\n element.className.split(/\\s+/).indexOf(className) >= 0;\n}\n\nif (typeof Element !== 'undefined' && !Element.prototype.closest) {\n // Polyfill for ie10+\n\n if (!Element.prototype.matches) {\n // IE uses the non-standard name: msMatchesSelector\n Element.prototype.matches = (Element.prototype as any).msMatchesSelector || Element.prototype.webkitMatchesSelector;\n }\n\n Element.prototype.closest = function(s: string) {\n let el = this;\n if (!document.documentElement.contains(el)) {\n return null;\n }\n do {\n if (el.matches(s)) {\n return el;\n }\n el = el.parentElement || el.parentNode;\n } while (el !== null && el.nodeType === 1);\n return null;\n };\n}\n\nexport function closest(element: HTMLElement, selector): HTMLElement {\n if (!selector) {\n return null;\n }\n\n return element.closest(selector);\n}\n","import {Injectable} from '@angular/core';\n\n/**\n * A configuration service for the [NgbAccordion](#/components/accordion/api#NgbAccordion) component.\n *\n * You can inject this service, typically in your root component, and customize its properties\n * to provide default values for all accordions used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbAccordionConfig {\n closeOthers = false;\n type: string;\n}\n","import {\n AfterContentChecked,\n Component,\n ContentChildren,\n Directive,\n EventEmitter,\n Host,\n Input,\n Optional,\n Output,\n QueryList,\n TemplateRef\n} from '@angular/core';\n\nimport {isString} from '../util/util';\n\nimport {NgbAccordionConfig} from './accordion-config';\n\nlet nextId = 0;\n\n/**\n * The context for the [NgbPanelHeader](#/components/accordion/api#NgbPanelHeader) template\n *\n * @since 4.1.0\n */\nexport interface NgbPanelHeaderContext {\n /**\n * `True` if current panel is opened\n */\n opened: boolean;\n}\n\n/**\n * A directive that wraps an accordion panel header with any HTML markup and a toggling button\n * marked with [`NgbPanelToggle`](#/components/accordion/api#NgbPanelToggle).\n * See the [header customization demo](#/components/accordion/examples#header) for more details.\n *\n * You can also use [`NgbPanelTitle`](#/components/accordion/api#NgbPanelTitle) to customize only the panel title.\n *\n * @since 4.1.0\n */\n@Directive({selector: 'ng-template[ngbPanelHeader]'})\nexport class NgbPanelHeader {\n constructor(public templateRef: TemplateRef) {}\n}\n\n/**\n * A directive that wraps only the panel title with HTML markup inside.\n *\n * You can also use [`NgbPanelHeader`](#/components/accordion/api#NgbPanelHeader) to customize the full panel header.\n */\n@Directive({selector: 'ng-template[ngbPanelTitle]'})\nexport class NgbPanelTitle {\n constructor(public templateRef: TemplateRef) {}\n}\n\n/**\n * A directive that wraps the accordion panel content.\n */\n@Directive({selector: 'ng-template[ngbPanelContent]'})\nexport class NgbPanelContent {\n constructor(public templateRef: TemplateRef) {}\n}\n\n/**\n * A directive that wraps an individual accordion panel with title and collapsible content.\n */\n@Directive({selector: 'ngb-panel'})\nexport class NgbPanel implements AfterContentChecked {\n /**\n * If `true`, the panel is disabled an can't be toggled.\n */\n @Input() disabled = false;\n\n /**\n * An optional id for the panel that must be unique on the page.\n *\n * If not provided, it will be auto-generated in the `ngb-panel-xxx` format.\n */\n @Input() id = `ngb-panel-${nextId++}`;\n\n isOpen = false;\n\n /**\n * The panel title.\n *\n * You can alternatively use [`NgbPanelTitle`](#/components/accordion/api#NgbPanelTitle) to set panel title.\n */\n @Input() title: string;\n\n /**\n * Type of the current panel.\n *\n * Bootstrap provides styles for the following types: `'success'`, `'info'`, `'warning'`, `'danger'`, `'primary'`,\n * `'secondary'`, `'light'` and `'dark'`.\n */\n @Input() type: string;\n\n titleTpl: NgbPanelTitle | null;\n headerTpl: NgbPanelHeader | null;\n contentTpl: NgbPanelContent | null;\n\n @ContentChildren(NgbPanelTitle, {descendants: false}) titleTpls: QueryList;\n @ContentChildren(NgbPanelHeader, {descendants: false}) headerTpls: QueryList;\n @ContentChildren(NgbPanelContent, {descendants: false}) contentTpls: QueryList;\n\n ngAfterContentChecked() {\n // We are using @ContentChildren instead of @ContentChild as in the Angular version being used\n // only @ContentChildren allows us to specify the {descendants: false} option.\n // Without {descendants: false} we are hitting bugs described in:\n // https://github.com/ng-bootstrap/ng-bootstrap/issues/2240\n this.titleTpl = this.titleTpls.first;\n this.headerTpl = this.headerTpls.first;\n this.contentTpl = this.contentTpls.first;\n }\n}\n\n/**\n * An event emitted right before toggling an accordion panel.\n */\nexport interface NgbPanelChangeEvent {\n /**\n * The id of the accordion panel that is being toggled.\n */\n panelId: string;\n\n /**\n * The next state of the panel.\n *\n * `true` if it will be opened, `false` if closed.\n */\n nextState: boolean;\n\n /**\n * Calling this function will prevent panel toggling.\n */\n preventDefault: () => void;\n}\n\n/**\n * Accordion is a collection of collapsible panels (bootstrap cards).\n *\n * It can ensure only one panel is opened at a time and allows to customize panel\n * headers.\n */\n@Component({\n selector: 'ngb-accordion',\n exportAs: 'ngbAccordion',\n host: {'class': 'accordion', 'role': 'tablist', '[attr.aria-multiselectable]': '!closeOtherPanels'},\n template: `\n \n \n \n \n
\n
\n \n
\n
\n
\n \n
\n
\n
\n
\n `\n})\nexport class NgbAccordion implements AfterContentChecked {\n @ContentChildren(NgbPanel) panels: QueryList;\n\n /**\n * An array or comma separated strings of panel ids that should be opened **initially**.\n *\n * For subsequent changes use methods like `expand()`, `collapse()`, etc. and\n * the `(panelChange)` event.\n */\n @Input() activeIds: string | string[] = [];\n\n /**\n * If `true`, only one panel could be opened at a time.\n *\n * Opening a new panel will close others.\n */\n @Input('closeOthers') closeOtherPanels: boolean;\n\n /**\n * If `true`, panel content will be detached from DOM and not simply hidden when the panel is collapsed.\n */\n @Input() destroyOnHide = true;\n\n /**\n * Type of panels.\n *\n * Bootstrap provides styles for the following types: `'success'`, `'info'`, `'warning'`, `'danger'`, `'primary'`,\n * `'secondary'`, `'light'` and `'dark'`.\n */\n @Input() type: string;\n\n /**\n * Event emitted right before the panel toggle happens.\n *\n * See [NgbPanelChangeEvent](#/components/accordion/api#NgbPanelChangeEvent) for payload details.\n */\n @Output() panelChange = new EventEmitter();\n\n constructor(config: NgbAccordionConfig) {\n this.type = config.type;\n this.closeOtherPanels = config.closeOthers;\n }\n\n /**\n * Checks if a panel with a given id is expanded.\n */\n isExpanded(panelId: string): boolean { return this.activeIds.indexOf(panelId) > -1; }\n\n /**\n * Expands a panel with a given id.\n *\n * Has no effect if the panel is already expanded or disabled.\n */\n expand(panelId: string): void { this._changeOpenState(this._findPanelById(panelId), true); }\n\n /**\n * Expands all panels, if `[closeOthers]` is `false`.\n *\n * If `[closeOthers]` is `true`, it will expand the first panel, unless there is already a panel opened.\n */\n expandAll(): void {\n if (this.closeOtherPanels) {\n if (this.activeIds.length === 0 && this.panels.length) {\n this._changeOpenState(this.panels.first, true);\n }\n } else {\n this.panels.forEach(panel => this._changeOpenState(panel, true));\n }\n }\n\n /**\n * Collapses a panel with the given id.\n *\n * Has no effect if the panel is already collapsed or disabled.\n */\n collapse(panelId: string) { this._changeOpenState(this._findPanelById(panelId), false); }\n\n /**\n * Collapses all opened panels.\n */\n collapseAll() {\n this.panels.forEach((panel) => { this._changeOpenState(panel, false); });\n }\n\n /**\n * Toggles a panel with the given id.\n *\n * Has no effect if the panel is disabled.\n */\n toggle(panelId: string) {\n const panel = this._findPanelById(panelId);\n if (panel) {\n this._changeOpenState(panel, !panel.isOpen);\n }\n }\n\n ngAfterContentChecked() {\n // active id updates\n if (isString(this.activeIds)) {\n this.activeIds = this.activeIds.split(/\\s*,\\s*/);\n }\n\n // update panels open states\n this.panels.forEach(panel => panel.isOpen = !panel.disabled && this.activeIds.indexOf(panel.id) > -1);\n\n // closeOthers updates\n if (this.activeIds.length > 1 && this.closeOtherPanels) {\n this._closeOthers(this.activeIds[0]);\n this._updateActiveIds();\n }\n }\n\n private _changeOpenState(panel: NgbPanel, nextState: boolean) {\n if (panel && !panel.disabled && panel.isOpen !== nextState) {\n let defaultPrevented = false;\n\n this.panelChange.emit(\n {panelId: panel.id, nextState: nextState, preventDefault: () => { defaultPrevented = true; }});\n\n if (!defaultPrevented) {\n panel.isOpen = nextState;\n\n if (nextState && this.closeOtherPanels) {\n this._closeOthers(panel.id);\n }\n this._updateActiveIds();\n }\n }\n }\n\n private _closeOthers(panelId: string) {\n this.panels.forEach(panel => {\n if (panel.id !== panelId) {\n panel.isOpen = false;\n }\n });\n }\n\n private _findPanelById(panelId: string): NgbPanel | null { return this.panels.find(p => p.id === panelId); }\n\n private _updateActiveIds() {\n this.activeIds = this.panels.filter(panel => panel.isOpen && !panel.disabled).map(panel => panel.id);\n }\n}\n\n/**\n * A directive to put on a button that toggles panel opening and closing.\n *\n * To be used inside the [`NgbPanelHeader`](#/components/accordion/api#NgbPanelHeader)\n *\n * @since 4.1.0\n */\n@Directive({\n selector: 'button[ngbPanelToggle]',\n host: {\n 'type': 'button',\n '[disabled]': 'panel.disabled',\n '[class.collapsed]': '!panel.isOpen',\n '[attr.aria-expanded]': 'panel.isOpen',\n '[attr.aria-controls]': 'panel.id',\n '(click)': 'accordion.toggle(panel.id)'\n }\n})\nexport class NgbPanelToggle {\n @Input()\n set ngbPanelToggle(panel: NgbPanel) {\n if (panel) {\n this.panel = panel;\n }\n }\n\n constructor(public accordion: NgbAccordion, @Optional() @Host() public panel: NgbPanel) {}\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\nimport {NgbAccordion, NgbPanel, NgbPanelTitle, NgbPanelContent, NgbPanelHeader, NgbPanelToggle} from './accordion';\n\nexport {\n NgbAccordion,\n NgbPanel,\n NgbPanelTitle,\n NgbPanelContent,\n NgbPanelChangeEvent,\n NgbPanelHeader,\n NgbPanelHeaderContext,\n NgbPanelToggle\n} from './accordion';\nexport {NgbAccordionConfig} from './accordion-config';\n\nconst NGB_ACCORDION_DIRECTIVES =\n [NgbAccordion, NgbPanel, NgbPanelTitle, NgbPanelContent, NgbPanelHeader, NgbPanelToggle];\n\n@NgModule({declarations: NGB_ACCORDION_DIRECTIVES, exports: NGB_ACCORDION_DIRECTIVES, imports: [CommonModule]})\nexport class NgbAccordionModule {\n}\n","import {Injectable} from '@angular/core';\n\n/**\n * A configuration service for the [NgbAlert](#/components/alert/api#NgbAlert) component.\n *\n * You can inject this service, typically in your root component, and customize its properties\n * to provide default values for all alerts used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbAlertConfig {\n dismissible = true;\n type = 'warning';\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n ChangeDetectionStrategy,\n Renderer2,\n ElementRef,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewEncapsulation\n} from '@angular/core';\n\nimport {NgbAlertConfig} from './alert-config';\n\n/**\n * Alert is a component to provide contextual feedback messages for user.\n *\n * It supports several alert types and can be dismissed.\n */\n@Component({\n selector: 'ngb-alert',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {'role': 'alert', 'class': 'alert', '[class.alert-dismissible]': 'dismissible'},\n template: `\n \n \n `,\n styleUrls: ['./alert.scss']\n})\nexport class NgbAlert implements OnInit,\n OnChanges {\n /**\n * If `true`, alert can be dismissed by the user.\n *\n * The close button (×) will be displayed and you can be notified\n * of the event with the `(close)` output.\n */\n @Input() dismissible: boolean;\n /**\n * Type of the alert.\n *\n * Bootstrap provides styles for the following types: `'success'`, `'info'`, `'warning'`, `'danger'`, `'primary'`,\n * `'secondary'`, `'light'` and `'dark'`.\n */\n @Input() type: string;\n /**\n * An event emitted when the close button is clicked. It has no payload and only relevant for dismissible alerts.\n */\n @Output() close = new EventEmitter();\n\n constructor(config: NgbAlertConfig, private _renderer: Renderer2, private _element: ElementRef) {\n this.dismissible = config.dismissible;\n this.type = config.type;\n }\n\n closeHandler() { this.close.emit(null); }\n\n ngOnChanges(changes: SimpleChanges) {\n const typeChange = changes['type'];\n if (typeChange && !typeChange.firstChange) {\n this._renderer.removeClass(this._element.nativeElement, `alert-${typeChange.previousValue}`);\n this._renderer.addClass(this._element.nativeElement, `alert-${typeChange.currentValue}`);\n }\n }\n\n ngOnInit() { this._renderer.addClass(this._element.nativeElement, `alert-${this.type}`); }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\nimport {NgbAlert} from './alert';\n\nexport {NgbAlert} from './alert';\nexport {NgbAlertConfig} from './alert-config';\n\n@NgModule({declarations: [NgbAlert], exports: [NgbAlert], imports: [CommonModule], entryComponents: [NgbAlert]})\nexport class NgbAlertModule {\n}\n","import {Directive} from '@angular/core';\n\n@Directive({\n selector: '[ngbButtonLabel]',\n host:\n {'[class.btn]': 'true', '[class.active]': 'active', '[class.disabled]': 'disabled', '[class.focus]': 'focused'}\n})\nexport class NgbButtonLabel {\n active: boolean;\n disabled: boolean;\n focused: boolean;\n}\n","import {ChangeDetectorRef, Directive, forwardRef, Input} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\n\nimport {NgbButtonLabel} from './label';\n\nconst NGB_CHECKBOX_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgbCheckBox),\n multi: true\n};\n\n\n/**\n * Allows to easily create Bootstrap-style checkbox buttons.\n *\n * Integrates with forms, so the value of a checked button is bound to the underlying form control\n * either in a reactive or template-driven way.\n */\n@Directive({\n selector: '[ngbButton][type=checkbox]',\n host: {\n 'autocomplete': 'off',\n '[checked]': 'checked',\n '[disabled]': 'disabled',\n '(change)': 'onInputChange($event)',\n '(focus)': 'focused = true',\n '(blur)': 'focused = false'\n },\n providers: [NGB_CHECKBOX_VALUE_ACCESSOR]\n})\nexport class NgbCheckBox implements ControlValueAccessor {\n checked;\n\n /**\n * If `true`, the checkbox button will be disabled\n */\n @Input() disabled = false;\n\n /**\n * The form control value when the checkbox is checked.\n */\n @Input() valueChecked = true;\n\n /**\n * The form control value when the checkbox is unchecked.\n */\n @Input() valueUnChecked = false;\n\n onChange = (_: any) => {};\n onTouched = () => {};\n\n set focused(isFocused: boolean) {\n this._label.focused = isFocused;\n if (!isFocused) {\n this.onTouched();\n }\n }\n\n constructor(private _label: NgbButtonLabel, private _cd: ChangeDetectorRef) {}\n\n onInputChange($event) {\n const modelToPropagate = $event.target.checked ? this.valueChecked : this.valueUnChecked;\n this.onChange(modelToPropagate);\n this.onTouched();\n this.writeValue(modelToPropagate);\n }\n\n registerOnChange(fn: (value: any) => any): void { this.onChange = fn; }\n\n registerOnTouched(fn: () => any): void { this.onTouched = fn; }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this._label.disabled = isDisabled;\n }\n\n writeValue(value) {\n this.checked = value === this.valueChecked;\n this._label.active = this.checked;\n\n // label won't be updated, if it is inside the OnPush component when [ngModel] changes\n this._cd.markForCheck();\n }\n}\n","import {ChangeDetectorRef, Directive, ElementRef, forwardRef, Input, OnDestroy, Renderer2} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\n\nimport {NgbButtonLabel} from './label';\n\nconst NGB_RADIO_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgbRadioGroup),\n multi: true\n};\n\nlet nextId = 0;\n\n/**\n * Allows to easily create Bootstrap-style radio buttons.\n *\n * Integrates with forms, so the value of a checked button is bound to the underlying form control\n * either in a reactive or template-driven way.\n */\n@Directive({selector: '[ngbRadioGroup]', host: {'role': 'radiogroup'}, providers: [NGB_RADIO_VALUE_ACCESSOR]})\nexport class NgbRadioGroup implements ControlValueAccessor {\n private _radios: Set = new Set();\n private _value = null;\n private _disabled: boolean;\n\n get disabled() { return this._disabled; }\n set disabled(isDisabled: boolean) { this.setDisabledState(isDisabled); }\n\n /**\n * Name of the radio group applied to radio input elements.\n *\n * Will be applied to all radio input elements inside the group,\n * unless [`NgbRadio`](#/components/buttons/api#NgbRadio)'s specify names themselves.\n *\n * If not provided, will be generated in the `ngb-radio-xx` format.\n */\n @Input() name = `ngb-radio-${nextId++}`;\n\n onChange = (_: any) => {};\n onTouched = () => {};\n\n onRadioChange(radio: NgbRadio) {\n this.writeValue(radio.value);\n this.onChange(radio.value);\n }\n\n onRadioValueUpdate() { this._updateRadiosValue(); }\n\n register(radio: NgbRadio) { this._radios.add(radio); }\n\n registerOnChange(fn: (value: any) => any): void { this.onChange = fn; }\n\n registerOnTouched(fn: () => any): void { this.onTouched = fn; }\n\n setDisabledState(isDisabled: boolean): void {\n this._disabled = isDisabled;\n this._updateRadiosDisabled();\n }\n\n unregister(radio: NgbRadio) { this._radios.delete(radio); }\n\n writeValue(value) {\n this._value = value;\n this._updateRadiosValue();\n }\n\n private _updateRadiosValue() { this._radios.forEach((radio) => radio.updateValue(this._value)); }\n private _updateRadiosDisabled() { this._radios.forEach((radio) => radio.updateDisabled()); }\n}\n\n\n/**\n * A directive that marks an input of type \"radio\" as a part of the\n * [`NgbRadioGroup`](#/components/buttons/api#NgbRadioGroup).\n */\n@Directive({\n selector: '[ngbButton][type=radio]',\n host: {\n '[checked]': 'checked',\n '[disabled]': 'disabled',\n '[name]': 'nameAttr',\n '(change)': 'onChange()',\n '(focus)': 'focused = true',\n '(blur)': 'focused = false'\n }\n})\nexport class NgbRadio implements OnDestroy {\n private _checked: boolean;\n private _disabled: boolean;\n private _value: any = null;\n\n /**\n * The value for the 'name' property of the input element.\n *\n * All inputs of the radio group should have the same name. If not specified,\n * the name of the enclosing group is used.\n */\n @Input() name: string;\n\n /**\n * The form control value when current radio button is checked.\n */\n @Input('value')\n set value(value: any) {\n this._value = value;\n const stringValue = value ? value.toString() : '';\n this._renderer.setProperty(this._element.nativeElement, 'value', stringValue);\n this._group.onRadioValueUpdate();\n }\n\n /**\n * If `true`, current radio button will be disabled.\n */\n @Input('disabled')\n set disabled(isDisabled: boolean) {\n this._disabled = isDisabled !== false;\n this.updateDisabled();\n }\n\n set focused(isFocused: boolean) {\n if (this._label) {\n this._label.focused = isFocused;\n }\n if (!isFocused) {\n this._group.onTouched();\n }\n }\n\n get checked() { return this._checked; }\n\n get disabled() { return this._group.disabled || this._disabled; }\n\n get value() { return this._value; }\n\n get nameAttr() { return this.name || this._group.name; }\n\n constructor(\n private _group: NgbRadioGroup, private _label: NgbButtonLabel, private _renderer: Renderer2,\n private _element: ElementRef, private _cd: ChangeDetectorRef) {\n this._group.register(this);\n this.updateDisabled();\n }\n\n ngOnDestroy() { this._group.unregister(this); }\n\n onChange() { this._group.onRadioChange(this); }\n\n updateValue(value) {\n // label won't be updated, if it is inside the OnPush component when [ngModel] changes\n if (this.value !== value) {\n this._cd.markForCheck();\n }\n\n this._checked = this.value === value;\n this._label.active = this._checked;\n }\n\n updateDisabled() { this._label.disabled = this.disabled; }\n}\n","import {NgModule} from '@angular/core';\nimport {NgbButtonLabel} from './label';\nimport {NgbCheckBox} from './checkbox';\nimport {NgbRadio, NgbRadioGroup} from './radio';\n\nexport {NgbButtonLabel} from './label';\nexport {NgbCheckBox} from './checkbox';\nexport {NgbRadio, NgbRadioGroup} from './radio';\n\n\nconst NGB_BUTTON_DIRECTIVES = [NgbButtonLabel, NgbCheckBox, NgbRadioGroup, NgbRadio];\n\n@NgModule({declarations: NGB_BUTTON_DIRECTIVES, exports: NGB_BUTTON_DIRECTIVES})\nexport class NgbButtonsModule {\n}\n","import {Injectable} from '@angular/core';\n\n/**\n * A configuration service for the [NgbCarousel](#/components/carousel/api#NgbCarousel) component.\n *\n * You can inject this service, typically in your root component, and customize its properties\n * to provide default values for all carousels used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbCarouselConfig {\n interval = 5000;\n wrap = true;\n keyboard = true;\n pauseOnHover = true;\n showNavigationArrows = true;\n showNavigationIndicators = true;\n}\n","import {\n AfterContentChecked,\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n Directive,\n EventEmitter,\n Inject,\n Input,\n NgZone,\n OnDestroy,\n Output,\n PLATFORM_ID,\n QueryList,\n TemplateRef,\n HostListener\n} from '@angular/core';\nimport {isPlatformBrowser} from '@angular/common';\n\nimport {NgbCarouselConfig} from './carousel-config';\n\nimport {Subject, timer, BehaviorSubject, combineLatest, NEVER} from 'rxjs';\nimport {startWith, map, switchMap, takeUntil, distinctUntilChanged} from 'rxjs/operators';\n\nlet nextId = 0;\n\n/**\n * A directive that wraps the individual carousel slide.\n */\n@Directive({selector: 'ng-template[ngbSlide]'})\nexport class NgbSlide {\n /**\n * Slide id that must be unique for the entire document.\n *\n * If not provided, will be generated in the `ngb-slide-xx` format.\n */\n @Input() id = `ngb-slide-${nextId++}`;\n constructor(public tplRef: TemplateRef) {}\n}\n\n/**\n * Carousel is a component to easily create and control slideshows.\n *\n * Allows to set intervals, change the way user interacts with the slides and provides a programmatic API.\n */\n@Component({\n selector: 'ngb-carousel',\n exportAs: 'ngbCarousel',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'carousel slide',\n '[style.display]': '\"block\"',\n 'tabIndex': '0',\n '(keydown.arrowLeft)': 'keyboard && prev(NgbSlideEventSource.ARROW_LEFT)',\n '(keydown.arrowRight)': 'keyboard && next(NgbSlideEventSource.ARROW_RIGHT)'\n },\n template: `\n
    \n
  1. \n
\n
\n
\n \n
\n
\n \n \n Previous\n \n \n \n Next\n \n `\n})\nexport class NgbCarousel implements AfterContentChecked,\n AfterContentInit, OnDestroy {\n @ContentChildren(NgbSlide) slides: QueryList;\n\n public NgbSlideEventSource = NgbSlideEventSource;\n\n private _destroy$ = new Subject();\n private _interval$ = new BehaviorSubject(0);\n private _mouseHover$ = new BehaviorSubject(false);\n private _pauseOnHover$ = new BehaviorSubject(false);\n private _pause$ = new BehaviorSubject(false);\n private _wrap$ = new BehaviorSubject(false);\n\n /**\n * The slide id that should be displayed **initially**.\n *\n * For subsequent interactions use methods `select()`, `next()`, etc. and the `(slide)` output.\n */\n @Input() activeId: string;\n\n /**\n * Time in milliseconds before the next slide is shown.\n */\n @Input()\n set interval(value: number) {\n this._interval$.next(value);\n }\n\n get interval() { return this._interval$.value; }\n\n /**\n * If `true`, will 'wrap' the carousel by switching from the last slide back to the first.\n */\n @Input()\n set wrap(value: boolean) {\n this._wrap$.next(value);\n }\n\n get wrap() { return this._wrap$.value; }\n\n /**\n * If `true`, allows to interact with carousel using keyboard 'arrow left' and 'arrow right'.\n */\n @Input() keyboard: boolean;\n\n /**\n * If `true`, will pause slide switching when mouse cursor hovers the slide.\n *\n * @since 2.2.0\n */\n @Input()\n set pauseOnHover(value: boolean) {\n this._pauseOnHover$.next(value);\n }\n\n get pauseOnHover() { return this._pauseOnHover$.value; }\n\n /**\n * If `true`, 'previous' and 'next' navigation arrows will be visible on the slide.\n *\n * @since 2.2.0\n */\n @Input() showNavigationArrows: boolean;\n\n /**\n * If `true`, navigation indicators at the bottom of the slide will be visible.\n *\n * @since 2.2.0\n */\n @Input() showNavigationIndicators: boolean;\n\n /**\n * An event emitted right after the slide transition is completed.\n *\n * See [`NgbSlideEvent`](#/components/carousel/api#NgbSlideEvent) for payload details.\n */\n @Output() slide = new EventEmitter();\n\n constructor(\n config: NgbCarouselConfig, @Inject(PLATFORM_ID) private _platformId, private _ngZone: NgZone,\n private _cd: ChangeDetectorRef) {\n this.interval = config.interval;\n this.wrap = config.wrap;\n this.keyboard = config.keyboard;\n this.pauseOnHover = config.pauseOnHover;\n this.showNavigationArrows = config.showNavigationArrows;\n this.showNavigationIndicators = config.showNavigationIndicators;\n }\n\n @HostListener('mouseenter')\n mouseEnter() {\n this._mouseHover$.next(true);\n }\n\n @HostListener('mouseleave')\n mouseLeave() {\n this._mouseHover$.next(false);\n }\n\n ngAfterContentInit() {\n // setInterval() doesn't play well with SSR and protractor,\n // so we should run it in the browser and outside Angular\n if (isPlatformBrowser(this._platformId)) {\n this._ngZone.runOutsideAngular(() => {\n const hasNextSlide$ = combineLatest(\n this.slide.pipe(map(slideEvent => slideEvent.current), startWith(this.activeId)),\n this._wrap$, this.slides.changes.pipe(startWith(null)))\n .pipe(\n map(([currentSlideId, wrap]) => {\n const slideArr = this.slides.toArray();\n const currentSlideIdx = this._getSlideIdxById(currentSlideId);\n return wrap ? slideArr.length > 1 : currentSlideIdx < slideArr.length - 1;\n }),\n distinctUntilChanged());\n combineLatest(this._pause$, this._pauseOnHover$, this._mouseHover$, this._interval$, hasNextSlide$)\n .pipe(\n map(([pause, pauseOnHover, mouseHover, interval, hasNextSlide]) =>\n ((pause || (pauseOnHover && mouseHover) || !hasNextSlide) ? 0 : interval)),\n\n distinctUntilChanged(), switchMap(interval => interval > 0 ? timer(interval, interval) : NEVER),\n takeUntil(this._destroy$))\n .subscribe(() => this._ngZone.run(() => this.next(NgbSlideEventSource.TIMER)));\n });\n }\n\n this.slides.changes.pipe(takeUntil(this._destroy$)).subscribe(() => this._cd.markForCheck());\n }\n\n ngAfterContentChecked() {\n let activeSlide = this._getSlideById(this.activeId);\n this.activeId = activeSlide ? activeSlide.id : (this.slides.length ? this.slides.first.id : null);\n }\n\n ngOnDestroy() { this._destroy$.next(); }\n\n /**\n * Navigates to a slide with the specified identifier.\n */\n select(slideId: string, source?: NgbSlideEventSource) {\n this._cycleToSelected(slideId, this._getSlideEventDirection(this.activeId, slideId), source);\n }\n\n /**\n * Navigates to the previous slide.\n */\n prev(source?: NgbSlideEventSource) {\n this._cycleToSelected(this._getPrevSlide(this.activeId), NgbSlideEventDirection.RIGHT, source);\n }\n\n /**\n * Navigates to the next slide.\n */\n next(source?: NgbSlideEventSource) {\n this._cycleToSelected(this._getNextSlide(this.activeId), NgbSlideEventDirection.LEFT, source);\n }\n\n /**\n * Pauses cycling through the slides.\n */\n pause() { this._pause$.next(true); }\n\n /**\n * Restarts cycling through the slides from left to right.\n */\n cycle() { this._pause$.next(false); }\n\n private _cycleToSelected(slideIdx: string, direction: NgbSlideEventDirection, source?: NgbSlideEventSource) {\n let selectedSlide = this._getSlideById(slideIdx);\n if (selectedSlide && selectedSlide.id !== this.activeId) {\n this.slide.emit(\n {prev: this.activeId, current: selectedSlide.id, direction: direction, paused: this._pause$.value, source});\n this.activeId = selectedSlide.id;\n }\n\n // we get here after the interval fires or any external API call like next(), prev() or select()\n this._cd.markForCheck();\n }\n\n private _getSlideEventDirection(currentActiveSlideId: string, nextActiveSlideId: string): NgbSlideEventDirection {\n const currentActiveSlideIdx = this._getSlideIdxById(currentActiveSlideId);\n const nextActiveSlideIdx = this._getSlideIdxById(nextActiveSlideId);\n\n return currentActiveSlideIdx > nextActiveSlideIdx ? NgbSlideEventDirection.RIGHT : NgbSlideEventDirection.LEFT;\n }\n\n private _getSlideById(slideId: string): NgbSlide { return this.slides.find(slide => slide.id === slideId); }\n\n private _getSlideIdxById(slideId: string): number {\n return this.slides.toArray().indexOf(this._getSlideById(slideId));\n }\n\n private _getNextSlide(currentSlideId: string): string {\n const slideArr = this.slides.toArray();\n const currentSlideIdx = this._getSlideIdxById(currentSlideId);\n const isLastSlide = currentSlideIdx === slideArr.length - 1;\n\n return isLastSlide ? (this.wrap ? slideArr[0].id : slideArr[slideArr.length - 1].id) :\n slideArr[currentSlideIdx + 1].id;\n }\n\n private _getPrevSlide(currentSlideId: string): string {\n const slideArr = this.slides.toArray();\n const currentSlideIdx = this._getSlideIdxById(currentSlideId);\n const isFirstSlide = currentSlideIdx === 0;\n\n return isFirstSlide ? (this.wrap ? slideArr[slideArr.length - 1].id : slideArr[0].id) :\n slideArr[currentSlideIdx - 1].id;\n }\n}\n\n/**\n * A slide change event emitted right after the slide transition is completed.\n */\nexport interface NgbSlideEvent {\n /**\n * The previous slide id.\n */\n prev: string;\n\n /**\n * The current slide id.\n */\n current: string;\n\n /**\n * The slide event direction.\n *\n * Possible values are `'left' | 'right'`.\n */\n direction: NgbSlideEventDirection;\n\n /**\n * Whether the pause() method was called (and no cycle() call was done afterwards).\n *\n * @since 5.1.0\n */\n paused: boolean;\n\n /**\n * Source triggering the slide change event.\n *\n * Possible values are `'timer' | 'arrowLeft' | 'arrowRight' | 'indicator'`\n *\n * @since 5.1.0\n */\n source?: NgbSlideEventSource;\n}\n\n/**\n * Defines the carousel slide transition direction.\n */\nexport enum NgbSlideEventDirection {\n LEFT = 'left',\n RIGHT = 'right'\n}\n\nexport enum NgbSlideEventSource {\n TIMER = 'timer',\n ARROW_LEFT = 'arrowLeft',\n ARROW_RIGHT = 'arrowRight',\n INDICATOR = 'indicator'\n}\n\nexport const NGB_CAROUSEL_DIRECTIVES = [NgbCarousel, NgbSlide];\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\nimport {NGB_CAROUSEL_DIRECTIVES} from './carousel';\n\nexport {NgbCarousel, NgbSlide, NgbSlideEvent, NgbSlideEventDirection, NgbSlideEventSource} from './carousel';\nexport {NgbCarouselConfig} from './carousel-config';\n\n@NgModule({declarations: NGB_CAROUSEL_DIRECTIVES, exports: NGB_CAROUSEL_DIRECTIVES, imports: [CommonModule]})\nexport class NgbCarouselModule {\n}\n","import {Directive, Input} from '@angular/core';\n\n/**\n * A directive to provide a simple way of hiding and showing elements on the page.\n */\n@Directive({\n selector: '[ngbCollapse]',\n exportAs: 'ngbCollapse',\n host: {'[class.collapse]': 'true', '[class.show]': '!collapsed'}\n})\nexport class NgbCollapse {\n /**\n * If `true`, will collapse the element or show it otherwise.\n */\n @Input('ngbCollapse') collapsed = false;\n}\n","import {NgModule} from '@angular/core';\nimport {NgbCollapse} from './collapse';\n\nexport {NgbCollapse} from './collapse';\n\n@NgModule({declarations: [NgbCollapse], exports: [NgbCollapse]})\nexport class NgbCollapseModule {\n}\n","import {NgbDateStruct} from './ngb-date-struct';\nimport {isInteger} from '../util/util';\n\n/**\n * A simple class that represents a date that datepicker also uses internally.\n *\n * It is the implementation of the `NgbDateStruct` interface that adds some convenience methods,\n * like `.equals()`, `.before()`, etc.\n *\n * All datepicker APIs consume `NgbDateStruct`, but return `NgbDate`.\n *\n * In many cases it is simpler to manipulate these objects together with\n * [`NgbCalendar`](#/components/datepicker/api#NgbCalendar) than native JS Dates.\n *\n * See the [date format overview](#/components/datepicker/overview#date-model) for more details.\n *\n * @since 3.0.0\n */\nexport class NgbDate implements NgbDateStruct {\n /**\n * The year, for example 2016\n */\n year: number;\n\n /**\n * The month, for example 1=Jan ... 12=Dec as in ISO 8601\n */\n month: number;\n\n /**\n * The day of month, starting with 1\n */\n day: number;\n\n /**\n * A **static method** that creates a new date object from the `NgbDateStruct`,\n *\n * ex. `NgbDate.from({year: 2000, month: 5, day: 1})`.\n *\n * If the `date` is already of `NgbDate` type, the method will return the same object.\n */\n static from(date: NgbDateStruct): NgbDate {\n if (date instanceof NgbDate) {\n return date;\n }\n return date ? new NgbDate(date.year, date.month, date.day) : null;\n }\n\n constructor(year: number, month: number, day: number) {\n this.year = isInteger(year) ? year : null;\n this.month = isInteger(month) ? month : null;\n this.day = isInteger(day) ? day : null;\n }\n\n /**\n * Checks if the current date is equal to another date.\n */\n equals(other: NgbDateStruct): boolean {\n return other && this.year === other.year && this.month === other.month && this.day === other.day;\n }\n\n /**\n * Checks if the current date is before another date.\n */\n before(other: NgbDateStruct): boolean {\n if (!other) {\n return false;\n }\n\n if (this.year === other.year) {\n if (this.month === other.month) {\n return this.day === other.day ? false : this.day < other.day;\n } else {\n return this.month < other.month;\n }\n } else {\n return this.year < other.year;\n }\n }\n\n /**\n * Checks if the current date is after another date.\n */\n after(other: NgbDateStruct): boolean {\n if (!other) {\n return false;\n }\n if (this.year === other.year) {\n if (this.month === other.month) {\n return this.day === other.day ? false : this.day > other.day;\n } else {\n return this.month > other.month;\n }\n } else {\n return this.year > other.year;\n }\n }\n}\n","import {NgbDate} from './ngb-date';\nimport {Injectable} from '@angular/core';\nimport {isInteger} from '../util/util';\n\nexport function fromJSDate(jsDate: Date) {\n return new NgbDate(jsDate.getFullYear(), jsDate.getMonth() + 1, jsDate.getDate());\n}\nexport function toJSDate(date: NgbDate) {\n const jsDate = new Date(date.year, date.month - 1, date.day, 12);\n // this is done avoid 30 -> 1930 conversion\n if (!isNaN(jsDate.getTime())) {\n jsDate.setFullYear(date.year);\n }\n return jsDate;\n}\n\nexport type NgbPeriod = 'y' | 'm' | 'd';\n\nexport function NGB_DATEPICKER_CALENDAR_FACTORY() {\n return new NgbCalendarGregorian();\n}\n\n/**\n * A service that represents the calendar used by the datepicker.\n *\n * The default implementation uses the Gregorian calendar. You can inject it in your own\n * implementations if necessary to simplify `NgbDate` calculations.\n */\n@Injectable({providedIn: 'root', useFactory: NGB_DATEPICKER_CALENDAR_FACTORY})\nexport abstract class NgbCalendar {\n /**\n * Returns the number of days per week.\n */\n abstract getDaysPerWeek(): number;\n\n /**\n * Returns an array of months per year.\n *\n * With default calendar we use ISO 8601 and return [1, 2, ..., 12];\n */\n abstract getMonths(year?: number): number[];\n\n /**\n * Returns the number of weeks per month.\n */\n abstract getWeeksPerMonth(): number;\n\n /**\n * Returns the weekday number for a given day.\n *\n * With the default calendar we use ISO 8601: 'weekday' is 1=Mon ... 7=Sun\n */\n abstract getWeekday(date: NgbDate): number;\n\n /**\n * Adds a number of years, months or days to a given date.\n *\n * * `period` can be `y`, `m` or `d` and defaults to day.\n * * `number` defaults to 1.\n *\n * Always returns a new date.\n */\n abstract getNext(date: NgbDate, period?: NgbPeriod, number?: number): NgbDate;\n\n /**\n * Subtracts a number of years, months or days from a given date.\n *\n * * `period` can be `y`, `m` or `d` and defaults to day.\n * * `number` defaults to 1.\n *\n * Always returns a new date.\n */\n abstract getPrev(date: NgbDate, period?: NgbPeriod, number?: number): NgbDate;\n\n /**\n * Returns the week number for a given week.\n */\n abstract getWeekNumber(week: NgbDate[], firstDayOfWeek: number): number;\n\n /**\n * Returns the today's date.\n */\n abstract getToday(): NgbDate;\n\n /**\n * Checks if a date is valid in the current calendar.\n */\n abstract isValid(date: NgbDate): boolean;\n}\n\n@Injectable()\nexport class NgbCalendarGregorian extends NgbCalendar {\n getDaysPerWeek() { return 7; }\n\n getMonths() { return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; }\n\n getWeeksPerMonth() { return 6; }\n\n getNext(date: NgbDate, period: NgbPeriod = 'd', number = 1) {\n let jsDate = toJSDate(date);\n\n switch (period) {\n case 'y':\n return new NgbDate(date.year + number, 1, 1);\n case 'm':\n jsDate = new Date(date.year, date.month + number - 1, 1, 12);\n break;\n case 'd':\n jsDate.setDate(jsDate.getDate() + number);\n break;\n default:\n return date;\n }\n\n return fromJSDate(jsDate);\n }\n\n getPrev(date: NgbDate, period: NgbPeriod = 'd', number = 1) { return this.getNext(date, period, -number); }\n\n getWeekday(date: NgbDate) {\n let jsDate = toJSDate(date);\n let day = jsDate.getDay();\n // in JS Date Sun=0, in ISO 8601 Sun=7\n return day === 0 ? 7 : day;\n }\n\n getWeekNumber(week: NgbDate[], firstDayOfWeek: number) {\n // in JS Date Sun=0, in ISO 8601 Sun=7\n if (firstDayOfWeek === 7) {\n firstDayOfWeek = 0;\n }\n\n const thursdayIndex = (4 + 7 - firstDayOfWeek) % 7;\n let date = week[thursdayIndex];\n\n const jsDate = toJSDate(date);\n jsDate.setDate(jsDate.getDate() + 4 - (jsDate.getDay() || 7)); // Thursday\n const time = jsDate.getTime();\n jsDate.setMonth(0); // Compare with Jan 1\n jsDate.setDate(1);\n return Math.floor(Math.round((time - jsDate.getTime()) / 86400000) / 7) + 1;\n }\n\n getToday(): NgbDate { return fromJSDate(new Date()); }\n\n isValid(date: NgbDate): boolean {\n if (!date || !isInteger(date.year) || !isInteger(date.month) || !isInteger(date.day)) {\n return false;\n }\n\n // year 0 doesn't exist in Gregorian calendar\n if (date.year === 0) {\n return false;\n }\n\n const jsDate = toJSDate(date);\n\n return !isNaN(jsDate.getTime()) && jsDate.getFullYear() === date.year && jsDate.getMonth() + 1 === date.month &&\n jsDate.getDate() === date.day;\n }\n}\n","import {NgbDate} from './ngb-date';\nimport {DatepickerViewModel, DayViewModel, MonthViewModel} from './datepicker-view-model';\nimport {NgbCalendar} from './ngb-calendar';\nimport {isDefined} from '../util/util';\nimport {NgbDatepickerI18n} from './datepicker-i18n';\n\nexport function isChangedDate(prev: NgbDate, next: NgbDate) {\n return !dateComparator(prev, next);\n}\n\nexport function isChangedMonth(prev: NgbDate, next: NgbDate) {\n return !prev && !next ? false : !prev || !next ? true : prev.year !== next.year || prev.month !== next.month;\n}\n\nexport function dateComparator(prev: NgbDate, next: NgbDate) {\n return (!prev && !next) || (!!prev && !!next && prev.equals(next));\n}\n\nexport function checkMinBeforeMax(minDate: NgbDate, maxDate: NgbDate) {\n if (maxDate && minDate && maxDate.before(minDate)) {\n throw new Error(`'maxDate' ${maxDate} should be greater than 'minDate' ${minDate}`);\n }\n}\n\nexport function checkDateInRange(date: NgbDate, minDate: NgbDate, maxDate: NgbDate): NgbDate {\n if (date && minDate && date.before(minDate)) {\n return minDate;\n }\n if (date && maxDate && date.after(maxDate)) {\n return maxDate;\n }\n\n return date;\n}\n\nexport function isDateSelectable(date: NgbDate, state: DatepickerViewModel) {\n const {minDate, maxDate, disabled, markDisabled} = state;\n // clang-format off\n return !(\n !isDefined(date) ||\n disabled ||\n (markDisabled && markDisabled(date, {year: date.year, month: date.month})) ||\n (minDate && date.before(minDate)) ||\n (maxDate && date.after(maxDate))\n );\n // clang-format on\n}\n\nexport function generateSelectBoxMonths(calendar: NgbCalendar, date: NgbDate, minDate: NgbDate, maxDate: NgbDate) {\n if (!date) {\n return [];\n }\n\n let months = calendar.getMonths(date.year);\n\n if (minDate && date.year === minDate.year) {\n const index = months.findIndex(month => month === minDate.month);\n months = months.slice(index);\n }\n\n if (maxDate && date.year === maxDate.year) {\n const index = months.findIndex(month => month === maxDate.month);\n months = months.slice(0, index + 1);\n }\n\n return months;\n}\n\nexport function generateSelectBoxYears(date: NgbDate, minDate: NgbDate, maxDate: NgbDate) {\n if (!date) {\n return [];\n }\n\n const start = minDate && minDate.year || date.year - 10;\n const end = maxDate && maxDate.year || date.year + 10;\n\n return Array.from({length: end - start + 1}, (e, i) => start + i);\n}\n\nexport function nextMonthDisabled(calendar: NgbCalendar, date: NgbDate, maxDate: NgbDate) {\n return maxDate && calendar.getNext(date, 'm').after(maxDate);\n}\n\nexport function prevMonthDisabled(calendar: NgbCalendar, date: NgbDate, minDate: NgbDate) {\n const prevDate = calendar.getPrev(date, 'm');\n return minDate && (prevDate.year === minDate.year && prevDate.month < minDate.month ||\n prevDate.year < minDate.year && minDate.month === 1);\n}\n\nexport function buildMonths(\n calendar: NgbCalendar, date: NgbDate, state: DatepickerViewModel, i18n: NgbDatepickerI18n,\n force: boolean): MonthViewModel[] {\n const {displayMonths, months} = state;\n // move old months to a temporary array\n const monthsToReuse = months.splice(0, months.length);\n\n // generate new first dates, nullify or reuse months\n const firstDates = Array.from({length: displayMonths}, (_, i) => {\n const firstDate = calendar.getNext(date, 'm', i);\n months[i] = null;\n\n if (!force) {\n const reusedIndex = monthsToReuse.findIndex(month => month.firstDate.equals(firstDate));\n // move reused month back to months\n if (reusedIndex !== -1) {\n months[i] = monthsToReuse.splice(reusedIndex, 1)[0];\n }\n }\n\n return firstDate;\n });\n\n // rebuild nullified months\n firstDates.forEach((firstDate, i) => {\n if (months[i] === null) {\n months[i] = buildMonth(calendar, firstDate, state, i18n, monthsToReuse.shift() || {} as MonthViewModel);\n }\n });\n\n return months;\n}\n\nexport function buildMonth(\n calendar: NgbCalendar, date: NgbDate, state: DatepickerViewModel, i18n: NgbDatepickerI18n,\n month: MonthViewModel = {} as MonthViewModel): MonthViewModel {\n const {dayTemplateData, minDate, maxDate, firstDayOfWeek, markDisabled, outsideDays} = state;\n const calendarToday = calendar.getToday();\n\n month.firstDate = null;\n month.lastDate = null;\n month.number = date.month;\n month.year = date.year;\n month.weeks = month.weeks || [];\n month.weekdays = month.weekdays || [];\n\n date = getFirstViewDate(calendar, date, firstDayOfWeek);\n\n // month has weeks\n for (let week = 0; week < calendar.getWeeksPerMonth(); week++) {\n let weekObject = month.weeks[week];\n if (!weekObject) {\n weekObject = month.weeks[week] = {number: 0, days: [], collapsed: true};\n }\n const days = weekObject.days;\n\n // week has days\n for (let day = 0; day < calendar.getDaysPerWeek(); day++) {\n if (week === 0) {\n month.weekdays[day] = calendar.getWeekday(date);\n }\n\n const newDate = new NgbDate(date.year, date.month, date.day);\n const nextDate = calendar.getNext(newDate);\n\n const ariaLabel = i18n.getDayAriaLabel(newDate);\n\n // marking date as disabled\n let disabled = !!((minDate && newDate.before(minDate)) || (maxDate && newDate.after(maxDate)));\n if (!disabled && markDisabled) {\n disabled = markDisabled(newDate, {month: month.number, year: month.year});\n }\n\n // today\n let today = newDate.equals(calendarToday);\n\n // adding user-provided data to the context\n let contextUserData =\n dayTemplateData ? dayTemplateData(newDate, {month: month.number, year: month.year}) : undefined;\n\n // saving first date of the month\n if (month.firstDate === null && newDate.month === month.number) {\n month.firstDate = newDate;\n }\n\n // saving last date of the month\n if (newDate.month === month.number && nextDate.month !== month.number) {\n month.lastDate = newDate;\n }\n\n let dayObject = days[day];\n if (!dayObject) {\n dayObject = days[day] = {} as DayViewModel;\n }\n dayObject.date = newDate;\n dayObject.context = Object.assign(dayObject.context || {}, {\n $implicit: newDate,\n date: newDate,\n data: contextUserData,\n currentMonth: month.number, disabled,\n focused: false,\n selected: false, today\n });\n dayObject.tabindex = -1;\n dayObject.ariaLabel = ariaLabel;\n dayObject.hidden = false;\n\n date = nextDate;\n }\n\n weekObject.number = calendar.getWeekNumber(days.map(day => day.date), firstDayOfWeek);\n\n // marking week as collapsed\n weekObject.collapsed = outsideDays === 'collapsed' && days[0].date.month !== month.number &&\n days[days.length - 1].date.month !== month.number;\n }\n\n return month;\n}\n\nexport function getFirstViewDate(calendar: NgbCalendar, date: NgbDate, firstDayOfWeek: number): NgbDate {\n const daysPerWeek = calendar.getDaysPerWeek();\n const firstMonthDate = new NgbDate(date.year, date.month, 1);\n const dayOfWeek = calendar.getWeekday(firstMonthDate) % daysPerWeek;\n return calendar.getPrev(firstMonthDate, 'd', (daysPerWeek + dayOfWeek - firstDayOfWeek) % daysPerWeek);\n}\n","import {Inject, Injectable, LOCALE_ID} from '@angular/core';\nimport {FormStyle, getLocaleDayNames, getLocaleMonthNames, TranslationWidth, formatDate} from '@angular/common';\nimport {NgbDateStruct} from './ngb-date-struct';\n\nexport function NGB_DATEPICKER_18N_FACTORY(locale) {\n return new NgbDatepickerI18nDefault(locale);\n}\n\n/**\n * A service supplying i18n data to the datepicker component.\n *\n * The default implementation of this service uses the Angular locale and registered locale data for\n * weekdays and month names (as explained in the Angular i18n guide).\n *\n * It also provides a way to i18n data that depends on calendar calculations, like aria labels, day, week and year\n * numerals. For other static labels the datepicker uses the default Angular i18n.\n *\n * See the [i18n demo](#/components/datepicker/examples#i18n) and\n * [Hebrew calendar demo](#/components/datepicker/calendars#hebrew) on how to extend this class and define\n * a custom provider for i18n.\n */\n@Injectable({providedIn: 'root', useFactory: NGB_DATEPICKER_18N_FACTORY, deps: [LOCALE_ID]})\nexport abstract class NgbDatepickerI18n {\n /**\n * Returns the short weekday name to display in the heading of the month view.\n *\n * With default calendar we use ISO 8601: 'weekday' is 1=Mon ... 7=Sun.\n */\n abstract getWeekdayShortName(weekday: number): string;\n\n /**\n * Returns the short month name to display in the date picker navigation.\n *\n * With default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec.\n */\n abstract getMonthShortName(month: number, year?: number): string;\n\n /**\n * Returns the full month name to display in the date picker navigation.\n *\n * With default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec.\n */\n abstract getMonthFullName(month: number, year?: number): string;\n\n /**\n * Returns the value of the `aria-label` attribute for a specific date.\n *\n * @since 2.0.0\n */\n abstract getDayAriaLabel(date: NgbDateStruct): string;\n\n /**\n * Returns the textual representation of a day that is rendered in a day cell.\n *\n * @since 3.0.0\n */\n getDayNumerals(date: NgbDateStruct): string { return `${date.day}`; }\n\n /**\n * Returns the textual representation of a week number rendered by datepicker.\n *\n * @since 3.0.0\n */\n getWeekNumerals(weekNumber: number): string { return `${weekNumber}`; }\n\n /**\n * Returns the textual representation of a year that is rendered in the datepicker year select box.\n *\n * @since 3.0.0\n */\n getYearNumerals(year: number): string { return `${year}`; }\n}\n\n@Injectable()\nexport class NgbDatepickerI18nDefault extends NgbDatepickerI18n {\n private _weekdaysShort: Array;\n private _monthsShort: Array;\n private _monthsFull: Array;\n\n constructor(@Inject(LOCALE_ID) private _locale: string) {\n super();\n\n const weekdaysStartingOnSunday = getLocaleDayNames(_locale, FormStyle.Standalone, TranslationWidth.Short);\n this._weekdaysShort = weekdaysStartingOnSunday.map((day, index) => weekdaysStartingOnSunday[(index + 1) % 7]);\n\n this._monthsShort = getLocaleMonthNames(_locale, FormStyle.Standalone, TranslationWidth.Abbreviated);\n this._monthsFull = getLocaleMonthNames(_locale, FormStyle.Standalone, TranslationWidth.Wide);\n }\n\n getWeekdayShortName(weekday: number): string { return this._weekdaysShort[weekday - 1]; }\n\n getMonthShortName(month: number): string { return this._monthsShort[month - 1]; }\n\n getMonthFullName(month: number): string { return this._monthsFull[month - 1]; }\n\n getDayAriaLabel(date: NgbDateStruct): string {\n const jsDate = new Date(date.year, date.month - 1, date.day);\n return formatDate(jsDate, 'fullDate', this._locale);\n }\n}\n","import {NgbCalendar, NgbPeriod} from './ngb-calendar';\nimport {NgbDate} from './ngb-date';\nimport {NgbDateStruct} from './ngb-date-struct';\nimport {DatepickerViewModel, NgbDayTemplateData, NgbMarkDisabled} from './datepicker-view-model';\nimport {Injectable} from '@angular/core';\nimport {isInteger, toInteger} from '../util/util';\nimport {Observable, Subject} from 'rxjs';\nimport {\n buildMonths,\n checkDateInRange,\n checkMinBeforeMax,\n isChangedDate,\n isChangedMonth,\n isDateSelectable,\n generateSelectBoxYears,\n generateSelectBoxMonths,\n prevMonthDisabled,\n nextMonthDisabled\n} from './datepicker-tools';\n\nimport {filter} from 'rxjs/operators';\nimport {NgbDatepickerI18n} from './datepicker-i18n';\n\n@Injectable()\nexport class NgbDatepickerService {\n private _model$ = new Subject();\n\n private _select$ = new Subject();\n\n private _state: DatepickerViewModel = {\n disabled: false,\n displayMonths: 1,\n firstDayOfWeek: 1,\n focusVisible: false,\n months: [],\n navigation: 'select',\n outsideDays: 'visible',\n prevDisabled: false,\n nextDisabled: false,\n selectBoxes: {years: [], months: []},\n selectedDate: null\n };\n\n get model$(): Observable { return this._model$.pipe(filter(model => model.months.length > 0)); }\n\n get select$(): Observable { return this._select$.pipe(filter(date => date !== null)); }\n\n set dayTemplateData(dayTemplateData: NgbDayTemplateData) {\n if (this._state.dayTemplateData !== dayTemplateData) {\n this._nextState({dayTemplateData});\n }\n }\n\n set disabled(disabled: boolean) {\n if (this._state.disabled !== disabled) {\n this._nextState({disabled});\n }\n }\n\n set displayMonths(displayMonths: number) {\n displayMonths = toInteger(displayMonths);\n if (isInteger(displayMonths) && displayMonths > 0 && this._state.displayMonths !== displayMonths) {\n this._nextState({displayMonths});\n }\n }\n\n set firstDayOfWeek(firstDayOfWeek: number) {\n firstDayOfWeek = toInteger(firstDayOfWeek);\n if (isInteger(firstDayOfWeek) && firstDayOfWeek >= 0 && this._state.firstDayOfWeek !== firstDayOfWeek) {\n this._nextState({firstDayOfWeek});\n }\n }\n\n set focusVisible(focusVisible: boolean) {\n if (this._state.focusVisible !== focusVisible && !this._state.disabled) {\n this._nextState({focusVisible});\n }\n }\n\n set maxDate(date: NgbDate) {\n const maxDate = this.toValidDate(date, null);\n if (isChangedDate(this._state.maxDate, maxDate)) {\n this._nextState({maxDate});\n }\n }\n\n set markDisabled(markDisabled: NgbMarkDisabled) {\n if (this._state.markDisabled !== markDisabled) {\n this._nextState({markDisabled});\n }\n }\n\n set minDate(date: NgbDate) {\n const minDate = this.toValidDate(date, null);\n if (isChangedDate(this._state.minDate, minDate)) {\n this._nextState({minDate});\n }\n }\n\n set navigation(navigation: 'select' | 'arrows' | 'none') {\n if (this._state.navigation !== navigation) {\n this._nextState({navigation});\n }\n }\n\n set outsideDays(outsideDays: 'visible' | 'collapsed' | 'hidden') {\n if (this._state.outsideDays !== outsideDays) {\n this._nextState({outsideDays});\n }\n }\n\n constructor(private _calendar: NgbCalendar, private _i18n: NgbDatepickerI18n) {}\n\n focus(date: NgbDate) {\n if (!this._state.disabled && this._calendar.isValid(date) && isChangedDate(this._state.focusDate, date)) {\n this._nextState({focusDate: date});\n }\n }\n\n focusMove(period?: NgbPeriod, number?: number) {\n this.focus(this._calendar.getNext(this._state.focusDate, period, number));\n }\n\n focusSelect() {\n if (isDateSelectable(this._state.focusDate, this._state)) {\n this.select(this._state.focusDate, {emitEvent: true});\n }\n }\n\n open(date: NgbDate) {\n const firstDate = this.toValidDate(date, this._calendar.getToday());\n if (!this._state.disabled && (!this._state.firstDate || isChangedMonth(this._state.firstDate, date))) {\n this._nextState({firstDate});\n }\n }\n\n select(date: NgbDate, options: {emitEvent?: boolean} = {}) {\n const selectedDate = this.toValidDate(date, null);\n if (!this._state.disabled) {\n if (isChangedDate(this._state.selectedDate, selectedDate)) {\n this._nextState({selectedDate});\n }\n\n if (options.emitEvent && isDateSelectable(selectedDate, this._state)) {\n this._select$.next(selectedDate);\n }\n }\n }\n\n toValidDate(date: NgbDateStruct, defaultValue?: NgbDate): NgbDate {\n const ngbDate = NgbDate.from(date);\n if (defaultValue === undefined) {\n defaultValue = this._calendar.getToday();\n }\n return this._calendar.isValid(ngbDate) ? ngbDate : defaultValue;\n }\n\n private _nextState(patch: Partial) {\n const newState = this._updateState(patch);\n this._patchContexts(newState);\n this._state = newState;\n this._model$.next(this._state);\n }\n\n private _patchContexts(state: DatepickerViewModel) {\n const {months, displayMonths, selectedDate, focusDate, focusVisible, disabled, outsideDays} = state;\n state.months.forEach(month => {\n month.weeks.forEach(week => {\n week.days.forEach(day => {\n\n // patch focus flag\n if (focusDate) {\n day.context.focused = focusDate.equals(day.date) && focusVisible;\n }\n\n // calculating tabindex\n day.tabindex = !disabled && day.date.equals(focusDate) && focusDate.month === month.number ? 0 : -1;\n\n // override context disabled\n if (disabled === true) {\n day.context.disabled = true;\n }\n\n // patch selection flag\n if (selectedDate !== undefined) {\n day.context.selected = selectedDate !== null && selectedDate.equals(day.date);\n }\n\n // visibility\n if (month.number !== day.date.month) {\n day.hidden = outsideDays === 'hidden' || outsideDays === 'collapsed' ||\n (displayMonths > 1 && day.date.after(months[0].firstDate) &&\n day.date.before(months[displayMonths - 1].lastDate));\n }\n });\n });\n });\n }\n\n private _updateState(patch: Partial): DatepickerViewModel {\n // patching fields\n const state = Object.assign({}, this._state, patch);\n\n let startDate = state.firstDate;\n\n // min/max dates changed\n if ('minDate' in patch || 'maxDate' in patch) {\n checkMinBeforeMax(state.minDate, state.maxDate);\n state.focusDate = checkDateInRange(state.focusDate, state.minDate, state.maxDate);\n state.firstDate = checkDateInRange(state.firstDate, state.minDate, state.maxDate);\n startDate = state.focusDate;\n }\n\n // disabled\n if ('disabled' in patch) {\n state.focusVisible = false;\n }\n\n // initial rebuild via 'select()'\n if ('selectedDate' in patch && this._state.months.length === 0) {\n startDate = state.selectedDate;\n }\n\n // terminate early if only focus visibility was changed\n if ('focusVisible' in patch) {\n return state;\n }\n\n // focus date changed\n if ('focusDate' in patch) {\n state.focusDate = checkDateInRange(state.focusDate, state.minDate, state.maxDate);\n startDate = state.focusDate;\n\n // nothing to rebuild if only focus changed and it is still visible\n if (state.months.length !== 0 && !state.focusDate.before(state.firstDate) &&\n !state.focusDate.after(state.lastDate)) {\n return state;\n }\n }\n\n // first date changed\n if ('firstDate' in patch) {\n state.firstDate = checkDateInRange(state.firstDate, state.minDate, state.maxDate);\n startDate = state.firstDate;\n }\n\n // rebuilding months\n if (startDate) {\n const forceRebuild = 'dayTemplateData' in patch || 'firstDayOfWeek' in patch || 'markDisabled' in patch ||\n 'minDate' in patch || 'maxDate' in patch || 'disabled' in patch || 'outsideDays' in patch;\n\n const months = buildMonths(this._calendar, startDate, state, this._i18n, forceRebuild);\n\n // updating months and boundary dates\n state.months = months;\n state.firstDate = months.length > 0 ? months[0].firstDate : undefined;\n state.lastDate = months.length > 0 ? months[months.length - 1].lastDate : undefined;\n\n // reset selected date if 'markDisabled' returns true\n if ('selectedDate' in patch && !isDateSelectable(state.selectedDate, state)) {\n state.selectedDate = null;\n }\n\n // adjusting focus after months were built\n if ('firstDate' in patch) {\n if (state.focusDate === undefined || state.focusDate.before(state.firstDate) ||\n state.focusDate.after(state.lastDate)) {\n state.focusDate = startDate;\n }\n }\n\n // adjusting months/years for the select box navigation\n const yearChanged = !this._state.firstDate || this._state.firstDate.year !== state.firstDate.year;\n const monthChanged = !this._state.firstDate || this._state.firstDate.month !== state.firstDate.month;\n if (state.navigation === 'select') {\n // years -> boundaries (min/max were changed)\n if ('minDate' in patch || 'maxDate' in patch || state.selectBoxes.years.length === 0 || yearChanged) {\n state.selectBoxes.years = generateSelectBoxYears(state.firstDate, state.minDate, state.maxDate);\n }\n\n // months -> when current year or boundaries change\n if ('minDate' in patch || 'maxDate' in patch || state.selectBoxes.months.length === 0 || yearChanged) {\n state.selectBoxes.months =\n generateSelectBoxMonths(this._calendar, state.firstDate, state.minDate, state.maxDate);\n }\n } else {\n state.selectBoxes = {years: [], months: []};\n }\n\n // updating navigation arrows -> boundaries change (min/max) or month/year changes\n if ((state.navigation === 'arrows' || state.navigation === 'select') &&\n (monthChanged || yearChanged || 'minDate' in patch || 'maxDate' in patch || 'disabled' in patch)) {\n state.prevDisabled = state.disabled || prevMonthDisabled(this._calendar, state.firstDate, state.minDate);\n state.nextDisabled = state.disabled || nextMonthDisabled(this._calendar, state.lastDate, state.maxDate);\n }\n }\n\n return state;\n }\n}\n","export enum Key {\n Tab = 9,\n Enter = 13,\n Escape = 27,\n Space = 32,\n PageUp = 33,\n PageDown = 34,\n End = 35,\n Home = 36,\n ArrowLeft = 37,\n ArrowUp = 38,\n ArrowRight = 39,\n ArrowDown = 40\n}\n","import {Injectable} from '@angular/core';\nimport {NgbDatepickerService} from './datepicker-service';\nimport {NgbCalendar} from './ngb-calendar';\nimport {Key} from '../util/key';\nimport {NgbDate} from './ngb-date';\n\n@Injectable()\nexport class NgbDatepickerKeyMapService {\n private _minDate: NgbDate;\n private _maxDate: NgbDate;\n private _firstViewDate: NgbDate;\n private _lastViewDate: NgbDate;\n\n constructor(private _service: NgbDatepickerService, private _calendar: NgbCalendar) {\n _service.model$.subscribe(model => {\n this._minDate = model.minDate;\n this._maxDate = model.maxDate;\n this._firstViewDate = model.firstDate;\n this._lastViewDate = model.lastDate;\n });\n }\n\n processKey(event: KeyboardEvent) {\n // tslint:disable-next-line:deprecation\n switch (event.which) {\n case Key.PageUp:\n this._service.focusMove(event.shiftKey ? 'y' : 'm', -1);\n break;\n case Key.PageDown:\n this._service.focusMove(event.shiftKey ? 'y' : 'm', 1);\n break;\n case Key.End:\n this._service.focus(event.shiftKey ? this._maxDate : this._lastViewDate);\n break;\n case Key.Home:\n this._service.focus(event.shiftKey ? this._minDate : this._firstViewDate);\n break;\n case Key.ArrowLeft:\n this._service.focusMove('d', -1);\n break;\n case Key.ArrowUp:\n this._service.focusMove('d', -this._calendar.getDaysPerWeek());\n break;\n case Key.ArrowRight:\n this._service.focusMove('d', 1);\n break;\n case Key.ArrowDown:\n this._service.focusMove('d', this._calendar.getDaysPerWeek());\n break;\n case Key.Enter:\n case Key.Space:\n this._service.focusSelect();\n break;\n default:\n return;\n }\n\n // note 'return' in default case\n event.preventDefault();\n event.stopPropagation();\n }\n}\n","import {NgbDate} from './ngb-date';\nimport {NgbDateStruct} from './ngb-date-struct';\nimport {DayTemplateContext} from './datepicker-day-template-context';\n\nexport type NgbMarkDisabled = (date: NgbDateStruct, current: {year: number, month: number}) => boolean;\nexport type NgbDayTemplateData = (date: NgbDateStruct, current: {year: number, month: number}) => any;\n\nexport type DayViewModel = {\n date: NgbDate,\n context: DayTemplateContext,\n tabindex: number,\n ariaLabel: string,\n hidden: boolean\n};\n\nexport type WeekViewModel = {\n number: number,\n days: DayViewModel[],\n collapsed: boolean\n};\n\nexport type MonthViewModel = {\n firstDate: NgbDate,\n lastDate: NgbDate,\n number: number,\n year: number,\n weeks: WeekViewModel[],\n weekdays: number[]\n};\n\n// clang-format off\nexport type DatepickerViewModel = {\n dayTemplateData?: NgbDayTemplateData,\n disabled: boolean,\n displayMonths: number,\n firstDate?: NgbDate,\n firstDayOfWeek: number,\n focusDate?: NgbDate,\n focusVisible: boolean,\n lastDate?: NgbDate,\n markDisabled?: NgbMarkDisabled,\n maxDate?: NgbDate,\n minDate?: NgbDate,\n months: MonthViewModel[],\n navigation: 'select' | 'arrows' | 'none',\n outsideDays: 'visible' | 'collapsed' | 'hidden',\n prevDisabled: boolean,\n nextDisabled: boolean,\n selectBoxes: {\n years: number[],\n months: number[]\n },\n selectedDate: NgbDate\n};\n// clang-format on\n\nexport enum NavigationEvent {\n PREV,\n NEXT\n}\n","import {Injectable, TemplateRef} from '@angular/core';\nimport {DayTemplateContext} from './datepicker-day-template-context';\nimport {NgbDateStruct} from './ngb-date-struct';\n\n/**\n * A configuration service for the [`NgbDatepicker`](#/components/datepicker/api#NgbDatepicker) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the datepickers used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbDatepickerConfig {\n dayTemplate: TemplateRef;\n dayTemplateData: (date: NgbDateStruct, current: {year: number, month: number}) => any;\n footerTemplate: TemplateRef;\n displayMonths = 1;\n firstDayOfWeek = 1;\n markDisabled: (date: NgbDateStruct, current: {year: number, month: number}) => boolean;\n minDate: NgbDateStruct;\n maxDate: NgbDateStruct;\n navigation: 'select' | 'arrows' | 'none' = 'select';\n outsideDays: 'visible' | 'collapsed' | 'hidden' = 'visible';\n showWeekdays = true;\n showWeekNumbers = false;\n startDate: {year: number, month: number};\n}\n","import {Injectable} from '@angular/core';\nimport {NgbDateStruct} from '../ngb-date-struct';\nimport {isInteger} from '../../util/util';\n\nexport function NGB_DATEPICKER_DATE_ADAPTER_FACTORY() {\n return new NgbDateStructAdapter();\n}\n\n/**\n * An abstract service that does the conversion between the internal datepicker `NgbDateStruct` model and\n * any provided user date model `D`, ex. a string, a native date, etc.\n *\n * The adapter is used **only** for conversion when binding datepicker to a form control,\n * ex. `[(ngModel)]=\"userDateModel\"`. Here `userDateModel` can be of any type.\n *\n * The default datepicker implementation assumes we use `NgbDateStruct` as a user model.\n *\n * See the [date format overview](#/components/datepicker/overview#date-model) for more details\n * and the [custom adapter demo](#/components/datepicker/examples#adapter) for an example.\n */\n@Injectable({providedIn: 'root', useFactory: NGB_DATEPICKER_DATE_ADAPTER_FACTORY})\nexport abstract class NgbDateAdapter {\n /**\n * Converts a user-model date of type `D` to an `NgbDateStruct` for internal use.\n */\n abstract fromModel(value: D): NgbDateStruct;\n\n /**\n * Converts an internal `NgbDateStruct` date to a user-model date of type `D`.\n */\n abstract toModel(date: NgbDateStruct): D;\n}\n\n@Injectable()\nexport class NgbDateStructAdapter extends NgbDateAdapter {\n /**\n * Converts a NgbDateStruct value into NgbDateStruct value\n */\n fromModel(date: NgbDateStruct): NgbDateStruct {\n return (date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day)) ?\n {year: date.year, month: date.month, day: date.day} :\n null;\n }\n\n /**\n * Converts a NgbDateStruct value into NgbDateStruct value\n */\n toModel(date: NgbDateStruct): NgbDateStruct {\n return (date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day)) ?\n {year: date.year, month: date.month, day: date.day} :\n null;\n }\n}\n","import {fromEvent, merge, Subject} from 'rxjs';\nimport {filter, take, takeUntil} from 'rxjs/operators';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {NgbCalendar} from './ngb-calendar';\nimport {NgbDate} from './ngb-date';\nimport {NgbDatepickerService} from './datepicker-service';\nimport {NgbDatepickerKeyMapService} from './datepicker-keymap-service';\nimport {DatepickerViewModel, NavigationEvent} from './datepicker-view-model';\nimport {DayTemplateContext} from './datepicker-day-template-context';\nimport {NgbDatepickerConfig} from './datepicker-config';\nimport {NgbDateAdapter} from './adapters/ngb-date-adapter';\nimport {NgbDateStruct} from './ngb-date-struct';\nimport {NgbDatepickerI18n} from './datepicker-i18n';\nimport {isChangedDate, isChangedMonth} from './datepicker-tools';\nimport {hasClassName} from '../util/util';\n\nconst NGB_DATEPICKER_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgbDatepicker),\n multi: true\n};\n\n/**\n * An event emitted right before the navigation happens and the month displayed by the datepicker changes.\n */\nexport interface NgbDatepickerNavigateEvent {\n /**\n * The currently displayed month.\n */\n current: {year: number, month: number};\n\n /**\n * The month we're navigating to.\n */\n next: {year: number, month: number};\n\n /**\n * Calling this function will prevent navigation from happening.\n *\n * @since 4.1.0\n */\n preventDefault: () => void;\n}\n\n/**\n * A highly configurable component that helps you with selecting calendar dates.\n *\n * `NgbDatepicker` is meant to be displayed inline on a page or put inside a popup.\n */\n@Component({\n exportAs: 'ngbDatepicker',\n selector: 'ngb-datepicker',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./datepicker.scss'],\n template: `\n \n
\n
\n
\n\n
\n \n \n
\n\n
\n \n
\n
1 && navigation === 'select')\"\n class=\"ngb-dp-month-name\">\n {{ i18n.getMonthFullName(month.number, month.year) }} {{ i18n.getYearNumerals(month.year) }}\n
\n \n \n
\n
\n
\n\n \n `,\n providers: [NGB_DATEPICKER_VALUE_ACCESSOR, NgbDatepickerService, NgbDatepickerKeyMapService]\n})\nexport class NgbDatepicker implements OnDestroy,\n OnChanges, OnInit, AfterViewInit, ControlValueAccessor {\n model: DatepickerViewModel;\n\n @ViewChild('months', {static: true}) private _monthsEl: ElementRef;\n private _controlValue: NgbDate;\n private _destroyed$ = new Subject();\n\n /**\n * The reference to a custom template for the day.\n *\n * Allows to completely override the way a day 'cell' in the calendar is displayed.\n *\n * See [`DayTemplateContext`](#/components/datepicker/api#DayTemplateContext) for the data you get inside.\n */\n @Input() dayTemplate: TemplateRef;\n\n /**\n * The callback to pass any arbitrary data to the template cell via the\n * [`DayTemplateContext`](#/components/datepicker/api#DayTemplateContext)'s `data` parameter.\n *\n * `current` is the month that is currently displayed by the datepicker.\n *\n * @since 3.3.0\n */\n @Input() dayTemplateData: (date: NgbDate, current: {year: number, month: number}) => any;\n\n /**\n * The number of months to display.\n */\n @Input() displayMonths: number;\n\n /**\n * The first day of the week.\n *\n * With default calendar we use ISO 8601: 'weekday' is 1=Mon ... 7=Sun.\n */\n @Input() firstDayOfWeek: number;\n\n /**\n * The reference to the custom template for the datepicker footer.\n *\n * @since 3.3.0\n */\n @Input() footerTemplate: TemplateRef;\n\n /**\n * The callback to mark some dates as disabled.\n *\n * It is called for each new date when navigating to a different month.\n *\n * `current` is the month that is currently displayed by the datepicker.\n */\n @Input() markDisabled: (date: NgbDate, current: {year: number, month: number}) => boolean;\n\n /**\n * The latest date that can be displayed or selected.\n *\n * If not provided, 'year' select box will display 10 years after the current month.\n */\n @Input() maxDate: NgbDateStruct;\n\n /**\n * The earliest date that can be displayed or selected.\n *\n * If not provided, 'year' select box will display 10 years before the current month.\n */\n @Input() minDate: NgbDateStruct;\n\n /**\n * Navigation type.\n *\n * * `\"select\"` - select boxes for month and navigation arrows\n * * `\"arrows\"` - only navigation arrows\n * * `\"none\"` - no navigation visible at all\n */\n @Input() navigation: 'select' | 'arrows' | 'none';\n\n /**\n * The way of displaying days that don't belong to the current month.\n *\n * * `\"visible\"` - days are visible\n * * `\"hidden\"` - days are hidden, white space preserved\n * * `\"collapsed\"` - days are collapsed, so the datepicker height might change between months\n *\n * For the 2+ months view, days in between months are never shown.\n */\n @Input() outsideDays: 'visible' | 'collapsed' | 'hidden';\n\n /**\n * If `true`, weekdays will be displayed.\n */\n @Input() showWeekdays: boolean;\n\n /**\n * If `true`, week numbers will be displayed.\n */\n @Input() showWeekNumbers: boolean;\n\n /**\n * The date to open calendar with.\n *\n * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec.\n * If nothing or invalid date is provided, calendar will open with current month.\n *\n * You could use `navigateTo(date)` method as an alternative.\n */\n @Input() startDate: {year: number, month: number, day?: number};\n\n /**\n * An event emitted right before the navigation happens and displayed month changes.\n *\n * See [`NgbDatepickerNavigateEvent`](#/components/datepicker/api#NgbDatepickerNavigateEvent) for the payload info.\n */\n @Output() navigate = new EventEmitter();\n\n /**\n * An event emitted when user selects a date using keyboard or mouse.\n *\n * The payload of the event is currently selected `NgbDate`.\n */\n @Output() select = new EventEmitter();\n\n onChange = (_: any) => {};\n onTouched = () => {};\n\n constructor(\n private _keyMapService: NgbDatepickerKeyMapService, public _service: NgbDatepickerService,\n private _calendar: NgbCalendar, public i18n: NgbDatepickerI18n, config: NgbDatepickerConfig,\n private _cd: ChangeDetectorRef, private _elementRef: ElementRef,\n private _ngbDateAdapter: NgbDateAdapter, private _ngZone: NgZone) {\n ['dayTemplate', 'dayTemplateData', 'displayMonths', 'firstDayOfWeek', 'footerTemplate', 'markDisabled', 'minDate',\n 'maxDate', 'navigation', 'outsideDays', 'showWeekdays', 'showWeekNumbers', 'startDate']\n .forEach(input => this[input] = config[input]);\n\n _service.select$.pipe(takeUntil(this._destroyed$)).subscribe(date => { this.select.emit(date); });\n\n _service.model$.pipe(takeUntil(this._destroyed$)).subscribe(model => {\n const newDate = model.firstDate;\n const oldDate = this.model ? this.model.firstDate : null;\n\n let navigationPrevented = false;\n // emitting navigation event if the first month changes\n if (!newDate.equals(oldDate)) {\n this.navigate.emit({\n current: oldDate ? {year: oldDate.year, month: oldDate.month} : null,\n next: {year: newDate.year, month: newDate.month},\n preventDefault: () => navigationPrevented = true\n });\n\n // can't prevent the very first navigation\n if (navigationPrevented && oldDate !== null) {\n this._service.open(oldDate);\n return;\n }\n }\n\n const newSelectedDate = model.selectedDate;\n const newFocusedDate = model.focusDate;\n const oldFocusedDate = this.model ? this.model.focusDate : null;\n\n this.model = model;\n\n // handling selection change\n if (isChangedDate(newSelectedDate, this._controlValue)) {\n this._controlValue = newSelectedDate;\n this.onTouched();\n this.onChange(this._ngbDateAdapter.toModel(newSelectedDate));\n }\n\n // handling focus change\n if (isChangedDate(newFocusedDate, oldFocusedDate) && oldFocusedDate && model.focusVisible) {\n this.focus();\n }\n\n _cd.markForCheck();\n });\n }\n\n focus() {\n this._ngZone.onStable.asObservable().pipe(take(1)).subscribe(() => {\n const elementToFocus =\n this._elementRef.nativeElement.querySelector('div.ngb-dp-day[tabindex=\"0\"]');\n if (elementToFocus) {\n elementToFocus.focus();\n }\n });\n }\n\n /**\n * Navigates to the provided date.\n *\n * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec.\n * If nothing or invalid date provided calendar will open current month.\n *\n * Use the `[startDate]` input as an alternative.\n */\n navigateTo(date?: {year: number, month: number, day?: number}) {\n this._service.open(NgbDate.from(date ? date.day ? date as NgbDateStruct : {...date, day: 1} : null));\n }\n\n ngAfterViewInit() {\n this._ngZone.runOutsideAngular(() => {\n const focusIns$ = fromEvent(this._monthsEl.nativeElement, 'focusin');\n const focusOuts$ = fromEvent(this._monthsEl.nativeElement, 'focusout');\n\n // we're changing 'focusVisible' only when entering or leaving months view\n // and ignoring all focus events where both 'target' and 'related' target are day cells\n merge(focusIns$, focusOuts$)\n .pipe(\n filter(\n ({target, relatedTarget}) =>\n !(hasClassName(target, 'ngb-dp-day') && hasClassName(relatedTarget, 'ngb-dp-day'))),\n takeUntil(this._destroyed$))\n .subscribe(({type}) => this._ngZone.run(() => this._service.focusVisible = type === 'focusin'));\n });\n }\n\n ngOnDestroy() { this._destroyed$.next(); }\n\n ngOnInit() {\n if (this.model === undefined) {\n ['dayTemplateData', 'displayMonths', 'markDisabled', 'firstDayOfWeek', 'navigation', 'minDate', 'maxDate',\n 'outsideDays']\n .forEach(input => this._service[input] = this[input]);\n this.navigateTo(this.startDate);\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n ['dayTemplateData', 'displayMonths', 'markDisabled', 'firstDayOfWeek', 'navigation', 'minDate', 'maxDate',\n 'outsideDays']\n .filter(input => input in changes)\n .forEach(input => this._service[input] = this[input]);\n\n if ('startDate' in changes) {\n const {currentValue, previousValue} = changes.startDate;\n if (isChangedMonth(previousValue, currentValue)) {\n this.navigateTo(this.startDate);\n }\n }\n }\n\n onDateSelect(date: NgbDate) {\n this._service.focus(date);\n this._service.select(date, {emitEvent: true});\n }\n\n onKeyDown(event: KeyboardEvent) { this._keyMapService.processKey(event); }\n\n onNavigateDateSelect(date: NgbDate) { this._service.open(date); }\n\n onNavigateEvent(event: NavigationEvent) {\n switch (event) {\n case NavigationEvent.PREV:\n this._service.open(this._calendar.getPrev(this.model.firstDate, 'm', 1));\n break;\n case NavigationEvent.NEXT:\n this._service.open(this._calendar.getNext(this.model.firstDate, 'm', 1));\n break;\n }\n }\n\n registerOnChange(fn: (value: any) => any): void { this.onChange = fn; }\n\n registerOnTouched(fn: () => any): void { this.onTouched = fn; }\n\n setDisabledState(isDisabled: boolean) { this._service.disabled = isDisabled; }\n\n writeValue(value) {\n this._controlValue = NgbDate.from(this._ngbDateAdapter.fromModel(value));\n this._service.select(this._controlValue);\n }\n}\n","import {Component, Input, TemplateRef, Output, EventEmitter, ViewEncapsulation} from '@angular/core';\nimport {MonthViewModel, DayViewModel} from './datepicker-view-model';\nimport {NgbDate} from './ngb-date';\nimport {NgbDatepickerI18n} from './datepicker-i18n';\nimport {DayTemplateContext} from './datepicker-day-template-context';\n\n@Component({\n selector: 'ngb-datepicker-month-view',\n host: {'role': 'grid'},\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./datepicker-month-view.scss'],\n template: `\n
\n
\n
\n {{ i18n.getWeekdayShortName(w) }}\n
\n
\n \n
\n
{{ i18n.getWeekNumerals(week.number) }}
\n
\n \n \n \n
\n
\n
\n `\n})\nexport class NgbDatepickerMonthView {\n @Input() dayTemplate: TemplateRef;\n @Input() month: MonthViewModel;\n @Input() showWeekdays;\n @Input() showWeekNumbers;\n\n @Output() select = new EventEmitter();\n\n constructor(public i18n: NgbDatepickerI18n) {}\n\n doSelect(day: DayViewModel) {\n if (!day.context.disabled && !day.hidden) {\n this.select.emit(day.date);\n }\n }\n}\n","import {Component, Input, Output, EventEmitter, ChangeDetectionStrategy, ViewEncapsulation} from '@angular/core';\nimport {NavigationEvent, MonthViewModel} from './datepicker-view-model';\nimport {NgbDate} from './ngb-date';\nimport {NgbDatepickerI18n} from './datepicker-i18n';\n\n@Component({\n selector: 'ngb-datepicker-navigation',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./datepicker-navigation.scss'],\n template: `\n
\n \n
\n \n \n\n \n
0\">
\n
\n {{ i18n.getMonthFullName(month.number, month.year) }} {{ i18n.getYearNumerals(month.year) }}\n
\n
\n
\n
\n \n
\n `\n})\nexport class NgbDatepickerNavigation {\n navigation = NavigationEvent;\n\n @Input() date: NgbDate;\n @Input() disabled: boolean;\n @Input() months: MonthViewModel[] = [];\n @Input() showSelect: boolean;\n @Input() prevDisabled: boolean;\n @Input() nextDisabled: boolean;\n @Input() selectBoxes: {years: number[], months: number[]};\n\n @Output() navigate = new EventEmitter();\n @Output() select = new EventEmitter();\n\n constructor(public i18n: NgbDatepickerI18n) {}\n}\n","import {NgZone} from '@angular/core';\nimport {fromEvent, Observable, race} from 'rxjs';\nimport {delay, filter, map, takeUntil, withLatestFrom} from 'rxjs/operators';\nimport {Key} from './key';\nimport {closest} from './util';\n\nconst isContainedIn = (element: HTMLElement, array?: HTMLElement[]) =>\n array ? array.some(item => item.contains(element)) : false;\n\nconst matchesSelectorIfAny = (element: HTMLElement, selector?: string) =>\n !selector || closest(element, selector) != null;\n\n// we'll have to use 'touch' events instead of 'mouse' events on iOS and add a more significant delay\n// to avoid re-opening when handling (click) on a toggling element\n// TODO: use proper Angular platform detection when NgbAutoClose becomes a service and we can inject PLATFORM_ID\nlet iOS = false;\nif (typeof navigator !== 'undefined') {\n iOS = !!navigator.userAgent && /iPad|iPhone|iPod/.test(navigator.userAgent);\n}\n\nexport function ngbAutoClose(\n zone: NgZone, document: any, type: boolean | 'inside' | 'outside', close: () => void, closed$: Observable,\n insideElements: HTMLElement[], ignoreElements?: HTMLElement[], insideSelector?: string) {\n // closing on ESC and outside clicks\n if (type) {\n zone.runOutsideAngular(() => {\n\n const shouldCloseOnClick = (event: MouseEvent | TouchEvent) => {\n const element = event.target as HTMLElement;\n if ((event instanceof MouseEvent && event.button === 2) || isContainedIn(element, ignoreElements)) {\n return false;\n }\n if (type === 'inside') {\n return isContainedIn(element, insideElements) && matchesSelectorIfAny(element, insideSelector);\n } else if (type === 'outside') {\n return !isContainedIn(element, insideElements);\n } else /* if (type === true) */ {\n return matchesSelectorIfAny(element, insideSelector) || !isContainedIn(element, insideElements);\n }\n };\n\n const escapes$ = fromEvent(document, 'keydown')\n .pipe(\n takeUntil(closed$),\n // tslint:disable-next-line:deprecation\n filter(e => e.which === Key.Escape));\n\n\n // we have to pre-calculate 'shouldCloseOnClick' on 'mousedown/touchstart',\n // because on 'mouseup/touchend' DOM nodes might be detached\n const mouseDowns$ = fromEvent(document, iOS ? 'touchstart' : 'mousedown')\n .pipe(map(shouldCloseOnClick), takeUntil(closed$));\n\n const closeableClicks$ = fromEvent(document, iOS ? 'touchend' : 'mouseup')\n .pipe(\n withLatestFrom(mouseDowns$), filter(([_, shouldClose]) => shouldClose),\n delay(iOS ? 16 : 0), takeUntil(closed$)) as Observable;\n\n\n race([escapes$, closeableClicks$]).subscribe(() => zone.run(close));\n });\n }\n}\n","import {fromEvent, Observable} from 'rxjs';\nimport {filter, map, takeUntil, withLatestFrom} from 'rxjs/operators';\n\nimport {Key} from '../util/key';\n\n\nconst FOCUSABLE_ELEMENTS_SELECTOR = [\n 'a[href]', 'button:not([disabled])', 'input:not([disabled]):not([type=\"hidden\"])', 'select:not([disabled])',\n 'textarea:not([disabled])', '[contenteditable]', '[tabindex]:not([tabindex=\"-1\"])'\n].join(', ');\n\n/**\n * Returns first and last focusable elements inside of a given element based on specific CSS selector\n */\nexport function getFocusableBoundaryElements(element: HTMLElement): HTMLElement[] {\n const list: HTMLElement[] =\n Array.from(element.querySelectorAll(FOCUSABLE_ELEMENTS_SELECTOR) as NodeListOf)\n .filter(el => el.tabIndex !== -1);\n return [list[0], list[list.length - 1]];\n}\n\n/**\n * Function that enforces browser focus to be trapped inside a DOM element.\n *\n * Works only for clicks inside the element and navigation with 'Tab', ignoring clicks outside of the element\n *\n * @param element The element around which focus will be trapped inside\n * @param stopFocusTrap$ The observable stream. When completed the focus trap will clean up listeners\n * and free internal resources\n * @param refocusOnClick Put the focus back to the last focused element whenever a click occurs on element (default to\n * false)\n */\nexport const ngbFocusTrap = (element: HTMLElement, stopFocusTrap$: Observable, refocusOnClick = false) => {\n // last focused element\n const lastFocusedElement$ =\n fromEvent(element, 'focusin').pipe(takeUntil(stopFocusTrap$), map(e => e.target));\n\n // 'tab' / 'shift+tab' stream\n fromEvent(element, 'keydown')\n .pipe(\n takeUntil(stopFocusTrap$),\n // tslint:disable:deprecation\n filter(e => e.which === Key.Tab),\n // tslint:enable:deprecation\n withLatestFrom(lastFocusedElement$))\n .subscribe(([tabEvent, focusedElement]) => {\n const[first, last] = getFocusableBoundaryElements(element);\n\n if ((focusedElement === first || focusedElement === element) && tabEvent.shiftKey) {\n last.focus();\n tabEvent.preventDefault();\n }\n\n if (focusedElement === last && !tabEvent.shiftKey) {\n first.focus();\n tabEvent.preventDefault();\n }\n });\n\n // inside click\n if (refocusOnClick) {\n fromEvent(element, 'click')\n .pipe(takeUntil(stopFocusTrap$), withLatestFrom(lastFocusedElement$), map(arr => arr[1] as HTMLElement))\n .subscribe(lastFocusedElement => lastFocusedElement.focus());\n }\n};\n","// previous version:\n// https://github.com/angular-ui/bootstrap/blob/07c31d0731f7cb068a1932b8e01d2312b796b4ec/src/position/position.js\nexport class Positioning {\n private getAllStyles(element: HTMLElement) { return window.getComputedStyle(element); }\n\n private getStyle(element: HTMLElement, prop: string): string { return this.getAllStyles(element)[prop]; }\n\n private isStaticPositioned(element: HTMLElement): boolean {\n return (this.getStyle(element, 'position') || 'static') === 'static';\n }\n\n private offsetParent(element: HTMLElement): HTMLElement {\n let offsetParentEl = element.offsetParent || document.documentElement;\n\n while (offsetParentEl && offsetParentEl !== document.documentElement && this.isStaticPositioned(offsetParentEl)) {\n offsetParentEl = offsetParentEl.offsetParent;\n }\n\n return offsetParentEl || document.documentElement;\n }\n\n position(element: HTMLElement, round = true): ClientRect {\n let elPosition: ClientRect;\n let parentOffset: ClientRect = {width: 0, height: 0, top: 0, bottom: 0, left: 0, right: 0};\n\n if (this.getStyle(element, 'position') === 'fixed') {\n elPosition = element.getBoundingClientRect();\n elPosition = {\n top: elPosition.top,\n bottom: elPosition.bottom,\n left: elPosition.left,\n right: elPosition.right,\n height: elPosition.height,\n width: elPosition.width\n };\n } else {\n const offsetParentEl = this.offsetParent(element);\n\n elPosition = this.offset(element, false);\n\n if (offsetParentEl !== document.documentElement) {\n parentOffset = this.offset(offsetParentEl, false);\n }\n\n parentOffset.top += offsetParentEl.clientTop;\n parentOffset.left += offsetParentEl.clientLeft;\n }\n\n elPosition.top -= parentOffset.top;\n elPosition.bottom -= parentOffset.top;\n elPosition.left -= parentOffset.left;\n elPosition.right -= parentOffset.left;\n\n if (round) {\n elPosition.top = Math.round(elPosition.top);\n elPosition.bottom = Math.round(elPosition.bottom);\n elPosition.left = Math.round(elPosition.left);\n elPosition.right = Math.round(elPosition.right);\n }\n\n return elPosition;\n }\n\n offset(element: HTMLElement, round = true): ClientRect {\n const elBcr = element.getBoundingClientRect();\n const viewportOffset = {\n top: window.pageYOffset - document.documentElement.clientTop,\n left: window.pageXOffset - document.documentElement.clientLeft\n };\n\n let elOffset = {\n height: elBcr.height || element.offsetHeight,\n width: elBcr.width || element.offsetWidth,\n top: elBcr.top + viewportOffset.top,\n bottom: elBcr.bottom + viewportOffset.top,\n left: elBcr.left + viewportOffset.left,\n right: elBcr.right + viewportOffset.left\n };\n\n if (round) {\n elOffset.height = Math.round(elOffset.height);\n elOffset.width = Math.round(elOffset.width);\n elOffset.top = Math.round(elOffset.top);\n elOffset.bottom = Math.round(elOffset.bottom);\n elOffset.left = Math.round(elOffset.left);\n elOffset.right = Math.round(elOffset.right);\n }\n\n return elOffset;\n }\n\n /*\n Return false if the element to position is outside the viewport\n */\n positionElements(hostElement: HTMLElement, targetElement: HTMLElement, placement: string, appendToBody?: boolean):\n boolean {\n const[placementPrimary = 'top', placementSecondary = 'center'] = placement.split('-');\n\n const hostElPosition = appendToBody ? this.offset(hostElement, false) : this.position(hostElement, false);\n const targetElStyles = this.getAllStyles(targetElement);\n\n const marginTop = parseFloat(targetElStyles.marginTop);\n const marginBottom = parseFloat(targetElStyles.marginBottom);\n const marginLeft = parseFloat(targetElStyles.marginLeft);\n const marginRight = parseFloat(targetElStyles.marginRight);\n\n let topPosition = 0;\n let leftPosition = 0;\n\n switch (placementPrimary) {\n case 'top':\n topPosition = (hostElPosition.top - (targetElement.offsetHeight + marginTop + marginBottom));\n break;\n case 'bottom':\n topPosition = (hostElPosition.top + hostElPosition.height);\n break;\n case 'left':\n leftPosition = (hostElPosition.left - (targetElement.offsetWidth + marginLeft + marginRight));\n break;\n case 'right':\n leftPosition = (hostElPosition.left + hostElPosition.width);\n break;\n }\n\n switch (placementSecondary) {\n case 'top':\n topPosition = hostElPosition.top;\n break;\n case 'bottom':\n topPosition = hostElPosition.top + hostElPosition.height - targetElement.offsetHeight;\n break;\n case 'left':\n leftPosition = hostElPosition.left;\n break;\n case 'right':\n leftPosition = hostElPosition.left + hostElPosition.width - targetElement.offsetWidth;\n break;\n case 'center':\n if (placementPrimary === 'top' || placementPrimary === 'bottom') {\n leftPosition = (hostElPosition.left + hostElPosition.width / 2 - targetElement.offsetWidth / 2);\n } else {\n topPosition = (hostElPosition.top + hostElPosition.height / 2 - targetElement.offsetHeight / 2);\n }\n break;\n }\n\n /// The translate3d/gpu acceleration render a blurry text on chrome, the next line is commented until a browser fix\n // targetElement.style.transform = `translate3d(${Math.round(leftPosition)}px, ${Math.floor(topPosition)}px, 0px)`;\n targetElement.style.transform = `translate(${Math.round(leftPosition)}px, ${Math.round(topPosition)}px)`;\n\n // Check if the targetElement is inside the viewport\n const targetElBCR = targetElement.getBoundingClientRect();\n const html = document.documentElement;\n const windowHeight = window.innerHeight || html.clientHeight;\n const windowWidth = window.innerWidth || html.clientWidth;\n\n return targetElBCR.left >= 0 && targetElBCR.top >= 0 && targetElBCR.right <= windowWidth &&\n targetElBCR.bottom <= windowHeight;\n }\n}\n\nconst placementSeparator = /\\s+/;\nconst positionService = new Positioning();\n\n/*\n * Accept the placement array and applies the appropriate placement dependent on the viewport.\n * Returns the applied placement.\n * In case of auto placement, placements are selected in order\n * 'top', 'bottom', 'left', 'right',\n * 'top-left', 'top-right',\n * 'bottom-left', 'bottom-right',\n * 'left-top', 'left-bottom',\n * 'right-top', 'right-bottom'.\n * */\nexport function positionElements(\n hostElement: HTMLElement, targetElement: HTMLElement, placement: string | Placement | PlacementArray,\n appendToBody?: boolean, baseClass?: string): Placement {\n let placementVals: Array =\n Array.isArray(placement) ? placement : placement.split(placementSeparator) as Array;\n\n const allowedPlacements = [\n 'top', 'bottom', 'left', 'right', 'top-left', 'top-right', 'bottom-left', 'bottom-right', 'left-top', 'left-bottom',\n 'right-top', 'right-bottom'\n ];\n\n const classList = targetElement.classList;\n const addClassesToTarget = (targetPlacement: Placement): Array => {\n const[primary, secondary] = targetPlacement.split('-');\n const classes = [];\n if (baseClass) {\n classes.push(`${baseClass}-${primary}`);\n if (secondary) {\n classes.push(`${baseClass}-${primary}-${secondary}`);\n }\n\n classes.forEach((classname) => { classList.add(classname); });\n }\n return classes;\n };\n\n // Remove old placement classes to avoid issues\n if (baseClass) {\n allowedPlacements.forEach((placementToRemove) => { classList.remove(`${baseClass}-${placementToRemove}`); });\n }\n\n // replace auto placement with other placements\n let hasAuto = placementVals.findIndex(val => val === 'auto');\n if (hasAuto >= 0) {\n allowedPlacements.forEach(function(obj) {\n if (placementVals.find(val => val.search('^' + obj) !== -1) == null) {\n placementVals.splice(hasAuto++, 1, obj as Placement);\n }\n });\n }\n\n // coordinates where to position\n\n // Required for transform:\n const style = targetElement.style;\n style.position = 'absolute';\n style.top = '0';\n style.left = '0';\n style['will-change'] = 'transform';\n\n let testPlacement: Placement;\n let isInViewport = false;\n for (testPlacement of placementVals) {\n let addedClasses = addClassesToTarget(testPlacement);\n\n if (positionService.positionElements(hostElement, targetElement, testPlacement, appendToBody)) {\n isInViewport = true;\n break;\n }\n\n // Remove the baseClasses for further calculation\n if (baseClass) {\n addedClasses.forEach((classname) => { classList.remove(classname); });\n }\n }\n\n if (!isInViewport) {\n // If nothing match, the first placement is the default one\n testPlacement = placementVals[0];\n addClassesToTarget(testPlacement);\n positionService.positionElements(hostElement, targetElement, testPlacement, appendToBody);\n }\n\n return testPlacement;\n}\n\nexport type Placement = 'auto' | 'top' | 'bottom' | 'left' | 'right' | 'top-left' | 'top-right' | 'bottom-left' |\n 'bottom-right' | 'left-top' | 'left-bottom' | 'right-top' | 'right-bottom';\n\nexport type PlacementArray = Placement | Array| string;\n","import {padNumber, toInteger, isNumber} from '../util/util';\nimport {NgbDateStruct} from './ngb-date-struct';\nimport {Injectable} from '@angular/core';\n\nexport function NGB_DATEPICKER_PARSER_FORMATTER_FACTORY() {\n return new NgbDateISOParserFormatter();\n}\n\n/**\n * An abstract service for parsing and formatting dates for the\n * [`NgbInputDatepicker`](#/components/datepicker/api#NgbInputDatepicker) directive.\n * Converts between the internal `NgbDateStruct` model presentation and a `string` that is displayed in the\n * input element.\n *\n * When user types something in the input this service attempts to parse it into a `NgbDateStruct` object.\n * And vice versa, when users selects a date in the calendar with the mouse, it must be displayed as a `string`\n * in the input.\n *\n * Default implementation uses the ISO 8601 format, but you can provide another implementation via DI\n * to use an alternative string format or a custom parsing logic.\n *\n * See the [date format overview](#/components/datepicker/overview#date-model) for more details.\n */\n@Injectable({providedIn: 'root', useFactory: NGB_DATEPICKER_PARSER_FORMATTER_FACTORY})\nexport abstract class NgbDateParserFormatter {\n /**\n * Parses the given `string` to an `NgbDateStruct`.\n *\n * Implementations should try their best to provide a result, even\n * partial. They must return `null` if the value can't be parsed.\n */\n abstract parse(value: string): NgbDateStruct;\n\n /**\n * Formats the given `NgbDateStruct` to a `string`.\n *\n * Implementations should return an empty string if the given date is `null`,\n * and try their best to provide a partial result if the given date is incomplete or invalid.\n */\n abstract format(date: NgbDateStruct): string;\n}\n\n@Injectable()\nexport class NgbDateISOParserFormatter extends NgbDateParserFormatter {\n parse(value: string): NgbDateStruct {\n if (value) {\n const dateParts = value.trim().split('-');\n if (dateParts.length === 1 && isNumber(dateParts[0])) {\n return {year: toInteger(dateParts[0]), month: null, day: null};\n } else if (dateParts.length === 2 && isNumber(dateParts[0]) && isNumber(dateParts[1])) {\n return {year: toInteger(dateParts[0]), month: toInteger(dateParts[1]), day: null};\n } else if (dateParts.length === 3 && isNumber(dateParts[0]) && isNumber(dateParts[1]) && isNumber(dateParts[2])) {\n return {year: toInteger(dateParts[0]), month: toInteger(dateParts[1]), day: toInteger(dateParts[2])};\n }\n }\n return null;\n }\n\n format(date: NgbDateStruct): string {\n return date ?\n `${date.year}-${isNumber(date.month) ? padNumber(date.month) : ''}-${isNumber(date.day) ? padNumber(date.day) : ''}` :\n '';\n }\n}\n","import {\n ChangeDetectorRef,\n ComponentFactoryResolver,\n ComponentRef,\n Directive,\n ElementRef,\n EventEmitter,\n forwardRef,\n Inject,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n Output,\n Renderer2,\n SimpleChanges,\n TemplateRef,\n ViewContainerRef\n} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\nimport {AbstractControl, ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validator} from '@angular/forms';\n\nimport {ngbAutoClose} from '../util/autoclose';\nimport {ngbFocusTrap} from '../util/focus-trap';\nimport {PlacementArray, positionElements} from '../util/positioning';\n\nimport {NgbDateAdapter} from './adapters/ngb-date-adapter';\nimport {NgbDatepicker, NgbDatepickerNavigateEvent} from './datepicker';\nimport {DayTemplateContext} from './datepicker-day-template-context';\nimport {NgbDatepickerService} from './datepicker-service';\nimport {NgbCalendar} from './ngb-calendar';\nimport {NgbDate} from './ngb-date';\nimport {NgbDateParserFormatter} from './ngb-date-parser-formatter';\nimport {NgbDateStruct} from './ngb-date-struct';\n\nconst NGB_DATEPICKER_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgbInputDatepicker),\n multi: true\n};\n\nconst NGB_DATEPICKER_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => NgbInputDatepicker),\n multi: true\n};\n\n/**\n * A directive that allows to stick a datepicker popup to an input field.\n *\n * Manages interaction with the input field itself, does value formatting and provides forms integration.\n */\n@Directive({\n selector: 'input[ngbDatepicker]',\n exportAs: 'ngbDatepicker',\n host: {\n '(input)': 'manualDateChange($event.target.value)',\n '(change)': 'manualDateChange($event.target.value, true)',\n '(blur)': 'onBlur()',\n '[disabled]': 'disabled'\n },\n providers: [NGB_DATEPICKER_VALUE_ACCESSOR, NGB_DATEPICKER_VALIDATOR, NgbDatepickerService]\n})\nexport class NgbInputDatepicker implements OnChanges,\n OnDestroy, ControlValueAccessor, Validator {\n private _cRef: ComponentRef = null;\n private _disabled = false;\n private _model: NgbDate;\n private _inputValue: string;\n private _zoneSubscription: any;\n\n /**\n * Indicates whether the datepicker popup should be closed automatically after date selection / outside click or not.\n *\n * * `true` - the popup will close on both date selection and outside click.\n * * `false` - the popup can only be closed manually via `close()` or `toggle()` methods.\n * * `\"inside\"` - the popup will close on date selection, but not outside clicks.\n * * `\"outside\"` - the popup will close only on the outside click and not on date selection/inside clicks.\n *\n * @since 3.0.0\n */\n @Input() autoClose: boolean | 'inside' | 'outside' = true;\n\n /**\n * The reference to a custom template for the day.\n *\n * Allows to completely override the way a day 'cell' in the calendar is displayed.\n *\n * See [`DayTemplateContext`](#/components/datepicker/api#DayTemplateContext) for the data you get inside.\n */\n @Input() dayTemplate: TemplateRef;\n\n /**\n * The callback to pass any arbitrary data to the template cell via the\n * [`DayTemplateContext`](#/components/datepicker/api#DayTemplateContext)'s `data` parameter.\n *\n * `current` is the month that is currently displayed by the datepicker.\n *\n * @since 3.3.0\n */\n @Input() dayTemplateData: (date: NgbDate, current: {year: number, month: number}) => any;\n\n /**\n * The number of months to display.\n */\n @Input() displayMonths: number;\n\n /**\n * The first day of the week.\n *\n * With default calendar we use ISO 8601: 'weekday' is 1=Mon ... 7=Sun.\n */\n @Input() firstDayOfWeek: number;\n\n /**\n * The reference to the custom template for the datepicker footer.\n *\n * @since 3.3.0\n */\n @Input() footerTemplate: TemplateRef;\n\n /**\n * The callback to mark some dates as disabled.\n *\n * It is called for each new date when navigating to a different month.\n *\n * `current` is the month that is currently displayed by the datepicker.\n */\n @Input() markDisabled: (date: NgbDate, current: {year: number, month: number}) => boolean;\n\n /**\n * The earliest date that can be displayed or selected. Also used for form validation.\n *\n * If not provided, 'year' select box will display 10 years before the current month.\n */\n @Input() minDate: NgbDateStruct;\n\n /**\n * The latest date that can be displayed or selected. Also used for form validation.\n *\n * If not provided, 'year' select box will display 10 years after the current month.\n */\n @Input() maxDate: NgbDateStruct;\n\n /**\n * Navigation type.\n *\n * * `\"select\"` - select boxes for month and navigation arrows\n * * `\"arrows\"` - only navigation arrows\n * * `\"none\"` - no navigation visible at all\n */\n @Input() navigation: 'select' | 'arrows' | 'none';\n\n /**\n * The way of displaying days that don't belong to the current month.\n *\n * * `\"visible\"` - days are visible\n * * `\"hidden\"` - days are hidden, white space preserved\n * * `\"collapsed\"` - days are collapsed, so the datepicker height might change between months\n *\n * For the 2+ months view, days in between months are never shown.\n */\n @Input() outsideDays: 'visible' | 'collapsed' | 'hidden';\n\n /**\n * The preferred placement of the datepicker popup.\n *\n * Possible values are `\"top\"`, `\"top-left\"`, `\"top-right\"`, `\"bottom\"`, `\"bottom-left\"`,\n * `\"bottom-right\"`, `\"left\"`, `\"left-top\"`, `\"left-bottom\"`, `\"right\"`, `\"right-top\"`,\n * `\"right-bottom\"`\n *\n * Accepts an array of strings or a string with space separated possible values.\n *\n * The default order of preference is `\"bottom-left bottom-right top-left top-right\"`\n *\n * Please see the [positioning overview](#/positioning) for more details.\n */\n @Input() placement: PlacementArray = ['bottom-left', 'bottom-right', 'top-left', 'top-right'];\n\n /**\n * If `true`, weekdays will be displayed.\n */\n @Input() showWeekdays: boolean;\n\n /**\n * If `true`, week numbers will be displayed.\n */\n @Input() showWeekNumbers: boolean;\n\n /**\n * The date to open calendar with.\n *\n * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec.\n * If nothing or invalid date is provided, calendar will open with current month.\n *\n * You could use `navigateTo(date)` method as an alternative.\n */\n @Input() startDate: {year: number, month: number, day?: number};\n\n /**\n * A selector specifying the element the datepicker popup should be appended to.\n *\n * Currently only supports `\"body\"`.\n */\n @Input() container: string;\n\n /**\n * A css selector or html element specifying the element the datepicker popup should be positioned against.\n *\n * By default the input is used as a target.\n *\n * @since 4.2.0\n */\n @Input() positionTarget: string | HTMLElement;\n\n /**\n * An event emitted when user selects a date using keyboard or mouse.\n *\n * The payload of the event is currently selected `NgbDate`.\n *\n * @since 1.1.1\n */\n @Output() dateSelect = new EventEmitter();\n\n /**\n * Event emitted right after the navigation happens and displayed month changes.\n *\n * See [`NgbDatepickerNavigateEvent`](#/components/datepicker/api#NgbDatepickerNavigateEvent) for the payload info.\n */\n @Output() navigate = new EventEmitter();\n\n /**\n * An event fired after closing datepicker window.\n *\n * @since 4.2.0\n */\n @Output() closed = new EventEmitter();\n\n @Input()\n get disabled() {\n return this._disabled;\n }\n set disabled(value: any) {\n this._disabled = value === '' || (value && value !== 'false');\n\n if (this.isOpen()) {\n this._cRef.instance.setDisabledState(this._disabled);\n }\n }\n\n private _onChange = (_: any) => {};\n private _onTouched = () => {};\n private _validatorChange = () => {};\n\n\n constructor(\n private _parserFormatter: NgbDateParserFormatter, private _elRef: ElementRef,\n private _vcRef: ViewContainerRef, private _renderer: Renderer2, private _cfr: ComponentFactoryResolver,\n private _ngZone: NgZone, private _service: NgbDatepickerService, private _calendar: NgbCalendar,\n private _dateAdapter: NgbDateAdapter, @Inject(DOCUMENT) private _document: any,\n private _changeDetector: ChangeDetectorRef) {\n this._zoneSubscription = _ngZone.onStable.subscribe(() => this._updatePopupPosition());\n }\n\n registerOnChange(fn: (value: any) => any): void { this._onChange = fn; }\n\n registerOnTouched(fn: () => any): void { this._onTouched = fn; }\n\n registerOnValidatorChange(fn: () => void): void { this._validatorChange = fn; }\n\n setDisabledState(isDisabled: boolean): void { this.disabled = isDisabled; }\n\n validate(c: AbstractControl): {[key: string]: any} {\n const value = c.value;\n\n if (value === null || value === undefined) {\n return null;\n }\n\n const ngbDate = this._fromDateStruct(this._dateAdapter.fromModel(value));\n\n if (!this._calendar.isValid(ngbDate)) {\n return {'ngbDate': {invalid: c.value}};\n }\n\n if (this.minDate && ngbDate.before(NgbDate.from(this.minDate))) {\n return {'ngbDate': {requiredBefore: this.minDate}};\n }\n\n if (this.maxDate && ngbDate.after(NgbDate.from(this.maxDate))) {\n return {'ngbDate': {requiredAfter: this.maxDate}};\n }\n }\n\n writeValue(value) {\n this._model = this._fromDateStruct(this._dateAdapter.fromModel(value));\n this._writeModelValue(this._model);\n }\n\n manualDateChange(value: string, updateView = false) {\n const inputValueChanged = value !== this._inputValue;\n if (inputValueChanged) {\n this._inputValue = value;\n this._model = this._fromDateStruct(this._parserFormatter.parse(value));\n }\n if (inputValueChanged || !updateView) {\n this._onChange(this._model ? this._dateAdapter.toModel(this._model) : (value === '' ? null : value));\n }\n if (updateView && this._model) {\n this._writeModelValue(this._model);\n }\n }\n\n isOpen() { return !!this._cRef; }\n\n /**\n * Opens the datepicker popup.\n *\n * If the related form control contains a valid date, the corresponding month will be opened.\n */\n open() {\n if (!this.isOpen()) {\n const cf = this._cfr.resolveComponentFactory(NgbDatepicker);\n this._cRef = this._vcRef.createComponent(cf);\n\n this._applyPopupStyling(this._cRef.location.nativeElement);\n this._applyDatepickerInputs(this._cRef.instance);\n this._subscribeForDatepickerOutputs(this._cRef.instance);\n this._cRef.instance.ngOnInit();\n this._cRef.instance.writeValue(this._dateAdapter.toModel(this._model));\n\n // date selection event handling\n this._cRef.instance.registerOnChange((selectedDate) => {\n this.writeValue(selectedDate);\n this._onChange(selectedDate);\n this._onTouched();\n });\n\n this._cRef.changeDetectorRef.detectChanges();\n\n this._cRef.instance.setDisabledState(this.disabled);\n\n if (this.container === 'body') {\n window.document.querySelector(this.container).appendChild(this._cRef.location.nativeElement);\n }\n\n // focus handling\n ngbFocusTrap(this._cRef.location.nativeElement, this.closed, true);\n this._cRef.instance.focus();\n\n ngbAutoClose(\n this._ngZone, this._document, this.autoClose, () => this.close(), this.closed, [],\n [this._elRef.nativeElement, this._cRef.location.nativeElement]);\n }\n }\n\n /**\n * Closes the datepicker popup.\n */\n close() {\n if (this.isOpen()) {\n this._vcRef.remove(this._vcRef.indexOf(this._cRef.hostView));\n this._cRef = null;\n this.closed.emit();\n this._changeDetector.markForCheck();\n }\n }\n\n /**\n * Toggles the datepicker popup.\n */\n toggle() {\n if (this.isOpen()) {\n this.close();\n } else {\n this.open();\n }\n }\n\n /**\n * Navigates to the provided date.\n *\n * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec.\n * If nothing or invalid date provided calendar will open current month.\n *\n * Use the `[startDate]` input as an alternative.\n */\n navigateTo(date?: {year: number, month: number, day?: number}) {\n if (this.isOpen()) {\n this._cRef.instance.navigateTo(date);\n }\n }\n\n onBlur() { this._onTouched(); }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['minDate'] || changes['maxDate']) {\n this._validatorChange();\n }\n }\n\n ngOnDestroy() {\n this.close();\n this._zoneSubscription.unsubscribe();\n }\n\n private _applyDatepickerInputs(datepickerInstance: NgbDatepicker): void {\n ['dayTemplate', 'dayTemplateData', 'displayMonths', 'firstDayOfWeek', 'footerTemplate', 'markDisabled', 'minDate',\n 'maxDate', 'navigation', 'outsideDays', 'showNavigation', 'showWeekdays', 'showWeekNumbers']\n .forEach((optionName: string) => {\n if (this[optionName] !== undefined) {\n datepickerInstance[optionName] = this[optionName];\n }\n });\n datepickerInstance.startDate = this.startDate || this._model;\n }\n\n private _applyPopupStyling(nativeElement: any) {\n this._renderer.addClass(nativeElement, 'dropdown-menu');\n this._renderer.addClass(nativeElement, 'show');\n\n if (this.container === 'body') {\n this._renderer.addClass(nativeElement, 'ngb-dp-body');\n }\n }\n\n private _subscribeForDatepickerOutputs(datepickerInstance: NgbDatepicker) {\n datepickerInstance.navigate.subscribe(navigateEvent => this.navigate.emit(navigateEvent));\n datepickerInstance.select.subscribe(date => {\n this.dateSelect.emit(date);\n if (this.autoClose === true || this.autoClose === 'inside') {\n this.close();\n }\n });\n }\n\n private _writeModelValue(model: NgbDate) {\n const value = this._parserFormatter.format(model);\n this._inputValue = value;\n this._renderer.setProperty(this._elRef.nativeElement, 'value', value);\n if (this.isOpen()) {\n this._cRef.instance.writeValue(this._dateAdapter.toModel(model));\n this._onTouched();\n }\n }\n\n private _fromDateStruct(date: NgbDateStruct): NgbDate {\n const ngbDate = date ? new NgbDate(date.year, date.month, date.day) : null;\n return this._calendar.isValid(ngbDate) ? ngbDate : null;\n }\n\n private _updatePopupPosition() {\n if (!this._cRef) {\n return;\n }\n\n let hostElement: HTMLElement;\n if (typeof this.positionTarget === 'string') {\n hostElement = window.document.querySelector(this.positionTarget);\n } else if (this.positionTarget instanceof HTMLElement) {\n hostElement = this.positionTarget;\n } else {\n hostElement = this._elRef.nativeElement;\n }\n\n if (this.positionTarget && !hostElement) {\n throw new Error('ngbDatepicker could not find element declared in [positionTarget] to position against.');\n }\n\n positionElements(hostElement, this._cRef.location.nativeElement, this.placement, this.container === 'body');\n }\n}\n","import {ChangeDetectionStrategy, Component, Input, ViewEncapsulation} from '@angular/core';\nimport {NgbDate} from './ngb-date';\nimport {NgbDatepickerI18n} from './datepicker-i18n';\n\n@Component({\n selector: '[ngbDatepickerDayView]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./datepicker-day-view.scss'],\n host: {\n 'class': 'btn-light',\n '[class.bg-primary]': 'selected',\n '[class.text-white]': 'selected',\n '[class.text-muted]': 'isMuted()',\n '[class.outside]': 'isMuted()',\n '[class.active]': 'focused'\n },\n template: `{{ i18n.getDayNumerals(date) }}`\n})\nexport class NgbDatepickerDayView {\n @Input() currentMonth: number;\n @Input() date: NgbDate;\n @Input() disabled: boolean;\n @Input() focused: boolean;\n @Input() selected: boolean;\n\n constructor(public i18n: NgbDatepickerI18n) {}\n\n isMuted() { return !this.selected && (this.date.month !== this.currentMonth || this.disabled); }\n}\n","import {Component, Input, Output, EventEmitter, ChangeDetectionStrategy, ViewEncapsulation} from '@angular/core';\nimport {NgbDate} from './ngb-date';\nimport {toInteger} from '../util/util';\nimport {NgbDatepickerI18n} from './datepicker-i18n';\n\n@Component({\n selector: 'ngb-datepicker-navigation-select',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./datepicker-navigation-select.scss'],\n template: `\n \n \n \n \n \n `\n})\nexport class NgbDatepickerNavigationSelect {\n @Input() date: NgbDate;\n @Input() disabled: boolean;\n @Input() months: number[];\n @Input() years: number[];\n\n @Output() select = new EventEmitter();\n\n constructor(public i18n: NgbDatepickerI18n) {}\n\n changeMonth(month: string) { this.select.emit(new NgbDate(this.date.year, toInteger(month), 1)); }\n\n changeYear(year: string) { this.select.emit(new NgbDate(toInteger(year), this.date.month, 1)); }\n}\n","import {NgbDate} from '../ngb-date';\nimport {NgbPeriod, NgbCalendar} from '../ngb-calendar';\nimport {Injectable} from '@angular/core';\nimport {isNumber} from '../../util/util';\n\n@Injectable()\nexport abstract class NgbCalendarHijri extends NgbCalendar {\n /**\n * Returns the number of days in a specific Hijri month.\n * `month` is 1 for Muharram, 2 for Safar, etc.\n * `year` is any Hijri year.\n */\n abstract getDaysPerMonth(month: number, year: number): number;\n\n /**\n * Returns the equivalent Hijri date value for a give input Gregorian date.\n * `gDate` is s JS Date to be converted to Hijri.\n */\n abstract fromGregorian(gDate: Date): NgbDate;\n\n /**\n * Converts the current Hijri date to Gregorian.\n */\n abstract toGregorian(hDate: NgbDate): Date;\n\n getDaysPerWeek() { return 7; }\n\n getMonths() { return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; }\n\n getWeeksPerMonth() { return 6; }\n\n getNext(date: NgbDate, period: NgbPeriod = 'd', number = 1) {\n date = new NgbDate(date.year, date.month, date.day);\n\n switch (period) {\n case 'y':\n date = this._setYear(date, date.year + number);\n date.month = 1;\n date.day = 1;\n return date;\n case 'm':\n date = this._setMonth(date, date.month + number);\n date.day = 1;\n return date;\n case 'd':\n return this._setDay(date, date.day + number);\n default:\n return date;\n }\n }\n\n getPrev(date: NgbDate, period: NgbPeriod = 'd', number = 1) { return this.getNext(date, period, -number); }\n\n getWeekday(date: NgbDate) {\n const day = this.toGregorian(date).getDay();\n // in JS Date Sun=0, in ISO 8601 Sun=7\n return day === 0 ? 7 : day;\n }\n\n getWeekNumber(week: NgbDate[], firstDayOfWeek: number) {\n // in JS Date Sun=0, in ISO 8601 Sun=7\n if (firstDayOfWeek === 7) {\n firstDayOfWeek = 0;\n }\n\n const thursdayIndex = (4 + 7 - firstDayOfWeek) % 7;\n const date = week[thursdayIndex];\n\n const jsDate = this.toGregorian(date);\n jsDate.setDate(jsDate.getDate() + 4 - (jsDate.getDay() || 7)); // Thursday\n const time = jsDate.getTime();\n const MuhDate = this.toGregorian(new NgbDate(date.year, 1, 1)); // Compare with Muharram 1\n return Math.floor(Math.round((time - MuhDate.getTime()) / 86400000) / 7) + 1;\n }\n\n getToday(): NgbDate { return this.fromGregorian(new Date()); }\n\n\n isValid(date: NgbDate): boolean {\n return date && isNumber(date.year) && isNumber(date.month) && isNumber(date.day) &&\n !isNaN(this.toGregorian(date).getTime());\n }\n\n private _setDay(date: NgbDate, day: number): NgbDate {\n day = +day;\n let mDays = this.getDaysPerMonth(date.month, date.year);\n if (day <= 0) {\n while (day <= 0) {\n date = this._setMonth(date, date.month - 1);\n mDays = this.getDaysPerMonth(date.month, date.year);\n day += mDays;\n }\n } else if (day > mDays) {\n while (day > mDays) {\n day -= mDays;\n date = this._setMonth(date, date.month + 1);\n mDays = this.getDaysPerMonth(date.month, date.year);\n }\n }\n date.day = day;\n return date;\n }\n\n private _setMonth(date: NgbDate, month: number): NgbDate {\n month = +month;\n date.year = date.year + Math.floor((month - 1) / 12);\n date.month = Math.floor(((month - 1) % 12 + 12) % 12) + 1;\n return date;\n }\n\n private _setYear(date: NgbDate, year: number): NgbDate {\n date.year = +year;\n return date;\n }\n}\n","import {NgbCalendarHijri} from './ngb-calendar-hijri';\nimport {NgbDate} from '../ngb-date';\nimport {Injectable} from '@angular/core';\n\n/**\n * Checks if islamic year is a leap year\n */\nfunction isIslamicLeapYear(hYear: number): boolean {\n return (14 + 11 * hYear) % 30 < 11;\n}\n\n/**\n * Checks if gregorian years is a leap year\n */\nfunction isGregorianLeapYear(gDate: Date): boolean {\n const year = gDate.getFullYear();\n return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;\n}\n\n/**\n * Returns the start of Hijri Month.\n * `hMonth` is 0 for Muharram, 1 for Safar, etc.\n * `hYear` is any Hijri hYear.\n */\nfunction getIslamicMonthStart(hYear: number, hMonth: number): number {\n return Math.ceil(29.5 * hMonth) + (hYear - 1) * 354 + Math.floor((3 + 11 * hYear) / 30.0);\n}\n\n/**\n * Returns the start of Hijri year.\n * `year` is any Hijri year.\n */\nfunction getIslamicYearStart(year: number): number {\n return (year - 1) * 354 + Math.floor((3 + 11 * year) / 30.0);\n}\n\nfunction mod(a: number, b: number): number {\n return a - b * Math.floor(a / b);\n}\n\n/**\n * The civil calendar is one type of Hijri calendars used in islamic countries.\n * Uses a fixed cycle of alternating 29- and 30-day months,\n * with a leap day added to the last month of 11 out of every 30 years.\n * http://cldr.unicode.org/development/development-process/design-proposals/islamic-calendar-types\n * All the calculations here are based on the equations from \"Calendrical Calculations\" By Edward M. Reingold, Nachum\n * Dershowitz.\n */\n\nconst GREGORIAN_EPOCH = 1721425.5;\nconst ISLAMIC_EPOCH = 1948439.5;\n\n@Injectable()\nexport class NgbCalendarIslamicCivil extends NgbCalendarHijri {\n /**\n * Returns the equivalent islamic(civil) date value for a give input Gregorian date.\n * `gDate` is a JS Date to be converted to Hijri.\n */\n fromGregorian(gDate: Date): NgbDate {\n const gYear = gDate.getFullYear(), gMonth = gDate.getMonth(), gDay = gDate.getDate();\n\n let julianDay = GREGORIAN_EPOCH - 1 + 365 * (gYear - 1) + Math.floor((gYear - 1) / 4) +\n -Math.floor((gYear - 1) / 100) + Math.floor((gYear - 1) / 400) +\n Math.floor(\n (367 * (gMonth + 1) - 362) / 12 + (gMonth + 1 <= 2 ? 0 : isGregorianLeapYear(gDate) ? -1 : -2) + gDay);\n julianDay = Math.floor(julianDay) + 0.5;\n\n const days = julianDay - ISLAMIC_EPOCH;\n const hYear = Math.floor((30 * days + 10646) / 10631.0);\n let hMonth = Math.ceil((days - 29 - getIslamicYearStart(hYear)) / 29.5);\n hMonth = Math.min(hMonth, 11);\n const hDay = Math.ceil(days - getIslamicMonthStart(hYear, hMonth)) + 1;\n return new NgbDate(hYear, hMonth + 1, hDay);\n }\n\n /**\n * Returns the equivalent JS date value for a give input islamic(civil) date.\n * `hDate` is an islamic(civil) date to be converted to Gregorian.\n */\n toGregorian(hDate: NgbDate): Date {\n const hYear = hDate.year;\n const hMonth = hDate.month - 1;\n const hDay = hDate.day;\n const julianDay =\n hDay + Math.ceil(29.5 * hMonth) + (hYear - 1) * 354 + Math.floor((3 + 11 * hYear) / 30) + ISLAMIC_EPOCH - 1;\n\n const wjd = Math.floor(julianDay - 0.5) + 0.5, depoch = wjd - GREGORIAN_EPOCH,\n quadricent = Math.floor(depoch / 146097), dqc = mod(depoch, 146097), cent = Math.floor(dqc / 36524),\n dcent = mod(dqc, 36524), quad = Math.floor(dcent / 1461), dquad = mod(dcent, 1461),\n yindex = Math.floor(dquad / 365);\n let year = quadricent * 400 + cent * 100 + quad * 4 + yindex;\n if (!(cent === 4 || yindex === 4)) {\n year++;\n }\n\n const gYearStart = GREGORIAN_EPOCH + 365 * (year - 1) + Math.floor((year - 1) / 4) - Math.floor((year - 1) / 100) +\n Math.floor((year - 1) / 400);\n\n const yearday = wjd - gYearStart;\n\n const tjd = GREGORIAN_EPOCH - 1 + 365 * (year - 1) + Math.floor((year - 1) / 4) - Math.floor((year - 1) / 100) +\n Math.floor((year - 1) / 400) + Math.floor(739 / 12 + (isGregorianLeapYear(new Date(year, 3, 1)) ? -1 : -2) + 1);\n\n const leapadj = wjd < tjd ? 0 : isGregorianLeapYear(new Date(year, 3, 1)) ? 1 : 2;\n\n const month = Math.floor(((yearday + leapadj) * 12 + 373) / 367);\n const tjd2 = GREGORIAN_EPOCH - 1 + 365 * (year - 1) + Math.floor((year - 1) / 4) - Math.floor((year - 1) / 100) +\n Math.floor((year - 1) / 400) +\n Math.floor(\n (367 * month - 362) / 12 + (month <= 2 ? 0 : isGregorianLeapYear(new Date(year, month - 1, 1)) ? -1 : -2) +\n 1);\n\n const day = wjd - tjd2 + 1;\n\n return new Date(year, month - 1, day);\n }\n\n /**\n * Returns the number of days in a specific Hijri month.\n * `month` is 1 for Muharram, 2 for Safar, etc.\n * `year` is any Hijri year.\n */\n getDaysPerMonth(month: number, year: number): number {\n year = year + Math.floor(month / 13);\n month = ((month - 1) % 12) + 1;\n let length = 29 + month % 2;\n if (month === 12 && isIslamicLeapYear(year)) {\n length++;\n }\n return length;\n }\n}\n","import {NgbCalendarIslamicCivil} from './ngb-calendar-islamic-civil';\nimport {NgbDate} from '../ngb-date';\nimport {Injectable} from '@angular/core';\n\n/**\n * Umalqura calendar is one type of Hijri calendars used in islamic countries.\n * This Calendar is used by Saudi Arabia for administrative purpose.\n * Unlike tabular calendars, the algorithm involves astronomical calculation, but it's still deterministic.\n * http://cldr.unicode.org/development/development-process/design-proposals/islamic-calendar-types\n */\n\nconst GREGORIAN_FIRST_DATE = new Date(1882, 10, 12);\nconst GREGORIAN_LAST_DATE = new Date(2174, 10, 25);\nconst HIJRI_BEGIN = 1300;\nconst HIJRI_END = 1600;\nconst ONE_DAY = 1000 * 60 * 60 * 24;\n\nconst MONTH_LENGTH = [\n // 1300-1304\n '101010101010', '110101010100', '111011001001', '011011010100', '011011101010',\n // 1305-1309\n '001101101100', '101010101101', '010101010101', '011010101001', '011110010010',\n // 1310-1314\n '101110101001', '010111010100', '101011011010', '010101011100', '110100101101',\n // 1315-1319\n '011010010101', '011101001010', '101101010100', '101101101010', '010110101101',\n // 1320-1324\n '010010101110', '101001001111', '010100010111', '011010001011', '011010100101',\n // 1325-1329\n '101011010101', '001011010110', '100101011011', '010010011101', '101001001101',\n // 1330-1334\n '110100100110', '110110010101', '010110101100', '100110110110', '001010111010',\n // 1335-1339\n '101001011011', '010100101011', '101010010101', '011011001010', '101011101001',\n // 1340-1344\n '001011110100', '100101110110', '001010110110', '100101010110', '101011001010',\n // 1345-1349\n '101110100100', '101111010010', '010111011001', '001011011100', '100101101101',\n // 1350-1354\n '010101001101', '101010100101', '101101010010', '101110100101', '010110110100',\n // 1355-1359\n '100110110110', '010101010111', '001010010111', '010101001011', '011010100011',\n // 1360-1364\n '011101010010', '101101100101', '010101101010', '101010101011', '010100101011',\n // 1365-1369\n '110010010101', '110101001010', '110110100101', '010111001010', '101011010110',\n // 1370-1374\n '100101010111', '010010101011', '100101001011', '101010100101', '101101010010',\n // 1375-1379\n '101101101010', '010101110101', '001001110110', '100010110111', '010001011011',\n // 1380-1384\n '010101010101', '010110101001', '010110110100', '100111011010', '010011011101',\n // 1385-1389\n '001001101110', '100100110110', '101010101010', '110101010100', '110110110010',\n // 1390-1394\n '010111010101', '001011011010', '100101011011', '010010101011', '101001010101',\n // 1395-1399\n '101101001001', '101101100100', '101101110001', '010110110100', '101010110101',\n // 1400-1404\n '101001010101', '110100100101', '111010010010', '111011001001', '011011010100',\n // 1405-1409\n '101011101001', '100101101011', '010010101011', '101010010011', '110101001001',\n // 1410-1414\n '110110100100', '110110110010', '101010111001', '010010111010', '101001011011',\n // 1415-1419\n '010100101011', '101010010101', '101100101010', '101101010101', '010101011100',\n // 1420-1424\n '010010111101', '001000111101', '100100011101', '101010010101', '101101001010',\n // 1425-1429\n '101101011010', '010101101101', '001010110110', '100100111011', '010010011011',\n // 1430-1434\n '011001010101', '011010101001', '011101010100', '101101101010', '010101101100',\n // 1435-1439\n '101010101101', '010101010101', '101100101001', '101110010010', '101110101001',\n // 1440-1444\n '010111010100', '101011011010', '010101011010', '101010101011', '010110010101',\n // 1445-1449\n '011101001001', '011101100100', '101110101010', '010110110101', '001010110110',\n // 1450-1454\n '101001010110', '111001001101', '101100100101', '101101010010', '101101101010',\n // 1455-1459\n '010110101101', '001010101110', '100100101111', '010010010111', '011001001011',\n // 1460-1464\n '011010100101', '011010101100', '101011010110', '010101011101', '010010011101',\n // 1465-1469\n '101001001101', '110100010110', '110110010101', '010110101010', '010110110101',\n // 1470-1474\n '001011011010', '100101011011', '010010101101', '010110010101', '011011001010',\n // 1475-1479\n '011011100100', '101011101010', '010011110101', '001010110110', '100101010110',\n // 1480-1484\n '101010101010', '101101010100', '101111010010', '010111011001', '001011101010',\n // 1485-1489\n '100101101101', '010010101101', '101010010101', '101101001010', '101110100101',\n // 1490-1494\n '010110110010', '100110110101', '010011010110', '101010010111', '010101000111',\n // 1495-1499\n '011010010011', '011101001001', '101101010101', '010101101010', '101001101011',\n // 1500-1504\n '010100101011', '101010001011', '110101000110', '110110100011', '010111001010',\n // 1505-1509\n '101011010110', '010011011011', '001001101011', '100101001011', '101010100101',\n // 1510-1514\n '101101010010', '101101101001', '010101110101', '000101110110', '100010110111',\n // 1515-1519\n '001001011011', '010100101011', '010101100101', '010110110100', '100111011010',\n // 1520-1524\n '010011101101', '000101101101', '100010110110', '101010100110', '110101010010',\n // 1525-1529\n '110110101001', '010111010100', '101011011010', '100101011011', '010010101011',\n // 1530-1534\n '011001010011', '011100101001', '011101100010', '101110101001', '010110110010',\n // 1535-1539\n '101010110101', '010101010101', '101100100101', '110110010010', '111011001001',\n // 1540-1544\n '011011010010', '101011101001', '010101101011', '010010101011', '101001010101',\n // 1545-1549\n '110100101001', '110101010100', '110110101010', '100110110101', '010010111010',\n // 1550-1554\n '101000111011', '010010011011', '101001001101', '101010101010', '101011010101',\n // 1555-1559\n '001011011010', '100101011101', '010001011110', '101000101110', '110010011010',\n // 1560-1564\n '110101010101', '011010110010', '011010111001', '010010111010', '101001011101',\n // 1565-1569\n '010100101101', '101010010101', '101101010010', '101110101000', '101110110100',\n // 1570-1574\n '010110111001', '001011011010', '100101011010', '101101001010', '110110100100',\n // 1575-1579\n '111011010001', '011011101000', '101101101010', '010101101101', '010100110101',\n // 1580-1584\n '011010010101', '110101001010', '110110101000', '110111010100', '011011011010',\n // 1585-1589\n '010101011011', '001010011101', '011000101011', '101100010101', '101101001010',\n // 1590-1594\n '101110010101', '010110101010', '101010101110', '100100101110', '110010001111',\n // 1595-1599\n '010100100111', '011010010101', '011010101010', '101011010110', '010101011101',\n // 1600\n '001010011101'\n];\n\nfunction getDaysDiff(date1: Date, date2: Date): number {\n // Ignores the time part in date1 and date2:\n const time1 = Date.UTC(date1.getFullYear(), date1.getMonth(), date1.getDate());\n const time2 = Date.UTC(date2.getFullYear(), date2.getMonth(), date2.getDate());\n const diff = Math.abs(time1 - time2);\n return Math.round(diff / ONE_DAY);\n}\n\n@Injectable()\nexport class NgbCalendarIslamicUmalqura extends NgbCalendarIslamicCivil {\n /**\n * Returns the equivalent islamic(Umalqura) date value for a give input Gregorian date.\n * `gdate` is s JS Date to be converted to Hijri.\n */\n fromGregorian(gDate: Date): NgbDate {\n let hDay = 1, hMonth = 0, hYear = 1300;\n let daysDiff = getDaysDiff(gDate, GREGORIAN_FIRST_DATE);\n if (gDate.getTime() - GREGORIAN_FIRST_DATE.getTime() >= 0 && gDate.getTime() - GREGORIAN_LAST_DATE.getTime() <= 0) {\n let year = 1300;\n for (let i = 0; i < MONTH_LENGTH.length; i++, year++) {\n for (let j = 0; j < 12; j++) {\n let numOfDays = +MONTH_LENGTH[i][j] + 29;\n if (daysDiff <= numOfDays) {\n hDay = daysDiff + 1;\n if (hDay > numOfDays) {\n hDay = 1;\n j++;\n }\n if (j > 11) {\n j = 0;\n year++;\n }\n hMonth = j;\n hYear = year;\n return new NgbDate(hYear, hMonth + 1, hDay);\n }\n daysDiff = daysDiff - numOfDays;\n }\n }\n } else {\n return super.fromGregorian(gDate);\n }\n }\n /**\n * Converts the current Hijri date to Gregorian.\n */\n toGregorian(hDate: NgbDate): Date {\n const hYear = hDate.year;\n const hMonth = hDate.month - 1;\n const hDay = hDate.day;\n let gDate = new Date(GREGORIAN_FIRST_DATE);\n let dayDiff = hDay - 1;\n if (hYear >= HIJRI_BEGIN && hYear <= HIJRI_END) {\n for (let y = 0; y < hYear - HIJRI_BEGIN; y++) {\n for (let m = 0; m < 12; m++) {\n dayDiff += +MONTH_LENGTH[y][m] + 29;\n }\n }\n for (let m = 0; m < hMonth; m++) {\n dayDiff += +MONTH_LENGTH[hYear - HIJRI_BEGIN][m] + 29;\n }\n gDate.setDate(GREGORIAN_FIRST_DATE.getDate() + dayDiff);\n } else {\n gDate = super.toGregorian(hDate);\n }\n return gDate;\n }\n /**\n * Returns the number of days in a specific Hijri hMonth.\n * `hMonth` is 1 for Muharram, 2 for Safar, etc.\n * `hYear` is any Hijri hYear.\n */\n getDaysPerMonth(hMonth: number, hYear: number): number {\n if (hYear >= HIJRI_BEGIN && hYear <= HIJRI_END) {\n const pos = hYear - HIJRI_BEGIN;\n return +MONTH_LENGTH[pos][hMonth - 1] + 29;\n }\n return super.getDaysPerMonth(hMonth, hYear);\n }\n}\n","import {NgbDate} from '../ngb-date';\n\n/**\n * Returns the equivalent JS date value for a give input Jalali date.\n * `jalaliDate` is an Jalali date to be converted to Gregorian.\n */\nexport function toGregorian(jalaliDate: NgbDate): Date {\n let jdn = jalaliToJulian(jalaliDate.year, jalaliDate.month, jalaliDate.day);\n let date = julianToGregorian(jdn);\n date.setHours(6, 30, 3, 200);\n return date;\n}\n\n/**\n * Returns the equivalent jalali date value for a give input Gregorian date.\n * `gdate` is a JS Date to be converted to jalali.\n * utc to local\n */\nexport function fromGregorian(gdate: Date): NgbDate {\n let g2d = gregorianToJulian(gdate.getFullYear(), gdate.getMonth() + 1, gdate.getDate());\n return julianToJalali(g2d);\n}\n\nexport function setJalaliYear(date: NgbDate, yearValue: number): NgbDate {\n date.year = +yearValue;\n return date;\n}\n\nexport function setJalaliMonth(date: NgbDate, month: number): NgbDate {\n month = +month;\n date.year = date.year + Math.floor((month - 1) / 12);\n date.month = Math.floor(((month - 1) % 12 + 12) % 12) + 1;\n return date;\n}\n\nexport function setJalaliDay(date: NgbDate, day: number): NgbDate {\n let mDays = getDaysPerMonth(date.month, date.year);\n if (day <= 0) {\n while (day <= 0) {\n date = setJalaliMonth(date, date.month - 1);\n mDays = getDaysPerMonth(date.month, date.year);\n day += mDays;\n }\n } else if (day > mDays) {\n while (day > mDays) {\n day -= mDays;\n date = setJalaliMonth(date, date.month + 1);\n mDays = getDaysPerMonth(date.month, date.year);\n }\n }\n date.day = day;\n return date;\n}\n\nfunction mod(a: number, b: number): number {\n return a - b * Math.floor(a / b);\n}\n\nfunction div(a: number, b: number) {\n return Math.trunc(a / b);\n}\n\n/*\n This function determines if the Jalali (Persian) year is\n leap (366-day long) or is the common year (365 days), and\n finds the day in March (Gregorian calendar) of the first\n day of the Jalali year (jalaliYear).\n @param jalaliYear Jalali calendar year (-61 to 3177)\n @return\n leap: number of years since the last leap year (0 to 4)\n gYear: Gregorian year of the beginning of Jalali year\n march: the March day of Farvardin the 1st (1st day of jalaliYear)\n @see: http://www.astro.uni.torun.pl/~kb/Papers/EMP/PersianC-EMP.htm\n @see: http://www.fourmilab.ch/documents/calendar/\n */\nfunction jalCal(jalaliYear: number) {\n // Jalali years starting the 33-year rule.\n let breaks =\n [-61, 9, 38, 199, 426, 686, 756, 818, 1111, 1181, 1210, 1635, 2060, 2097, 2192, 2262, 2324, 2394, 2456, 3178];\n const breaksLength = breaks.length;\n const gYear = jalaliYear + 621;\n let leapJ = -14;\n let jp = breaks[0];\n\n if (jalaliYear < jp || jalaliYear >= breaks[breaksLength - 1]) {\n throw new Error('Invalid Jalali year ' + jalaliYear);\n }\n\n // Find the limiting years for the Jalali year jalaliYear.\n let jump;\n for (let i = 1; i < breaksLength; i += 1) {\n const jm = breaks[i];\n jump = jm - jp;\n if (jalaliYear < jm) {\n break;\n }\n leapJ = leapJ + div(jump, 33) * 8 + div(mod(jump, 33), 4);\n jp = jm;\n }\n let n = jalaliYear - jp;\n\n // Find the number of leap years from AD 621 to the beginning\n // of the current Jalali year in the Persian calendar.\n leapJ = leapJ + div(n, 33) * 8 + div(mod(n, 33) + 3, 4);\n if (mod(jump, 33) === 4 && jump - n === 4) {\n leapJ += 1;\n }\n\n // And the same in the Gregorian calendar (until the year gYear).\n const leapG = div(gYear, 4) - div((div(gYear, 100) + 1) * 3, 4) - 150;\n\n // Determine the Gregorian date of Farvardin the 1st.\n const march = 20 + leapJ - leapG;\n\n // Find how many years have passed since the last leap year.\n if (jump - n < 6) {\n n = n - jump + div(jump + 4, 33) * 33;\n }\n let leap = mod(mod(n + 1, 33) - 1, 4);\n if (leap === -1) {\n leap = 4;\n }\n\n return {leap: leap, gy: gYear, march: march};\n}\n\n/*\n Calculates Gregorian and Julian calendar dates from the Julian Day number\n (jdn) for the period since jdn=-34839655 (i.e. the year -100100 of both\n calendars) to some millions years ahead of the present.\n @param jdn Julian Day number\n @return\n gYear: Calendar year (years BC numbered 0, -1, -2, ...)\n gMonth: Calendar month (1 to 12)\n gDay: Calendar day of the month M (1 to 28/29/30/31)\n */\nfunction julianToGregorian(julianDayNumber: number) {\n let j = 4 * julianDayNumber + 139361631;\n j = j + div(div(4 * julianDayNumber + 183187720, 146097) * 3, 4) * 4 - 3908;\n const i = div(mod(j, 1461), 4) * 5 + 308;\n const gDay = div(mod(i, 153), 5) + 1;\n const gMonth = mod(div(i, 153), 12) + 1;\n const gYear = div(j, 1461) - 100100 + div(8 - gMonth, 6);\n\n return new Date(gYear, gMonth - 1, gDay);\n}\n\n/*\n Converts a date of the Jalali calendar to the Julian Day number.\n @param jy Jalali year (1 to 3100)\n @param jm Jalali month (1 to 12)\n @param jd Jalali day (1 to 29/31)\n @return Julian Day number\n */\nfunction gregorianToJulian(gy: number, gm: number, gd: number) {\n let d = div((gy + div(gm - 8, 6) + 100100) * 1461, 4) + div(153 * mod(gm + 9, 12) + 2, 5) + gd - 34840408;\n d = d - div(div(gy + 100100 + div(gm - 8, 6), 100) * 3, 4) + 752;\n return d;\n}\n\n/*\n Converts the Julian Day number to a date in the Jalali calendar.\n @param julianDayNumber Julian Day number\n @return\n jalaliYear: Jalali year (1 to 3100)\n jalaliMonth: Jalali month (1 to 12)\n jalaliDay: Jalali day (1 to 29/31)\n */\nfunction julianToJalali(julianDayNumber: number) {\n let gy = julianToGregorian(julianDayNumber).getFullYear() // Calculate Gregorian year (gy).\n ,\n jalaliYear = gy - 621, r = jalCal(jalaliYear), gregorianDay = gregorianToJulian(gy, 3, r.march), jalaliDay,\n jalaliMonth, numberOfDays;\n\n // Find number of days that passed since 1 Farvardin.\n numberOfDays = julianDayNumber - gregorianDay;\n if (numberOfDays >= 0) {\n if (numberOfDays <= 185) {\n // The first 6 months.\n jalaliMonth = 1 + div(numberOfDays, 31);\n jalaliDay = mod(numberOfDays, 31) + 1;\n return new NgbDate(jalaliYear, jalaliMonth, jalaliDay);\n } else {\n // The remaining months.\n numberOfDays -= 186;\n }\n } else {\n // Previous Jalali year.\n jalaliYear -= 1;\n numberOfDays += 179;\n if (r.leap === 1) {\n numberOfDays += 1;\n }\n }\n jalaliMonth = 7 + div(numberOfDays, 30);\n jalaliDay = mod(numberOfDays, 30) + 1;\n\n return new NgbDate(jalaliYear, jalaliMonth, jalaliDay);\n}\n\n/*\n Converts a date of the Jalali calendar to the Julian Day number.\n @param jYear Jalali year (1 to 3100)\n @param jMonth Jalali month (1 to 12)\n @param jDay Jalali day (1 to 29/31)\n @return Julian Day number\n */\nfunction jalaliToJulian(jYear: number, jMonth: number, jDay: number) {\n let r = jalCal(jYear);\n return gregorianToJulian(r.gy, 3, r.march) + (jMonth - 1) * 31 - div(jMonth, 7) * (jMonth - 7) + jDay - 1;\n}\n\n/**\n * Returns the number of days in a specific jalali month.\n */\nfunction getDaysPerMonth(month: number, year: number): number {\n if (month <= 6) {\n return 31;\n }\n if (month <= 11) {\n return 30;\n }\n if (jalCal(year).leap === 0) {\n return 30;\n }\n return 29;\n}\n","import {Injectable} from '@angular/core';\nimport {NgbDate} from '../ngb-date';\nimport {NgbCalendar, NgbPeriod} from '../ngb-calendar';\nimport {isInteger} from '../../util/util';\n\nimport {fromGregorian, setJalaliDay, setJalaliMonth, setJalaliYear, toGregorian} from './jalali';\n\n@Injectable()\nexport class NgbCalendarPersian extends NgbCalendar {\n getDaysPerWeek() { return 7; }\n\n getMonths() { return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; }\n\n getWeeksPerMonth() { return 6; }\n\n getNext(date: NgbDate, period: NgbPeriod = 'd', number = 1) {\n date = new NgbDate(date.year, date.month, date.day);\n\n switch (period) {\n case 'y':\n date = setJalaliYear(date, date.year + number);\n date.month = 1;\n date.day = 1;\n return date;\n case 'm':\n date = setJalaliMonth(date, date.month + number);\n date.day = 1;\n return date;\n case 'd':\n return setJalaliDay(date, date.day + number);\n default:\n return date;\n }\n }\n\n getPrev(date: NgbDate, period: NgbPeriod = 'd', number = 1) { return this.getNext(date, period, -number); }\n\n getWeekday(date: NgbDate) {\n const day = toGregorian(date).getDay();\n // in JS Date Sun=0, in ISO 8601 Sun=7\n return day === 0 ? 7 : day;\n }\n\n getWeekNumber(week: NgbDate[], firstDayOfWeek: number) {\n // in JS Date Sun=0, in ISO 8601 Sun=7\n if (firstDayOfWeek === 7) {\n firstDayOfWeek = 0;\n }\n\n const thursdayIndex = (4 + 7 - firstDayOfWeek) % 7;\n const date = week[thursdayIndex];\n\n const jsDate = toGregorian(date);\n jsDate.setDate(jsDate.getDate() + 4 - (jsDate.getDay() || 7)); // Thursday\n const time = jsDate.getTime();\n const startDate = toGregorian(new NgbDate(date.year, 1, 1));\n return Math.floor(Math.round((time - startDate.getTime()) / 86400000) / 7) + 1;\n }\n\n getToday(): NgbDate { return fromGregorian(new Date()); }\n\n isValid(date: NgbDate): boolean {\n return date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day) &&\n !isNaN(toGregorian(date).getTime());\n }\n}\n","import {NgbDate} from '../ngb-date';\nimport {NgbDateStruct} from '../ngb-date-struct';\n\nconst PARTS_PER_HOUR = 1080;\nconst PARTS_PER_DAY = 24 * PARTS_PER_HOUR;\nconst PARTS_FRACTIONAL_MONTH = 12 * PARTS_PER_HOUR + 793;\nconst PARTS_PER_MONTH = 29 * PARTS_PER_DAY + PARTS_FRACTIONAL_MONTH;\nconst BAHARAD = 11 * PARTS_PER_HOUR + 204;\nconst HEBREW_DAY_ON_JAN_1_1970 = 2092591;\nconst GREGORIAN_EPOCH = 1721425.5;\n\nfunction isGregorianLeapYear(year: number): boolean {\n return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;\n}\n\nfunction numberOfFirstDayInYear(year: number): number {\n let monthsBeforeYear = Math.floor((235 * year - 234) / 19);\n let fractionalMonthsBeforeYear = monthsBeforeYear * PARTS_FRACTIONAL_MONTH + BAHARAD;\n let dayNumber = monthsBeforeYear * 29 + Math.floor(fractionalMonthsBeforeYear / PARTS_PER_DAY);\n let timeOfDay = fractionalMonthsBeforeYear % PARTS_PER_DAY;\n\n let dayOfWeek = dayNumber % 7; // 0 == Monday\n\n if (dayOfWeek === 2 || dayOfWeek === 4 || dayOfWeek === 6) {\n dayNumber++;\n dayOfWeek = dayNumber % 7;\n }\n if (dayOfWeek === 1 && timeOfDay > 15 * PARTS_PER_HOUR + 204 && !isHebrewLeapYear(year)) {\n dayNumber += 2;\n } else if (dayOfWeek === 0 && timeOfDay > 21 * PARTS_PER_HOUR + 589 && isHebrewLeapYear(year - 1)) {\n dayNumber++;\n }\n return dayNumber;\n}\n\nfunction getDaysInGregorianMonth(month: number, year: number): number {\n let days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n if (isGregorianLeapYear(year)) {\n days[1]++;\n }\n return days[month - 1];\n}\n\nfunction getHebrewMonths(year: number): number {\n return isHebrewLeapYear(year) ? 13 : 12;\n}\n\n/**\n * Returns the number of days in a specific Hebrew year.\n * `year` is any Hebrew year.\n */\nfunction getDaysInHebrewYear(year: number): number {\n return numberOfFirstDayInYear(year + 1) - numberOfFirstDayInYear(year);\n}\n\nexport function isHebrewLeapYear(year: number): boolean {\n let b = (year * 12 + 17) % 19;\n return b >= ((b < 0) ? -7 : 12);\n}\n\n/**\n * Returns the number of days in a specific Hebrew month.\n * `month` is 1 for Nisan, 2 for Iyar etc. Note: Hebrew leap year contains 13 months.\n * `year` is any Hebrew year.\n */\nexport function getDaysInHebrewMonth(month: number, year: number): number {\n let yearLength = numberOfFirstDayInYear(year + 1) - numberOfFirstDayInYear(year);\n let yearType = (yearLength <= 380 ? yearLength : (yearLength - 30)) - 353;\n let leapYear = isHebrewLeapYear(year);\n let daysInMonth = leapYear ? [30, 29, 29, 29, 30, 30, 29, 30, 29, 30, 29, 30, 29] :\n [30, 29, 29, 29, 30, 29, 30, 29, 30, 29, 30, 29];\n if (yearType > 0) {\n daysInMonth[2]++; // Kislev gets an extra day in normal or complete years.\n }\n if (yearType > 1) {\n daysInMonth[1]++; // Heshvan gets an extra day in complete years only.\n }\n return daysInMonth[month - 1];\n}\n\nexport function getDayNumberInHebrewYear(date: NgbDate): number {\n let numberOfDay = 0;\n for (let i = 1; i < date.month; i++) {\n numberOfDay += getDaysInHebrewMonth(i, date.year);\n }\n return numberOfDay + date.day;\n}\n\nexport function setHebrewMonth(date: NgbDate, val: number): NgbDate {\n let after = val >= 0;\n if (!after) {\n val = -val;\n }\n while (val > 0) {\n if (after) {\n if (val > getHebrewMonths(date.year) - date.month) {\n val -= getHebrewMonths(date.year) - date.month + 1;\n date.year++;\n date.month = 1;\n } else {\n date.month += val;\n val = 0;\n }\n } else {\n if (val >= date.month) {\n date.year--;\n val -= date.month;\n date.month = getHebrewMonths(date.year);\n } else {\n date.month -= val;\n val = 0;\n }\n }\n }\n return date;\n}\n\nexport function setHebrewDay(date: NgbDate, val: number): NgbDate {\n let after = val >= 0;\n if (!after) {\n val = -val;\n }\n while (val > 0) {\n if (after) {\n if (val > getDaysInHebrewYear(date.year) - getDayNumberInHebrewYear(date)) {\n val -= getDaysInHebrewYear(date.year) - getDayNumberInHebrewYear(date) + 1;\n date.year++;\n date.month = 1;\n date.day = 1;\n } else if (val > getDaysInHebrewMonth(date.month, date.year) - date.day) {\n val -= getDaysInHebrewMonth(date.month, date.year) - date.day + 1;\n date.month++;\n date.day = 1;\n } else {\n date.day += val;\n val = 0;\n }\n } else {\n if (val >= date.day) {\n val -= date.day;\n date.month--;\n if (date.month === 0) {\n date.year--;\n date.month = getHebrewMonths(date.year);\n }\n date.day = getDaysInHebrewMonth(date.month, date.year);\n } else {\n date.day -= val;\n val = 0;\n }\n }\n }\n return date;\n}\n\n/**\n * Returns the equivalent Hebrew date value for a give input Gregorian date.\n * `gdate` is a JS Date to be converted to Hebrew date.\n */\nexport function fromGregorian(gdate: Date): NgbDate {\n const date = new Date(gdate);\n const gYear = date.getFullYear(), gMonth = date.getMonth(), gDay = date.getDate();\n let julianDay = GREGORIAN_EPOCH - 1 + 365 * (gYear - 1) + Math.floor((gYear - 1) / 4) -\n Math.floor((gYear - 1) / 100) + Math.floor((gYear - 1) / 400) +\n Math.floor((367 * (gMonth + 1) - 362) / 12 + (gMonth + 1 <= 2 ? 0 : isGregorianLeapYear(gYear) ? -1 : -2) + gDay);\n julianDay = Math.floor(julianDay + 0.5);\n let daysSinceHebEpoch = julianDay - 347997;\n let monthsSinceHebEpoch = Math.floor(daysSinceHebEpoch * PARTS_PER_DAY / PARTS_PER_MONTH);\n let hYear = Math.floor((monthsSinceHebEpoch * 19 + 234) / 235) + 1;\n let firstDayOfThisYear = numberOfFirstDayInYear(hYear);\n let dayOfYear = daysSinceHebEpoch - firstDayOfThisYear;\n while (dayOfYear < 1) {\n hYear--;\n firstDayOfThisYear = numberOfFirstDayInYear(hYear);\n dayOfYear = daysSinceHebEpoch - firstDayOfThisYear;\n }\n let hMonth = 1;\n let hDay = dayOfYear;\n while (hDay > getDaysInHebrewMonth(hMonth, hYear)) {\n hDay -= getDaysInHebrewMonth(hMonth, hYear);\n hMonth++;\n }\n return new NgbDate(hYear, hMonth, hDay);\n}\n\n/**\n * Returns the equivalent JS date value for a given Hebrew date.\n * `hebrewDate` is an Hebrew date to be converted to Gregorian.\n */\nexport function toGregorian(hebrewDate: NgbDateStruct | NgbDate): Date {\n const hYear = hebrewDate.year;\n const hMonth = hebrewDate.month;\n const hDay = hebrewDate.day;\n let days = numberOfFirstDayInYear(hYear);\n for (let i = 1; i < hMonth; i++) {\n days += getDaysInHebrewMonth(i, hYear);\n }\n days += hDay;\n let diffDays = days - HEBREW_DAY_ON_JAN_1_1970;\n let after = diffDays >= 0;\n if (!after) {\n diffDays = -diffDays;\n }\n let gYear = 1970;\n let gMonth = 1;\n let gDay = 1;\n while (diffDays > 0) {\n if (after) {\n if (diffDays >= (isGregorianLeapYear(gYear) ? 366 : 365)) {\n diffDays -= isGregorianLeapYear(gYear) ? 366 : 365;\n gYear++;\n } else if (diffDays >= getDaysInGregorianMonth(gMonth, gYear)) {\n diffDays -= getDaysInGregorianMonth(gMonth, gYear);\n gMonth++;\n } else {\n gDay += diffDays;\n diffDays = 0;\n }\n } else {\n if (diffDays >= (isGregorianLeapYear(gYear - 1) ? 366 : 365)) {\n diffDays -= isGregorianLeapYear(gYear - 1) ? 366 : 365;\n gYear--;\n } else {\n if (gMonth > 1) {\n gMonth--;\n } else {\n gMonth = 12;\n gYear--;\n }\n if (diffDays >= getDaysInGregorianMonth(gMonth, gYear)) {\n diffDays -= getDaysInGregorianMonth(gMonth, gYear);\n } else {\n gDay = getDaysInGregorianMonth(gMonth, gYear) - diffDays + 1;\n diffDays = 0;\n }\n }\n }\n }\n return new Date(gYear, gMonth - 1, gDay);\n}\n\nexport function hebrewNumerals(numerals: number): string {\n if (!numerals) {\n return '';\n }\n const hArray0_9 = ['', '\\u05d0', '\\u05d1', '\\u05d2', '\\u05d3', '\\u05d4', '\\u05d5', '\\u05d6', '\\u05d7', '\\u05d8'];\n const hArray10_19 = [\n '\\u05d9', '\\u05d9\\u05d0', '\\u05d9\\u05d1', '\\u05d9\\u05d2', '\\u05d9\\u05d3', '\\u05d8\\u05d5', '\\u05d8\\u05d6',\n '\\u05d9\\u05d6', '\\u05d9\\u05d7', '\\u05d9\\u05d8'\n ];\n const hArray20_90 = ['', '', '\\u05db', '\\u05dc', '\\u05de', '\\u05e0', '\\u05e1', '\\u05e2', '\\u05e4', '\\u05e6'];\n const hArray100_900 = [\n '', '\\u05e7', '\\u05e8', '\\u05e9', '\\u05ea', '\\u05ea\\u05e7', '\\u05ea\\u05e8', '\\u05ea\\u05e9', '\\u05ea\\u05ea',\n '\\u05ea\\u05ea\\u05e7'\n ];\n const hArray1000_9000 = [\n '', '\\u05d0', '\\u05d1', '\\u05d1\\u05d0', '\\u05d1\\u05d1', '\\u05d4', '\\u05d4\\u05d0', '\\u05d4\\u05d1',\n '\\u05d4\\u05d1\\u05d0', '\\u05d4\\u05d1\\u05d1'\n ];\n const geresh = '\\u05f3', gershaim = '\\u05f4';\n let mem = 0;\n let result = [];\n let step = 0;\n while (numerals > 0) {\n let m = numerals % 10;\n if (step === 0) {\n mem = m;\n } else if (step === 1) {\n if (m !== 1) {\n result.unshift(hArray20_90[m], hArray0_9[mem]);\n } else {\n result.unshift(hArray10_19[mem]);\n }\n } else if (step === 2) {\n result.unshift(hArray100_900[m]);\n } else {\n if (m !== 5) {\n result.unshift(hArray1000_9000[m], geresh, ' ');\n }\n break;\n }\n numerals = Math.floor(numerals / 10);\n if (step === 0 && numerals === 0) {\n result.unshift(hArray0_9[m]);\n }\n step++;\n }\n result = result.join('').split('');\n if (result.length === 1) {\n result.push(geresh);\n } else if (result.length > 1) {\n result.splice(result.length - 1, 0, gershaim);\n }\n return result.join('');\n}\n","import {NgbDate} from '../ngb-date';\nimport {fromJSDate, NgbCalendar, NgbPeriod, toJSDate} from '../ngb-calendar';\nimport {Injectable} from '@angular/core';\nimport {isNumber} from '../../util/util';\nimport {\n fromGregorian,\n getDayNumberInHebrewYear,\n getDaysInHebrewMonth,\n isHebrewLeapYear,\n toGregorian,\n setHebrewDay,\n setHebrewMonth\n} from './hebrew';\n\n/**\n * @since 3.2.0\n */\n@Injectable()\nexport class NgbCalendarHebrew extends NgbCalendar {\n getDaysPerWeek() { return 7; }\n\n getMonths(year?: number) {\n if (year && isHebrewLeapYear(year)) {\n return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13];\n } else {\n return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];\n }\n }\n\n getWeeksPerMonth() { return 6; }\n\n isValid(date: NgbDate): boolean {\n let b = date && isNumber(date.year) && isNumber(date.month) && isNumber(date.day);\n b = b && date.month > 0 && date.month <= (isHebrewLeapYear(date.year) ? 13 : 12);\n b = b && date.day > 0 && date.day <= getDaysInHebrewMonth(date.month, date.year);\n return b && !isNaN(toGregorian(date).getTime());\n }\n\n getNext(date: NgbDate, period: NgbPeriod = 'd', number = 1) {\n date = new NgbDate(date.year, date.month, date.day);\n\n switch (period) {\n case 'y':\n date.year += number;\n date.month = 1;\n date.day = 1;\n return date;\n case 'm':\n date = setHebrewMonth(date, number);\n date.day = 1;\n return date;\n case 'd':\n return setHebrewDay(date, number);\n default:\n return date;\n }\n }\n\n getPrev(date: NgbDate, period: NgbPeriod = 'd', number = 1) { return this.getNext(date, period, -number); }\n\n getWeekday(date: NgbDate) {\n const day = toGregorian(date).getDay();\n // in JS Date Sun=0, in ISO 8601 Sun=7\n return day === 0 ? 7 : day;\n }\n\n getWeekNumber(week: NgbDate[], firstDayOfWeek: number) {\n const date = week[week.length - 1];\n return Math.ceil(getDayNumberInHebrewYear(date) / 7);\n }\n\n getToday(): NgbDate { return fromGregorian(new Date()); }\n\n /**\n * @since 3.4.0\n */\n toGregorian(date: NgbDate): NgbDate { return fromJSDate(toGregorian(date)); }\n\n /**\n * @since 3.4.0\n */\n fromGregorian(date: NgbDate): NgbDate { return fromGregorian(toJSDate(date)); }\n}\n","import {NgbDatepickerI18n} from '../datepicker-i18n';\nimport {NgbDateStruct} from '../../index';\nimport {hebrewNumerals, isHebrewLeapYear} from './hebrew';\nimport {Injectable} from '@angular/core';\n\n\nconst WEEKDAYS = ['שני', 'שלישי', 'רביעי', 'חמישי', 'שישי', 'שבת', 'ראשון'];\nconst MONTHS = ['תשרי', 'חשון', 'כסלו', 'טבת', 'שבט', 'אדר', 'ניסן', 'אייר', 'סיון', 'תמוז', 'אב', 'אלול'];\nconst MONTHS_LEAP =\n ['תשרי', 'חשון', 'כסלו', 'טבת', 'שבט', 'אדר א׳', 'אדר ב׳', 'ניסן', 'אייר', 'סיון', 'תמוז', 'אב', 'אלול'];\n\n/**\n * @since 3.2.0\n */\n@Injectable()\nexport class NgbDatepickerI18nHebrew extends NgbDatepickerI18n {\n getMonthShortName(month: number, year?: number): string { return this.getMonthFullName(month, year); }\n\n getMonthFullName(month: number, year?: number): string {\n return isHebrewLeapYear(year) ? MONTHS_LEAP[month - 1] : MONTHS[month - 1];\n }\n\n getWeekdayShortName(weekday: number): string { return WEEKDAYS[weekday - 1]; }\n\n getDayAriaLabel(date: NgbDateStruct): string {\n return `${hebrewNumerals(date.day)} ${this.getMonthFullName(date.month, date.year)} ${hebrewNumerals(date.year)}`;\n }\n\n getDayNumerals(date: NgbDateStruct): string { return hebrewNumerals(date.day); }\n\n getWeekNumerals(weekNumber: number): string { return hebrewNumerals(weekNumber); }\n\n getYearNumerals(year: number): string { return hebrewNumerals(year); }\n}\n","import {Injectable} from '@angular/core';\nimport {NgbDateAdapter} from './ngb-date-adapter';\nimport {NgbDateStruct} from '../ngb-date-struct';\nimport {isInteger} from '../../util/util';\n\n/**\n * [`NgbDateAdapter`](#/components/datepicker/api#NgbDateAdapter) implementation that uses\n * native javascript dates as a user date model.\n */\n@Injectable()\nexport class NgbDateNativeAdapter extends NgbDateAdapter {\n /**\n * Converts a native `Date` to a `NgbDateStruct`.\n */\n fromModel(date: Date): NgbDateStruct {\n return (date instanceof Date && !isNaN(date.getTime())) ? this._fromNativeDate(date) : null;\n }\n\n /**\n * Converts a `NgbDateStruct` to a native `Date`.\n */\n toModel(date: NgbDateStruct): Date {\n return date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day) ? this._toNativeDate(date) :\n null;\n }\n\n protected _fromNativeDate(date: Date): NgbDateStruct {\n return {year: date.getFullYear(), month: date.getMonth() + 1, day: date.getDate()};\n }\n\n protected _toNativeDate(date: NgbDateStruct): Date {\n const jsDate = new Date(date.year, date.month - 1, date.day, 12);\n // avoid 30 -> 1930 conversion\n jsDate.setFullYear(date.year);\n return jsDate;\n }\n}\n","import {Injectable} from '@angular/core';\nimport {NgbDateStruct} from '../ngb-date-struct';\nimport {NgbDateNativeAdapter} from './ngb-date-native-adapter';\n\n/**\n * Same as [`NgbDateNativeAdapter`](#/components/datepicker/api#NgbDateNativeAdapter), but with UTC dates.\n *\n * @since 3.2.0\n */\n@Injectable()\nexport class NgbDateNativeUTCAdapter extends NgbDateNativeAdapter {\n protected _fromNativeDate(date: Date): NgbDateStruct {\n return {year: date.getUTCFullYear(), month: date.getUTCMonth() + 1, day: date.getUTCDate()};\n }\n\n protected _toNativeDate(date: NgbDateStruct): Date {\n const jsDate = new Date(Date.UTC(date.year, date.month - 1, date.day));\n // avoid 30 -> 1930 conversion\n jsDate.setUTCFullYear(date.year);\n return jsDate;\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FormsModule} from '@angular/forms';\nimport {NgbDatepicker} from './datepicker';\nimport {NgbDatepickerMonthView} from './datepicker-month-view';\nimport {NgbDatepickerNavigation} from './datepicker-navigation';\nimport {NgbInputDatepicker} from './datepicker-input';\nimport {NgbDatepickerDayView} from './datepicker-day-view';\nimport {NgbDatepickerNavigationSelect} from './datepicker-navigation-select';\n\nexport {NgbDatepicker, NgbDatepickerNavigateEvent} from './datepicker';\nexport {NgbInputDatepicker} from './datepicker-input';\nexport {NgbCalendar, NgbPeriod, NgbCalendarGregorian} from './ngb-calendar';\nexport {NgbCalendarIslamicCivil} from './hijri/ngb-calendar-islamic-civil';\nexport {NgbCalendarIslamicUmalqura} from './hijri/ngb-calendar-islamic-umalqura';\nexport {NgbCalendarPersian} from './jalali/ngb-calendar-persian';\nexport {NgbCalendarHebrew} from './hebrew/ngb-calendar-hebrew';\nexport {NgbDatepickerI18nHebrew} from './hebrew/datepicker-i18n-hebrew';\nexport {NgbDatepickerMonthView} from './datepicker-month-view';\nexport {NgbDatepickerDayView} from './datepicker-day-view';\nexport {NgbDatepickerNavigation} from './datepicker-navigation';\nexport {NgbDatepickerNavigationSelect} from './datepicker-navigation-select';\nexport {NgbDatepickerConfig} from './datepicker-config';\nexport {NgbDatepickerI18n} from './datepicker-i18n';\nexport {NgbDateStruct} from './ngb-date-struct';\nexport {NgbDate} from './ngb-date';\nexport {NgbDateAdapter} from './adapters/ngb-date-adapter';\nexport {NgbDateNativeAdapter} from './adapters/ngb-date-native-adapter';\nexport {NgbDateNativeUTCAdapter} from './adapters/ngb-date-native-utc-adapter';\nexport {NgbDateParserFormatter} from './ngb-date-parser-formatter';\n\n@NgModule({\n declarations: [\n NgbDatepicker, NgbDatepickerMonthView, NgbDatepickerNavigation, NgbDatepickerNavigationSelect, NgbDatepickerDayView,\n NgbInputDatepicker\n ],\n exports: [NgbDatepicker, NgbInputDatepicker],\n imports: [CommonModule, FormsModule],\n entryComponents: [NgbDatepicker]\n})\nexport class NgbDatepickerModule {\n}\n","import {Injectable} from '@angular/core';\nimport {PlacementArray} from '../util/positioning';\n\n/**\n * A configuration service for the [`NgbDropdown`](#/components/dropdown/api#NgbDropdown) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the dropdowns used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbDropdownConfig {\n autoClose: boolean | 'outside' | 'inside' = true;\n placement: PlacementArray = ['bottom-left', 'bottom-right', 'top-left', 'top-right'];\n container: null | 'body';\n}\n","import {\n ChangeDetectorRef,\n ContentChild,\n ContentChildren,\n Directive,\n ElementRef,\n EventEmitter,\n forwardRef,\n Inject,\n Input,\n NgZone,\n AfterContentInit,\n OnDestroy,\n Output,\n QueryList,\n Renderer2,\n SimpleChanges,\n Optional\n} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\nimport {Subject, Subscription} from 'rxjs';\nimport {take} from 'rxjs/operators';\n\nimport {Placement, PlacementArray, positionElements} from '../util/positioning';\nimport {ngbAutoClose} from '../util/autoclose';\nimport {Key} from '../util/key';\n\nimport {NgbDropdownConfig} from './dropdown-config';\n\n@Directive({selector: '.navbar'})\nexport class NgbNavbar {\n}\n\n/**\n * A directive you should put put on a dropdown item to enable keyboard navigation.\n * Arrow keys will move focus between items marked with this directive.\n *\n * @since 4.1.0\n */\n@Directive({selector: '[ngbDropdownItem]', host: {'class': 'dropdown-item', '[class.disabled]': 'disabled'}})\nexport class NgbDropdownItem {\n private _disabled = false;\n\n @Input()\n set disabled(value: boolean) {\n this._disabled = value === '' || value === true; // accept an empty attribute as true\n }\n\n get disabled(): boolean { return this._disabled; }\n\n constructor(public elementRef: ElementRef) {}\n}\n\n/**\n * A directive that wraps dropdown menu content and dropdown items.\n */\n@Directive({\n selector: '[ngbDropdownMenu]',\n host: {\n '[class.dropdown-menu]': 'true',\n '[class.show]': 'dropdown.isOpen()',\n '[attr.x-placement]': 'placement',\n '(keydown.ArrowUp)': 'dropdown.onKeyDown($event)',\n '(keydown.ArrowDown)': 'dropdown.onKeyDown($event)',\n '(keydown.Home)': 'dropdown.onKeyDown($event)',\n '(keydown.End)': 'dropdown.onKeyDown($event)',\n '(keydown.Enter)': 'dropdown.onKeyDown($event)',\n '(keydown.Space)': 'dropdown.onKeyDown($event)'\n }\n})\nexport class NgbDropdownMenu {\n placement: Placement = 'bottom';\n isOpen = false;\n\n @ContentChildren(NgbDropdownItem) menuItems: QueryList;\n\n constructor(@Inject(forwardRef(() => NgbDropdown)) public dropdown) {}\n}\n\n/**\n * A directive to mark an element to which dropdown menu will be anchored.\n *\n * This is a simple version of the `NgbDropdownToggle` directive.\n * It plays the same role, but doesn't listen to click events to toggle dropdown menu thus enabling support\n * for events other than click.\n *\n * @since 1.1.0\n */\n@Directive({\n selector: '[ngbDropdownAnchor]',\n host: {'class': 'dropdown-toggle', 'aria-haspopup': 'true', '[attr.aria-expanded]': 'dropdown.isOpen()'}\n})\nexport class NgbDropdownAnchor {\n anchorEl;\n\n constructor(@Inject(forwardRef(() => NgbDropdown)) public dropdown, private _elementRef: ElementRef) {\n this.anchorEl = _elementRef.nativeElement;\n }\n\n getNativeElement() { return this._elementRef.nativeElement; }\n}\n\n/**\n * A directive to mark an element that will toggle dropdown via the `click` event.\n *\n * You can also use `NgbDropdownAnchor` as an alternative.\n */\n@Directive({\n selector: '[ngbDropdownToggle]',\n host: {\n 'class': 'dropdown-toggle',\n 'aria-haspopup': 'true',\n '[attr.aria-expanded]': 'dropdown.isOpen()',\n '(click)': 'dropdown.toggle()',\n '(keydown.ArrowUp)': 'dropdown.onKeyDown($event)',\n '(keydown.ArrowDown)': 'dropdown.onKeyDown($event)',\n '(keydown.Home)': 'dropdown.onKeyDown($event)',\n '(keydown.End)': 'dropdown.onKeyDown($event)'\n },\n providers: [{provide: NgbDropdownAnchor, useExisting: forwardRef(() => NgbDropdownToggle)}]\n})\nexport class NgbDropdownToggle extends NgbDropdownAnchor {\n constructor(@Inject(forwardRef(() => NgbDropdown)) dropdown, elementRef: ElementRef) {\n super(dropdown, elementRef);\n }\n}\n\n/**\n * A directive that provides contextual overlays for displaying lists of links and more.\n */\n@Directive({selector: '[ngbDropdown]', exportAs: 'ngbDropdown', host: {'[class.show]': 'isOpen()'}})\nexport class NgbDropdown implements AfterContentInit, OnDestroy {\n private _closed$ = new Subject();\n private _zoneSubscription: Subscription;\n private _bodyContainer: HTMLElement;\n\n @ContentChild(NgbDropdownMenu, {static: false}) private _menu: NgbDropdownMenu;\n @ContentChild(NgbDropdownMenu, {read: ElementRef, static: false}) private _menuElement: ElementRef;\n @ContentChild(NgbDropdownAnchor, {static: false}) private _anchor: NgbDropdownAnchor;\n\n /**\n * Indicates whether the dropdown should be closed when clicking one of dropdown items or pressing ESC.\n *\n * * `true` - the dropdown will close on both outside and inside (menu) clicks.\n * * `false` - the dropdown can only be closed manually via `close()` or `toggle()` methods.\n * * `\"inside\"` - the dropdown will close on inside menu clicks, but not outside clicks.\n * * `\"outside\"` - the dropdown will close only on the outside clicks and not on menu clicks.\n */\n @Input() autoClose: boolean | 'outside' | 'inside';\n\n /**\n * Defines whether or not the dropdown menu is opened initially.\n */\n @Input('open') _open = false;\n\n /**\n * The preferred placement of the dropdown.\n *\n * Possible values are `\"top\"`, `\"top-left\"`, `\"top-right\"`, `\"bottom\"`, `\"bottom-left\"`,\n * `\"bottom-right\"`, `\"left\"`, `\"left-top\"`, `\"left-bottom\"`, `\"right\"`, `\"right-top\"`,\n * `\"right-bottom\"`\n *\n * Accepts an array of strings or a string with space separated possible values.\n *\n * The default order of preference is `\"bottom-left bottom-right top-left top-right\"`\n *\n * Please see the [positioning overview](#/positioning) for more details.\n */\n @Input() placement: PlacementArray;\n\n /**\n * A selector specifying the element the dropdown should be appended to.\n * Currently only supports \"body\".\n *\n * @since 4.1.0\n */\n @Input() container: null | 'body';\n\n /**\n * Enable or disable the dynamic positioning. The default value is dynamic unless the dropdown is used\n * inside a Bootstrap navbar. If you need custom placement for a dropdown in a navbar, set it to\n * dynamic explicitly. See the [positioning of dropdown](#/positioning#dropdown)\n * and the [navbar demo](/#/components/dropdown/examples#navbar) for more details.\n *\n * @since 4.2.0\n */\n @Input() display: 'dynamic' | 'static';\n\n /**\n * An event fired when the dropdown is opened or closed.\n *\n * The event payload is a `boolean`:\n * * `true` - the dropdown was opened\n * * `false` - the dropdown was closed\n */\n @Output() openChange = new EventEmitter();\n\n constructor(\n private _changeDetector: ChangeDetectorRef, config: NgbDropdownConfig, @Inject(DOCUMENT) private _document: any,\n private _ngZone: NgZone, private _elementRef: ElementRef, private _renderer: Renderer2,\n @Optional() ngbNavbar: NgbNavbar) {\n this.placement = config.placement;\n this.container = config.container;\n this.autoClose = config.autoClose;\n\n this.display = ngbNavbar ? 'static' : 'dynamic';\n\n this._zoneSubscription = _ngZone.onStable.subscribe(() => { this._positionMenu(); });\n }\n\n ngAfterContentInit() {\n this._ngZone.onStable.pipe(take(1)).subscribe(() => {\n this._applyPlacementClasses();\n if (this._open) {\n this._setCloseHandlers();\n }\n });\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.container && this._open) {\n this._applyContainer(this.container);\n }\n\n if (changes.placement && !changes.placement.isFirstChange) {\n this._applyPlacementClasses();\n }\n }\n\n /**\n * Checks if the dropdown menu is open.\n */\n isOpen(): boolean { return this._open; }\n\n /**\n * Opens the dropdown menu.\n */\n open(): void {\n if (!this._open) {\n this._open = true;\n this._applyContainer(this.container);\n this.openChange.emit(true);\n this._setCloseHandlers();\n }\n }\n\n private _setCloseHandlers() {\n const anchor = this._anchor;\n ngbAutoClose(\n this._ngZone, this._document, this.autoClose, () => this.close(), this._closed$,\n this._menu ? [this._menuElement.nativeElement] : [], anchor ? [anchor.getNativeElement()] : [],\n '.dropdown-item,.dropdown-divider');\n }\n\n /**\n * Closes the dropdown menu.\n */\n close(): void {\n if (this._open) {\n this._open = false;\n this._resetContainer();\n this._closed$.next();\n this.openChange.emit(false);\n this._changeDetector.markForCheck();\n }\n }\n\n /**\n * Toggles the dropdown menu.\n */\n toggle(): void {\n if (this.isOpen()) {\n this.close();\n } else {\n this.open();\n }\n }\n\n ngOnDestroy() {\n this._resetContainer();\n\n this._closed$.next();\n this._zoneSubscription.unsubscribe();\n }\n\n onKeyDown(event: KeyboardEvent) {\n // tslint:disable-next-line:deprecation\n const key = event.which;\n const itemElements = this._getMenuElements();\n\n let position = -1;\n let isEventFromItems = false;\n const isEventFromToggle = this._isEventFromToggle(event);\n\n if (!isEventFromToggle && itemElements.length) {\n itemElements.forEach((itemElement, index) => {\n if (itemElement.contains(event.target as HTMLElement)) {\n isEventFromItems = true;\n }\n if (itemElement === this._document.activeElement) {\n position = index;\n }\n });\n }\n\n // closing on Enter / Space\n if (key === Key.Space || key === Key.Enter) {\n if (isEventFromItems && (this.autoClose === true || this.autoClose === 'inside')) {\n this.close();\n }\n return;\n }\n\n // opening / navigating\n if (isEventFromToggle || isEventFromItems) {\n this.open();\n\n if (itemElements.length) {\n switch (key) {\n case Key.ArrowDown:\n position = Math.min(position + 1, itemElements.length - 1);\n break;\n case Key.ArrowUp:\n if (this._isDropup() && position === -1) {\n position = itemElements.length - 1;\n break;\n }\n position = Math.max(position - 1, 0);\n break;\n case Key.Home:\n position = 0;\n break;\n case Key.End:\n position = itemElements.length - 1;\n break;\n }\n itemElements[position].focus();\n }\n event.preventDefault();\n }\n }\n\n private _isDropup(): boolean { return this._elementRef.nativeElement.classList.contains('dropup'); }\n\n private _isEventFromToggle(event: KeyboardEvent) {\n return this._anchor.getNativeElement().contains(event.target as HTMLElement);\n }\n\n private _getMenuElements(): HTMLElement[] {\n const menu = this._menu;\n if (menu == null) {\n return [];\n }\n return menu.menuItems.filter(item => !item.disabled).map(item => item.elementRef.nativeElement);\n }\n\n private _positionMenu() {\n const menu = this._menu;\n if (this.isOpen() && menu) {\n this._applyPlacementClasses(\n this.display === 'dynamic' ?\n positionElements(\n this._anchor.anchorEl, this._bodyContainer || this._menuElement.nativeElement, this.placement,\n this.container === 'body') :\n this._getFirstPlacement(this.placement));\n }\n }\n\n private _getFirstPlacement(placement: PlacementArray): Placement {\n return Array.isArray(placement) ? placement[0] : placement.split(' ')[0] as Placement;\n }\n\n private _resetContainer() {\n const renderer = this._renderer;\n const menuElement = this._menuElement;\n if (menuElement) {\n const dropdownElement = this._elementRef.nativeElement;\n const dropdownMenuElement = menuElement.nativeElement;\n\n renderer.appendChild(dropdownElement, dropdownMenuElement);\n renderer.removeStyle(dropdownMenuElement, 'position');\n renderer.removeStyle(dropdownMenuElement, 'transform');\n }\n if (this._bodyContainer) {\n renderer.removeChild(this._document.body, this._bodyContainer);\n this._bodyContainer = null;\n }\n }\n\n private _applyContainer(container: null | 'body' = null) {\n this._resetContainer();\n if (container === 'body') {\n const renderer = this._renderer;\n const dropdownMenuElement = this._menuElement.nativeElement;\n const bodyContainer = this._bodyContainer = this._bodyContainer || renderer.createElement('div');\n\n // Override some styles to have the positionning working\n renderer.setStyle(bodyContainer, 'position', 'absolute');\n renderer.setStyle(dropdownMenuElement, 'position', 'static');\n renderer.setStyle(bodyContainer, 'z-index', '1050');\n\n renderer.appendChild(bodyContainer, dropdownMenuElement);\n renderer.appendChild(this._document.body, bodyContainer);\n }\n }\n\n private _applyPlacementClasses(placement?: Placement) {\n const menu = this._menu;\n if (menu) {\n if (!placement) {\n placement = this._getFirstPlacement(this.placement);\n }\n\n const renderer = this._renderer;\n const dropdownElement = this._elementRef.nativeElement;\n\n // remove the current placement classes\n renderer.removeClass(dropdownElement, 'dropup');\n renderer.removeClass(dropdownElement, 'dropdown');\n menu.placement = this.display === 'static' ? null : placement;\n\n /*\n * apply the new placement\n * in case of top use up-arrow or down-arrow otherwise\n */\n const dropdownClass = placement.search('^top') !== -1 ? 'dropup' : 'dropdown';\n renderer.addClass(dropdownElement, dropdownClass);\n\n const bodyContainer = this._bodyContainer;\n if (bodyContainer) {\n renderer.removeClass(bodyContainer, 'dropup');\n renderer.removeClass(bodyContainer, 'dropdown');\n renderer.addClass(bodyContainer, dropdownClass);\n }\n }\n }\n}\n","import {NgModule} from '@angular/core';\nimport {\n NgbDropdown,\n NgbDropdownAnchor,\n NgbDropdownToggle,\n NgbDropdownMenu,\n NgbDropdownItem,\n NgbNavbar\n} from './dropdown';\n\nexport {NgbDropdown, NgbDropdownAnchor, NgbDropdownToggle, NgbDropdownMenu, NgbDropdownItem} from './dropdown';\nexport {NgbDropdownConfig} from './dropdown-config';\n\nconst NGB_DROPDOWN_DIRECTIVES =\n [NgbDropdown, NgbDropdownAnchor, NgbDropdownToggle, NgbDropdownMenu, NgbDropdownItem, NgbNavbar];\n\n@NgModule({declarations: NGB_DROPDOWN_DIRECTIVES, exports: NGB_DROPDOWN_DIRECTIVES})\nexport class NgbDropdownModule {\n}\n","import {Injectable, Injector} from '@angular/core';\n\n/**\n * Options available when opening new modal windows with `NgbModal.open()` method.\n */\nexport interface NgbModalOptions {\n /**\n * `aria-labelledby` attribute value to set on the modal window.\n *\n * @since 2.2.0\n */\n ariaLabelledBy?: string;\n\n /**\n * If `true`, the backdrop element will be created for a given modal.\n *\n * Alternatively, specify `'static'` for a backdrop which doesn't close the modal on click.\n *\n * Default value is `true`.\n */\n backdrop?: boolean | 'static';\n\n /**\n * Callback right before the modal will be dismissed.\n *\n * If this function returns:\n * * `false`\n * * a promise resolved with `false`\n * * a promise that is rejected\n *\n * then the modal won't be dismissed.\n */\n beforeDismiss?: () => boolean | Promise;\n\n /**\n * If `true`, the modal will be centered vertically.\n *\n * Default value is `false`.\n *\n * @since 1.1.0\n */\n centered?: boolean;\n\n /**\n * A selector specifying the element all new modal windows should be appended to.\n *\n * If not specified, will be `body`.\n */\n container?: string;\n\n /**\n * The `Injector` to use for modal content.\n */\n injector?: Injector;\n\n /**\n * If `true`, the modal will be closed when `Escape` key is pressed\n *\n * Default value is `true`.\n */\n keyboard?: boolean;\n\n /**\n * Scrollable modal content (false by default).\n *\n * @since 5.0.0\n */\n scrollable?: boolean;\n\n /**\n * Size of a new modal window.\n */\n size?: 'sm' | 'lg' | 'xl';\n\n /**\n * A custom class to append to the modal window.\n */\n windowClass?: string;\n\n /**\n * A custom class to append to the modal backdrop.\n *\n * @since 1.1.0\n */\n backdropClass?: string;\n}\n\n/**\n * A configuration service for the [`NgbModal`](#/components/modal/api#NgbModal) service.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all modals used in the application.\n*\n* @since 3.1.0\n*/\n@Injectable({providedIn: 'root'})\nexport class NgbModalConfig implements NgbModalOptions {\n backdrop: boolean | 'static' = true;\n keyboard = true;\n}\n","import {\n Injector,\n TemplateRef,\n ViewRef,\n ViewContainerRef,\n Renderer2,\n ComponentRef,\n ComponentFactoryResolver,\n ApplicationRef\n} from '@angular/core';\n\nexport class ContentRef {\n constructor(public nodes: any[], public viewRef?: ViewRef, public componentRef?: ComponentRef) {}\n}\n\nexport class PopupService {\n private _windowRef: ComponentRef;\n private _contentRef: ContentRef;\n\n constructor(\n private _type: any, private _injector: Injector, private _viewContainerRef: ViewContainerRef,\n private _renderer: Renderer2, private _componentFactoryResolver: ComponentFactoryResolver,\n private _applicationRef: ApplicationRef) {}\n\n open(content?: string | TemplateRef, context?: any): ComponentRef {\n if (!this._windowRef) {\n this._contentRef = this._getContentRef(content, context);\n this._windowRef = this._viewContainerRef.createComponent(\n this._componentFactoryResolver.resolveComponentFactory(this._type), 0, this._injector,\n this._contentRef.nodes);\n }\n\n return this._windowRef;\n }\n\n close() {\n if (this._windowRef) {\n this._viewContainerRef.remove(this._viewContainerRef.indexOf(this._windowRef.hostView));\n this._windowRef = null;\n\n if (this._contentRef.viewRef) {\n this._applicationRef.detachView(this._contentRef.viewRef);\n this._contentRef.viewRef.destroy();\n this._contentRef = null;\n }\n }\n }\n\n private _getContentRef(content: string | TemplateRef, context?: any): ContentRef {\n if (!content) {\n return new ContentRef([]);\n } else if (content instanceof TemplateRef) {\n const viewRef = content.createEmbeddedView(context);\n this._applicationRef.attachView(viewRef);\n return new ContentRef([viewRef.rootNodes], viewRef);\n } else {\n return new ContentRef([[this._renderer.createText(`${content}`)]]);\n }\n }\n}\n","import {Injectable, Inject} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\n\n\nconst noop = () => {};\n\n\n\n/** Type for the callback used to revert the scrollbar compensation. */\nexport type CompensationReverter = () => void;\n\n\n\n/**\n * Utility to handle the scrollbar.\n *\n * It allows to compensate the lack of a vertical scrollbar by adding an\n * equivalent padding on the right of the body, and to remove this compensation.\n */\n@Injectable({providedIn: 'root'})\nexport class ScrollBar {\n constructor(@Inject(DOCUMENT) private _document: any) {}\n\n /**\n * Detects if a scrollbar is present and if yes, already compensates for its\n * removal by adding an equivalent padding on the right of the body.\n *\n * @return a callback used to revert the compensation (noop if there was none,\n * otherwise a function removing the padding)\n */\n compensate(): CompensationReverter { return !this._isPresent() ? noop : this._adjustBody(this._getWidth()); }\n\n /**\n * Adds a padding of the given width on the right of the body.\n *\n * @return a callback used to revert the padding to its previous value\n */\n private _adjustBody(width: number): CompensationReverter {\n const body = this._document.body;\n const userSetPadding = body.style.paddingRight;\n const paddingAmount = parseFloat(window.getComputedStyle(body)['padding-right']);\n body.style['padding-right'] = `${paddingAmount + width}px`;\n return () => body.style['padding-right'] = userSetPadding;\n }\n\n /**\n * Tells whether a scrollbar is currently present on the body.\n *\n * @return true if scrollbar is present, false otherwise\n */\n private _isPresent(): boolean {\n const rect = this._document.body.getBoundingClientRect();\n return rect.left + rect.right < window.innerWidth;\n }\n\n /**\n * Calculates and returns the width of a scrollbar.\n *\n * @return the width of a scrollbar on this page\n */\n private _getWidth(): number {\n const measurer = this._document.createElement('div');\n measurer.className = 'modal-scrollbar-measure';\n\n const body = this._document.body;\n body.appendChild(measurer);\n const width = measurer.getBoundingClientRect().width - measurer.clientWidth;\n body.removeChild(measurer);\n\n return width;\n }\n}\n","import {Component, Input} from '@angular/core';\n\n@Component({\n selector: 'ngb-modal-backdrop',\n template: '',\n host:\n {'[class]': '\"modal-backdrop fade show\" + (backdropClass ? \" \" + backdropClass : \"\")', 'style': 'z-index: 1050'}\n})\nexport class NgbModalBackdrop {\n @Input() backdropClass: string;\n}\n","import {ComponentRef} from '@angular/core';\n\nimport {NgbModalBackdrop} from './modal-backdrop';\nimport {NgbModalWindow} from './modal-window';\n\nimport {ContentRef} from '../util/popup';\n\n/**\n * A reference to the currently opened (active) modal.\n *\n * Instances of this class can be injected into your component passed as modal content.\n * So you can `.close()` or `.dismiss()` the modal window from your component.\n */\nexport class NgbActiveModal {\n /**\n * Closes the modal with an optional `result` value.\n *\n * The `NgbMobalRef.result` promise will be resolved with the provided value.\n */\n close(result?: any): void {}\n\n /**\n * Dismisses the modal with an optional `reason` value.\n *\n * The `NgbModalRef.result` promise will be rejected with the provided value.\n */\n dismiss(reason?: any): void {}\n}\n\n/**\n * A reference to the newly opened modal returned by the `NgbModal.open()` method.\n */\nexport class NgbModalRef {\n private _resolve: (result?: any) => void;\n private _reject: (reason?: any) => void;\n\n /**\n * The instance of a component used for the modal content.\n *\n * When a `TemplateRef` is used as the content, will return `undefined`.\n */\n get componentInstance(): any {\n if (this._contentRef.componentRef) {\n return this._contentRef.componentRef.instance;\n }\n }\n\n /**\n * The promise that is resolved when the modal is closed and rejected when the modal is dismissed.\n */\n result: Promise;\n\n constructor(\n private _windowCmptRef: ComponentRef, private _contentRef: ContentRef,\n private _backdropCmptRef?: ComponentRef, private _beforeDismiss?: Function) {\n _windowCmptRef.instance.dismissEvent.subscribe((reason: any) => { this.dismiss(reason); });\n\n this.result = new Promise((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n this.result.then(null, () => {});\n }\n\n /**\n * Closes the modal with an optional `result` value.\n *\n * The `NgbMobalRef.result` promise will be resolved with the provided value.\n */\n close(result?: any): void {\n if (this._windowCmptRef) {\n this._resolve(result);\n this._removeModalElements();\n }\n }\n\n private _dismiss(reason?: any) {\n this._reject(reason);\n this._removeModalElements();\n }\n\n /**\n * Dismisses the modal with an optional `reason` value.\n *\n * The `NgbModalRef.result` promise will be rejected with the provided value.\n */\n dismiss(reason?: any): void {\n if (this._windowCmptRef) {\n if (!this._beforeDismiss) {\n this._dismiss(reason);\n } else {\n const dismiss = this._beforeDismiss();\n if (dismiss && dismiss.then) {\n dismiss.then(\n result => {\n if (result !== false) {\n this._dismiss(reason);\n }\n },\n () => {});\n } else if (dismiss !== false) {\n this._dismiss(reason);\n }\n }\n }\n }\n\n private _removeModalElements() {\n const windowNativeEl = this._windowCmptRef.location.nativeElement;\n windowNativeEl.parentNode.removeChild(windowNativeEl);\n this._windowCmptRef.destroy();\n\n if (this._backdropCmptRef) {\n const backdropNativeEl = this._backdropCmptRef.location.nativeElement;\n backdropNativeEl.parentNode.removeChild(backdropNativeEl);\n this._backdropCmptRef.destroy();\n }\n\n if (this._contentRef && this._contentRef.viewRef) {\n this._contentRef.viewRef.destroy();\n }\n\n this._windowCmptRef = null;\n this._backdropCmptRef = null;\n this._contentRef = null;\n }\n}\n","export enum ModalDismissReasons {\n BACKDROP_CLICK,\n ESC\n}\n","import {DOCUMENT} from '@angular/common';\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport {getFocusableBoundaryElements} from '../util/focus-trap';\nimport {ModalDismissReasons} from './modal-dismiss-reasons';\n\n@Component({\n selector: 'ngb-modal-window',\n host: {\n '[class]': '\"modal fade show d-block\" + (windowClass ? \" \" + windowClass : \"\")',\n 'role': 'dialog',\n 'tabindex': '-1',\n '(keyup.esc)': 'escKey($event)',\n '(click)': 'backdropClick($event)',\n '[attr.aria-modal]': 'true',\n '[attr.aria-labelledby]': 'ariaLabelledBy',\n },\n template: `\n
\n
\n
\n `,\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./modal.scss']\n})\nexport class NgbModalWindow implements OnInit,\n AfterViewInit, OnDestroy {\n private _elWithFocus: Element; // element that is focused prior to modal opening\n\n @Input() ariaLabelledBy: string;\n @Input() backdrop: boolean | string = true;\n @Input() centered: string;\n @Input() keyboard = true;\n @Input() scrollable: string;\n @Input() size: string;\n @Input() windowClass: string;\n\n @Output('dismiss') dismissEvent = new EventEmitter();\n\n constructor(@Inject(DOCUMENT) private _document: any, private _elRef: ElementRef) {}\n\n backdropClick($event): void {\n if (this.backdrop === true && this._elRef.nativeElement === $event.target) {\n this.dismiss(ModalDismissReasons.BACKDROP_CLICK);\n }\n }\n\n escKey($event): void {\n if (this.keyboard && !$event.defaultPrevented) {\n this.dismiss(ModalDismissReasons.ESC);\n }\n }\n\n dismiss(reason): void { this.dismissEvent.emit(reason); }\n\n ngOnInit() { this._elWithFocus = this._document.activeElement; }\n\n ngAfterViewInit() {\n if (!this._elRef.nativeElement.contains(document.activeElement)) {\n const autoFocusable = this._elRef.nativeElement.querySelector(`[ngbAutofocus]`) as HTMLElement;\n const firstFocusable = getFocusableBoundaryElements(this._elRef.nativeElement)[0];\n\n const elementToFocus = autoFocusable || firstFocusable || this._elRef.nativeElement;\n elementToFocus.focus();\n }\n }\n\n ngOnDestroy() {\n const body = this._document.body;\n const elWithFocus = this._elWithFocus;\n\n let elementToFocus;\n if (elWithFocus && elWithFocus['focus'] && body.contains(elWithFocus)) {\n elementToFocus = elWithFocus;\n } else {\n elementToFocus = body;\n }\n elementToFocus.focus();\n this._elWithFocus = null;\n }\n}\n","import {DOCUMENT} from '@angular/common';\nimport {\n ApplicationRef,\n ComponentFactoryResolver,\n ComponentRef,\n Inject,\n Injectable,\n Injector,\n RendererFactory2,\n TemplateRef,\n} from '@angular/core';\nimport {Subject} from 'rxjs';\n\nimport {ngbFocusTrap} from '../util/focus-trap';\nimport {ContentRef} from '../util/popup';\nimport {ScrollBar} from '../util/scrollbar';\nimport {isDefined, isString} from '../util/util';\nimport {NgbModalBackdrop} from './modal-backdrop';\nimport {NgbModalOptions} from './modal-config';\nimport {NgbActiveModal, NgbModalRef} from './modal-ref';\nimport {NgbModalWindow} from './modal-window';\n\n@Injectable({providedIn: 'root'})\nexport class NgbModalStack {\n private _activeWindowCmptHasChanged = new Subject();\n private _ariaHiddenValues: Map = new Map();\n private _backdropAttributes = ['backdropClass'];\n private _modalRefs: NgbModalRef[] = [];\n private _windowAttributes =\n ['ariaLabelledBy', 'backdrop', 'centered', 'keyboard', 'scrollable', 'size', 'windowClass'];\n private _windowCmpts: ComponentRef[] = [];\n\n constructor(\n private _applicationRef: ApplicationRef, private _injector: Injector, @Inject(DOCUMENT) private _document: any,\n private _scrollBar: ScrollBar, private _rendererFactory: RendererFactory2) {\n // Trap focus on active WindowCmpt\n this._activeWindowCmptHasChanged.subscribe(() => {\n if (this._windowCmpts.length) {\n const activeWindowCmpt = this._windowCmpts[this._windowCmpts.length - 1];\n ngbFocusTrap(activeWindowCmpt.location.nativeElement, this._activeWindowCmptHasChanged);\n this._revertAriaHidden();\n this._setAriaHidden(activeWindowCmpt.location.nativeElement);\n }\n });\n }\n\n open(moduleCFR: ComponentFactoryResolver, contentInjector: Injector, content: any, options): NgbModalRef {\n const containerEl =\n isDefined(options.container) ? this._document.querySelector(options.container) : this._document.body;\n const renderer = this._rendererFactory.createRenderer(null, null);\n\n const revertPaddingForScrollBar = this._scrollBar.compensate();\n const removeBodyClass = () => {\n if (!this._modalRefs.length) {\n renderer.removeClass(this._document.body, 'modal-open');\n this._revertAriaHidden();\n }\n };\n\n if (!containerEl) {\n throw new Error(`The specified modal container \"${options.container || 'body'}\" was not found in the DOM.`);\n }\n\n const activeModal = new NgbActiveModal();\n const contentRef =\n this._getContentRef(moduleCFR, options.injector || contentInjector, content, activeModal, options);\n\n let backdropCmptRef: ComponentRef =\n options.backdrop !== false ? this._attachBackdrop(moduleCFR, containerEl) : null;\n let windowCmptRef: ComponentRef = this._attachWindowComponent(moduleCFR, containerEl, contentRef);\n let ngbModalRef: NgbModalRef = new NgbModalRef(windowCmptRef, contentRef, backdropCmptRef, options.beforeDismiss);\n\n this._registerModalRef(ngbModalRef);\n this._registerWindowCmpt(windowCmptRef);\n ngbModalRef.result.then(revertPaddingForScrollBar, revertPaddingForScrollBar);\n ngbModalRef.result.then(removeBodyClass, removeBodyClass);\n activeModal.close = (result: any) => { ngbModalRef.close(result); };\n activeModal.dismiss = (reason: any) => { ngbModalRef.dismiss(reason); };\n\n this._applyWindowOptions(windowCmptRef.instance, options);\n if (this._modalRefs.length === 1) {\n renderer.addClass(this._document.body, 'modal-open');\n }\n\n if (backdropCmptRef && backdropCmptRef.instance) {\n this._applyBackdropOptions(backdropCmptRef.instance, options);\n }\n return ngbModalRef;\n }\n\n dismissAll(reason?: any) { this._modalRefs.forEach(ngbModalRef => ngbModalRef.dismiss(reason)); }\n\n hasOpenModals(): boolean { return this._modalRefs.length > 0; }\n\n private _attachBackdrop(moduleCFR: ComponentFactoryResolver, containerEl: any): ComponentRef {\n let backdropFactory = moduleCFR.resolveComponentFactory(NgbModalBackdrop);\n let backdropCmptRef = backdropFactory.create(this._injector);\n this._applicationRef.attachView(backdropCmptRef.hostView);\n containerEl.appendChild(backdropCmptRef.location.nativeElement);\n return backdropCmptRef;\n }\n\n private _attachWindowComponent(moduleCFR: ComponentFactoryResolver, containerEl: any, contentRef: any):\n ComponentRef {\n let windowFactory = moduleCFR.resolveComponentFactory(NgbModalWindow);\n let windowCmptRef = windowFactory.create(this._injector, contentRef.nodes);\n this._applicationRef.attachView(windowCmptRef.hostView);\n containerEl.appendChild(windowCmptRef.location.nativeElement);\n return windowCmptRef;\n }\n\n private _applyWindowOptions(windowInstance: NgbModalWindow, options: Object): void {\n this._windowAttributes.forEach((optionName: string) => {\n if (isDefined(options[optionName])) {\n windowInstance[optionName] = options[optionName];\n }\n });\n }\n\n private _applyBackdropOptions(backdropInstance: NgbModalBackdrop, options: Object): void {\n this._backdropAttributes.forEach((optionName: string) => {\n if (isDefined(options[optionName])) {\n backdropInstance[optionName] = options[optionName];\n }\n });\n }\n\n private _getContentRef(\n moduleCFR: ComponentFactoryResolver, contentInjector: Injector, content: any, activeModal: NgbActiveModal,\n options: NgbModalOptions): ContentRef {\n if (!content) {\n return new ContentRef([]);\n } else if (content instanceof TemplateRef) {\n return this._createFromTemplateRef(content, activeModal);\n } else if (isString(content)) {\n return this._createFromString(content);\n } else {\n return this._createFromComponent(moduleCFR, contentInjector, content, activeModal, options);\n }\n }\n\n private _createFromTemplateRef(content: TemplateRef, activeModal: NgbActiveModal): ContentRef {\n const context = {\n $implicit: activeModal,\n close(result) { activeModal.close(result); },\n dismiss(reason) { activeModal.dismiss(reason); }\n };\n const viewRef = content.createEmbeddedView(context);\n this._applicationRef.attachView(viewRef);\n return new ContentRef([viewRef.rootNodes], viewRef);\n }\n\n private _createFromString(content: string): ContentRef {\n const component = this._document.createTextNode(`${content}`);\n return new ContentRef([[component]]);\n }\n\n private _createFromComponent(\n moduleCFR: ComponentFactoryResolver, contentInjector: Injector, content: any, context: NgbActiveModal,\n options: NgbModalOptions): ContentRef {\n const contentCmptFactory = moduleCFR.resolveComponentFactory(content);\n const modalContentInjector =\n Injector.create({providers: [{provide: NgbActiveModal, useValue: context}], parent: contentInjector});\n const componentRef = contentCmptFactory.create(modalContentInjector);\n const componentNativeEl = componentRef.location.nativeElement;\n if (options.scrollable) {\n (componentNativeEl as HTMLElement).classList.add('component-host-scrollable');\n }\n this._applicationRef.attachView(componentRef.hostView);\n // FIXME: we should here get rid of the component nativeElement\n // and use `[Array.from(componentNativeEl.childNodes)]` instead and remove the above CSS class.\n return new ContentRef([[componentNativeEl]], componentRef.hostView, componentRef);\n }\n\n private _setAriaHidden(element: Element) {\n const parent = element.parentElement;\n if (parent && element !== this._document.body) {\n Array.from(parent.children).forEach(sibling => {\n if (sibling !== element && sibling.nodeName !== 'SCRIPT') {\n this._ariaHiddenValues.set(sibling, sibling.getAttribute('aria-hidden'));\n sibling.setAttribute('aria-hidden', 'true');\n }\n });\n\n this._setAriaHidden(parent);\n }\n }\n\n private _revertAriaHidden() {\n this._ariaHiddenValues.forEach((value, element) => {\n if (value) {\n element.setAttribute('aria-hidden', value);\n } else {\n element.removeAttribute('aria-hidden');\n }\n });\n this._ariaHiddenValues.clear();\n }\n\n private _registerModalRef(ngbModalRef: NgbModalRef) {\n const unregisterModalRef = () => {\n const index = this._modalRefs.indexOf(ngbModalRef);\n if (index > -1) {\n this._modalRefs.splice(index, 1);\n }\n };\n this._modalRefs.push(ngbModalRef);\n ngbModalRef.result.then(unregisterModalRef, unregisterModalRef);\n }\n\n private _registerWindowCmpt(ngbWindowCmpt: ComponentRef) {\n this._windowCmpts.push(ngbWindowCmpt);\n this._activeWindowCmptHasChanged.next();\n\n ngbWindowCmpt.onDestroy(() => {\n const index = this._windowCmpts.indexOf(ngbWindowCmpt);\n if (index > -1) {\n this._windowCmpts.splice(index, 1);\n this._activeWindowCmptHasChanged.next();\n }\n });\n }\n}\n","import {Injectable, Injector, ComponentFactoryResolver} from '@angular/core';\n\nimport {NgbModalOptions, NgbModalConfig} from './modal-config';\nimport {NgbModalRef} from './modal-ref';\nimport {NgbModalStack} from './modal-stack';\n\n/**\n * A service for opening modal windows.\n *\n * Creating a modal is straightforward: create a component or a template and pass it as an argument to\n * the `.open()` method.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbModal {\n constructor(\n private _moduleCFR: ComponentFactoryResolver, private _injector: Injector, private _modalStack: NgbModalStack,\n private _config: NgbModalConfig) {}\n\n /**\n * Opens a new modal window with the specified content and supplied options.\n *\n * Content can be provided as a `TemplateRef` or a component type. If you pass a component type as content,\n * then instances of those components can be injected with an instance of the `NgbActiveModal` class. You can then\n * use `NgbActiveModal` methods to close / dismiss modals from \"inside\" of your component.\n *\n * Also see the [`NgbModalOptions`](#/components/modal/api#NgbModalOptions) for the list of supported options.\n */\n open(content: any, options: NgbModalOptions = {}): NgbModalRef {\n const combinedOptions = Object.assign({}, this._config, options);\n return this._modalStack.open(this._moduleCFR, this._injector, content, combinedOptions);\n }\n\n /**\n * Dismisses all currently displayed modal windows with the supplied reason.\n *\n * @since 3.1.0\n */\n dismissAll(reason?: any) { this._modalStack.dismissAll(reason); }\n\n /**\n * Indicates if there are currently any open modal windows in the application.\n *\n * @since 3.3.0\n */\n hasOpenModals(): boolean { return this._modalStack.hasOpenModals(); }\n}\n","import {NgModule} from '@angular/core';\n\nimport {NgbModal} from './modal';\nimport {NgbModalBackdrop} from './modal-backdrop';\nimport {NgbModalWindow} from './modal-window';\n\nexport {NgbModal} from './modal';\nexport {NgbModalConfig, NgbModalOptions} from './modal-config';\nexport {NgbModalRef, NgbActiveModal} from './modal-ref';\nexport {ModalDismissReasons} from './modal-dismiss-reasons';\n\n@NgModule({\n declarations: [NgbModalBackdrop, NgbModalWindow],\n entryComponents: [NgbModalBackdrop, NgbModalWindow],\n providers: [NgbModal]\n})\nexport class NgbModalModule {\n}\n","import {Injectable} from '@angular/core';\n\n/**\n * A configuration service for the [`NgbPagination`](#/components/pagination/api#NgbPagination) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the paginations used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbPaginationConfig {\n disabled = false;\n boundaryLinks = false;\n directionLinks = true;\n ellipses = true;\n maxSize = 0;\n pageSize = 10;\n rotate = false;\n size: 'sm' | 'lg';\n}\n","import {\n Component,\n ContentChild,\n Directive,\n EventEmitter,\n Input,\n Output,\n OnChanges,\n ChangeDetectionStrategy,\n SimpleChanges,\n TemplateRef\n} from '@angular/core';\nimport {getValueInRange, isNumber} from '../util/util';\nimport {NgbPaginationConfig} from './pagination-config';\n\n/**\n * A context for the\n * * `NgbPaginationFirst`\n * * `NgbPaginationPrevious`\n * * `NgbPaginationNext`\n * * `NgbPaginationLast`\n * * `NgbPaginationEllipsis`\n *\n * link templates in case you want to override one.\n *\n * @since 4.1.0\n */\nexport interface NgbPaginationLinkContext {\n /**\n * The currently selected page number\n */\n currentPage: number;\n\n /**\n * If `true`, the current link is disabled\n */\n disabled: boolean;\n}\n\n/**\n * A context for the `NgbPaginationNumber` link template in case you want to override one.\n *\n * Extends `NgbPaginationLinkContext`.\n *\n * @since 4.1.0\n */\nexport interface NgbPaginationNumberContext extends NgbPaginationLinkContext {\n /**\n * The page number, displayed by the current page link.\n */\n $implicit: number;\n}\n\n/**\n * A directive to match the 'ellipsis' link template\n *\n * @since 4.1.0\n */\n@Directive({selector: 'ng-template[ngbPaginationEllipsis]'})\nexport class NgbPaginationEllipsis {\n constructor(public templateRef: TemplateRef) {}\n}\n\n/**\n * A directive to match the 'first' link template\n *\n * @since 4.1.0\n */\n@Directive({selector: 'ng-template[ngbPaginationFirst]'})\nexport class NgbPaginationFirst {\n constructor(public templateRef: TemplateRef) {}\n}\n\n/**\n * A directive to match the 'last' link template\n *\n * @since 4.1.0\n */\n@Directive({selector: 'ng-template[ngbPaginationLast]'})\nexport class NgbPaginationLast {\n constructor(public templateRef: TemplateRef) {}\n}\n\n/**\n * A directive to match the 'next' link template\n *\n * @since 4.1.0\n */\n@Directive({selector: 'ng-template[ngbPaginationNext]'})\nexport class NgbPaginationNext {\n constructor(public templateRef: TemplateRef) {}\n}\n\n/**\n * A directive to match the page 'number' link template\n *\n * @since 4.1.0\n */\n@Directive({selector: 'ng-template[ngbPaginationNumber]'})\nexport class NgbPaginationNumber {\n constructor(public templateRef: TemplateRef) {}\n}\n\n/**\n * A directive to match the 'previous' link template\n *\n * @since 4.1.0\n */\n@Directive({selector: 'ng-template[ngbPaginationPrevious]'})\nexport class NgbPaginationPrevious {\n constructor(public templateRef: TemplateRef) {}\n}\n\n/**\n * A component that displays page numbers and allows to customize them in several ways.\n */\n@Component({\n selector: 'ngb-pagination',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {'role': 'navigation'},\n template: `\n ««\n «\n »\n »»\n ...\n \n {{ page }}\n (current)\n \n \n `\n})\nexport class NgbPagination implements OnChanges {\n pageCount = 0;\n pages: number[] = [];\n\n @ContentChild(NgbPaginationEllipsis, {static: false}) tplEllipsis: NgbPaginationEllipsis;\n @ContentChild(NgbPaginationFirst, {static: false}) tplFirst: NgbPaginationFirst;\n @ContentChild(NgbPaginationLast, {static: false}) tplLast: NgbPaginationLast;\n @ContentChild(NgbPaginationNext, {static: false}) tplNext: NgbPaginationNext;\n @ContentChild(NgbPaginationNumber, {static: false}) tplNumber: NgbPaginationNumber;\n @ContentChild(NgbPaginationPrevious, {static: false}) tplPrevious: NgbPaginationPrevious;\n\n /**\n * If `true`, pagination links will be disabled.\n */\n @Input() disabled: boolean;\n\n /**\n * If `true`, the \"First\" and \"Last\" page links are shown.\n */\n @Input() boundaryLinks: boolean;\n\n /**\n * If `true`, the \"Next\" and \"Previous\" page links are shown.\n */\n @Input() directionLinks: boolean;\n\n /**\n * If `true`, the ellipsis symbols and first/last page numbers will be shown when `maxSize` > number of pages.\n */\n @Input() ellipses: boolean;\n\n /**\n * Whether to rotate pages when `maxSize` > number of pages.\n *\n * The current page always stays in the middle if `true`.\n */\n @Input() rotate: boolean;\n\n /**\n * The number of items in your paginated collection.\n *\n * Note, that this is not the number of pages. Page numbers are calculated dynamically based on\n * `collectionSize` and `pageSize`. Ex. if you have 100 items in your collection and displaying 20 items per page,\n * you'll end up with 5 pages.\n */\n @Input() collectionSize: number;\n\n /**\n * The maximum number of pages to display.\n */\n @Input() maxSize: number;\n\n /**\n * The current page.\n *\n * Page numbers start with `1`.\n */\n @Input() page = 1;\n\n /**\n * The number of items per page.\n */\n @Input() pageSize: number;\n\n /**\n * An event fired when the page is changed. Will fire only if collection size is set and all values are valid.\n *\n * Event payload is the number of the newly selected page.\n *\n * Page numbers start with `1`.\n */\n @Output() pageChange = new EventEmitter(true);\n\n /**\n * The pagination display size.\n *\n * Bootstrap currently supports small and large sizes.\n */\n @Input() size: 'sm' | 'lg';\n\n constructor(config: NgbPaginationConfig) {\n this.disabled = config.disabled;\n this.boundaryLinks = config.boundaryLinks;\n this.directionLinks = config.directionLinks;\n this.ellipses = config.ellipses;\n this.maxSize = config.maxSize;\n this.pageSize = config.pageSize;\n this.rotate = config.rotate;\n this.size = config.size;\n }\n\n hasPrevious(): boolean { return this.page > 1; }\n\n hasNext(): boolean { return this.page < this.pageCount; }\n\n nextDisabled(): boolean { return !this.hasNext() || this.disabled; }\n\n previousDisabled(): boolean { return !this.hasPrevious() || this.disabled; }\n\n selectPage(pageNumber: number): void { this._updatePages(pageNumber); }\n\n ngOnChanges(changes: SimpleChanges): void { this._updatePages(this.page); }\n\n isEllipsis(pageNumber): boolean { return pageNumber === -1; }\n\n /**\n * Appends ellipses and first/last page number to the displayed pages\n */\n private _applyEllipses(start: number, end: number) {\n if (this.ellipses) {\n if (start > 0) {\n if (start > 1) {\n this.pages.unshift(-1);\n }\n this.pages.unshift(1);\n }\n if (end < this.pageCount) {\n if (end < (this.pageCount - 1)) {\n this.pages.push(-1);\n }\n this.pages.push(this.pageCount);\n }\n }\n }\n\n /**\n * Rotates page numbers based on maxSize items visible.\n * Currently selected page stays in the middle:\n *\n * Ex. for selected page = 6:\n * [5,*6*,7] for maxSize = 3\n * [4,5,*6*,7] for maxSize = 4\n */\n private _applyRotation(): [number, number] {\n let start = 0;\n let end = this.pageCount;\n let leftOffset = Math.floor(this.maxSize / 2);\n let rightOffset = this.maxSize % 2 === 0 ? leftOffset - 1 : leftOffset;\n\n if (this.page <= leftOffset) {\n // very beginning, no rotation -> [0..maxSize]\n end = this.maxSize;\n } else if (this.pageCount - this.page < leftOffset) {\n // very end, no rotation -> [len-maxSize..len]\n start = this.pageCount - this.maxSize;\n } else {\n // rotate\n start = this.page - leftOffset - 1;\n end = this.page + rightOffset;\n }\n\n return [start, end];\n }\n\n /**\n * Paginates page numbers based on maxSize items per page.\n */\n private _applyPagination(): [number, number] {\n let page = Math.ceil(this.page / this.maxSize) - 1;\n let start = page * this.maxSize;\n let end = start + this.maxSize;\n\n return [start, end];\n }\n\n private _setPageInRange(newPageNo) {\n const prevPageNo = this.page;\n this.page = getValueInRange(newPageNo, this.pageCount, 1);\n\n if (this.page !== prevPageNo && isNumber(this.collectionSize)) {\n this.pageChange.emit(this.page);\n }\n }\n\n private _updatePages(newPage: number) {\n this.pageCount = Math.ceil(this.collectionSize / this.pageSize);\n\n if (!isNumber(this.pageCount)) {\n this.pageCount = 0;\n }\n\n // fill-in model needed to render pages\n this.pages.length = 0;\n for (let i = 1; i <= this.pageCount; i++) {\n this.pages.push(i);\n }\n\n // set page within 1..max range\n this._setPageInRange(newPage);\n\n // apply maxSize if necessary\n if (this.maxSize > 0 && this.pageCount > this.maxSize) {\n let start = 0;\n let end = this.pageCount;\n\n // either paginating or rotating page numbers\n if (this.rotate) {\n [start, end] = this._applyRotation();\n } else {\n [start, end] = this._applyPagination();\n }\n\n this.pages = this.pages.slice(start, end);\n\n // adding ellipses\n this._applyEllipses(start, end);\n }\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\nimport {\n NgbPagination,\n NgbPaginationEllipsis,\n NgbPaginationFirst,\n NgbPaginationLast,\n NgbPaginationNext,\n NgbPaginationNumber,\n NgbPaginationPrevious\n} from './pagination';\n\nexport {\n NgbPagination,\n NgbPaginationEllipsis,\n NgbPaginationFirst,\n NgbPaginationLast,\n NgbPaginationNext,\n NgbPaginationNumber,\n NgbPaginationPrevious\n} from './pagination';\nexport {NgbPaginationConfig} from './pagination-config';\n\nconst DIRECTIVES = [\n NgbPagination, NgbPaginationEllipsis, NgbPaginationFirst, NgbPaginationLast, NgbPaginationNext, NgbPaginationNumber,\n NgbPaginationPrevious\n];\n\n@NgModule({declarations: DIRECTIVES, exports: DIRECTIVES, imports: [CommonModule]})\nexport class NgbPaginationModule {\n}\n","import {Observable, merge} from 'rxjs';\nimport {share, filter, delay, map} from 'rxjs/operators';\n\nexport class Trigger {\n constructor(public open: string, public close?: string) {\n if (!close) {\n this.close = open;\n }\n }\n\n isManual() { return this.open === 'manual' || this.close === 'manual'; }\n}\n\nconst DEFAULT_ALIASES = {\n 'hover': ['mouseenter', 'mouseleave'],\n 'focus': ['focusin', 'focusout'],\n};\n\nexport function parseTriggers(triggers: string, aliases = DEFAULT_ALIASES): Trigger[] {\n const trimmedTriggers = (triggers || '').trim();\n\n if (trimmedTriggers.length === 0) {\n return [];\n }\n\n const parsedTriggers = trimmedTriggers.split(/\\s+/).map(trigger => trigger.split(':')).map((triggerPair) => {\n let alias = aliases[triggerPair[0]] || triggerPair;\n return new Trigger(alias[0], alias[1]);\n });\n\n const manualTriggers = parsedTriggers.filter(triggerPair => triggerPair.isManual());\n\n if (manualTriggers.length > 1) {\n throw 'Triggers parse error: only one manual trigger is allowed';\n }\n\n if (manualTriggers.length === 1 && parsedTriggers.length > 1) {\n throw 'Triggers parse error: manual trigger can\\'t be mixed with other triggers';\n }\n\n return parsedTriggers;\n}\n\nexport function observeTriggers(renderer: any, nativeElement: any, triggers: Trigger[], isOpenedFn: () => boolean) {\n return new Observable(subscriber => {\n const listeners = [];\n const openFn = () => subscriber.next(true);\n const closeFn = () => subscriber.next(false);\n const toggleFn = () => subscriber.next(!isOpenedFn());\n\n triggers.forEach((trigger: Trigger) => {\n if (trigger.open === trigger.close) {\n listeners.push(renderer.listen(nativeElement, trigger.open, toggleFn));\n } else {\n listeners.push(\n renderer.listen(nativeElement, trigger.open, openFn),\n renderer.listen(nativeElement, trigger.close, closeFn));\n }\n });\n\n return () => { listeners.forEach(unsubscribeFn => unsubscribeFn()); };\n });\n}\n\nconst delayOrNoop = (time: number) => time > 0 ? delay(time) : (a: Observable) => a;\n\nexport function triggerDelay(openDelay: number, closeDelay: number, isOpenedFn: () => boolean) {\n return (input$: Observable) => {\n let pending = null;\n const filteredInput$ = input$.pipe(\n map(open => ({open})), filter(event => {\n const currentlyOpen = isOpenedFn();\n if (currentlyOpen !== event.open && (!pending || pending.open === currentlyOpen)) {\n pending = event;\n return true;\n }\n if (pending && pending.open !== event.open) {\n pending = null;\n }\n return false;\n }),\n share());\n const delayedOpen$ = filteredInput$.pipe(filter(event => event.open), delayOrNoop(openDelay));\n const delayedClose$ = filteredInput$.pipe(filter(event => !event.open), delayOrNoop(closeDelay));\n return merge(delayedOpen$, delayedClose$)\n .pipe(\n filter(event => {\n if (event === pending) {\n pending = null;\n return event.open !== isOpenedFn();\n }\n return false;\n }),\n map(event => event.open));\n };\n}\n\nexport function listenToTriggers(\n renderer: any, nativeElement: any, triggers: string, isOpenedFn: () => boolean, openFn, closeFn, openDelay = 0,\n closeDelay = 0) {\n const parsedTriggers = parseTriggers(triggers);\n\n if (parsedTriggers.length === 1 && parsedTriggers[0].isManual()) {\n return () => {};\n }\n\n const subscription = observeTriggers(renderer, nativeElement, parsedTriggers, isOpenedFn)\n .pipe(triggerDelay(openDelay, closeDelay, isOpenedFn))\n .subscribe(open => (open ? openFn() : closeFn()));\n\n return () => subscription.unsubscribe();\n}\n","import {Injectable} from '@angular/core';\nimport {PlacementArray} from '../util/positioning';\n\n/**\n * A configuration service for the [`NgbPopover`](#/components/popover/api#NgbPopover) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the popovers used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbPopoverConfig {\n autoClose: boolean | 'inside' | 'outside' = true;\n placement: PlacementArray = 'auto';\n triggers = 'click';\n container: string;\n disablePopover = false;\n popoverClass: string;\n openDelay = 0;\n closeDelay = 0;\n}\n","import {\n Component,\n Directive,\n Input,\n Output,\n EventEmitter,\n ChangeDetectionStrategy,\n OnInit,\n OnDestroy,\n OnChanges,\n Inject,\n Injector,\n Renderer2,\n ComponentRef,\n ElementRef,\n TemplateRef,\n ViewContainerRef,\n ComponentFactoryResolver,\n NgZone,\n SimpleChanges,\n ViewEncapsulation,\n ChangeDetectorRef,\n ApplicationRef\n} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\n\nimport {listenToTriggers} from '../util/triggers';\nimport {ngbAutoClose} from '../util/autoclose';\nimport {positionElements, PlacementArray} from '../util/positioning';\nimport {PopupService} from '../util/popup';\n\nimport {NgbPopoverConfig} from './popover-config';\n\nlet nextId = 0;\n\n@Component({\n selector: 'ngb-popover-window',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {'[class]': '\"popover\" + (popoverClass ? \" \" + popoverClass : \"\")', 'role': 'tooltip', '[id]': 'id'},\n template: `\n
\n

\n {{title}}\n \n

\n
`,\n styleUrls: ['./popover.scss']\n})\nexport class NgbPopoverWindow {\n @Input() title: undefined | string | TemplateRef;\n @Input() id: string;\n @Input() popoverClass: string;\n @Input() context: any;\n\n isTitleTemplate() { return this.title instanceof TemplateRef; }\n}\n\n/**\n * A lightweight and extensible directive for fancy popover creation.\n */\n@Directive({selector: '[ngbPopover]', exportAs: 'ngbPopover'})\nexport class NgbPopover implements OnInit, OnDestroy, OnChanges {\n /**\n * Indicates whether the popover should be closed on `Escape` key and inside/outside clicks:\n *\n * * `true` - closes on both outside and inside clicks as well as `Escape` presses\n * * `false` - disables the autoClose feature (NB: triggers still apply)\n * * `\"inside\"` - closes on inside clicks as well as Escape presses\n * * `\"outside\"` - closes on outside clicks (sometimes also achievable through triggers)\n * as well as `Escape` presses\n *\n * @since 3.0.0\n */\n @Input() autoClose: boolean | 'inside' | 'outside';\n\n /**\n * The string content or a `TemplateRef` for the content to be displayed in the popover.\n *\n * If the title and the content are empty, the popover won't open.\n */\n @Input() ngbPopover: string | TemplateRef;\n\n /**\n * The title of the popover.\n *\n * If the title and the content are empty, the popover won't open.\n */\n @Input() popoverTitle: string | TemplateRef;\n\n /**\n * The preferred placement of the popover.\n *\n * Possible values are `\"top\"`, `\"top-left\"`, `\"top-right\"`, `\"bottom\"`, `\"bottom-left\"`,\n * `\"bottom-right\"`, `\"left\"`, `\"left-top\"`, `\"left-bottom\"`, `\"right\"`, `\"right-top\"`,\n * `\"right-bottom\"`\n *\n * Accepts an array of strings or a string with space separated possible values.\n *\n * The default order of preference is `\"auto\"` (same as the sequence above).\n *\n * Please see the [positioning overview](#/positioning) for more details.\n */\n @Input() placement: PlacementArray;\n\n /**\n * Specifies events that should trigger the tooltip.\n *\n * Supports a space separated list of event names.\n * For more details see the [triggers demo](#/components/popover/examples#triggers).\n */\n @Input() triggers: string;\n\n /**\n * A selector specifying the element the popover should be appended to.\n *\n * Currently only supports `body`.\n */\n @Input() container: string;\n\n /**\n * If `true`, popover is disabled and won't be displayed.\n *\n * @since 1.1.0\n */\n @Input() disablePopover: boolean;\n\n /**\n * An optional class applied to the popover window element.\n *\n * @since 2.2.0\n */\n @Input() popoverClass: string;\n\n /**\n * The opening delay in ms. Works only for \"non-manual\" opening triggers defined by the `triggers` input.\n *\n * @since 4.1.0\n */\n @Input() openDelay: number;\n\n /**\n * The closing delay in ms. Works only for \"non-manual\" opening triggers defined by the `triggers` input.\n *\n * @since 4.1.0\n */\n @Input() closeDelay: number;\n\n /**\n * An event emitted when the popover is shown. Contains no payload.\n */\n @Output() shown = new EventEmitter();\n\n /**\n * An event emitted when the popover is hidden. Contains no payload.\n */\n @Output() hidden = new EventEmitter();\n\n private _ngbPopoverWindowId = `ngb-popover-${nextId++}`;\n private _popupService: PopupService;\n private _windowRef: ComponentRef;\n private _unregisterListenersFn;\n private _zoneSubscription: any;\n private _isDisabled(): boolean {\n if (this.disablePopover) {\n return true;\n }\n if (!this.ngbPopover && !this.popoverTitle) {\n return true;\n }\n return false;\n }\n\n constructor(\n private _elementRef: ElementRef, private _renderer: Renderer2, injector: Injector,\n componentFactoryResolver: ComponentFactoryResolver, viewContainerRef: ViewContainerRef, config: NgbPopoverConfig,\n private _ngZone: NgZone, @Inject(DOCUMENT) private _document: any, private _changeDetector: ChangeDetectorRef,\n private _applicationRef: ApplicationRef) {\n this.autoClose = config.autoClose;\n this.placement = config.placement;\n this.triggers = config.triggers;\n this.container = config.container;\n this.disablePopover = config.disablePopover;\n this.popoverClass = config.popoverClass;\n this.openDelay = config.openDelay;\n this.closeDelay = config.closeDelay;\n this._popupService = new PopupService(\n NgbPopoverWindow, injector, viewContainerRef, _renderer, componentFactoryResolver, _applicationRef);\n\n this._zoneSubscription = _ngZone.onStable.subscribe(() => {\n if (this._windowRef) {\n positionElements(\n this._elementRef.nativeElement, this._windowRef.location.nativeElement, this.placement,\n this.container === 'body', 'bs-popover');\n }\n });\n }\n\n /**\n * Opens the popover.\n *\n * This is considered to be a \"manual\" triggering.\n * The `context` is an optional value to be injected into the popover template when it is created.\n */\n open(context?: any) {\n if (!this._windowRef && !this._isDisabled()) {\n this._windowRef = this._popupService.open(this.ngbPopover, context);\n this._windowRef.instance.title = this.popoverTitle;\n this._windowRef.instance.context = context;\n this._windowRef.instance.popoverClass = this.popoverClass;\n this._windowRef.instance.id = this._ngbPopoverWindowId;\n\n this._renderer.setAttribute(this._elementRef.nativeElement, 'aria-describedby', this._ngbPopoverWindowId);\n\n if (this.container === 'body') {\n this._document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement);\n }\n\n // We need to detect changes, because we don't know where .open() might be called from.\n // Ex. opening popover from one of lifecycle hooks that run after the CD\n // (say from ngAfterViewInit) will result in 'ExpressionHasChanged' exception\n this._windowRef.changeDetectorRef.detectChanges();\n\n // We need to mark for check, because popover won't work inside the OnPush component.\n // Ex. when we use expression like `{{ popover.isOpen() : 'opened' : 'closed' }}`\n // inside the template of an OnPush component and we change the popover from\n // open -> closed, the expression in question won't be updated unless we explicitly\n // mark the parent component to be checked.\n this._windowRef.changeDetectorRef.markForCheck();\n\n ngbAutoClose(\n this._ngZone, this._document, this.autoClose, () => this.close(), this.hidden,\n [this._windowRef.location.nativeElement]);\n this.shown.emit();\n }\n }\n\n /**\n * Closes the popover.\n *\n * This is considered to be a \"manual\" triggering of the popover.\n */\n close(): void {\n if (this._windowRef) {\n this._renderer.removeAttribute(this._elementRef.nativeElement, 'aria-describedby');\n this._popupService.close();\n this._windowRef = null;\n this.hidden.emit();\n this._changeDetector.markForCheck();\n }\n }\n\n /**\n * Toggles the popover.\n *\n * This is considered to be a \"manual\" triggering of the popover.\n */\n toggle(): void {\n if (this._windowRef) {\n this.close();\n } else {\n this.open();\n }\n }\n\n /**\n * Returns `true`, if the popover is currently shown.\n */\n isOpen(): boolean { return this._windowRef != null; }\n\n ngOnInit() {\n this._unregisterListenersFn = listenToTriggers(\n this._renderer, this._elementRef.nativeElement, this.triggers, this.isOpen.bind(this), this.open.bind(this),\n this.close.bind(this), +this.openDelay, +this.closeDelay);\n }\n\n ngOnChanges(changes: SimpleChanges) {\n // close popover if title and content become empty, or disablePopover set to true\n if ((changes['ngbPopover'] || changes['popoverTitle'] || changes['disablePopover']) && this._isDisabled()) {\n this.close();\n }\n }\n\n ngOnDestroy() {\n this.close();\n // This check is needed as it might happen that ngOnDestroy is called before ngOnInit\n // under certain conditions, see: https://github.com/ng-bootstrap/ng-bootstrap/issues/2199\n if (this._unregisterListenersFn) {\n this._unregisterListenersFn();\n }\n this._zoneSubscription.unsubscribe();\n }\n}\n","import {NgModule} from '@angular/core';\n\nimport {NgbPopover, NgbPopoverWindow} from './popover';\nimport {CommonModule} from '@angular/common';\n\nexport {NgbPopover} from './popover';\nexport {NgbPopoverConfig} from './popover-config';\nexport {Placement} from '../util/positioning';\n\n@NgModule({\n declarations: [NgbPopover, NgbPopoverWindow],\n exports: [NgbPopover],\n imports: [CommonModule],\n entryComponents: [NgbPopoverWindow]\n})\nexport class NgbPopoverModule {\n}\n","import {Injectable} from '@angular/core';\n\n/**\n * A configuration service for the [`NgbProgressbar`](#/components/progressbar/api#NgbProgressbar) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the progress bars used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbProgressbarConfig {\n max = 100;\n animated = false;\n striped = false;\n type: string;\n showValue = false;\n height: string;\n}\n","import {Component, Input, ChangeDetectionStrategy} from '@angular/core';\nimport {getValueInRange} from '../util/util';\nimport {NgbProgressbarConfig} from './progressbar-config';\n\n/**\n * A directive that provides feedback on the progress of a workflow or an action.\n */\n@Component({\n selector: 'ngb-progressbar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n
\n
\n {{getPercentValue()}}%\n
\n
\n `\n})\nexport class NgbProgressbar {\n /**\n * The maximal value to be displayed in the progressbar.\n */\n @Input() max: number;\n\n /**\n * If `true`, the stripes on the progressbar are animated.\n *\n * Takes effect only for browsers supporting CSS3 animations, and if `striped` is `true`.\n */\n @Input() animated: boolean;\n\n /**\n * If `true`, the progress bars will be displayed as striped.\n */\n @Input() striped: boolean;\n\n /**\n * If `true`, the current percentage will be shown in the `xx%` format.\n */\n @Input() showValue: boolean;\n\n /**\n * The type of the progress bar.\n *\n * Currently Bootstrap supports `\"success\"`, `\"info\"`, `\"warning\"` or `\"danger\"`.\n */\n @Input() type: string;\n\n /**\n * The current value for the progress bar.\n *\n * Should be in the `[0, max]` range.\n */\n @Input() value = 0;\n\n /**\n * THe height of the progress bar.\n *\n * Accepts any valid CSS height values, ex. `\"2rem\"`\n */\n @Input() height: string;\n\n constructor(config: NgbProgressbarConfig) {\n this.max = config.max;\n this.animated = config.animated;\n this.striped = config.striped;\n this.type = config.type;\n this.showValue = config.showValue;\n this.height = config.height;\n }\n\n getValue() { return getValueInRange(this.value, this.max); }\n\n getPercentValue() { return 100 * this.getValue() / this.max; }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\nimport {NgbProgressbar} from './progressbar';\n\nexport {NgbProgressbar} from './progressbar';\nexport {NgbProgressbarConfig} from './progressbar-config';\n\n@NgModule({declarations: [NgbProgressbar], exports: [NgbProgressbar], imports: [CommonModule]})\nexport class NgbProgressbarModule {\n}\n","import {Injectable} from '@angular/core';\n\n/**\n * A configuration service for the [`NgbRating`](#/components/rating/api#NgbRating) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the ratings used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbRatingConfig {\n max = 10;\n readonly = false;\n resettable = false;\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n Input,\n Output,\n EventEmitter,\n OnInit,\n TemplateRef,\n OnChanges,\n SimpleChanges,\n ContentChild,\n forwardRef,\n ChangeDetectorRef\n} from '@angular/core';\nimport {NgbRatingConfig} from './rating-config';\nimport {getValueInRange} from '../util/util';\nimport {Key} from '../util/key';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\n\n/**\n * The context for the custom star display template defined in the `starTemplate`.\n */\nexport interface StarTemplateContext {\n /**\n * The star fill percentage, an integer in the `[0, 100]` range.\n */\n fill: number;\n\n /**\n * Index of the star, starts with `0`.\n */\n index: number;\n}\n\nconst NGB_RATING_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgbRating),\n multi: true\n};\n\n/**\n * A directive that helps visualising and interacting with a star rating bar.\n */\n@Component({\n selector: 'ngb-rating',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'd-inline-flex',\n 'tabindex': '0',\n 'role': 'slider',\n 'aria-valuemin': '0',\n '[attr.aria-valuemax]': 'max',\n '[attr.aria-valuenow]': 'nextRate',\n '[attr.aria-valuetext]': 'ariaValueText()',\n '[attr.aria-disabled]': 'readonly ? true : null',\n '(blur)': 'handleBlur()',\n '(keydown)': 'handleKeyDown($event)',\n '(mouseleave)': 'reset()'\n },\n template: `\n {{ fill === 100 ? '★' : '☆' }}\n \n ({{ index < nextRate ? '*' : ' ' }})\n \n \n \n \n \n `,\n providers: [NGB_RATING_VALUE_ACCESSOR]\n})\nexport class NgbRating implements ControlValueAccessor,\n OnInit, OnChanges {\n contexts: StarTemplateContext[] = [];\n disabled = false;\n nextRate: number;\n\n\n /**\n * The maximal rating that can be given.\n */\n @Input() max: number;\n\n /**\n * The current rating. Could be a decimal value like `3.75`.\n */\n @Input() rate: number;\n\n /**\n * If `true`, the rating can't be changed.\n */\n @Input() readonly: boolean;\n\n /**\n * If `true`, the rating can be reset to `0` by mouse clicking currently set rating.\n */\n @Input() resettable: boolean;\n\n /**\n * The template to override the way each star is displayed.\n *\n * Alternatively put an `` as the only child of your `` element\n */\n @Input() starTemplate: TemplateRef;\n @ContentChild(TemplateRef, {static: false}) starTemplateFromContent: TemplateRef;\n\n /**\n * An event emitted when the user is hovering over a given rating.\n *\n * Event payload equals to the rating being hovered over.\n */\n @Output() hover = new EventEmitter();\n\n /**\n * An event emitted when the user stops hovering over a given rating.\n *\n * Event payload equals to the rating of the last item being hovered over.\n */\n @Output() leave = new EventEmitter();\n\n /**\n * An event emitted when the user selects a new rating.\n *\n * Event payload equals to the newly selected rating.\n */\n @Output() rateChange = new EventEmitter(true);\n\n onChange = (_: any) => {};\n onTouched = () => {};\n\n constructor(config: NgbRatingConfig, private _changeDetectorRef: ChangeDetectorRef) {\n this.max = config.max;\n this.readonly = config.readonly;\n }\n\n ariaValueText() { return `${this.nextRate} out of ${this.max}`; }\n\n enter(value: number): void {\n if (!this.readonly && !this.disabled) {\n this._updateState(value);\n }\n this.hover.emit(value);\n }\n\n handleBlur() { this.onTouched(); }\n\n handleClick(value: number) { this.update(this.resettable && this.rate === value ? 0 : value); }\n\n handleKeyDown(event: KeyboardEvent) {\n // tslint:disable-next-line:deprecation\n switch (event.which) {\n case Key.ArrowDown:\n case Key.ArrowLeft:\n this.update(this.rate - 1);\n break;\n case Key.ArrowUp:\n case Key.ArrowRight:\n this.update(this.rate + 1);\n break;\n case Key.Home:\n this.update(0);\n break;\n case Key.End:\n this.update(this.max);\n break;\n default:\n return;\n }\n\n // note 'return' in default case\n event.preventDefault();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['rate']) {\n this.update(this.rate);\n }\n }\n\n ngOnInit(): void {\n this.contexts = Array.from({length: this.max}, (v, k) => ({fill: 0, index: k}));\n this._updateState(this.rate);\n }\n\n registerOnChange(fn: (value: any) => any): void { this.onChange = fn; }\n\n registerOnTouched(fn: () => any): void { this.onTouched = fn; }\n\n reset(): void {\n this.leave.emit(this.nextRate);\n this._updateState(this.rate);\n }\n\n setDisabledState(isDisabled: boolean) { this.disabled = isDisabled; }\n\n update(value: number, internalChange = true): void {\n const newRate = getValueInRange(value, this.max, 0);\n if (!this.readonly && !this.disabled && this.rate !== newRate) {\n this.rate = newRate;\n this.rateChange.emit(this.rate);\n }\n if (internalChange) {\n this.onChange(this.rate);\n this.onTouched();\n }\n this._updateState(this.rate);\n }\n\n writeValue(value) {\n this.update(value, false);\n this._changeDetectorRef.markForCheck();\n }\n\n private _getFillValue(index: number): number {\n const diff = this.nextRate - index;\n\n if (diff >= 1) {\n return 100;\n }\n if (diff < 1 && diff > 0) {\n return parseInt((diff * 100).toFixed(2), 10);\n }\n\n return 0;\n }\n\n private _updateState(nextValue: number) {\n this.nextRate = nextValue;\n this.contexts.forEach((context, index) => context.fill = this._getFillValue(index));\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\nimport {NgbRating} from './rating';\n\nexport {NgbRating} from './rating';\nexport {NgbRatingConfig} from './rating-config';\n\n@NgModule({declarations: [NgbRating], exports: [NgbRating], imports: [CommonModule]})\nexport class NgbRatingModule {\n}\n","import {Injectable} from '@angular/core';\n\n/**\n * A configuration service for the [`NgbTabset`](#/components/tabset/api#NgbTabset) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the tabsets used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbTabsetConfig {\n justify: 'start' | 'center' | 'end' | 'fill' | 'justified' = 'start';\n orientation: 'horizontal' | 'vertical' = 'horizontal';\n type: 'tabs' | 'pills' = 'tabs';\n}\n","import {\n Component,\n Input,\n ContentChildren,\n QueryList,\n Directive,\n TemplateRef,\n AfterContentChecked,\n Output,\n EventEmitter\n} from '@angular/core';\nimport {NgbTabsetConfig} from './tabset-config';\n\nlet nextId = 0;\n\n/**\n * A directive to wrap tab titles that need to contain HTML markup or other directives.\n *\n * Alternatively you could use the `NgbTab.title` input for string titles.\n */\n@Directive({selector: 'ng-template[ngbTabTitle]'})\nexport class NgbTabTitle {\n constructor(public templateRef: TemplateRef) {}\n}\n\n/**\n * A directive to wrap content to be displayed in a tab.\n */\n@Directive({selector: 'ng-template[ngbTabContent]'})\nexport class NgbTabContent {\n constructor(public templateRef: TemplateRef) {}\n}\n\n/**\n * A directive representing an individual tab.\n */\n@Directive({selector: 'ngb-tab'})\nexport class NgbTab implements AfterContentChecked {\n /**\n * The tab identifier.\n *\n * Must be unique for the entire document for proper accessibility support.\n */\n @Input() id = `ngb-tab-${nextId++}`;\n\n /**\n * The tab title.\n *\n * Use the [`NgbTabTitle`](#/components/tabset/api#NgbTabTitle) directive for non-string titles.\n */\n @Input() title: string;\n\n /**\n * If `true`, the current tab is disabled and can't be toggled.\n */\n @Input() disabled = false;\n\n titleTpl: NgbTabTitle | null;\n contentTpl: NgbTabContent | null;\n\n @ContentChildren(NgbTabTitle, {descendants: false}) titleTpls: QueryList;\n @ContentChildren(NgbTabContent, {descendants: false}) contentTpls: QueryList;\n\n ngAfterContentChecked() {\n // We are using @ContentChildren instead of @ContentChild as in the Angular version being used\n // only @ContentChildren allows us to specify the {descendants: false} option.\n // Without {descendants: false} we are hitting bugs described in:\n // https://github.com/ng-bootstrap/ng-bootstrap/issues/2240\n this.titleTpl = this.titleTpls.first;\n this.contentTpl = this.contentTpls.first;\n }\n}\n\n/**\n * The payload of the change event fired right before the tab change.\n */\nexport interface NgbTabChangeEvent {\n /**\n * The id of the currently active tab.\n */\n activeId: string;\n\n /**\n * The id of the newly selected tab.\n */\n nextId: string;\n\n /**\n * Calling this function will prevent tab switching.\n */\n preventDefault: () => void;\n}\n\n/**\n * A component that makes it easy to create tabbed interface.\n */\n@Component({\n selector: 'ngb-tabset',\n exportAs: 'ngbTabset',\n template: `\n \n
\n \n \n \n
\n
\n \n `\n})\nexport class NgbTabset implements AfterContentChecked {\n justifyClass: string;\n\n @ContentChildren(NgbTab) tabs: QueryList;\n\n /**\n * The identifier of the tab that should be opened **initially**.\n *\n * For subsequent tab switches use the `.select()` method and the `(tabChange)` event.\n */\n @Input() activeId: string;\n\n /**\n * If `true`, non-visible tabs content will be removed from DOM. Otherwise it will just be hidden.\n */\n @Input() destroyOnHide = true;\n\n /**\n * The horizontal alignment of the tabs with flexbox utilities.\n */\n @Input()\n set justify(className: 'start' | 'center' | 'end' | 'fill' | 'justified') {\n if (className === 'fill' || className === 'justified') {\n this.justifyClass = `nav-${className}`;\n } else {\n this.justifyClass = `justify-content-${className}`;\n }\n }\n\n /**\n * The orientation of the tabset.\n */\n @Input() orientation: 'horizontal' | 'vertical';\n\n /**\n * Type of navigation to be used for tabs.\n *\n * Currently Bootstrap supports only `\"tabs\"` and `\"pills\"`.\n *\n * Since `3.0.0` can also be an arbitrary string (ex. for custom themes).\n */\n @Input() type: 'tabs' | 'pills' | string;\n\n /**\n * A tab change event emitted right before the tab change happens.\n *\n * See [`NgbTabChangeEvent`](#/components/tabset/api#NgbTabChangeEvent) for payload details.\n */\n @Output() tabChange = new EventEmitter();\n\n constructor(config: NgbTabsetConfig) {\n this.type = config.type;\n this.justify = config.justify;\n this.orientation = config.orientation;\n }\n\n /**\n * Selects the tab with the given id and shows its associated content panel.\n *\n * Any other tab that was previously selected becomes unselected and its associated pane is removed from DOM or\n * hidden depending on the `destroyOnHide` value.\n */\n select(tabId: string) {\n let selectedTab = this._getTabById(tabId);\n if (selectedTab && !selectedTab.disabled && this.activeId !== selectedTab.id) {\n let defaultPrevented = false;\n\n this.tabChange.emit(\n {activeId: this.activeId, nextId: selectedTab.id, preventDefault: () => { defaultPrevented = true; }});\n\n if (!defaultPrevented) {\n this.activeId = selectedTab.id;\n }\n }\n }\n\n ngAfterContentChecked() {\n // auto-correct activeId that might have been set incorrectly as input\n let activeTab = this._getTabById(this.activeId);\n this.activeId = activeTab ? activeTab.id : (this.tabs.length ? this.tabs.first.id : null);\n }\n\n private _getTabById(id: string): NgbTab {\n let tabsWithId: NgbTab[] = this.tabs.filter(tab => tab.id === id);\n return tabsWithId.length ? tabsWithId[0] : null;\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\nimport {NgbTabset, NgbTab, NgbTabContent, NgbTabTitle} from './tabset';\n\nexport {NgbTabset, NgbTab, NgbTabContent, NgbTabTitle, NgbTabChangeEvent} from './tabset';\nexport {NgbTabsetConfig} from './tabset-config';\n\nconst NGB_TABSET_DIRECTIVES = [NgbTabset, NgbTab, NgbTabContent, NgbTabTitle];\n\n@NgModule({declarations: NGB_TABSET_DIRECTIVES, exports: NGB_TABSET_DIRECTIVES, imports: [CommonModule]})\nexport class NgbTabsetModule {\n}\n","import {isNumber, toInteger} from '../util/util';\n\nexport class NgbTime {\n hour: number;\n minute: number;\n second: number;\n\n constructor(hour?: number, minute?: number, second?: number) {\n this.hour = toInteger(hour);\n this.minute = toInteger(minute);\n this.second = toInteger(second);\n }\n\n changeHour(step = 1) { this.updateHour((isNaN(this.hour) ? 0 : this.hour) + step); }\n\n updateHour(hour: number) {\n if (isNumber(hour)) {\n this.hour = (hour < 0 ? 24 + hour : hour) % 24;\n } else {\n this.hour = NaN;\n }\n }\n\n changeMinute(step = 1) { this.updateMinute((isNaN(this.minute) ? 0 : this.minute) + step); }\n\n updateMinute(minute: number) {\n if (isNumber(minute)) {\n this.minute = minute % 60 < 0 ? 60 + minute % 60 : minute % 60;\n this.changeHour(Math.floor(minute / 60));\n } else {\n this.minute = NaN;\n }\n }\n\n changeSecond(step = 1) { this.updateSecond((isNaN(this.second) ? 0 : this.second) + step); }\n\n updateSecond(second: number) {\n if (isNumber(second)) {\n this.second = second < 0 ? 60 + second % 60 : second % 60;\n this.changeMinute(Math.floor(second / 60));\n } else {\n this.second = NaN;\n }\n }\n\n isValid(checkSecs = true) {\n return isNumber(this.hour) && isNumber(this.minute) && (checkSecs ? isNumber(this.second) : true);\n }\n\n toString() { return `${this.hour || 0}:${this.minute || 0}:${this.second || 0}`; }\n}\n","import {Injectable} from '@angular/core';\n\n/**\n * A configuration service for the [`NgbTimepicker`](#/components/timepicker/api#NgbTimepicker) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the timepickers used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbTimepickerConfig {\n meridian = false;\n spinners = true;\n seconds = false;\n hourStep = 1;\n minuteStep = 1;\n secondStep = 1;\n disabled = false;\n readonlyInputs = false;\n size: 'small' | 'medium' | 'large' = 'medium';\n}\n","import {Injectable} from '@angular/core';\nimport {NgbTimeStruct} from './ngb-time-struct';\nimport {isInteger} from '../util/util';\n\nexport function NGB_DATEPICKER_TIME_ADAPTER_FACTORY() {\n return new NgbTimeStructAdapter();\n}\n\n/**\n * An abstract service that does the conversion between the internal timepicker `NgbTimeStruct` model and\n * any provided user time model `T`, ex. a string, a native date, etc.\n *\n * The adapter is used **only** for conversion when binding timepicker to a form control,\n * ex. `[(ngModel)]=\"userTimeModel\"`. Here `userTimeModel` can be of any type.\n *\n * The default timepicker implementation assumes we use `NgbTimeStruct` as a user model.\n *\n * See the [custom time adapter demo](#/components/timepicker/examples#adapter) for an example.\n *\n * @since 2.2.0\n */\n@Injectable({providedIn: 'root', useFactory: NGB_DATEPICKER_TIME_ADAPTER_FACTORY})\nexport abstract class NgbTimeAdapter {\n /**\n * Converts a user-model time of type `T` to an `NgbTimeStruct` for internal use.\n */\n abstract fromModel(value: T): NgbTimeStruct;\n\n /**\n * Converts an internal `NgbTimeStruct` time to a user-model time of type `T`.\n */\n abstract toModel(time: NgbTimeStruct): T;\n}\n\n@Injectable()\nexport class NgbTimeStructAdapter extends NgbTimeAdapter {\n /**\n * Converts a NgbTimeStruct value into NgbTimeStruct value\n */\n fromModel(time: NgbTimeStruct): NgbTimeStruct {\n return (time && isInteger(time.hour) && isInteger(time.minute)) ?\n {hour: time.hour, minute: time.minute, second: isInteger(time.second) ? time.second : null} :\n null;\n }\n\n /**\n * Converts a NgbTimeStruct value into NgbTimeStruct value\n */\n toModel(time: NgbTimeStruct): NgbTimeStruct {\n return (time && isInteger(time.hour) && isInteger(time.minute)) ?\n {hour: time.hour, minute: time.minute, second: isInteger(time.second) ? time.second : null} :\n null;\n }\n}\n","import {Inject, Injectable, LOCALE_ID} from '@angular/core';\nimport {FormStyle, getLocaleDayPeriods, TranslationWidth} from '@angular/common';\n\nexport function NGB_TIMEPICKER_I18N_FACTORY(locale) {\n return new NgbTimepickerI18nDefault(locale);\n}\n\n/**\n * Type of the service supplying day periods (for example, 'AM' and 'PM') to NgbTimepicker component.\n * The default implementation of this service honors the Angular locale, and uses the registered locale data,\n * as explained in the Angular i18n guide.\n */\n@Injectable({providedIn: 'root', useFactory: NGB_TIMEPICKER_I18N_FACTORY, deps: [LOCALE_ID]})\nexport abstract class NgbTimepickerI18n {\n /**\n * Returns the name for the period before midday.\n */\n abstract getMorningPeriod(): string;\n\n /**\n * Returns the name for the period after midday.\n */\n abstract getAfternoonPeriod(): string;\n}\n\n@Injectable()\nexport class NgbTimepickerI18nDefault extends NgbTimepickerI18n {\n private _periods: [string, string];\n\n constructor(@Inject(LOCALE_ID) locale: string) {\n super();\n\n this._periods = getLocaleDayPeriods(locale, FormStyle.Standalone, TranslationWidth.Narrow);\n }\n\n getMorningPeriod(): string { return this._periods[0]; }\n\n getAfternoonPeriod(): string { return this._periods[1]; }\n}\n","import {\n ChangeDetectorRef,\n Component,\n forwardRef,\n Input,\n OnChanges,\n SimpleChanges,\n ViewEncapsulation\n} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\n\nimport {isInteger, isNumber, padNumber, toInteger} from '../util/util';\nimport {NgbTime} from './ngb-time';\nimport {NgbTimepickerConfig} from './timepicker-config';\nimport {NgbTimeAdapter} from './ngb-time-adapter';\nimport {NgbTimepickerI18n} from './timepicker-i18n';\n\nconst NGB_TIMEPICKER_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgbTimepicker),\n multi: true\n};\n\n/**\n * A directive that helps with wth picking hours, minutes and seconds.\n */\n@Component({\n selector: 'ngb-timepicker',\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./timepicker.scss'],\n template: `\n
\n
\n
\n \n \n \n
\n
:
\n
\n \n \n \n
\n
:
\n
\n \n \n \n
\n
\n
\n \n
\n
\n
\n `,\n providers: [NGB_TIMEPICKER_VALUE_ACCESSOR]\n})\nexport class NgbTimepicker implements ControlValueAccessor,\n OnChanges {\n disabled: boolean;\n model: NgbTime;\n\n private _hourStep: number;\n private _minuteStep: number;\n private _secondStep: number;\n\n /**\n * Whether to display 12H or 24H mode.\n */\n @Input() meridian: boolean;\n\n /**\n * If `true`, the spinners above and below inputs are visible.\n */\n @Input() spinners: boolean;\n\n /**\n * If `true`, it is possible to select seconds.\n */\n @Input() seconds: boolean;\n\n /**\n * The number of hours to add/subtract when clicking hour spinners.\n */\n @Input()\n set hourStep(step: number) {\n this._hourStep = isInteger(step) ? step : this._config.hourStep;\n }\n\n get hourStep(): number { return this._hourStep; }\n\n /**\n * The number of minutes to add/subtract when clicking minute spinners.\n */\n @Input()\n set minuteStep(step: number) {\n this._minuteStep = isInteger(step) ? step : this._config.minuteStep;\n }\n\n get minuteStep(): number { return this._minuteStep; }\n\n /**\n * The number of seconds to add/subtract when clicking second spinners.\n */\n @Input()\n set secondStep(step: number) {\n this._secondStep = isInteger(step) ? step : this._config.secondStep;\n }\n\n get secondStep(): number { return this._secondStep; }\n\n /**\n * If `true`, the timepicker is readonly and can't be changed.\n */\n @Input() readonlyInputs: boolean;\n\n /**\n * The size of inputs and buttons.\n */\n @Input() size: 'small' | 'medium' | 'large';\n\n constructor(\n private readonly _config: NgbTimepickerConfig, private _ngbTimeAdapter: NgbTimeAdapter,\n private _cd: ChangeDetectorRef, public i18n: NgbTimepickerI18n) {\n this.meridian = _config.meridian;\n this.spinners = _config.spinners;\n this.seconds = _config.seconds;\n this.hourStep = _config.hourStep;\n this.minuteStep = _config.minuteStep;\n this.secondStep = _config.secondStep;\n this.disabled = _config.disabled;\n this.readonlyInputs = _config.readonlyInputs;\n this.size = _config.size;\n }\n\n onChange = (_: any) => {};\n onTouched = () => {};\n\n writeValue(value) {\n const structValue = this._ngbTimeAdapter.fromModel(value);\n this.model = structValue ? new NgbTime(structValue.hour, structValue.minute, structValue.second) : new NgbTime();\n if (!this.seconds && (!structValue || !isNumber(structValue.second))) {\n this.model.second = 0;\n }\n this._cd.markForCheck();\n }\n\n registerOnChange(fn: (value: any) => any): void { this.onChange = fn; }\n\n registerOnTouched(fn: () => any): void { this.onTouched = fn; }\n\n setDisabledState(isDisabled: boolean) { this.disabled = isDisabled; }\n\n changeHour(step: number) {\n this.model.changeHour(step);\n this.propagateModelChange();\n }\n\n changeMinute(step: number) {\n this.model.changeMinute(step);\n this.propagateModelChange();\n }\n\n changeSecond(step: number) {\n this.model.changeSecond(step);\n this.propagateModelChange();\n }\n\n updateHour(newVal: string) {\n const isPM = this.model.hour >= 12;\n const enteredHour = toInteger(newVal);\n if (this.meridian && (isPM && enteredHour < 12 || !isPM && enteredHour === 12)) {\n this.model.updateHour(enteredHour + 12);\n } else {\n this.model.updateHour(enteredHour);\n }\n this.propagateModelChange();\n }\n\n updateMinute(newVal: string) {\n this.model.updateMinute(toInteger(newVal));\n this.propagateModelChange();\n }\n\n updateSecond(newVal: string) {\n this.model.updateSecond(toInteger(newVal));\n this.propagateModelChange();\n }\n\n toggleMeridian() {\n if (this.meridian) {\n this.changeHour(12);\n }\n }\n\n formatHour(value: number) {\n if (isNumber(value)) {\n if (this.meridian) {\n return padNumber(value % 12 === 0 ? 12 : value % 12);\n } else {\n return padNumber(value % 24);\n }\n } else {\n return padNumber(NaN);\n }\n }\n\n formatMinSec(value: number) { return padNumber(value); }\n\n get isSmallSize(): boolean { return this.size === 'small'; }\n\n get isLargeSize(): boolean { return this.size === 'large'; }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['seconds'] && !this.seconds && this.model && !isNumber(this.model.second)) {\n this.model.second = 0;\n this.propagateModelChange(false);\n }\n }\n\n private propagateModelChange(touched = true) {\n if (touched) {\n this.onTouched();\n }\n if (this.model.isValid(this.seconds)) {\n this.onChange(\n this._ngbTimeAdapter.toModel({hour: this.model.hour, minute: this.model.minute, second: this.model.second}));\n } else {\n this.onChange(this._ngbTimeAdapter.toModel(null));\n }\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\nimport {NgbTimepicker} from './timepicker';\n\nexport {NgbTimepicker} from './timepicker';\nexport {NgbTimepickerConfig} from './timepicker-config';\nexport {NgbTimeStruct} from './ngb-time-struct';\nexport {NgbTimeAdapter} from './ngb-time-adapter';\nexport {NgbTimepickerI18n} from './timepicker-i18n';\n\n@NgModule({declarations: [NgbTimepicker], exports: [NgbTimepicker], imports: [CommonModule]})\nexport class NgbTimepickerModule {\n}\n","import {Injectable} from '@angular/core';\n\n/**\n * Interface used to type all toast config options. See `NgbToastConfig`.\n *\n * @since 5.0.0\n */\nexport interface NgbToastOptions {\n /**\n * Specify if the toast component should emit the `hide()` output\n * after a certain `delay` in ms.\n */\n autohide?: boolean;\n\n /**\n * Delay in ms after which the `hide()` output should be emitted.\n */\n delay?: number;\n\n /**\n * Type of aria-live attribute to be used.\n *\n * Could be one of these 2 values (as string):\n * - `polite` (default)\n * - `alert`\n */\n ariaLive?: 'polite' | 'alert';\n}\n\n/**\n * Configuration service for the NgbToast component. You can inject this service, typically in your root component,\n * and customize the values of its properties in order to provide default values for all the toasts used in the\n * application.\n *\n * @since 5.0.0\n */\n@Injectable({providedIn: 'root'})\nexport class NgbToastConfig implements NgbToastOptions {\n autohide = true;\n delay = 500;\n ariaLive: 'polite' | 'alert' = 'polite';\n}\n","import {\n AfterContentInit,\n Attribute,\n Component,\n ContentChild,\n Directive,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n TemplateRef,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport {NgbToastConfig} from './toast-config';\n\n/**\n * This directive allows the usage of HTML markup or other directives\n * inside of the toast's header.\n *\n * @since 5.0.0\n */\n@Directive({selector: '[ngbToastHeader]'})\nexport class NgbToastHeader {\n}\n\n/**\n * Toasts provide feedback messages as notifications to the user.\n * Goal is to mimic the push notifications available both on mobile and desktop operating systems.\n *\n * @since 5.0.0\n */\n@Component({\n selector: 'ngb-toast',\n exportAs: 'ngbToast',\n encapsulation: ViewEncapsulation.None,\n host: {\n 'role': 'alert',\n '[attr.aria-live]': 'ariaLive',\n 'aria-atomic': 'true',\n '[class.toast]': 'true',\n '[class.show]': 'true',\n '[class.autohide]': 'autohide',\n },\n template: `\n \n {{header}}\n \n \n
\n \n \n
\n
\n
\n \n
\n `,\n styleUrls: ['./toast.scss']\n})\nexport class NgbToast implements AfterContentInit,\n OnChanges {\n private _timeoutID;\n\n /**\n * Delay after which the toast will hide (ms).\n * default: `500` (ms) (inherited from NgbToastConfig)\n */\n @Input() delay: number;\n\n /**\n * Auto hide the toast after a delay in ms.\n * default: `true` (inherited from NgbToastConfig)\n */\n @Input() autohide: boolean;\n\n /**\n * Text to be used as toast's header.\n * Ignored if a ContentChild template is specified at the same time.\n */\n @Input() header: string;\n\n /**\n * A template like `` can be\n * used in the projected content to allow markup usage.\n */\n @ContentChild(NgbToastHeader, {read: TemplateRef, static: true}) contentHeaderTpl: TemplateRef| null = null;\n\n /**\n * An event fired immediately when toast's `hide()` method has been called.\n * It can only occur in 2 different scenarios:\n * - `autohide` timeout fires\n * - user clicks on a closing cross (×)\n *\n * Additionally this output is purely informative. The toast won't disappear. It's up to the user to take care of\n * that.\n */\n @Output('hide') hideOutput = new EventEmitter();\n\n constructor(@Attribute('aria-live') public ariaLive: string, config: NgbToastConfig) {\n if (this.ariaLive == null) {\n this.ariaLive = config.ariaLive;\n }\n this.delay = config.delay;\n this.autohide = config.autohide;\n }\n\n ngAfterContentInit() { this._init(); }\n\n ngOnChanges(changes: SimpleChanges) {\n if ('autohide' in changes) {\n this._clearTimeout();\n this._init();\n }\n }\n\n hide() {\n this._clearTimeout();\n this.hideOutput.emit();\n }\n\n private _init() {\n if (this.autohide && !this._timeoutID) {\n this._timeoutID = setTimeout(() => this.hide(), this.delay);\n }\n }\n\n private _clearTimeout() {\n if (this._timeoutID) {\n clearTimeout(this._timeoutID);\n this._timeoutID = null;\n }\n }\n}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\n\nimport {NgbToast, NgbToastHeader} from './toast';\n\nexport {NgbToast, NgbToastHeader} from './toast';\nexport {NgbToastConfig, NgbToastOptions} from './toast-config';\n\n@NgModule({declarations: [NgbToast, NgbToastHeader], imports: [CommonModule], exports: [NgbToast, NgbToastHeader]})\nexport class NgbToastModule {\n}\n","import {Injectable} from '@angular/core';\nimport {PlacementArray} from '../util/positioning';\n\n/**\n * A configuration service for the [`NgbTooltip`](#/components/tooltip/api#NgbTooltip) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the tooltips used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbTooltipConfig {\n autoClose: boolean | 'inside' | 'outside' = true;\n placement: PlacementArray = 'auto';\n triggers = 'hover focus';\n container: string;\n disableTooltip = false;\n tooltipClass: string;\n openDelay = 0;\n closeDelay = 0;\n}\n","import {\n Component,\n Directive,\n Input,\n Output,\n EventEmitter,\n ChangeDetectionStrategy,\n OnInit,\n OnDestroy,\n Inject,\n Injector,\n Renderer2,\n ComponentRef,\n ElementRef,\n TemplateRef,\n ViewContainerRef,\n ComponentFactoryResolver,\n NgZone,\n ViewEncapsulation,\n ChangeDetectorRef,\n ApplicationRef\n} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\n\nimport {listenToTriggers} from '../util/triggers';\nimport {ngbAutoClose} from '../util/autoclose';\nimport {positionElements, PlacementArray} from '../util/positioning';\nimport {PopupService} from '../util/popup';\n\nimport {NgbTooltipConfig} from './tooltip-config';\n\nlet nextId = 0;\n\n@Component({\n selector: 'ngb-tooltip-window',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {'[class]': '\"tooltip show\" + (tooltipClass ? \" \" + tooltipClass : \"\")', 'role': 'tooltip', '[id]': 'id'},\n template: `
`,\n styleUrls: ['./tooltip.scss']\n})\nexport class NgbTooltipWindow {\n @Input() id: string;\n @Input() tooltipClass: string;\n}\n\n/**\n * A lightweight and extensible directive for fancy tooltip creation.\n */\n@Directive({selector: '[ngbTooltip]', exportAs: 'ngbTooltip'})\nexport class NgbTooltip implements OnInit, OnDestroy {\n /**\n * Indicates whether the tooltip should be closed on `Escape` key and inside/outside clicks:\n *\n * * `true` - closes on both outside and inside clicks as well as `Escape` presses\n * * `false` - disables the autoClose feature (NB: triggers still apply)\n * * `\"inside\"` - closes on inside clicks as well as Escape presses\n * * `\"outside\"` - closes on outside clicks (sometimes also achievable through triggers)\n * as well as `Escape` presses\n *\n * @since 3.0.0\n */\n @Input() autoClose: boolean | 'inside' | 'outside';\n\n /**\n * The preferred placement of the tooltip.\n *\n * Possible values are `\"top\"`, `\"top-left\"`, `\"top-right\"`, `\"bottom\"`, `\"bottom-left\"`,\n * `\"bottom-right\"`, `\"left\"`, `\"left-top\"`, `\"left-bottom\"`, `\"right\"`, `\"right-top\"`,\n * `\"right-bottom\"`\n *\n * Accepts an array of strings or a string with space separated possible values.\n *\n * The default order of preference is `\"auto\"` (same as the sequence above).\n *\n * Please see the [positioning overview](#/positioning) for more details.\n */\n @Input() placement: PlacementArray;\n\n /**\n * Specifies events that should trigger the tooltip.\n *\n * Supports a space separated list of event names.\n * For more details see the [triggers demo](#/components/tooltip/examples#triggers).\n */\n @Input() triggers: string;\n\n /**\n * A selector specifying the element the tooltip should be appended to.\n *\n * Currently only supports `\"body\"`.\n */\n @Input() container: string;\n\n /**\n * If `true`, tooltip is disabled and won't be displayed.\n *\n * @since 1.1.0\n */\n @Input() disableTooltip: boolean;\n\n /**\n * An optional class applied to the tooltip window element.\n *\n * @since 3.2.0\n */\n @Input() tooltipClass: string;\n\n /**\n * The opening delay in ms. Works only for \"non-manual\" opening triggers defined by the `triggers` input.\n *\n * @since 4.1.0\n */\n @Input() openDelay: number;\n\n /**\n * The closing delay in ms. Works only for \"non-manual\" opening triggers defined by the `triggers` input.\n *\n * @since 4.1.0\n */\n @Input() closeDelay: number;\n\n /**\n * An event emitted when the tooltip is shown. Contains no payload.\n */\n @Output() shown = new EventEmitter();\n /**\n * An event emitted when the popover is hidden. Contains no payload.\n */\n @Output() hidden = new EventEmitter();\n\n private _ngbTooltip: string | TemplateRef;\n private _ngbTooltipWindowId = `ngb-tooltip-${nextId++}`;\n private _popupService: PopupService;\n private _windowRef: ComponentRef;\n private _unregisterListenersFn;\n private _zoneSubscription: any;\n\n constructor(\n private _elementRef: ElementRef, private _renderer: Renderer2, injector: Injector,\n componentFactoryResolver: ComponentFactoryResolver, viewContainerRef: ViewContainerRef, config: NgbTooltipConfig,\n private _ngZone: NgZone, @Inject(DOCUMENT) private _document: any, private _changeDetector: ChangeDetectorRef,\n private _applicationRef: ApplicationRef) {\n this.autoClose = config.autoClose;\n this.placement = config.placement;\n this.triggers = config.triggers;\n this.container = config.container;\n this.disableTooltip = config.disableTooltip;\n this.tooltipClass = config.tooltipClass;\n this.openDelay = config.openDelay;\n this.closeDelay = config.closeDelay;\n this._popupService = new PopupService(\n NgbTooltipWindow, injector, viewContainerRef, _renderer, componentFactoryResolver, _applicationRef);\n\n this._zoneSubscription = _ngZone.onStable.subscribe(() => {\n if (this._windowRef) {\n positionElements(\n this._elementRef.nativeElement, this._windowRef.location.nativeElement, this.placement,\n this.container === 'body', 'bs-tooltip');\n }\n });\n }\n\n /**\n * The string content or a `TemplateRef` for the content to be displayed in the tooltip.\n *\n * If the content if falsy, the tooltip won't open.\n */\n @Input()\n set ngbTooltip(value: string | TemplateRef) {\n this._ngbTooltip = value;\n if (!value && this._windowRef) {\n this.close();\n }\n }\n\n get ngbTooltip() { return this._ngbTooltip; }\n\n /**\n * Opens the tooltip.\n *\n * This is considered to be a \"manual\" triggering.\n * The `context` is an optional value to be injected into the tooltip template when it is created.\n */\n open(context?: any) {\n if (!this._windowRef && this._ngbTooltip && !this.disableTooltip) {\n this._windowRef = this._popupService.open(this._ngbTooltip, context);\n this._windowRef.instance.tooltipClass = this.tooltipClass;\n this._windowRef.instance.id = this._ngbTooltipWindowId;\n\n this._renderer.setAttribute(this._elementRef.nativeElement, 'aria-describedby', this._ngbTooltipWindowId);\n\n if (this.container === 'body') {\n this._document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement);\n }\n\n // We need to detect changes, because we don't know where .open() might be called from.\n // Ex. opening tooltip from one of lifecycle hooks that run after the CD\n // (say from ngAfterViewInit) will result in 'ExpressionHasChanged' exception\n this._windowRef.changeDetectorRef.detectChanges();\n\n // We need to mark for check, because tooltip won't work inside the OnPush component.\n // Ex. when we use expression like `{{ tooltip.isOpen() : 'opened' : 'closed' }}`\n // inside the template of an OnPush component and we change the tooltip from\n // open -> closed, the expression in question won't be updated unless we explicitly\n // mark the parent component to be checked.\n this._windowRef.changeDetectorRef.markForCheck();\n\n ngbAutoClose(\n this._ngZone, this._document, this.autoClose, () => this.close(), this.hidden,\n [this._windowRef.location.nativeElement]);\n\n this.shown.emit();\n }\n }\n\n /**\n * Closes the tooltip.\n *\n * This is considered to be a \"manual\" triggering of the tooltip.\n */\n close(): void {\n if (this._windowRef != null) {\n this._renderer.removeAttribute(this._elementRef.nativeElement, 'aria-describedby');\n this._popupService.close();\n this._windowRef = null;\n this.hidden.emit();\n this._changeDetector.markForCheck();\n }\n }\n\n /**\n * Toggles the tooltip.\n *\n * This is considered to be a \"manual\" triggering of the tooltip.\n */\n toggle(): void {\n if (this._windowRef) {\n this.close();\n } else {\n this.open();\n }\n }\n\n /**\n * Returns `true`, if the popover is currently shown.\n */\n isOpen(): boolean { return this._windowRef != null; }\n\n ngOnInit() {\n this._unregisterListenersFn = listenToTriggers(\n this._renderer, this._elementRef.nativeElement, this.triggers, this.isOpen.bind(this), this.open.bind(this),\n this.close.bind(this), +this.openDelay, +this.closeDelay);\n }\n\n ngOnDestroy() {\n this.close();\n // This check is needed as it might happen that ngOnDestroy is called before ngOnInit\n // under certain conditions, see: https://github.com/ng-bootstrap/ng-bootstrap/issues/2199\n if (this._unregisterListenersFn) {\n this._unregisterListenersFn();\n }\n this._zoneSubscription.unsubscribe();\n }\n}\n","import {NgModule} from '@angular/core';\n\nimport {NgbTooltip, NgbTooltipWindow} from './tooltip';\n\nexport {NgbTooltipConfig} from './tooltip-config';\nexport {NgbTooltip} from './tooltip';\nexport {Placement} from '../util/positioning';\n\n@NgModule({declarations: [NgbTooltip, NgbTooltipWindow], exports: [NgbTooltip], entryComponents: [NgbTooltipWindow]})\nexport class NgbTooltipModule {\n}\n","import {Component, Input, OnChanges, ChangeDetectionStrategy, SimpleChanges, ViewEncapsulation} from '@angular/core';\nimport {regExpEscape, toString} from '../util/util';\n\n/**\n * A component that helps with text highlighting.\n *\n * If splits the `result` text into parts that contain the searched `term` and generates the HTML markup to simplify\n * highlighting:\n *\n * Ex. `result=\"Alaska\"` and `term=\"as\"` will produce `Alaska`.\n */\n@Component({\n selector: 'ngb-highlight',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `` +\n `{{part}}{{part}}` +\n ``, // template needs to be formatted in a certain way so we don't add empty text nodes\n styleUrls: ['./highlight.scss']\n})\nexport class NgbHighlight implements OnChanges {\n parts: string[];\n\n /**\n * The CSS class for `` elements wrapping the `term` inside the `result`.\n */\n @Input() highlightClass = 'ngb-highlight';\n\n /**\n * The text highlighting is added to.\n *\n * If the `term` is found inside this text, it will be highlighted.\n * If the `term` contains array then all the items from it will be highlighted inside the text.\n */\n @Input() result: string;\n\n /**\n * The term or array of terms to be highlighted.\n * Since version `v4.2.0` term could be a `string[]`\n */\n @Input() term: string | string[];\n\n ngOnChanges(changes: SimpleChanges) {\n const result = toString(this.result);\n\n const terms = Array.isArray(this.term) ? this.term : [this.term];\n const escapedTerms = terms.map(term => regExpEscape(toString(term))).filter(term => term);\n\n this.parts = escapedTerms.length ? result.split(new RegExp(`(${escapedTerms.join('|')})`, 'gmi')) : [result];\n }\n}\n","import {Component, Input, Output, EventEmitter, TemplateRef, OnInit} from '@angular/core';\n\nimport {toString} from '../util/util';\n\n/**\n * The context for the typeahead result template in case you want to override the default one.\n */\nexport interface ResultTemplateContext {\n /**\n * Your typeahead result item.\n */\n result: any;\n\n /**\n * Search term from the `` used to get current result.\n */\n term: string;\n}\n\n@Component({\n selector: 'ngb-typeahead-window',\n exportAs: 'ngbTypeaheadWindow',\n host: {'(mousedown)': '$event.preventDefault()', 'class': 'dropdown-menu show', 'role': 'listbox', '[id]': 'id'},\n template: `\n \n \n \n \n \n \n `\n})\nexport class NgbTypeaheadWindow implements OnInit {\n activeIdx = 0;\n\n /**\n * The id for the typeahead window. The id should be unique and the same\n * as the associated typeahead's id.\n */\n @Input() id: string;\n\n /**\n * Flag indicating if the first row should be active initially\n */\n @Input() focusFirst = true;\n\n /**\n * Typeahead match results to be displayed\n */\n @Input() results;\n\n /**\n * Search term used to get current results\n */\n @Input() term: string;\n\n /**\n * A function used to format a given result before display. This function should return a formatted string without any\n * HTML markup\n */\n @Input() formatter = toString;\n\n /**\n * A template to override a matching result default display\n */\n @Input() resultTemplate: TemplateRef;\n\n /**\n * Event raised when user selects a particular result row\n */\n @Output('select') selectEvent = new EventEmitter();\n\n @Output('activeChange') activeChangeEvent = new EventEmitter();\n\n hasActive() { return this.activeIdx > -1 && this.activeIdx < this.results.length; }\n\n getActive() { return this.results[this.activeIdx]; }\n\n markActive(activeIdx: number) {\n this.activeIdx = activeIdx;\n this._activeChanged();\n }\n\n next() {\n if (this.activeIdx === this.results.length - 1) {\n this.activeIdx = this.focusFirst ? (this.activeIdx + 1) % this.results.length : -1;\n } else {\n this.activeIdx++;\n }\n this._activeChanged();\n }\n\n prev() {\n if (this.activeIdx < 0) {\n this.activeIdx = this.results.length - 1;\n } else if (this.activeIdx === 0) {\n this.activeIdx = this.focusFirst ? this.results.length - 1 : -1;\n } else {\n this.activeIdx--;\n }\n this._activeChanged();\n }\n\n resetActive() {\n this.activeIdx = this.focusFirst ? 0 : -1;\n this._activeChanged();\n }\n\n select(item) { this.selectEvent.emit(item); }\n\n ngOnInit() { this.resetActive(); }\n\n private _activeChanged() {\n this.activeChangeEvent.emit(this.activeIdx >= 0 ? this.id + '-' + this.activeIdx : undefined);\n }\n}\n","import {Injectable, Inject, InjectionToken, OnDestroy} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\n\n\n\n// usefulness (and default value) of delay documented in Material's CDK\n// https://github.com/angular/material2/blob/6405da9b8e8532a7e5c854c920ee1815c275d734/src/cdk/a11y/live-announcer/live-announcer.ts#L50\nexport type ARIA_LIVE_DELAY_TYPE = number | null;\nexport const ARIA_LIVE_DELAY = new InjectionToken(\n 'live announcer delay', {providedIn: 'root', factory: ARIA_LIVE_DELAY_FACTORY});\nexport function ARIA_LIVE_DELAY_FACTORY(): number {\n return 100;\n}\n\n\nfunction getLiveElement(document: any, lazyCreate = false): HTMLElement | null {\n let element = document.body.querySelector('#ngb-live') as HTMLElement;\n\n if (element == null && lazyCreate) {\n element = document.createElement('div');\n\n element.setAttribute('id', 'ngb-live');\n element.setAttribute('aria-live', 'polite');\n element.setAttribute('aria-atomic', 'true');\n\n element.classList.add('sr-only');\n\n document.body.appendChild(element);\n }\n\n return element;\n}\n\n\n\n@Injectable({providedIn: 'root'})\nexport class Live implements OnDestroy {\n constructor(@Inject(DOCUMENT) private _document: any, @Inject(ARIA_LIVE_DELAY) private _delay: any) {}\n\n ngOnDestroy() {\n const element = getLiveElement(this._document);\n if (element) {\n element.parentElement.removeChild(element);\n }\n }\n\n say(message: string) {\n const element = getLiveElement(this._document, true);\n const delay = this._delay;\n\n element.textContent = '';\n const setText = () => element.textContent = message;\n if (delay === null) {\n setText();\n } else {\n setTimeout(setText, delay);\n }\n }\n}\n","import {Injectable} from '@angular/core';\nimport {PlacementArray} from '../util/positioning';\n\n/**\n * A configuration service for the [`NgbTypeahead`](#/components/typeahead/api#NgbTypeahead) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the typeaheads used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbTypeaheadConfig {\n container;\n editable = true;\n focusFirst = true;\n showHint = false;\n placement: PlacementArray = ['bottom-left', 'bottom-right', 'top-left', 'top-right'];\n}\n","import {\n ChangeDetectorRef,\n ComponentFactoryResolver,\n ComponentRef,\n Directive,\n ElementRef,\n EventEmitter,\n forwardRef,\n Inject,\n Injector,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Output,\n Renderer2,\n TemplateRef,\n ViewContainerRef,\n ApplicationRef\n} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {DOCUMENT} from '@angular/common';\nimport {BehaviorSubject, fromEvent, Observable, Subject, Subscription} from 'rxjs';\nimport {map, switchMap, tap} from 'rxjs/operators';\n\nimport {Live} from '../util/accessibility/live';\nimport {ngbAutoClose} from '../util/autoclose';\nimport {Key} from '../util/key';\nimport {PopupService} from '../util/popup';\nimport {PlacementArray, positionElements} from '../util/positioning';\nimport {isDefined, toString} from '../util/util';\n\nimport {NgbTypeaheadConfig} from './typeahead-config';\nimport {NgbTypeaheadWindow, ResultTemplateContext} from './typeahead-window';\n\n\nconst NGB_TYPEAHEAD_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgbTypeahead),\n multi: true\n};\n\n/**\n * An event emitted right before an item is selected from the result list.\n */\nexport interface NgbTypeaheadSelectItemEvent {\n /**\n * The item from the result list about to be selected.\n */\n item: any;\n\n /**\n * Calling this function will prevent item selection from happening.\n */\n preventDefault: () => void;\n}\n\nlet nextWindowId = 0;\n\n/**\n * A directive providing a simple way of creating powerful typeaheads from any text input.\n */\n@Directive({\n selector: 'input[ngbTypeahead]',\n exportAs: 'ngbTypeahead',\n host: {\n '(blur)': 'handleBlur()',\n '[class.open]': 'isPopupOpen()',\n '(keydown)': 'handleKeyDown($event)',\n '[autocomplete]': 'autocomplete',\n 'autocapitalize': 'off',\n 'autocorrect': 'off',\n 'role': 'combobox',\n 'aria-multiline': 'false',\n '[attr.aria-autocomplete]': 'showHint ? \"both\" : \"list\"',\n '[attr.aria-activedescendant]': 'activeDescendant',\n '[attr.aria-owns]': 'isPopupOpen() ? popupId : null',\n '[attr.aria-expanded]': 'isPopupOpen()'\n },\n providers: [NGB_TYPEAHEAD_VALUE_ACCESSOR]\n})\nexport class NgbTypeahead implements ControlValueAccessor,\n OnInit, OnDestroy {\n private _popupService: PopupService;\n private _subscription: Subscription;\n private _closed$ = new Subject();\n private _inputValueBackup: string;\n private _valueChanges: Observable;\n private _resubscribeTypeahead: BehaviorSubject;\n private _windowRef: ComponentRef;\n private _zoneSubscription: any;\n\n /**\n * The value for the `autocomplete` attribute for the `` element.\n *\n * Defaults to `\"off\"` to disable the native browser autocomplete, but you can override it if necessary.\n *\n * @since 2.1.0\n */\n @Input() autocomplete = 'off';\n\n /**\n * A selector specifying the element the typeahead popup will be appended to.\n *\n * Currently only supports `\"body\"`.\n */\n @Input() container: string;\n\n /**\n * If `true`, model values will not be restricted only to items selected from the popup.\n */\n @Input() editable: boolean;\n\n /**\n * If `true`, the first item in the result list will always stay focused while typing.\n */\n @Input() focusFirst: boolean;\n\n /**\n * The function that converts an item from the result list to a `string` to display in the `` field.\n *\n * It is called when the user selects something in the popup or the model value changes, so the input needs to\n * be updated.\n */\n @Input() inputFormatter: (item: any) => string;\n\n /**\n * The function that converts a stream of text values from the `` element to the stream of the array of items\n * to display in the typeahead popup.\n *\n * If the resulting observable emits a non-empty array - the popup will be shown. If it emits an empty array - the\n * popup will be closed.\n *\n * See the [basic example](#/components/typeahead/examples#basic) for more details.\n *\n * Note that the `this` argument is `undefined` so you need to explicitly bind it to a desired \"this\" target.\n */\n @Input() ngbTypeahead: (text: Observable) => Observable;\n\n /**\n * The function that converts an item from the result list to a `string` to display in the popup.\n *\n * Must be provided, if your `ngbTypeahead` returns something other than `Observable`.\n *\n * Alternatively for more complex markup in the popup you should use `resultTemplate`.\n */\n @Input() resultFormatter: (item: any) => string;\n\n /**\n * The template to override the way resulting items are displayed in the popup.\n *\n * See the [ResultTemplateContext](#/components/typeahead/api#ResultTemplateContext) for the template context.\n *\n * Also see the [template for results demo](#/components/typeahead/examples#template) for more details.\n */\n @Input() resultTemplate: TemplateRef;\n\n /**\n * If `true`, will show the hint in the `` when an item in the result list matches.\n */\n @Input() showHint: boolean;\n\n /**\n * The preferred placement of the typeahead.\n *\n * Possible values are `\"top\"`, `\"top-left\"`, `\"top-right\"`, `\"bottom\"`, `\"bottom-left\"`,\n * `\"bottom-right\"`, `\"left\"`, `\"left-top\"`, `\"left-bottom\"`, `\"right\"`, `\"right-top\"`,\n * `\"right-bottom\"`\n *\n * Accepts an array of strings or a string with space separated possible values.\n *\n * The default order of preference is `\"bottom-left bottom-right top-left top-right\"`\n *\n * Please see the [positioning overview](#/positioning) for more details.\n */\n @Input() placement: PlacementArray = 'bottom-left';\n\n /**\n * An event emitted right before an item is selected from the result list.\n *\n * Event payload is of type [`NgbTypeaheadSelectItemEvent`](#/components/typeahead/api#NgbTypeaheadSelectItemEvent).\n */\n @Output() selectItem = new EventEmitter();\n\n activeDescendant: string;\n popupId = `ngb-typeahead-${nextWindowId++}`;\n\n private _onTouched = () => {};\n private _onChange = (_: any) => {};\n\n constructor(\n private _elementRef: ElementRef, private _viewContainerRef: ViewContainerRef,\n private _renderer: Renderer2, private _injector: Injector, componentFactoryResolver: ComponentFactoryResolver,\n config: NgbTypeaheadConfig, ngZone: NgZone, private _live: Live, @Inject(DOCUMENT) private _document: any,\n private _ngZone: NgZone, private _changeDetector: ChangeDetectorRef, private _applicationRef: ApplicationRef) {\n this.container = config.container;\n this.editable = config.editable;\n this.focusFirst = config.focusFirst;\n this.showHint = config.showHint;\n this.placement = config.placement;\n\n this._valueChanges = fromEvent(_elementRef.nativeElement, 'input')\n .pipe(map($event => ($event.target as HTMLInputElement).value));\n\n this._resubscribeTypeahead = new BehaviorSubject(null);\n\n this._popupService = new PopupService(\n NgbTypeaheadWindow, _injector, _viewContainerRef, _renderer, componentFactoryResolver, _applicationRef);\n\n this._zoneSubscription = ngZone.onStable.subscribe(() => {\n if (this.isPopupOpen()) {\n positionElements(\n this._elementRef.nativeElement, this._windowRef.location.nativeElement, this.placement,\n this.container === 'body');\n }\n });\n }\n\n ngOnInit(): void {\n const inputValues$ = this._valueChanges.pipe(tap(value => {\n this._inputValueBackup = this.showHint ? value : null;\n if (this.editable) {\n this._onChange(value);\n }\n }));\n const results$ = inputValues$.pipe(this.ngbTypeahead);\n const processedResults$ = results$.pipe(tap(() => {\n if (!this.editable) {\n this._onChange(undefined);\n }\n }));\n const userInput$ = this._resubscribeTypeahead.pipe(switchMap(() => processedResults$));\n this._subscription = this._subscribeToUserInput(userInput$);\n }\n\n ngOnDestroy(): void {\n this._closePopup();\n this._unsubscribeFromUserInput();\n this._zoneSubscription.unsubscribe();\n }\n\n registerOnChange(fn: (value: any) => any): void { this._onChange = fn; }\n\n registerOnTouched(fn: () => any): void { this._onTouched = fn; }\n\n writeValue(value) {\n this._writeInputValue(this._formatItemForInput(value));\n if (this.showHint) {\n this._inputValueBackup = value;\n }\n }\n\n setDisabledState(isDisabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n\n /**\n * Dismisses typeahead popup window\n */\n dismissPopup() {\n if (this.isPopupOpen()) {\n this._resubscribeTypeahead.next(null);\n this._closePopup();\n if (this.showHint && this._inputValueBackup !== null) {\n this._writeInputValue(this._inputValueBackup);\n }\n this._changeDetector.markForCheck();\n }\n }\n\n /**\n * Returns true if the typeahead popup window is displayed\n */\n isPopupOpen() { return this._windowRef != null; }\n\n handleBlur() {\n this._resubscribeTypeahead.next(null);\n this._onTouched();\n }\n\n handleKeyDown(event: KeyboardEvent) {\n if (!this.isPopupOpen()) {\n return;\n }\n\n // tslint:disable-next-line:deprecation\n switch (event.which) {\n case Key.ArrowDown:\n event.preventDefault();\n this._windowRef.instance.next();\n this._showHint();\n break;\n case Key.ArrowUp:\n event.preventDefault();\n this._windowRef.instance.prev();\n this._showHint();\n break;\n case Key.Enter:\n case Key.Tab:\n const result = this._windowRef.instance.getActive();\n if (isDefined(result)) {\n event.preventDefault();\n event.stopPropagation();\n this._selectResult(result);\n }\n this._closePopup();\n break;\n }\n }\n\n private _openPopup() {\n if (!this.isPopupOpen()) {\n this._inputValueBackup = this._elementRef.nativeElement.value;\n this._windowRef = this._popupService.open();\n this._windowRef.instance.id = this.popupId;\n this._windowRef.instance.selectEvent.subscribe((result: any) => this._selectResultClosePopup(result));\n this._windowRef.instance.activeChangeEvent.subscribe((activeId: string) => this.activeDescendant = activeId);\n\n if (this.container === 'body') {\n window.document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement);\n }\n\n this._changeDetector.markForCheck();\n\n ngbAutoClose(\n this._ngZone, this._document, 'outside', () => this.dismissPopup(), this._closed$,\n [this._elementRef.nativeElement, this._windowRef.location.nativeElement]);\n }\n }\n\n private _closePopup() {\n this._closed$.next();\n this._popupService.close();\n this._windowRef = null;\n this.activeDescendant = undefined;\n }\n\n private _selectResult(result: any) {\n let defaultPrevented = false;\n this.selectItem.emit({item: result, preventDefault: () => { defaultPrevented = true; }});\n this._resubscribeTypeahead.next(null);\n\n if (!defaultPrevented) {\n this.writeValue(result);\n this._onChange(result);\n }\n }\n\n private _selectResultClosePopup(result: any) {\n this._selectResult(result);\n this._closePopup();\n }\n\n private _showHint() {\n if (this.showHint && this._windowRef.instance.hasActive() && this._inputValueBackup != null) {\n const userInputLowerCase = this._inputValueBackup.toLowerCase();\n const formattedVal = this._formatItemForInput(this._windowRef.instance.getActive());\n\n if (userInputLowerCase === formattedVal.substr(0, this._inputValueBackup.length).toLowerCase()) {\n this._writeInputValue(this._inputValueBackup + formattedVal.substr(this._inputValueBackup.length));\n this._elementRef.nativeElement['setSelectionRange'].apply(\n this._elementRef.nativeElement, [this._inputValueBackup.length, formattedVal.length]);\n } else {\n this._writeInputValue(formattedVal);\n }\n }\n }\n\n private _formatItemForInput(item: any): string {\n return item != null && this.inputFormatter ? this.inputFormatter(item) : toString(item);\n }\n\n private _writeInputValue(value: string): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', toString(value));\n }\n\n private _subscribeToUserInput(userInput$: Observable): Subscription {\n return userInput$.subscribe((results) => {\n if (!results || results.length === 0) {\n this._closePopup();\n } else {\n this._openPopup();\n this._windowRef.instance.focusFirst = this.focusFirst;\n this._windowRef.instance.results = results;\n this._windowRef.instance.term = this._elementRef.nativeElement.value;\n if (this.resultFormatter) {\n this._windowRef.instance.formatter = this.resultFormatter;\n }\n if (this.resultTemplate) {\n this._windowRef.instance.resultTemplate = this.resultTemplate;\n }\n this._windowRef.instance.resetActive();\n\n // The observable stream we are subscribing to might have async steps\n // and if a component containing typeahead is using the OnPush strategy\n // the change detection turn wouldn't be invoked automatically.\n this._windowRef.changeDetectorRef.detectChanges();\n\n this._showHint();\n }\n\n // live announcer\n const count = results ? results.length : 0;\n this._live.say(count === 0 ? 'No results available' : `${count} result${count === 1 ? '' : 's'} available`);\n });\n }\n\n private _unsubscribeFromUserInput() {\n if (this._subscription) {\n this._subscription.unsubscribe();\n }\n this._subscription = null;\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\nimport {NgbHighlight} from './highlight';\nimport {NgbTypeaheadWindow} from './typeahead-window';\nimport {NgbTypeahead} from './typeahead';\n\nexport {NgbHighlight} from './highlight';\nexport {NgbTypeaheadWindow} from './typeahead-window';\nexport {NgbTypeaheadConfig} from './typeahead-config';\nexport {NgbTypeahead, NgbTypeaheadSelectItemEvent} from './typeahead';\n\n@NgModule({\n declarations: [NgbTypeahead, NgbHighlight, NgbTypeaheadWindow],\n exports: [NgbTypeahead, NgbHighlight],\n imports: [CommonModule],\n entryComponents: [NgbTypeaheadWindow]\n})\nexport class NgbTypeaheadModule {\n}\n","import {NgModule} from '@angular/core';\n\nimport {SbCardModule} from './card/card.module';\nimport {NgbAccordionModule} from './accordion/accordion.module';\nimport {NgbAlertModule} from './alert/alert.module';\nimport {NgbButtonsModule} from './buttons/buttons.module';\nimport {NgbCarouselModule} from './carousel/carousel.module';\nimport {NgbCollapseModule} from './collapse/collapse.module';\nimport {NgbDatepickerModule} from './datepicker/datepicker.module';\nimport {NgbDropdownModule} from './dropdown/dropdown.module';\nimport {NgbModalModule} from './modal/modal.module';\nimport {NgbPaginationModule} from './pagination/pagination.module';\nimport {NgbPopoverModule} from './popover/popover.module';\nimport {NgbProgressbarModule} from './progressbar/progressbar.module';\nimport {NgbRatingModule} from './rating/rating.module';\nimport {NgbTabsetModule} from './tabset/tabset.module';\nimport {NgbTimepickerModule} from './timepicker/timepicker.module';\nimport {NgbToastModule} from './toast/toast.module';\nimport {NgbTooltipModule} from './tooltip/tooltip.module';\nimport {NgbTypeaheadModule} from './typeahead/typeahead.module';\n\n\n\nexport {\n NgbAccordion,\n NgbAccordionConfig,\n NgbAccordionModule,\n NgbPanel,\n NgbPanelChangeEvent,\n NgbPanelContent,\n NgbPanelHeader,\n NgbPanelHeaderContext,\n NgbPanelTitle,\n NgbPanelToggle\n} from './accordion/accordion.module';\nexport {SbCard, SbCardConfig, SbCardModule} from './card/card.module';\nexport {NgbAlert, NgbAlertConfig, NgbAlertModule} from './alert/alert.module';\nexport {NgbButtonLabel, NgbButtonsModule, NgbCheckBox, NgbRadio, NgbRadioGroup} from './buttons/buttons.module';\nexport {\n NgbCarousel,\n NgbCarouselConfig,\n NgbCarouselModule,\n NgbSlide,\n NgbSlideEvent,\n NgbSlideEventDirection,\n NgbSlideEventSource\n} from './carousel/carousel.module';\nexport {NgbCollapse, NgbCollapseModule} from './collapse/collapse.module';\nexport {\n NgbCalendar,\n NgbCalendarGregorian,\n NgbCalendarHebrew,\n NgbCalendarIslamicCivil,\n NgbCalendarIslamicUmalqura,\n NgbCalendarPersian,\n NgbDate,\n NgbDateAdapter,\n NgbDateNativeAdapter,\n NgbDateNativeUTCAdapter,\n NgbDateParserFormatter,\n NgbDatepicker,\n NgbDatepickerConfig,\n NgbDatepickerI18n,\n NgbDatepickerI18nHebrew,\n NgbDatepickerModule,\n NgbDatepickerNavigateEvent,\n NgbDateStruct,\n NgbInputDatepicker,\n NgbPeriod\n} from './datepicker/datepicker.module';\nexport {\n NgbDropdown,\n NgbDropdownAnchor,\n NgbDropdownConfig,\n NgbDropdownItem,\n NgbDropdownMenu,\n NgbDropdownModule,\n NgbDropdownToggle\n} from './dropdown/dropdown.module';\nexport {\n ModalDismissReasons,\n NgbActiveModal,\n NgbModal,\n NgbModalConfig,\n NgbModalModule,\n NgbModalOptions,\n NgbModalRef\n} from './modal/modal.module';\nexport {\n NgbPagination,\n NgbPaginationConfig,\n NgbPaginationEllipsis,\n NgbPaginationFirst,\n NgbPaginationLast,\n NgbPaginationModule,\n NgbPaginationNext,\n NgbPaginationNumber,\n NgbPaginationPrevious\n} from './pagination/pagination.module';\nexport {NgbPopover, NgbPopoverConfig, NgbPopoverModule} from './popover/popover.module';\nexport {NgbProgressbar, NgbProgressbarConfig, NgbProgressbarModule} from './progressbar/progressbar.module';\nexport {NgbRating, NgbRatingConfig, NgbRatingModule} from './rating/rating.module';\nexport {\n NgbTab,\n NgbTabChangeEvent,\n NgbTabContent,\n NgbTabset,\n NgbTabsetConfig,\n NgbTabsetModule,\n NgbTabTitle\n} from './tabset/tabset.module';\nexport {\n NgbTimeAdapter,\n NgbTimepickerI18n,\n NgbTimepicker,\n NgbTimepickerConfig,\n NgbTimepickerModule,\n NgbTimeStruct\n} from './timepicker/timepicker.module';\nexport {NgbToast, NgbToastConfig, NgbToastHeader, NgbToastModule} from './toast/toast.module';\nexport {NgbTooltip, NgbTooltipConfig, NgbTooltipModule} from './tooltip/tooltip.module';\nexport {\n NgbHighlight,\n NgbTypeahead,\n NgbTypeaheadConfig,\n NgbTypeaheadModule,\n NgbTypeaheadSelectItemEvent\n} from './typeahead/typeahead.module';\nexport {Placement} from './util/positioning';\n\n\nconst NGB_MODULES = [\n SbCardModule, NgbAccordionModule, NgbAlertModule, NgbButtonsModule, NgbCarouselModule, NgbCollapseModule, NgbDatepickerModule,\n NgbDropdownModule, NgbModalModule, NgbPaginationModule, NgbPopoverModule, NgbProgressbarModule, NgbRatingModule,\n NgbTabsetModule, NgbTimepickerModule, NgbToastModule, NgbTooltipModule, NgbTypeaheadModule\n];\n\n@NgModule({imports: NGB_MODULES, exports: NGB_MODULES})\nexport class NgbModule {\n}\n"],"names":["nextId","NGB_DATEPICKER_VALUE_ACCESSOR","mod","GREGORIAN_EPOCH","isGregorianLeapYear","fromGregorian","toGregorian"],"mappings":"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AAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc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"} \ No newline at end of file diff --git a/dist/sunbird-ui-components/fesm5/sunbird-ui-components.js b/dist/sunbird-ui-components/fesm5/sunbird-ui-components.js new file mode 100644 index 0000000..da003f0 --- /dev/null +++ b/dist/sunbird-ui-components/fesm5/sunbird-ui-components.js @@ -0,0 +1,12647 @@ +import { ɵɵdefineInjectable, Injectable, Component, ChangeDetectionStrategy, ViewEncapsulation, Renderer2, ElementRef, Input, Output, EventEmitter, NgModule, Directive, ContentChildren, Optional, Host, TemplateRef, forwardRef, ChangeDetectorRef, Inject, PLATFORM_ID, NgZone, HostListener, LOCALE_ID, ɵɵinject, ViewChild, ViewContainerRef, ComponentFactoryResolver, ContentChild, Injector, ApplicationRef, RendererFactory2, INJECTOR, Attribute, InjectionToken } from '@angular/core'; +import { CommonModule, isPlatformBrowser, getLocaleDayNames, FormStyle, TranslationWidth, getLocaleMonthNames, formatDate, DOCUMENT, getLocaleDayPeriods } from '@angular/common'; +import { NG_VALUE_ACCESSOR, NG_VALIDATORS, FormsModule } from '@angular/forms'; +import { __read, __extends, __assign, __values } from 'tslib'; +import { combineLatest, timer, NEVER, Subject, BehaviorSubject, fromEvent, merge, race, Observable } from 'rxjs'; +import { map, startWith, distinctUntilChanged, switchMap, takeUntil, filter, take, withLatestFrom, delay, share, tap } from 'rxjs/operators'; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * A configuration service for the [SbCard](#/components/alert/api#SbCard) component. + * + * You can inject this service, typically in your root component, and customize its properties + * to provide default values for all alerts used in the application. + */ +var SbCardConfig = /** @class */ (function () { + function SbCardConfig() { + this.dismissible = true; + this.type = 'warning'; + } + SbCardConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ SbCardConfig.ngInjectableDef = ɵɵdefineInjectable({ factory: function SbCardConfig_Factory() { return new SbCardConfig(); }, token: SbCardConfig, providedIn: "root" }); + return SbCardConfig; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * Alert is a component to provide contextual feedback messages for user. + * + * It supports several alert types and can be dismissed. + */ +var SbCard = /** @class */ (function () { + function SbCard(config, _renderer, _element) { + this._renderer = _renderer; + this._element = _element; + /** + * An event emitted when the close button is clicked. It has no payload and only relevant for dismissible alerts. + */ + this.close = new EventEmitter(); + this.dismissible = config.dismissible; + this.type = config.type; + } + /** + * @return {?} + */ + SbCard.prototype.closeHandler = /** + * @return {?} + */ + function () { this.close.emit(null); }; + /** + * @param {?} changes + * @return {?} + */ + SbCard.prototype.ngOnChanges = /** + * @param {?} changes + * @return {?} + */ + function (changes) { + /** @type {?} */ + var typeChange = changes['type']; + if (typeChange && !typeChange.firstChange) { + this._renderer.removeClass(this._element.nativeElement, "alert-" + typeChange.previousValue); + this._renderer.addClass(this._element.nativeElement, "alert-" + typeChange.currentValue); + } + }; + /** + * @return {?} + */ + SbCard.prototype.ngOnInit = /** + * @return {?} + */ + function () { this._renderer.addClass(this._element.nativeElement, "alert-" + this.type); }; + SbCard.decorators = [ + { type: Component, args: [{ + selector: 'sb-card', + changeDetection: ChangeDetectionStrategy.OnPush, + encapsulation: ViewEncapsulation.None, + host: { 'role': 'alert', 'class': 'alert', '[class.alert-dismissible]': 'dismissible' }, + template: "\n \n \n ", + styles: ["ngb-alert{display:block}"] + }] } + ]; + /** @nocollapse */ + SbCard.ctorParameters = function () { return [ + { type: SbCardConfig }, + { type: Renderer2 }, + { type: ElementRef } + ]; }; + SbCard.propDecorators = { + dismissible: [{ type: Input }], + type: [{ type: Input }], + close: [{ type: Output }] + }; + return SbCard; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +var SbCardModule = /** @class */ (function () { + function SbCardModule() { + } + SbCardModule.decorators = [ + { type: NgModule, args: [{ declarations: [SbCard], exports: [SbCard], imports: [CommonModule], entryComponents: [SbCard] },] } + ]; + return SbCardModule; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * @param {?} value + * @return {?} + */ +function toInteger(value) { + return parseInt("" + value, 10); +} +/** + * @param {?} value + * @return {?} + */ +function toString(value) { + return (value !== undefined && value !== null) ? "" + value : ''; +} +/** + * @param {?} value + * @param {?} max + * @param {?=} min + * @return {?} + */ +function getValueInRange(value, max, min) { + if (min === void 0) { min = 0; } + return Math.max(Math.min(value, max), min); +} +/** + * @param {?} value + * @return {?} + */ +function isString(value) { + return typeof value === 'string'; +} +/** + * @param {?} value + * @return {?} + */ +function isNumber(value) { + return !isNaN(toInteger(value)); +} +/** + * @param {?} value + * @return {?} + */ +function isInteger(value) { + return typeof value === 'number' && isFinite(value) && Math.floor(value) === value; +} +/** + * @param {?} value + * @return {?} + */ +function isDefined(value) { + return value !== undefined && value !== null; +} +/** + * @param {?} value + * @return {?} + */ +function padNumber(value) { + if (isNumber(value)) { + return ("0" + value).slice(-2); + } + else { + return ''; + } +} +/** + * @param {?} text + * @return {?} + */ +function regExpEscape(text) { + return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); +} +/** + * @param {?} element + * @param {?} className + * @return {?} + */ +function hasClassName(element, className) { + return element && element.className && element.className.split && + element.className.split(/\s+/).indexOf(className) >= 0; +} +if (typeof Element !== 'undefined' && !Element.prototype.closest) { + // Polyfill for ie10+ + if (!Element.prototype.matches) { + // IE uses the non-standard name: msMatchesSelector + Element.prototype.matches = ((/** @type {?} */ (Element.prototype))).msMatchesSelector || Element.prototype.webkitMatchesSelector; + } + Element.prototype.closest = (/** + * @param {?} s + * @return {?} + */ + function (s) { + /** @type {?} */ + var el = this; + if (!document.documentElement.contains(el)) { + return null; + } + do { + if (el.matches(s)) { + return el; + } + el = el.parentElement || el.parentNode; + } while (el !== null && el.nodeType === 1); + return null; + }); +} +/** + * @param {?} element + * @param {?} selector + * @return {?} + */ +function closest(element, selector) { + if (!selector) { + return null; + } + return element.closest(selector); +} + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * A configuration service for the [NgbAccordion](#/components/accordion/api#NgbAccordion) component. + * + * You can inject this service, typically in your root component, and customize its properties + * to provide default values for all accordions used in the application. + */ +var NgbAccordionConfig = /** @class */ (function () { + function NgbAccordionConfig() { + this.closeOthers = false; + } + NgbAccordionConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ NgbAccordionConfig.ngInjectableDef = ɵɵdefineInjectable({ factory: function NgbAccordionConfig_Factory() { return new NgbAccordionConfig(); }, token: NgbAccordionConfig, providedIn: "root" }); + return NgbAccordionConfig; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @type {?} */ +var nextId = 0; +/** + * A directive that wraps an accordion panel header with any HTML markup and a toggling button + * marked with [`NgbPanelToggle`](#/components/accordion/api#NgbPanelToggle). + * See the [header customization demo](#/components/accordion/examples#header) for more details. + * + * You can also use [`NgbPanelTitle`](#/components/accordion/api#NgbPanelTitle) to customize only the panel title. + * + * \@since 4.1.0 + */ +var NgbPanelHeader = /** @class */ (function () { + function NgbPanelHeader(templateRef) { + this.templateRef = templateRef; + } + NgbPanelHeader.decorators = [ + { type: Directive, args: [{ selector: 'ng-template[ngbPanelHeader]' },] } + ]; + /** @nocollapse */ + NgbPanelHeader.ctorParameters = function () { return [ + { type: TemplateRef } + ]; }; + return NgbPanelHeader; +}()); +/** + * A directive that wraps only the panel title with HTML markup inside. + * + * You can also use [`NgbPanelHeader`](#/components/accordion/api#NgbPanelHeader) to customize the full panel header. + */ +var NgbPanelTitle = /** @class */ (function () { + function NgbPanelTitle(templateRef) { + this.templateRef = templateRef; + } + NgbPanelTitle.decorators = [ + { type: Directive, args: [{ selector: 'ng-template[ngbPanelTitle]' },] } + ]; + /** @nocollapse */ + NgbPanelTitle.ctorParameters = function () { return [ + { type: TemplateRef } + ]; }; + return NgbPanelTitle; +}()); +/** + * A directive that wraps the accordion panel content. + */ +var NgbPanelContent = /** @class */ (function () { + function NgbPanelContent(templateRef) { + this.templateRef = templateRef; + } + NgbPanelContent.decorators = [ + { type: Directive, args: [{ selector: 'ng-template[ngbPanelContent]' },] } + ]; + /** @nocollapse */ + NgbPanelContent.ctorParameters = function () { return [ + { type: TemplateRef } + ]; }; + return NgbPanelContent; +}()); +/** + * A directive that wraps an individual accordion panel with title and collapsible content. + */ +var NgbPanel = /** @class */ (function () { + function NgbPanel() { + /** + * If `true`, the panel is disabled an can't be toggled. + */ + this.disabled = false; + /** + * An optional id for the panel that must be unique on the page. + * + * If not provided, it will be auto-generated in the `ngb-panel-xxx` format. + */ + this.id = "ngb-panel-" + nextId++; + this.isOpen = false; + } + /** + * @return {?} + */ + NgbPanel.prototype.ngAfterContentChecked = /** + * @return {?} + */ + function () { + // We are using @ContentChildren instead of @ContentChild as in the Angular version being used + // only @ContentChildren allows us to specify the {descendants: false} option. + // Without {descendants: false} we are hitting bugs described in: + // https://github.com/ng-bootstrap/ng-bootstrap/issues/2240 + this.titleTpl = this.titleTpls.first; + this.headerTpl = this.headerTpls.first; + this.contentTpl = this.contentTpls.first; + }; + NgbPanel.decorators = [ + { type: Directive, args: [{ selector: 'ngb-panel' },] } + ]; + NgbPanel.propDecorators = { + disabled: [{ type: Input }], + id: [{ type: Input }], + title: [{ type: Input }], + type: [{ type: Input }], + titleTpls: [{ type: ContentChildren, args: [NgbPanelTitle, { descendants: false },] }], + headerTpls: [{ type: ContentChildren, args: [NgbPanelHeader, { descendants: false },] }], + contentTpls: [{ type: ContentChildren, args: [NgbPanelContent, { descendants: false },] }] + }; + return NgbPanel; +}()); +/** + * Accordion is a collection of collapsible panels (bootstrap cards). + * + * It can ensure only one panel is opened at a time and allows to customize panel + * headers. + */ +var NgbAccordion = /** @class */ (function () { + function NgbAccordion(config) { + /** + * An array or comma separated strings of panel ids that should be opened **initially**. + * + * For subsequent changes use methods like `expand()`, `collapse()`, etc. and + * the `(panelChange)` event. + */ + this.activeIds = []; + /** + * If `true`, panel content will be detached from DOM and not simply hidden when the panel is collapsed. + */ + this.destroyOnHide = true; + /** + * Event emitted right before the panel toggle happens. + * + * See [NgbPanelChangeEvent](#/components/accordion/api#NgbPanelChangeEvent) for payload details. + */ + this.panelChange = new EventEmitter(); + this.type = config.type; + this.closeOtherPanels = config.closeOthers; + } + /** + * Checks if a panel with a given id is expanded. + */ + /** + * Checks if a panel with a given id is expanded. + * @param {?} panelId + * @return {?} + */ + NgbAccordion.prototype.isExpanded = /** + * Checks if a panel with a given id is expanded. + * @param {?} panelId + * @return {?} + */ + function (panelId) { return this.activeIds.indexOf(panelId) > -1; }; + /** + * Expands a panel with a given id. + * + * Has no effect if the panel is already expanded or disabled. + */ + /** + * Expands a panel with a given id. + * + * Has no effect if the panel is already expanded or disabled. + * @param {?} panelId + * @return {?} + */ + NgbAccordion.prototype.expand = /** + * Expands a panel with a given id. + * + * Has no effect if the panel is already expanded or disabled. + * @param {?} panelId + * @return {?} + */ + function (panelId) { this._changeOpenState(this._findPanelById(panelId), true); }; + /** + * Expands all panels, if `[closeOthers]` is `false`. + * + * If `[closeOthers]` is `true`, it will expand the first panel, unless there is already a panel opened. + */ + /** + * Expands all panels, if `[closeOthers]` is `false`. + * + * If `[closeOthers]` is `true`, it will expand the first panel, unless there is already a panel opened. + * @return {?} + */ + NgbAccordion.prototype.expandAll = /** + * Expands all panels, if `[closeOthers]` is `false`. + * + * If `[closeOthers]` is `true`, it will expand the first panel, unless there is already a panel opened. + * @return {?} + */ + function () { + var _this = this; + if (this.closeOtherPanels) { + if (this.activeIds.length === 0 && this.panels.length) { + this._changeOpenState(this.panels.first, true); + } + } + else { + this.panels.forEach((/** + * @param {?} panel + * @return {?} + */ + function (panel) { return _this._changeOpenState(panel, true); })); + } + }; + /** + * Collapses a panel with the given id. + * + * Has no effect if the panel is already collapsed or disabled. + */ + /** + * Collapses a panel with the given id. + * + * Has no effect if the panel is already collapsed or disabled. + * @param {?} panelId + * @return {?} + */ + NgbAccordion.prototype.collapse = /** + * Collapses a panel with the given id. + * + * Has no effect if the panel is already collapsed or disabled. + * @param {?} panelId + * @return {?} + */ + function (panelId) { this._changeOpenState(this._findPanelById(panelId), false); }; + /** + * Collapses all opened panels. + */ + /** + * Collapses all opened panels. + * @return {?} + */ + NgbAccordion.prototype.collapseAll = /** + * Collapses all opened panels. + * @return {?} + */ + function () { + var _this = this; + this.panels.forEach((/** + * @param {?} panel + * @return {?} + */ + function (panel) { _this._changeOpenState(panel, false); })); + }; + /** + * Toggles a panel with the given id. + * + * Has no effect if the panel is disabled. + */ + /** + * Toggles a panel with the given id. + * + * Has no effect if the panel is disabled. + * @param {?} panelId + * @return {?} + */ + NgbAccordion.prototype.toggle = /** + * Toggles a panel with the given id. + * + * Has no effect if the panel is disabled. + * @param {?} panelId + * @return {?} + */ + function (panelId) { + /** @type {?} */ + var panel = this._findPanelById(panelId); + if (panel) { + this._changeOpenState(panel, !panel.isOpen); + } + }; + /** + * @return {?} + */ + NgbAccordion.prototype.ngAfterContentChecked = /** + * @return {?} + */ + function () { + var _this = this; + // active id updates + if (isString(this.activeIds)) { + this.activeIds = this.activeIds.split(/\s*,\s*/); + } + // update panels open states + this.panels.forEach((/** + * @param {?} panel + * @return {?} + */ + function (panel) { return panel.isOpen = !panel.disabled && _this.activeIds.indexOf(panel.id) > -1; })); + // closeOthers updates + if (this.activeIds.length > 1 && this.closeOtherPanels) { + this._closeOthers(this.activeIds[0]); + this._updateActiveIds(); + } + }; + /** + * @private + * @param {?} panel + * @param {?} nextState + * @return {?} + */ + NgbAccordion.prototype._changeOpenState = /** + * @private + * @param {?} panel + * @param {?} nextState + * @return {?} + */ + function (panel, nextState) { + if (panel && !panel.disabled && panel.isOpen !== nextState) { + /** @type {?} */ + var defaultPrevented_1 = false; + this.panelChange.emit({ panelId: panel.id, nextState: nextState, preventDefault: (/** + * @return {?} + */ + function () { defaultPrevented_1 = true; }) }); + if (!defaultPrevented_1) { + panel.isOpen = nextState; + if (nextState && this.closeOtherPanels) { + this._closeOthers(panel.id); + } + this._updateActiveIds(); + } + } + }; + /** + * @private + * @param {?} panelId + * @return {?} + */ + NgbAccordion.prototype._closeOthers = /** + * @private + * @param {?} panelId + * @return {?} + */ + function (panelId) { + this.panels.forEach((/** + * @param {?} panel + * @return {?} + */ + function (panel) { + if (panel.id !== panelId) { + panel.isOpen = false; + } + })); + }; + /** + * @private + * @param {?} panelId + * @return {?} + */ + NgbAccordion.prototype._findPanelById = /** + * @private + * @param {?} panelId + * @return {?} + */ + function (panelId) { return this.panels.find((/** + * @param {?} p + * @return {?} + */ + function (p) { return p.id === panelId; })); }; + /** + * @private + * @return {?} + */ + NgbAccordion.prototype._updateActiveIds = /** + * @private + * @return {?} + */ + function () { + this.activeIds = this.panels.filter((/** + * @param {?} panel + * @return {?} + */ + function (panel) { return panel.isOpen && !panel.disabled; })).map((/** + * @param {?} panel + * @return {?} + */ + function (panel) { return panel.id; })); + }; + NgbAccordion.decorators = [ + { type: Component, args: [{ + selector: 'ngb-accordion', + exportAs: 'ngbAccordion', + host: { 'class': 'accordion', 'role': 'tablist', '[attr.aria-multiselectable]': '!closeOtherPanels' }, + template: "\n \n \n \n \n
\n
\n \n
\n
\n
\n \n
\n
\n
\n
\n " + }] } + ]; + /** @nocollapse */ + NgbAccordion.ctorParameters = function () { return [ + { type: NgbAccordionConfig } + ]; }; + NgbAccordion.propDecorators = { + panels: [{ type: ContentChildren, args: [NgbPanel,] }], + activeIds: [{ type: Input }], + closeOtherPanels: [{ type: Input, args: ['closeOthers',] }], + destroyOnHide: [{ type: Input }], + type: [{ type: Input }], + panelChange: [{ type: Output }] + }; + return NgbAccordion; +}()); +/** + * A directive to put on a button that toggles panel opening and closing. + * + * To be used inside the [`NgbPanelHeader`](#/components/accordion/api#NgbPanelHeader) + * + * \@since 4.1.0 + */ +var NgbPanelToggle = /** @class */ (function () { + function NgbPanelToggle(accordion, panel) { + this.accordion = accordion; + this.panel = panel; + } + Object.defineProperty(NgbPanelToggle.prototype, "ngbPanelToggle", { + set: /** + * @param {?} panel + * @return {?} + */ + function (panel) { + if (panel) { + this.panel = panel; + } + }, + enumerable: true, + configurable: true + }); + NgbPanelToggle.decorators = [ + { type: Directive, args: [{ + selector: 'button[ngbPanelToggle]', + host: { + 'type': 'button', + '[disabled]': 'panel.disabled', + '[class.collapsed]': '!panel.isOpen', + '[attr.aria-expanded]': 'panel.isOpen', + '[attr.aria-controls]': 'panel.id', + '(click)': 'accordion.toggle(panel.id)' + } + },] } + ]; + /** @nocollapse */ + NgbPanelToggle.ctorParameters = function () { return [ + { type: NgbAccordion }, + { type: NgbPanel, decorators: [{ type: Optional }, { type: Host }] } + ]; }; + NgbPanelToggle.propDecorators = { + ngbPanelToggle: [{ type: Input }] + }; + return NgbPanelToggle; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @type {?} */ +var NGB_ACCORDION_DIRECTIVES = [NgbAccordion, NgbPanel, NgbPanelTitle, NgbPanelContent, NgbPanelHeader, NgbPanelToggle]; +var NgbAccordionModule = /** @class */ (function () { + function NgbAccordionModule() { + } + NgbAccordionModule.decorators = [ + { type: NgModule, args: [{ declarations: NGB_ACCORDION_DIRECTIVES, exports: NGB_ACCORDION_DIRECTIVES, imports: [CommonModule] },] } + ]; + return NgbAccordionModule; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * A configuration service for the [NgbAlert](#/components/alert/api#NgbAlert) component. + * + * You can inject this service, typically in your root component, and customize its properties + * to provide default values for all alerts used in the application. + */ +var NgbAlertConfig = /** @class */ (function () { + function NgbAlertConfig() { + this.dismissible = true; + this.type = 'warning'; + } + NgbAlertConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ NgbAlertConfig.ngInjectableDef = ɵɵdefineInjectable({ factory: function NgbAlertConfig_Factory() { return new NgbAlertConfig(); }, token: NgbAlertConfig, providedIn: "root" }); + return NgbAlertConfig; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * Alert is a component to provide contextual feedback messages for user. + * + * It supports several alert types and can be dismissed. + */ +var NgbAlert = /** @class */ (function () { + function NgbAlert(config, _renderer, _element) { + this._renderer = _renderer; + this._element = _element; + /** + * An event emitted when the close button is clicked. It has no payload and only relevant for dismissible alerts. + */ + this.close = new EventEmitter(); + this.dismissible = config.dismissible; + this.type = config.type; + } + /** + * @return {?} + */ + NgbAlert.prototype.closeHandler = /** + * @return {?} + */ + function () { this.close.emit(null); }; + /** + * @param {?} changes + * @return {?} + */ + NgbAlert.prototype.ngOnChanges = /** + * @param {?} changes + * @return {?} + */ + function (changes) { + /** @type {?} */ + var typeChange = changes['type']; + if (typeChange && !typeChange.firstChange) { + this._renderer.removeClass(this._element.nativeElement, "alert-" + typeChange.previousValue); + this._renderer.addClass(this._element.nativeElement, "alert-" + typeChange.currentValue); + } + }; + /** + * @return {?} + */ + NgbAlert.prototype.ngOnInit = /** + * @return {?} + */ + function () { this._renderer.addClass(this._element.nativeElement, "alert-" + this.type); }; + NgbAlert.decorators = [ + { type: Component, args: [{ + selector: 'ngb-alert', + changeDetection: ChangeDetectionStrategy.OnPush, + encapsulation: ViewEncapsulation.None, + host: { 'role': 'alert', 'class': 'alert', '[class.alert-dismissible]': 'dismissible' }, + template: "\n \n \n ", + styles: ["ngb-alert{display:block}"] + }] } + ]; + /** @nocollapse */ + NgbAlert.ctorParameters = function () { return [ + { type: NgbAlertConfig }, + { type: Renderer2 }, + { type: ElementRef } + ]; }; + NgbAlert.propDecorators = { + dismissible: [{ type: Input }], + type: [{ type: Input }], + close: [{ type: Output }] + }; + return NgbAlert; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +var NgbAlertModule = /** @class */ (function () { + function NgbAlertModule() { + } + NgbAlertModule.decorators = [ + { type: NgModule, args: [{ declarations: [NgbAlert], exports: [NgbAlert], imports: [CommonModule], entryComponents: [NgbAlert] },] } + ]; + return NgbAlertModule; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +var NgbButtonLabel = /** @class */ (function () { + function NgbButtonLabel() { + } + NgbButtonLabel.decorators = [ + { type: Directive, args: [{ + selector: '[ngbButtonLabel]', + host: { '[class.btn]': 'true', '[class.active]': 'active', '[class.disabled]': 'disabled', '[class.focus]': 'focused' } + },] } + ]; + return NgbButtonLabel; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @type {?} */ +var NGB_CHECKBOX_VALUE_ACCESSOR = { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef((/** + * @return {?} + */ + function () { return NgbCheckBox; })), + multi: true +}; +/** + * Allows to easily create Bootstrap-style checkbox buttons. + * + * Integrates with forms, so the value of a checked button is bound to the underlying form control + * either in a reactive or template-driven way. + */ +var NgbCheckBox = /** @class */ (function () { + function NgbCheckBox(_label, _cd) { + this._label = _label; + this._cd = _cd; + /** + * If `true`, the checkbox button will be disabled + */ + this.disabled = false; + /** + * The form control value when the checkbox is checked. + */ + this.valueChecked = true; + /** + * The form control value when the checkbox is unchecked. + */ + this.valueUnChecked = false; + this.onChange = (/** + * @param {?} _ + * @return {?} + */ + function (_) { }); + this.onTouched = (/** + * @return {?} + */ + function () { }); + } + Object.defineProperty(NgbCheckBox.prototype, "focused", { + set: /** + * @param {?} isFocused + * @return {?} + */ + function (isFocused) { + this._label.focused = isFocused; + if (!isFocused) { + this.onTouched(); + } + }, + enumerable: true, + configurable: true + }); + /** + * @param {?} $event + * @return {?} + */ + NgbCheckBox.prototype.onInputChange = /** + * @param {?} $event + * @return {?} + */ + function ($event) { + /** @type {?} */ + var modelToPropagate = $event.target.checked ? this.valueChecked : this.valueUnChecked; + this.onChange(modelToPropagate); + this.onTouched(); + this.writeValue(modelToPropagate); + }; + /** + * @param {?} fn + * @return {?} + */ + NgbCheckBox.prototype.registerOnChange = /** + * @param {?} fn + * @return {?} + */ + function (fn) { this.onChange = fn; }; + /** + * @param {?} fn + * @return {?} + */ + NgbCheckBox.prototype.registerOnTouched = /** + * @param {?} fn + * @return {?} + */ + function (fn) { this.onTouched = fn; }; + /** + * @param {?} isDisabled + * @return {?} + */ + NgbCheckBox.prototype.setDisabledState = /** + * @param {?} isDisabled + * @return {?} + */ + function (isDisabled) { + this.disabled = isDisabled; + this._label.disabled = isDisabled; + }; + /** + * @param {?} value + * @return {?} + */ + NgbCheckBox.prototype.writeValue = /** + * @param {?} value + * @return {?} + */ + function (value) { + this.checked = value === this.valueChecked; + this._label.active = this.checked; + // label won't be updated, if it is inside the OnPush component when [ngModel] changes + this._cd.markForCheck(); + }; + NgbCheckBox.decorators = [ + { type: Directive, args: [{ + selector: '[ngbButton][type=checkbox]', + host: { + 'autocomplete': 'off', + '[checked]': 'checked', + '[disabled]': 'disabled', + '(change)': 'onInputChange($event)', + '(focus)': 'focused = true', + '(blur)': 'focused = false' + }, + providers: [NGB_CHECKBOX_VALUE_ACCESSOR] + },] } + ]; + /** @nocollapse */ + NgbCheckBox.ctorParameters = function () { return [ + { type: NgbButtonLabel }, + { type: ChangeDetectorRef } + ]; }; + NgbCheckBox.propDecorators = { + disabled: [{ type: Input }], + valueChecked: [{ type: Input }], + valueUnChecked: [{ type: Input }] + }; + return NgbCheckBox; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @type {?} */ +var NGB_RADIO_VALUE_ACCESSOR = { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef((/** + * @return {?} + */ + function () { return NgbRadioGroup; })), + multi: true +}; +/** @type {?} */ +var nextId$1 = 0; +/** + * Allows to easily create Bootstrap-style radio buttons. + * + * Integrates with forms, so the value of a checked button is bound to the underlying form control + * either in a reactive or template-driven way. + */ +var NgbRadioGroup = /** @class */ (function () { + function NgbRadioGroup() { + this._radios = new Set(); + this._value = null; + /** + * Name of the radio group applied to radio input elements. + * + * Will be applied to all radio input elements inside the group, + * unless [`NgbRadio`](#/components/buttons/api#NgbRadio)'s specify names themselves. + * + * If not provided, will be generated in the `ngb-radio-xx` format. + */ + this.name = "ngb-radio-" + nextId$1++; + this.onChange = (/** + * @param {?} _ + * @return {?} + */ + function (_) { }); + this.onTouched = (/** + * @return {?} + */ + function () { }); + } + Object.defineProperty(NgbRadioGroup.prototype, "disabled", { + get: /** + * @return {?} + */ + function () { return this._disabled; }, + set: /** + * @param {?} isDisabled + * @return {?} + */ + function (isDisabled) { this.setDisabledState(isDisabled); }, + enumerable: true, + configurable: true + }); + /** + * @param {?} radio + * @return {?} + */ + NgbRadioGroup.prototype.onRadioChange = /** + * @param {?} radio + * @return {?} + */ + function (radio) { + this.writeValue(radio.value); + this.onChange(radio.value); + }; + /** + * @return {?} + */ + NgbRadioGroup.prototype.onRadioValueUpdate = /** + * @return {?} + */ + function () { this._updateRadiosValue(); }; + /** + * @param {?} radio + * @return {?} + */ + NgbRadioGroup.prototype.register = /** + * @param {?} radio + * @return {?} + */ + function (radio) { this._radios.add(radio); }; + /** + * @param {?} fn + * @return {?} + */ + NgbRadioGroup.prototype.registerOnChange = /** + * @param {?} fn + * @return {?} + */ + function (fn) { this.onChange = fn; }; + /** + * @param {?} fn + * @return {?} + */ + NgbRadioGroup.prototype.registerOnTouched = /** + * @param {?} fn + * @return {?} + */ + function (fn) { this.onTouched = fn; }; + /** + * @param {?} isDisabled + * @return {?} + */ + NgbRadioGroup.prototype.setDisabledState = /** + * @param {?} isDisabled + * @return {?} + */ + function (isDisabled) { + this._disabled = isDisabled; + this._updateRadiosDisabled(); + }; + /** + * @param {?} radio + * @return {?} + */ + NgbRadioGroup.prototype.unregister = /** + * @param {?} radio + * @return {?} + */ + function (radio) { this._radios.delete(radio); }; + /** + * @param {?} value + * @return {?} + */ + NgbRadioGroup.prototype.writeValue = /** + * @param {?} value + * @return {?} + */ + function (value) { + this._value = value; + this._updateRadiosValue(); + }; + /** + * @private + * @return {?} + */ + NgbRadioGroup.prototype._updateRadiosValue = /** + * @private + * @return {?} + */ + function () { + var _this = this; + this._radios.forEach((/** + * @param {?} radio + * @return {?} + */ + function (radio) { return radio.updateValue(_this._value); })); + }; + /** + * @private + * @return {?} + */ + NgbRadioGroup.prototype._updateRadiosDisabled = /** + * @private + * @return {?} + */ + function () { this._radios.forEach((/** + * @param {?} radio + * @return {?} + */ + function (radio) { return radio.updateDisabled(); })); }; + NgbRadioGroup.decorators = [ + { type: Directive, args: [{ selector: '[ngbRadioGroup]', host: { 'role': 'radiogroup' }, providers: [NGB_RADIO_VALUE_ACCESSOR] },] } + ]; + NgbRadioGroup.propDecorators = { + name: [{ type: Input }] + }; + return NgbRadioGroup; +}()); +/** + * A directive that marks an input of type "radio" as a part of the + * [`NgbRadioGroup`](#/components/buttons/api#NgbRadioGroup). + */ +var NgbRadio = /** @class */ (function () { + function NgbRadio(_group, _label, _renderer, _element, _cd) { + this._group = _group; + this._label = _label; + this._renderer = _renderer; + this._element = _element; + this._cd = _cd; + this._value = null; + this._group.register(this); + this.updateDisabled(); + } + Object.defineProperty(NgbRadio.prototype, "value", { + get: /** + * @return {?} + */ + function () { return this._value; }, + /** + * The form control value when current radio button is checked. + */ + set: /** + * The form control value when current radio button is checked. + * @param {?} value + * @return {?} + */ + function (value) { + this._value = value; + /** @type {?} */ + var stringValue = value ? value.toString() : ''; + this._renderer.setProperty(this._element.nativeElement, 'value', stringValue); + this._group.onRadioValueUpdate(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbRadio.prototype, "disabled", { + get: /** + * @return {?} + */ + function () { return this._group.disabled || this._disabled; }, + /** + * If `true`, current radio button will be disabled. + */ + set: /** + * If `true`, current radio button will be disabled. + * @param {?} isDisabled + * @return {?} + */ + function (isDisabled) { + this._disabled = isDisabled !== false; + this.updateDisabled(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbRadio.prototype, "focused", { + set: /** + * @param {?} isFocused + * @return {?} + */ + function (isFocused) { + if (this._label) { + this._label.focused = isFocused; + } + if (!isFocused) { + this._group.onTouched(); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbRadio.prototype, "checked", { + get: /** + * @return {?} + */ + function () { return this._checked; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbRadio.prototype, "nameAttr", { + get: /** + * @return {?} + */ + function () { return this.name || this._group.name; }, + enumerable: true, + configurable: true + }); + /** + * @return {?} + */ + NgbRadio.prototype.ngOnDestroy = /** + * @return {?} + */ + function () { this._group.unregister(this); }; + /** + * @return {?} + */ + NgbRadio.prototype.onChange = /** + * @return {?} + */ + function () { this._group.onRadioChange(this); }; + /** + * @param {?} value + * @return {?} + */ + NgbRadio.prototype.updateValue = /** + * @param {?} value + * @return {?} + */ + function (value) { + // label won't be updated, if it is inside the OnPush component when [ngModel] changes + if (this.value !== value) { + this._cd.markForCheck(); + } + this._checked = this.value === value; + this._label.active = this._checked; + }; + /** + * @return {?} + */ + NgbRadio.prototype.updateDisabled = /** + * @return {?} + */ + function () { this._label.disabled = this.disabled; }; + NgbRadio.decorators = [ + { type: Directive, args: [{ + selector: '[ngbButton][type=radio]', + host: { + '[checked]': 'checked', + '[disabled]': 'disabled', + '[name]': 'nameAttr', + '(change)': 'onChange()', + '(focus)': 'focused = true', + '(blur)': 'focused = false' + } + },] } + ]; + /** @nocollapse */ + NgbRadio.ctorParameters = function () { return [ + { type: NgbRadioGroup }, + { type: NgbButtonLabel }, + { type: Renderer2 }, + { type: ElementRef }, + { type: ChangeDetectorRef } + ]; }; + NgbRadio.propDecorators = { + name: [{ type: Input }], + value: [{ type: Input, args: ['value',] }], + disabled: [{ type: Input, args: ['disabled',] }] + }; + return NgbRadio; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @type {?} */ +var NGB_BUTTON_DIRECTIVES = [NgbButtonLabel, NgbCheckBox, NgbRadioGroup, NgbRadio]; +var NgbButtonsModule = /** @class */ (function () { + function NgbButtonsModule() { + } + NgbButtonsModule.decorators = [ + { type: NgModule, args: [{ declarations: NGB_BUTTON_DIRECTIVES, exports: NGB_BUTTON_DIRECTIVES },] } + ]; + return NgbButtonsModule; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * A configuration service for the [NgbCarousel](#/components/carousel/api#NgbCarousel) component. + * + * You can inject this service, typically in your root component, and customize its properties + * to provide default values for all carousels used in the application. + */ +var NgbCarouselConfig = /** @class */ (function () { + function NgbCarouselConfig() { + this.interval = 5000; + this.wrap = true; + this.keyboard = true; + this.pauseOnHover = true; + this.showNavigationArrows = true; + this.showNavigationIndicators = true; + } + NgbCarouselConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ NgbCarouselConfig.ngInjectableDef = ɵɵdefineInjectable({ factory: function NgbCarouselConfig_Factory() { return new NgbCarouselConfig(); }, token: NgbCarouselConfig, providedIn: "root" }); + return NgbCarouselConfig; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @type {?} */ +var nextId$2 = 0; +/** + * A directive that wraps the individual carousel slide. + */ +var NgbSlide = /** @class */ (function () { + function NgbSlide(tplRef) { + this.tplRef = tplRef; + /** + * Slide id that must be unique for the entire document. + * + * If not provided, will be generated in the `ngb-slide-xx` format. + */ + this.id = "ngb-slide-" + nextId$2++; + } + NgbSlide.decorators = [ + { type: Directive, args: [{ selector: 'ng-template[ngbSlide]' },] } + ]; + /** @nocollapse */ + NgbSlide.ctorParameters = function () { return [ + { type: TemplateRef } + ]; }; + NgbSlide.propDecorators = { + id: [{ type: Input }] + }; + return NgbSlide; +}()); +/** + * Carousel is a component to easily create and control slideshows. + * + * Allows to set intervals, change the way user interacts with the slides and provides a programmatic API. + */ +var NgbCarousel = /** @class */ (function () { + function NgbCarousel(config, _platformId, _ngZone, _cd) { + this._platformId = _platformId; + this._ngZone = _ngZone; + this._cd = _cd; + this.NgbSlideEventSource = NgbSlideEventSource; + this._destroy$ = new Subject(); + this._interval$ = new BehaviorSubject(0); + this._mouseHover$ = new BehaviorSubject(false); + this._pauseOnHover$ = new BehaviorSubject(false); + this._pause$ = new BehaviorSubject(false); + this._wrap$ = new BehaviorSubject(false); + /** + * An event emitted right after the slide transition is completed. + * + * See [`NgbSlideEvent`](#/components/carousel/api#NgbSlideEvent) for payload details. + */ + this.slide = new EventEmitter(); + this.interval = config.interval; + this.wrap = config.wrap; + this.keyboard = config.keyboard; + this.pauseOnHover = config.pauseOnHover; + this.showNavigationArrows = config.showNavigationArrows; + this.showNavigationIndicators = config.showNavigationIndicators; + } + Object.defineProperty(NgbCarousel.prototype, "interval", { + get: /** + * @return {?} + */ + function () { return this._interval$.value; }, + /** + * Time in milliseconds before the next slide is shown. + */ + set: /** + * Time in milliseconds before the next slide is shown. + * @param {?} value + * @return {?} + */ + function (value) { + this._interval$.next(value); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbCarousel.prototype, "wrap", { + get: /** + * @return {?} + */ + function () { return this._wrap$.value; }, + /** + * If `true`, will 'wrap' the carousel by switching from the last slide back to the first. + */ + set: /** + * If `true`, will 'wrap' the carousel by switching from the last slide back to the first. + * @param {?} value + * @return {?} + */ + function (value) { + this._wrap$.next(value); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbCarousel.prototype, "pauseOnHover", { + get: /** + * @return {?} + */ + function () { return this._pauseOnHover$.value; }, + /** + * If `true`, will pause slide switching when mouse cursor hovers the slide. + * + * @since 2.2.0 + */ + set: /** + * If `true`, will pause slide switching when mouse cursor hovers the slide. + * + * \@since 2.2.0 + * @param {?} value + * @return {?} + */ + function (value) { + this._pauseOnHover$.next(value); + }, + enumerable: true, + configurable: true + }); + /** + * @return {?} + */ + NgbCarousel.prototype.mouseEnter = /** + * @return {?} + */ + function () { + this._mouseHover$.next(true); + }; + /** + * @return {?} + */ + NgbCarousel.prototype.mouseLeave = /** + * @return {?} + */ + function () { + this._mouseHover$.next(false); + }; + /** + * @return {?} + */ + NgbCarousel.prototype.ngAfterContentInit = /** + * @return {?} + */ + function () { + var _this = this; + // setInterval() doesn't play well with SSR and protractor, + // so we should run it in the browser and outside Angular + if (isPlatformBrowser(this._platformId)) { + this._ngZone.runOutsideAngular((/** + * @return {?} + */ + function () { + /** @type {?} */ + var hasNextSlide$ = combineLatest(_this.slide.pipe(map((/** + * @param {?} slideEvent + * @return {?} + */ + function (slideEvent) { return slideEvent.current; })), startWith(_this.activeId)), _this._wrap$, _this.slides.changes.pipe(startWith(null))) + .pipe(map((/** + * @param {?} __0 + * @return {?} + */ + function (_a) { + var _b = __read(_a, 2), currentSlideId = _b[0], wrap = _b[1]; + /** @type {?} */ + var slideArr = _this.slides.toArray(); + /** @type {?} */ + var currentSlideIdx = _this._getSlideIdxById(currentSlideId); + return wrap ? slideArr.length > 1 : currentSlideIdx < slideArr.length - 1; + })), distinctUntilChanged()); + combineLatest(_this._pause$, _this._pauseOnHover$, _this._mouseHover$, _this._interval$, hasNextSlide$) + .pipe(map((/** + * @param {?} __0 + * @return {?} + */ + function (_a) { + var _b = __read(_a, 5), pause = _b[0], pauseOnHover = _b[1], mouseHover = _b[2], interval = _b[3], hasNextSlide = _b[4]; + return ((pause || (pauseOnHover && mouseHover) || !hasNextSlide) ? 0 : interval); + })), distinctUntilChanged(), switchMap((/** + * @param {?} interval + * @return {?} + */ + function (interval) { return interval > 0 ? timer(interval, interval) : NEVER; })), takeUntil(_this._destroy$)) + .subscribe((/** + * @return {?} + */ + function () { return _this._ngZone.run((/** + * @return {?} + */ + function () { return _this.next(NgbSlideEventSource.TIMER); })); })); + })); + } + this.slides.changes.pipe(takeUntil(this._destroy$)).subscribe((/** + * @return {?} + */ + function () { return _this._cd.markForCheck(); })); + }; + /** + * @return {?} + */ + NgbCarousel.prototype.ngAfterContentChecked = /** + * @return {?} + */ + function () { + /** @type {?} */ + var activeSlide = this._getSlideById(this.activeId); + this.activeId = activeSlide ? activeSlide.id : (this.slides.length ? this.slides.first.id : null); + }; + /** + * @return {?} + */ + NgbCarousel.prototype.ngOnDestroy = /** + * @return {?} + */ + function () { this._destroy$.next(); }; + /** + * Navigates to a slide with the specified identifier. + */ + /** + * Navigates to a slide with the specified identifier. + * @param {?} slideId + * @param {?=} source + * @return {?} + */ + NgbCarousel.prototype.select = /** + * Navigates to a slide with the specified identifier. + * @param {?} slideId + * @param {?=} source + * @return {?} + */ + function (slideId, source) { + this._cycleToSelected(slideId, this._getSlideEventDirection(this.activeId, slideId), source); + }; + /** + * Navigates to the previous slide. + */ + /** + * Navigates to the previous slide. + * @param {?=} source + * @return {?} + */ + NgbCarousel.prototype.prev = /** + * Navigates to the previous slide. + * @param {?=} source + * @return {?} + */ + function (source) { + this._cycleToSelected(this._getPrevSlide(this.activeId), NgbSlideEventDirection.RIGHT, source); + }; + /** + * Navigates to the next slide. + */ + /** + * Navigates to the next slide. + * @param {?=} source + * @return {?} + */ + NgbCarousel.prototype.next = /** + * Navigates to the next slide. + * @param {?=} source + * @return {?} + */ + function (source) { + this._cycleToSelected(this._getNextSlide(this.activeId), NgbSlideEventDirection.LEFT, source); + }; + /** + * Pauses cycling through the slides. + */ + /** + * Pauses cycling through the slides. + * @return {?} + */ + NgbCarousel.prototype.pause = /** + * Pauses cycling through the slides. + * @return {?} + */ + function () { this._pause$.next(true); }; + /** + * Restarts cycling through the slides from left to right. + */ + /** + * Restarts cycling through the slides from left to right. + * @return {?} + */ + NgbCarousel.prototype.cycle = /** + * Restarts cycling through the slides from left to right. + * @return {?} + */ + function () { this._pause$.next(false); }; + /** + * @private + * @param {?} slideIdx + * @param {?} direction + * @param {?=} source + * @return {?} + */ + NgbCarousel.prototype._cycleToSelected = /** + * @private + * @param {?} slideIdx + * @param {?} direction + * @param {?=} source + * @return {?} + */ + function (slideIdx, direction, source) { + /** @type {?} */ + var selectedSlide = this._getSlideById(slideIdx); + if (selectedSlide && selectedSlide.id !== this.activeId) { + this.slide.emit({ prev: this.activeId, current: selectedSlide.id, direction: direction, paused: this._pause$.value, source: source }); + this.activeId = selectedSlide.id; + } + // we get here after the interval fires or any external API call like next(), prev() or select() + this._cd.markForCheck(); + }; + /** + * @private + * @param {?} currentActiveSlideId + * @param {?} nextActiveSlideId + * @return {?} + */ + NgbCarousel.prototype._getSlideEventDirection = /** + * @private + * @param {?} currentActiveSlideId + * @param {?} nextActiveSlideId + * @return {?} + */ + function (currentActiveSlideId, nextActiveSlideId) { + /** @type {?} */ + var currentActiveSlideIdx = this._getSlideIdxById(currentActiveSlideId); + /** @type {?} */ + var nextActiveSlideIdx = this._getSlideIdxById(nextActiveSlideId); + return currentActiveSlideIdx > nextActiveSlideIdx ? NgbSlideEventDirection.RIGHT : NgbSlideEventDirection.LEFT; + }; + /** + * @private + * @param {?} slideId + * @return {?} + */ + NgbCarousel.prototype._getSlideById = /** + * @private + * @param {?} slideId + * @return {?} + */ + function (slideId) { return this.slides.find((/** + * @param {?} slide + * @return {?} + */ + function (slide) { return slide.id === slideId; })); }; + /** + * @private + * @param {?} slideId + * @return {?} + */ + NgbCarousel.prototype._getSlideIdxById = /** + * @private + * @param {?} slideId + * @return {?} + */ + function (slideId) { + return this.slides.toArray().indexOf(this._getSlideById(slideId)); + }; + /** + * @private + * @param {?} currentSlideId + * @return {?} + */ + NgbCarousel.prototype._getNextSlide = /** + * @private + * @param {?} currentSlideId + * @return {?} + */ + function (currentSlideId) { + /** @type {?} */ + var slideArr = this.slides.toArray(); + /** @type {?} */ + var currentSlideIdx = this._getSlideIdxById(currentSlideId); + /** @type {?} */ + var isLastSlide = currentSlideIdx === slideArr.length - 1; + return isLastSlide ? (this.wrap ? slideArr[0].id : slideArr[slideArr.length - 1].id) : + slideArr[currentSlideIdx + 1].id; + }; + /** + * @private + * @param {?} currentSlideId + * @return {?} + */ + NgbCarousel.prototype._getPrevSlide = /** + * @private + * @param {?} currentSlideId + * @return {?} + */ + function (currentSlideId) { + /** @type {?} */ + var slideArr = this.slides.toArray(); + /** @type {?} */ + var currentSlideIdx = this._getSlideIdxById(currentSlideId); + /** @type {?} */ + var isFirstSlide = currentSlideIdx === 0; + return isFirstSlide ? (this.wrap ? slideArr[slideArr.length - 1].id : slideArr[0].id) : + slideArr[currentSlideIdx - 1].id; + }; + NgbCarousel.decorators = [ + { type: Component, args: [{ + selector: 'ngb-carousel', + exportAs: 'ngbCarousel', + changeDetection: ChangeDetectionStrategy.OnPush, + host: { + 'class': 'carousel slide', + '[style.display]': '"block"', + 'tabIndex': '0', + '(keydown.arrowLeft)': 'keyboard && prev(NgbSlideEventSource.ARROW_LEFT)', + '(keydown.arrowRight)': 'keyboard && next(NgbSlideEventSource.ARROW_RIGHT)' + }, + template: "\n
    \n
  1. \n
\n
\n
\n \n
\n
\n \n \n Previous\n \n \n \n Next\n \n " + }] } + ]; + /** @nocollapse */ + NgbCarousel.ctorParameters = function () { return [ + { type: NgbCarouselConfig }, + { type: undefined, decorators: [{ type: Inject, args: [PLATFORM_ID,] }] }, + { type: NgZone }, + { type: ChangeDetectorRef } + ]; }; + NgbCarousel.propDecorators = { + slides: [{ type: ContentChildren, args: [NgbSlide,] }], + activeId: [{ type: Input }], + interval: [{ type: Input }], + wrap: [{ type: Input }], + keyboard: [{ type: Input }], + pauseOnHover: [{ type: Input }], + showNavigationArrows: [{ type: Input }], + showNavigationIndicators: [{ type: Input }], + slide: [{ type: Output }], + mouseEnter: [{ type: HostListener, args: ['mouseenter',] }], + mouseLeave: [{ type: HostListener, args: ['mouseleave',] }] + }; + return NgbCarousel; +}()); +/** @enum {string} */ +var NgbSlideEventDirection = { + LEFT: (/** @type {?} */ ('left')), + RIGHT: (/** @type {?} */ ('right')), +}; +/** @enum {string} */ +var NgbSlideEventSource = { + TIMER: 'timer', + ARROW_LEFT: 'arrowLeft', + ARROW_RIGHT: 'arrowRight', + INDICATOR: 'indicator', +}; +/** @type {?} */ +var NGB_CAROUSEL_DIRECTIVES = [NgbCarousel, NgbSlide]; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +var NgbCarouselModule = /** @class */ (function () { + function NgbCarouselModule() { + } + NgbCarouselModule.decorators = [ + { type: NgModule, args: [{ declarations: NGB_CAROUSEL_DIRECTIVES, exports: NGB_CAROUSEL_DIRECTIVES, imports: [CommonModule] },] } + ]; + return NgbCarouselModule; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * A directive to provide a simple way of hiding and showing elements on the page. + */ +var NgbCollapse = /** @class */ (function () { + function NgbCollapse() { + /** + * If `true`, will collapse the element or show it otherwise. + */ + this.collapsed = false; + } + NgbCollapse.decorators = [ + { type: Directive, args: [{ + selector: '[ngbCollapse]', + exportAs: 'ngbCollapse', + host: { '[class.collapse]': 'true', '[class.show]': '!collapsed' } + },] } + ]; + NgbCollapse.propDecorators = { + collapsed: [{ type: Input, args: ['ngbCollapse',] }] + }; + return NgbCollapse; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +var NgbCollapseModule = /** @class */ (function () { + function NgbCollapseModule() { + } + NgbCollapseModule.decorators = [ + { type: NgModule, args: [{ declarations: [NgbCollapse], exports: [NgbCollapse] },] } + ]; + return NgbCollapseModule; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * A simple class that represents a date that datepicker also uses internally. + * + * It is the implementation of the `NgbDateStruct` interface that adds some convenience methods, + * like `.equals()`, `.before()`, etc. + * + * All datepicker APIs consume `NgbDateStruct`, but return `NgbDate`. + * + * In many cases it is simpler to manipulate these objects together with + * [`NgbCalendar`](#/components/datepicker/api#NgbCalendar) than native JS Dates. + * + * See the [date format overview](#/components/datepicker/overview#date-model) for more details. + * + * \@since 3.0.0 + */ +var /** + * A simple class that represents a date that datepicker also uses internally. + * + * It is the implementation of the `NgbDateStruct` interface that adds some convenience methods, + * like `.equals()`, `.before()`, etc. + * + * All datepicker APIs consume `NgbDateStruct`, but return `NgbDate`. + * + * In many cases it is simpler to manipulate these objects together with + * [`NgbCalendar`](#/components/datepicker/api#NgbCalendar) than native JS Dates. + * + * See the [date format overview](#/components/datepicker/overview#date-model) for more details. + * + * \@since 3.0.0 + */ +NgbDate = /** @class */ (function () { + function NgbDate(year, month, day) { + this.year = isInteger(year) ? year : null; + this.month = isInteger(month) ? month : null; + this.day = isInteger(day) ? day : null; + } + /** + * A **static method** that creates a new date object from the `NgbDateStruct`, + * + * ex. `NgbDate.from({year: 2000, month: 5, day: 1})`. + * + * If the `date` is already of `NgbDate` type, the method will return the same object. + */ + /** + * A **static method** that creates a new date object from the `NgbDateStruct`, + * + * ex. `NgbDate.from({year: 2000, month: 5, day: 1})`. + * + * If the `date` is already of `NgbDate` type, the method will return the same object. + * @param {?} date + * @return {?} + */ + NgbDate.from = /** + * A **static method** that creates a new date object from the `NgbDateStruct`, + * + * ex. `NgbDate.from({year: 2000, month: 5, day: 1})`. + * + * If the `date` is already of `NgbDate` type, the method will return the same object. + * @param {?} date + * @return {?} + */ + function (date) { + if (date instanceof NgbDate) { + return date; + } + return date ? new NgbDate(date.year, date.month, date.day) : null; + }; + /** + * Checks if the current date is equal to another date. + */ + /** + * Checks if the current date is equal to another date. + * @param {?} other + * @return {?} + */ + NgbDate.prototype.equals = /** + * Checks if the current date is equal to another date. + * @param {?} other + * @return {?} + */ + function (other) { + return other && this.year === other.year && this.month === other.month && this.day === other.day; + }; + /** + * Checks if the current date is before another date. + */ + /** + * Checks if the current date is before another date. + * @param {?} other + * @return {?} + */ + NgbDate.prototype.before = /** + * Checks if the current date is before another date. + * @param {?} other + * @return {?} + */ + function (other) { + if (!other) { + return false; + } + if (this.year === other.year) { + if (this.month === other.month) { + return this.day === other.day ? false : this.day < other.day; + } + else { + return this.month < other.month; + } + } + else { + return this.year < other.year; + } + }; + /** + * Checks if the current date is after another date. + */ + /** + * Checks if the current date is after another date. + * @param {?} other + * @return {?} + */ + NgbDate.prototype.after = /** + * Checks if the current date is after another date. + * @param {?} other + * @return {?} + */ + function (other) { + if (!other) { + return false; + } + if (this.year === other.year) { + if (this.month === other.month) { + return this.day === other.day ? false : this.day > other.day; + } + else { + return this.month > other.month; + } + } + else { + return this.year > other.year; + } + }; + return NgbDate; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * @param {?} jsDate + * @return {?} + */ +function fromJSDate(jsDate) { + return new NgbDate(jsDate.getFullYear(), jsDate.getMonth() + 1, jsDate.getDate()); +} +/** + * @param {?} date + * @return {?} + */ +function toJSDate(date) { + /** @type {?} */ + var jsDate = new Date(date.year, date.month - 1, date.day, 12); + // this is done avoid 30 -> 1930 conversion + if (!isNaN(jsDate.getTime())) { + jsDate.setFullYear(date.year); + } + return jsDate; +} +/** + * @return {?} + */ +function NGB_DATEPICKER_CALENDAR_FACTORY() { + return new NgbCalendarGregorian(); +} +/** + * A service that represents the calendar used by the datepicker. + * + * The default implementation uses the Gregorian calendar. You can inject it in your own + * implementations if necessary to simplify `NgbDate` calculations. + * @abstract + */ +var NgbCalendar = /** @class */ (function () { + function NgbCalendar() { + } + NgbCalendar.decorators = [ + { type: Injectable, args: [{ providedIn: 'root', useFactory: NGB_DATEPICKER_CALENDAR_FACTORY },] } + ]; + /** @nocollapse */ NgbCalendar.ngInjectableDef = ɵɵdefineInjectable({ factory: NGB_DATEPICKER_CALENDAR_FACTORY, token: NgbCalendar, providedIn: "root" }); + return NgbCalendar; +}()); +var NgbCalendarGregorian = /** @class */ (function (_super) { + __extends(NgbCalendarGregorian, _super); + function NgbCalendarGregorian() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * @return {?} + */ + NgbCalendarGregorian.prototype.getDaysPerWeek = /** + * @return {?} + */ + function () { return 7; }; + /** + * @return {?} + */ + NgbCalendarGregorian.prototype.getMonths = /** + * @return {?} + */ + function () { return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; }; + /** + * @return {?} + */ + NgbCalendarGregorian.prototype.getWeeksPerMonth = /** + * @return {?} + */ + function () { return 6; }; + /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + NgbCalendarGregorian.prototype.getNext = /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + function (date, period, number) { + if (period === void 0) { period = 'd'; } + if (number === void 0) { number = 1; } + /** @type {?} */ + var jsDate = toJSDate(date); + switch (period) { + case 'y': + return new NgbDate(date.year + number, 1, 1); + case 'm': + jsDate = new Date(date.year, date.month + number - 1, 1, 12); + break; + case 'd': + jsDate.setDate(jsDate.getDate() + number); + break; + default: + return date; + } + return fromJSDate(jsDate); + }; + /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + NgbCalendarGregorian.prototype.getPrev = /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + function (date, period, number) { + if (period === void 0) { period = 'd'; } + if (number === void 0) { number = 1; } + return this.getNext(date, period, -number); + }; + /** + * @param {?} date + * @return {?} + */ + NgbCalendarGregorian.prototype.getWeekday = /** + * @param {?} date + * @return {?} + */ + function (date) { + /** @type {?} */ + var jsDate = toJSDate(date); + /** @type {?} */ + var day = jsDate.getDay(); + // in JS Date Sun=0, in ISO 8601 Sun=7 + return day === 0 ? 7 : day; + }; + /** + * @param {?} week + * @param {?} firstDayOfWeek + * @return {?} + */ + NgbCalendarGregorian.prototype.getWeekNumber = /** + * @param {?} week + * @param {?} firstDayOfWeek + * @return {?} + */ + function (week, firstDayOfWeek) { + // in JS Date Sun=0, in ISO 8601 Sun=7 + if (firstDayOfWeek === 7) { + firstDayOfWeek = 0; + } + /** @type {?} */ + var thursdayIndex = (4 + 7 - firstDayOfWeek) % 7; + /** @type {?} */ + var date = week[thursdayIndex]; + /** @type {?} */ + var jsDate = toJSDate(date); + jsDate.setDate(jsDate.getDate() + 4 - (jsDate.getDay() || 7)); // Thursday + // Thursday + /** @type {?} */ + var time = jsDate.getTime(); + jsDate.setMonth(0); // Compare with Jan 1 + jsDate.setDate(1); + return Math.floor(Math.round((time - jsDate.getTime()) / 86400000) / 7) + 1; + }; + /** + * @return {?} + */ + NgbCalendarGregorian.prototype.getToday = /** + * @return {?} + */ + function () { return fromJSDate(new Date()); }; + /** + * @param {?} date + * @return {?} + */ + NgbCalendarGregorian.prototype.isValid = /** + * @param {?} date + * @return {?} + */ + function (date) { + if (!date || !isInteger(date.year) || !isInteger(date.month) || !isInteger(date.day)) { + return false; + } + // year 0 doesn't exist in Gregorian calendar + if (date.year === 0) { + return false; + } + /** @type {?} */ + var jsDate = toJSDate(date); + return !isNaN(jsDate.getTime()) && jsDate.getFullYear() === date.year && jsDate.getMonth() + 1 === date.month && + jsDate.getDate() === date.day; + }; + NgbCalendarGregorian.decorators = [ + { type: Injectable } + ]; + return NgbCalendarGregorian; +}(NgbCalendar)); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * @param {?} prev + * @param {?} next + * @return {?} + */ +function isChangedDate(prev, next) { + return !dateComparator(prev, next); +} +/** + * @param {?} prev + * @param {?} next + * @return {?} + */ +function isChangedMonth(prev, next) { + return !prev && !next ? false : !prev || !next ? true : prev.year !== next.year || prev.month !== next.month; +} +/** + * @param {?} prev + * @param {?} next + * @return {?} + */ +function dateComparator(prev, next) { + return (!prev && !next) || (!!prev && !!next && prev.equals(next)); +} +/** + * @param {?} minDate + * @param {?} maxDate + * @return {?} + */ +function checkMinBeforeMax(minDate, maxDate) { + if (maxDate && minDate && maxDate.before(minDate)) { + throw new Error("'maxDate' " + maxDate + " should be greater than 'minDate' " + minDate); + } +} +/** + * @param {?} date + * @param {?} minDate + * @param {?} maxDate + * @return {?} + */ +function checkDateInRange(date, minDate, maxDate) { + if (date && minDate && date.before(minDate)) { + return minDate; + } + if (date && maxDate && date.after(maxDate)) { + return maxDate; + } + return date; +} +/** + * @param {?} date + * @param {?} state + * @return {?} + */ +function isDateSelectable(date, state) { + var minDate = state.minDate, maxDate = state.maxDate, disabled = state.disabled, markDisabled = state.markDisabled; + // clang-format off + return !(!isDefined(date) || + disabled || + (markDisabled && markDisabled(date, { year: date.year, month: date.month })) || + (minDate && date.before(minDate)) || + (maxDate && date.after(maxDate))); + // clang-format on +} +/** + * @param {?} calendar + * @param {?} date + * @param {?} minDate + * @param {?} maxDate + * @return {?} + */ +function generateSelectBoxMonths(calendar, date, minDate, maxDate) { + if (!date) { + return []; + } + /** @type {?} */ + var months = calendar.getMonths(date.year); + if (minDate && date.year === minDate.year) { + /** @type {?} */ + var index = months.findIndex((/** + * @param {?} month + * @return {?} + */ + function (month) { return month === minDate.month; })); + months = months.slice(index); + } + if (maxDate && date.year === maxDate.year) { + /** @type {?} */ + var index = months.findIndex((/** + * @param {?} month + * @return {?} + */ + function (month) { return month === maxDate.month; })); + months = months.slice(0, index + 1); + } + return months; +} +/** + * @param {?} date + * @param {?} minDate + * @param {?} maxDate + * @return {?} + */ +function generateSelectBoxYears(date, minDate, maxDate) { + if (!date) { + return []; + } + /** @type {?} */ + var start = minDate && minDate.year || date.year - 10; + /** @type {?} */ + var end = maxDate && maxDate.year || date.year + 10; + return Array.from({ length: end - start + 1 }, (/** + * @param {?} e + * @param {?} i + * @return {?} + */ + function (e, i) { return start + i; })); +} +/** + * @param {?} calendar + * @param {?} date + * @param {?} maxDate + * @return {?} + */ +function nextMonthDisabled(calendar, date, maxDate) { + return maxDate && calendar.getNext(date, 'm').after(maxDate); +} +/** + * @param {?} calendar + * @param {?} date + * @param {?} minDate + * @return {?} + */ +function prevMonthDisabled(calendar, date, minDate) { + /** @type {?} */ + var prevDate = calendar.getPrev(date, 'm'); + return minDate && (prevDate.year === minDate.year && prevDate.month < minDate.month || + prevDate.year < minDate.year && minDate.month === 1); +} +/** + * @param {?} calendar + * @param {?} date + * @param {?} state + * @param {?} i18n + * @param {?} force + * @return {?} + */ +function buildMonths(calendar, date, state, i18n, force) { + var displayMonths = state.displayMonths, months = state.months; + // move old months to a temporary array + /** @type {?} */ + var monthsToReuse = months.splice(0, months.length); + // generate new first dates, nullify or reuse months + /** @type {?} */ + var firstDates = Array.from({ length: displayMonths }, (/** + * @param {?} _ + * @param {?} i + * @return {?} + */ + function (_, i) { + /** @type {?} */ + var firstDate = calendar.getNext(date, 'm', i); + months[i] = null; + if (!force) { + /** @type {?} */ + var reusedIndex = monthsToReuse.findIndex((/** + * @param {?} month + * @return {?} + */ + function (month) { return month.firstDate.equals(firstDate); })); + // move reused month back to months + if (reusedIndex !== -1) { + months[i] = monthsToReuse.splice(reusedIndex, 1)[0]; + } + } + return firstDate; + })); + // rebuild nullified months + firstDates.forEach((/** + * @param {?} firstDate + * @param {?} i + * @return {?} + */ + function (firstDate, i) { + if (months[i] === null) { + months[i] = buildMonth(calendar, firstDate, state, i18n, monthsToReuse.shift() || (/** @type {?} */ ({}))); + } + })); + return months; +} +/** + * @param {?} calendar + * @param {?} date + * @param {?} state + * @param {?} i18n + * @param {?=} month + * @return {?} + */ +function buildMonth(calendar, date, state, i18n, month) { + if (month === void 0) { month = (/** @type {?} */ ({})); } + var dayTemplateData = state.dayTemplateData, minDate = state.minDate, maxDate = state.maxDate, firstDayOfWeek = state.firstDayOfWeek, markDisabled = state.markDisabled, outsideDays = state.outsideDays; + /** @type {?} */ + var calendarToday = calendar.getToday(); + month.firstDate = null; + month.lastDate = null; + month.number = date.month; + month.year = date.year; + month.weeks = month.weeks || []; + month.weekdays = month.weekdays || []; + date = getFirstViewDate(calendar, date, firstDayOfWeek); + // month has weeks + for (var week = 0; week < calendar.getWeeksPerMonth(); week++) { + /** @type {?} */ + var weekObject = month.weeks[week]; + if (!weekObject) { + weekObject = month.weeks[week] = { number: 0, days: [], collapsed: true }; + } + /** @type {?} */ + var days = weekObject.days; + // week has days + for (var day = 0; day < calendar.getDaysPerWeek(); day++) { + if (week === 0) { + month.weekdays[day] = calendar.getWeekday(date); + } + /** @type {?} */ + var newDate = new NgbDate(date.year, date.month, date.day); + /** @type {?} */ + var nextDate = calendar.getNext(newDate); + /** @type {?} */ + var ariaLabel = i18n.getDayAriaLabel(newDate); + // marking date as disabled + /** @type {?} */ + var disabled = !!((minDate && newDate.before(minDate)) || (maxDate && newDate.after(maxDate))); + if (!disabled && markDisabled) { + disabled = markDisabled(newDate, { month: month.number, year: month.year }); + } + // today + /** @type {?} */ + var today = newDate.equals(calendarToday); + // adding user-provided data to the context + /** @type {?} */ + var contextUserData = dayTemplateData ? dayTemplateData(newDate, { month: month.number, year: month.year }) : undefined; + // saving first date of the month + if (month.firstDate === null && newDate.month === month.number) { + month.firstDate = newDate; + } + // saving last date of the month + if (newDate.month === month.number && nextDate.month !== month.number) { + month.lastDate = newDate; + } + /** @type {?} */ + var dayObject = days[day]; + if (!dayObject) { + dayObject = days[day] = (/** @type {?} */ ({})); + } + dayObject.date = newDate; + dayObject.context = Object.assign(dayObject.context || {}, { + $implicit: newDate, + date: newDate, + data: contextUserData, + currentMonth: month.number, disabled: disabled, + focused: false, + selected: false, today: today + }); + dayObject.tabindex = -1; + dayObject.ariaLabel = ariaLabel; + dayObject.hidden = false; + date = nextDate; + } + weekObject.number = calendar.getWeekNumber(days.map((/** + * @param {?} day + * @return {?} + */ + function (day) { return day.date; })), firstDayOfWeek); + // marking week as collapsed + weekObject.collapsed = outsideDays === 'collapsed' && days[0].date.month !== month.number && + days[days.length - 1].date.month !== month.number; + } + return month; +} +/** + * @param {?} calendar + * @param {?} date + * @param {?} firstDayOfWeek + * @return {?} + */ +function getFirstViewDate(calendar, date, firstDayOfWeek) { + /** @type {?} */ + var daysPerWeek = calendar.getDaysPerWeek(); + /** @type {?} */ + var firstMonthDate = new NgbDate(date.year, date.month, 1); + /** @type {?} */ + var dayOfWeek = calendar.getWeekday(firstMonthDate) % daysPerWeek; + return calendar.getPrev(firstMonthDate, 'd', (daysPerWeek + dayOfWeek - firstDayOfWeek) % daysPerWeek); +} + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * @param {?} locale + * @return {?} + */ +function NGB_DATEPICKER_18N_FACTORY(locale) { + return new NgbDatepickerI18nDefault(locale); +} +/** + * A service supplying i18n data to the datepicker component. + * + * The default implementation of this service uses the Angular locale and registered locale data for + * weekdays and month names (as explained in the Angular i18n guide). + * + * It also provides a way to i18n data that depends on calendar calculations, like aria labels, day, week and year + * numerals. For other static labels the datepicker uses the default Angular i18n. + * + * See the [i18n demo](#/components/datepicker/examples#i18n) and + * [Hebrew calendar demo](#/components/datepicker/calendars#hebrew) on how to extend this class and define + * a custom provider for i18n. + * @abstract + */ +var NgbDatepickerI18n = /** @class */ (function () { + function NgbDatepickerI18n() { + } + /** + * Returns the textual representation of a day that is rendered in a day cell. + * + * @since 3.0.0 + */ + /** + * Returns the textual representation of a day that is rendered in a day cell. + * + * \@since 3.0.0 + * @param {?} date + * @return {?} + */ + NgbDatepickerI18n.prototype.getDayNumerals = /** + * Returns the textual representation of a day that is rendered in a day cell. + * + * \@since 3.0.0 + * @param {?} date + * @return {?} + */ + function (date) { return "" + date.day; }; + /** + * Returns the textual representation of a week number rendered by datepicker. + * + * @since 3.0.0 + */ + /** + * Returns the textual representation of a week number rendered by datepicker. + * + * \@since 3.0.0 + * @param {?} weekNumber + * @return {?} + */ + NgbDatepickerI18n.prototype.getWeekNumerals = /** + * Returns the textual representation of a week number rendered by datepicker. + * + * \@since 3.0.0 + * @param {?} weekNumber + * @return {?} + */ + function (weekNumber) { return "" + weekNumber; }; + /** + * Returns the textual representation of a year that is rendered in the datepicker year select box. + * + * @since 3.0.0 + */ + /** + * Returns the textual representation of a year that is rendered in the datepicker year select box. + * + * \@since 3.0.0 + * @param {?} year + * @return {?} + */ + NgbDatepickerI18n.prototype.getYearNumerals = /** + * Returns the textual representation of a year that is rendered in the datepicker year select box. + * + * \@since 3.0.0 + * @param {?} year + * @return {?} + */ + function (year) { return "" + year; }; + NgbDatepickerI18n.decorators = [ + { type: Injectable, args: [{ providedIn: 'root', useFactory: NGB_DATEPICKER_18N_FACTORY, deps: [LOCALE_ID] },] } + ]; + /** @nocollapse */ NgbDatepickerI18n.ngInjectableDef = ɵɵdefineInjectable({ factory: function NgbDatepickerI18n_Factory() { return NGB_DATEPICKER_18N_FACTORY(ɵɵinject(LOCALE_ID)); }, token: NgbDatepickerI18n, providedIn: "root" }); + return NgbDatepickerI18n; +}()); +var NgbDatepickerI18nDefault = /** @class */ (function (_super) { + __extends(NgbDatepickerI18nDefault, _super); + function NgbDatepickerI18nDefault(_locale) { + var _this = _super.call(this) || this; + _this._locale = _locale; + /** @type {?} */ + var weekdaysStartingOnSunday = getLocaleDayNames(_locale, FormStyle.Standalone, TranslationWidth.Short); + _this._weekdaysShort = weekdaysStartingOnSunday.map((/** + * @param {?} day + * @param {?} index + * @return {?} + */ + function (day, index) { return weekdaysStartingOnSunday[(index + 1) % 7]; })); + _this._monthsShort = getLocaleMonthNames(_locale, FormStyle.Standalone, TranslationWidth.Abbreviated); + _this._monthsFull = getLocaleMonthNames(_locale, FormStyle.Standalone, TranslationWidth.Wide); + return _this; + } + /** + * @param {?} weekday + * @return {?} + */ + NgbDatepickerI18nDefault.prototype.getWeekdayShortName = /** + * @param {?} weekday + * @return {?} + */ + function (weekday) { return this._weekdaysShort[weekday - 1]; }; + /** + * @param {?} month + * @return {?} + */ + NgbDatepickerI18nDefault.prototype.getMonthShortName = /** + * @param {?} month + * @return {?} + */ + function (month) { return this._monthsShort[month - 1]; }; + /** + * @param {?} month + * @return {?} + */ + NgbDatepickerI18nDefault.prototype.getMonthFullName = /** + * @param {?} month + * @return {?} + */ + function (month) { return this._monthsFull[month - 1]; }; + /** + * @param {?} date + * @return {?} + */ + NgbDatepickerI18nDefault.prototype.getDayAriaLabel = /** + * @param {?} date + * @return {?} + */ + function (date) { + /** @type {?} */ + var jsDate = new Date(date.year, date.month - 1, date.day); + return formatDate(jsDate, 'fullDate', this._locale); + }; + NgbDatepickerI18nDefault.decorators = [ + { type: Injectable } + ]; + /** @nocollapse */ + NgbDatepickerI18nDefault.ctorParameters = function () { return [ + { type: String, decorators: [{ type: Inject, args: [LOCALE_ID,] }] } + ]; }; + return NgbDatepickerI18nDefault; +}(NgbDatepickerI18n)); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +var NgbDatepickerService = /** @class */ (function () { + function NgbDatepickerService(_calendar, _i18n) { + this._calendar = _calendar; + this._i18n = _i18n; + this._model$ = new Subject(); + this._select$ = new Subject(); + this._state = { + disabled: false, + displayMonths: 1, + firstDayOfWeek: 1, + focusVisible: false, + months: [], + navigation: 'select', + outsideDays: 'visible', + prevDisabled: false, + nextDisabled: false, + selectBoxes: { years: [], months: [] }, + selectedDate: null + }; + } + Object.defineProperty(NgbDatepickerService.prototype, "model$", { + get: /** + * @return {?} + */ + function () { return this._model$.pipe(filter((/** + * @param {?} model + * @return {?} + */ + function (model) { return model.months.length > 0; }))); }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbDatepickerService.prototype, "select$", { + get: /** + * @return {?} + */ + function () { return this._select$.pipe(filter((/** + * @param {?} date + * @return {?} + */ + function (date) { return date !== null; }))); }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbDatepickerService.prototype, "dayTemplateData", { + set: /** + * @param {?} dayTemplateData + * @return {?} + */ + function (dayTemplateData) { + if (this._state.dayTemplateData !== dayTemplateData) { + this._nextState({ dayTemplateData: dayTemplateData }); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbDatepickerService.prototype, "disabled", { + set: /** + * @param {?} disabled + * @return {?} + */ + function (disabled) { + if (this._state.disabled !== disabled) { + this._nextState({ disabled: disabled }); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbDatepickerService.prototype, "displayMonths", { + set: /** + * @param {?} displayMonths + * @return {?} + */ + function (displayMonths) { + displayMonths = toInteger(displayMonths); + if (isInteger(displayMonths) && displayMonths > 0 && this._state.displayMonths !== displayMonths) { + this._nextState({ displayMonths: displayMonths }); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbDatepickerService.prototype, "firstDayOfWeek", { + set: /** + * @param {?} firstDayOfWeek + * @return {?} + */ + function (firstDayOfWeek) { + firstDayOfWeek = toInteger(firstDayOfWeek); + if (isInteger(firstDayOfWeek) && firstDayOfWeek >= 0 && this._state.firstDayOfWeek !== firstDayOfWeek) { + this._nextState({ firstDayOfWeek: firstDayOfWeek }); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbDatepickerService.prototype, "focusVisible", { + set: /** + * @param {?} focusVisible + * @return {?} + */ + function (focusVisible) { + if (this._state.focusVisible !== focusVisible && !this._state.disabled) { + this._nextState({ focusVisible: focusVisible }); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbDatepickerService.prototype, "maxDate", { + set: /** + * @param {?} date + * @return {?} + */ + function (date) { + /** @type {?} */ + var maxDate = this.toValidDate(date, null); + if (isChangedDate(this._state.maxDate, maxDate)) { + this._nextState({ maxDate: maxDate }); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbDatepickerService.prototype, "markDisabled", { + set: /** + * @param {?} markDisabled + * @return {?} + */ + function (markDisabled) { + if (this._state.markDisabled !== markDisabled) { + this._nextState({ markDisabled: markDisabled }); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbDatepickerService.prototype, "minDate", { + set: /** + * @param {?} date + * @return {?} + */ + function (date) { + /** @type {?} */ + var minDate = this.toValidDate(date, null); + if (isChangedDate(this._state.minDate, minDate)) { + this._nextState({ minDate: minDate }); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbDatepickerService.prototype, "navigation", { + set: /** + * @param {?} navigation + * @return {?} + */ + function (navigation) { + if (this._state.navigation !== navigation) { + this._nextState({ navigation: navigation }); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbDatepickerService.prototype, "outsideDays", { + set: /** + * @param {?} outsideDays + * @return {?} + */ + function (outsideDays) { + if (this._state.outsideDays !== outsideDays) { + this._nextState({ outsideDays: outsideDays }); + } + }, + enumerable: true, + configurable: true + }); + /** + * @param {?} date + * @return {?} + */ + NgbDatepickerService.prototype.focus = /** + * @param {?} date + * @return {?} + */ + function (date) { + if (!this._state.disabled && this._calendar.isValid(date) && isChangedDate(this._state.focusDate, date)) { + this._nextState({ focusDate: date }); + } + }; + /** + * @param {?=} period + * @param {?=} number + * @return {?} + */ + NgbDatepickerService.prototype.focusMove = /** + * @param {?=} period + * @param {?=} number + * @return {?} + */ + function (period, number) { + this.focus(this._calendar.getNext(this._state.focusDate, period, number)); + }; + /** + * @return {?} + */ + NgbDatepickerService.prototype.focusSelect = /** + * @return {?} + */ + function () { + if (isDateSelectable(this._state.focusDate, this._state)) { + this.select(this._state.focusDate, { emitEvent: true }); + } + }; + /** + * @param {?} date + * @return {?} + */ + NgbDatepickerService.prototype.open = /** + * @param {?} date + * @return {?} + */ + function (date) { + /** @type {?} */ + var firstDate = this.toValidDate(date, this._calendar.getToday()); + if (!this._state.disabled && (!this._state.firstDate || isChangedMonth(this._state.firstDate, date))) { + this._nextState({ firstDate: firstDate }); + } + }; + /** + * @param {?} date + * @param {?=} options + * @return {?} + */ + NgbDatepickerService.prototype.select = /** + * @param {?} date + * @param {?=} options + * @return {?} + */ + function (date, options) { + if (options === void 0) { options = {}; } + /** @type {?} */ + var selectedDate = this.toValidDate(date, null); + if (!this._state.disabled) { + if (isChangedDate(this._state.selectedDate, selectedDate)) { + this._nextState({ selectedDate: selectedDate }); + } + if (options.emitEvent && isDateSelectable(selectedDate, this._state)) { + this._select$.next(selectedDate); + } + } + }; + /** + * @param {?} date + * @param {?=} defaultValue + * @return {?} + */ + NgbDatepickerService.prototype.toValidDate = /** + * @param {?} date + * @param {?=} defaultValue + * @return {?} + */ + function (date, defaultValue) { + /** @type {?} */ + var ngbDate = NgbDate.from(date); + if (defaultValue === undefined) { + defaultValue = this._calendar.getToday(); + } + return this._calendar.isValid(ngbDate) ? ngbDate : defaultValue; + }; + /** + * @private + * @param {?} patch + * @return {?} + */ + NgbDatepickerService.prototype._nextState = /** + * @private + * @param {?} patch + * @return {?} + */ + function (patch) { + /** @type {?} */ + var newState = this._updateState(patch); + this._patchContexts(newState); + this._state = newState; + this._model$.next(this._state); + }; + /** + * @private + * @param {?} state + * @return {?} + */ + NgbDatepickerService.prototype._patchContexts = /** + * @private + * @param {?} state + * @return {?} + */ + function (state) { + var months = state.months, displayMonths = state.displayMonths, selectedDate = state.selectedDate, focusDate = state.focusDate, focusVisible = state.focusVisible, disabled = state.disabled, outsideDays = state.outsideDays; + state.months.forEach((/** + * @param {?} month + * @return {?} + */ + function (month) { + month.weeks.forEach((/** + * @param {?} week + * @return {?} + */ + function (week) { + week.days.forEach((/** + * @param {?} day + * @return {?} + */ + function (day) { + // patch focus flag + if (focusDate) { + day.context.focused = focusDate.equals(day.date) && focusVisible; + } + // calculating tabindex + day.tabindex = !disabled && day.date.equals(focusDate) && focusDate.month === month.number ? 0 : -1; + // override context disabled + if (disabled === true) { + day.context.disabled = true; + } + // patch selection flag + if (selectedDate !== undefined) { + day.context.selected = selectedDate !== null && selectedDate.equals(day.date); + } + // visibility + if (month.number !== day.date.month) { + day.hidden = outsideDays === 'hidden' || outsideDays === 'collapsed' || + (displayMonths > 1 && day.date.after(months[0].firstDate) && + day.date.before(months[displayMonths - 1].lastDate)); + } + })); + })); + })); + }; + /** + * @private + * @param {?} patch + * @return {?} + */ + NgbDatepickerService.prototype._updateState = /** + * @private + * @param {?} patch + * @return {?} + */ + function (patch) { + // patching fields + /** @type {?} */ + var state = Object.assign({}, this._state, patch); + /** @type {?} */ + var startDate = state.firstDate; + // min/max dates changed + if ('minDate' in patch || 'maxDate' in patch) { + checkMinBeforeMax(state.minDate, state.maxDate); + state.focusDate = checkDateInRange(state.focusDate, state.minDate, state.maxDate); + state.firstDate = checkDateInRange(state.firstDate, state.minDate, state.maxDate); + startDate = state.focusDate; + } + // disabled + if ('disabled' in patch) { + state.focusVisible = false; + } + // initial rebuild via 'select()' + if ('selectedDate' in patch && this._state.months.length === 0) { + startDate = state.selectedDate; + } + // terminate early if only focus visibility was changed + if ('focusVisible' in patch) { + return state; + } + // focus date changed + if ('focusDate' in patch) { + state.focusDate = checkDateInRange(state.focusDate, state.minDate, state.maxDate); + startDate = state.focusDate; + // nothing to rebuild if only focus changed and it is still visible + if (state.months.length !== 0 && !state.focusDate.before(state.firstDate) && + !state.focusDate.after(state.lastDate)) { + return state; + } + } + // first date changed + if ('firstDate' in patch) { + state.firstDate = checkDateInRange(state.firstDate, state.minDate, state.maxDate); + startDate = state.firstDate; + } + // rebuilding months + if (startDate) { + /** @type {?} */ + var forceRebuild = 'dayTemplateData' in patch || 'firstDayOfWeek' in patch || 'markDisabled' in patch || + 'minDate' in patch || 'maxDate' in patch || 'disabled' in patch || 'outsideDays' in patch; + /** @type {?} */ + var months = buildMonths(this._calendar, startDate, state, this._i18n, forceRebuild); + // updating months and boundary dates + state.months = months; + state.firstDate = months.length > 0 ? months[0].firstDate : undefined; + state.lastDate = months.length > 0 ? months[months.length - 1].lastDate : undefined; + // reset selected date if 'markDisabled' returns true + if ('selectedDate' in patch && !isDateSelectable(state.selectedDate, state)) { + state.selectedDate = null; + } + // adjusting focus after months were built + if ('firstDate' in patch) { + if (state.focusDate === undefined || state.focusDate.before(state.firstDate) || + state.focusDate.after(state.lastDate)) { + state.focusDate = startDate; + } + } + // adjusting months/years for the select box navigation + /** @type {?} */ + var yearChanged = !this._state.firstDate || this._state.firstDate.year !== state.firstDate.year; + /** @type {?} */ + var monthChanged = !this._state.firstDate || this._state.firstDate.month !== state.firstDate.month; + if (state.navigation === 'select') { + // years -> boundaries (min/max were changed) + if ('minDate' in patch || 'maxDate' in patch || state.selectBoxes.years.length === 0 || yearChanged) { + state.selectBoxes.years = generateSelectBoxYears(state.firstDate, state.minDate, state.maxDate); + } + // months -> when current year or boundaries change + if ('minDate' in patch || 'maxDate' in patch || state.selectBoxes.months.length === 0 || yearChanged) { + state.selectBoxes.months = + generateSelectBoxMonths(this._calendar, state.firstDate, state.minDate, state.maxDate); + } + } + else { + state.selectBoxes = { years: [], months: [] }; + } + // updating navigation arrows -> boundaries change (min/max) or month/year changes + if ((state.navigation === 'arrows' || state.navigation === 'select') && + (monthChanged || yearChanged || 'minDate' in patch || 'maxDate' in patch || 'disabled' in patch)) { + state.prevDisabled = state.disabled || prevMonthDisabled(this._calendar, state.firstDate, state.minDate); + state.nextDisabled = state.disabled || nextMonthDisabled(this._calendar, state.lastDate, state.maxDate); + } + } + return state; + }; + NgbDatepickerService.decorators = [ + { type: Injectable } + ]; + /** @nocollapse */ + NgbDatepickerService.ctorParameters = function () { return [ + { type: NgbCalendar }, + { type: NgbDatepickerI18n } + ]; }; + return NgbDatepickerService; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @enum {number} */ +var Key = { + Tab: 9, + Enter: 13, + Escape: 27, + Space: 32, + PageUp: 33, + PageDown: 34, + End: 35, + Home: 36, + ArrowLeft: 37, + ArrowUp: 38, + ArrowRight: 39, + ArrowDown: 40, +}; +Key[Key.Tab] = 'Tab'; +Key[Key.Enter] = 'Enter'; +Key[Key.Escape] = 'Escape'; +Key[Key.Space] = 'Space'; +Key[Key.PageUp] = 'PageUp'; +Key[Key.PageDown] = 'PageDown'; +Key[Key.End] = 'End'; +Key[Key.Home] = 'Home'; +Key[Key.ArrowLeft] = 'ArrowLeft'; +Key[Key.ArrowUp] = 'ArrowUp'; +Key[Key.ArrowRight] = 'ArrowRight'; +Key[Key.ArrowDown] = 'ArrowDown'; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +var NgbDatepickerKeyMapService = /** @class */ (function () { + function NgbDatepickerKeyMapService(_service, _calendar) { + var _this = this; + this._service = _service; + this._calendar = _calendar; + _service.model$.subscribe((/** + * @param {?} model + * @return {?} + */ + function (model) { + _this._minDate = model.minDate; + _this._maxDate = model.maxDate; + _this._firstViewDate = model.firstDate; + _this._lastViewDate = model.lastDate; + })); + } + /** + * @param {?} event + * @return {?} + */ + NgbDatepickerKeyMapService.prototype.processKey = /** + * @param {?} event + * @return {?} + */ + function (event) { + // tslint:disable-next-line:deprecation + switch (event.which) { + case Key.PageUp: + this._service.focusMove(event.shiftKey ? 'y' : 'm', -1); + break; + case Key.PageDown: + this._service.focusMove(event.shiftKey ? 'y' : 'm', 1); + break; + case Key.End: + this._service.focus(event.shiftKey ? this._maxDate : this._lastViewDate); + break; + case Key.Home: + this._service.focus(event.shiftKey ? this._minDate : this._firstViewDate); + break; + case Key.ArrowLeft: + this._service.focusMove('d', -1); + break; + case Key.ArrowUp: + this._service.focusMove('d', -this._calendar.getDaysPerWeek()); + break; + case Key.ArrowRight: + this._service.focusMove('d', 1); + break; + case Key.ArrowDown: + this._service.focusMove('d', this._calendar.getDaysPerWeek()); + break; + case Key.Enter: + case Key.Space: + this._service.focusSelect(); + break; + default: + return; + } + // note 'return' in default case + event.preventDefault(); + event.stopPropagation(); + }; + NgbDatepickerKeyMapService.decorators = [ + { type: Injectable } + ]; + /** @nocollapse */ + NgbDatepickerKeyMapService.ctorParameters = function () { return [ + { type: NgbDatepickerService }, + { type: NgbCalendar } + ]; }; + return NgbDatepickerKeyMapService; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @enum {number} */ +var NavigationEvent = { + PREV: 0, + NEXT: 1, +}; +NavigationEvent[NavigationEvent.PREV] = 'PREV'; +NavigationEvent[NavigationEvent.NEXT] = 'NEXT'; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * A configuration service for the [`NgbDatepicker`](#/components/datepicker/api#NgbDatepicker) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the datepickers used in the application. + */ +var NgbDatepickerConfig = /** @class */ (function () { + function NgbDatepickerConfig() { + this.displayMonths = 1; + this.firstDayOfWeek = 1; + this.navigation = 'select'; + this.outsideDays = 'visible'; + this.showWeekdays = true; + this.showWeekNumbers = false; + } + NgbDatepickerConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ NgbDatepickerConfig.ngInjectableDef = ɵɵdefineInjectable({ factory: function NgbDatepickerConfig_Factory() { return new NgbDatepickerConfig(); }, token: NgbDatepickerConfig, providedIn: "root" }); + return NgbDatepickerConfig; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * @return {?} + */ +function NGB_DATEPICKER_DATE_ADAPTER_FACTORY() { + return new NgbDateStructAdapter(); +} +/** + * An abstract service that does the conversion between the internal datepicker `NgbDateStruct` model and + * any provided user date model `D`, ex. a string, a native date, etc. + * + * The adapter is used **only** for conversion when binding datepicker to a form control, + * ex. `[(ngModel)]="userDateModel"`. Here `userDateModel` can be of any type. + * + * The default datepicker implementation assumes we use `NgbDateStruct` as a user model. + * + * See the [date format overview](#/components/datepicker/overview#date-model) for more details + * and the [custom adapter demo](#/components/datepicker/examples#adapter) for an example. + * @abstract + * @template D + */ +var NgbDateAdapter = /** @class */ (function () { + function NgbDateAdapter() { + } + NgbDateAdapter.decorators = [ + { type: Injectable, args: [{ providedIn: 'root', useFactory: NGB_DATEPICKER_DATE_ADAPTER_FACTORY },] } + ]; + /** @nocollapse */ NgbDateAdapter.ngInjectableDef = ɵɵdefineInjectable({ factory: NGB_DATEPICKER_DATE_ADAPTER_FACTORY, token: NgbDateAdapter, providedIn: "root" }); + return NgbDateAdapter; +}()); +var NgbDateStructAdapter = /** @class */ (function (_super) { + __extends(NgbDateStructAdapter, _super); + function NgbDateStructAdapter() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * Converts a NgbDateStruct value into NgbDateStruct value + */ + /** + * Converts a NgbDateStruct value into NgbDateStruct value + * @param {?} date + * @return {?} + */ + NgbDateStructAdapter.prototype.fromModel = /** + * Converts a NgbDateStruct value into NgbDateStruct value + * @param {?} date + * @return {?} + */ + function (date) { + return (date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day)) ? + { year: date.year, month: date.month, day: date.day } : + null; + }; + /** + * Converts a NgbDateStruct value into NgbDateStruct value + */ + /** + * Converts a NgbDateStruct value into NgbDateStruct value + * @param {?} date + * @return {?} + */ + NgbDateStructAdapter.prototype.toModel = /** + * Converts a NgbDateStruct value into NgbDateStruct value + * @param {?} date + * @return {?} + */ + function (date) { + return (date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day)) ? + { year: date.year, month: date.month, day: date.day } : + null; + }; + NgbDateStructAdapter.decorators = [ + { type: Injectable } + ]; + return NgbDateStructAdapter; +}(NgbDateAdapter)); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @type {?} */ +var NGB_DATEPICKER_VALUE_ACCESSOR = { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef((/** + * @return {?} + */ + function () { return NgbDatepicker; })), + multi: true +}; +/** + * A highly configurable component that helps you with selecting calendar dates. + * + * `NgbDatepicker` is meant to be displayed inline on a page or put inside a popup. + */ +var NgbDatepicker = /** @class */ (function () { + function NgbDatepicker(_keyMapService, _service, _calendar, i18n, config, _cd, _elementRef, _ngbDateAdapter, _ngZone) { + var _this = this; + this._keyMapService = _keyMapService; + this._service = _service; + this._calendar = _calendar; + this.i18n = i18n; + this._cd = _cd; + this._elementRef = _elementRef; + this._ngbDateAdapter = _ngbDateAdapter; + this._ngZone = _ngZone; + this._destroyed$ = new Subject(); + /** + * An event emitted right before the navigation happens and displayed month changes. + * + * See [`NgbDatepickerNavigateEvent`](#/components/datepicker/api#NgbDatepickerNavigateEvent) for the payload info. + */ + this.navigate = new EventEmitter(); + /** + * An event emitted when user selects a date using keyboard or mouse. + * + * The payload of the event is currently selected `NgbDate`. + */ + this.select = new EventEmitter(); + this.onChange = (/** + * @param {?} _ + * @return {?} + */ + function (_) { }); + this.onTouched = (/** + * @return {?} + */ + function () { }); + ['dayTemplate', 'dayTemplateData', 'displayMonths', 'firstDayOfWeek', 'footerTemplate', 'markDisabled', 'minDate', + 'maxDate', 'navigation', 'outsideDays', 'showWeekdays', 'showWeekNumbers', 'startDate'] + .forEach((/** + * @param {?} input + * @return {?} + */ + function (input) { return _this[input] = config[input]; })); + _service.select$.pipe(takeUntil(this._destroyed$)).subscribe((/** + * @param {?} date + * @return {?} + */ + function (date) { _this.select.emit(date); })); + _service.model$.pipe(takeUntil(this._destroyed$)).subscribe((/** + * @param {?} model + * @return {?} + */ + function (model) { + /** @type {?} */ + var newDate = model.firstDate; + /** @type {?} */ + var oldDate = _this.model ? _this.model.firstDate : null; + /** @type {?} */ + var navigationPrevented = false; + // emitting navigation event if the first month changes + if (!newDate.equals(oldDate)) { + _this.navigate.emit({ + current: oldDate ? { year: oldDate.year, month: oldDate.month } : null, + next: { year: newDate.year, month: newDate.month }, + preventDefault: (/** + * @return {?} + */ + function () { return navigationPrevented = true; }) + }); + // can't prevent the very first navigation + if (navigationPrevented && oldDate !== null) { + _this._service.open(oldDate); + return; + } + } + /** @type {?} */ + var newSelectedDate = model.selectedDate; + /** @type {?} */ + var newFocusedDate = model.focusDate; + /** @type {?} */ + var oldFocusedDate = _this.model ? _this.model.focusDate : null; + _this.model = model; + // handling selection change + if (isChangedDate(newSelectedDate, _this._controlValue)) { + _this._controlValue = newSelectedDate; + _this.onTouched(); + _this.onChange(_this._ngbDateAdapter.toModel(newSelectedDate)); + } + // handling focus change + if (isChangedDate(newFocusedDate, oldFocusedDate) && oldFocusedDate && model.focusVisible) { + _this.focus(); + } + _cd.markForCheck(); + })); + } + /** + * @return {?} + */ + NgbDatepicker.prototype.focus = /** + * @return {?} + */ + function () { + var _this = this; + this._ngZone.onStable.asObservable().pipe(take(1)).subscribe((/** + * @return {?} + */ + function () { + /** @type {?} */ + var elementToFocus = _this._elementRef.nativeElement.querySelector('div.ngb-dp-day[tabindex="0"]'); + if (elementToFocus) { + elementToFocus.focus(); + } + })); + }; + /** + * Navigates to the provided date. + * + * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec. + * If nothing or invalid date provided calendar will open current month. + * + * Use the `[startDate]` input as an alternative. + */ + /** + * Navigates to the provided date. + * + * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec. + * If nothing or invalid date provided calendar will open current month. + * + * Use the `[startDate]` input as an alternative. + * @param {?=} date + * @return {?} + */ + NgbDatepicker.prototype.navigateTo = /** + * Navigates to the provided date. + * + * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec. + * If nothing or invalid date provided calendar will open current month. + * + * Use the `[startDate]` input as an alternative. + * @param {?=} date + * @return {?} + */ + function (date) { + this._service.open(NgbDate.from(date ? date.day ? (/** @type {?} */ (date)) : __assign({}, date, { day: 1 }) : null)); + }; + /** + * @return {?} + */ + NgbDatepicker.prototype.ngAfterViewInit = /** + * @return {?} + */ + function () { + var _this = this; + this._ngZone.runOutsideAngular((/** + * @return {?} + */ + function () { + /** @type {?} */ + var focusIns$ = fromEvent(_this._monthsEl.nativeElement, 'focusin'); + /** @type {?} */ + var focusOuts$ = fromEvent(_this._monthsEl.nativeElement, 'focusout'); + // we're changing 'focusVisible' only when entering or leaving months view + // and ignoring all focus events where both 'target' and 'related' target are day cells + merge(focusIns$, focusOuts$) + .pipe(filter((/** + * @param {?} __0 + * @return {?} + */ + function (_a) { + var target = _a.target, relatedTarget = _a.relatedTarget; + return !(hasClassName(target, 'ngb-dp-day') && hasClassName(relatedTarget, 'ngb-dp-day')); + })), takeUntil(_this._destroyed$)) + .subscribe((/** + * @param {?} __0 + * @return {?} + */ + function (_a) { + var type = _a.type; + return _this._ngZone.run((/** + * @return {?} + */ + function () { return _this._service.focusVisible = type === 'focusin'; })); + })); + })); + }; + /** + * @return {?} + */ + NgbDatepicker.prototype.ngOnDestroy = /** + * @return {?} + */ + function () { this._destroyed$.next(); }; + /** + * @return {?} + */ + NgbDatepicker.prototype.ngOnInit = /** + * @return {?} + */ + function () { + var _this = this; + if (this.model === undefined) { + ['dayTemplateData', 'displayMonths', 'markDisabled', 'firstDayOfWeek', 'navigation', 'minDate', 'maxDate', + 'outsideDays'] + .forEach((/** + * @param {?} input + * @return {?} + */ + function (input) { return _this._service[input] = _this[input]; })); + this.navigateTo(this.startDate); + } + }; + /** + * @param {?} changes + * @return {?} + */ + NgbDatepicker.prototype.ngOnChanges = /** + * @param {?} changes + * @return {?} + */ + function (changes) { + var _this = this; + ['dayTemplateData', 'displayMonths', 'markDisabled', 'firstDayOfWeek', 'navigation', 'minDate', 'maxDate', + 'outsideDays'] + .filter((/** + * @param {?} input + * @return {?} + */ + function (input) { return input in changes; })) + .forEach((/** + * @param {?} input + * @return {?} + */ + function (input) { return _this._service[input] = _this[input]; })); + if ('startDate' in changes) { + var _a = changes.startDate, currentValue = _a.currentValue, previousValue = _a.previousValue; + if (isChangedMonth(previousValue, currentValue)) { + this.navigateTo(this.startDate); + } + } + }; + /** + * @param {?} date + * @return {?} + */ + NgbDatepicker.prototype.onDateSelect = /** + * @param {?} date + * @return {?} + */ + function (date) { + this._service.focus(date); + this._service.select(date, { emitEvent: true }); + }; + /** + * @param {?} event + * @return {?} + */ + NgbDatepicker.prototype.onKeyDown = /** + * @param {?} event + * @return {?} + */ + function (event) { this._keyMapService.processKey(event); }; + /** + * @param {?} date + * @return {?} + */ + NgbDatepicker.prototype.onNavigateDateSelect = /** + * @param {?} date + * @return {?} + */ + function (date) { this._service.open(date); }; + /** + * @param {?} event + * @return {?} + */ + NgbDatepicker.prototype.onNavigateEvent = /** + * @param {?} event + * @return {?} + */ + function (event) { + switch (event) { + case NavigationEvent.PREV: + this._service.open(this._calendar.getPrev(this.model.firstDate, 'm', 1)); + break; + case NavigationEvent.NEXT: + this._service.open(this._calendar.getNext(this.model.firstDate, 'm', 1)); + break; + } + }; + /** + * @param {?} fn + * @return {?} + */ + NgbDatepicker.prototype.registerOnChange = /** + * @param {?} fn + * @return {?} + */ + function (fn) { this.onChange = fn; }; + /** + * @param {?} fn + * @return {?} + */ + NgbDatepicker.prototype.registerOnTouched = /** + * @param {?} fn + * @return {?} + */ + function (fn) { this.onTouched = fn; }; + /** + * @param {?} isDisabled + * @return {?} + */ + NgbDatepicker.prototype.setDisabledState = /** + * @param {?} isDisabled + * @return {?} + */ + function (isDisabled) { this._service.disabled = isDisabled; }; + /** + * @param {?} value + * @return {?} + */ + NgbDatepicker.prototype.writeValue = /** + * @param {?} value + * @return {?} + */ + function (value) { + this._controlValue = NgbDate.from(this._ngbDateAdapter.fromModel(value)); + this._service.select(this._controlValue); + }; + NgbDatepicker.decorators = [ + { type: Component, args: [{ + exportAs: 'ngbDatepicker', + selector: 'ngb-datepicker', + changeDetection: ChangeDetectionStrategy.OnPush, + encapsulation: ViewEncapsulation.None, + template: "\n \n
\n
\n
\n\n
\n \n \n
\n\n
\n \n
\n
1 && navigation === 'select')\"\n class=\"ngb-dp-month-name\">\n {{ i18n.getMonthFullName(month.number, month.year) }} {{ i18n.getYearNumerals(month.year) }}\n
\n \n \n
\n
\n
\n\n \n ", + providers: [NGB_DATEPICKER_VALUE_ACCESSOR, NgbDatepickerService, NgbDatepickerKeyMapService], + styles: ["ngb-datepicker{border:1px solid #dfdfdf;border-radius:.25rem;display:inline-block}ngb-datepicker-month-view{pointer-events:auto}ngb-datepicker.dropdown-menu{padding:0}.ngb-dp-body{z-index:1050}.ngb-dp-header{border-bottom:0;border-radius:.25rem .25rem 0 0;padding-top:.25rem;background-color:#f8f9fa}.ngb-dp-months{display:-ms-flexbox;display:flex}.ngb-dp-month{pointer-events:none}.ngb-dp-month-name{font-size:larger;height:2rem;line-height:2rem;text-align:center;background-color:#f8f9fa}.ngb-dp-month+.ngb-dp-month .ngb-dp-month-name,.ngb-dp-month+.ngb-dp-month .ngb-dp-week{padding-left:1rem}.ngb-dp-month:last-child .ngb-dp-week{padding-right:.25rem}.ngb-dp-month:first-child .ngb-dp-week{padding-left:.25rem}.ngb-dp-month .ngb-dp-week:last-child{padding-bottom:.25rem}"] + }] } + ]; + /** @nocollapse */ + NgbDatepicker.ctorParameters = function () { return [ + { type: NgbDatepickerKeyMapService }, + { type: NgbDatepickerService }, + { type: NgbCalendar }, + { type: NgbDatepickerI18n }, + { type: NgbDatepickerConfig }, + { type: ChangeDetectorRef }, + { type: ElementRef }, + { type: NgbDateAdapter }, + { type: NgZone } + ]; }; + NgbDatepicker.propDecorators = { + _monthsEl: [{ type: ViewChild, args: ['months', { static: true },] }], + dayTemplate: [{ type: Input }], + dayTemplateData: [{ type: Input }], + displayMonths: [{ type: Input }], + firstDayOfWeek: [{ type: Input }], + footerTemplate: [{ type: Input }], + markDisabled: [{ type: Input }], + maxDate: [{ type: Input }], + minDate: [{ type: Input }], + navigation: [{ type: Input }], + outsideDays: [{ type: Input }], + showWeekdays: [{ type: Input }], + showWeekNumbers: [{ type: Input }], + startDate: [{ type: Input }], + navigate: [{ type: Output }], + select: [{ type: Output }] + }; + return NgbDatepicker; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +var NgbDatepickerMonthView = /** @class */ (function () { + function NgbDatepickerMonthView(i18n) { + this.i18n = i18n; + this.select = new EventEmitter(); + } + /** + * @param {?} day + * @return {?} + */ + NgbDatepickerMonthView.prototype.doSelect = /** + * @param {?} day + * @return {?} + */ + function (day) { + if (!day.context.disabled && !day.hidden) { + this.select.emit(day.date); + } + }; + NgbDatepickerMonthView.decorators = [ + { type: Component, args: [{ + selector: 'ngb-datepicker-month-view', + host: { 'role': 'grid' }, + encapsulation: ViewEncapsulation.None, + template: "\n
\n
\n
\n {{ i18n.getWeekdayShortName(w) }}\n
\n
\n \n
\n
{{ i18n.getWeekNumerals(week.number) }}
\n
\n \n \n \n
\n
\n
\n ", + styles: ["ngb-datepicker-month-view{display:block}.ngb-dp-week-number,.ngb-dp-weekday{line-height:2rem;text-align:center;font-style:italic}.ngb-dp-weekday{color:#5bc0de;color:var(--info)}.ngb-dp-week{border-radius:.25rem;display:-ms-flexbox;display:flex}.ngb-dp-weekdays{border-bottom:1px solid rgba(0,0,0,.125);border-radius:0}.ngb-dp-day,.ngb-dp-week-number,.ngb-dp-weekday{width:2rem;height:2rem}.ngb-dp-day{cursor:pointer}.ngb-dp-day.disabled,.ngb-dp-day.hidden{cursor:default}"] + }] } + ]; + /** @nocollapse */ + NgbDatepickerMonthView.ctorParameters = function () { return [ + { type: NgbDatepickerI18n } + ]; }; + NgbDatepickerMonthView.propDecorators = { + dayTemplate: [{ type: Input }], + month: [{ type: Input }], + showWeekdays: [{ type: Input }], + showWeekNumbers: [{ type: Input }], + select: [{ type: Output }] + }; + return NgbDatepickerMonthView; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +var NgbDatepickerNavigation = /** @class */ (function () { + function NgbDatepickerNavigation(i18n) { + this.i18n = i18n; + this.navigation = NavigationEvent; + this.months = []; + this.navigate = new EventEmitter(); + this.select = new EventEmitter(); + } + NgbDatepickerNavigation.decorators = [ + { type: Component, args: [{ + selector: 'ngb-datepicker-navigation', + changeDetection: ChangeDetectionStrategy.OnPush, + encapsulation: ViewEncapsulation.None, + template: "\n
\n \n
\n \n \n\n \n
0\">
\n
\n {{ i18n.getMonthFullName(month.number, month.year) }} {{ i18n.getYearNumerals(month.year) }}\n
\n
\n
\n
\n \n
\n ", + styles: ["ngb-datepicker-navigation{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.ngb-dp-navigation-chevron{border-style:solid;border-width:.2em .2em 0 0;display:inline-block;width:.75em;height:.75em;margin-left:.25em;margin-right:.15em;-webkit-transform:rotate(-135deg);transform:rotate(-135deg)}.right .ngb-dp-navigation-chevron{-webkit-transform:rotate(45deg);transform:rotate(45deg);margin-left:.15em;margin-right:.25em}.ngb-dp-arrow{display:-ms-flexbox;display:flex;-ms-flex:1 1 auto;flex:1 1 auto;padding-right:0;padding-left:0;margin:0;width:2rem;height:2rem}.ngb-dp-arrow.right{-ms-flex-pack:end;justify-content:flex-end}.ngb-dp-arrow-btn{padding:0 .25rem;margin:0 .5rem;border:none;background-color:transparent;z-index:1}.ngb-dp-arrow-btn:focus{outline-width:1px;outline-style:auto}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.ngb-dp-arrow-btn:focus{outline-style:solid}}.ngb-dp-month-name{font-size:larger;height:2rem;line-height:2rem;text-align:center}.ngb-dp-navigation-select{display:-ms-flexbox;display:flex;-ms-flex:1 1 9rem;flex:1 1 9rem}"] + }] } + ]; + /** @nocollapse */ + NgbDatepickerNavigation.ctorParameters = function () { return [ + { type: NgbDatepickerI18n } + ]; }; + NgbDatepickerNavigation.propDecorators = { + date: [{ type: Input }], + disabled: [{ type: Input }], + months: [{ type: Input }], + showSelect: [{ type: Input }], + prevDisabled: [{ type: Input }], + nextDisabled: [{ type: Input }], + selectBoxes: [{ type: Input }], + navigate: [{ type: Output }], + select: [{ type: Output }] + }; + return NgbDatepickerNavigation; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @type {?} */ +var isContainedIn = (/** + * @param {?} element + * @param {?=} array + * @return {?} + */ +function (element, array) { + return array ? array.some((/** + * @param {?} item + * @return {?} + */ + function (item) { return item.contains(element); })) : false; +}); +/** @type {?} */ +var matchesSelectorIfAny = (/** + * @param {?} element + * @param {?=} selector + * @return {?} + */ +function (element, selector) { + return !selector || closest(element, selector) != null; +}); +// we'll have to use 'touch' events instead of 'mouse' events on iOS and add a more significant delay +// to avoid re-opening when handling (click) on a toggling element +// TODO: use proper Angular platform detection when NgbAutoClose becomes a service and we can inject PLATFORM_ID +/** @type {?} */ +var iOS = false; +if (typeof navigator !== 'undefined') { + iOS = !!navigator.userAgent && /iPad|iPhone|iPod/.test(navigator.userAgent); +} +/** + * @param {?} zone + * @param {?} document + * @param {?} type + * @param {?} close + * @param {?} closed$ + * @param {?} insideElements + * @param {?=} ignoreElements + * @param {?=} insideSelector + * @return {?} + */ +function ngbAutoClose(zone, document, type, close, closed$, insideElements, ignoreElements, insideSelector) { + // closing on ESC and outside clicks + if (type) { + zone.runOutsideAngular((/** + * @return {?} + */ + function () { + /** @type {?} */ + var shouldCloseOnClick = (/** + * @param {?} event + * @return {?} + */ + function (event) { + /** @type {?} */ + var element = (/** @type {?} */ (event.target)); + if ((event instanceof MouseEvent && event.button === 2) || isContainedIn(element, ignoreElements)) { + return false; + } + if (type === 'inside') { + return isContainedIn(element, insideElements) && matchesSelectorIfAny(element, insideSelector); + } + else if (type === 'outside') { + return !isContainedIn(element, insideElements); + } + else /* if (type === true) */ { + return matchesSelectorIfAny(element, insideSelector) || !isContainedIn(element, insideElements); + } + }); + /** @type {?} */ + var escapes$ = fromEvent(document, 'keydown') + .pipe(takeUntil(closed$), + // tslint:disable-next-line:deprecation + filter((/** + * @param {?} e + * @return {?} + */ + function (e) { return e.which === Key.Escape; }))); + // we have to pre-calculate 'shouldCloseOnClick' on 'mousedown/touchstart', + // because on 'mouseup/touchend' DOM nodes might be detached + /** @type {?} */ + var mouseDowns$ = fromEvent(document, iOS ? 'touchstart' : 'mousedown') + .pipe(map(shouldCloseOnClick), takeUntil(closed$)); + /** @type {?} */ + var closeableClicks$ = (/** @type {?} */ (fromEvent(document, iOS ? 'touchend' : 'mouseup') + .pipe(withLatestFrom(mouseDowns$), filter((/** + * @param {?} __0 + * @return {?} + */ + function (_a) { + var _b = __read(_a, 2), _ = _b[0], shouldClose = _b[1]; + return shouldClose; + })), delay(iOS ? 16 : 0), takeUntil(closed$)))); + race([escapes$, closeableClicks$]).subscribe((/** + * @return {?} + */ + function () { return zone.run(close); })); + })); + } +} + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @type {?} */ +var FOCUSABLE_ELEMENTS_SELECTOR = [ + 'a[href]', 'button:not([disabled])', 'input:not([disabled]):not([type="hidden"])', 'select:not([disabled])', + 'textarea:not([disabled])', '[contenteditable]', '[tabindex]:not([tabindex="-1"])' +].join(', '); +/** + * Returns first and last focusable elements inside of a given element based on specific CSS selector + * @param {?} element + * @return {?} + */ +function getFocusableBoundaryElements(element) { + /** @type {?} */ + var list = Array.from((/** @type {?} */ (element.querySelectorAll(FOCUSABLE_ELEMENTS_SELECTOR)))) + .filter((/** + * @param {?} el + * @return {?} + */ + function (el) { return el.tabIndex !== -1; })); + return [list[0], list[list.length - 1]]; +} +/** + * Function that enforces browser focus to be trapped inside a DOM element. + * + * Works only for clicks inside the element and navigation with 'Tab', ignoring clicks outside of the element + * + * \@param element The element around which focus will be trapped inside + * \@param stopFocusTrap$ The observable stream. When completed the focus trap will clean up listeners + * and free internal resources + * \@param refocusOnClick Put the focus back to the last focused element whenever a click occurs on element (default to + * false) + * @type {?} + */ +var ngbFocusTrap = (/** + * @param {?} element + * @param {?} stopFocusTrap$ + * @param {?=} refocusOnClick + * @return {?} + */ +function (element, stopFocusTrap$, refocusOnClick) { + if (refocusOnClick === void 0) { refocusOnClick = false; } + // last focused element + /** @type {?} */ + var lastFocusedElement$ = fromEvent(element, 'focusin').pipe(takeUntil(stopFocusTrap$), map((/** + * @param {?} e + * @return {?} + */ + function (e) { return e.target; }))); + // 'tab' / 'shift+tab' stream + fromEvent(element, 'keydown') + .pipe(takeUntil(stopFocusTrap$), + // tslint:disable:deprecation + filter((/** + * @param {?} e + * @return {?} + */ + function (e) { return e.which === Key.Tab; })), + // tslint:enable:deprecation + withLatestFrom(lastFocusedElement$)) + .subscribe((/** + * @param {?} __0 + * @return {?} + */ + function (_a) { + var _b = __read(_a, 2), tabEvent = _b[0], focusedElement = _b[1]; + var _c = __read(getFocusableBoundaryElements(element), 2), first = _c[0], last = _c[1]; + if ((focusedElement === first || focusedElement === element) && tabEvent.shiftKey) { + last.focus(); + tabEvent.preventDefault(); + } + if (focusedElement === last && !tabEvent.shiftKey) { + first.focus(); + tabEvent.preventDefault(); + } + })); + // inside click + if (refocusOnClick) { + fromEvent(element, 'click') + .pipe(takeUntil(stopFocusTrap$), withLatestFrom(lastFocusedElement$), map((/** + * @param {?} arr + * @return {?} + */ + function (arr) { return (/** @type {?} */ (arr[1])); }))) + .subscribe((/** + * @param {?} lastFocusedElement + * @return {?} + */ + function (lastFocusedElement) { return lastFocusedElement.focus(); })); + } +}); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +// previous version: +// https://github.com/angular-ui/bootstrap/blob/07c31d0731f7cb068a1932b8e01d2312b796b4ec/src/position/position.js +var +// previous version: +// https://github.com/angular-ui/bootstrap/blob/07c31d0731f7cb068a1932b8e01d2312b796b4ec/src/position/position.js +Positioning = /** @class */ (function () { + function Positioning() { + } + /** + * @private + * @param {?} element + * @return {?} + */ + Positioning.prototype.getAllStyles = /** + * @private + * @param {?} element + * @return {?} + */ + function (element) { return window.getComputedStyle(element); }; + /** + * @private + * @param {?} element + * @param {?} prop + * @return {?} + */ + Positioning.prototype.getStyle = /** + * @private + * @param {?} element + * @param {?} prop + * @return {?} + */ + function (element, prop) { return this.getAllStyles(element)[prop]; }; + /** + * @private + * @param {?} element + * @return {?} + */ + Positioning.prototype.isStaticPositioned = /** + * @private + * @param {?} element + * @return {?} + */ + function (element) { + return (this.getStyle(element, 'position') || 'static') === 'static'; + }; + /** + * @private + * @param {?} element + * @return {?} + */ + Positioning.prototype.offsetParent = /** + * @private + * @param {?} element + * @return {?} + */ + function (element) { + /** @type {?} */ + var offsetParentEl = (/** @type {?} */ (element.offsetParent)) || document.documentElement; + while (offsetParentEl && offsetParentEl !== document.documentElement && this.isStaticPositioned(offsetParentEl)) { + offsetParentEl = (/** @type {?} */ (offsetParentEl.offsetParent)); + } + return offsetParentEl || document.documentElement; + }; + /** + * @param {?} element + * @param {?=} round + * @return {?} + */ + Positioning.prototype.position = /** + * @param {?} element + * @param {?=} round + * @return {?} + */ + function (element, round) { + if (round === void 0) { round = true; } + /** @type {?} */ + var elPosition; + /** @type {?} */ + var parentOffset = { width: 0, height: 0, top: 0, bottom: 0, left: 0, right: 0 }; + if (this.getStyle(element, 'position') === 'fixed') { + elPosition = element.getBoundingClientRect(); + elPosition = { + top: elPosition.top, + bottom: elPosition.bottom, + left: elPosition.left, + right: elPosition.right, + height: elPosition.height, + width: elPosition.width + }; + } + else { + /** @type {?} */ + var offsetParentEl = this.offsetParent(element); + elPosition = this.offset(element, false); + if (offsetParentEl !== document.documentElement) { + parentOffset = this.offset(offsetParentEl, false); + } + parentOffset.top += offsetParentEl.clientTop; + parentOffset.left += offsetParentEl.clientLeft; + } + elPosition.top -= parentOffset.top; + elPosition.bottom -= parentOffset.top; + elPosition.left -= parentOffset.left; + elPosition.right -= parentOffset.left; + if (round) { + elPosition.top = Math.round(elPosition.top); + elPosition.bottom = Math.round(elPosition.bottom); + elPosition.left = Math.round(elPosition.left); + elPosition.right = Math.round(elPosition.right); + } + return elPosition; + }; + /** + * @param {?} element + * @param {?=} round + * @return {?} + */ + Positioning.prototype.offset = /** + * @param {?} element + * @param {?=} round + * @return {?} + */ + function (element, round) { + if (round === void 0) { round = true; } + /** @type {?} */ + var elBcr = element.getBoundingClientRect(); + /** @type {?} */ + var viewportOffset = { + top: window.pageYOffset - document.documentElement.clientTop, + left: window.pageXOffset - document.documentElement.clientLeft + }; + /** @type {?} */ + var elOffset = { + height: elBcr.height || element.offsetHeight, + width: elBcr.width || element.offsetWidth, + top: elBcr.top + viewportOffset.top, + bottom: elBcr.bottom + viewportOffset.top, + left: elBcr.left + viewportOffset.left, + right: elBcr.right + viewportOffset.left + }; + if (round) { + elOffset.height = Math.round(elOffset.height); + elOffset.width = Math.round(elOffset.width); + elOffset.top = Math.round(elOffset.top); + elOffset.bottom = Math.round(elOffset.bottom); + elOffset.left = Math.round(elOffset.left); + elOffset.right = Math.round(elOffset.right); + } + return elOffset; + }; + /* + Return false if the element to position is outside the viewport + */ + /* + Return false if the element to position is outside the viewport + */ + /** + * @param {?} hostElement + * @param {?} targetElement + * @param {?} placement + * @param {?=} appendToBody + * @return {?} + */ + Positioning.prototype.positionElements = /* + Return false if the element to position is outside the viewport + */ + /** + * @param {?} hostElement + * @param {?} targetElement + * @param {?} placement + * @param {?=} appendToBody + * @return {?} + */ + function (hostElement, targetElement, placement, appendToBody) { + var _a = __read(placement.split('-'), 2), _b = _a[0], placementPrimary = _b === void 0 ? 'top' : _b, _c = _a[1], placementSecondary = _c === void 0 ? 'center' : _c; + /** @type {?} */ + var hostElPosition = appendToBody ? this.offset(hostElement, false) : this.position(hostElement, false); + /** @type {?} */ + var targetElStyles = this.getAllStyles(targetElement); + /** @type {?} */ + var marginTop = parseFloat(targetElStyles.marginTop); + /** @type {?} */ + var marginBottom = parseFloat(targetElStyles.marginBottom); + /** @type {?} */ + var marginLeft = parseFloat(targetElStyles.marginLeft); + /** @type {?} */ + var marginRight = parseFloat(targetElStyles.marginRight); + /** @type {?} */ + var topPosition = 0; + /** @type {?} */ + var leftPosition = 0; + switch (placementPrimary) { + case 'top': + topPosition = (hostElPosition.top - (targetElement.offsetHeight + marginTop + marginBottom)); + break; + case 'bottom': + topPosition = (hostElPosition.top + hostElPosition.height); + break; + case 'left': + leftPosition = (hostElPosition.left - (targetElement.offsetWidth + marginLeft + marginRight)); + break; + case 'right': + leftPosition = (hostElPosition.left + hostElPosition.width); + break; + } + switch (placementSecondary) { + case 'top': + topPosition = hostElPosition.top; + break; + case 'bottom': + topPosition = hostElPosition.top + hostElPosition.height - targetElement.offsetHeight; + break; + case 'left': + leftPosition = hostElPosition.left; + break; + case 'right': + leftPosition = hostElPosition.left + hostElPosition.width - targetElement.offsetWidth; + break; + case 'center': + if (placementPrimary === 'top' || placementPrimary === 'bottom') { + leftPosition = (hostElPosition.left + hostElPosition.width / 2 - targetElement.offsetWidth / 2); + } + else { + topPosition = (hostElPosition.top + hostElPosition.height / 2 - targetElement.offsetHeight / 2); + } + break; + } + /// The translate3d/gpu acceleration render a blurry text on chrome, the next line is commented until a browser fix + // targetElement.style.transform = `translate3d(${Math.round(leftPosition)}px, ${Math.floor(topPosition)}px, 0px)`; + targetElement.style.transform = "translate(" + Math.round(leftPosition) + "px, " + Math.round(topPosition) + "px)"; + // Check if the targetElement is inside the viewport + /** @type {?} */ + var targetElBCR = targetElement.getBoundingClientRect(); + /** @type {?} */ + var html = document.documentElement; + /** @type {?} */ + var windowHeight = window.innerHeight || html.clientHeight; + /** @type {?} */ + var windowWidth = window.innerWidth || html.clientWidth; + return targetElBCR.left >= 0 && targetElBCR.top >= 0 && targetElBCR.right <= windowWidth && + targetElBCR.bottom <= windowHeight; + }; + return Positioning; +}()); +/** @type {?} */ +var placementSeparator = /\s+/; +/** @type {?} */ +var positionService = new Positioning(); +/* + * Accept the placement array and applies the appropriate placement dependent on the viewport. + * Returns the applied placement. + * In case of auto placement, placements are selected in order + * 'top', 'bottom', 'left', 'right', + * 'top-left', 'top-right', + * 'bottom-left', 'bottom-right', + * 'left-top', 'left-bottom', + * 'right-top', 'right-bottom'. + * */ +/** + * @param {?} hostElement + * @param {?} targetElement + * @param {?} placement + * @param {?=} appendToBody + * @param {?=} baseClass + * @return {?} + */ +function positionElements(hostElement, targetElement, placement, appendToBody, baseClass) { + var e_1, _a; + /** @type {?} */ + var placementVals = Array.isArray(placement) ? placement : (/** @type {?} */ (placement.split(placementSeparator))); + /** @type {?} */ + var allowedPlacements = [ + 'top', 'bottom', 'left', 'right', 'top-left', 'top-right', 'bottom-left', 'bottom-right', 'left-top', 'left-bottom', + 'right-top', 'right-bottom' + ]; + /** @type {?} */ + var classList = targetElement.classList; + /** @type {?} */ + var addClassesToTarget = (/** + * @param {?} targetPlacement + * @return {?} + */ + function (targetPlacement) { + var _a = __read(targetPlacement.split('-'), 2), primary = _a[0], secondary = _a[1]; + /** @type {?} */ + var classes = []; + if (baseClass) { + classes.push(baseClass + "-" + primary); + if (secondary) { + classes.push(baseClass + "-" + primary + "-" + secondary); + } + classes.forEach((/** + * @param {?} classname + * @return {?} + */ + function (classname) { classList.add(classname); })); + } + return classes; + }); + // Remove old placement classes to avoid issues + if (baseClass) { + allowedPlacements.forEach((/** + * @param {?} placementToRemove + * @return {?} + */ + function (placementToRemove) { classList.remove(baseClass + "-" + placementToRemove); })); + } + // replace auto placement with other placements + /** @type {?} */ + var hasAuto = placementVals.findIndex((/** + * @param {?} val + * @return {?} + */ + function (val) { return val === 'auto'; })); + if (hasAuto >= 0) { + allowedPlacements.forEach((/** + * @param {?} obj + * @return {?} + */ + function (obj) { + if (placementVals.find((/** + * @param {?} val + * @return {?} + */ + function (val) { return val.search('^' + obj) !== -1; })) == null) { + placementVals.splice(hasAuto++, 1, (/** @type {?} */ (obj))); + } + })); + } + // coordinates where to position + // Required for transform: + /** @type {?} */ + var style = targetElement.style; + style.position = 'absolute'; + style.top = '0'; + style.left = '0'; + style['will-change'] = 'transform'; + /** @type {?} */ + var testPlacement; + /** @type {?} */ + var isInViewport = false; + try { + for (var placementVals_1 = __values(placementVals), placementVals_1_1 = placementVals_1.next(); !placementVals_1_1.done; placementVals_1_1 = placementVals_1.next()) { + testPlacement = placementVals_1_1.value; + /** @type {?} */ + var addedClasses = addClassesToTarget(testPlacement); + if (positionService.positionElements(hostElement, targetElement, testPlacement, appendToBody)) { + isInViewport = true; + break; + } + // Remove the baseClasses for further calculation + if (baseClass) { + addedClasses.forEach((/** + * @param {?} classname + * @return {?} + */ + function (classname) { classList.remove(classname); })); + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (placementVals_1_1 && !placementVals_1_1.done && (_a = placementVals_1.return)) _a.call(placementVals_1); + } + finally { if (e_1) throw e_1.error; } + } + if (!isInViewport) { + // If nothing match, the first placement is the default one + testPlacement = placementVals[0]; + addClassesToTarget(testPlacement); + positionService.positionElements(hostElement, targetElement, testPlacement, appendToBody); + } + return testPlacement; +} + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * @return {?} + */ +function NGB_DATEPICKER_PARSER_FORMATTER_FACTORY() { + return new NgbDateISOParserFormatter(); +} +/** + * An abstract service for parsing and formatting dates for the + * [`NgbInputDatepicker`](#/components/datepicker/api#NgbInputDatepicker) directive. + * Converts between the internal `NgbDateStruct` model presentation and a `string` that is displayed in the + * input element. + * + * When user types something in the input this service attempts to parse it into a `NgbDateStruct` object. + * And vice versa, when users selects a date in the calendar with the mouse, it must be displayed as a `string` + * in the input. + * + * Default implementation uses the ISO 8601 format, but you can provide another implementation via DI + * to use an alternative string format or a custom parsing logic. + * + * See the [date format overview](#/components/datepicker/overview#date-model) for more details. + * @abstract + */ +var NgbDateParserFormatter = /** @class */ (function () { + function NgbDateParserFormatter() { + } + NgbDateParserFormatter.decorators = [ + { type: Injectable, args: [{ providedIn: 'root', useFactory: NGB_DATEPICKER_PARSER_FORMATTER_FACTORY },] } + ]; + /** @nocollapse */ NgbDateParserFormatter.ngInjectableDef = ɵɵdefineInjectable({ factory: NGB_DATEPICKER_PARSER_FORMATTER_FACTORY, token: NgbDateParserFormatter, providedIn: "root" }); + return NgbDateParserFormatter; +}()); +var NgbDateISOParserFormatter = /** @class */ (function (_super) { + __extends(NgbDateISOParserFormatter, _super); + function NgbDateISOParserFormatter() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * @param {?} value + * @return {?} + */ + NgbDateISOParserFormatter.prototype.parse = /** + * @param {?} value + * @return {?} + */ + function (value) { + if (value) { + /** @type {?} */ + var dateParts = value.trim().split('-'); + if (dateParts.length === 1 && isNumber(dateParts[0])) { + return { year: toInteger(dateParts[0]), month: null, day: null }; + } + else if (dateParts.length === 2 && isNumber(dateParts[0]) && isNumber(dateParts[1])) { + return { year: toInteger(dateParts[0]), month: toInteger(dateParts[1]), day: null }; + } + else if (dateParts.length === 3 && isNumber(dateParts[0]) && isNumber(dateParts[1]) && isNumber(dateParts[2])) { + return { year: toInteger(dateParts[0]), month: toInteger(dateParts[1]), day: toInteger(dateParts[2]) }; + } + } + return null; + }; + /** + * @param {?} date + * @return {?} + */ + NgbDateISOParserFormatter.prototype.format = /** + * @param {?} date + * @return {?} + */ + function (date) { + return date ? + date.year + "-" + (isNumber(date.month) ? padNumber(date.month) : '') + "-" + (isNumber(date.day) ? padNumber(date.day) : '') : + ''; + }; + NgbDateISOParserFormatter.decorators = [ + { type: Injectable } + ]; + return NgbDateISOParserFormatter; +}(NgbDateParserFormatter)); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @type {?} */ +var NGB_DATEPICKER_VALUE_ACCESSOR$1 = { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef((/** + * @return {?} + */ + function () { return NgbInputDatepicker; })), + multi: true +}; +/** @type {?} */ +var NGB_DATEPICKER_VALIDATOR = { + provide: NG_VALIDATORS, + useExisting: forwardRef((/** + * @return {?} + */ + function () { return NgbInputDatepicker; })), + multi: true +}; +/** + * A directive that allows to stick a datepicker popup to an input field. + * + * Manages interaction with the input field itself, does value formatting and provides forms integration. + */ +var NgbInputDatepicker = /** @class */ (function () { + function NgbInputDatepicker(_parserFormatter, _elRef, _vcRef, _renderer, _cfr, _ngZone, _service, _calendar, _dateAdapter, _document, _changeDetector) { + var _this = this; + this._parserFormatter = _parserFormatter; + this._elRef = _elRef; + this._vcRef = _vcRef; + this._renderer = _renderer; + this._cfr = _cfr; + this._ngZone = _ngZone; + this._service = _service; + this._calendar = _calendar; + this._dateAdapter = _dateAdapter; + this._document = _document; + this._changeDetector = _changeDetector; + this._cRef = null; + this._disabled = false; + /** + * Indicates whether the datepicker popup should be closed automatically after date selection / outside click or not. + * + * * `true` - the popup will close on both date selection and outside click. + * * `false` - the popup can only be closed manually via `close()` or `toggle()` methods. + * * `"inside"` - the popup will close on date selection, but not outside clicks. + * * `"outside"` - the popup will close only on the outside click and not on date selection/inside clicks. + * + * \@since 3.0.0 + */ + this.autoClose = true; + /** + * The preferred placement of the datepicker popup. + * + * Possible values are `"top"`, `"top-left"`, `"top-right"`, `"bottom"`, `"bottom-left"`, + * `"bottom-right"`, `"left"`, `"left-top"`, `"left-bottom"`, `"right"`, `"right-top"`, + * `"right-bottom"` + * + * Accepts an array of strings or a string with space separated possible values. + * + * The default order of preference is `"bottom-left bottom-right top-left top-right"` + * + * Please see the [positioning overview](#/positioning) for more details. + */ + this.placement = ['bottom-left', 'bottom-right', 'top-left', 'top-right']; + /** + * An event emitted when user selects a date using keyboard or mouse. + * + * The payload of the event is currently selected `NgbDate`. + * + * \@since 1.1.1 + */ + this.dateSelect = new EventEmitter(); + /** + * Event emitted right after the navigation happens and displayed month changes. + * + * See [`NgbDatepickerNavigateEvent`](#/components/datepicker/api#NgbDatepickerNavigateEvent) for the payload info. + */ + this.navigate = new EventEmitter(); + /** + * An event fired after closing datepicker window. + * + * \@since 4.2.0 + */ + this.closed = new EventEmitter(); + this._onChange = (/** + * @param {?} _ + * @return {?} + */ + function (_) { }); + this._onTouched = (/** + * @return {?} + */ + function () { }); + this._validatorChange = (/** + * @return {?} + */ + function () { }); + this._zoneSubscription = _ngZone.onStable.subscribe((/** + * @return {?} + */ + function () { return _this._updatePopupPosition(); })); + } + Object.defineProperty(NgbInputDatepicker.prototype, "disabled", { + get: /** + * @return {?} + */ + function () { + return this._disabled; + }, + set: /** + * @param {?} value + * @return {?} + */ + function (value) { + this._disabled = value === '' || (value && value !== 'false'); + if (this.isOpen()) { + this._cRef.instance.setDisabledState(this._disabled); + } + }, + enumerable: true, + configurable: true + }); + /** + * @param {?} fn + * @return {?} + */ + NgbInputDatepicker.prototype.registerOnChange = /** + * @param {?} fn + * @return {?} + */ + function (fn) { this._onChange = fn; }; + /** + * @param {?} fn + * @return {?} + */ + NgbInputDatepicker.prototype.registerOnTouched = /** + * @param {?} fn + * @return {?} + */ + function (fn) { this._onTouched = fn; }; + /** + * @param {?} fn + * @return {?} + */ + NgbInputDatepicker.prototype.registerOnValidatorChange = /** + * @param {?} fn + * @return {?} + */ + function (fn) { this._validatorChange = fn; }; + /** + * @param {?} isDisabled + * @return {?} + */ + NgbInputDatepicker.prototype.setDisabledState = /** + * @param {?} isDisabled + * @return {?} + */ + function (isDisabled) { this.disabled = isDisabled; }; + /** + * @param {?} c + * @return {?} + */ + NgbInputDatepicker.prototype.validate = /** + * @param {?} c + * @return {?} + */ + function (c) { + /** @type {?} */ + var value = c.value; + if (value === null || value === undefined) { + return null; + } + /** @type {?} */ + var ngbDate = this._fromDateStruct(this._dateAdapter.fromModel(value)); + if (!this._calendar.isValid(ngbDate)) { + return { 'ngbDate': { invalid: c.value } }; + } + if (this.minDate && ngbDate.before(NgbDate.from(this.minDate))) { + return { 'ngbDate': { requiredBefore: this.minDate } }; + } + if (this.maxDate && ngbDate.after(NgbDate.from(this.maxDate))) { + return { 'ngbDate': { requiredAfter: this.maxDate } }; + } + }; + /** + * @param {?} value + * @return {?} + */ + NgbInputDatepicker.prototype.writeValue = /** + * @param {?} value + * @return {?} + */ + function (value) { + this._model = this._fromDateStruct(this._dateAdapter.fromModel(value)); + this._writeModelValue(this._model); + }; + /** + * @param {?} value + * @param {?=} updateView + * @return {?} + */ + NgbInputDatepicker.prototype.manualDateChange = /** + * @param {?} value + * @param {?=} updateView + * @return {?} + */ + function (value, updateView) { + if (updateView === void 0) { updateView = false; } + /** @type {?} */ + var inputValueChanged = value !== this._inputValue; + if (inputValueChanged) { + this._inputValue = value; + this._model = this._fromDateStruct(this._parserFormatter.parse(value)); + } + if (inputValueChanged || !updateView) { + this._onChange(this._model ? this._dateAdapter.toModel(this._model) : (value === '' ? null : value)); + } + if (updateView && this._model) { + this._writeModelValue(this._model); + } + }; + /** + * @return {?} + */ + NgbInputDatepicker.prototype.isOpen = /** + * @return {?} + */ + function () { return !!this._cRef; }; + /** + * Opens the datepicker popup. + * + * If the related form control contains a valid date, the corresponding month will be opened. + */ + /** + * Opens the datepicker popup. + * + * If the related form control contains a valid date, the corresponding month will be opened. + * @return {?} + */ + NgbInputDatepicker.prototype.open = /** + * Opens the datepicker popup. + * + * If the related form control contains a valid date, the corresponding month will be opened. + * @return {?} + */ + function () { + var _this = this; + if (!this.isOpen()) { + /** @type {?} */ + var cf = this._cfr.resolveComponentFactory(NgbDatepicker); + this._cRef = this._vcRef.createComponent(cf); + this._applyPopupStyling(this._cRef.location.nativeElement); + this._applyDatepickerInputs(this._cRef.instance); + this._subscribeForDatepickerOutputs(this._cRef.instance); + this._cRef.instance.ngOnInit(); + this._cRef.instance.writeValue(this._dateAdapter.toModel(this._model)); + // date selection event handling + this._cRef.instance.registerOnChange((/** + * @param {?} selectedDate + * @return {?} + */ + function (selectedDate) { + _this.writeValue(selectedDate); + _this._onChange(selectedDate); + _this._onTouched(); + })); + this._cRef.changeDetectorRef.detectChanges(); + this._cRef.instance.setDisabledState(this.disabled); + if (this.container === 'body') { + window.document.querySelector(this.container).appendChild(this._cRef.location.nativeElement); + } + // focus handling + ngbFocusTrap(this._cRef.location.nativeElement, this.closed, true); + this._cRef.instance.focus(); + ngbAutoClose(this._ngZone, this._document, this.autoClose, (/** + * @return {?} + */ + function () { return _this.close(); }), this.closed, [], [this._elRef.nativeElement, this._cRef.location.nativeElement]); + } + }; + /** + * Closes the datepicker popup. + */ + /** + * Closes the datepicker popup. + * @return {?} + */ + NgbInputDatepicker.prototype.close = /** + * Closes the datepicker popup. + * @return {?} + */ + function () { + if (this.isOpen()) { + this._vcRef.remove(this._vcRef.indexOf(this._cRef.hostView)); + this._cRef = null; + this.closed.emit(); + this._changeDetector.markForCheck(); + } + }; + /** + * Toggles the datepicker popup. + */ + /** + * Toggles the datepicker popup. + * @return {?} + */ + NgbInputDatepicker.prototype.toggle = /** + * Toggles the datepicker popup. + * @return {?} + */ + function () { + if (this.isOpen()) { + this.close(); + } + else { + this.open(); + } + }; + /** + * Navigates to the provided date. + * + * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec. + * If nothing or invalid date provided calendar will open current month. + * + * Use the `[startDate]` input as an alternative. + */ + /** + * Navigates to the provided date. + * + * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec. + * If nothing or invalid date provided calendar will open current month. + * + * Use the `[startDate]` input as an alternative. + * @param {?=} date + * @return {?} + */ + NgbInputDatepicker.prototype.navigateTo = /** + * Navigates to the provided date. + * + * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec. + * If nothing or invalid date provided calendar will open current month. + * + * Use the `[startDate]` input as an alternative. + * @param {?=} date + * @return {?} + */ + function (date) { + if (this.isOpen()) { + this._cRef.instance.navigateTo(date); + } + }; + /** + * @return {?} + */ + NgbInputDatepicker.prototype.onBlur = /** + * @return {?} + */ + function () { this._onTouched(); }; + /** + * @param {?} changes + * @return {?} + */ + NgbInputDatepicker.prototype.ngOnChanges = /** + * @param {?} changes + * @return {?} + */ + function (changes) { + if (changes['minDate'] || changes['maxDate']) { + this._validatorChange(); + } + }; + /** + * @return {?} + */ + NgbInputDatepicker.prototype.ngOnDestroy = /** + * @return {?} + */ + function () { + this.close(); + this._zoneSubscription.unsubscribe(); + }; + /** + * @private + * @param {?} datepickerInstance + * @return {?} + */ + NgbInputDatepicker.prototype._applyDatepickerInputs = /** + * @private + * @param {?} datepickerInstance + * @return {?} + */ + function (datepickerInstance) { + var _this = this; + ['dayTemplate', 'dayTemplateData', 'displayMonths', 'firstDayOfWeek', 'footerTemplate', 'markDisabled', 'minDate', + 'maxDate', 'navigation', 'outsideDays', 'showNavigation', 'showWeekdays', 'showWeekNumbers'] + .forEach((/** + * @param {?} optionName + * @return {?} + */ + function (optionName) { + if (_this[optionName] !== undefined) { + datepickerInstance[optionName] = _this[optionName]; + } + })); + datepickerInstance.startDate = this.startDate || this._model; + }; + /** + * @private + * @param {?} nativeElement + * @return {?} + */ + NgbInputDatepicker.prototype._applyPopupStyling = /** + * @private + * @param {?} nativeElement + * @return {?} + */ + function (nativeElement) { + this._renderer.addClass(nativeElement, 'dropdown-menu'); + this._renderer.addClass(nativeElement, 'show'); + if (this.container === 'body') { + this._renderer.addClass(nativeElement, 'ngb-dp-body'); + } + }; + /** + * @private + * @param {?} datepickerInstance + * @return {?} + */ + NgbInputDatepicker.prototype._subscribeForDatepickerOutputs = /** + * @private + * @param {?} datepickerInstance + * @return {?} + */ + function (datepickerInstance) { + var _this = this; + datepickerInstance.navigate.subscribe((/** + * @param {?} navigateEvent + * @return {?} + */ + function (navigateEvent) { return _this.navigate.emit(navigateEvent); })); + datepickerInstance.select.subscribe((/** + * @param {?} date + * @return {?} + */ + function (date) { + _this.dateSelect.emit(date); + if (_this.autoClose === true || _this.autoClose === 'inside') { + _this.close(); + } + })); + }; + /** + * @private + * @param {?} model + * @return {?} + */ + NgbInputDatepicker.prototype._writeModelValue = /** + * @private + * @param {?} model + * @return {?} + */ + function (model) { + /** @type {?} */ + var value = this._parserFormatter.format(model); + this._inputValue = value; + this._renderer.setProperty(this._elRef.nativeElement, 'value', value); + if (this.isOpen()) { + this._cRef.instance.writeValue(this._dateAdapter.toModel(model)); + this._onTouched(); + } + }; + /** + * @private + * @param {?} date + * @return {?} + */ + NgbInputDatepicker.prototype._fromDateStruct = /** + * @private + * @param {?} date + * @return {?} + */ + function (date) { + /** @type {?} */ + var ngbDate = date ? new NgbDate(date.year, date.month, date.day) : null; + return this._calendar.isValid(ngbDate) ? ngbDate : null; + }; + /** + * @private + * @return {?} + */ + NgbInputDatepicker.prototype._updatePopupPosition = /** + * @private + * @return {?} + */ + function () { + if (!this._cRef) { + return; + } + /** @type {?} */ + var hostElement; + if (typeof this.positionTarget === 'string') { + hostElement = window.document.querySelector(this.positionTarget); + } + else if (this.positionTarget instanceof HTMLElement) { + hostElement = this.positionTarget; + } + else { + hostElement = this._elRef.nativeElement; + } + if (this.positionTarget && !hostElement) { + throw new Error('ngbDatepicker could not find element declared in [positionTarget] to position against.'); + } + positionElements(hostElement, this._cRef.location.nativeElement, this.placement, this.container === 'body'); + }; + NgbInputDatepicker.decorators = [ + { type: Directive, args: [{ + selector: 'input[ngbDatepicker]', + exportAs: 'ngbDatepicker', + host: { + '(input)': 'manualDateChange($event.target.value)', + '(change)': 'manualDateChange($event.target.value, true)', + '(blur)': 'onBlur()', + '[disabled]': 'disabled' + }, + providers: [NGB_DATEPICKER_VALUE_ACCESSOR$1, NGB_DATEPICKER_VALIDATOR, NgbDatepickerService] + },] } + ]; + /** @nocollapse */ + NgbInputDatepicker.ctorParameters = function () { return [ + { type: NgbDateParserFormatter }, + { type: ElementRef }, + { type: ViewContainerRef }, + { type: Renderer2 }, + { type: ComponentFactoryResolver }, + { type: NgZone }, + { type: NgbDatepickerService }, + { type: NgbCalendar }, + { type: NgbDateAdapter }, + { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }, + { type: ChangeDetectorRef } + ]; }; + NgbInputDatepicker.propDecorators = { + autoClose: [{ type: Input }], + dayTemplate: [{ type: Input }], + dayTemplateData: [{ type: Input }], + displayMonths: [{ type: Input }], + firstDayOfWeek: [{ type: Input }], + footerTemplate: [{ type: Input }], + markDisabled: [{ type: Input }], + minDate: [{ type: Input }], + maxDate: [{ type: Input }], + navigation: [{ type: Input }], + outsideDays: [{ type: Input }], + placement: [{ type: Input }], + showWeekdays: [{ type: Input }], + showWeekNumbers: [{ type: Input }], + startDate: [{ type: Input }], + container: [{ type: Input }], + positionTarget: [{ type: Input }], + dateSelect: [{ type: Output }], + navigate: [{ type: Output }], + closed: [{ type: Output }], + disabled: [{ type: Input }] + }; + return NgbInputDatepicker; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +var NgbDatepickerDayView = /** @class */ (function () { + function NgbDatepickerDayView(i18n) { + this.i18n = i18n; + } + /** + * @return {?} + */ + NgbDatepickerDayView.prototype.isMuted = /** + * @return {?} + */ + function () { return !this.selected && (this.date.month !== this.currentMonth || this.disabled); }; + NgbDatepickerDayView.decorators = [ + { type: Component, args: [{ + selector: '[ngbDatepickerDayView]', + changeDetection: ChangeDetectionStrategy.OnPush, + encapsulation: ViewEncapsulation.None, + host: { + 'class': 'btn-light', + '[class.bg-primary]': 'selected', + '[class.text-white]': 'selected', + '[class.text-muted]': 'isMuted()', + '[class.outside]': 'isMuted()', + '[class.active]': 'focused' + }, + template: "{{ i18n.getDayNumerals(date) }}", + styles: ["[ngbDatepickerDayView]{text-align:center;width:2rem;height:2rem;line-height:2rem;border-radius:.25rem;background:0 0}[ngbDatepickerDayView].outside{opacity:.5}"] + }] } + ]; + /** @nocollapse */ + NgbDatepickerDayView.ctorParameters = function () { return [ + { type: NgbDatepickerI18n } + ]; }; + NgbDatepickerDayView.propDecorators = { + currentMonth: [{ type: Input }], + date: [{ type: Input }], + disabled: [{ type: Input }], + focused: [{ type: Input }], + selected: [{ type: Input }] + }; + return NgbDatepickerDayView; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +var NgbDatepickerNavigationSelect = /** @class */ (function () { + function NgbDatepickerNavigationSelect(i18n) { + this.i18n = i18n; + this.select = new EventEmitter(); + } + /** + * @param {?} month + * @return {?} + */ + NgbDatepickerNavigationSelect.prototype.changeMonth = /** + * @param {?} month + * @return {?} + */ + function (month) { this.select.emit(new NgbDate(this.date.year, toInteger(month), 1)); }; + /** + * @param {?} year + * @return {?} + */ + NgbDatepickerNavigationSelect.prototype.changeYear = /** + * @param {?} year + * @return {?} + */ + function (year) { this.select.emit(new NgbDate(toInteger(year), this.date.month, 1)); }; + NgbDatepickerNavigationSelect.decorators = [ + { type: Component, args: [{ + selector: 'ngb-datepicker-navigation-select', + changeDetection: ChangeDetectionStrategy.OnPush, + encapsulation: ViewEncapsulation.None, + template: "\n \n \n \n \n \n ", + styles: ["ngb-datepicker-navigation-select>.custom-select{-ms-flex:1 1 auto;flex:1 1 auto;padding:0 .5rem;font-size:.875rem;height:1.85rem}"] + }] } + ]; + /** @nocollapse */ + NgbDatepickerNavigationSelect.ctorParameters = function () { return [ + { type: NgbDatepickerI18n } + ]; }; + NgbDatepickerNavigationSelect.propDecorators = { + date: [{ type: Input }], + disabled: [{ type: Input }], + months: [{ type: Input }], + years: [{ type: Input }], + select: [{ type: Output }] + }; + return NgbDatepickerNavigationSelect; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * @abstract + */ +var NgbCalendarHijri = /** @class */ (function (_super) { + __extends(NgbCalendarHijri, _super); + function NgbCalendarHijri() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * @return {?} + */ + NgbCalendarHijri.prototype.getDaysPerWeek = /** + * @return {?} + */ + function () { return 7; }; + /** + * @return {?} + */ + NgbCalendarHijri.prototype.getMonths = /** + * @return {?} + */ + function () { return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; }; + /** + * @return {?} + */ + NgbCalendarHijri.prototype.getWeeksPerMonth = /** + * @return {?} + */ + function () { return 6; }; + /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + NgbCalendarHijri.prototype.getNext = /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + function (date, period, number) { + if (period === void 0) { period = 'd'; } + if (number === void 0) { number = 1; } + date = new NgbDate(date.year, date.month, date.day); + switch (period) { + case 'y': + date = this._setYear(date, date.year + number); + date.month = 1; + date.day = 1; + return date; + case 'm': + date = this._setMonth(date, date.month + number); + date.day = 1; + return date; + case 'd': + return this._setDay(date, date.day + number); + default: + return date; + } + }; + /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + NgbCalendarHijri.prototype.getPrev = /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + function (date, period, number) { + if (period === void 0) { period = 'd'; } + if (number === void 0) { number = 1; } + return this.getNext(date, period, -number); + }; + /** + * @param {?} date + * @return {?} + */ + NgbCalendarHijri.prototype.getWeekday = /** + * @param {?} date + * @return {?} + */ + function (date) { + /** @type {?} */ + var day = this.toGregorian(date).getDay(); + // in JS Date Sun=0, in ISO 8601 Sun=7 + return day === 0 ? 7 : day; + }; + /** + * @param {?} week + * @param {?} firstDayOfWeek + * @return {?} + */ + NgbCalendarHijri.prototype.getWeekNumber = /** + * @param {?} week + * @param {?} firstDayOfWeek + * @return {?} + */ + function (week, firstDayOfWeek) { + // in JS Date Sun=0, in ISO 8601 Sun=7 + if (firstDayOfWeek === 7) { + firstDayOfWeek = 0; + } + /** @type {?} */ + var thursdayIndex = (4 + 7 - firstDayOfWeek) % 7; + /** @type {?} */ + var date = week[thursdayIndex]; + /** @type {?} */ + var jsDate = this.toGregorian(date); + jsDate.setDate(jsDate.getDate() + 4 - (jsDate.getDay() || 7)); // Thursday + // Thursday + /** @type {?} */ + var time = jsDate.getTime(); + /** @type {?} */ + var MuhDate = this.toGregorian(new NgbDate(date.year, 1, 1)); + return Math.floor(Math.round((time - MuhDate.getTime()) / 86400000) / 7) + 1; + }; + /** + * @return {?} + */ + NgbCalendarHijri.prototype.getToday = /** + * @return {?} + */ + function () { return this.fromGregorian(new Date()); }; + /** + * @param {?} date + * @return {?} + */ + NgbCalendarHijri.prototype.isValid = /** + * @param {?} date + * @return {?} + */ + function (date) { + return date && isNumber(date.year) && isNumber(date.month) && isNumber(date.day) && + !isNaN(this.toGregorian(date).getTime()); + }; + /** + * @private + * @param {?} date + * @param {?} day + * @return {?} + */ + NgbCalendarHijri.prototype._setDay = /** + * @private + * @param {?} date + * @param {?} day + * @return {?} + */ + function (date, day) { + day = +day; + /** @type {?} */ + var mDays = this.getDaysPerMonth(date.month, date.year); + if (day <= 0) { + while (day <= 0) { + date = this._setMonth(date, date.month - 1); + mDays = this.getDaysPerMonth(date.month, date.year); + day += mDays; + } + } + else if (day > mDays) { + while (day > mDays) { + day -= mDays; + date = this._setMonth(date, date.month + 1); + mDays = this.getDaysPerMonth(date.month, date.year); + } + } + date.day = day; + return date; + }; + /** + * @private + * @param {?} date + * @param {?} month + * @return {?} + */ + NgbCalendarHijri.prototype._setMonth = /** + * @private + * @param {?} date + * @param {?} month + * @return {?} + */ + function (date, month) { + month = +month; + date.year = date.year + Math.floor((month - 1) / 12); + date.month = Math.floor(((month - 1) % 12 + 12) % 12) + 1; + return date; + }; + /** + * @private + * @param {?} date + * @param {?} year + * @return {?} + */ + NgbCalendarHijri.prototype._setYear = /** + * @private + * @param {?} date + * @param {?} year + * @return {?} + */ + function (date, year) { + date.year = +year; + return date; + }; + NgbCalendarHijri.decorators = [ + { type: Injectable } + ]; + return NgbCalendarHijri; +}(NgbCalendar)); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * Checks if islamic year is a leap year + * @param {?} hYear + * @return {?} + */ +function isIslamicLeapYear(hYear) { + return (14 + 11 * hYear) % 30 < 11; +} +/** + * Checks if gregorian years is a leap year + * @param {?} gDate + * @return {?} + */ +function isGregorianLeapYear(gDate) { + /** @type {?} */ + var year = gDate.getFullYear(); + return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0; +} +/** + * Returns the start of Hijri Month. + * `hMonth` is 0 for Muharram, 1 for Safar, etc. + * `hYear` is any Hijri hYear. + * @param {?} hYear + * @param {?} hMonth + * @return {?} + */ +function getIslamicMonthStart(hYear, hMonth) { + return Math.ceil(29.5 * hMonth) + (hYear - 1) * 354 + Math.floor((3 + 11 * hYear) / 30.0); +} +/** + * Returns the start of Hijri year. + * `year` is any Hijri year. + * @param {?} year + * @return {?} + */ +function getIslamicYearStart(year) { + return (year - 1) * 354 + Math.floor((3 + 11 * year) / 30.0); +} +/** + * @param {?} a + * @param {?} b + * @return {?} + */ +function mod(a, b) { + return a - b * Math.floor(a / b); +} +/** + * The civil calendar is one type of Hijri calendars used in islamic countries. + * Uses a fixed cycle of alternating 29- and 30-day months, + * with a leap day added to the last month of 11 out of every 30 years. + * http://cldr.unicode.org/development/development-process/design-proposals/islamic-calendar-types + * All the calculations here are based on the equations from "Calendrical Calculations" By Edward M. Reingold, Nachum + * Dershowitz. + * @type {?} + */ +var GREGORIAN_EPOCH = 1721425.5; +/** @type {?} */ +var ISLAMIC_EPOCH = 1948439.5; +var NgbCalendarIslamicCivil = /** @class */ (function (_super) { + __extends(NgbCalendarIslamicCivil, _super); + function NgbCalendarIslamicCivil() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * Returns the equivalent islamic(civil) date value for a give input Gregorian date. + * `gDate` is a JS Date to be converted to Hijri. + */ + /** + * Returns the equivalent islamic(civil) date value for a give input Gregorian date. + * `gDate` is a JS Date to be converted to Hijri. + * @param {?} gDate + * @return {?} + */ + NgbCalendarIslamicCivil.prototype.fromGregorian = /** + * Returns the equivalent islamic(civil) date value for a give input Gregorian date. + * `gDate` is a JS Date to be converted to Hijri. + * @param {?} gDate + * @return {?} + */ + function (gDate) { + /** @type {?} */ + var gYear = gDate.getFullYear(); + /** @type {?} */ + var gMonth = gDate.getMonth(); + /** @type {?} */ + var gDay = gDate.getDate(); + /** @type {?} */ + var julianDay = GREGORIAN_EPOCH - 1 + 365 * (gYear - 1) + Math.floor((gYear - 1) / 4) + + -Math.floor((gYear - 1) / 100) + Math.floor((gYear - 1) / 400) + + Math.floor((367 * (gMonth + 1) - 362) / 12 + (gMonth + 1 <= 2 ? 0 : isGregorianLeapYear(gDate) ? -1 : -2) + gDay); + julianDay = Math.floor(julianDay) + 0.5; + /** @type {?} */ + var days = julianDay - ISLAMIC_EPOCH; + /** @type {?} */ + var hYear = Math.floor((30 * days + 10646) / 10631.0); + /** @type {?} */ + var hMonth = Math.ceil((days - 29 - getIslamicYearStart(hYear)) / 29.5); + hMonth = Math.min(hMonth, 11); + /** @type {?} */ + var hDay = Math.ceil(days - getIslamicMonthStart(hYear, hMonth)) + 1; + return new NgbDate(hYear, hMonth + 1, hDay); + }; + /** + * Returns the equivalent JS date value for a give input islamic(civil) date. + * `hDate` is an islamic(civil) date to be converted to Gregorian. + */ + /** + * Returns the equivalent JS date value for a give input islamic(civil) date. + * `hDate` is an islamic(civil) date to be converted to Gregorian. + * @param {?} hDate + * @return {?} + */ + NgbCalendarIslamicCivil.prototype.toGregorian = /** + * Returns the equivalent JS date value for a give input islamic(civil) date. + * `hDate` is an islamic(civil) date to be converted to Gregorian. + * @param {?} hDate + * @return {?} + */ + function (hDate) { + /** @type {?} */ + var hYear = hDate.year; + /** @type {?} */ + var hMonth = hDate.month - 1; + /** @type {?} */ + var hDay = hDate.day; + /** @type {?} */ + var julianDay = hDay + Math.ceil(29.5 * hMonth) + (hYear - 1) * 354 + Math.floor((3 + 11 * hYear) / 30) + ISLAMIC_EPOCH - 1; + /** @type {?} */ + var wjd = Math.floor(julianDay - 0.5) + 0.5; + /** @type {?} */ + var depoch = wjd - GREGORIAN_EPOCH; + /** @type {?} */ + var quadricent = Math.floor(depoch / 146097); + /** @type {?} */ + var dqc = mod(depoch, 146097); + /** @type {?} */ + var cent = Math.floor(dqc / 36524); + /** @type {?} */ + var dcent = mod(dqc, 36524); + /** @type {?} */ + var quad = Math.floor(dcent / 1461); + /** @type {?} */ + var dquad = mod(dcent, 1461); + /** @type {?} */ + var yindex = Math.floor(dquad / 365); + /** @type {?} */ + var year = quadricent * 400 + cent * 100 + quad * 4 + yindex; + if (!(cent === 4 || yindex === 4)) { + year++; + } + /** @type {?} */ + var gYearStart = GREGORIAN_EPOCH + 365 * (year - 1) + Math.floor((year - 1) / 4) - Math.floor((year - 1) / 100) + + Math.floor((year - 1) / 400); + /** @type {?} */ + var yearday = wjd - gYearStart; + /** @type {?} */ + var tjd = GREGORIAN_EPOCH - 1 + 365 * (year - 1) + Math.floor((year - 1) / 4) - Math.floor((year - 1) / 100) + + Math.floor((year - 1) / 400) + Math.floor(739 / 12 + (isGregorianLeapYear(new Date(year, 3, 1)) ? -1 : -2) + 1); + /** @type {?} */ + var leapadj = wjd < tjd ? 0 : isGregorianLeapYear(new Date(year, 3, 1)) ? 1 : 2; + /** @type {?} */ + var month = Math.floor(((yearday + leapadj) * 12 + 373) / 367); + /** @type {?} */ + var tjd2 = GREGORIAN_EPOCH - 1 + 365 * (year - 1) + Math.floor((year - 1) / 4) - Math.floor((year - 1) / 100) + + Math.floor((year - 1) / 400) + + Math.floor((367 * month - 362) / 12 + (month <= 2 ? 0 : isGregorianLeapYear(new Date(year, month - 1, 1)) ? -1 : -2) + + 1); + /** @type {?} */ + var day = wjd - tjd2 + 1; + return new Date(year, month - 1, day); + }; + /** + * Returns the number of days in a specific Hijri month. + * `month` is 1 for Muharram, 2 for Safar, etc. + * `year` is any Hijri year. + */ + /** + * Returns the number of days in a specific Hijri month. + * `month` is 1 for Muharram, 2 for Safar, etc. + * `year` is any Hijri year. + * @param {?} month + * @param {?} year + * @return {?} + */ + NgbCalendarIslamicCivil.prototype.getDaysPerMonth = /** + * Returns the number of days in a specific Hijri month. + * `month` is 1 for Muharram, 2 for Safar, etc. + * `year` is any Hijri year. + * @param {?} month + * @param {?} year + * @return {?} + */ + function (month, year) { + year = year + Math.floor(month / 13); + month = ((month - 1) % 12) + 1; + /** @type {?} */ + var length = 29 + month % 2; + if (month === 12 && isIslamicLeapYear(year)) { + length++; + } + return length; + }; + NgbCalendarIslamicCivil.decorators = [ + { type: Injectable } + ]; + return NgbCalendarIslamicCivil; +}(NgbCalendarHijri)); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * Umalqura calendar is one type of Hijri calendars used in islamic countries. + * This Calendar is used by Saudi Arabia for administrative purpose. + * Unlike tabular calendars, the algorithm involves astronomical calculation, but it's still deterministic. + * http://cldr.unicode.org/development/development-process/design-proposals/islamic-calendar-types + * @type {?} + */ +var GREGORIAN_FIRST_DATE = new Date(1882, 10, 12); +/** @type {?} */ +var GREGORIAN_LAST_DATE = new Date(2174, 10, 25); +/** @type {?} */ +var HIJRI_BEGIN = 1300; +/** @type {?} */ +var HIJRI_END = 1600; +/** @type {?} */ +var ONE_DAY = 1000 * 60 * 60 * 24; +/** @type {?} */ +var MONTH_LENGTH = [ + // 1300-1304 + '101010101010', '110101010100', '111011001001', '011011010100', '011011101010', + // 1305-1309 + '001101101100', '101010101101', '010101010101', '011010101001', '011110010010', + // 1310-1314 + '101110101001', '010111010100', '101011011010', '010101011100', '110100101101', + // 1315-1319 + '011010010101', '011101001010', '101101010100', '101101101010', '010110101101', + // 1320-1324 + '010010101110', '101001001111', '010100010111', '011010001011', '011010100101', + // 1325-1329 + '101011010101', '001011010110', '100101011011', '010010011101', '101001001101', + // 1330-1334 + '110100100110', '110110010101', '010110101100', '100110110110', '001010111010', + // 1335-1339 + '101001011011', '010100101011', '101010010101', '011011001010', '101011101001', + // 1340-1344 + '001011110100', '100101110110', '001010110110', '100101010110', '101011001010', + // 1345-1349 + '101110100100', '101111010010', '010111011001', '001011011100', '100101101101', + // 1350-1354 + '010101001101', '101010100101', '101101010010', '101110100101', '010110110100', + // 1355-1359 + '100110110110', '010101010111', '001010010111', '010101001011', '011010100011', + // 1360-1364 + '011101010010', '101101100101', '010101101010', '101010101011', '010100101011', + // 1365-1369 + '110010010101', '110101001010', '110110100101', '010111001010', '101011010110', + // 1370-1374 + '100101010111', '010010101011', '100101001011', '101010100101', '101101010010', + // 1375-1379 + '101101101010', '010101110101', '001001110110', '100010110111', '010001011011', + // 1380-1384 + '010101010101', '010110101001', '010110110100', '100111011010', '010011011101', + // 1385-1389 + '001001101110', '100100110110', '101010101010', '110101010100', '110110110010', + // 1390-1394 + '010111010101', '001011011010', '100101011011', '010010101011', '101001010101', + // 1395-1399 + '101101001001', '101101100100', '101101110001', '010110110100', '101010110101', + // 1400-1404 + '101001010101', '110100100101', '111010010010', '111011001001', '011011010100', + // 1405-1409 + '101011101001', '100101101011', '010010101011', '101010010011', '110101001001', + // 1410-1414 + '110110100100', '110110110010', '101010111001', '010010111010', '101001011011', + // 1415-1419 + '010100101011', '101010010101', '101100101010', '101101010101', '010101011100', + // 1420-1424 + '010010111101', '001000111101', '100100011101', '101010010101', '101101001010', + // 1425-1429 + '101101011010', '010101101101', '001010110110', '100100111011', '010010011011', + // 1430-1434 + '011001010101', '011010101001', '011101010100', '101101101010', '010101101100', + // 1435-1439 + '101010101101', '010101010101', '101100101001', '101110010010', '101110101001', + // 1440-1444 + '010111010100', '101011011010', '010101011010', '101010101011', '010110010101', + // 1445-1449 + '011101001001', '011101100100', '101110101010', '010110110101', '001010110110', + // 1450-1454 + '101001010110', '111001001101', '101100100101', '101101010010', '101101101010', + // 1455-1459 + '010110101101', '001010101110', '100100101111', '010010010111', '011001001011', + // 1460-1464 + '011010100101', '011010101100', '101011010110', '010101011101', '010010011101', + // 1465-1469 + '101001001101', '110100010110', '110110010101', '010110101010', '010110110101', + // 1470-1474 + '001011011010', '100101011011', '010010101101', '010110010101', '011011001010', + // 1475-1479 + '011011100100', '101011101010', '010011110101', '001010110110', '100101010110', + // 1480-1484 + '101010101010', '101101010100', '101111010010', '010111011001', '001011101010', + // 1485-1489 + '100101101101', '010010101101', '101010010101', '101101001010', '101110100101', + // 1490-1494 + '010110110010', '100110110101', '010011010110', '101010010111', '010101000111', + // 1495-1499 + '011010010011', '011101001001', '101101010101', '010101101010', '101001101011', + // 1500-1504 + '010100101011', '101010001011', '110101000110', '110110100011', '010111001010', + // 1505-1509 + '101011010110', '010011011011', '001001101011', '100101001011', '101010100101', + // 1510-1514 + '101101010010', '101101101001', '010101110101', '000101110110', '100010110111', + // 1515-1519 + '001001011011', '010100101011', '010101100101', '010110110100', '100111011010', + // 1520-1524 + '010011101101', '000101101101', '100010110110', '101010100110', '110101010010', + // 1525-1529 + '110110101001', '010111010100', '101011011010', '100101011011', '010010101011', + // 1530-1534 + '011001010011', '011100101001', '011101100010', '101110101001', '010110110010', + // 1535-1539 + '101010110101', '010101010101', '101100100101', '110110010010', '111011001001', + // 1540-1544 + '011011010010', '101011101001', '010101101011', '010010101011', '101001010101', + // 1545-1549 + '110100101001', '110101010100', '110110101010', '100110110101', '010010111010', + // 1550-1554 + '101000111011', '010010011011', '101001001101', '101010101010', '101011010101', + // 1555-1559 + '001011011010', '100101011101', '010001011110', '101000101110', '110010011010', + // 1560-1564 + '110101010101', '011010110010', '011010111001', '010010111010', '101001011101', + // 1565-1569 + '010100101101', '101010010101', '101101010010', '101110101000', '101110110100', + // 1570-1574 + '010110111001', '001011011010', '100101011010', '101101001010', '110110100100', + // 1575-1579 + '111011010001', '011011101000', '101101101010', '010101101101', '010100110101', + // 1580-1584 + '011010010101', '110101001010', '110110101000', '110111010100', '011011011010', + // 1585-1589 + '010101011011', '001010011101', '011000101011', '101100010101', '101101001010', + // 1590-1594 + '101110010101', '010110101010', '101010101110', '100100101110', '110010001111', + // 1595-1599 + '010100100111', '011010010101', '011010101010', '101011010110', '010101011101', + // 1600 + '001010011101' +]; +/** + * @param {?} date1 + * @param {?} date2 + * @return {?} + */ +function getDaysDiff(date1, date2) { + // Ignores the time part in date1 and date2: + /** @type {?} */ + var time1 = Date.UTC(date1.getFullYear(), date1.getMonth(), date1.getDate()); + /** @type {?} */ + var time2 = Date.UTC(date2.getFullYear(), date2.getMonth(), date2.getDate()); + /** @type {?} */ + var diff = Math.abs(time1 - time2); + return Math.round(diff / ONE_DAY); +} +var NgbCalendarIslamicUmalqura = /** @class */ (function (_super) { + __extends(NgbCalendarIslamicUmalqura, _super); + function NgbCalendarIslamicUmalqura() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * Returns the equivalent islamic(Umalqura) date value for a give input Gregorian date. + * `gdate` is s JS Date to be converted to Hijri. + */ + /** + * Returns the equivalent islamic(Umalqura) date value for a give input Gregorian date. + * `gdate` is s JS Date to be converted to Hijri. + * @param {?} gDate + * @return {?} + */ + NgbCalendarIslamicUmalqura.prototype.fromGregorian = /** + * Returns the equivalent islamic(Umalqura) date value for a give input Gregorian date. + * `gdate` is s JS Date to be converted to Hijri. + * @param {?} gDate + * @return {?} + */ + function (gDate) { + /** @type {?} */ + var hDay = 1; + /** @type {?} */ + var hMonth = 0; + /** @type {?} */ + var hYear = 1300; + /** @type {?} */ + var daysDiff = getDaysDiff(gDate, GREGORIAN_FIRST_DATE); + if (gDate.getTime() - GREGORIAN_FIRST_DATE.getTime() >= 0 && gDate.getTime() - GREGORIAN_LAST_DATE.getTime() <= 0) { + /** @type {?} */ + var year = 1300; + for (var i = 0; i < MONTH_LENGTH.length; i++, year++) { + for (var j = 0; j < 12; j++) { + /** @type {?} */ + var numOfDays = +MONTH_LENGTH[i][j] + 29; + if (daysDiff <= numOfDays) { + hDay = daysDiff + 1; + if (hDay > numOfDays) { + hDay = 1; + j++; + } + if (j > 11) { + j = 0; + year++; + } + hMonth = j; + hYear = year; + return new NgbDate(hYear, hMonth + 1, hDay); + } + daysDiff = daysDiff - numOfDays; + } + } + } + else { + return _super.prototype.fromGregorian.call(this, gDate); + } + }; + /** + * Converts the current Hijri date to Gregorian. + */ + /** + * Converts the current Hijri date to Gregorian. + * @param {?} hDate + * @return {?} + */ + NgbCalendarIslamicUmalqura.prototype.toGregorian = /** + * Converts the current Hijri date to Gregorian. + * @param {?} hDate + * @return {?} + */ + function (hDate) { + /** @type {?} */ + var hYear = hDate.year; + /** @type {?} */ + var hMonth = hDate.month - 1; + /** @type {?} */ + var hDay = hDate.day; + /** @type {?} */ + var gDate = new Date(GREGORIAN_FIRST_DATE); + /** @type {?} */ + var dayDiff = hDay - 1; + if (hYear >= HIJRI_BEGIN && hYear <= HIJRI_END) { + for (var y = 0; y < hYear - HIJRI_BEGIN; y++) { + for (var m = 0; m < 12; m++) { + dayDiff += +MONTH_LENGTH[y][m] + 29; + } + } + for (var m = 0; m < hMonth; m++) { + dayDiff += +MONTH_LENGTH[hYear - HIJRI_BEGIN][m] + 29; + } + gDate.setDate(GREGORIAN_FIRST_DATE.getDate() + dayDiff); + } + else { + gDate = _super.prototype.toGregorian.call(this, hDate); + } + return gDate; + }; + /** + * Returns the number of days in a specific Hijri hMonth. + * `hMonth` is 1 for Muharram, 2 for Safar, etc. + * `hYear` is any Hijri hYear. + */ + /** + * Returns the number of days in a specific Hijri hMonth. + * `hMonth` is 1 for Muharram, 2 for Safar, etc. + * `hYear` is any Hijri hYear. + * @param {?} hMonth + * @param {?} hYear + * @return {?} + */ + NgbCalendarIslamicUmalqura.prototype.getDaysPerMonth = /** + * Returns the number of days in a specific Hijri hMonth. + * `hMonth` is 1 for Muharram, 2 for Safar, etc. + * `hYear` is any Hijri hYear. + * @param {?} hMonth + * @param {?} hYear + * @return {?} + */ + function (hMonth, hYear) { + if (hYear >= HIJRI_BEGIN && hYear <= HIJRI_END) { + /** @type {?} */ + var pos = hYear - HIJRI_BEGIN; + return +MONTH_LENGTH[pos][hMonth - 1] + 29; + } + return _super.prototype.getDaysPerMonth.call(this, hMonth, hYear); + }; + NgbCalendarIslamicUmalqura.decorators = [ + { type: Injectable } + ]; + return NgbCalendarIslamicUmalqura; +}(NgbCalendarIslamicCivil)); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * Returns the equivalent JS date value for a give input Jalali date. + * `jalaliDate` is an Jalali date to be converted to Gregorian. + * @param {?} jalaliDate + * @return {?} + */ +function toGregorian(jalaliDate) { + /** @type {?} */ + var jdn = jalaliToJulian(jalaliDate.year, jalaliDate.month, jalaliDate.day); + /** @type {?} */ + var date = julianToGregorian(jdn); + date.setHours(6, 30, 3, 200); + return date; +} +/** + * Returns the equivalent jalali date value for a give input Gregorian date. + * `gdate` is a JS Date to be converted to jalali. + * utc to local + * @param {?} gdate + * @return {?} + */ +function fromGregorian(gdate) { + /** @type {?} */ + var g2d = gregorianToJulian(gdate.getFullYear(), gdate.getMonth() + 1, gdate.getDate()); + return julianToJalali(g2d); +} +/** + * @param {?} date + * @param {?} yearValue + * @return {?} + */ +function setJalaliYear(date, yearValue) { + date.year = +yearValue; + return date; +} +/** + * @param {?} date + * @param {?} month + * @return {?} + */ +function setJalaliMonth(date, month) { + month = +month; + date.year = date.year + Math.floor((month - 1) / 12); + date.month = Math.floor(((month - 1) % 12 + 12) % 12) + 1; + return date; +} +/** + * @param {?} date + * @param {?} day + * @return {?} + */ +function setJalaliDay(date, day) { + /** @type {?} */ + var mDays = getDaysPerMonth(date.month, date.year); + if (day <= 0) { + while (day <= 0) { + date = setJalaliMonth(date, date.month - 1); + mDays = getDaysPerMonth(date.month, date.year); + day += mDays; + } + } + else if (day > mDays) { + while (day > mDays) { + day -= mDays; + date = setJalaliMonth(date, date.month + 1); + mDays = getDaysPerMonth(date.month, date.year); + } + } + date.day = day; + return date; +} +/** + * @param {?} a + * @param {?} b + * @return {?} + */ +function mod$1(a, b) { + return a - b * Math.floor(a / b); +} +/** + * @param {?} a + * @param {?} b + * @return {?} + */ +function div(a, b) { + return Math.trunc(a / b); +} +/* + This function determines if the Jalali (Persian) year is + leap (366-day long) or is the common year (365 days), and + finds the day in March (Gregorian calendar) of the first + day of the Jalali year (jalaliYear). + @param jalaliYear Jalali calendar year (-61 to 3177) + @return + leap: number of years since the last leap year (0 to 4) + gYear: Gregorian year of the beginning of Jalali year + march: the March day of Farvardin the 1st (1st day of jalaliYear) + @see: http://www.astro.uni.torun.pl/~kb/Papers/EMP/PersianC-EMP.htm + @see: http://www.fourmilab.ch/documents/calendar/ + */ +/** + * @param {?} jalaliYear + * @return {?} + */ +function jalCal(jalaliYear) { + // Jalali years starting the 33-year rule. + /** @type {?} */ + var breaks = [-61, 9, 38, 199, 426, 686, 756, 818, 1111, 1181, 1210, 1635, 2060, 2097, 2192, 2262, 2324, 2394, 2456, 3178]; + /** @type {?} */ + var breaksLength = breaks.length; + /** @type {?} */ + var gYear = jalaliYear + 621; + /** @type {?} */ + var leapJ = -14; + /** @type {?} */ + var jp = breaks[0]; + if (jalaliYear < jp || jalaliYear >= breaks[breaksLength - 1]) { + throw new Error('Invalid Jalali year ' + jalaliYear); + } + // Find the limiting years for the Jalali year jalaliYear. + /** @type {?} */ + var jump; + for (var i = 1; i < breaksLength; i += 1) { + /** @type {?} */ + var jm = breaks[i]; + jump = jm - jp; + if (jalaliYear < jm) { + break; + } + leapJ = leapJ + div(jump, 33) * 8 + div(mod$1(jump, 33), 4); + jp = jm; + } + /** @type {?} */ + var n = jalaliYear - jp; + // Find the number of leap years from AD 621 to the beginning + // of the current Jalali year in the Persian calendar. + leapJ = leapJ + div(n, 33) * 8 + div(mod$1(n, 33) + 3, 4); + if (mod$1(jump, 33) === 4 && jump - n === 4) { + leapJ += 1; + } + // And the same in the Gregorian calendar (until the year gYear). + /** @type {?} */ + var leapG = div(gYear, 4) - div((div(gYear, 100) + 1) * 3, 4) - 150; + // Determine the Gregorian date of Farvardin the 1st. + /** @type {?} */ + var march = 20 + leapJ - leapG; + // Find how many years have passed since the last leap year. + if (jump - n < 6) { + n = n - jump + div(jump + 4, 33) * 33; + } + /** @type {?} */ + var leap = mod$1(mod$1(n + 1, 33) - 1, 4); + if (leap === -1) { + leap = 4; + } + return { leap: leap, gy: gYear, march: march }; +} +/* + Calculates Gregorian and Julian calendar dates from the Julian Day number + (jdn) for the period since jdn=-34839655 (i.e. the year -100100 of both + calendars) to some millions years ahead of the present. + @param jdn Julian Day number + @return + gYear: Calendar year (years BC numbered 0, -1, -2, ...) + gMonth: Calendar month (1 to 12) + gDay: Calendar day of the month M (1 to 28/29/30/31) + */ +/** + * @param {?} julianDayNumber + * @return {?} + */ +function julianToGregorian(julianDayNumber) { + /** @type {?} */ + var j = 4 * julianDayNumber + 139361631; + j = j + div(div(4 * julianDayNumber + 183187720, 146097) * 3, 4) * 4 - 3908; + /** @type {?} */ + var i = div(mod$1(j, 1461), 4) * 5 + 308; + /** @type {?} */ + var gDay = div(mod$1(i, 153), 5) + 1; + /** @type {?} */ + var gMonth = mod$1(div(i, 153), 12) + 1; + /** @type {?} */ + var gYear = div(j, 1461) - 100100 + div(8 - gMonth, 6); + return new Date(gYear, gMonth - 1, gDay); +} +/* + Converts a date of the Jalali calendar to the Julian Day number. + @param jy Jalali year (1 to 3100) + @param jm Jalali month (1 to 12) + @param jd Jalali day (1 to 29/31) + @return Julian Day number + */ +/** + * @param {?} gy + * @param {?} gm + * @param {?} gd + * @return {?} + */ +function gregorianToJulian(gy, gm, gd) { + /** @type {?} */ + var d = div((gy + div(gm - 8, 6) + 100100) * 1461, 4) + div(153 * mod$1(gm + 9, 12) + 2, 5) + gd - 34840408; + d = d - div(div(gy + 100100 + div(gm - 8, 6), 100) * 3, 4) + 752; + return d; +} +/* + Converts the Julian Day number to a date in the Jalali calendar. + @param julianDayNumber Julian Day number + @return + jalaliYear: Jalali year (1 to 3100) + jalaliMonth: Jalali month (1 to 12) + jalaliDay: Jalali day (1 to 29/31) + */ +/** + * @param {?} julianDayNumber + * @return {?} + */ +function julianToJalali(julianDayNumber) { + /** @type {?} */ + var gy = julianToGregorian(julianDayNumber).getFullYear() // Calculate Gregorian year (gy). + ; + /** @type {?} */ + var jalaliYear = gy - 621; + /** @type {?} */ + var r = jalCal(jalaliYear); + /** @type {?} */ + var gregorianDay = gregorianToJulian(gy, 3, r.march); + /** @type {?} */ + var jalaliDay; + /** @type {?} */ + var jalaliMonth; + /** @type {?} */ + var numberOfDays; + // Find number of days that passed since 1 Farvardin. + numberOfDays = julianDayNumber - gregorianDay; + if (numberOfDays >= 0) { + if (numberOfDays <= 185) { + // The first 6 months. + jalaliMonth = 1 + div(numberOfDays, 31); + jalaliDay = mod$1(numberOfDays, 31) + 1; + return new NgbDate(jalaliYear, jalaliMonth, jalaliDay); + } + else { + // The remaining months. + numberOfDays -= 186; + } + } + else { + // Previous Jalali year. + jalaliYear -= 1; + numberOfDays += 179; + if (r.leap === 1) { + numberOfDays += 1; + } + } + jalaliMonth = 7 + div(numberOfDays, 30); + jalaliDay = mod$1(numberOfDays, 30) + 1; + return new NgbDate(jalaliYear, jalaliMonth, jalaliDay); +} +/* + Converts a date of the Jalali calendar to the Julian Day number. + @param jYear Jalali year (1 to 3100) + @param jMonth Jalali month (1 to 12) + @param jDay Jalali day (1 to 29/31) + @return Julian Day number + */ +/** + * @param {?} jYear + * @param {?} jMonth + * @param {?} jDay + * @return {?} + */ +function jalaliToJulian(jYear, jMonth, jDay) { + /** @type {?} */ + var r = jalCal(jYear); + return gregorianToJulian(r.gy, 3, r.march) + (jMonth - 1) * 31 - div(jMonth, 7) * (jMonth - 7) + jDay - 1; +} +/** + * Returns the number of days in a specific jalali month. + * @param {?} month + * @param {?} year + * @return {?} + */ +function getDaysPerMonth(month, year) { + if (month <= 6) { + return 31; + } + if (month <= 11) { + return 30; + } + if (jalCal(year).leap === 0) { + return 30; + } + return 29; +} + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +var NgbCalendarPersian = /** @class */ (function (_super) { + __extends(NgbCalendarPersian, _super); + function NgbCalendarPersian() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * @return {?} + */ + NgbCalendarPersian.prototype.getDaysPerWeek = /** + * @return {?} + */ + function () { return 7; }; + /** + * @return {?} + */ + NgbCalendarPersian.prototype.getMonths = /** + * @return {?} + */ + function () { return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; }; + /** + * @return {?} + */ + NgbCalendarPersian.prototype.getWeeksPerMonth = /** + * @return {?} + */ + function () { return 6; }; + /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + NgbCalendarPersian.prototype.getNext = /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + function (date, period, number) { + if (period === void 0) { period = 'd'; } + if (number === void 0) { number = 1; } + date = new NgbDate(date.year, date.month, date.day); + switch (period) { + case 'y': + date = setJalaliYear(date, date.year + number); + date.month = 1; + date.day = 1; + return date; + case 'm': + date = setJalaliMonth(date, date.month + number); + date.day = 1; + return date; + case 'd': + return setJalaliDay(date, date.day + number); + default: + return date; + } + }; + /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + NgbCalendarPersian.prototype.getPrev = /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + function (date, period, number) { + if (period === void 0) { period = 'd'; } + if (number === void 0) { number = 1; } + return this.getNext(date, period, -number); + }; + /** + * @param {?} date + * @return {?} + */ + NgbCalendarPersian.prototype.getWeekday = /** + * @param {?} date + * @return {?} + */ + function (date) { + /** @type {?} */ + var day = toGregorian(date).getDay(); + // in JS Date Sun=0, in ISO 8601 Sun=7 + return day === 0 ? 7 : day; + }; + /** + * @param {?} week + * @param {?} firstDayOfWeek + * @return {?} + */ + NgbCalendarPersian.prototype.getWeekNumber = /** + * @param {?} week + * @param {?} firstDayOfWeek + * @return {?} + */ + function (week, firstDayOfWeek) { + // in JS Date Sun=0, in ISO 8601 Sun=7 + if (firstDayOfWeek === 7) { + firstDayOfWeek = 0; + } + /** @type {?} */ + var thursdayIndex = (4 + 7 - firstDayOfWeek) % 7; + /** @type {?} */ + var date = week[thursdayIndex]; + /** @type {?} */ + var jsDate = toGregorian(date); + jsDate.setDate(jsDate.getDate() + 4 - (jsDate.getDay() || 7)); // Thursday + // Thursday + /** @type {?} */ + var time = jsDate.getTime(); + /** @type {?} */ + var startDate = toGregorian(new NgbDate(date.year, 1, 1)); + return Math.floor(Math.round((time - startDate.getTime()) / 86400000) / 7) + 1; + }; + /** + * @return {?} + */ + NgbCalendarPersian.prototype.getToday = /** + * @return {?} + */ + function () { return fromGregorian(new Date()); }; + /** + * @param {?} date + * @return {?} + */ + NgbCalendarPersian.prototype.isValid = /** + * @param {?} date + * @return {?} + */ + function (date) { + return date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day) && + !isNaN(toGregorian(date).getTime()); + }; + NgbCalendarPersian.decorators = [ + { type: Injectable } + ]; + return NgbCalendarPersian; +}(NgbCalendar)); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @type {?} */ +var PARTS_PER_HOUR = 1080; +/** @type {?} */ +var PARTS_PER_DAY = 24 * PARTS_PER_HOUR; +/** @type {?} */ +var PARTS_FRACTIONAL_MONTH = 12 * PARTS_PER_HOUR + 793; +/** @type {?} */ +var PARTS_PER_MONTH = 29 * PARTS_PER_DAY + PARTS_FRACTIONAL_MONTH; +/** @type {?} */ +var BAHARAD = 11 * PARTS_PER_HOUR + 204; +/** @type {?} */ +var HEBREW_DAY_ON_JAN_1_1970 = 2092591; +/** @type {?} */ +var GREGORIAN_EPOCH$1 = 1721425.5; +/** + * @param {?} year + * @return {?} + */ +function isGregorianLeapYear$1(year) { + return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0; +} +/** + * @param {?} year + * @return {?} + */ +function numberOfFirstDayInYear(year) { + /** @type {?} */ + var monthsBeforeYear = Math.floor((235 * year - 234) / 19); + /** @type {?} */ + var fractionalMonthsBeforeYear = monthsBeforeYear * PARTS_FRACTIONAL_MONTH + BAHARAD; + /** @type {?} */ + var dayNumber = monthsBeforeYear * 29 + Math.floor(fractionalMonthsBeforeYear / PARTS_PER_DAY); + /** @type {?} */ + var timeOfDay = fractionalMonthsBeforeYear % PARTS_PER_DAY; + /** @type {?} */ + var dayOfWeek = dayNumber % 7; + if (dayOfWeek === 2 || dayOfWeek === 4 || dayOfWeek === 6) { + dayNumber++; + dayOfWeek = dayNumber % 7; + } + if (dayOfWeek === 1 && timeOfDay > 15 * PARTS_PER_HOUR + 204 && !isHebrewLeapYear(year)) { + dayNumber += 2; + } + else if (dayOfWeek === 0 && timeOfDay > 21 * PARTS_PER_HOUR + 589 && isHebrewLeapYear(year - 1)) { + dayNumber++; + } + return dayNumber; +} +/** + * @param {?} month + * @param {?} year + * @return {?} + */ +function getDaysInGregorianMonth(month, year) { + /** @type {?} */ + var days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + if (isGregorianLeapYear$1(year)) { + days[1]++; + } + return days[month - 1]; +} +/** + * @param {?} year + * @return {?} + */ +function getHebrewMonths(year) { + return isHebrewLeapYear(year) ? 13 : 12; +} +/** + * Returns the number of days in a specific Hebrew year. + * `year` is any Hebrew year. + * @param {?} year + * @return {?} + */ +function getDaysInHebrewYear(year) { + return numberOfFirstDayInYear(year + 1) - numberOfFirstDayInYear(year); +} +/** + * @param {?} year + * @return {?} + */ +function isHebrewLeapYear(year) { + /** @type {?} */ + var b = (year * 12 + 17) % 19; + return b >= ((b < 0) ? -7 : 12); +} +/** + * Returns the number of days in a specific Hebrew month. + * `month` is 1 for Nisan, 2 for Iyar etc. Note: Hebrew leap year contains 13 months. + * `year` is any Hebrew year. + * @param {?} month + * @param {?} year + * @return {?} + */ +function getDaysInHebrewMonth(month, year) { + /** @type {?} */ + var yearLength = numberOfFirstDayInYear(year + 1) - numberOfFirstDayInYear(year); + /** @type {?} */ + var yearType = (yearLength <= 380 ? yearLength : (yearLength - 30)) - 353; + /** @type {?} */ + var leapYear = isHebrewLeapYear(year); + /** @type {?} */ + var daysInMonth = leapYear ? [30, 29, 29, 29, 30, 30, 29, 30, 29, 30, 29, 30, 29] : + [30, 29, 29, 29, 30, 29, 30, 29, 30, 29, 30, 29]; + if (yearType > 0) { + daysInMonth[2]++; // Kislev gets an extra day in normal or complete years. + } + if (yearType > 1) { + daysInMonth[1]++; // Heshvan gets an extra day in complete years only. + } + return daysInMonth[month - 1]; +} +/** + * @param {?} date + * @return {?} + */ +function getDayNumberInHebrewYear(date) { + /** @type {?} */ + var numberOfDay = 0; + for (var i = 1; i < date.month; i++) { + numberOfDay += getDaysInHebrewMonth(i, date.year); + } + return numberOfDay + date.day; +} +/** + * @param {?} date + * @param {?} val + * @return {?} + */ +function setHebrewMonth(date, val) { + /** @type {?} */ + var after = val >= 0; + if (!after) { + val = -val; + } + while (val > 0) { + if (after) { + if (val > getHebrewMonths(date.year) - date.month) { + val -= getHebrewMonths(date.year) - date.month + 1; + date.year++; + date.month = 1; + } + else { + date.month += val; + val = 0; + } + } + else { + if (val >= date.month) { + date.year--; + val -= date.month; + date.month = getHebrewMonths(date.year); + } + else { + date.month -= val; + val = 0; + } + } + } + return date; +} +/** + * @param {?} date + * @param {?} val + * @return {?} + */ +function setHebrewDay(date, val) { + /** @type {?} */ + var after = val >= 0; + if (!after) { + val = -val; + } + while (val > 0) { + if (after) { + if (val > getDaysInHebrewYear(date.year) - getDayNumberInHebrewYear(date)) { + val -= getDaysInHebrewYear(date.year) - getDayNumberInHebrewYear(date) + 1; + date.year++; + date.month = 1; + date.day = 1; + } + else if (val > getDaysInHebrewMonth(date.month, date.year) - date.day) { + val -= getDaysInHebrewMonth(date.month, date.year) - date.day + 1; + date.month++; + date.day = 1; + } + else { + date.day += val; + val = 0; + } + } + else { + if (val >= date.day) { + val -= date.day; + date.month--; + if (date.month === 0) { + date.year--; + date.month = getHebrewMonths(date.year); + } + date.day = getDaysInHebrewMonth(date.month, date.year); + } + else { + date.day -= val; + val = 0; + } + } + } + return date; +} +/** + * Returns the equivalent Hebrew date value for a give input Gregorian date. + * `gdate` is a JS Date to be converted to Hebrew date. + * @param {?} gdate + * @return {?} + */ +function fromGregorian$1(gdate) { + /** @type {?} */ + var date = new Date(gdate); + /** @type {?} */ + var gYear = date.getFullYear(); + /** @type {?} */ + var gMonth = date.getMonth(); + /** @type {?} */ + var gDay = date.getDate(); + /** @type {?} */ + var julianDay = GREGORIAN_EPOCH$1 - 1 + 365 * (gYear - 1) + Math.floor((gYear - 1) / 4) - + Math.floor((gYear - 1) / 100) + Math.floor((gYear - 1) / 400) + + Math.floor((367 * (gMonth + 1) - 362) / 12 + (gMonth + 1 <= 2 ? 0 : isGregorianLeapYear$1(gYear) ? -1 : -2) + gDay); + julianDay = Math.floor(julianDay + 0.5); + /** @type {?} */ + var daysSinceHebEpoch = julianDay - 347997; + /** @type {?} */ + var monthsSinceHebEpoch = Math.floor(daysSinceHebEpoch * PARTS_PER_DAY / PARTS_PER_MONTH); + /** @type {?} */ + var hYear = Math.floor((monthsSinceHebEpoch * 19 + 234) / 235) + 1; + /** @type {?} */ + var firstDayOfThisYear = numberOfFirstDayInYear(hYear); + /** @type {?} */ + var dayOfYear = daysSinceHebEpoch - firstDayOfThisYear; + while (dayOfYear < 1) { + hYear--; + firstDayOfThisYear = numberOfFirstDayInYear(hYear); + dayOfYear = daysSinceHebEpoch - firstDayOfThisYear; + } + /** @type {?} */ + var hMonth = 1; + /** @type {?} */ + var hDay = dayOfYear; + while (hDay > getDaysInHebrewMonth(hMonth, hYear)) { + hDay -= getDaysInHebrewMonth(hMonth, hYear); + hMonth++; + } + return new NgbDate(hYear, hMonth, hDay); +} +/** + * Returns the equivalent JS date value for a given Hebrew date. + * `hebrewDate` is an Hebrew date to be converted to Gregorian. + * @param {?} hebrewDate + * @return {?} + */ +function toGregorian$1(hebrewDate) { + /** @type {?} */ + var hYear = hebrewDate.year; + /** @type {?} */ + var hMonth = hebrewDate.month; + /** @type {?} */ + var hDay = hebrewDate.day; + /** @type {?} */ + var days = numberOfFirstDayInYear(hYear); + for (var i = 1; i < hMonth; i++) { + days += getDaysInHebrewMonth(i, hYear); + } + days += hDay; + /** @type {?} */ + var diffDays = days - HEBREW_DAY_ON_JAN_1_1970; + /** @type {?} */ + var after = diffDays >= 0; + if (!after) { + diffDays = -diffDays; + } + /** @type {?} */ + var gYear = 1970; + /** @type {?} */ + var gMonth = 1; + /** @type {?} */ + var gDay = 1; + while (diffDays > 0) { + if (after) { + if (diffDays >= (isGregorianLeapYear$1(gYear) ? 366 : 365)) { + diffDays -= isGregorianLeapYear$1(gYear) ? 366 : 365; + gYear++; + } + else if (diffDays >= getDaysInGregorianMonth(gMonth, gYear)) { + diffDays -= getDaysInGregorianMonth(gMonth, gYear); + gMonth++; + } + else { + gDay += diffDays; + diffDays = 0; + } + } + else { + if (diffDays >= (isGregorianLeapYear$1(gYear - 1) ? 366 : 365)) { + diffDays -= isGregorianLeapYear$1(gYear - 1) ? 366 : 365; + gYear--; + } + else { + if (gMonth > 1) { + gMonth--; + } + else { + gMonth = 12; + gYear--; + } + if (diffDays >= getDaysInGregorianMonth(gMonth, gYear)) { + diffDays -= getDaysInGregorianMonth(gMonth, gYear); + } + else { + gDay = getDaysInGregorianMonth(gMonth, gYear) - diffDays + 1; + diffDays = 0; + } + } + } + } + return new Date(gYear, gMonth - 1, gDay); +} +/** + * @param {?} numerals + * @return {?} + */ +function hebrewNumerals(numerals) { + if (!numerals) { + return ''; + } + /** @type {?} */ + var hArray0_9 = ['', '\u05d0', '\u05d1', '\u05d2', '\u05d3', '\u05d4', '\u05d5', '\u05d6', '\u05d7', '\u05d8']; + /** @type {?} */ + var hArray10_19 = [ + '\u05d9', '\u05d9\u05d0', '\u05d9\u05d1', '\u05d9\u05d2', '\u05d9\u05d3', '\u05d8\u05d5', '\u05d8\u05d6', + '\u05d9\u05d6', '\u05d9\u05d7', '\u05d9\u05d8' + ]; + /** @type {?} */ + var hArray20_90 = ['', '', '\u05db', '\u05dc', '\u05de', '\u05e0', '\u05e1', '\u05e2', '\u05e4', '\u05e6']; + /** @type {?} */ + var hArray100_900 = [ + '', '\u05e7', '\u05e8', '\u05e9', '\u05ea', '\u05ea\u05e7', '\u05ea\u05e8', '\u05ea\u05e9', '\u05ea\u05ea', + '\u05ea\u05ea\u05e7' + ]; + /** @type {?} */ + var hArray1000_9000 = [ + '', '\u05d0', '\u05d1', '\u05d1\u05d0', '\u05d1\u05d1', '\u05d4', '\u05d4\u05d0', '\u05d4\u05d1', + '\u05d4\u05d1\u05d0', '\u05d4\u05d1\u05d1' + ]; + /** @type {?} */ + var geresh = '\u05f3'; + /** @type {?} */ + var gershaim = '\u05f4'; + /** @type {?} */ + var mem = 0; + /** @type {?} */ + var result = []; + /** @type {?} */ + var step = 0; + while (numerals > 0) { + /** @type {?} */ + var m = numerals % 10; + if (step === 0) { + mem = m; + } + else if (step === 1) { + if (m !== 1) { + result.unshift(hArray20_90[m], hArray0_9[mem]); + } + else { + result.unshift(hArray10_19[mem]); + } + } + else if (step === 2) { + result.unshift(hArray100_900[m]); + } + else { + if (m !== 5) { + result.unshift(hArray1000_9000[m], geresh, ' '); + } + break; + } + numerals = Math.floor(numerals / 10); + if (step === 0 && numerals === 0) { + result.unshift(hArray0_9[m]); + } + step++; + } + result = result.join('').split(''); + if (result.length === 1) { + result.push(geresh); + } + else if (result.length > 1) { + result.splice(result.length - 1, 0, gershaim); + } + return result.join(''); +} + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * \@since 3.2.0 + */ +var NgbCalendarHebrew = /** @class */ (function (_super) { + __extends(NgbCalendarHebrew, _super); + function NgbCalendarHebrew() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * @return {?} + */ + NgbCalendarHebrew.prototype.getDaysPerWeek = /** + * @return {?} + */ + function () { return 7; }; + /** + * @param {?=} year + * @return {?} + */ + NgbCalendarHebrew.prototype.getMonths = /** + * @param {?=} year + * @return {?} + */ + function (year) { + if (year && isHebrewLeapYear(year)) { + return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]; + } + else { + return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; + } + }; + /** + * @return {?} + */ + NgbCalendarHebrew.prototype.getWeeksPerMonth = /** + * @return {?} + */ + function () { return 6; }; + /** + * @param {?} date + * @return {?} + */ + NgbCalendarHebrew.prototype.isValid = /** + * @param {?} date + * @return {?} + */ + function (date) { + /** @type {?} */ + var b = date && isNumber(date.year) && isNumber(date.month) && isNumber(date.day); + b = b && date.month > 0 && date.month <= (isHebrewLeapYear(date.year) ? 13 : 12); + b = b && date.day > 0 && date.day <= getDaysInHebrewMonth(date.month, date.year); + return b && !isNaN(toGregorian$1(date).getTime()); + }; + /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + NgbCalendarHebrew.prototype.getNext = /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + function (date, period, number) { + if (period === void 0) { period = 'd'; } + if (number === void 0) { number = 1; } + date = new NgbDate(date.year, date.month, date.day); + switch (period) { + case 'y': + date.year += number; + date.month = 1; + date.day = 1; + return date; + case 'm': + date = setHebrewMonth(date, number); + date.day = 1; + return date; + case 'd': + return setHebrewDay(date, number); + default: + return date; + } + }; + /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + NgbCalendarHebrew.prototype.getPrev = /** + * @param {?} date + * @param {?=} period + * @param {?=} number + * @return {?} + */ + function (date, period, number) { + if (period === void 0) { period = 'd'; } + if (number === void 0) { number = 1; } + return this.getNext(date, period, -number); + }; + /** + * @param {?} date + * @return {?} + */ + NgbCalendarHebrew.prototype.getWeekday = /** + * @param {?} date + * @return {?} + */ + function (date) { + /** @type {?} */ + var day = toGregorian$1(date).getDay(); + // in JS Date Sun=0, in ISO 8601 Sun=7 + return day === 0 ? 7 : day; + }; + /** + * @param {?} week + * @param {?} firstDayOfWeek + * @return {?} + */ + NgbCalendarHebrew.prototype.getWeekNumber = /** + * @param {?} week + * @param {?} firstDayOfWeek + * @return {?} + */ + function (week, firstDayOfWeek) { + /** @type {?} */ + var date = week[week.length - 1]; + return Math.ceil(getDayNumberInHebrewYear(date) / 7); + }; + /** + * @return {?} + */ + NgbCalendarHebrew.prototype.getToday = /** + * @return {?} + */ + function () { return fromGregorian$1(new Date()); }; + /** + * @since 3.4.0 + */ + /** + * \@since 3.4.0 + * @param {?} date + * @return {?} + */ + NgbCalendarHebrew.prototype.toGregorian = /** + * \@since 3.4.0 + * @param {?} date + * @return {?} + */ + function (date) { return fromJSDate(toGregorian$1(date)); }; + /** + * @since 3.4.0 + */ + /** + * \@since 3.4.0 + * @param {?} date + * @return {?} + */ + NgbCalendarHebrew.prototype.fromGregorian = /** + * \@since 3.4.0 + * @param {?} date + * @return {?} + */ + function (date) { return fromGregorian$1(toJSDate(date)); }; + NgbCalendarHebrew.decorators = [ + { type: Injectable } + ]; + return NgbCalendarHebrew; +}(NgbCalendar)); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @type {?} */ +var WEEKDAYS = ['שני', 'שלישי', 'רביעי', 'חמישי', 'שישי', 'שבת', 'ראשון']; +/** @type {?} */ +var MONTHS = ['תשרי', 'חשון', 'כסלו', 'טבת', 'שבט', 'אדר', 'ניסן', 'אייר', 'סיון', 'תמוז', 'אב', 'אלול']; +/** @type {?} */ +var MONTHS_LEAP = ['תשרי', 'חשון', 'כסלו', 'טבת', 'שבט', 'אדר א׳', 'אדר ב׳', 'ניסן', 'אייר', 'סיון', 'תמוז', 'אב', 'אלול']; +/** + * \@since 3.2.0 + */ +var NgbDatepickerI18nHebrew = /** @class */ (function (_super) { + __extends(NgbDatepickerI18nHebrew, _super); + function NgbDatepickerI18nHebrew() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * @param {?} month + * @param {?=} year + * @return {?} + */ + NgbDatepickerI18nHebrew.prototype.getMonthShortName = /** + * @param {?} month + * @param {?=} year + * @return {?} + */ + function (month, year) { return this.getMonthFullName(month, year); }; + /** + * @param {?} month + * @param {?=} year + * @return {?} + */ + NgbDatepickerI18nHebrew.prototype.getMonthFullName = /** + * @param {?} month + * @param {?=} year + * @return {?} + */ + function (month, year) { + return isHebrewLeapYear(year) ? MONTHS_LEAP[month - 1] : MONTHS[month - 1]; + }; + /** + * @param {?} weekday + * @return {?} + */ + NgbDatepickerI18nHebrew.prototype.getWeekdayShortName = /** + * @param {?} weekday + * @return {?} + */ + function (weekday) { return WEEKDAYS[weekday - 1]; }; + /** + * @param {?} date + * @return {?} + */ + NgbDatepickerI18nHebrew.prototype.getDayAriaLabel = /** + * @param {?} date + * @return {?} + */ + function (date) { + return hebrewNumerals(date.day) + " " + this.getMonthFullName(date.month, date.year) + " " + hebrewNumerals(date.year); + }; + /** + * @param {?} date + * @return {?} + */ + NgbDatepickerI18nHebrew.prototype.getDayNumerals = /** + * @param {?} date + * @return {?} + */ + function (date) { return hebrewNumerals(date.day); }; + /** + * @param {?} weekNumber + * @return {?} + */ + NgbDatepickerI18nHebrew.prototype.getWeekNumerals = /** + * @param {?} weekNumber + * @return {?} + */ + function (weekNumber) { return hebrewNumerals(weekNumber); }; + /** + * @param {?} year + * @return {?} + */ + NgbDatepickerI18nHebrew.prototype.getYearNumerals = /** + * @param {?} year + * @return {?} + */ + function (year) { return hebrewNumerals(year); }; + NgbDatepickerI18nHebrew.decorators = [ + { type: Injectable } + ]; + return NgbDatepickerI18nHebrew; +}(NgbDatepickerI18n)); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * [`NgbDateAdapter`](#/components/datepicker/api#NgbDateAdapter) implementation that uses + * native javascript dates as a user date model. + */ +var NgbDateNativeAdapter = /** @class */ (function (_super) { + __extends(NgbDateNativeAdapter, _super); + function NgbDateNativeAdapter() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * Converts a native `Date` to a `NgbDateStruct`. + */ + /** + * Converts a native `Date` to a `NgbDateStruct`. + * @param {?} date + * @return {?} + */ + NgbDateNativeAdapter.prototype.fromModel = /** + * Converts a native `Date` to a `NgbDateStruct`. + * @param {?} date + * @return {?} + */ + function (date) { + return (date instanceof Date && !isNaN(date.getTime())) ? this._fromNativeDate(date) : null; + }; + /** + * Converts a `NgbDateStruct` to a native `Date`. + */ + /** + * Converts a `NgbDateStruct` to a native `Date`. + * @param {?} date + * @return {?} + */ + NgbDateNativeAdapter.prototype.toModel = /** + * Converts a `NgbDateStruct` to a native `Date`. + * @param {?} date + * @return {?} + */ + function (date) { + return date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day) ? this._toNativeDate(date) : + null; + }; + /** + * @protected + * @param {?} date + * @return {?} + */ + NgbDateNativeAdapter.prototype._fromNativeDate = /** + * @protected + * @param {?} date + * @return {?} + */ + function (date) { + return { year: date.getFullYear(), month: date.getMonth() + 1, day: date.getDate() }; + }; + /** + * @protected + * @param {?} date + * @return {?} + */ + NgbDateNativeAdapter.prototype._toNativeDate = /** + * @protected + * @param {?} date + * @return {?} + */ + function (date) { + /** @type {?} */ + var jsDate = new Date(date.year, date.month - 1, date.day, 12); + // avoid 30 -> 1930 conversion + jsDate.setFullYear(date.year); + return jsDate; + }; + NgbDateNativeAdapter.decorators = [ + { type: Injectable } + ]; + return NgbDateNativeAdapter; +}(NgbDateAdapter)); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * Same as [`NgbDateNativeAdapter`](#/components/datepicker/api#NgbDateNativeAdapter), but with UTC dates. + * + * \@since 3.2.0 + */ +var NgbDateNativeUTCAdapter = /** @class */ (function (_super) { + __extends(NgbDateNativeUTCAdapter, _super); + function NgbDateNativeUTCAdapter() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * @protected + * @param {?} date + * @return {?} + */ + NgbDateNativeUTCAdapter.prototype._fromNativeDate = /** + * @protected + * @param {?} date + * @return {?} + */ + function (date) { + return { year: date.getUTCFullYear(), month: date.getUTCMonth() + 1, day: date.getUTCDate() }; + }; + /** + * @protected + * @param {?} date + * @return {?} + */ + NgbDateNativeUTCAdapter.prototype._toNativeDate = /** + * @protected + * @param {?} date + * @return {?} + */ + function (date) { + /** @type {?} */ + var jsDate = new Date(Date.UTC(date.year, date.month - 1, date.day)); + // avoid 30 -> 1930 conversion + jsDate.setUTCFullYear(date.year); + return jsDate; + }; + NgbDateNativeUTCAdapter.decorators = [ + { type: Injectable } + ]; + return NgbDateNativeUTCAdapter; +}(NgbDateNativeAdapter)); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +var NgbDatepickerModule = /** @class */ (function () { + function NgbDatepickerModule() { + } + NgbDatepickerModule.decorators = [ + { type: NgModule, args: [{ + declarations: [ + NgbDatepicker, NgbDatepickerMonthView, NgbDatepickerNavigation, NgbDatepickerNavigationSelect, NgbDatepickerDayView, + NgbInputDatepicker + ], + exports: [NgbDatepicker, NgbInputDatepicker], + imports: [CommonModule, FormsModule], + entryComponents: [NgbDatepicker] + },] } + ]; + return NgbDatepickerModule; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * A configuration service for the [`NgbDropdown`](#/components/dropdown/api#NgbDropdown) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the dropdowns used in the application. + */ +var NgbDropdownConfig = /** @class */ (function () { + function NgbDropdownConfig() { + this.autoClose = true; + this.placement = ['bottom-left', 'bottom-right', 'top-left', 'top-right']; + } + NgbDropdownConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ NgbDropdownConfig.ngInjectableDef = ɵɵdefineInjectable({ factory: function NgbDropdownConfig_Factory() { return new NgbDropdownConfig(); }, token: NgbDropdownConfig, providedIn: "root" }); + return NgbDropdownConfig; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +var NgbNavbar = /** @class */ (function () { + function NgbNavbar() { + } + NgbNavbar.decorators = [ + { type: Directive, args: [{ selector: '.navbar' },] } + ]; + return NgbNavbar; +}()); +/** + * A directive you should put put on a dropdown item to enable keyboard navigation. + * Arrow keys will move focus between items marked with this directive. + * + * \@since 4.1.0 + */ +var NgbDropdownItem = /** @class */ (function () { + function NgbDropdownItem(elementRef) { + this.elementRef = elementRef; + this._disabled = false; + } + Object.defineProperty(NgbDropdownItem.prototype, "disabled", { + get: /** + * @return {?} + */ + function () { return this._disabled; }, + set: /** + * @param {?} value + * @return {?} + */ + function (value) { + this._disabled = (/** @type {?} */ (value)) === '' || value === true; // accept an empty attribute as true + }, + enumerable: true, + configurable: true + }); + NgbDropdownItem.decorators = [ + { type: Directive, args: [{ selector: '[ngbDropdownItem]', host: { 'class': 'dropdown-item', '[class.disabled]': 'disabled' } },] } + ]; + /** @nocollapse */ + NgbDropdownItem.ctorParameters = function () { return [ + { type: ElementRef } + ]; }; + NgbDropdownItem.propDecorators = { + disabled: [{ type: Input }] + }; + return NgbDropdownItem; +}()); +/** + * A directive that wraps dropdown menu content and dropdown items. + */ +var NgbDropdownMenu = /** @class */ (function () { + function NgbDropdownMenu(dropdown) { + this.dropdown = dropdown; + this.placement = 'bottom'; + this.isOpen = false; + } + NgbDropdownMenu.decorators = [ + { type: Directive, args: [{ + selector: '[ngbDropdownMenu]', + host: { + '[class.dropdown-menu]': 'true', + '[class.show]': 'dropdown.isOpen()', + '[attr.x-placement]': 'placement', + '(keydown.ArrowUp)': 'dropdown.onKeyDown($event)', + '(keydown.ArrowDown)': 'dropdown.onKeyDown($event)', + '(keydown.Home)': 'dropdown.onKeyDown($event)', + '(keydown.End)': 'dropdown.onKeyDown($event)', + '(keydown.Enter)': 'dropdown.onKeyDown($event)', + '(keydown.Space)': 'dropdown.onKeyDown($event)' + } + },] } + ]; + /** @nocollapse */ + NgbDropdownMenu.ctorParameters = function () { return [ + { type: undefined, decorators: [{ type: Inject, args: [forwardRef((/** + * @return {?} + */ + function () { return NgbDropdown; })),] }] } + ]; }; + NgbDropdownMenu.propDecorators = { + menuItems: [{ type: ContentChildren, args: [NgbDropdownItem,] }] + }; + return NgbDropdownMenu; +}()); +/** + * A directive to mark an element to which dropdown menu will be anchored. + * + * This is a simple version of the `NgbDropdownToggle` directive. + * It plays the same role, but doesn't listen to click events to toggle dropdown menu thus enabling support + * for events other than click. + * + * \@since 1.1.0 + */ +var NgbDropdownAnchor = /** @class */ (function () { + function NgbDropdownAnchor(dropdown, _elementRef) { + this.dropdown = dropdown; + this._elementRef = _elementRef; + this.anchorEl = _elementRef.nativeElement; + } + /** + * @return {?} + */ + NgbDropdownAnchor.prototype.getNativeElement = /** + * @return {?} + */ + function () { return this._elementRef.nativeElement; }; + NgbDropdownAnchor.decorators = [ + { type: Directive, args: [{ + selector: '[ngbDropdownAnchor]', + host: { 'class': 'dropdown-toggle', 'aria-haspopup': 'true', '[attr.aria-expanded]': 'dropdown.isOpen()' } + },] } + ]; + /** @nocollapse */ + NgbDropdownAnchor.ctorParameters = function () { return [ + { type: undefined, decorators: [{ type: Inject, args: [forwardRef((/** + * @return {?} + */ + function () { return NgbDropdown; })),] }] }, + { type: ElementRef } + ]; }; + return NgbDropdownAnchor; +}()); +/** + * A directive to mark an element that will toggle dropdown via the `click` event. + * + * You can also use `NgbDropdownAnchor` as an alternative. + */ +var NgbDropdownToggle = /** @class */ (function (_super) { + __extends(NgbDropdownToggle, _super); + function NgbDropdownToggle(dropdown, elementRef) { + return _super.call(this, dropdown, elementRef) || this; + } + NgbDropdownToggle.decorators = [ + { type: Directive, args: [{ + selector: '[ngbDropdownToggle]', + host: { + 'class': 'dropdown-toggle', + 'aria-haspopup': 'true', + '[attr.aria-expanded]': 'dropdown.isOpen()', + '(click)': 'dropdown.toggle()', + '(keydown.ArrowUp)': 'dropdown.onKeyDown($event)', + '(keydown.ArrowDown)': 'dropdown.onKeyDown($event)', + '(keydown.Home)': 'dropdown.onKeyDown($event)', + '(keydown.End)': 'dropdown.onKeyDown($event)' + }, + providers: [{ provide: NgbDropdownAnchor, useExisting: forwardRef((/** + * @return {?} + */ + function () { return NgbDropdownToggle; })) }] + },] } + ]; + /** @nocollapse */ + NgbDropdownToggle.ctorParameters = function () { return [ + { type: undefined, decorators: [{ type: Inject, args: [forwardRef((/** + * @return {?} + */ + function () { return NgbDropdown; })),] }] }, + { type: ElementRef } + ]; }; + return NgbDropdownToggle; +}(NgbDropdownAnchor)); +/** + * A directive that provides contextual overlays for displaying lists of links and more. + */ +var NgbDropdown = /** @class */ (function () { + function NgbDropdown(_changeDetector, config, _document, _ngZone, _elementRef, _renderer, ngbNavbar) { + var _this = this; + this._changeDetector = _changeDetector; + this._document = _document; + this._ngZone = _ngZone; + this._elementRef = _elementRef; + this._renderer = _renderer; + this._closed$ = new Subject(); + /** + * Defines whether or not the dropdown menu is opened initially. + */ + this._open = false; + /** + * An event fired when the dropdown is opened or closed. + * + * The event payload is a `boolean`: + * * `true` - the dropdown was opened + * * `false` - the dropdown was closed + */ + this.openChange = new EventEmitter(); + this.placement = config.placement; + this.container = config.container; + this.autoClose = config.autoClose; + this.display = ngbNavbar ? 'static' : 'dynamic'; + this._zoneSubscription = _ngZone.onStable.subscribe((/** + * @return {?} + */ + function () { _this._positionMenu(); })); + } + /** + * @return {?} + */ + NgbDropdown.prototype.ngAfterContentInit = /** + * @return {?} + */ + function () { + var _this = this; + this._ngZone.onStable.pipe(take(1)).subscribe((/** + * @return {?} + */ + function () { + _this._applyPlacementClasses(); + if (_this._open) { + _this._setCloseHandlers(); + } + })); + }; + /** + * @param {?} changes + * @return {?} + */ + NgbDropdown.prototype.ngOnChanges = /** + * @param {?} changes + * @return {?} + */ + function (changes) { + if (changes.container && this._open) { + this._applyContainer(this.container); + } + if (changes.placement && !changes.placement.isFirstChange) { + this._applyPlacementClasses(); + } + }; + /** + * Checks if the dropdown menu is open. + */ + /** + * Checks if the dropdown menu is open. + * @return {?} + */ + NgbDropdown.prototype.isOpen = /** + * Checks if the dropdown menu is open. + * @return {?} + */ + function () { return this._open; }; + /** + * Opens the dropdown menu. + */ + /** + * Opens the dropdown menu. + * @return {?} + */ + NgbDropdown.prototype.open = /** + * Opens the dropdown menu. + * @return {?} + */ + function () { + if (!this._open) { + this._open = true; + this._applyContainer(this.container); + this.openChange.emit(true); + this._setCloseHandlers(); + } + }; + /** + * @private + * @return {?} + */ + NgbDropdown.prototype._setCloseHandlers = /** + * @private + * @return {?} + */ + function () { + var _this = this; + /** @type {?} */ + var anchor = this._anchor; + ngbAutoClose(this._ngZone, this._document, this.autoClose, (/** + * @return {?} + */ + function () { return _this.close(); }), this._closed$, this._menu ? [this._menuElement.nativeElement] : [], anchor ? [anchor.getNativeElement()] : [], '.dropdown-item,.dropdown-divider'); + }; + /** + * Closes the dropdown menu. + */ + /** + * Closes the dropdown menu. + * @return {?} + */ + NgbDropdown.prototype.close = /** + * Closes the dropdown menu. + * @return {?} + */ + function () { + if (this._open) { + this._open = false; + this._resetContainer(); + this._closed$.next(); + this.openChange.emit(false); + this._changeDetector.markForCheck(); + } + }; + /** + * Toggles the dropdown menu. + */ + /** + * Toggles the dropdown menu. + * @return {?} + */ + NgbDropdown.prototype.toggle = /** + * Toggles the dropdown menu. + * @return {?} + */ + function () { + if (this.isOpen()) { + this.close(); + } + else { + this.open(); + } + }; + /** + * @return {?} + */ + NgbDropdown.prototype.ngOnDestroy = /** + * @return {?} + */ + function () { + this._resetContainer(); + this._closed$.next(); + this._zoneSubscription.unsubscribe(); + }; + /** + * @param {?} event + * @return {?} + */ + NgbDropdown.prototype.onKeyDown = /** + * @param {?} event + * @return {?} + */ + function (event) { + var _this = this; + // tslint:disable-next-line:deprecation + /** @type {?} */ + var key = event.which; + /** @type {?} */ + var itemElements = this._getMenuElements(); + /** @type {?} */ + var position = -1; + /** @type {?} */ + var isEventFromItems = false; + /** @type {?} */ + var isEventFromToggle = this._isEventFromToggle(event); + if (!isEventFromToggle && itemElements.length) { + itemElements.forEach((/** + * @param {?} itemElement + * @param {?} index + * @return {?} + */ + function (itemElement, index) { + if (itemElement.contains((/** @type {?} */ (event.target)))) { + isEventFromItems = true; + } + if (itemElement === _this._document.activeElement) { + position = index; + } + })); + } + // closing on Enter / Space + if (key === Key.Space || key === Key.Enter) { + if (isEventFromItems && (this.autoClose === true || this.autoClose === 'inside')) { + this.close(); + } + return; + } + // opening / navigating + if (isEventFromToggle || isEventFromItems) { + this.open(); + if (itemElements.length) { + switch (key) { + case Key.ArrowDown: + position = Math.min(position + 1, itemElements.length - 1); + break; + case Key.ArrowUp: + if (this._isDropup() && position === -1) { + position = itemElements.length - 1; + break; + } + position = Math.max(position - 1, 0); + break; + case Key.Home: + position = 0; + break; + case Key.End: + position = itemElements.length - 1; + break; + } + itemElements[position].focus(); + } + event.preventDefault(); + } + }; + /** + * @private + * @return {?} + */ + NgbDropdown.prototype._isDropup = /** + * @private + * @return {?} + */ + function () { return this._elementRef.nativeElement.classList.contains('dropup'); }; + /** + * @private + * @param {?} event + * @return {?} + */ + NgbDropdown.prototype._isEventFromToggle = /** + * @private + * @param {?} event + * @return {?} + */ + function (event) { + return this._anchor.getNativeElement().contains((/** @type {?} */ (event.target))); + }; + /** + * @private + * @return {?} + */ + NgbDropdown.prototype._getMenuElements = /** + * @private + * @return {?} + */ + function () { + /** @type {?} */ + var menu = this._menu; + if (menu == null) { + return []; + } + return menu.menuItems.filter((/** + * @param {?} item + * @return {?} + */ + function (item) { return !item.disabled; })).map((/** + * @param {?} item + * @return {?} + */ + function (item) { return item.elementRef.nativeElement; })); + }; + /** + * @private + * @return {?} + */ + NgbDropdown.prototype._positionMenu = /** + * @private + * @return {?} + */ + function () { + /** @type {?} */ + var menu = this._menu; + if (this.isOpen() && menu) { + this._applyPlacementClasses(this.display === 'dynamic' ? + positionElements(this._anchor.anchorEl, this._bodyContainer || this._menuElement.nativeElement, this.placement, this.container === 'body') : + this._getFirstPlacement(this.placement)); + } + }; + /** + * @private + * @param {?} placement + * @return {?} + */ + NgbDropdown.prototype._getFirstPlacement = /** + * @private + * @param {?} placement + * @return {?} + */ + function (placement) { + return Array.isArray(placement) ? placement[0] : (/** @type {?} */ (placement.split(' ')[0])); + }; + /** + * @private + * @return {?} + */ + NgbDropdown.prototype._resetContainer = /** + * @private + * @return {?} + */ + function () { + /** @type {?} */ + var renderer = this._renderer; + /** @type {?} */ + var menuElement = this._menuElement; + if (menuElement) { + /** @type {?} */ + var dropdownElement = this._elementRef.nativeElement; + /** @type {?} */ + var dropdownMenuElement = menuElement.nativeElement; + renderer.appendChild(dropdownElement, dropdownMenuElement); + renderer.removeStyle(dropdownMenuElement, 'position'); + renderer.removeStyle(dropdownMenuElement, 'transform'); + } + if (this._bodyContainer) { + renderer.removeChild(this._document.body, this._bodyContainer); + this._bodyContainer = null; + } + }; + /** + * @private + * @param {?=} container + * @return {?} + */ + NgbDropdown.prototype._applyContainer = /** + * @private + * @param {?=} container + * @return {?} + */ + function (container) { + if (container === void 0) { container = null; } + this._resetContainer(); + if (container === 'body') { + /** @type {?} */ + var renderer = this._renderer; + /** @type {?} */ + var dropdownMenuElement = this._menuElement.nativeElement; + /** @type {?} */ + var bodyContainer = this._bodyContainer = this._bodyContainer || renderer.createElement('div'); + // Override some styles to have the positionning working + renderer.setStyle(bodyContainer, 'position', 'absolute'); + renderer.setStyle(dropdownMenuElement, 'position', 'static'); + renderer.setStyle(bodyContainer, 'z-index', '1050'); + renderer.appendChild(bodyContainer, dropdownMenuElement); + renderer.appendChild(this._document.body, bodyContainer); + } + }; + /** + * @private + * @param {?=} placement + * @return {?} + */ + NgbDropdown.prototype._applyPlacementClasses = /** + * @private + * @param {?=} placement + * @return {?} + */ + function (placement) { + /** @type {?} */ + var menu = this._menu; + if (menu) { + if (!placement) { + placement = this._getFirstPlacement(this.placement); + } + /** @type {?} */ + var renderer = this._renderer; + /** @type {?} */ + var dropdownElement = this._elementRef.nativeElement; + // remove the current placement classes + renderer.removeClass(dropdownElement, 'dropup'); + renderer.removeClass(dropdownElement, 'dropdown'); + menu.placement = this.display === 'static' ? null : placement; + /* + * apply the new placement + * in case of top use up-arrow or down-arrow otherwise + */ + /** @type {?} */ + var dropdownClass = placement.search('^top') !== -1 ? 'dropup' : 'dropdown'; + renderer.addClass(dropdownElement, dropdownClass); + /** @type {?} */ + var bodyContainer = this._bodyContainer; + if (bodyContainer) { + renderer.removeClass(bodyContainer, 'dropup'); + renderer.removeClass(bodyContainer, 'dropdown'); + renderer.addClass(bodyContainer, dropdownClass); + } + } + }; + NgbDropdown.decorators = [ + { type: Directive, args: [{ selector: '[ngbDropdown]', exportAs: 'ngbDropdown', host: { '[class.show]': 'isOpen()' } },] } + ]; + /** @nocollapse */ + NgbDropdown.ctorParameters = function () { return [ + { type: ChangeDetectorRef }, + { type: NgbDropdownConfig }, + { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }, + { type: NgZone }, + { type: ElementRef }, + { type: Renderer2 }, + { type: NgbNavbar, decorators: [{ type: Optional }] } + ]; }; + NgbDropdown.propDecorators = { + _menu: [{ type: ContentChild, args: [NgbDropdownMenu, { static: false },] }], + _menuElement: [{ type: ContentChild, args: [NgbDropdownMenu, { read: ElementRef, static: false },] }], + _anchor: [{ type: ContentChild, args: [NgbDropdownAnchor, { static: false },] }], + autoClose: [{ type: Input }], + _open: [{ type: Input, args: ['open',] }], + placement: [{ type: Input }], + container: [{ type: Input }], + display: [{ type: Input }], + openChange: [{ type: Output }] + }; + return NgbDropdown; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @type {?} */ +var NGB_DROPDOWN_DIRECTIVES = [NgbDropdown, NgbDropdownAnchor, NgbDropdownToggle, NgbDropdownMenu, NgbDropdownItem, NgbNavbar]; +var NgbDropdownModule = /** @class */ (function () { + function NgbDropdownModule() { + } + NgbDropdownModule.decorators = [ + { type: NgModule, args: [{ declarations: NGB_DROPDOWN_DIRECTIVES, exports: NGB_DROPDOWN_DIRECTIVES },] } + ]; + return NgbDropdownModule; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * A configuration service for the [`NgbModal`](#/components/modal/api#NgbModal) service. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all modals used in the application. + * + * \@since 3.1.0 + */ +var NgbModalConfig = /** @class */ (function () { + function NgbModalConfig() { + this.backdrop = true; + this.keyboard = true; + } + NgbModalConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ NgbModalConfig.ngInjectableDef = ɵɵdefineInjectable({ factory: function NgbModalConfig_Factory() { return new NgbModalConfig(); }, token: NgbModalConfig, providedIn: "root" }); + return NgbModalConfig; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +var ContentRef = /** @class */ (function () { + function ContentRef(nodes, viewRef, componentRef) { + this.nodes = nodes; + this.viewRef = viewRef; + this.componentRef = componentRef; + } + return ContentRef; +}()); +/** + * @template T + */ +var /** + * @template T + */ +PopupService = /** @class */ (function () { + function PopupService(_type, _injector, _viewContainerRef, _renderer, _componentFactoryResolver, _applicationRef) { + this._type = _type; + this._injector = _injector; + this._viewContainerRef = _viewContainerRef; + this._renderer = _renderer; + this._componentFactoryResolver = _componentFactoryResolver; + this._applicationRef = _applicationRef; + } + /** + * @param {?=} content + * @param {?=} context + * @return {?} + */ + PopupService.prototype.open = /** + * @param {?=} content + * @param {?=} context + * @return {?} + */ + function (content, context) { + if (!this._windowRef) { + this._contentRef = this._getContentRef(content, context); + this._windowRef = this._viewContainerRef.createComponent(this._componentFactoryResolver.resolveComponentFactory(this._type), 0, this._injector, this._contentRef.nodes); + } + return this._windowRef; + }; + /** + * @return {?} + */ + PopupService.prototype.close = /** + * @return {?} + */ + function () { + if (this._windowRef) { + this._viewContainerRef.remove(this._viewContainerRef.indexOf(this._windowRef.hostView)); + this._windowRef = null; + if (this._contentRef.viewRef) { + this._applicationRef.detachView(this._contentRef.viewRef); + this._contentRef.viewRef.destroy(); + this._contentRef = null; + } + } + }; + /** + * @private + * @param {?} content + * @param {?=} context + * @return {?} + */ + PopupService.prototype._getContentRef = /** + * @private + * @param {?} content + * @param {?=} context + * @return {?} + */ + function (content, context) { + if (!content) { + return new ContentRef([]); + } + else if (content instanceof TemplateRef) { + /** @type {?} */ + var viewRef = content.createEmbeddedView(context); + this._applicationRef.attachView(viewRef); + return new ContentRef([viewRef.rootNodes], viewRef); + } + else { + return new ContentRef([[this._renderer.createText("" + content)]]); + } + }; + return PopupService; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @type {?} */ +var noop = (/** + * @return {?} + */ +function () { }); +/** + * Utility to handle the scrollbar. + * + * It allows to compensate the lack of a vertical scrollbar by adding an + * equivalent padding on the right of the body, and to remove this compensation. + */ +var ScrollBar = /** @class */ (function () { + function ScrollBar(_document) { + this._document = _document; + } + /** + * Detects if a scrollbar is present and if yes, already compensates for its + * removal by adding an equivalent padding on the right of the body. + * + * @return a callback used to revert the compensation (noop if there was none, + * otherwise a function removing the padding) + */ + /** + * Detects if a scrollbar is present and if yes, already compensates for its + * removal by adding an equivalent padding on the right of the body. + * + * @return {?} a callback used to revert the compensation (noop if there was none, + * otherwise a function removing the padding) + */ + ScrollBar.prototype.compensate = /** + * Detects if a scrollbar is present and if yes, already compensates for its + * removal by adding an equivalent padding on the right of the body. + * + * @return {?} a callback used to revert the compensation (noop if there was none, + * otherwise a function removing the padding) + */ + function () { return !this._isPresent() ? noop : this._adjustBody(this._getWidth()); }; + /** + * Adds a padding of the given width on the right of the body. + * + * @return a callback used to revert the padding to its previous value + */ + /** + * Adds a padding of the given width on the right of the body. + * + * @private + * @param {?} width + * @return {?} a callback used to revert the padding to its previous value + */ + ScrollBar.prototype._adjustBody = /** + * Adds a padding of the given width on the right of the body. + * + * @private + * @param {?} width + * @return {?} a callback used to revert the padding to its previous value + */ + function (width) { + /** @type {?} */ + var body = this._document.body; + /** @type {?} */ + var userSetPadding = body.style.paddingRight; + /** @type {?} */ + var paddingAmount = parseFloat(window.getComputedStyle(body)['padding-right']); + body.style['padding-right'] = paddingAmount + width + "px"; + return (/** + * @return {?} + */ + function () { return body.style['padding-right'] = userSetPadding; }); + }; + /** + * Tells whether a scrollbar is currently present on the body. + * + * @return true if scrollbar is present, false otherwise + */ + /** + * Tells whether a scrollbar is currently present on the body. + * + * @private + * @return {?} true if scrollbar is present, false otherwise + */ + ScrollBar.prototype._isPresent = /** + * Tells whether a scrollbar is currently present on the body. + * + * @private + * @return {?} true if scrollbar is present, false otherwise + */ + function () { + /** @type {?} */ + var rect = this._document.body.getBoundingClientRect(); + return rect.left + rect.right < window.innerWidth; + }; + /** + * Calculates and returns the width of a scrollbar. + * + * @return the width of a scrollbar on this page + */ + /** + * Calculates and returns the width of a scrollbar. + * + * @private + * @return {?} the width of a scrollbar on this page + */ + ScrollBar.prototype._getWidth = /** + * Calculates and returns the width of a scrollbar. + * + * @private + * @return {?} the width of a scrollbar on this page + */ + function () { + /** @type {?} */ + var measurer = this._document.createElement('div'); + measurer.className = 'modal-scrollbar-measure'; + /** @type {?} */ + var body = this._document.body; + body.appendChild(measurer); + /** @type {?} */ + var width = measurer.getBoundingClientRect().width - measurer.clientWidth; + body.removeChild(measurer); + return width; + }; + ScrollBar.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ + ScrollBar.ctorParameters = function () { return [ + { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] } + ]; }; + /** @nocollapse */ ScrollBar.ngInjectableDef = ɵɵdefineInjectable({ factory: function ScrollBar_Factory() { return new ScrollBar(ɵɵinject(DOCUMENT)); }, token: ScrollBar, providedIn: "root" }); + return ScrollBar; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +var NgbModalBackdrop = /** @class */ (function () { + function NgbModalBackdrop() { + } + NgbModalBackdrop.decorators = [ + { type: Component, args: [{ + selector: 'ngb-modal-backdrop', + template: '', + host: { '[class]': '"modal-backdrop fade show" + (backdropClass ? " " + backdropClass : "")', 'style': 'z-index: 1050' } + }] } + ]; + NgbModalBackdrop.propDecorators = { + backdropClass: [{ type: Input }] + }; + return NgbModalBackdrop; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * A reference to the currently opened (active) modal. + * + * Instances of this class can be injected into your component passed as modal content. + * So you can `.close()` or `.dismiss()` the modal window from your component. + */ +var /** + * A reference to the currently opened (active) modal. + * + * Instances of this class can be injected into your component passed as modal content. + * So you can `.close()` or `.dismiss()` the modal window from your component. + */ +NgbActiveModal = /** @class */ (function () { + function NgbActiveModal() { + } + /** + * Closes the modal with an optional `result` value. + * + * The `NgbMobalRef.result` promise will be resolved with the provided value. + */ + /** + * Closes the modal with an optional `result` value. + * + * The `NgbMobalRef.result` promise will be resolved with the provided value. + * @param {?=} result + * @return {?} + */ + NgbActiveModal.prototype.close = /** + * Closes the modal with an optional `result` value. + * + * The `NgbMobalRef.result` promise will be resolved with the provided value. + * @param {?=} result + * @return {?} + */ + function (result) { }; + /** + * Dismisses the modal with an optional `reason` value. + * + * The `NgbModalRef.result` promise will be rejected with the provided value. + */ + /** + * Dismisses the modal with an optional `reason` value. + * + * The `NgbModalRef.result` promise will be rejected with the provided value. + * @param {?=} reason + * @return {?} + */ + NgbActiveModal.prototype.dismiss = /** + * Dismisses the modal with an optional `reason` value. + * + * The `NgbModalRef.result` promise will be rejected with the provided value. + * @param {?=} reason + * @return {?} + */ + function (reason) { }; + return NgbActiveModal; +}()); +/** + * A reference to the newly opened modal returned by the `NgbModal.open()` method. + */ +var /** + * A reference to the newly opened modal returned by the `NgbModal.open()` method. + */ +NgbModalRef = /** @class */ (function () { + function NgbModalRef(_windowCmptRef, _contentRef, _backdropCmptRef, _beforeDismiss) { + var _this = this; + this._windowCmptRef = _windowCmptRef; + this._contentRef = _contentRef; + this._backdropCmptRef = _backdropCmptRef; + this._beforeDismiss = _beforeDismiss; + _windowCmptRef.instance.dismissEvent.subscribe((/** + * @param {?} reason + * @return {?} + */ + function (reason) { _this.dismiss(reason); })); + this.result = new Promise((/** + * @param {?} resolve + * @param {?} reject + * @return {?} + */ + function (resolve, reject) { + _this._resolve = resolve; + _this._reject = reject; + })); + this.result.then(null, (/** + * @return {?} + */ + function () { })); + } + Object.defineProperty(NgbModalRef.prototype, "componentInstance", { + /** + * The instance of a component used for the modal content. + * + * When a `TemplateRef` is used as the content, will return `undefined`. + */ + get: /** + * The instance of a component used for the modal content. + * + * When a `TemplateRef` is used as the content, will return `undefined`. + * @return {?} + */ + function () { + if (this._contentRef.componentRef) { + return this._contentRef.componentRef.instance; + } + }, + enumerable: true, + configurable: true + }); + /** + * Closes the modal with an optional `result` value. + * + * The `NgbMobalRef.result` promise will be resolved with the provided value. + */ + /** + * Closes the modal with an optional `result` value. + * + * The `NgbMobalRef.result` promise will be resolved with the provided value. + * @param {?=} result + * @return {?} + */ + NgbModalRef.prototype.close = /** + * Closes the modal with an optional `result` value. + * + * The `NgbMobalRef.result` promise will be resolved with the provided value. + * @param {?=} result + * @return {?} + */ + function (result) { + if (this._windowCmptRef) { + this._resolve(result); + this._removeModalElements(); + } + }; + /** + * @private + * @param {?=} reason + * @return {?} + */ + NgbModalRef.prototype._dismiss = /** + * @private + * @param {?=} reason + * @return {?} + */ + function (reason) { + this._reject(reason); + this._removeModalElements(); + }; + /** + * Dismisses the modal with an optional `reason` value. + * + * The `NgbModalRef.result` promise will be rejected with the provided value. + */ + /** + * Dismisses the modal with an optional `reason` value. + * + * The `NgbModalRef.result` promise will be rejected with the provided value. + * @param {?=} reason + * @return {?} + */ + NgbModalRef.prototype.dismiss = /** + * Dismisses the modal with an optional `reason` value. + * + * The `NgbModalRef.result` promise will be rejected with the provided value. + * @param {?=} reason + * @return {?} + */ + function (reason) { + var _this = this; + if (this._windowCmptRef) { + if (!this._beforeDismiss) { + this._dismiss(reason); + } + else { + /** @type {?} */ + var dismiss = this._beforeDismiss(); + if (dismiss && dismiss.then) { + dismiss.then((/** + * @param {?} result + * @return {?} + */ + function (result) { + if (result !== false) { + _this._dismiss(reason); + } + }), (/** + * @return {?} + */ + function () { })); + } + else if (dismiss !== false) { + this._dismiss(reason); + } + } + } + }; + /** + * @private + * @return {?} + */ + NgbModalRef.prototype._removeModalElements = /** + * @private + * @return {?} + */ + function () { + /** @type {?} */ + var windowNativeEl = this._windowCmptRef.location.nativeElement; + windowNativeEl.parentNode.removeChild(windowNativeEl); + this._windowCmptRef.destroy(); + if (this._backdropCmptRef) { + /** @type {?} */ + var backdropNativeEl = this._backdropCmptRef.location.nativeElement; + backdropNativeEl.parentNode.removeChild(backdropNativeEl); + this._backdropCmptRef.destroy(); + } + if (this._contentRef && this._contentRef.viewRef) { + this._contentRef.viewRef.destroy(); + } + this._windowCmptRef = null; + this._backdropCmptRef = null; + this._contentRef = null; + }; + return NgbModalRef; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @enum {number} */ +var ModalDismissReasons = { + BACKDROP_CLICK: 0, + ESC: 1, +}; +ModalDismissReasons[ModalDismissReasons.BACKDROP_CLICK] = 'BACKDROP_CLICK'; +ModalDismissReasons[ModalDismissReasons.ESC] = 'ESC'; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +var NgbModalWindow = /** @class */ (function () { + function NgbModalWindow(_document, _elRef) { + this._document = _document; + this._elRef = _elRef; + this.backdrop = true; + this.keyboard = true; + this.dismissEvent = new EventEmitter(); + } + /** + * @param {?} $event + * @return {?} + */ + NgbModalWindow.prototype.backdropClick = /** + * @param {?} $event + * @return {?} + */ + function ($event) { + if (this.backdrop === true && this._elRef.nativeElement === $event.target) { + this.dismiss(ModalDismissReasons.BACKDROP_CLICK); + } + }; + /** + * @param {?} $event + * @return {?} + */ + NgbModalWindow.prototype.escKey = /** + * @param {?} $event + * @return {?} + */ + function ($event) { + if (this.keyboard && !$event.defaultPrevented) { + this.dismiss(ModalDismissReasons.ESC); + } + }; + /** + * @param {?} reason + * @return {?} + */ + NgbModalWindow.prototype.dismiss = /** + * @param {?} reason + * @return {?} + */ + function (reason) { this.dismissEvent.emit(reason); }; + /** + * @return {?} + */ + NgbModalWindow.prototype.ngOnInit = /** + * @return {?} + */ + function () { this._elWithFocus = this._document.activeElement; }; + /** + * @return {?} + */ + NgbModalWindow.prototype.ngAfterViewInit = /** + * @return {?} + */ + function () { + if (!this._elRef.nativeElement.contains(document.activeElement)) { + /** @type {?} */ + var autoFocusable = (/** @type {?} */ (this._elRef.nativeElement.querySelector("[ngbAutofocus]"))); + /** @type {?} */ + var firstFocusable = getFocusableBoundaryElements(this._elRef.nativeElement)[0]; + /** @type {?} */ + var elementToFocus = autoFocusable || firstFocusable || this._elRef.nativeElement; + elementToFocus.focus(); + } + }; + /** + * @return {?} + */ + NgbModalWindow.prototype.ngOnDestroy = /** + * @return {?} + */ + function () { + /** @type {?} */ + var body = this._document.body; + /** @type {?} */ + var elWithFocus = this._elWithFocus; + /** @type {?} */ + var elementToFocus; + if (elWithFocus && elWithFocus['focus'] && body.contains(elWithFocus)) { + elementToFocus = elWithFocus; + } + else { + elementToFocus = body; + } + elementToFocus.focus(); + this._elWithFocus = null; + }; + NgbModalWindow.decorators = [ + { type: Component, args: [{ + selector: 'ngb-modal-window', + host: { + '[class]': '"modal fade show d-block" + (windowClass ? " " + windowClass : "")', + 'role': 'dialog', + 'tabindex': '-1', + '(keyup.esc)': 'escKey($event)', + '(click)': 'backdropClick($event)', + '[attr.aria-modal]': 'true', + '[attr.aria-labelledby]': 'ariaLabelledBy', + }, + template: "\n
\n
\n
\n ", + encapsulation: ViewEncapsulation.None, + styles: ["ngb-modal-window .component-host-scrollable{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;overflow:hidden}"] + }] } + ]; + /** @nocollapse */ + NgbModalWindow.ctorParameters = function () { return [ + { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }, + { type: ElementRef } + ]; }; + NgbModalWindow.propDecorators = { + ariaLabelledBy: [{ type: Input }], + backdrop: [{ type: Input }], + centered: [{ type: Input }], + keyboard: [{ type: Input }], + scrollable: [{ type: Input }], + size: [{ type: Input }], + windowClass: [{ type: Input }], + dismissEvent: [{ type: Output, args: ['dismiss',] }] + }; + return NgbModalWindow; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +var NgbModalStack = /** @class */ (function () { + function NgbModalStack(_applicationRef, _injector, _document, _scrollBar, _rendererFactory) { + var _this = this; + this._applicationRef = _applicationRef; + this._injector = _injector; + this._document = _document; + this._scrollBar = _scrollBar; + this._rendererFactory = _rendererFactory; + this._activeWindowCmptHasChanged = new Subject(); + this._ariaHiddenValues = new Map(); + this._backdropAttributes = ['backdropClass']; + this._modalRefs = []; + this._windowAttributes = ['ariaLabelledBy', 'backdrop', 'centered', 'keyboard', 'scrollable', 'size', 'windowClass']; + this._windowCmpts = []; + // Trap focus on active WindowCmpt + this._activeWindowCmptHasChanged.subscribe((/** + * @return {?} + */ + function () { + if (_this._windowCmpts.length) { + /** @type {?} */ + var activeWindowCmpt = _this._windowCmpts[_this._windowCmpts.length - 1]; + ngbFocusTrap(activeWindowCmpt.location.nativeElement, _this._activeWindowCmptHasChanged); + _this._revertAriaHidden(); + _this._setAriaHidden(activeWindowCmpt.location.nativeElement); + } + })); + } + /** + * @param {?} moduleCFR + * @param {?} contentInjector + * @param {?} content + * @param {?} options + * @return {?} + */ + NgbModalStack.prototype.open = /** + * @param {?} moduleCFR + * @param {?} contentInjector + * @param {?} content + * @param {?} options + * @return {?} + */ + function (moduleCFR, contentInjector, content, options) { + var _this = this; + /** @type {?} */ + var containerEl = isDefined(options.container) ? this._document.querySelector(options.container) : this._document.body; + /** @type {?} */ + var renderer = this._rendererFactory.createRenderer(null, null); + /** @type {?} */ + var revertPaddingForScrollBar = this._scrollBar.compensate(); + /** @type {?} */ + var removeBodyClass = (/** + * @return {?} + */ + function () { + if (!_this._modalRefs.length) { + renderer.removeClass(_this._document.body, 'modal-open'); + _this._revertAriaHidden(); + } + }); + if (!containerEl) { + throw new Error("The specified modal container \"" + (options.container || 'body') + "\" was not found in the DOM."); + } + /** @type {?} */ + var activeModal = new NgbActiveModal(); + /** @type {?} */ + var contentRef = this._getContentRef(moduleCFR, options.injector || contentInjector, content, activeModal, options); + /** @type {?} */ + var backdropCmptRef = options.backdrop !== false ? this._attachBackdrop(moduleCFR, containerEl) : null; + /** @type {?} */ + var windowCmptRef = this._attachWindowComponent(moduleCFR, containerEl, contentRef); + /** @type {?} */ + var ngbModalRef = new NgbModalRef(windowCmptRef, contentRef, backdropCmptRef, options.beforeDismiss); + this._registerModalRef(ngbModalRef); + this._registerWindowCmpt(windowCmptRef); + ngbModalRef.result.then(revertPaddingForScrollBar, revertPaddingForScrollBar); + ngbModalRef.result.then(removeBodyClass, removeBodyClass); + activeModal.close = (/** + * @param {?} result + * @return {?} + */ + function (result) { ngbModalRef.close(result); }); + activeModal.dismiss = (/** + * @param {?} reason + * @return {?} + */ + function (reason) { ngbModalRef.dismiss(reason); }); + this._applyWindowOptions(windowCmptRef.instance, options); + if (this._modalRefs.length === 1) { + renderer.addClass(this._document.body, 'modal-open'); + } + if (backdropCmptRef && backdropCmptRef.instance) { + this._applyBackdropOptions(backdropCmptRef.instance, options); + } + return ngbModalRef; + }; + /** + * @param {?=} reason + * @return {?} + */ + NgbModalStack.prototype.dismissAll = /** + * @param {?=} reason + * @return {?} + */ + function (reason) { this._modalRefs.forEach((/** + * @param {?} ngbModalRef + * @return {?} + */ + function (ngbModalRef) { return ngbModalRef.dismiss(reason); })); }; + /** + * @return {?} + */ + NgbModalStack.prototype.hasOpenModals = /** + * @return {?} + */ + function () { return this._modalRefs.length > 0; }; + /** + * @private + * @param {?} moduleCFR + * @param {?} containerEl + * @return {?} + */ + NgbModalStack.prototype._attachBackdrop = /** + * @private + * @param {?} moduleCFR + * @param {?} containerEl + * @return {?} + */ + function (moduleCFR, containerEl) { + /** @type {?} */ + var backdropFactory = moduleCFR.resolveComponentFactory(NgbModalBackdrop); + /** @type {?} */ + var backdropCmptRef = backdropFactory.create(this._injector); + this._applicationRef.attachView(backdropCmptRef.hostView); + containerEl.appendChild(backdropCmptRef.location.nativeElement); + return backdropCmptRef; + }; + /** + * @private + * @param {?} moduleCFR + * @param {?} containerEl + * @param {?} contentRef + * @return {?} + */ + NgbModalStack.prototype._attachWindowComponent = /** + * @private + * @param {?} moduleCFR + * @param {?} containerEl + * @param {?} contentRef + * @return {?} + */ + function (moduleCFR, containerEl, contentRef) { + /** @type {?} */ + var windowFactory = moduleCFR.resolveComponentFactory(NgbModalWindow); + /** @type {?} */ + var windowCmptRef = windowFactory.create(this._injector, contentRef.nodes); + this._applicationRef.attachView(windowCmptRef.hostView); + containerEl.appendChild(windowCmptRef.location.nativeElement); + return windowCmptRef; + }; + /** + * @private + * @param {?} windowInstance + * @param {?} options + * @return {?} + */ + NgbModalStack.prototype._applyWindowOptions = /** + * @private + * @param {?} windowInstance + * @param {?} options + * @return {?} + */ + function (windowInstance, options) { + this._windowAttributes.forEach((/** + * @param {?} optionName + * @return {?} + */ + function (optionName) { + if (isDefined(options[optionName])) { + windowInstance[optionName] = options[optionName]; + } + })); + }; + /** + * @private + * @param {?} backdropInstance + * @param {?} options + * @return {?} + */ + NgbModalStack.prototype._applyBackdropOptions = /** + * @private + * @param {?} backdropInstance + * @param {?} options + * @return {?} + */ + function (backdropInstance, options) { + this._backdropAttributes.forEach((/** + * @param {?} optionName + * @return {?} + */ + function (optionName) { + if (isDefined(options[optionName])) { + backdropInstance[optionName] = options[optionName]; + } + })); + }; + /** + * @private + * @param {?} moduleCFR + * @param {?} contentInjector + * @param {?} content + * @param {?} activeModal + * @param {?} options + * @return {?} + */ + NgbModalStack.prototype._getContentRef = /** + * @private + * @param {?} moduleCFR + * @param {?} contentInjector + * @param {?} content + * @param {?} activeModal + * @param {?} options + * @return {?} + */ + function (moduleCFR, contentInjector, content, activeModal, options) { + if (!content) { + return new ContentRef([]); + } + else if (content instanceof TemplateRef) { + return this._createFromTemplateRef(content, activeModal); + } + else if (isString(content)) { + return this._createFromString(content); + } + else { + return this._createFromComponent(moduleCFR, contentInjector, content, activeModal, options); + } + }; + /** + * @private + * @param {?} content + * @param {?} activeModal + * @return {?} + */ + NgbModalStack.prototype._createFromTemplateRef = /** + * @private + * @param {?} content + * @param {?} activeModal + * @return {?} + */ + function (content, activeModal) { + /** @type {?} */ + var context = { + $implicit: activeModal, + close: /** + * @param {?} result + * @return {?} + */ + function (result) { activeModal.close(result); }, + dismiss: /** + * @param {?} reason + * @return {?} + */ + function (reason) { activeModal.dismiss(reason); } + }; + /** @type {?} */ + var viewRef = content.createEmbeddedView(context); + this._applicationRef.attachView(viewRef); + return new ContentRef([viewRef.rootNodes], viewRef); + }; + /** + * @private + * @param {?} content + * @return {?} + */ + NgbModalStack.prototype._createFromString = /** + * @private + * @param {?} content + * @return {?} + */ + function (content) { + /** @type {?} */ + var component = this._document.createTextNode("" + content); + return new ContentRef([[component]]); + }; + /** + * @private + * @param {?} moduleCFR + * @param {?} contentInjector + * @param {?} content + * @param {?} context + * @param {?} options + * @return {?} + */ + NgbModalStack.prototype._createFromComponent = /** + * @private + * @param {?} moduleCFR + * @param {?} contentInjector + * @param {?} content + * @param {?} context + * @param {?} options + * @return {?} + */ + function (moduleCFR, contentInjector, content, context, options) { + /** @type {?} */ + var contentCmptFactory = moduleCFR.resolveComponentFactory(content); + /** @type {?} */ + var modalContentInjector = Injector.create({ providers: [{ provide: NgbActiveModal, useValue: context }], parent: contentInjector }); + /** @type {?} */ + var componentRef = contentCmptFactory.create(modalContentInjector); + /** @type {?} */ + var componentNativeEl = componentRef.location.nativeElement; + if (options.scrollable) { + ((/** @type {?} */ (componentNativeEl))).classList.add('component-host-scrollable'); + } + this._applicationRef.attachView(componentRef.hostView); + // FIXME: we should here get rid of the component nativeElement + // and use `[Array.from(componentNativeEl.childNodes)]` instead and remove the above CSS class. + return new ContentRef([[componentNativeEl]], componentRef.hostView, componentRef); + }; + /** + * @private + * @param {?} element + * @return {?} + */ + NgbModalStack.prototype._setAriaHidden = /** + * @private + * @param {?} element + * @return {?} + */ + function (element) { + var _this = this; + /** @type {?} */ + var parent = element.parentElement; + if (parent && element !== this._document.body) { + Array.from(parent.children).forEach((/** + * @param {?} sibling + * @return {?} + */ + function (sibling) { + if (sibling !== element && sibling.nodeName !== 'SCRIPT') { + _this._ariaHiddenValues.set(sibling, sibling.getAttribute('aria-hidden')); + sibling.setAttribute('aria-hidden', 'true'); + } + })); + this._setAriaHidden(parent); + } + }; + /** + * @private + * @return {?} + */ + NgbModalStack.prototype._revertAriaHidden = /** + * @private + * @return {?} + */ + function () { + this._ariaHiddenValues.forEach((/** + * @param {?} value + * @param {?} element + * @return {?} + */ + function (value, element) { + if (value) { + element.setAttribute('aria-hidden', value); + } + else { + element.removeAttribute('aria-hidden'); + } + })); + this._ariaHiddenValues.clear(); + }; + /** + * @private + * @param {?} ngbModalRef + * @return {?} + */ + NgbModalStack.prototype._registerModalRef = /** + * @private + * @param {?} ngbModalRef + * @return {?} + */ + function (ngbModalRef) { + var _this = this; + /** @type {?} */ + var unregisterModalRef = (/** + * @return {?} + */ + function () { + /** @type {?} */ + var index = _this._modalRefs.indexOf(ngbModalRef); + if (index > -1) { + _this._modalRefs.splice(index, 1); + } + }); + this._modalRefs.push(ngbModalRef); + ngbModalRef.result.then(unregisterModalRef, unregisterModalRef); + }; + /** + * @private + * @param {?} ngbWindowCmpt + * @return {?} + */ + NgbModalStack.prototype._registerWindowCmpt = /** + * @private + * @param {?} ngbWindowCmpt + * @return {?} + */ + function (ngbWindowCmpt) { + var _this = this; + this._windowCmpts.push(ngbWindowCmpt); + this._activeWindowCmptHasChanged.next(); + ngbWindowCmpt.onDestroy((/** + * @return {?} + */ + function () { + /** @type {?} */ + var index = _this._windowCmpts.indexOf(ngbWindowCmpt); + if (index > -1) { + _this._windowCmpts.splice(index, 1); + _this._activeWindowCmptHasChanged.next(); + } + })); + }; + NgbModalStack.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ + NgbModalStack.ctorParameters = function () { return [ + { type: ApplicationRef }, + { type: Injector }, + { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }, + { type: ScrollBar }, + { type: RendererFactory2 } + ]; }; + /** @nocollapse */ NgbModalStack.ngInjectableDef = ɵɵdefineInjectable({ factory: function NgbModalStack_Factory() { return new NgbModalStack(ɵɵinject(ApplicationRef), ɵɵinject(INJECTOR), ɵɵinject(DOCUMENT), ɵɵinject(ScrollBar), ɵɵinject(RendererFactory2)); }, token: NgbModalStack, providedIn: "root" }); + return NgbModalStack; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * A service for opening modal windows. + * + * Creating a modal is straightforward: create a component or a template and pass it as an argument to + * the `.open()` method. + */ +var NgbModal = /** @class */ (function () { + function NgbModal(_moduleCFR, _injector, _modalStack, _config) { + this._moduleCFR = _moduleCFR; + this._injector = _injector; + this._modalStack = _modalStack; + this._config = _config; + } + /** + * Opens a new modal window with the specified content and supplied options. + * + * Content can be provided as a `TemplateRef` or a component type. If you pass a component type as content, + * then instances of those components can be injected with an instance of the `NgbActiveModal` class. You can then + * use `NgbActiveModal` methods to close / dismiss modals from "inside" of your component. + * + * Also see the [`NgbModalOptions`](#/components/modal/api#NgbModalOptions) for the list of supported options. + */ + /** + * Opens a new modal window with the specified content and supplied options. + * + * Content can be provided as a `TemplateRef` or a component type. If you pass a component type as content, + * then instances of those components can be injected with an instance of the `NgbActiveModal` class. You can then + * use `NgbActiveModal` methods to close / dismiss modals from "inside" of your component. + * + * Also see the [`NgbModalOptions`](#/components/modal/api#NgbModalOptions) for the list of supported options. + * @param {?} content + * @param {?=} options + * @return {?} + */ + NgbModal.prototype.open = /** + * Opens a new modal window with the specified content and supplied options. + * + * Content can be provided as a `TemplateRef` or a component type. If you pass a component type as content, + * then instances of those components can be injected with an instance of the `NgbActiveModal` class. You can then + * use `NgbActiveModal` methods to close / dismiss modals from "inside" of your component. + * + * Also see the [`NgbModalOptions`](#/components/modal/api#NgbModalOptions) for the list of supported options. + * @param {?} content + * @param {?=} options + * @return {?} + */ + function (content, options) { + if (options === void 0) { options = {}; } + /** @type {?} */ + var combinedOptions = Object.assign({}, this._config, options); + return this._modalStack.open(this._moduleCFR, this._injector, content, combinedOptions); + }; + /** + * Dismisses all currently displayed modal windows with the supplied reason. + * + * @since 3.1.0 + */ + /** + * Dismisses all currently displayed modal windows with the supplied reason. + * + * \@since 3.1.0 + * @param {?=} reason + * @return {?} + */ + NgbModal.prototype.dismissAll = /** + * Dismisses all currently displayed modal windows with the supplied reason. + * + * \@since 3.1.0 + * @param {?=} reason + * @return {?} + */ + function (reason) { this._modalStack.dismissAll(reason); }; + /** + * Indicates if there are currently any open modal windows in the application. + * + * @since 3.3.0 + */ + /** + * Indicates if there are currently any open modal windows in the application. + * + * \@since 3.3.0 + * @return {?} + */ + NgbModal.prototype.hasOpenModals = /** + * Indicates if there are currently any open modal windows in the application. + * + * \@since 3.3.0 + * @return {?} + */ + function () { return this._modalStack.hasOpenModals(); }; + NgbModal.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ + NgbModal.ctorParameters = function () { return [ + { type: ComponentFactoryResolver }, + { type: Injector }, + { type: NgbModalStack }, + { type: NgbModalConfig } + ]; }; + /** @nocollapse */ NgbModal.ngInjectableDef = ɵɵdefineInjectable({ factory: function NgbModal_Factory() { return new NgbModal(ɵɵinject(ComponentFactoryResolver), ɵɵinject(INJECTOR), ɵɵinject(NgbModalStack), ɵɵinject(NgbModalConfig)); }, token: NgbModal, providedIn: "root" }); + return NgbModal; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +var NgbModalModule = /** @class */ (function () { + function NgbModalModule() { + } + NgbModalModule.decorators = [ + { type: NgModule, args: [{ + declarations: [NgbModalBackdrop, NgbModalWindow], + entryComponents: [NgbModalBackdrop, NgbModalWindow], + providers: [NgbModal] + },] } + ]; + return NgbModalModule; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * A configuration service for the [`NgbPagination`](#/components/pagination/api#NgbPagination) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the paginations used in the application. + */ +var NgbPaginationConfig = /** @class */ (function () { + function NgbPaginationConfig() { + this.disabled = false; + this.boundaryLinks = false; + this.directionLinks = true; + this.ellipses = true; + this.maxSize = 0; + this.pageSize = 10; + this.rotate = false; + } + NgbPaginationConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ NgbPaginationConfig.ngInjectableDef = ɵɵdefineInjectable({ factory: function NgbPaginationConfig_Factory() { return new NgbPaginationConfig(); }, token: NgbPaginationConfig, providedIn: "root" }); + return NgbPaginationConfig; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * A directive to match the 'ellipsis' link template + * + * \@since 4.1.0 + */ +var NgbPaginationEllipsis = /** @class */ (function () { + function NgbPaginationEllipsis(templateRef) { + this.templateRef = templateRef; + } + NgbPaginationEllipsis.decorators = [ + { type: Directive, args: [{ selector: 'ng-template[ngbPaginationEllipsis]' },] } + ]; + /** @nocollapse */ + NgbPaginationEllipsis.ctorParameters = function () { return [ + { type: TemplateRef } + ]; }; + return NgbPaginationEllipsis; +}()); +/** + * A directive to match the 'first' link template + * + * \@since 4.1.0 + */ +var NgbPaginationFirst = /** @class */ (function () { + function NgbPaginationFirst(templateRef) { + this.templateRef = templateRef; + } + NgbPaginationFirst.decorators = [ + { type: Directive, args: [{ selector: 'ng-template[ngbPaginationFirst]' },] } + ]; + /** @nocollapse */ + NgbPaginationFirst.ctorParameters = function () { return [ + { type: TemplateRef } + ]; }; + return NgbPaginationFirst; +}()); +/** + * A directive to match the 'last' link template + * + * \@since 4.1.0 + */ +var NgbPaginationLast = /** @class */ (function () { + function NgbPaginationLast(templateRef) { + this.templateRef = templateRef; + } + NgbPaginationLast.decorators = [ + { type: Directive, args: [{ selector: 'ng-template[ngbPaginationLast]' },] } + ]; + /** @nocollapse */ + NgbPaginationLast.ctorParameters = function () { return [ + { type: TemplateRef } + ]; }; + return NgbPaginationLast; +}()); +/** + * A directive to match the 'next' link template + * + * \@since 4.1.0 + */ +var NgbPaginationNext = /** @class */ (function () { + function NgbPaginationNext(templateRef) { + this.templateRef = templateRef; + } + NgbPaginationNext.decorators = [ + { type: Directive, args: [{ selector: 'ng-template[ngbPaginationNext]' },] } + ]; + /** @nocollapse */ + NgbPaginationNext.ctorParameters = function () { return [ + { type: TemplateRef } + ]; }; + return NgbPaginationNext; +}()); +/** + * A directive to match the page 'number' link template + * + * \@since 4.1.0 + */ +var NgbPaginationNumber = /** @class */ (function () { + function NgbPaginationNumber(templateRef) { + this.templateRef = templateRef; + } + NgbPaginationNumber.decorators = [ + { type: Directive, args: [{ selector: 'ng-template[ngbPaginationNumber]' },] } + ]; + /** @nocollapse */ + NgbPaginationNumber.ctorParameters = function () { return [ + { type: TemplateRef } + ]; }; + return NgbPaginationNumber; +}()); +/** + * A directive to match the 'previous' link template + * + * \@since 4.1.0 + */ +var NgbPaginationPrevious = /** @class */ (function () { + function NgbPaginationPrevious(templateRef) { + this.templateRef = templateRef; + } + NgbPaginationPrevious.decorators = [ + { type: Directive, args: [{ selector: 'ng-template[ngbPaginationPrevious]' },] } + ]; + /** @nocollapse */ + NgbPaginationPrevious.ctorParameters = function () { return [ + { type: TemplateRef } + ]; }; + return NgbPaginationPrevious; +}()); +/** + * A component that displays page numbers and allows to customize them in several ways. + */ +var NgbPagination = /** @class */ (function () { + function NgbPagination(config) { + this.pageCount = 0; + this.pages = []; + /** + * The current page. + * + * Page numbers start with `1`. + */ + this.page = 1; + /** + * An event fired when the page is changed. Will fire only if collection size is set and all values are valid. + * + * Event payload is the number of the newly selected page. + * + * Page numbers start with `1`. + */ + this.pageChange = new EventEmitter(true); + this.disabled = config.disabled; + this.boundaryLinks = config.boundaryLinks; + this.directionLinks = config.directionLinks; + this.ellipses = config.ellipses; + this.maxSize = config.maxSize; + this.pageSize = config.pageSize; + this.rotate = config.rotate; + this.size = config.size; + } + /** + * @return {?} + */ + NgbPagination.prototype.hasPrevious = /** + * @return {?} + */ + function () { return this.page > 1; }; + /** + * @return {?} + */ + NgbPagination.prototype.hasNext = /** + * @return {?} + */ + function () { return this.page < this.pageCount; }; + /** + * @return {?} + */ + NgbPagination.prototype.nextDisabled = /** + * @return {?} + */ + function () { return !this.hasNext() || this.disabled; }; + /** + * @return {?} + */ + NgbPagination.prototype.previousDisabled = /** + * @return {?} + */ + function () { return !this.hasPrevious() || this.disabled; }; + /** + * @param {?} pageNumber + * @return {?} + */ + NgbPagination.prototype.selectPage = /** + * @param {?} pageNumber + * @return {?} + */ + function (pageNumber) { this._updatePages(pageNumber); }; + /** + * @param {?} changes + * @return {?} + */ + NgbPagination.prototype.ngOnChanges = /** + * @param {?} changes + * @return {?} + */ + function (changes) { this._updatePages(this.page); }; + /** + * @param {?} pageNumber + * @return {?} + */ + NgbPagination.prototype.isEllipsis = /** + * @param {?} pageNumber + * @return {?} + */ + function (pageNumber) { return pageNumber === -1; }; + /** + * Appends ellipses and first/last page number to the displayed pages + */ + /** + * Appends ellipses and first/last page number to the displayed pages + * @private + * @param {?} start + * @param {?} end + * @return {?} + */ + NgbPagination.prototype._applyEllipses = /** + * Appends ellipses and first/last page number to the displayed pages + * @private + * @param {?} start + * @param {?} end + * @return {?} + */ + function (start, end) { + if (this.ellipses) { + if (start > 0) { + if (start > 1) { + this.pages.unshift(-1); + } + this.pages.unshift(1); + } + if (end < this.pageCount) { + if (end < (this.pageCount - 1)) { + this.pages.push(-1); + } + this.pages.push(this.pageCount); + } + } + }; + /** + * Rotates page numbers based on maxSize items visible. + * Currently selected page stays in the middle: + * + * Ex. for selected page = 6: + * [5,*6*,7] for maxSize = 3 + * [4,5,*6*,7] for maxSize = 4 + */ + /** + * Rotates page numbers based on maxSize items visible. + * Currently selected page stays in the middle: + * + * Ex. for selected page = 6: + * [5,*6*,7] for maxSize = 3 + * [4,5,*6*,7] for maxSize = 4 + * @private + * @return {?} + */ + NgbPagination.prototype._applyRotation = /** + * Rotates page numbers based on maxSize items visible. + * Currently selected page stays in the middle: + * + * Ex. for selected page = 6: + * [5,*6*,7] for maxSize = 3 + * [4,5,*6*,7] for maxSize = 4 + * @private + * @return {?} + */ + function () { + /** @type {?} */ + var start = 0; + /** @type {?} */ + var end = this.pageCount; + /** @type {?} */ + var leftOffset = Math.floor(this.maxSize / 2); + /** @type {?} */ + var rightOffset = this.maxSize % 2 === 0 ? leftOffset - 1 : leftOffset; + if (this.page <= leftOffset) { + // very beginning, no rotation -> [0..maxSize] + end = this.maxSize; + } + else if (this.pageCount - this.page < leftOffset) { + // very end, no rotation -> [len-maxSize..len] + start = this.pageCount - this.maxSize; + } + else { + // rotate + start = this.page - leftOffset - 1; + end = this.page + rightOffset; + } + return [start, end]; + }; + /** + * Paginates page numbers based on maxSize items per page. + */ + /** + * Paginates page numbers based on maxSize items per page. + * @private + * @return {?} + */ + NgbPagination.prototype._applyPagination = /** + * Paginates page numbers based on maxSize items per page. + * @private + * @return {?} + */ + function () { + /** @type {?} */ + var page = Math.ceil(this.page / this.maxSize) - 1; + /** @type {?} */ + var start = page * this.maxSize; + /** @type {?} */ + var end = start + this.maxSize; + return [start, end]; + }; + /** + * @private + * @param {?} newPageNo + * @return {?} + */ + NgbPagination.prototype._setPageInRange = /** + * @private + * @param {?} newPageNo + * @return {?} + */ + function (newPageNo) { + /** @type {?} */ + var prevPageNo = this.page; + this.page = getValueInRange(newPageNo, this.pageCount, 1); + if (this.page !== prevPageNo && isNumber(this.collectionSize)) { + this.pageChange.emit(this.page); + } + }; + /** + * @private + * @param {?} newPage + * @return {?} + */ + NgbPagination.prototype._updatePages = /** + * @private + * @param {?} newPage + * @return {?} + */ + function (newPage) { + var _a, _b; + this.pageCount = Math.ceil(this.collectionSize / this.pageSize); + if (!isNumber(this.pageCount)) { + this.pageCount = 0; + } + // fill-in model needed to render pages + this.pages.length = 0; + for (var i = 1; i <= this.pageCount; i++) { + this.pages.push(i); + } + // set page within 1..max range + this._setPageInRange(newPage); + // apply maxSize if necessary + if (this.maxSize > 0 && this.pageCount > this.maxSize) { + /** @type {?} */ + var start = 0; + /** @type {?} */ + var end = this.pageCount; + // either paginating or rotating page numbers + if (this.rotate) { + _a = __read(this._applyRotation(), 2), start = _a[0], end = _a[1]; + } + else { + _b = __read(this._applyPagination(), 2), start = _b[0], end = _b[1]; + } + this.pages = this.pages.slice(start, end); + // adding ellipses + this._applyEllipses(start, end); + } + }; + NgbPagination.decorators = [ + { type: Component, args: [{ + selector: 'ngb-pagination', + changeDetection: ChangeDetectionStrategy.OnPush, + host: { 'role': 'navigation' }, + template: "\n ««\n «\n »\n »»\n ...\n \n {{ page }}\n (current)\n \n \n " + }] } + ]; + /** @nocollapse */ + NgbPagination.ctorParameters = function () { return [ + { type: NgbPaginationConfig } + ]; }; + NgbPagination.propDecorators = { + tplEllipsis: [{ type: ContentChild, args: [NgbPaginationEllipsis, { static: false },] }], + tplFirst: [{ type: ContentChild, args: [NgbPaginationFirst, { static: false },] }], + tplLast: [{ type: ContentChild, args: [NgbPaginationLast, { static: false },] }], + tplNext: [{ type: ContentChild, args: [NgbPaginationNext, { static: false },] }], + tplNumber: [{ type: ContentChild, args: [NgbPaginationNumber, { static: false },] }], + tplPrevious: [{ type: ContentChild, args: [NgbPaginationPrevious, { static: false },] }], + disabled: [{ type: Input }], + boundaryLinks: [{ type: Input }], + directionLinks: [{ type: Input }], + ellipses: [{ type: Input }], + rotate: [{ type: Input }], + collectionSize: [{ type: Input }], + maxSize: [{ type: Input }], + page: [{ type: Input }], + pageSize: [{ type: Input }], + pageChange: [{ type: Output }], + size: [{ type: Input }] + }; + return NgbPagination; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @type {?} */ +var DIRECTIVES = [ + NgbPagination, NgbPaginationEllipsis, NgbPaginationFirst, NgbPaginationLast, NgbPaginationNext, NgbPaginationNumber, + NgbPaginationPrevious +]; +var NgbPaginationModule = /** @class */ (function () { + function NgbPaginationModule() { + } + NgbPaginationModule.decorators = [ + { type: NgModule, args: [{ declarations: DIRECTIVES, exports: DIRECTIVES, imports: [CommonModule] },] } + ]; + return NgbPaginationModule; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +var Trigger = /** @class */ (function () { + function Trigger(open, close) { + this.open = open; + this.close = close; + if (!close) { + this.close = open; + } + } + /** + * @return {?} + */ + Trigger.prototype.isManual = /** + * @return {?} + */ + function () { return this.open === 'manual' || this.close === 'manual'; }; + return Trigger; +}()); +/** @type {?} */ +var DEFAULT_ALIASES = { + 'hover': ['mouseenter', 'mouseleave'], + 'focus': ['focusin', 'focusout'], +}; +/** + * @param {?} triggers + * @param {?=} aliases + * @return {?} + */ +function parseTriggers(triggers, aliases) { + if (aliases === void 0) { aliases = DEFAULT_ALIASES; } + /** @type {?} */ + var trimmedTriggers = (triggers || '').trim(); + if (trimmedTriggers.length === 0) { + return []; + } + /** @type {?} */ + var parsedTriggers = trimmedTriggers.split(/\s+/).map((/** + * @param {?} trigger + * @return {?} + */ + function (trigger) { return trigger.split(':'); })).map((/** + * @param {?} triggerPair + * @return {?} + */ + function (triggerPair) { + /** @type {?} */ + var alias = aliases[triggerPair[0]] || triggerPair; + return new Trigger(alias[0], alias[1]); + })); + /** @type {?} */ + var manualTriggers = parsedTriggers.filter((/** + * @param {?} triggerPair + * @return {?} + */ + function (triggerPair) { return triggerPair.isManual(); })); + if (manualTriggers.length > 1) { + throw 'Triggers parse error: only one manual trigger is allowed'; + } + if (manualTriggers.length === 1 && parsedTriggers.length > 1) { + throw 'Triggers parse error: manual trigger can\'t be mixed with other triggers'; + } + return parsedTriggers; +} +/** + * @param {?} renderer + * @param {?} nativeElement + * @param {?} triggers + * @param {?} isOpenedFn + * @return {?} + */ +function observeTriggers(renderer, nativeElement, triggers, isOpenedFn) { + return new Observable((/** + * @param {?} subscriber + * @return {?} + */ + function (subscriber) { + /** @type {?} */ + var listeners = []; + /** @type {?} */ + var openFn = (/** + * @return {?} + */ + function () { return subscriber.next(true); }); + /** @type {?} */ + var closeFn = (/** + * @return {?} + */ + function () { return subscriber.next(false); }); + /** @type {?} */ + var toggleFn = (/** + * @return {?} + */ + function () { return subscriber.next(!isOpenedFn()); }); + triggers.forEach((/** + * @param {?} trigger + * @return {?} + */ + function (trigger) { + if (trigger.open === trigger.close) { + listeners.push(renderer.listen(nativeElement, trigger.open, toggleFn)); + } + else { + listeners.push(renderer.listen(nativeElement, trigger.open, openFn), renderer.listen(nativeElement, trigger.close, closeFn)); + } + })); + return (/** + * @return {?} + */ + function () { listeners.forEach((/** + * @param {?} unsubscribeFn + * @return {?} + */ + function (unsubscribeFn) { return unsubscribeFn(); })); }); + })); +} +/** @type {?} */ +var delayOrNoop = (/** + * @template T + * @param {?} time + * @return {?} + */ +function (time) { return time > 0 ? delay(time) : (/** + * @param {?} a + * @return {?} + */ +function (a) { return a; }); }); +/** + * @param {?} openDelay + * @param {?} closeDelay + * @param {?} isOpenedFn + * @return {?} + */ +function triggerDelay(openDelay, closeDelay, isOpenedFn) { + return (/** + * @param {?} input$ + * @return {?} + */ + function (input$) { + /** @type {?} */ + var pending = null; + /** @type {?} */ + var filteredInput$ = input$.pipe(map((/** + * @param {?} open + * @return {?} + */ + function (open) { return ({ open: open }); })), filter((/** + * @param {?} event + * @return {?} + */ + function (event) { + /** @type {?} */ + var currentlyOpen = isOpenedFn(); + if (currentlyOpen !== event.open && (!pending || pending.open === currentlyOpen)) { + pending = event; + return true; + } + if (pending && pending.open !== event.open) { + pending = null; + } + return false; + })), share()); + /** @type {?} */ + var delayedOpen$ = filteredInput$.pipe(filter((/** + * @param {?} event + * @return {?} + */ + function (event) { return event.open; })), delayOrNoop(openDelay)); + /** @type {?} */ + var delayedClose$ = filteredInput$.pipe(filter((/** + * @param {?} event + * @return {?} + */ + function (event) { return !event.open; })), delayOrNoop(closeDelay)); + return merge(delayedOpen$, delayedClose$) + .pipe(filter((/** + * @param {?} event + * @return {?} + */ + function (event) { + if (event === pending) { + pending = null; + return event.open !== isOpenedFn(); + } + return false; + })), map((/** + * @param {?} event + * @return {?} + */ + function (event) { return event.open; }))); + }); +} +/** + * @param {?} renderer + * @param {?} nativeElement + * @param {?} triggers + * @param {?} isOpenedFn + * @param {?} openFn + * @param {?} closeFn + * @param {?=} openDelay + * @param {?=} closeDelay + * @return {?} + */ +function listenToTriggers(renderer, nativeElement, triggers, isOpenedFn, openFn, closeFn, openDelay, closeDelay) { + if (openDelay === void 0) { openDelay = 0; } + if (closeDelay === void 0) { closeDelay = 0; } + /** @type {?} */ + var parsedTriggers = parseTriggers(triggers); + if (parsedTriggers.length === 1 && parsedTriggers[0].isManual()) { + return (/** + * @return {?} + */ + function () { }); + } + /** @type {?} */ + var subscription = observeTriggers(renderer, nativeElement, parsedTriggers, isOpenedFn) + .pipe(triggerDelay(openDelay, closeDelay, isOpenedFn)) + .subscribe((/** + * @param {?} open + * @return {?} + */ + function (open) { return (open ? openFn() : closeFn()); })); + return (/** + * @return {?} + */ + function () { return subscription.unsubscribe(); }); +} + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * A configuration service for the [`NgbPopover`](#/components/popover/api#NgbPopover) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the popovers used in the application. + */ +var NgbPopoverConfig = /** @class */ (function () { + function NgbPopoverConfig() { + this.autoClose = true; + this.placement = 'auto'; + this.triggers = 'click'; + this.disablePopover = false; + this.openDelay = 0; + this.closeDelay = 0; + } + NgbPopoverConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ NgbPopoverConfig.ngInjectableDef = ɵɵdefineInjectable({ factory: function NgbPopoverConfig_Factory() { return new NgbPopoverConfig(); }, token: NgbPopoverConfig, providedIn: "root" }); + return NgbPopoverConfig; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @type {?} */ +var nextId$3 = 0; +var NgbPopoverWindow = /** @class */ (function () { + function NgbPopoverWindow() { + } + /** + * @return {?} + */ + NgbPopoverWindow.prototype.isTitleTemplate = /** + * @return {?} + */ + function () { return this.title instanceof TemplateRef; }; + NgbPopoverWindow.decorators = [ + { type: Component, args: [{ + selector: 'ngb-popover-window', + changeDetection: ChangeDetectionStrategy.OnPush, + encapsulation: ViewEncapsulation.None, + host: { '[class]': '"popover" + (popoverClass ? " " + popoverClass : "")', 'role': 'tooltip', '[id]': 'id' }, + template: "\n
\n

\n {{title}}\n \n

\n
", + styles: ["ngb-popover-window.bs-popover-bottom>.arrow,ngb-popover-window.bs-popover-top>.arrow{left:50%;margin-left:-.5rem}ngb-popover-window.bs-popover-bottom-left>.arrow,ngb-popover-window.bs-popover-top-left>.arrow{left:2em}ngb-popover-window.bs-popover-bottom-right>.arrow,ngb-popover-window.bs-popover-top-right>.arrow{left:auto;right:2em}ngb-popover-window.bs-popover-left>.arrow,ngb-popover-window.bs-popover-right>.arrow{top:50%;margin-top:-.5rem}ngb-popover-window.bs-popover-left-top>.arrow,ngb-popover-window.bs-popover-right-top>.arrow{top:.7em}ngb-popover-window.bs-popover-left-bottom>.arrow,ngb-popover-window.bs-popover-right-bottom>.arrow{top:auto;bottom:.7em}"] + }] } + ]; + NgbPopoverWindow.propDecorators = { + title: [{ type: Input }], + id: [{ type: Input }], + popoverClass: [{ type: Input }], + context: [{ type: Input }] + }; + return NgbPopoverWindow; +}()); +/** + * A lightweight and extensible directive for fancy popover creation. + */ +var NgbPopover = /** @class */ (function () { + function NgbPopover(_elementRef, _renderer, injector, componentFactoryResolver, viewContainerRef, config, _ngZone, _document, _changeDetector, _applicationRef) { + var _this = this; + this._elementRef = _elementRef; + this._renderer = _renderer; + this._ngZone = _ngZone; + this._document = _document; + this._changeDetector = _changeDetector; + this._applicationRef = _applicationRef; + /** + * An event emitted when the popover is shown. Contains no payload. + */ + this.shown = new EventEmitter(); + /** + * An event emitted when the popover is hidden. Contains no payload. + */ + this.hidden = new EventEmitter(); + this._ngbPopoverWindowId = "ngb-popover-" + nextId$3++; + this.autoClose = config.autoClose; + this.placement = config.placement; + this.triggers = config.triggers; + this.container = config.container; + this.disablePopover = config.disablePopover; + this.popoverClass = config.popoverClass; + this.openDelay = config.openDelay; + this.closeDelay = config.closeDelay; + this._popupService = new PopupService(NgbPopoverWindow, injector, viewContainerRef, _renderer, componentFactoryResolver, _applicationRef); + this._zoneSubscription = _ngZone.onStable.subscribe((/** + * @return {?} + */ + function () { + if (_this._windowRef) { + positionElements(_this._elementRef.nativeElement, _this._windowRef.location.nativeElement, _this.placement, _this.container === 'body', 'bs-popover'); + } + })); + } + /** + * @private + * @return {?} + */ + NgbPopover.prototype._isDisabled = /** + * @private + * @return {?} + */ + function () { + if (this.disablePopover) { + return true; + } + if (!this.ngbPopover && !this.popoverTitle) { + return true; + } + return false; + }; + /** + * Opens the popover. + * + * This is considered to be a "manual" triggering. + * The `context` is an optional value to be injected into the popover template when it is created. + */ + /** + * Opens the popover. + * + * This is considered to be a "manual" triggering. + * The `context` is an optional value to be injected into the popover template when it is created. + * @param {?=} context + * @return {?} + */ + NgbPopover.prototype.open = /** + * Opens the popover. + * + * This is considered to be a "manual" triggering. + * The `context` is an optional value to be injected into the popover template when it is created. + * @param {?=} context + * @return {?} + */ + function (context) { + var _this = this; + if (!this._windowRef && !this._isDisabled()) { + this._windowRef = this._popupService.open(this.ngbPopover, context); + this._windowRef.instance.title = this.popoverTitle; + this._windowRef.instance.context = context; + this._windowRef.instance.popoverClass = this.popoverClass; + this._windowRef.instance.id = this._ngbPopoverWindowId; + this._renderer.setAttribute(this._elementRef.nativeElement, 'aria-describedby', this._ngbPopoverWindowId); + if (this.container === 'body') { + this._document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement); + } + // We need to detect changes, because we don't know where .open() might be called from. + // Ex. opening popover from one of lifecycle hooks that run after the CD + // (say from ngAfterViewInit) will result in 'ExpressionHasChanged' exception + this._windowRef.changeDetectorRef.detectChanges(); + // We need to mark for check, because popover won't work inside the OnPush component. + // Ex. when we use expression like `{{ popover.isOpen() : 'opened' : 'closed' }}` + // inside the template of an OnPush component and we change the popover from + // open -> closed, the expression in question won't be updated unless we explicitly + // mark the parent component to be checked. + this._windowRef.changeDetectorRef.markForCheck(); + ngbAutoClose(this._ngZone, this._document, this.autoClose, (/** + * @return {?} + */ + function () { return _this.close(); }), this.hidden, [this._windowRef.location.nativeElement]); + this.shown.emit(); + } + }; + /** + * Closes the popover. + * + * This is considered to be a "manual" triggering of the popover. + */ + /** + * Closes the popover. + * + * This is considered to be a "manual" triggering of the popover. + * @return {?} + */ + NgbPopover.prototype.close = /** + * Closes the popover. + * + * This is considered to be a "manual" triggering of the popover. + * @return {?} + */ + function () { + if (this._windowRef) { + this._renderer.removeAttribute(this._elementRef.nativeElement, 'aria-describedby'); + this._popupService.close(); + this._windowRef = null; + this.hidden.emit(); + this._changeDetector.markForCheck(); + } + }; + /** + * Toggles the popover. + * + * This is considered to be a "manual" triggering of the popover. + */ + /** + * Toggles the popover. + * + * This is considered to be a "manual" triggering of the popover. + * @return {?} + */ + NgbPopover.prototype.toggle = /** + * Toggles the popover. + * + * This is considered to be a "manual" triggering of the popover. + * @return {?} + */ + function () { + if (this._windowRef) { + this.close(); + } + else { + this.open(); + } + }; + /** + * Returns `true`, if the popover is currently shown. + */ + /** + * Returns `true`, if the popover is currently shown. + * @return {?} + */ + NgbPopover.prototype.isOpen = /** + * Returns `true`, if the popover is currently shown. + * @return {?} + */ + function () { return this._windowRef != null; }; + /** + * @return {?} + */ + NgbPopover.prototype.ngOnInit = /** + * @return {?} + */ + function () { + this._unregisterListenersFn = listenToTriggers(this._renderer, this._elementRef.nativeElement, this.triggers, this.isOpen.bind(this), this.open.bind(this), this.close.bind(this), +this.openDelay, +this.closeDelay); + }; + /** + * @param {?} changes + * @return {?} + */ + NgbPopover.prototype.ngOnChanges = /** + * @param {?} changes + * @return {?} + */ + function (changes) { + // close popover if title and content become empty, or disablePopover set to true + if ((changes['ngbPopover'] || changes['popoverTitle'] || changes['disablePopover']) && this._isDisabled()) { + this.close(); + } + }; + /** + * @return {?} + */ + NgbPopover.prototype.ngOnDestroy = /** + * @return {?} + */ + function () { + this.close(); + // This check is needed as it might happen that ngOnDestroy is called before ngOnInit + // under certain conditions, see: https://github.com/ng-bootstrap/ng-bootstrap/issues/2199 + if (this._unregisterListenersFn) { + this._unregisterListenersFn(); + } + this._zoneSubscription.unsubscribe(); + }; + NgbPopover.decorators = [ + { type: Directive, args: [{ selector: '[ngbPopover]', exportAs: 'ngbPopover' },] } + ]; + /** @nocollapse */ + NgbPopover.ctorParameters = function () { return [ + { type: ElementRef }, + { type: Renderer2 }, + { type: Injector }, + { type: ComponentFactoryResolver }, + { type: ViewContainerRef }, + { type: NgbPopoverConfig }, + { type: NgZone }, + { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }, + { type: ChangeDetectorRef }, + { type: ApplicationRef } + ]; }; + NgbPopover.propDecorators = { + autoClose: [{ type: Input }], + ngbPopover: [{ type: Input }], + popoverTitle: [{ type: Input }], + placement: [{ type: Input }], + triggers: [{ type: Input }], + container: [{ type: Input }], + disablePopover: [{ type: Input }], + popoverClass: [{ type: Input }], + openDelay: [{ type: Input }], + closeDelay: [{ type: Input }], + shown: [{ type: Output }], + hidden: [{ type: Output }] + }; + return NgbPopover; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +var NgbPopoverModule = /** @class */ (function () { + function NgbPopoverModule() { + } + NgbPopoverModule.decorators = [ + { type: NgModule, args: [{ + declarations: [NgbPopover, NgbPopoverWindow], + exports: [NgbPopover], + imports: [CommonModule], + entryComponents: [NgbPopoverWindow] + },] } + ]; + return NgbPopoverModule; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * A configuration service for the [`NgbProgressbar`](#/components/progressbar/api#NgbProgressbar) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the progress bars used in the application. + */ +var NgbProgressbarConfig = /** @class */ (function () { + function NgbProgressbarConfig() { + this.max = 100; + this.animated = false; + this.striped = false; + this.showValue = false; + } + NgbProgressbarConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ NgbProgressbarConfig.ngInjectableDef = ɵɵdefineInjectable({ factory: function NgbProgressbarConfig_Factory() { return new NgbProgressbarConfig(); }, token: NgbProgressbarConfig, providedIn: "root" }); + return NgbProgressbarConfig; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * A directive that provides feedback on the progress of a workflow or an action. + */ +var NgbProgressbar = /** @class */ (function () { + function NgbProgressbar(config) { + /** + * The current value for the progress bar. + * + * Should be in the `[0, max]` range. + */ + this.value = 0; + this.max = config.max; + this.animated = config.animated; + this.striped = config.striped; + this.type = config.type; + this.showValue = config.showValue; + this.height = config.height; + } + /** + * @return {?} + */ + NgbProgressbar.prototype.getValue = /** + * @return {?} + */ + function () { return getValueInRange(this.value, this.max); }; + /** + * @return {?} + */ + NgbProgressbar.prototype.getPercentValue = /** + * @return {?} + */ + function () { return 100 * this.getValue() / this.max; }; + NgbProgressbar.decorators = [ + { type: Component, args: [{ + selector: 'ngb-progressbar', + changeDetection: ChangeDetectionStrategy.OnPush, + template: "\n
\n
\n {{getPercentValue()}}%\n
\n
\n " + }] } + ]; + /** @nocollapse */ + NgbProgressbar.ctorParameters = function () { return [ + { type: NgbProgressbarConfig } + ]; }; + NgbProgressbar.propDecorators = { + max: [{ type: Input }], + animated: [{ type: Input }], + striped: [{ type: Input }], + showValue: [{ type: Input }], + type: [{ type: Input }], + value: [{ type: Input }], + height: [{ type: Input }] + }; + return NgbProgressbar; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +var NgbProgressbarModule = /** @class */ (function () { + function NgbProgressbarModule() { + } + NgbProgressbarModule.decorators = [ + { type: NgModule, args: [{ declarations: [NgbProgressbar], exports: [NgbProgressbar], imports: [CommonModule] },] } + ]; + return NgbProgressbarModule; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * A configuration service for the [`NgbRating`](#/components/rating/api#NgbRating) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the ratings used in the application. + */ +var NgbRatingConfig = /** @class */ (function () { + function NgbRatingConfig() { + this.max = 10; + this.readonly = false; + this.resettable = false; + } + NgbRatingConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ NgbRatingConfig.ngInjectableDef = ɵɵdefineInjectable({ factory: function NgbRatingConfig_Factory() { return new NgbRatingConfig(); }, token: NgbRatingConfig, providedIn: "root" }); + return NgbRatingConfig; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @type {?} */ +var NGB_RATING_VALUE_ACCESSOR = { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef((/** + * @return {?} + */ + function () { return NgbRating; })), + multi: true +}; +/** + * A directive that helps visualising and interacting with a star rating bar. + */ +var NgbRating = /** @class */ (function () { + function NgbRating(config, _changeDetectorRef) { + this._changeDetectorRef = _changeDetectorRef; + this.contexts = []; + this.disabled = false; + /** + * An event emitted when the user is hovering over a given rating. + * + * Event payload equals to the rating being hovered over. + */ + this.hover = new EventEmitter(); + /** + * An event emitted when the user stops hovering over a given rating. + * + * Event payload equals to the rating of the last item being hovered over. + */ + this.leave = new EventEmitter(); + /** + * An event emitted when the user selects a new rating. + * + * Event payload equals to the newly selected rating. + */ + this.rateChange = new EventEmitter(true); + this.onChange = (/** + * @param {?} _ + * @return {?} + */ + function (_) { }); + this.onTouched = (/** + * @return {?} + */ + function () { }); + this.max = config.max; + this.readonly = config.readonly; + } + /** + * @return {?} + */ + NgbRating.prototype.ariaValueText = /** + * @return {?} + */ + function () { return this.nextRate + " out of " + this.max; }; + /** + * @param {?} value + * @return {?} + */ + NgbRating.prototype.enter = /** + * @param {?} value + * @return {?} + */ + function (value) { + if (!this.readonly && !this.disabled) { + this._updateState(value); + } + this.hover.emit(value); + }; + /** + * @return {?} + */ + NgbRating.prototype.handleBlur = /** + * @return {?} + */ + function () { this.onTouched(); }; + /** + * @param {?} value + * @return {?} + */ + NgbRating.prototype.handleClick = /** + * @param {?} value + * @return {?} + */ + function (value) { this.update(this.resettable && this.rate === value ? 0 : value); }; + /** + * @param {?} event + * @return {?} + */ + NgbRating.prototype.handleKeyDown = /** + * @param {?} event + * @return {?} + */ + function (event) { + // tslint:disable-next-line:deprecation + switch (event.which) { + case Key.ArrowDown: + case Key.ArrowLeft: + this.update(this.rate - 1); + break; + case Key.ArrowUp: + case Key.ArrowRight: + this.update(this.rate + 1); + break; + case Key.Home: + this.update(0); + break; + case Key.End: + this.update(this.max); + break; + default: + return; + } + // note 'return' in default case + event.preventDefault(); + }; + /** + * @param {?} changes + * @return {?} + */ + NgbRating.prototype.ngOnChanges = /** + * @param {?} changes + * @return {?} + */ + function (changes) { + if (changes['rate']) { + this.update(this.rate); + } + }; + /** + * @return {?} + */ + NgbRating.prototype.ngOnInit = /** + * @return {?} + */ + function () { + this.contexts = Array.from({ length: this.max }, (/** + * @param {?} v + * @param {?} k + * @return {?} + */ + function (v, k) { return ({ fill: 0, index: k }); })); + this._updateState(this.rate); + }; + /** + * @param {?} fn + * @return {?} + */ + NgbRating.prototype.registerOnChange = /** + * @param {?} fn + * @return {?} + */ + function (fn) { this.onChange = fn; }; + /** + * @param {?} fn + * @return {?} + */ + NgbRating.prototype.registerOnTouched = /** + * @param {?} fn + * @return {?} + */ + function (fn) { this.onTouched = fn; }; + /** + * @return {?} + */ + NgbRating.prototype.reset = /** + * @return {?} + */ + function () { + this.leave.emit(this.nextRate); + this._updateState(this.rate); + }; + /** + * @param {?} isDisabled + * @return {?} + */ + NgbRating.prototype.setDisabledState = /** + * @param {?} isDisabled + * @return {?} + */ + function (isDisabled) { this.disabled = isDisabled; }; + /** + * @param {?} value + * @param {?=} internalChange + * @return {?} + */ + NgbRating.prototype.update = /** + * @param {?} value + * @param {?=} internalChange + * @return {?} + */ + function (value, internalChange) { + if (internalChange === void 0) { internalChange = true; } + /** @type {?} */ + var newRate = getValueInRange(value, this.max, 0); + if (!this.readonly && !this.disabled && this.rate !== newRate) { + this.rate = newRate; + this.rateChange.emit(this.rate); + } + if (internalChange) { + this.onChange(this.rate); + this.onTouched(); + } + this._updateState(this.rate); + }; + /** + * @param {?} value + * @return {?} + */ + NgbRating.prototype.writeValue = /** + * @param {?} value + * @return {?} + */ + function (value) { + this.update(value, false); + this._changeDetectorRef.markForCheck(); + }; + /** + * @private + * @param {?} index + * @return {?} + */ + NgbRating.prototype._getFillValue = /** + * @private + * @param {?} index + * @return {?} + */ + function (index) { + /** @type {?} */ + var diff = this.nextRate - index; + if (diff >= 1) { + return 100; + } + if (diff < 1 && diff > 0) { + return parseInt((diff * 100).toFixed(2), 10); + } + return 0; + }; + /** + * @private + * @param {?} nextValue + * @return {?} + */ + NgbRating.prototype._updateState = /** + * @private + * @param {?} nextValue + * @return {?} + */ + function (nextValue) { + var _this = this; + this.nextRate = nextValue; + this.contexts.forEach((/** + * @param {?} context + * @param {?} index + * @return {?} + */ + function (context, index) { return context.fill = _this._getFillValue(index); })); + }; + NgbRating.decorators = [ + { type: Component, args: [{ + selector: 'ngb-rating', + changeDetection: ChangeDetectionStrategy.OnPush, + host: { + 'class': 'd-inline-flex', + 'tabindex': '0', + 'role': 'slider', + 'aria-valuemin': '0', + '[attr.aria-valuemax]': 'max', + '[attr.aria-valuenow]': 'nextRate', + '[attr.aria-valuetext]': 'ariaValueText()', + '[attr.aria-disabled]': 'readonly ? true : null', + '(blur)': 'handleBlur()', + '(keydown)': 'handleKeyDown($event)', + '(mouseleave)': 'reset()' + }, + template: "\n {{ fill === 100 ? '★' : '☆' }}\n \n ({{ index < nextRate ? '*' : ' ' }})\n \n \n \n \n \n ", + providers: [NGB_RATING_VALUE_ACCESSOR] + }] } + ]; + /** @nocollapse */ + NgbRating.ctorParameters = function () { return [ + { type: NgbRatingConfig }, + { type: ChangeDetectorRef } + ]; }; + NgbRating.propDecorators = { + max: [{ type: Input }], + rate: [{ type: Input }], + readonly: [{ type: Input }], + resettable: [{ type: Input }], + starTemplate: [{ type: Input }], + starTemplateFromContent: [{ type: ContentChild, args: [TemplateRef, { static: false },] }], + hover: [{ type: Output }], + leave: [{ type: Output }], + rateChange: [{ type: Output }] + }; + return NgbRating; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +var NgbRatingModule = /** @class */ (function () { + function NgbRatingModule() { + } + NgbRatingModule.decorators = [ + { type: NgModule, args: [{ declarations: [NgbRating], exports: [NgbRating], imports: [CommonModule] },] } + ]; + return NgbRatingModule; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * A configuration service for the [`NgbTabset`](#/components/tabset/api#NgbTabset) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the tabsets used in the application. + */ +var NgbTabsetConfig = /** @class */ (function () { + function NgbTabsetConfig() { + this.justify = 'start'; + this.orientation = 'horizontal'; + this.type = 'tabs'; + } + NgbTabsetConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ NgbTabsetConfig.ngInjectableDef = ɵɵdefineInjectable({ factory: function NgbTabsetConfig_Factory() { return new NgbTabsetConfig(); }, token: NgbTabsetConfig, providedIn: "root" }); + return NgbTabsetConfig; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @type {?} */ +var nextId$4 = 0; +/** + * A directive to wrap tab titles that need to contain HTML markup or other directives. + * + * Alternatively you could use the `NgbTab.title` input for string titles. + */ +var NgbTabTitle = /** @class */ (function () { + function NgbTabTitle(templateRef) { + this.templateRef = templateRef; + } + NgbTabTitle.decorators = [ + { type: Directive, args: [{ selector: 'ng-template[ngbTabTitle]' },] } + ]; + /** @nocollapse */ + NgbTabTitle.ctorParameters = function () { return [ + { type: TemplateRef } + ]; }; + return NgbTabTitle; +}()); +/** + * A directive to wrap content to be displayed in a tab. + */ +var NgbTabContent = /** @class */ (function () { + function NgbTabContent(templateRef) { + this.templateRef = templateRef; + } + NgbTabContent.decorators = [ + { type: Directive, args: [{ selector: 'ng-template[ngbTabContent]' },] } + ]; + /** @nocollapse */ + NgbTabContent.ctorParameters = function () { return [ + { type: TemplateRef } + ]; }; + return NgbTabContent; +}()); +/** + * A directive representing an individual tab. + */ +var NgbTab = /** @class */ (function () { + function NgbTab() { + /** + * The tab identifier. + * + * Must be unique for the entire document for proper accessibility support. + */ + this.id = "ngb-tab-" + nextId$4++; + /** + * If `true`, the current tab is disabled and can't be toggled. + */ + this.disabled = false; + } + /** + * @return {?} + */ + NgbTab.prototype.ngAfterContentChecked = /** + * @return {?} + */ + function () { + // We are using @ContentChildren instead of @ContentChild as in the Angular version being used + // only @ContentChildren allows us to specify the {descendants: false} option. + // Without {descendants: false} we are hitting bugs described in: + // https://github.com/ng-bootstrap/ng-bootstrap/issues/2240 + this.titleTpl = this.titleTpls.first; + this.contentTpl = this.contentTpls.first; + }; + NgbTab.decorators = [ + { type: Directive, args: [{ selector: 'ngb-tab' },] } + ]; + NgbTab.propDecorators = { + id: [{ type: Input }], + title: [{ type: Input }], + disabled: [{ type: Input }], + titleTpls: [{ type: ContentChildren, args: [NgbTabTitle, { descendants: false },] }], + contentTpls: [{ type: ContentChildren, args: [NgbTabContent, { descendants: false },] }] + }; + return NgbTab; +}()); +/** + * A component that makes it easy to create tabbed interface. + */ +var NgbTabset = /** @class */ (function () { + function NgbTabset(config) { + /** + * If `true`, non-visible tabs content will be removed from DOM. Otherwise it will just be hidden. + */ + this.destroyOnHide = true; + /** + * A tab change event emitted right before the tab change happens. + * + * See [`NgbTabChangeEvent`](#/components/tabset/api#NgbTabChangeEvent) for payload details. + */ + this.tabChange = new EventEmitter(); + this.type = config.type; + this.justify = config.justify; + this.orientation = config.orientation; + } + Object.defineProperty(NgbTabset.prototype, "justify", { + /** + * The horizontal alignment of the tabs with flexbox utilities. + */ + set: /** + * The horizontal alignment of the tabs with flexbox utilities. + * @param {?} className + * @return {?} + */ + function (className) { + if (className === 'fill' || className === 'justified') { + this.justifyClass = "nav-" + className; + } + else { + this.justifyClass = "justify-content-" + className; + } + }, + enumerable: true, + configurable: true + }); + /** + * Selects the tab with the given id and shows its associated content panel. + * + * Any other tab that was previously selected becomes unselected and its associated pane is removed from DOM or + * hidden depending on the `destroyOnHide` value. + */ + /** + * Selects the tab with the given id and shows its associated content panel. + * + * Any other tab that was previously selected becomes unselected and its associated pane is removed from DOM or + * hidden depending on the `destroyOnHide` value. + * @param {?} tabId + * @return {?} + */ + NgbTabset.prototype.select = /** + * Selects the tab with the given id and shows its associated content panel. + * + * Any other tab that was previously selected becomes unselected and its associated pane is removed from DOM or + * hidden depending on the `destroyOnHide` value. + * @param {?} tabId + * @return {?} + */ + function (tabId) { + /** @type {?} */ + var selectedTab = this._getTabById(tabId); + if (selectedTab && !selectedTab.disabled && this.activeId !== selectedTab.id) { + /** @type {?} */ + var defaultPrevented_1 = false; + this.tabChange.emit({ activeId: this.activeId, nextId: selectedTab.id, preventDefault: (/** + * @return {?} + */ + function () { defaultPrevented_1 = true; }) }); + if (!defaultPrevented_1) { + this.activeId = selectedTab.id; + } + } + }; + /** + * @return {?} + */ + NgbTabset.prototype.ngAfterContentChecked = /** + * @return {?} + */ + function () { + // auto-correct activeId that might have been set incorrectly as input + /** @type {?} */ + var activeTab = this._getTabById(this.activeId); + this.activeId = activeTab ? activeTab.id : (this.tabs.length ? this.tabs.first.id : null); + }; + /** + * @private + * @param {?} id + * @return {?} + */ + NgbTabset.prototype._getTabById = /** + * @private + * @param {?} id + * @return {?} + */ + function (id) { + /** @type {?} */ + var tabsWithId = this.tabs.filter((/** + * @param {?} tab + * @return {?} + */ + function (tab) { return tab.id === id; })); + return tabsWithId.length ? tabsWithId[0] : null; + }; + NgbTabset.decorators = [ + { type: Component, args: [{ + selector: 'ngb-tabset', + exportAs: 'ngbTabset', + template: "\n \n
\n \n \n \n
\n
\n \n " + }] } + ]; + /** @nocollapse */ + NgbTabset.ctorParameters = function () { return [ + { type: NgbTabsetConfig } + ]; }; + NgbTabset.propDecorators = { + tabs: [{ type: ContentChildren, args: [NgbTab,] }], + activeId: [{ type: Input }], + destroyOnHide: [{ type: Input }], + justify: [{ type: Input }], + orientation: [{ type: Input }], + type: [{ type: Input }], + tabChange: [{ type: Output }] + }; + return NgbTabset; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @type {?} */ +var NGB_TABSET_DIRECTIVES = [NgbTabset, NgbTab, NgbTabContent, NgbTabTitle]; +var NgbTabsetModule = /** @class */ (function () { + function NgbTabsetModule() { + } + NgbTabsetModule.decorators = [ + { type: NgModule, args: [{ declarations: NGB_TABSET_DIRECTIVES, exports: NGB_TABSET_DIRECTIVES, imports: [CommonModule] },] } + ]; + return NgbTabsetModule; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +var NgbTime = /** @class */ (function () { + function NgbTime(hour, minute, second) { + this.hour = toInteger(hour); + this.minute = toInteger(minute); + this.second = toInteger(second); + } + /** + * @param {?=} step + * @return {?} + */ + NgbTime.prototype.changeHour = /** + * @param {?=} step + * @return {?} + */ + function (step) { + if (step === void 0) { step = 1; } + this.updateHour((isNaN(this.hour) ? 0 : this.hour) + step); + }; + /** + * @param {?} hour + * @return {?} + */ + NgbTime.prototype.updateHour = /** + * @param {?} hour + * @return {?} + */ + function (hour) { + if (isNumber(hour)) { + this.hour = (hour < 0 ? 24 + hour : hour) % 24; + } + else { + this.hour = NaN; + } + }; + /** + * @param {?=} step + * @return {?} + */ + NgbTime.prototype.changeMinute = /** + * @param {?=} step + * @return {?} + */ + function (step) { + if (step === void 0) { step = 1; } + this.updateMinute((isNaN(this.minute) ? 0 : this.minute) + step); + }; + /** + * @param {?} minute + * @return {?} + */ + NgbTime.prototype.updateMinute = /** + * @param {?} minute + * @return {?} + */ + function (minute) { + if (isNumber(minute)) { + this.minute = minute % 60 < 0 ? 60 + minute % 60 : minute % 60; + this.changeHour(Math.floor(minute / 60)); + } + else { + this.minute = NaN; + } + }; + /** + * @param {?=} step + * @return {?} + */ + NgbTime.prototype.changeSecond = /** + * @param {?=} step + * @return {?} + */ + function (step) { + if (step === void 0) { step = 1; } + this.updateSecond((isNaN(this.second) ? 0 : this.second) + step); + }; + /** + * @param {?} second + * @return {?} + */ + NgbTime.prototype.updateSecond = /** + * @param {?} second + * @return {?} + */ + function (second) { + if (isNumber(second)) { + this.second = second < 0 ? 60 + second % 60 : second % 60; + this.changeMinute(Math.floor(second / 60)); + } + else { + this.second = NaN; + } + }; + /** + * @param {?=} checkSecs + * @return {?} + */ + NgbTime.prototype.isValid = /** + * @param {?=} checkSecs + * @return {?} + */ + function (checkSecs) { + if (checkSecs === void 0) { checkSecs = true; } + return isNumber(this.hour) && isNumber(this.minute) && (checkSecs ? isNumber(this.second) : true); + }; + /** + * @return {?} + */ + NgbTime.prototype.toString = /** + * @return {?} + */ + function () { return (this.hour || 0) + ":" + (this.minute || 0) + ":" + (this.second || 0); }; + return NgbTime; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * A configuration service for the [`NgbTimepicker`](#/components/timepicker/api#NgbTimepicker) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the timepickers used in the application. + */ +var NgbTimepickerConfig = /** @class */ (function () { + function NgbTimepickerConfig() { + this.meridian = false; + this.spinners = true; + this.seconds = false; + this.hourStep = 1; + this.minuteStep = 1; + this.secondStep = 1; + this.disabled = false; + this.readonlyInputs = false; + this.size = 'medium'; + } + NgbTimepickerConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ NgbTimepickerConfig.ngInjectableDef = ɵɵdefineInjectable({ factory: function NgbTimepickerConfig_Factory() { return new NgbTimepickerConfig(); }, token: NgbTimepickerConfig, providedIn: "root" }); + return NgbTimepickerConfig; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * @return {?} + */ +function NGB_DATEPICKER_TIME_ADAPTER_FACTORY() { + return new NgbTimeStructAdapter(); +} +/** + * An abstract service that does the conversion between the internal timepicker `NgbTimeStruct` model and + * any provided user time model `T`, ex. a string, a native date, etc. + * + * The adapter is used **only** for conversion when binding timepicker to a form control, + * ex. `[(ngModel)]="userTimeModel"`. Here `userTimeModel` can be of any type. + * + * The default timepicker implementation assumes we use `NgbTimeStruct` as a user model. + * + * See the [custom time adapter demo](#/components/timepicker/examples#adapter) for an example. + * + * \@since 2.2.0 + * @abstract + * @template T + */ +var NgbTimeAdapter = /** @class */ (function () { + function NgbTimeAdapter() { + } + NgbTimeAdapter.decorators = [ + { type: Injectable, args: [{ providedIn: 'root', useFactory: NGB_DATEPICKER_TIME_ADAPTER_FACTORY },] } + ]; + /** @nocollapse */ NgbTimeAdapter.ngInjectableDef = ɵɵdefineInjectable({ factory: NGB_DATEPICKER_TIME_ADAPTER_FACTORY, token: NgbTimeAdapter, providedIn: "root" }); + return NgbTimeAdapter; +}()); +var NgbTimeStructAdapter = /** @class */ (function (_super) { + __extends(NgbTimeStructAdapter, _super); + function NgbTimeStructAdapter() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * Converts a NgbTimeStruct value into NgbTimeStruct value + */ + /** + * Converts a NgbTimeStruct value into NgbTimeStruct value + * @param {?} time + * @return {?} + */ + NgbTimeStructAdapter.prototype.fromModel = /** + * Converts a NgbTimeStruct value into NgbTimeStruct value + * @param {?} time + * @return {?} + */ + function (time) { + return (time && isInteger(time.hour) && isInteger(time.minute)) ? + { hour: time.hour, minute: time.minute, second: isInteger(time.second) ? time.second : null } : + null; + }; + /** + * Converts a NgbTimeStruct value into NgbTimeStruct value + */ + /** + * Converts a NgbTimeStruct value into NgbTimeStruct value + * @param {?} time + * @return {?} + */ + NgbTimeStructAdapter.prototype.toModel = /** + * Converts a NgbTimeStruct value into NgbTimeStruct value + * @param {?} time + * @return {?} + */ + function (time) { + return (time && isInteger(time.hour) && isInteger(time.minute)) ? + { hour: time.hour, minute: time.minute, second: isInteger(time.second) ? time.second : null } : + null; + }; + NgbTimeStructAdapter.decorators = [ + { type: Injectable } + ]; + return NgbTimeStructAdapter; +}(NgbTimeAdapter)); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * @param {?} locale + * @return {?} + */ +function NGB_TIMEPICKER_I18N_FACTORY(locale) { + return new NgbTimepickerI18nDefault(locale); +} +/** + * Type of the service supplying day periods (for example, 'AM' and 'PM') to NgbTimepicker component. + * The default implementation of this service honors the Angular locale, and uses the registered locale data, + * as explained in the Angular i18n guide. + * @abstract + */ +var NgbTimepickerI18n = /** @class */ (function () { + function NgbTimepickerI18n() { + } + NgbTimepickerI18n.decorators = [ + { type: Injectable, args: [{ providedIn: 'root', useFactory: NGB_TIMEPICKER_I18N_FACTORY, deps: [LOCALE_ID] },] } + ]; + /** @nocollapse */ NgbTimepickerI18n.ngInjectableDef = ɵɵdefineInjectable({ factory: function NgbTimepickerI18n_Factory() { return NGB_TIMEPICKER_I18N_FACTORY(ɵɵinject(LOCALE_ID)); }, token: NgbTimepickerI18n, providedIn: "root" }); + return NgbTimepickerI18n; +}()); +var NgbTimepickerI18nDefault = /** @class */ (function (_super) { + __extends(NgbTimepickerI18nDefault, _super); + function NgbTimepickerI18nDefault(locale) { + var _this = _super.call(this) || this; + _this._periods = getLocaleDayPeriods(locale, FormStyle.Standalone, TranslationWidth.Narrow); + return _this; + } + /** + * @return {?} + */ + NgbTimepickerI18nDefault.prototype.getMorningPeriod = /** + * @return {?} + */ + function () { return this._periods[0]; }; + /** + * @return {?} + */ + NgbTimepickerI18nDefault.prototype.getAfternoonPeriod = /** + * @return {?} + */ + function () { return this._periods[1]; }; + NgbTimepickerI18nDefault.decorators = [ + { type: Injectable } + ]; + /** @nocollapse */ + NgbTimepickerI18nDefault.ctorParameters = function () { return [ + { type: String, decorators: [{ type: Inject, args: [LOCALE_ID,] }] } + ]; }; + return NgbTimepickerI18nDefault; +}(NgbTimepickerI18n)); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @type {?} */ +var NGB_TIMEPICKER_VALUE_ACCESSOR = { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef((/** + * @return {?} + */ + function () { return NgbTimepicker; })), + multi: true +}; +/** + * A directive that helps with wth picking hours, minutes and seconds. + */ +var NgbTimepicker = /** @class */ (function () { + function NgbTimepicker(_config, _ngbTimeAdapter, _cd, i18n) { + this._config = _config; + this._ngbTimeAdapter = _ngbTimeAdapter; + this._cd = _cd; + this.i18n = i18n; + this.onChange = (/** + * @param {?} _ + * @return {?} + */ + function (_) { }); + this.onTouched = (/** + * @return {?} + */ + function () { }); + this.meridian = _config.meridian; + this.spinners = _config.spinners; + this.seconds = _config.seconds; + this.hourStep = _config.hourStep; + this.minuteStep = _config.minuteStep; + this.secondStep = _config.secondStep; + this.disabled = _config.disabled; + this.readonlyInputs = _config.readonlyInputs; + this.size = _config.size; + } + Object.defineProperty(NgbTimepicker.prototype, "hourStep", { + get: /** + * @return {?} + */ + function () { return this._hourStep; }, + /** + * The number of hours to add/subtract when clicking hour spinners. + */ + set: /** + * The number of hours to add/subtract when clicking hour spinners. + * @param {?} step + * @return {?} + */ + function (step) { + this._hourStep = isInteger(step) ? step : this._config.hourStep; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbTimepicker.prototype, "minuteStep", { + get: /** + * @return {?} + */ + function () { return this._minuteStep; }, + /** + * The number of minutes to add/subtract when clicking minute spinners. + */ + set: /** + * The number of minutes to add/subtract when clicking minute spinners. + * @param {?} step + * @return {?} + */ + function (step) { + this._minuteStep = isInteger(step) ? step : this._config.minuteStep; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbTimepicker.prototype, "secondStep", { + get: /** + * @return {?} + */ + function () { return this._secondStep; }, + /** + * The number of seconds to add/subtract when clicking second spinners. + */ + set: /** + * The number of seconds to add/subtract when clicking second spinners. + * @param {?} step + * @return {?} + */ + function (step) { + this._secondStep = isInteger(step) ? step : this._config.secondStep; + }, + enumerable: true, + configurable: true + }); + /** + * @param {?} value + * @return {?} + */ + NgbTimepicker.prototype.writeValue = /** + * @param {?} value + * @return {?} + */ + function (value) { + /** @type {?} */ + var structValue = this._ngbTimeAdapter.fromModel(value); + this.model = structValue ? new NgbTime(structValue.hour, structValue.minute, structValue.second) : new NgbTime(); + if (!this.seconds && (!structValue || !isNumber(structValue.second))) { + this.model.second = 0; + } + this._cd.markForCheck(); + }; + /** + * @param {?} fn + * @return {?} + */ + NgbTimepicker.prototype.registerOnChange = /** + * @param {?} fn + * @return {?} + */ + function (fn) { this.onChange = fn; }; + /** + * @param {?} fn + * @return {?} + */ + NgbTimepicker.prototype.registerOnTouched = /** + * @param {?} fn + * @return {?} + */ + function (fn) { this.onTouched = fn; }; + /** + * @param {?} isDisabled + * @return {?} + */ + NgbTimepicker.prototype.setDisabledState = /** + * @param {?} isDisabled + * @return {?} + */ + function (isDisabled) { this.disabled = isDisabled; }; + /** + * @param {?} step + * @return {?} + */ + NgbTimepicker.prototype.changeHour = /** + * @param {?} step + * @return {?} + */ + function (step) { + this.model.changeHour(step); + this.propagateModelChange(); + }; + /** + * @param {?} step + * @return {?} + */ + NgbTimepicker.prototype.changeMinute = /** + * @param {?} step + * @return {?} + */ + function (step) { + this.model.changeMinute(step); + this.propagateModelChange(); + }; + /** + * @param {?} step + * @return {?} + */ + NgbTimepicker.prototype.changeSecond = /** + * @param {?} step + * @return {?} + */ + function (step) { + this.model.changeSecond(step); + this.propagateModelChange(); + }; + /** + * @param {?} newVal + * @return {?} + */ + NgbTimepicker.prototype.updateHour = /** + * @param {?} newVal + * @return {?} + */ + function (newVal) { + /** @type {?} */ + var isPM = this.model.hour >= 12; + /** @type {?} */ + var enteredHour = toInteger(newVal); + if (this.meridian && (isPM && enteredHour < 12 || !isPM && enteredHour === 12)) { + this.model.updateHour(enteredHour + 12); + } + else { + this.model.updateHour(enteredHour); + } + this.propagateModelChange(); + }; + /** + * @param {?} newVal + * @return {?} + */ + NgbTimepicker.prototype.updateMinute = /** + * @param {?} newVal + * @return {?} + */ + function (newVal) { + this.model.updateMinute(toInteger(newVal)); + this.propagateModelChange(); + }; + /** + * @param {?} newVal + * @return {?} + */ + NgbTimepicker.prototype.updateSecond = /** + * @param {?} newVal + * @return {?} + */ + function (newVal) { + this.model.updateSecond(toInteger(newVal)); + this.propagateModelChange(); + }; + /** + * @return {?} + */ + NgbTimepicker.prototype.toggleMeridian = /** + * @return {?} + */ + function () { + if (this.meridian) { + this.changeHour(12); + } + }; + /** + * @param {?} value + * @return {?} + */ + NgbTimepicker.prototype.formatHour = /** + * @param {?} value + * @return {?} + */ + function (value) { + if (isNumber(value)) { + if (this.meridian) { + return padNumber(value % 12 === 0 ? 12 : value % 12); + } + else { + return padNumber(value % 24); + } + } + else { + return padNumber(NaN); + } + }; + /** + * @param {?} value + * @return {?} + */ + NgbTimepicker.prototype.formatMinSec = /** + * @param {?} value + * @return {?} + */ + function (value) { return padNumber(value); }; + Object.defineProperty(NgbTimepicker.prototype, "isSmallSize", { + get: /** + * @return {?} + */ + function () { return this.size === 'small'; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NgbTimepicker.prototype, "isLargeSize", { + get: /** + * @return {?} + */ + function () { return this.size === 'large'; }, + enumerable: true, + configurable: true + }); + /** + * @param {?} changes + * @return {?} + */ + NgbTimepicker.prototype.ngOnChanges = /** + * @param {?} changes + * @return {?} + */ + function (changes) { + if (changes['seconds'] && !this.seconds && this.model && !isNumber(this.model.second)) { + this.model.second = 0; + this.propagateModelChange(false); + } + }; + /** + * @private + * @param {?=} touched + * @return {?} + */ + NgbTimepicker.prototype.propagateModelChange = /** + * @private + * @param {?=} touched + * @return {?} + */ + function (touched) { + if (touched === void 0) { touched = true; } + if (touched) { + this.onTouched(); + } + if (this.model.isValid(this.seconds)) { + this.onChange(this._ngbTimeAdapter.toModel({ hour: this.model.hour, minute: this.model.minute, second: this.model.second })); + } + else { + this.onChange(this._ngbTimeAdapter.toModel(null)); + } + }; + NgbTimepicker.decorators = [ + { type: Component, args: [{ + selector: 'ngb-timepicker', + encapsulation: ViewEncapsulation.None, + template: "\n
\n
\n
\n \n \n \n
\n
:
\n
\n \n \n \n
\n
:
\n
\n \n \n \n
\n
\n
\n \n
\n
\n
\n ", + providers: [NGB_TIMEPICKER_VALUE_ACCESSOR], + styles: ["ngb-timepicker{font-size:1rem}.ngb-tp{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.ngb-tp-input-container{width:4em}.ngb-tp-chevron::before{border-style:solid;border-width:.29em .29em 0 0;content:\"\";display:inline-block;height:.69em;left:.05em;position:relative;top:.15em;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);vertical-align:middle;width:.69em}.ngb-tp-chevron.bottom:before{top:-.3em;-webkit-transform:rotate(135deg);transform:rotate(135deg)}.ngb-tp-input{text-align:center}.ngb-tp-hour,.ngb-tp-meridian,.ngb-tp-minute,.ngb-tp-second{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-align:center;align-items:center;-ms-flex-pack:distribute;justify-content:space-around}.ngb-tp-spacer{width:1em;text-align:center}"] + }] } + ]; + /** @nocollapse */ + NgbTimepicker.ctorParameters = function () { return [ + { type: NgbTimepickerConfig }, + { type: NgbTimeAdapter }, + { type: ChangeDetectorRef }, + { type: NgbTimepickerI18n } + ]; }; + NgbTimepicker.propDecorators = { + meridian: [{ type: Input }], + spinners: [{ type: Input }], + seconds: [{ type: Input }], + hourStep: [{ type: Input }], + minuteStep: [{ type: Input }], + secondStep: [{ type: Input }], + readonlyInputs: [{ type: Input }], + size: [{ type: Input }] + }; + return NgbTimepicker; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +var NgbTimepickerModule = /** @class */ (function () { + function NgbTimepickerModule() { + } + NgbTimepickerModule.decorators = [ + { type: NgModule, args: [{ declarations: [NgbTimepicker], exports: [NgbTimepicker], imports: [CommonModule] },] } + ]; + return NgbTimepickerModule; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * Configuration service for the NgbToast component. You can inject this service, typically in your root component, + * and customize the values of its properties in order to provide default values for all the toasts used in the + * application. + * + * \@since 5.0.0 + */ +var NgbToastConfig = /** @class */ (function () { + function NgbToastConfig() { + this.autohide = true; + this.delay = 500; + this.ariaLive = 'polite'; + } + NgbToastConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ NgbToastConfig.ngInjectableDef = ɵɵdefineInjectable({ factory: function NgbToastConfig_Factory() { return new NgbToastConfig(); }, token: NgbToastConfig, providedIn: "root" }); + return NgbToastConfig; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * This directive allows the usage of HTML markup or other directives + * inside of the toast's header. + * + * \@since 5.0.0 + */ +var NgbToastHeader = /** @class */ (function () { + function NgbToastHeader() { + } + NgbToastHeader.decorators = [ + { type: Directive, args: [{ selector: '[ngbToastHeader]' },] } + ]; + return NgbToastHeader; +}()); +/** + * Toasts provide feedback messages as notifications to the user. + * Goal is to mimic the push notifications available both on mobile and desktop operating systems. + * + * \@since 5.0.0 + */ +var NgbToast = /** @class */ (function () { + function NgbToast(ariaLive, config) { + this.ariaLive = ariaLive; + /** + * A template like `` can be + * used in the projected content to allow markup usage. + */ + this.contentHeaderTpl = null; + /** + * An event fired immediately when toast's `hide()` method has been called. + * It can only occur in 2 different scenarios: + * - `autohide` timeout fires + * - user clicks on a closing cross (×) + * + * Additionally this output is purely informative. The toast won't disappear. It's up to the user to take care of + * that. + */ + this.hideOutput = new EventEmitter(); + if (this.ariaLive == null) { + this.ariaLive = config.ariaLive; + } + this.delay = config.delay; + this.autohide = config.autohide; + } + /** + * @return {?} + */ + NgbToast.prototype.ngAfterContentInit = /** + * @return {?} + */ + function () { this._init(); }; + /** + * @param {?} changes + * @return {?} + */ + NgbToast.prototype.ngOnChanges = /** + * @param {?} changes + * @return {?} + */ + function (changes) { + if ('autohide' in changes) { + this._clearTimeout(); + this._init(); + } + }; + /** + * @return {?} + */ + NgbToast.prototype.hide = /** + * @return {?} + */ + function () { + this._clearTimeout(); + this.hideOutput.emit(); + }; + /** + * @private + * @return {?} + */ + NgbToast.prototype._init = /** + * @private + * @return {?} + */ + function () { + var _this = this; + if (this.autohide && !this._timeoutID) { + this._timeoutID = setTimeout((/** + * @return {?} + */ + function () { return _this.hide(); }), this.delay); + } + }; + /** + * @private + * @return {?} + */ + NgbToast.prototype._clearTimeout = /** + * @private + * @return {?} + */ + function () { + if (this._timeoutID) { + clearTimeout(this._timeoutID); + this._timeoutID = null; + } + }; + NgbToast.decorators = [ + { type: Component, args: [{ + selector: 'ngb-toast', + exportAs: 'ngbToast', + encapsulation: ViewEncapsulation.None, + host: { + 'role': 'alert', + '[attr.aria-live]': 'ariaLive', + 'aria-atomic': 'true', + '[class.toast]': 'true', + '[class.show]': 'true', + '[class.autohide]': 'autohide', + }, + template: "\n \n {{header}}\n \n \n
\n \n \n
\n
\n
\n \n
\n ", + styles: [".ngb-toasts{position:fixed;top:0;right:0;margin:.5em;z-index:1200}ngb-toast .toast-header .close{margin-left:auto;margin-bottom:.25rem}"] + }] } + ]; + /** @nocollapse */ + NgbToast.ctorParameters = function () { return [ + { type: String, decorators: [{ type: Attribute, args: ['aria-live',] }] }, + { type: NgbToastConfig } + ]; }; + NgbToast.propDecorators = { + delay: [{ type: Input }], + autohide: [{ type: Input }], + header: [{ type: Input }], + contentHeaderTpl: [{ type: ContentChild, args: [NgbToastHeader, { read: TemplateRef, static: true },] }], + hideOutput: [{ type: Output, args: ['hide',] }] + }; + return NgbToast; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +var NgbToastModule = /** @class */ (function () { + function NgbToastModule() { + } + NgbToastModule.decorators = [ + { type: NgModule, args: [{ declarations: [NgbToast, NgbToastHeader], imports: [CommonModule], exports: [NgbToast, NgbToastHeader] },] } + ]; + return NgbToastModule; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * A configuration service for the [`NgbTooltip`](#/components/tooltip/api#NgbTooltip) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the tooltips used in the application. + */ +var NgbTooltipConfig = /** @class */ (function () { + function NgbTooltipConfig() { + this.autoClose = true; + this.placement = 'auto'; + this.triggers = 'hover focus'; + this.disableTooltip = false; + this.openDelay = 0; + this.closeDelay = 0; + } + NgbTooltipConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ NgbTooltipConfig.ngInjectableDef = ɵɵdefineInjectable({ factory: function NgbTooltipConfig_Factory() { return new NgbTooltipConfig(); }, token: NgbTooltipConfig, providedIn: "root" }); + return NgbTooltipConfig; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @type {?} */ +var nextId$5 = 0; +var NgbTooltipWindow = /** @class */ (function () { + function NgbTooltipWindow() { + } + NgbTooltipWindow.decorators = [ + { type: Component, args: [{ + selector: 'ngb-tooltip-window', + changeDetection: ChangeDetectionStrategy.OnPush, + encapsulation: ViewEncapsulation.None, + host: { '[class]': '"tooltip show" + (tooltipClass ? " " + tooltipClass : "")', 'role': 'tooltip', '[id]': 'id' }, + template: "
", + styles: ["ngb-tooltip-window.bs-tooltip-bottom .arrow,ngb-tooltip-window.bs-tooltip-top .arrow{left:calc(50% - .4rem)}ngb-tooltip-window.bs-tooltip-bottom-left .arrow,ngb-tooltip-window.bs-tooltip-top-left .arrow{left:1em}ngb-tooltip-window.bs-tooltip-bottom-right .arrow,ngb-tooltip-window.bs-tooltip-top-right .arrow{left:auto;right:.8rem}ngb-tooltip-window.bs-tooltip-left .arrow,ngb-tooltip-window.bs-tooltip-right .arrow{top:calc(50% - .4rem)}ngb-tooltip-window.bs-tooltip-left-top .arrow,ngb-tooltip-window.bs-tooltip-right-top .arrow{top:.4rem}ngb-tooltip-window.bs-tooltip-left-bottom .arrow,ngb-tooltip-window.bs-tooltip-right-bottom .arrow{top:auto;bottom:.4rem}"] + }] } + ]; + NgbTooltipWindow.propDecorators = { + id: [{ type: Input }], + tooltipClass: [{ type: Input }] + }; + return NgbTooltipWindow; +}()); +/** + * A lightweight and extensible directive for fancy tooltip creation. + */ +var NgbTooltip = /** @class */ (function () { + function NgbTooltip(_elementRef, _renderer, injector, componentFactoryResolver, viewContainerRef, config, _ngZone, _document, _changeDetector, _applicationRef) { + var _this = this; + this._elementRef = _elementRef; + this._renderer = _renderer; + this._ngZone = _ngZone; + this._document = _document; + this._changeDetector = _changeDetector; + this._applicationRef = _applicationRef; + /** + * An event emitted when the tooltip is shown. Contains no payload. + */ + this.shown = new EventEmitter(); + /** + * An event emitted when the popover is hidden. Contains no payload. + */ + this.hidden = new EventEmitter(); + this._ngbTooltipWindowId = "ngb-tooltip-" + nextId$5++; + this.autoClose = config.autoClose; + this.placement = config.placement; + this.triggers = config.triggers; + this.container = config.container; + this.disableTooltip = config.disableTooltip; + this.tooltipClass = config.tooltipClass; + this.openDelay = config.openDelay; + this.closeDelay = config.closeDelay; + this._popupService = new PopupService(NgbTooltipWindow, injector, viewContainerRef, _renderer, componentFactoryResolver, _applicationRef); + this._zoneSubscription = _ngZone.onStable.subscribe((/** + * @return {?} + */ + function () { + if (_this._windowRef) { + positionElements(_this._elementRef.nativeElement, _this._windowRef.location.nativeElement, _this.placement, _this.container === 'body', 'bs-tooltip'); + } + })); + } + Object.defineProperty(NgbTooltip.prototype, "ngbTooltip", { + get: /** + * @return {?} + */ + function () { return this._ngbTooltip; }, + /** + * The string content or a `TemplateRef` for the content to be displayed in the tooltip. + * + * If the content if falsy, the tooltip won't open. + */ + set: /** + * The string content or a `TemplateRef` for the content to be displayed in the tooltip. + * + * If the content if falsy, the tooltip won't open. + * @param {?} value + * @return {?} + */ + function (value) { + this._ngbTooltip = value; + if (!value && this._windowRef) { + this.close(); + } + }, + enumerable: true, + configurable: true + }); + /** + * Opens the tooltip. + * + * This is considered to be a "manual" triggering. + * The `context` is an optional value to be injected into the tooltip template when it is created. + */ + /** + * Opens the tooltip. + * + * This is considered to be a "manual" triggering. + * The `context` is an optional value to be injected into the tooltip template when it is created. + * @param {?=} context + * @return {?} + */ + NgbTooltip.prototype.open = /** + * Opens the tooltip. + * + * This is considered to be a "manual" triggering. + * The `context` is an optional value to be injected into the tooltip template when it is created. + * @param {?=} context + * @return {?} + */ + function (context) { + var _this = this; + if (!this._windowRef && this._ngbTooltip && !this.disableTooltip) { + this._windowRef = this._popupService.open(this._ngbTooltip, context); + this._windowRef.instance.tooltipClass = this.tooltipClass; + this._windowRef.instance.id = this._ngbTooltipWindowId; + this._renderer.setAttribute(this._elementRef.nativeElement, 'aria-describedby', this._ngbTooltipWindowId); + if (this.container === 'body') { + this._document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement); + } + // We need to detect changes, because we don't know where .open() might be called from. + // Ex. opening tooltip from one of lifecycle hooks that run after the CD + // (say from ngAfterViewInit) will result in 'ExpressionHasChanged' exception + this._windowRef.changeDetectorRef.detectChanges(); + // We need to mark for check, because tooltip won't work inside the OnPush component. + // Ex. when we use expression like `{{ tooltip.isOpen() : 'opened' : 'closed' }}` + // inside the template of an OnPush component and we change the tooltip from + // open -> closed, the expression in question won't be updated unless we explicitly + // mark the parent component to be checked. + this._windowRef.changeDetectorRef.markForCheck(); + ngbAutoClose(this._ngZone, this._document, this.autoClose, (/** + * @return {?} + */ + function () { return _this.close(); }), this.hidden, [this._windowRef.location.nativeElement]); + this.shown.emit(); + } + }; + /** + * Closes the tooltip. + * + * This is considered to be a "manual" triggering of the tooltip. + */ + /** + * Closes the tooltip. + * + * This is considered to be a "manual" triggering of the tooltip. + * @return {?} + */ + NgbTooltip.prototype.close = /** + * Closes the tooltip. + * + * This is considered to be a "manual" triggering of the tooltip. + * @return {?} + */ + function () { + if (this._windowRef != null) { + this._renderer.removeAttribute(this._elementRef.nativeElement, 'aria-describedby'); + this._popupService.close(); + this._windowRef = null; + this.hidden.emit(); + this._changeDetector.markForCheck(); + } + }; + /** + * Toggles the tooltip. + * + * This is considered to be a "manual" triggering of the tooltip. + */ + /** + * Toggles the tooltip. + * + * This is considered to be a "manual" triggering of the tooltip. + * @return {?} + */ + NgbTooltip.prototype.toggle = /** + * Toggles the tooltip. + * + * This is considered to be a "manual" triggering of the tooltip. + * @return {?} + */ + function () { + if (this._windowRef) { + this.close(); + } + else { + this.open(); + } + }; + /** + * Returns `true`, if the popover is currently shown. + */ + /** + * Returns `true`, if the popover is currently shown. + * @return {?} + */ + NgbTooltip.prototype.isOpen = /** + * Returns `true`, if the popover is currently shown. + * @return {?} + */ + function () { return this._windowRef != null; }; + /** + * @return {?} + */ + NgbTooltip.prototype.ngOnInit = /** + * @return {?} + */ + function () { + this._unregisterListenersFn = listenToTriggers(this._renderer, this._elementRef.nativeElement, this.triggers, this.isOpen.bind(this), this.open.bind(this), this.close.bind(this), +this.openDelay, +this.closeDelay); + }; + /** + * @return {?} + */ + NgbTooltip.prototype.ngOnDestroy = /** + * @return {?} + */ + function () { + this.close(); + // This check is needed as it might happen that ngOnDestroy is called before ngOnInit + // under certain conditions, see: https://github.com/ng-bootstrap/ng-bootstrap/issues/2199 + if (this._unregisterListenersFn) { + this._unregisterListenersFn(); + } + this._zoneSubscription.unsubscribe(); + }; + NgbTooltip.decorators = [ + { type: Directive, args: [{ selector: '[ngbTooltip]', exportAs: 'ngbTooltip' },] } + ]; + /** @nocollapse */ + NgbTooltip.ctorParameters = function () { return [ + { type: ElementRef }, + { type: Renderer2 }, + { type: Injector }, + { type: ComponentFactoryResolver }, + { type: ViewContainerRef }, + { type: NgbTooltipConfig }, + { type: NgZone }, + { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }, + { type: ChangeDetectorRef }, + { type: ApplicationRef } + ]; }; + NgbTooltip.propDecorators = { + autoClose: [{ type: Input }], + placement: [{ type: Input }], + triggers: [{ type: Input }], + container: [{ type: Input }], + disableTooltip: [{ type: Input }], + tooltipClass: [{ type: Input }], + openDelay: [{ type: Input }], + closeDelay: [{ type: Input }], + shown: [{ type: Output }], + hidden: [{ type: Output }], + ngbTooltip: [{ type: Input }] + }; + return NgbTooltip; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +var NgbTooltipModule = /** @class */ (function () { + function NgbTooltipModule() { + } + NgbTooltipModule.decorators = [ + { type: NgModule, args: [{ declarations: [NgbTooltip, NgbTooltipWindow], exports: [NgbTooltip], entryComponents: [NgbTooltipWindow] },] } + ]; + return NgbTooltipModule; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * A component that helps with text highlighting. + * + * If splits the `result` text into parts that contain the searched `term` and generates the HTML markup to simplify + * highlighting: + * + * Ex. `result="Alaska"` and `term="as"` will produce `Alaska`. + */ +var NgbHighlight = /** @class */ (function () { + function NgbHighlight() { + /** + * The CSS class for `` elements wrapping the `term` inside the `result`. + */ + this.highlightClass = 'ngb-highlight'; + } + /** + * @param {?} changes + * @return {?} + */ + NgbHighlight.prototype.ngOnChanges = /** + * @param {?} changes + * @return {?} + */ + function (changes) { + /** @type {?} */ + var result = toString(this.result); + /** @type {?} */ + var terms = Array.isArray(this.term) ? this.term : [this.term]; + /** @type {?} */ + var escapedTerms = terms.map((/** + * @param {?} term + * @return {?} + */ + function (term) { return regExpEscape(toString(term)); })).filter((/** + * @param {?} term + * @return {?} + */ + function (term) { return term; })); + this.parts = escapedTerms.length ? result.split(new RegExp("(" + escapedTerms.join('|') + ")", 'gmi')) : [result]; + }; + NgbHighlight.decorators = [ + { type: Component, args: [{ + selector: 'ngb-highlight', + changeDetection: ChangeDetectionStrategy.OnPush, + encapsulation: ViewEncapsulation.None, + template: "" + + "{{part}}{{part}}" + + "", + styles: [".ngb-highlight{font-weight:700}"] + }] } + ]; + NgbHighlight.propDecorators = { + highlightClass: [{ type: Input }], + result: [{ type: Input }], + term: [{ type: Input }] + }; + return NgbHighlight; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +var NgbTypeaheadWindow = /** @class */ (function () { + function NgbTypeaheadWindow() { + this.activeIdx = 0; + /** + * Flag indicating if the first row should be active initially + */ + this.focusFirst = true; + /** + * A function used to format a given result before display. This function should return a formatted string without any + * HTML markup + */ + this.formatter = toString; + /** + * Event raised when user selects a particular result row + */ + this.selectEvent = new EventEmitter(); + this.activeChangeEvent = new EventEmitter(); + } + /** + * @return {?} + */ + NgbTypeaheadWindow.prototype.hasActive = /** + * @return {?} + */ + function () { return this.activeIdx > -1 && this.activeIdx < this.results.length; }; + /** + * @return {?} + */ + NgbTypeaheadWindow.prototype.getActive = /** + * @return {?} + */ + function () { return this.results[this.activeIdx]; }; + /** + * @param {?} activeIdx + * @return {?} + */ + NgbTypeaheadWindow.prototype.markActive = /** + * @param {?} activeIdx + * @return {?} + */ + function (activeIdx) { + this.activeIdx = activeIdx; + this._activeChanged(); + }; + /** + * @return {?} + */ + NgbTypeaheadWindow.prototype.next = /** + * @return {?} + */ + function () { + if (this.activeIdx === this.results.length - 1) { + this.activeIdx = this.focusFirst ? (this.activeIdx + 1) % this.results.length : -1; + } + else { + this.activeIdx++; + } + this._activeChanged(); + }; + /** + * @return {?} + */ + NgbTypeaheadWindow.prototype.prev = /** + * @return {?} + */ + function () { + if (this.activeIdx < 0) { + this.activeIdx = this.results.length - 1; + } + else if (this.activeIdx === 0) { + this.activeIdx = this.focusFirst ? this.results.length - 1 : -1; + } + else { + this.activeIdx--; + } + this._activeChanged(); + }; + /** + * @return {?} + */ + NgbTypeaheadWindow.prototype.resetActive = /** + * @return {?} + */ + function () { + this.activeIdx = this.focusFirst ? 0 : -1; + this._activeChanged(); + }; + /** + * @param {?} item + * @return {?} + */ + NgbTypeaheadWindow.prototype.select = /** + * @param {?} item + * @return {?} + */ + function (item) { this.selectEvent.emit(item); }; + /** + * @return {?} + */ + NgbTypeaheadWindow.prototype.ngOnInit = /** + * @return {?} + */ + function () { this.resetActive(); }; + /** + * @private + * @return {?} + */ + NgbTypeaheadWindow.prototype._activeChanged = /** + * @private + * @return {?} + */ + function () { + this.activeChangeEvent.emit(this.activeIdx >= 0 ? this.id + '-' + this.activeIdx : undefined); + }; + NgbTypeaheadWindow.decorators = [ + { type: Component, args: [{ + selector: 'ngb-typeahead-window', + exportAs: 'ngbTypeaheadWindow', + host: { '(mousedown)': '$event.preventDefault()', 'class': 'dropdown-menu show', 'role': 'listbox', '[id]': 'id' }, + template: "\n \n \n \n \n \n \n " + }] } + ]; + NgbTypeaheadWindow.propDecorators = { + id: [{ type: Input }], + focusFirst: [{ type: Input }], + results: [{ type: Input }], + term: [{ type: Input }], + formatter: [{ type: Input }], + resultTemplate: [{ type: Input }], + selectEvent: [{ type: Output, args: ['select',] }], + activeChangeEvent: [{ type: Output, args: ['activeChange',] }] + }; + return NgbTypeaheadWindow; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @type {?} */ +var ARIA_LIVE_DELAY = new InjectionToken('live announcer delay', { providedIn: 'root', factory: ARIA_LIVE_DELAY_FACTORY }); +/** + * @return {?} + */ +function ARIA_LIVE_DELAY_FACTORY() { + return 100; +} +/** + * @param {?} document + * @param {?=} lazyCreate + * @return {?} + */ +function getLiveElement(document, lazyCreate) { + if (lazyCreate === void 0) { lazyCreate = false; } + /** @type {?} */ + var element = (/** @type {?} */ (document.body.querySelector('#ngb-live'))); + if (element == null && lazyCreate) { + element = document.createElement('div'); + element.setAttribute('id', 'ngb-live'); + element.setAttribute('aria-live', 'polite'); + element.setAttribute('aria-atomic', 'true'); + element.classList.add('sr-only'); + document.body.appendChild(element); + } + return element; +} +var Live = /** @class */ (function () { + function Live(_document, _delay) { + this._document = _document; + this._delay = _delay; + } + /** + * @return {?} + */ + Live.prototype.ngOnDestroy = /** + * @return {?} + */ + function () { + /** @type {?} */ + var element = getLiveElement(this._document); + if (element) { + element.parentElement.removeChild(element); + } + }; + /** + * @param {?} message + * @return {?} + */ + Live.prototype.say = /** + * @param {?} message + * @return {?} + */ + function (message) { + /** @type {?} */ + var element = getLiveElement(this._document, true); + /** @type {?} */ + var delay = this._delay; + element.textContent = ''; + /** @type {?} */ + var setText = (/** + * @return {?} + */ + function () { return element.textContent = message; }); + if (delay === null) { + setText(); + } + else { + setTimeout(setText, delay); + } + }; + Live.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ + Live.ctorParameters = function () { return [ + { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }, + { type: undefined, decorators: [{ type: Inject, args: [ARIA_LIVE_DELAY,] }] } + ]; }; + /** @nocollapse */ Live.ngInjectableDef = ɵɵdefineInjectable({ factory: function Live_Factory() { return new Live(ɵɵinject(DOCUMENT), ɵɵinject(ARIA_LIVE_DELAY)); }, token: Live, providedIn: "root" }); + return Live; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * A configuration service for the [`NgbTypeahead`](#/components/typeahead/api#NgbTypeahead) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the typeaheads used in the application. + */ +var NgbTypeaheadConfig = /** @class */ (function () { + function NgbTypeaheadConfig() { + this.editable = true; + this.focusFirst = true; + this.showHint = false; + this.placement = ['bottom-left', 'bottom-right', 'top-left', 'top-right']; + } + NgbTypeaheadConfig.decorators = [ + { type: Injectable, args: [{ providedIn: 'root' },] } + ]; + /** @nocollapse */ NgbTypeaheadConfig.ngInjectableDef = ɵɵdefineInjectable({ factory: function NgbTypeaheadConfig_Factory() { return new NgbTypeaheadConfig(); }, token: NgbTypeaheadConfig, providedIn: "root" }); + return NgbTypeaheadConfig; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @type {?} */ +var NGB_TYPEAHEAD_VALUE_ACCESSOR = { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef((/** + * @return {?} + */ + function () { return NgbTypeahead; })), + multi: true +}; +/** @type {?} */ +var nextWindowId = 0; +/** + * A directive providing a simple way of creating powerful typeaheads from any text input. + */ +var NgbTypeahead = /** @class */ (function () { + function NgbTypeahead(_elementRef, _viewContainerRef, _renderer, _injector, componentFactoryResolver, config, ngZone, _live, _document, _ngZone, _changeDetector, _applicationRef) { + var _this = this; + this._elementRef = _elementRef; + this._viewContainerRef = _viewContainerRef; + this._renderer = _renderer; + this._injector = _injector; + this._live = _live; + this._document = _document; + this._ngZone = _ngZone; + this._changeDetector = _changeDetector; + this._applicationRef = _applicationRef; + this._closed$ = new Subject(); + /** + * The value for the `autocomplete` attribute for the `` element. + * + * Defaults to `"off"` to disable the native browser autocomplete, but you can override it if necessary. + * + * \@since 2.1.0 + */ + this.autocomplete = 'off'; + /** + * The preferred placement of the typeahead. + * + * Possible values are `"top"`, `"top-left"`, `"top-right"`, `"bottom"`, `"bottom-left"`, + * `"bottom-right"`, `"left"`, `"left-top"`, `"left-bottom"`, `"right"`, `"right-top"`, + * `"right-bottom"` + * + * Accepts an array of strings or a string with space separated possible values. + * + * The default order of preference is `"bottom-left bottom-right top-left top-right"` + * + * Please see the [positioning overview](#/positioning) for more details. + */ + this.placement = 'bottom-left'; + /** + * An event emitted right before an item is selected from the result list. + * + * Event payload is of type [`NgbTypeaheadSelectItemEvent`](#/components/typeahead/api#NgbTypeaheadSelectItemEvent). + */ + this.selectItem = new EventEmitter(); + this.popupId = "ngb-typeahead-" + nextWindowId++; + this._onTouched = (/** + * @return {?} + */ + function () { }); + this._onChange = (/** + * @param {?} _ + * @return {?} + */ + function (_) { }); + this.container = config.container; + this.editable = config.editable; + this.focusFirst = config.focusFirst; + this.showHint = config.showHint; + this.placement = config.placement; + this._valueChanges = fromEvent(_elementRef.nativeElement, 'input') + .pipe(map((/** + * @param {?} $event + * @return {?} + */ + function ($event) { return ((/** @type {?} */ ($event.target))).value; }))); + this._resubscribeTypeahead = new BehaviorSubject(null); + this._popupService = new PopupService(NgbTypeaheadWindow, _injector, _viewContainerRef, _renderer, componentFactoryResolver, _applicationRef); + this._zoneSubscription = ngZone.onStable.subscribe((/** + * @return {?} + */ + function () { + if (_this.isPopupOpen()) { + positionElements(_this._elementRef.nativeElement, _this._windowRef.location.nativeElement, _this.placement, _this.container === 'body'); + } + })); + } + /** + * @return {?} + */ + NgbTypeahead.prototype.ngOnInit = /** + * @return {?} + */ + function () { + var _this = this; + /** @type {?} */ + var inputValues$ = this._valueChanges.pipe(tap((/** + * @param {?} value + * @return {?} + */ + function (value) { + _this._inputValueBackup = _this.showHint ? value : null; + if (_this.editable) { + _this._onChange(value); + } + }))); + /** @type {?} */ + var results$ = inputValues$.pipe(this.ngbTypeahead); + /** @type {?} */ + var processedResults$ = results$.pipe(tap((/** + * @return {?} + */ + function () { + if (!_this.editable) { + _this._onChange(undefined); + } + }))); + /** @type {?} */ + var userInput$ = this._resubscribeTypeahead.pipe(switchMap((/** + * @return {?} + */ + function () { return processedResults$; }))); + this._subscription = this._subscribeToUserInput(userInput$); + }; + /** + * @return {?} + */ + NgbTypeahead.prototype.ngOnDestroy = /** + * @return {?} + */ + function () { + this._closePopup(); + this._unsubscribeFromUserInput(); + this._zoneSubscription.unsubscribe(); + }; + /** + * @param {?} fn + * @return {?} + */ + NgbTypeahead.prototype.registerOnChange = /** + * @param {?} fn + * @return {?} + */ + function (fn) { this._onChange = fn; }; + /** + * @param {?} fn + * @return {?} + */ + NgbTypeahead.prototype.registerOnTouched = /** + * @param {?} fn + * @return {?} + */ + function (fn) { this._onTouched = fn; }; + /** + * @param {?} value + * @return {?} + */ + NgbTypeahead.prototype.writeValue = /** + * @param {?} value + * @return {?} + */ + function (value) { + this._writeInputValue(this._formatItemForInput(value)); + if (this.showHint) { + this._inputValueBackup = value; + } + }; + /** + * @param {?} isDisabled + * @return {?} + */ + NgbTypeahead.prototype.setDisabledState = /** + * @param {?} isDisabled + * @return {?} + */ + function (isDisabled) { + this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled); + }; + /** + * Dismisses typeahead popup window + */ + /** + * Dismisses typeahead popup window + * @return {?} + */ + NgbTypeahead.prototype.dismissPopup = /** + * Dismisses typeahead popup window + * @return {?} + */ + function () { + if (this.isPopupOpen()) { + this._resubscribeTypeahead.next(null); + this._closePopup(); + if (this.showHint && this._inputValueBackup !== null) { + this._writeInputValue(this._inputValueBackup); + } + this._changeDetector.markForCheck(); + } + }; + /** + * Returns true if the typeahead popup window is displayed + */ + /** + * Returns true if the typeahead popup window is displayed + * @return {?} + */ + NgbTypeahead.prototype.isPopupOpen = /** + * Returns true if the typeahead popup window is displayed + * @return {?} + */ + function () { return this._windowRef != null; }; + /** + * @return {?} + */ + NgbTypeahead.prototype.handleBlur = /** + * @return {?} + */ + function () { + this._resubscribeTypeahead.next(null); + this._onTouched(); + }; + /** + * @param {?} event + * @return {?} + */ + NgbTypeahead.prototype.handleKeyDown = /** + * @param {?} event + * @return {?} + */ + function (event) { + if (!this.isPopupOpen()) { + return; + } + // tslint:disable-next-line:deprecation + switch (event.which) { + case Key.ArrowDown: + event.preventDefault(); + this._windowRef.instance.next(); + this._showHint(); + break; + case Key.ArrowUp: + event.preventDefault(); + this._windowRef.instance.prev(); + this._showHint(); + break; + case Key.Enter: + case Key.Tab: + /** @type {?} */ + var result = this._windowRef.instance.getActive(); + if (isDefined(result)) { + event.preventDefault(); + event.stopPropagation(); + this._selectResult(result); + } + this._closePopup(); + break; + } + }; + /** + * @private + * @return {?} + */ + NgbTypeahead.prototype._openPopup = /** + * @private + * @return {?} + */ + function () { + var _this = this; + if (!this.isPopupOpen()) { + this._inputValueBackup = this._elementRef.nativeElement.value; + this._windowRef = this._popupService.open(); + this._windowRef.instance.id = this.popupId; + this._windowRef.instance.selectEvent.subscribe((/** + * @param {?} result + * @return {?} + */ + function (result) { return _this._selectResultClosePopup(result); })); + this._windowRef.instance.activeChangeEvent.subscribe((/** + * @param {?} activeId + * @return {?} + */ + function (activeId) { return _this.activeDescendant = activeId; })); + if (this.container === 'body') { + window.document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement); + } + this._changeDetector.markForCheck(); + ngbAutoClose(this._ngZone, this._document, 'outside', (/** + * @return {?} + */ + function () { return _this.dismissPopup(); }), this._closed$, [this._elementRef.nativeElement, this._windowRef.location.nativeElement]); + } + }; + /** + * @private + * @return {?} + */ + NgbTypeahead.prototype._closePopup = /** + * @private + * @return {?} + */ + function () { + this._closed$.next(); + this._popupService.close(); + this._windowRef = null; + this.activeDescendant = undefined; + }; + /** + * @private + * @param {?} result + * @return {?} + */ + NgbTypeahead.prototype._selectResult = /** + * @private + * @param {?} result + * @return {?} + */ + function (result) { + /** @type {?} */ + var defaultPrevented = false; + this.selectItem.emit({ item: result, preventDefault: (/** + * @return {?} + */ + function () { defaultPrevented = true; }) }); + this._resubscribeTypeahead.next(null); + if (!defaultPrevented) { + this.writeValue(result); + this._onChange(result); + } + }; + /** + * @private + * @param {?} result + * @return {?} + */ + NgbTypeahead.prototype._selectResultClosePopup = /** + * @private + * @param {?} result + * @return {?} + */ + function (result) { + this._selectResult(result); + this._closePopup(); + }; + /** + * @private + * @return {?} + */ + NgbTypeahead.prototype._showHint = /** + * @private + * @return {?} + */ + function () { + if (this.showHint && this._windowRef.instance.hasActive() && this._inputValueBackup != null) { + /** @type {?} */ + var userInputLowerCase = this._inputValueBackup.toLowerCase(); + /** @type {?} */ + var formattedVal = this._formatItemForInput(this._windowRef.instance.getActive()); + if (userInputLowerCase === formattedVal.substr(0, this._inputValueBackup.length).toLowerCase()) { + this._writeInputValue(this._inputValueBackup + formattedVal.substr(this._inputValueBackup.length)); + this._elementRef.nativeElement['setSelectionRange'].apply(this._elementRef.nativeElement, [this._inputValueBackup.length, formattedVal.length]); + } + else { + this._writeInputValue(formattedVal); + } + } + }; + /** + * @private + * @param {?} item + * @return {?} + */ + NgbTypeahead.prototype._formatItemForInput = /** + * @private + * @param {?} item + * @return {?} + */ + function (item) { + return item != null && this.inputFormatter ? this.inputFormatter(item) : toString(item); + }; + /** + * @private + * @param {?} value + * @return {?} + */ + NgbTypeahead.prototype._writeInputValue = /** + * @private + * @param {?} value + * @return {?} + */ + function (value) { + this._renderer.setProperty(this._elementRef.nativeElement, 'value', toString(value)); + }; + /** + * @private + * @param {?} userInput$ + * @return {?} + */ + NgbTypeahead.prototype._subscribeToUserInput = /** + * @private + * @param {?} userInput$ + * @return {?} + */ + function (userInput$) { + var _this = this; + return userInput$.subscribe((/** + * @param {?} results + * @return {?} + */ + function (results) { + if (!results || results.length === 0) { + _this._closePopup(); + } + else { + _this._openPopup(); + _this._windowRef.instance.focusFirst = _this.focusFirst; + _this._windowRef.instance.results = results; + _this._windowRef.instance.term = _this._elementRef.nativeElement.value; + if (_this.resultFormatter) { + _this._windowRef.instance.formatter = _this.resultFormatter; + } + if (_this.resultTemplate) { + _this._windowRef.instance.resultTemplate = _this.resultTemplate; + } + _this._windowRef.instance.resetActive(); + // The observable stream we are subscribing to might have async steps + // and if a component containing typeahead is using the OnPush strategy + // the change detection turn wouldn't be invoked automatically. + _this._windowRef.changeDetectorRef.detectChanges(); + _this._showHint(); + } + // live announcer + /** @type {?} */ + var count = results ? results.length : 0; + _this._live.say(count === 0 ? 'No results available' : count + " result" + (count === 1 ? '' : 's') + " available"); + })); + }; + /** + * @private + * @return {?} + */ + NgbTypeahead.prototype._unsubscribeFromUserInput = /** + * @private + * @return {?} + */ + function () { + if (this._subscription) { + this._subscription.unsubscribe(); + } + this._subscription = null; + }; + NgbTypeahead.decorators = [ + { type: Directive, args: [{ + selector: 'input[ngbTypeahead]', + exportAs: 'ngbTypeahead', + host: { + '(blur)': 'handleBlur()', + '[class.open]': 'isPopupOpen()', + '(keydown)': 'handleKeyDown($event)', + '[autocomplete]': 'autocomplete', + 'autocapitalize': 'off', + 'autocorrect': 'off', + 'role': 'combobox', + 'aria-multiline': 'false', + '[attr.aria-autocomplete]': 'showHint ? "both" : "list"', + '[attr.aria-activedescendant]': 'activeDescendant', + '[attr.aria-owns]': 'isPopupOpen() ? popupId : null', + '[attr.aria-expanded]': 'isPopupOpen()' + }, + providers: [NGB_TYPEAHEAD_VALUE_ACCESSOR] + },] } + ]; + /** @nocollapse */ + NgbTypeahead.ctorParameters = function () { return [ + { type: ElementRef }, + { type: ViewContainerRef }, + { type: Renderer2 }, + { type: Injector }, + { type: ComponentFactoryResolver }, + { type: NgbTypeaheadConfig }, + { type: NgZone }, + { type: Live }, + { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }, + { type: NgZone }, + { type: ChangeDetectorRef }, + { type: ApplicationRef } + ]; }; + NgbTypeahead.propDecorators = { + autocomplete: [{ type: Input }], + container: [{ type: Input }], + editable: [{ type: Input }], + focusFirst: [{ type: Input }], + inputFormatter: [{ type: Input }], + ngbTypeahead: [{ type: Input }], + resultFormatter: [{ type: Input }], + resultTemplate: [{ type: Input }], + showHint: [{ type: Input }], + placement: [{ type: Input }], + selectItem: [{ type: Output }] + }; + return NgbTypeahead; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +var NgbTypeaheadModule = /** @class */ (function () { + function NgbTypeaheadModule() { + } + NgbTypeaheadModule.decorators = [ + { type: NgModule, args: [{ + declarations: [NgbTypeahead, NgbHighlight, NgbTypeaheadWindow], + exports: [NgbTypeahead, NgbHighlight], + imports: [CommonModule], + entryComponents: [NgbTypeaheadWindow] + },] } + ]; + return NgbTypeaheadModule; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** @type {?} */ +var NGB_MODULES = [ + SbCardModule, NgbAccordionModule, NgbAlertModule, NgbButtonsModule, NgbCarouselModule, NgbCollapseModule, NgbDatepickerModule, + NgbDropdownModule, NgbModalModule, NgbPaginationModule, NgbPopoverModule, NgbProgressbarModule, NgbRatingModule, + NgbTabsetModule, NgbTimepickerModule, NgbToastModule, NgbTooltipModule, NgbTypeaheadModule +]; +var NgbModule = /** @class */ (function () { + function NgbModule() { + } + NgbModule.decorators = [ + { type: NgModule, args: [{ imports: NGB_MODULES, exports: NGB_MODULES },] } + ]; + return NgbModule; +}()); + +export { ModalDismissReasons, NgbAccordion, NgbAccordionConfig, NgbAccordionModule, NgbActiveModal, NgbAlert, NgbAlertConfig, NgbAlertModule, NgbButtonLabel, NgbButtonsModule, NgbCalendar, NgbCalendarGregorian, NgbCalendarHebrew, NgbCalendarIslamicCivil, NgbCalendarIslamicUmalqura, NgbCalendarPersian, NgbCarousel, NgbCarouselConfig, NgbCarouselModule, NgbCheckBox, NgbCollapse, NgbCollapseModule, NgbDate, NgbDateAdapter, NgbDateNativeAdapter, NgbDateNativeUTCAdapter, NgbDateParserFormatter, NgbDatepicker, NgbDatepickerConfig, NgbDatepickerI18n, NgbDatepickerI18nHebrew, NgbDatepickerModule, NgbDropdown, NgbDropdownAnchor, NgbDropdownConfig, NgbDropdownItem, NgbDropdownMenu, NgbDropdownModule, NgbDropdownToggle, NgbHighlight, NgbInputDatepicker, NgbModal, NgbModalConfig, NgbModalModule, NgbModalRef, NgbModule, NgbPagination, NgbPaginationConfig, NgbPaginationEllipsis, NgbPaginationFirst, NgbPaginationLast, NgbPaginationModule, NgbPaginationNext, NgbPaginationNumber, NgbPaginationPrevious, NgbPanel, NgbPanelContent, NgbPanelHeader, NgbPanelTitle, NgbPanelToggle, NgbPopover, NgbPopoverConfig, NgbPopoverModule, NgbProgressbar, NgbProgressbarConfig, NgbProgressbarModule, NgbRadio, NgbRadioGroup, NgbRating, NgbRatingConfig, NgbRatingModule, NgbSlide, NgbSlideEventDirection, NgbSlideEventSource, NgbTab, NgbTabContent, NgbTabTitle, NgbTabset, NgbTabsetConfig, NgbTabsetModule, NgbTimeAdapter, NgbTimepicker, NgbTimepickerConfig, NgbTimepickerI18n, NgbTimepickerModule, NgbToast, NgbToastConfig, NgbToastHeader, NgbToastModule, NgbTooltip, NgbTooltipConfig, NgbTooltipModule, NgbTypeahead, NgbTypeaheadConfig, NgbTypeaheadModule, SbCard, SbCardConfig, SbCardModule, NGB_CAROUSEL_DIRECTIVES as ɵa, NGB_DATEPICKER_CALENDAR_FACTORY as ɵb, ARIA_LIVE_DELAY as ɵba, ARIA_LIVE_DELAY_FACTORY as ɵbb, Live as ɵbc, NgbCalendarHijri as ɵbd, ContentRef as ɵbe, NgbDatepickerMonthView as ɵc, NgbDatepickerDayView as ɵd, NgbDatepickerNavigation as ɵe, NgbDatepickerNavigationSelect as ɵf, NGB_DATEPICKER_18N_FACTORY as ɵg, NgbDatepickerI18nDefault as ɵh, NGB_DATEPICKER_DATE_ADAPTER_FACTORY as ɵi, NgbDateStructAdapter as ɵj, NGB_DATEPICKER_PARSER_FORMATTER_FACTORY as ɵk, NgbDateISOParserFormatter as ɵl, NgbNavbar as ɵm, NgbPopoverWindow as ɵn, NGB_DATEPICKER_TIME_ADAPTER_FACTORY as ɵo, NgbTimeStructAdapter as ɵp, NGB_TIMEPICKER_I18N_FACTORY as ɵq, NgbTimepickerI18nDefault as ɵr, NgbTooltipWindow as ɵs, NgbTypeaheadWindow as ɵt, NgbDatepickerService as ɵu, NgbDatepickerKeyMapService as ɵv, NgbModalBackdrop as ɵw, NgbModalWindow as ɵx, NgbModalStack as ɵy, ScrollBar as ɵz }; +//# sourceMappingURL=sunbird-ui-components.js.map diff --git a/dist/sunbird-ui-components/fesm5/sunbird-ui-components.js.map b/dist/sunbird-ui-components/fesm5/sunbird-ui-components.js.map new file mode 100644 index 0000000..d82ab5b --- /dev/null +++ b/dist/sunbird-ui-components/fesm5/sunbird-ui-components.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sunbird-ui-components.js","sources":["ng://@sunbird-ed/sunbird-ui-components/card/card-config.ts","ng://@sunbird-ed/sunbird-ui-components/card/card.ts","ng://@sunbird-ed/sunbird-ui-components/card/card.module.ts","ng://@sunbird-ed/sunbird-ui-components/util/util.ts","ng://@sunbird-ed/sunbird-ui-components/accordion/accordion-config.ts","ng://@sunbird-ed/sunbird-ui-components/accordion/accordion.ts","ng://@sunbird-ed/sunbird-ui-components/accordion/accordion.module.ts","ng://@sunbird-ed/sunbird-ui-components/alert/alert-config.ts","ng://@sunbird-ed/sunbird-ui-components/alert/alert.ts","ng://@sunbird-ed/sunbird-ui-components/alert/alert.module.ts","ng://@sunbird-ed/sunbird-ui-components/buttons/label.ts","ng://@sunbird-ed/sunbird-ui-components/buttons/checkbox.ts","ng://@sunbird-ed/sunbird-ui-components/buttons/radio.ts","ng://@sunbird-ed/sunbird-ui-components/buttons/buttons.module.ts","ng://@sunbird-ed/sunbird-ui-components/carousel/carousel-config.ts","ng://@sunbird-ed/sunbird-ui-components/carousel/carousel.ts","ng://@sunbird-ed/sunbird-ui-components/carousel/carousel.module.ts","ng://@sunbird-ed/sunbird-ui-components/collapse/collapse.ts","ng://@sunbird-ed/sunbird-ui-components/collapse/collapse.module.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/ngb-date.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/ngb-calendar.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker-tools.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker-i18n.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker-service.ts","ng://@sunbird-ed/sunbird-ui-components/util/key.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker-keymap-service.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker-view-model.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker-config.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/adapters/ngb-date-adapter.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker-month-view.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker-navigation.ts","ng://@sunbird-ed/sunbird-ui-components/util/autoclose.ts","ng://@sunbird-ed/sunbird-ui-components/util/focus-trap.ts","ng://@sunbird-ed/sunbird-ui-components/util/positioning.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/ngb-date-parser-formatter.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker-input.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker-day-view.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker-navigation-select.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/hijri/ngb-calendar-hijri.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/hijri/ngb-calendar-islamic-civil.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/hijri/ngb-calendar-islamic-umalqura.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/jalali/jalali.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/jalali/ngb-calendar-persian.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/hebrew/hebrew.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/hebrew/ngb-calendar-hebrew.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/hebrew/datepicker-i18n-hebrew.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/adapters/ngb-date-native-adapter.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/adapters/ngb-date-native-utc-adapter.ts","ng://@sunbird-ed/sunbird-ui-components/datepicker/datepicker.module.ts","ng://@sunbird-ed/sunbird-ui-components/dropdown/dropdown-config.ts","ng://@sunbird-ed/sunbird-ui-components/dropdown/dropdown.ts","ng://@sunbird-ed/sunbird-ui-components/dropdown/dropdown.module.ts","ng://@sunbird-ed/sunbird-ui-components/modal/modal-config.ts","ng://@sunbird-ed/sunbird-ui-components/util/popup.ts","ng://@sunbird-ed/sunbird-ui-components/util/scrollbar.ts","ng://@sunbird-ed/sunbird-ui-components/modal/modal-backdrop.ts","ng://@sunbird-ed/sunbird-ui-components/modal/modal-ref.ts","ng://@sunbird-ed/sunbird-ui-components/modal/modal-dismiss-reasons.ts","ng://@sunbird-ed/sunbird-ui-components/modal/modal-window.ts","ng://@sunbird-ed/sunbird-ui-components/modal/modal-stack.ts","ng://@sunbird-ed/sunbird-ui-components/modal/modal.ts","ng://@sunbird-ed/sunbird-ui-components/modal/modal.module.ts","ng://@sunbird-ed/sunbird-ui-components/pagination/pagination-config.ts","ng://@sunbird-ed/sunbird-ui-components/pagination/pagination.ts","ng://@sunbird-ed/sunbird-ui-components/pagination/pagination.module.ts","ng://@sunbird-ed/sunbird-ui-components/util/triggers.ts","ng://@sunbird-ed/sunbird-ui-components/popover/popover-config.ts","ng://@sunbird-ed/sunbird-ui-components/popover/popover.ts","ng://@sunbird-ed/sunbird-ui-components/popover/popover.module.ts","ng://@sunbird-ed/sunbird-ui-components/progressbar/progressbar-config.ts","ng://@sunbird-ed/sunbird-ui-components/progressbar/progressbar.ts","ng://@sunbird-ed/sunbird-ui-components/progressbar/progressbar.module.ts","ng://@sunbird-ed/sunbird-ui-components/rating/rating-config.ts","ng://@sunbird-ed/sunbird-ui-components/rating/rating.ts","ng://@sunbird-ed/sunbird-ui-components/rating/rating.module.ts","ng://@sunbird-ed/sunbird-ui-components/tabset/tabset-config.ts","ng://@sunbird-ed/sunbird-ui-components/tabset/tabset.ts","ng://@sunbird-ed/sunbird-ui-components/tabset/tabset.module.ts","ng://@sunbird-ed/sunbird-ui-components/timepicker/ngb-time.ts","ng://@sunbird-ed/sunbird-ui-components/timepicker/timepicker-config.ts","ng://@sunbird-ed/sunbird-ui-components/timepicker/ngb-time-adapter.ts","ng://@sunbird-ed/sunbird-ui-components/timepicker/timepicker-i18n.ts","ng://@sunbird-ed/sunbird-ui-components/timepicker/timepicker.ts","ng://@sunbird-ed/sunbird-ui-components/timepicker/timepicker.module.ts","ng://@sunbird-ed/sunbird-ui-components/toast/toast-config.ts","ng://@sunbird-ed/sunbird-ui-components/toast/toast.ts","ng://@sunbird-ed/sunbird-ui-components/toast/toast.module.ts","ng://@sunbird-ed/sunbird-ui-components/tooltip/tooltip-config.ts","ng://@sunbird-ed/sunbird-ui-components/tooltip/tooltip.ts","ng://@sunbird-ed/sunbird-ui-components/tooltip/tooltip.module.ts","ng://@sunbird-ed/sunbird-ui-components/typeahead/highlight.ts","ng://@sunbird-ed/sunbird-ui-components/typeahead/typeahead-window.ts","ng://@sunbird-ed/sunbird-ui-components/util/accessibility/live.ts","ng://@sunbird-ed/sunbird-ui-components/typeahead/typeahead-config.ts","ng://@sunbird-ed/sunbird-ui-components/typeahead/typeahead.ts","ng://@sunbird-ed/sunbird-ui-components/typeahead/typeahead.module.ts","ng://@sunbird-ed/sunbird-ui-components/index.ts"],"sourcesContent":["import {Injectable} from '@angular/core';\n\n/**\n * A configuration service for the [SbCard](#/components/alert/api#SbCard) component.\n *\n * You can inject this service, typically in your root component, and customize its properties\n * to provide default values for all alerts used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class SbCardConfig {\n dismissible = true;\n type = 'warning';\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n ChangeDetectionStrategy,\n Renderer2,\n ElementRef,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewEncapsulation\n} from '@angular/core';\n\nimport {SbCardConfig} from './card-config';\n\n/**\n * Alert is a component to provide contextual feedback messages for user.\n *\n * It supports several alert types and can be dismissed.\n */\n@Component({\n selector: 'sb-card',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {'role': 'alert', 'class': 'alert', '[class.alert-dismissible]': 'dismissible'},\n template: `\n \n \n `,\n styleUrls: ['./card.scss']\n})\nexport class SbCard implements OnInit,\n OnChanges {\n /**\n * If `true`, alert can be dismissed by the user.\n *\n * The close button (×) will be displayed and you can be notified\n * of the event with the `(close)` output.\n */\n @Input() dismissible: boolean;\n /**\n * Type of the alert.\n *\n * Bootstrap provides styles for the following types: `'success'`, `'info'`, `'warning'`, `'danger'`, `'primary'`,\n * `'secondary'`, `'light'` and `'dark'`.\n */\n @Input() type: string;\n /**\n * An event emitted when the close button is clicked. It has no payload and only relevant for dismissible alerts.\n */\n @Output() close = new EventEmitter();\n\n constructor(config: SbCardConfig, private _renderer: Renderer2, private _element: ElementRef) {\n this.dismissible = config.dismissible;\n this.type = config.type;\n }\n\n closeHandler() { this.close.emit(null); }\n\n ngOnChanges(changes: SimpleChanges) {\n const typeChange = changes['type'];\n if (typeChange && !typeChange.firstChange) {\n this._renderer.removeClass(this._element.nativeElement, `alert-${typeChange.previousValue}`);\n this._renderer.addClass(this._element.nativeElement, `alert-${typeChange.currentValue}`);\n }\n }\n\n ngOnInit() { this._renderer.addClass(this._element.nativeElement, `alert-${this.type}`); }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\nimport {SbCard} from './card';\n\nexport {SbCard} from './card';\nexport {SbCardConfig} from './card-config';\n\n@NgModule({declarations: [SbCard], exports: [SbCard], imports: [CommonModule], entryComponents: [SbCard]})\nexport class SbCardModule {\n}\n","export function toInteger(value: any): number {\n return parseInt(`${value}`, 10);\n}\n\nexport function toString(value: any): string {\n return (value !== undefined && value !== null) ? `${value}` : '';\n}\n\nexport function getValueInRange(value: number, max: number, min = 0): number {\n return Math.max(Math.min(value, max), min);\n}\n\nexport function isString(value: any): value is string {\n return typeof value === 'string';\n}\n\nexport function isNumber(value: any): value is number {\n return !isNaN(toInteger(value));\n}\n\nexport function isInteger(value: any): value is number {\n return typeof value === 'number' && isFinite(value) && Math.floor(value) === value;\n}\n\nexport function isDefined(value: any): boolean {\n return value !== undefined && value !== null;\n}\n\nexport function padNumber(value: number) {\n if (isNumber(value)) {\n return `0${value}`.slice(-2);\n } else {\n return '';\n }\n}\n\nexport function regExpEscape(text) {\n return text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n}\n\nexport function hasClassName(element: any, className: string): boolean {\n return element && element.className && element.className.split &&\n element.className.split(/\\s+/).indexOf(className) >= 0;\n}\n\nif (typeof Element !== 'undefined' && !Element.prototype.closest) {\n // Polyfill for ie10+\n\n if (!Element.prototype.matches) {\n // IE uses the non-standard name: msMatchesSelector\n Element.prototype.matches = (Element.prototype as any).msMatchesSelector || Element.prototype.webkitMatchesSelector;\n }\n\n Element.prototype.closest = function(s: string) {\n let el = this;\n if (!document.documentElement.contains(el)) {\n return null;\n }\n do {\n if (el.matches(s)) {\n return el;\n }\n el = el.parentElement || el.parentNode;\n } while (el !== null && el.nodeType === 1);\n return null;\n };\n}\n\nexport function closest(element: HTMLElement, selector): HTMLElement {\n if (!selector) {\n return null;\n }\n\n return element.closest(selector);\n}\n","import {Injectable} from '@angular/core';\n\n/**\n * A configuration service for the [NgbAccordion](#/components/accordion/api#NgbAccordion) component.\n *\n * You can inject this service, typically in your root component, and customize its properties\n * to provide default values for all accordions used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbAccordionConfig {\n closeOthers = false;\n type: string;\n}\n","import {\n AfterContentChecked,\n Component,\n ContentChildren,\n Directive,\n EventEmitter,\n Host,\n Input,\n Optional,\n Output,\n QueryList,\n TemplateRef\n} from '@angular/core';\n\nimport {isString} from '../util/util';\n\nimport {NgbAccordionConfig} from './accordion-config';\n\nlet nextId = 0;\n\n/**\n * The context for the [NgbPanelHeader](#/components/accordion/api#NgbPanelHeader) template\n *\n * @since 4.1.0\n */\nexport interface NgbPanelHeaderContext {\n /**\n * `True` if current panel is opened\n */\n opened: boolean;\n}\n\n/**\n * A directive that wraps an accordion panel header with any HTML markup and a toggling button\n * marked with [`NgbPanelToggle`](#/components/accordion/api#NgbPanelToggle).\n * See the [header customization demo](#/components/accordion/examples#header) for more details.\n *\n * You can also use [`NgbPanelTitle`](#/components/accordion/api#NgbPanelTitle) to customize only the panel title.\n *\n * @since 4.1.0\n */\n@Directive({selector: 'ng-template[ngbPanelHeader]'})\nexport class NgbPanelHeader {\n constructor(public templateRef: TemplateRef) {}\n}\n\n/**\n * A directive that wraps only the panel title with HTML markup inside.\n *\n * You can also use [`NgbPanelHeader`](#/components/accordion/api#NgbPanelHeader) to customize the full panel header.\n */\n@Directive({selector: 'ng-template[ngbPanelTitle]'})\nexport class NgbPanelTitle {\n constructor(public templateRef: TemplateRef) {}\n}\n\n/**\n * A directive that wraps the accordion panel content.\n */\n@Directive({selector: 'ng-template[ngbPanelContent]'})\nexport class NgbPanelContent {\n constructor(public templateRef: TemplateRef) {}\n}\n\n/**\n * A directive that wraps an individual accordion panel with title and collapsible content.\n */\n@Directive({selector: 'ngb-panel'})\nexport class NgbPanel implements AfterContentChecked {\n /**\n * If `true`, the panel is disabled an can't be toggled.\n */\n @Input() disabled = false;\n\n /**\n * An optional id for the panel that must be unique on the page.\n *\n * If not provided, it will be auto-generated in the `ngb-panel-xxx` format.\n */\n @Input() id = `ngb-panel-${nextId++}`;\n\n isOpen = false;\n\n /**\n * The panel title.\n *\n * You can alternatively use [`NgbPanelTitle`](#/components/accordion/api#NgbPanelTitle) to set panel title.\n */\n @Input() title: string;\n\n /**\n * Type of the current panel.\n *\n * Bootstrap provides styles for the following types: `'success'`, `'info'`, `'warning'`, `'danger'`, `'primary'`,\n * `'secondary'`, `'light'` and `'dark'`.\n */\n @Input() type: string;\n\n titleTpl: NgbPanelTitle | null;\n headerTpl: NgbPanelHeader | null;\n contentTpl: NgbPanelContent | null;\n\n @ContentChildren(NgbPanelTitle, {descendants: false}) titleTpls: QueryList;\n @ContentChildren(NgbPanelHeader, {descendants: false}) headerTpls: QueryList;\n @ContentChildren(NgbPanelContent, {descendants: false}) contentTpls: QueryList;\n\n ngAfterContentChecked() {\n // We are using @ContentChildren instead of @ContentChild as in the Angular version being used\n // only @ContentChildren allows us to specify the {descendants: false} option.\n // Without {descendants: false} we are hitting bugs described in:\n // https://github.com/ng-bootstrap/ng-bootstrap/issues/2240\n this.titleTpl = this.titleTpls.first;\n this.headerTpl = this.headerTpls.first;\n this.contentTpl = this.contentTpls.first;\n }\n}\n\n/**\n * An event emitted right before toggling an accordion panel.\n */\nexport interface NgbPanelChangeEvent {\n /**\n * The id of the accordion panel that is being toggled.\n */\n panelId: string;\n\n /**\n * The next state of the panel.\n *\n * `true` if it will be opened, `false` if closed.\n */\n nextState: boolean;\n\n /**\n * Calling this function will prevent panel toggling.\n */\n preventDefault: () => void;\n}\n\n/**\n * Accordion is a collection of collapsible panels (bootstrap cards).\n *\n * It can ensure only one panel is opened at a time and allows to customize panel\n * headers.\n */\n@Component({\n selector: 'ngb-accordion',\n exportAs: 'ngbAccordion',\n host: {'class': 'accordion', 'role': 'tablist', '[attr.aria-multiselectable]': '!closeOtherPanels'},\n template: `\n \n \n \n \n
\n
\n \n
\n
\n
\n \n
\n
\n
\n
\n `\n})\nexport class NgbAccordion implements AfterContentChecked {\n @ContentChildren(NgbPanel) panels: QueryList;\n\n /**\n * An array or comma separated strings of panel ids that should be opened **initially**.\n *\n * For subsequent changes use methods like `expand()`, `collapse()`, etc. and\n * the `(panelChange)` event.\n */\n @Input() activeIds: string | string[] = [];\n\n /**\n * If `true`, only one panel could be opened at a time.\n *\n * Opening a new panel will close others.\n */\n @Input('closeOthers') closeOtherPanels: boolean;\n\n /**\n * If `true`, panel content will be detached from DOM and not simply hidden when the panel is collapsed.\n */\n @Input() destroyOnHide = true;\n\n /**\n * Type of panels.\n *\n * Bootstrap provides styles for the following types: `'success'`, `'info'`, `'warning'`, `'danger'`, `'primary'`,\n * `'secondary'`, `'light'` and `'dark'`.\n */\n @Input() type: string;\n\n /**\n * Event emitted right before the panel toggle happens.\n *\n * See [NgbPanelChangeEvent](#/components/accordion/api#NgbPanelChangeEvent) for payload details.\n */\n @Output() panelChange = new EventEmitter();\n\n constructor(config: NgbAccordionConfig) {\n this.type = config.type;\n this.closeOtherPanels = config.closeOthers;\n }\n\n /**\n * Checks if a panel with a given id is expanded.\n */\n isExpanded(panelId: string): boolean { return this.activeIds.indexOf(panelId) > -1; }\n\n /**\n * Expands a panel with a given id.\n *\n * Has no effect if the panel is already expanded or disabled.\n */\n expand(panelId: string): void { this._changeOpenState(this._findPanelById(panelId), true); }\n\n /**\n * Expands all panels, if `[closeOthers]` is `false`.\n *\n * If `[closeOthers]` is `true`, it will expand the first panel, unless there is already a panel opened.\n */\n expandAll(): void {\n if (this.closeOtherPanels) {\n if (this.activeIds.length === 0 && this.panels.length) {\n this._changeOpenState(this.panels.first, true);\n }\n } else {\n this.panels.forEach(panel => this._changeOpenState(panel, true));\n }\n }\n\n /**\n * Collapses a panel with the given id.\n *\n * Has no effect if the panel is already collapsed or disabled.\n */\n collapse(panelId: string) { this._changeOpenState(this._findPanelById(panelId), false); }\n\n /**\n * Collapses all opened panels.\n */\n collapseAll() {\n this.panels.forEach((panel) => { this._changeOpenState(panel, false); });\n }\n\n /**\n * Toggles a panel with the given id.\n *\n * Has no effect if the panel is disabled.\n */\n toggle(panelId: string) {\n const panel = this._findPanelById(panelId);\n if (panel) {\n this._changeOpenState(panel, !panel.isOpen);\n }\n }\n\n ngAfterContentChecked() {\n // active id updates\n if (isString(this.activeIds)) {\n this.activeIds = this.activeIds.split(/\\s*,\\s*/);\n }\n\n // update panels open states\n this.panels.forEach(panel => panel.isOpen = !panel.disabled && this.activeIds.indexOf(panel.id) > -1);\n\n // closeOthers updates\n if (this.activeIds.length > 1 && this.closeOtherPanels) {\n this._closeOthers(this.activeIds[0]);\n this._updateActiveIds();\n }\n }\n\n private _changeOpenState(panel: NgbPanel, nextState: boolean) {\n if (panel && !panel.disabled && panel.isOpen !== nextState) {\n let defaultPrevented = false;\n\n this.panelChange.emit(\n {panelId: panel.id, nextState: nextState, preventDefault: () => { defaultPrevented = true; }});\n\n if (!defaultPrevented) {\n panel.isOpen = nextState;\n\n if (nextState && this.closeOtherPanels) {\n this._closeOthers(panel.id);\n }\n this._updateActiveIds();\n }\n }\n }\n\n private _closeOthers(panelId: string) {\n this.panels.forEach(panel => {\n if (panel.id !== panelId) {\n panel.isOpen = false;\n }\n });\n }\n\n private _findPanelById(panelId: string): NgbPanel | null { return this.panels.find(p => p.id === panelId); }\n\n private _updateActiveIds() {\n this.activeIds = this.panels.filter(panel => panel.isOpen && !panel.disabled).map(panel => panel.id);\n }\n}\n\n/**\n * A directive to put on a button that toggles panel opening and closing.\n *\n * To be used inside the [`NgbPanelHeader`](#/components/accordion/api#NgbPanelHeader)\n *\n * @since 4.1.0\n */\n@Directive({\n selector: 'button[ngbPanelToggle]',\n host: {\n 'type': 'button',\n '[disabled]': 'panel.disabled',\n '[class.collapsed]': '!panel.isOpen',\n '[attr.aria-expanded]': 'panel.isOpen',\n '[attr.aria-controls]': 'panel.id',\n '(click)': 'accordion.toggle(panel.id)'\n }\n})\nexport class NgbPanelToggle {\n @Input()\n set ngbPanelToggle(panel: NgbPanel) {\n if (panel) {\n this.panel = panel;\n }\n }\n\n constructor(public accordion: NgbAccordion, @Optional() @Host() public panel: NgbPanel) {}\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\nimport {NgbAccordion, NgbPanel, NgbPanelTitle, NgbPanelContent, NgbPanelHeader, NgbPanelToggle} from './accordion';\n\nexport {\n NgbAccordion,\n NgbPanel,\n NgbPanelTitle,\n NgbPanelContent,\n NgbPanelChangeEvent,\n NgbPanelHeader,\n NgbPanelHeaderContext,\n NgbPanelToggle\n} from './accordion';\nexport {NgbAccordionConfig} from './accordion-config';\n\nconst NGB_ACCORDION_DIRECTIVES =\n [NgbAccordion, NgbPanel, NgbPanelTitle, NgbPanelContent, NgbPanelHeader, NgbPanelToggle];\n\n@NgModule({declarations: NGB_ACCORDION_DIRECTIVES, exports: NGB_ACCORDION_DIRECTIVES, imports: [CommonModule]})\nexport class NgbAccordionModule {\n}\n","import {Injectable} from '@angular/core';\n\n/**\n * A configuration service for the [NgbAlert](#/components/alert/api#NgbAlert) component.\n *\n * You can inject this service, typically in your root component, and customize its properties\n * to provide default values for all alerts used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbAlertConfig {\n dismissible = true;\n type = 'warning';\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n ChangeDetectionStrategy,\n Renderer2,\n ElementRef,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewEncapsulation\n} from '@angular/core';\n\nimport {NgbAlertConfig} from './alert-config';\n\n/**\n * Alert is a component to provide contextual feedback messages for user.\n *\n * It supports several alert types and can be dismissed.\n */\n@Component({\n selector: 'ngb-alert',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {'role': 'alert', 'class': 'alert', '[class.alert-dismissible]': 'dismissible'},\n template: `\n \n \n `,\n styleUrls: ['./alert.scss']\n})\nexport class NgbAlert implements OnInit,\n OnChanges {\n /**\n * If `true`, alert can be dismissed by the user.\n *\n * The close button (×) will be displayed and you can be notified\n * of the event with the `(close)` output.\n */\n @Input() dismissible: boolean;\n /**\n * Type of the alert.\n *\n * Bootstrap provides styles for the following types: `'success'`, `'info'`, `'warning'`, `'danger'`, `'primary'`,\n * `'secondary'`, `'light'` and `'dark'`.\n */\n @Input() type: string;\n /**\n * An event emitted when the close button is clicked. It has no payload and only relevant for dismissible alerts.\n */\n @Output() close = new EventEmitter();\n\n constructor(config: NgbAlertConfig, private _renderer: Renderer2, private _element: ElementRef) {\n this.dismissible = config.dismissible;\n this.type = config.type;\n }\n\n closeHandler() { this.close.emit(null); }\n\n ngOnChanges(changes: SimpleChanges) {\n const typeChange = changes['type'];\n if (typeChange && !typeChange.firstChange) {\n this._renderer.removeClass(this._element.nativeElement, `alert-${typeChange.previousValue}`);\n this._renderer.addClass(this._element.nativeElement, `alert-${typeChange.currentValue}`);\n }\n }\n\n ngOnInit() { this._renderer.addClass(this._element.nativeElement, `alert-${this.type}`); }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\nimport {NgbAlert} from './alert';\n\nexport {NgbAlert} from './alert';\nexport {NgbAlertConfig} from './alert-config';\n\n@NgModule({declarations: [NgbAlert], exports: [NgbAlert], imports: [CommonModule], entryComponents: [NgbAlert]})\nexport class NgbAlertModule {\n}\n","import {Directive} from '@angular/core';\n\n@Directive({\n selector: '[ngbButtonLabel]',\n host:\n {'[class.btn]': 'true', '[class.active]': 'active', '[class.disabled]': 'disabled', '[class.focus]': 'focused'}\n})\nexport class NgbButtonLabel {\n active: boolean;\n disabled: boolean;\n focused: boolean;\n}\n","import {ChangeDetectorRef, Directive, forwardRef, Input} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\n\nimport {NgbButtonLabel} from './label';\n\nconst NGB_CHECKBOX_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgbCheckBox),\n multi: true\n};\n\n\n/**\n * Allows to easily create Bootstrap-style checkbox buttons.\n *\n * Integrates with forms, so the value of a checked button is bound to the underlying form control\n * either in a reactive or template-driven way.\n */\n@Directive({\n selector: '[ngbButton][type=checkbox]',\n host: {\n 'autocomplete': 'off',\n '[checked]': 'checked',\n '[disabled]': 'disabled',\n '(change)': 'onInputChange($event)',\n '(focus)': 'focused = true',\n '(blur)': 'focused = false'\n },\n providers: [NGB_CHECKBOX_VALUE_ACCESSOR]\n})\nexport class NgbCheckBox implements ControlValueAccessor {\n checked;\n\n /**\n * If `true`, the checkbox button will be disabled\n */\n @Input() disabled = false;\n\n /**\n * The form control value when the checkbox is checked.\n */\n @Input() valueChecked = true;\n\n /**\n * The form control value when the checkbox is unchecked.\n */\n @Input() valueUnChecked = false;\n\n onChange = (_: any) => {};\n onTouched = () => {};\n\n set focused(isFocused: boolean) {\n this._label.focused = isFocused;\n if (!isFocused) {\n this.onTouched();\n }\n }\n\n constructor(private _label: NgbButtonLabel, private _cd: ChangeDetectorRef) {}\n\n onInputChange($event) {\n const modelToPropagate = $event.target.checked ? this.valueChecked : this.valueUnChecked;\n this.onChange(modelToPropagate);\n this.onTouched();\n this.writeValue(modelToPropagate);\n }\n\n registerOnChange(fn: (value: any) => any): void { this.onChange = fn; }\n\n registerOnTouched(fn: () => any): void { this.onTouched = fn; }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this._label.disabled = isDisabled;\n }\n\n writeValue(value) {\n this.checked = value === this.valueChecked;\n this._label.active = this.checked;\n\n // label won't be updated, if it is inside the OnPush component when [ngModel] changes\n this._cd.markForCheck();\n }\n}\n","import {ChangeDetectorRef, Directive, ElementRef, forwardRef, Input, OnDestroy, Renderer2} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\n\nimport {NgbButtonLabel} from './label';\n\nconst NGB_RADIO_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgbRadioGroup),\n multi: true\n};\n\nlet nextId = 0;\n\n/**\n * Allows to easily create Bootstrap-style radio buttons.\n *\n * Integrates with forms, so the value of a checked button is bound to the underlying form control\n * either in a reactive or template-driven way.\n */\n@Directive({selector: '[ngbRadioGroup]', host: {'role': 'radiogroup'}, providers: [NGB_RADIO_VALUE_ACCESSOR]})\nexport class NgbRadioGroup implements ControlValueAccessor {\n private _radios: Set = new Set();\n private _value = null;\n private _disabled: boolean;\n\n get disabled() { return this._disabled; }\n set disabled(isDisabled: boolean) { this.setDisabledState(isDisabled); }\n\n /**\n * Name of the radio group applied to radio input elements.\n *\n * Will be applied to all radio input elements inside the group,\n * unless [`NgbRadio`](#/components/buttons/api#NgbRadio)'s specify names themselves.\n *\n * If not provided, will be generated in the `ngb-radio-xx` format.\n */\n @Input() name = `ngb-radio-${nextId++}`;\n\n onChange = (_: any) => {};\n onTouched = () => {};\n\n onRadioChange(radio: NgbRadio) {\n this.writeValue(radio.value);\n this.onChange(radio.value);\n }\n\n onRadioValueUpdate() { this._updateRadiosValue(); }\n\n register(radio: NgbRadio) { this._radios.add(radio); }\n\n registerOnChange(fn: (value: any) => any): void { this.onChange = fn; }\n\n registerOnTouched(fn: () => any): void { this.onTouched = fn; }\n\n setDisabledState(isDisabled: boolean): void {\n this._disabled = isDisabled;\n this._updateRadiosDisabled();\n }\n\n unregister(radio: NgbRadio) { this._radios.delete(radio); }\n\n writeValue(value) {\n this._value = value;\n this._updateRadiosValue();\n }\n\n private _updateRadiosValue() { this._radios.forEach((radio) => radio.updateValue(this._value)); }\n private _updateRadiosDisabled() { this._radios.forEach((radio) => radio.updateDisabled()); }\n}\n\n\n/**\n * A directive that marks an input of type \"radio\" as a part of the\n * [`NgbRadioGroup`](#/components/buttons/api#NgbRadioGroup).\n */\n@Directive({\n selector: '[ngbButton][type=radio]',\n host: {\n '[checked]': 'checked',\n '[disabled]': 'disabled',\n '[name]': 'nameAttr',\n '(change)': 'onChange()',\n '(focus)': 'focused = true',\n '(blur)': 'focused = false'\n }\n})\nexport class NgbRadio implements OnDestroy {\n private _checked: boolean;\n private _disabled: boolean;\n private _value: any = null;\n\n /**\n * The value for the 'name' property of the input element.\n *\n * All inputs of the radio group should have the same name. If not specified,\n * the name of the enclosing group is used.\n */\n @Input() name: string;\n\n /**\n * The form control value when current radio button is checked.\n */\n @Input('value')\n set value(value: any) {\n this._value = value;\n const stringValue = value ? value.toString() : '';\n this._renderer.setProperty(this._element.nativeElement, 'value', stringValue);\n this._group.onRadioValueUpdate();\n }\n\n /**\n * If `true`, current radio button will be disabled.\n */\n @Input('disabled')\n set disabled(isDisabled: boolean) {\n this._disabled = isDisabled !== false;\n this.updateDisabled();\n }\n\n set focused(isFocused: boolean) {\n if (this._label) {\n this._label.focused = isFocused;\n }\n if (!isFocused) {\n this._group.onTouched();\n }\n }\n\n get checked() { return this._checked; }\n\n get disabled() { return this._group.disabled || this._disabled; }\n\n get value() { return this._value; }\n\n get nameAttr() { return this.name || this._group.name; }\n\n constructor(\n private _group: NgbRadioGroup, private _label: NgbButtonLabel, private _renderer: Renderer2,\n private _element: ElementRef, private _cd: ChangeDetectorRef) {\n this._group.register(this);\n this.updateDisabled();\n }\n\n ngOnDestroy() { this._group.unregister(this); }\n\n onChange() { this._group.onRadioChange(this); }\n\n updateValue(value) {\n // label won't be updated, if it is inside the OnPush component when [ngModel] changes\n if (this.value !== value) {\n this._cd.markForCheck();\n }\n\n this._checked = this.value === value;\n this._label.active = this._checked;\n }\n\n updateDisabled() { this._label.disabled = this.disabled; }\n}\n","import {NgModule} from '@angular/core';\nimport {NgbButtonLabel} from './label';\nimport {NgbCheckBox} from './checkbox';\nimport {NgbRadio, NgbRadioGroup} from './radio';\n\nexport {NgbButtonLabel} from './label';\nexport {NgbCheckBox} from './checkbox';\nexport {NgbRadio, NgbRadioGroup} from './radio';\n\n\nconst NGB_BUTTON_DIRECTIVES = [NgbButtonLabel, NgbCheckBox, NgbRadioGroup, NgbRadio];\n\n@NgModule({declarations: NGB_BUTTON_DIRECTIVES, exports: NGB_BUTTON_DIRECTIVES})\nexport class NgbButtonsModule {\n}\n","import {Injectable} from '@angular/core';\n\n/**\n * A configuration service for the [NgbCarousel](#/components/carousel/api#NgbCarousel) component.\n *\n * You can inject this service, typically in your root component, and customize its properties\n * to provide default values for all carousels used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbCarouselConfig {\n interval = 5000;\n wrap = true;\n keyboard = true;\n pauseOnHover = true;\n showNavigationArrows = true;\n showNavigationIndicators = true;\n}\n","import {\n AfterContentChecked,\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n Directive,\n EventEmitter,\n Inject,\n Input,\n NgZone,\n OnDestroy,\n Output,\n PLATFORM_ID,\n QueryList,\n TemplateRef,\n HostListener\n} from '@angular/core';\nimport {isPlatformBrowser} from '@angular/common';\n\nimport {NgbCarouselConfig} from './carousel-config';\n\nimport {Subject, timer, BehaviorSubject, combineLatest, NEVER} from 'rxjs';\nimport {startWith, map, switchMap, takeUntil, distinctUntilChanged} from 'rxjs/operators';\n\nlet nextId = 0;\n\n/**\n * A directive that wraps the individual carousel slide.\n */\n@Directive({selector: 'ng-template[ngbSlide]'})\nexport class NgbSlide {\n /**\n * Slide id that must be unique for the entire document.\n *\n * If not provided, will be generated in the `ngb-slide-xx` format.\n */\n @Input() id = `ngb-slide-${nextId++}`;\n constructor(public tplRef: TemplateRef) {}\n}\n\n/**\n * Carousel is a component to easily create and control slideshows.\n *\n * Allows to set intervals, change the way user interacts with the slides and provides a programmatic API.\n */\n@Component({\n selector: 'ngb-carousel',\n exportAs: 'ngbCarousel',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'carousel slide',\n '[style.display]': '\"block\"',\n 'tabIndex': '0',\n '(keydown.arrowLeft)': 'keyboard && prev(NgbSlideEventSource.ARROW_LEFT)',\n '(keydown.arrowRight)': 'keyboard && next(NgbSlideEventSource.ARROW_RIGHT)'\n },\n template: `\n
    \n
  1. \n
\n
\n
\n \n
\n
\n \n \n Previous\n \n \n \n Next\n \n `\n})\nexport class NgbCarousel implements AfterContentChecked,\n AfterContentInit, OnDestroy {\n @ContentChildren(NgbSlide) slides: QueryList;\n\n public NgbSlideEventSource = NgbSlideEventSource;\n\n private _destroy$ = new Subject();\n private _interval$ = new BehaviorSubject(0);\n private _mouseHover$ = new BehaviorSubject(false);\n private _pauseOnHover$ = new BehaviorSubject(false);\n private _pause$ = new BehaviorSubject(false);\n private _wrap$ = new BehaviorSubject(false);\n\n /**\n * The slide id that should be displayed **initially**.\n *\n * For subsequent interactions use methods `select()`, `next()`, etc. and the `(slide)` output.\n */\n @Input() activeId: string;\n\n /**\n * Time in milliseconds before the next slide is shown.\n */\n @Input()\n set interval(value: number) {\n this._interval$.next(value);\n }\n\n get interval() { return this._interval$.value; }\n\n /**\n * If `true`, will 'wrap' the carousel by switching from the last slide back to the first.\n */\n @Input()\n set wrap(value: boolean) {\n this._wrap$.next(value);\n }\n\n get wrap() { return this._wrap$.value; }\n\n /**\n * If `true`, allows to interact with carousel using keyboard 'arrow left' and 'arrow right'.\n */\n @Input() keyboard: boolean;\n\n /**\n * If `true`, will pause slide switching when mouse cursor hovers the slide.\n *\n * @since 2.2.0\n */\n @Input()\n set pauseOnHover(value: boolean) {\n this._pauseOnHover$.next(value);\n }\n\n get pauseOnHover() { return this._pauseOnHover$.value; }\n\n /**\n * If `true`, 'previous' and 'next' navigation arrows will be visible on the slide.\n *\n * @since 2.2.0\n */\n @Input() showNavigationArrows: boolean;\n\n /**\n * If `true`, navigation indicators at the bottom of the slide will be visible.\n *\n * @since 2.2.0\n */\n @Input() showNavigationIndicators: boolean;\n\n /**\n * An event emitted right after the slide transition is completed.\n *\n * See [`NgbSlideEvent`](#/components/carousel/api#NgbSlideEvent) for payload details.\n */\n @Output() slide = new EventEmitter();\n\n constructor(\n config: NgbCarouselConfig, @Inject(PLATFORM_ID) private _platformId, private _ngZone: NgZone,\n private _cd: ChangeDetectorRef) {\n this.interval = config.interval;\n this.wrap = config.wrap;\n this.keyboard = config.keyboard;\n this.pauseOnHover = config.pauseOnHover;\n this.showNavigationArrows = config.showNavigationArrows;\n this.showNavigationIndicators = config.showNavigationIndicators;\n }\n\n @HostListener('mouseenter')\n mouseEnter() {\n this._mouseHover$.next(true);\n }\n\n @HostListener('mouseleave')\n mouseLeave() {\n this._mouseHover$.next(false);\n }\n\n ngAfterContentInit() {\n // setInterval() doesn't play well with SSR and protractor,\n // so we should run it in the browser and outside Angular\n if (isPlatformBrowser(this._platformId)) {\n this._ngZone.runOutsideAngular(() => {\n const hasNextSlide$ = combineLatest(\n this.slide.pipe(map(slideEvent => slideEvent.current), startWith(this.activeId)),\n this._wrap$, this.slides.changes.pipe(startWith(null)))\n .pipe(\n map(([currentSlideId, wrap]) => {\n const slideArr = this.slides.toArray();\n const currentSlideIdx = this._getSlideIdxById(currentSlideId);\n return wrap ? slideArr.length > 1 : currentSlideIdx < slideArr.length - 1;\n }),\n distinctUntilChanged());\n combineLatest(this._pause$, this._pauseOnHover$, this._mouseHover$, this._interval$, hasNextSlide$)\n .pipe(\n map(([pause, pauseOnHover, mouseHover, interval, hasNextSlide]) =>\n ((pause || (pauseOnHover && mouseHover) || !hasNextSlide) ? 0 : interval)),\n\n distinctUntilChanged(), switchMap(interval => interval > 0 ? timer(interval, interval) : NEVER),\n takeUntil(this._destroy$))\n .subscribe(() => this._ngZone.run(() => this.next(NgbSlideEventSource.TIMER)));\n });\n }\n\n this.slides.changes.pipe(takeUntil(this._destroy$)).subscribe(() => this._cd.markForCheck());\n }\n\n ngAfterContentChecked() {\n let activeSlide = this._getSlideById(this.activeId);\n this.activeId = activeSlide ? activeSlide.id : (this.slides.length ? this.slides.first.id : null);\n }\n\n ngOnDestroy() { this._destroy$.next(); }\n\n /**\n * Navigates to a slide with the specified identifier.\n */\n select(slideId: string, source?: NgbSlideEventSource) {\n this._cycleToSelected(slideId, this._getSlideEventDirection(this.activeId, slideId), source);\n }\n\n /**\n * Navigates to the previous slide.\n */\n prev(source?: NgbSlideEventSource) {\n this._cycleToSelected(this._getPrevSlide(this.activeId), NgbSlideEventDirection.RIGHT, source);\n }\n\n /**\n * Navigates to the next slide.\n */\n next(source?: NgbSlideEventSource) {\n this._cycleToSelected(this._getNextSlide(this.activeId), NgbSlideEventDirection.LEFT, source);\n }\n\n /**\n * Pauses cycling through the slides.\n */\n pause() { this._pause$.next(true); }\n\n /**\n * Restarts cycling through the slides from left to right.\n */\n cycle() { this._pause$.next(false); }\n\n private _cycleToSelected(slideIdx: string, direction: NgbSlideEventDirection, source?: NgbSlideEventSource) {\n let selectedSlide = this._getSlideById(slideIdx);\n if (selectedSlide && selectedSlide.id !== this.activeId) {\n this.slide.emit(\n {prev: this.activeId, current: selectedSlide.id, direction: direction, paused: this._pause$.value, source});\n this.activeId = selectedSlide.id;\n }\n\n // we get here after the interval fires or any external API call like next(), prev() or select()\n this._cd.markForCheck();\n }\n\n private _getSlideEventDirection(currentActiveSlideId: string, nextActiveSlideId: string): NgbSlideEventDirection {\n const currentActiveSlideIdx = this._getSlideIdxById(currentActiveSlideId);\n const nextActiveSlideIdx = this._getSlideIdxById(nextActiveSlideId);\n\n return currentActiveSlideIdx > nextActiveSlideIdx ? NgbSlideEventDirection.RIGHT : NgbSlideEventDirection.LEFT;\n }\n\n private _getSlideById(slideId: string): NgbSlide { return this.slides.find(slide => slide.id === slideId); }\n\n private _getSlideIdxById(slideId: string): number {\n return this.slides.toArray().indexOf(this._getSlideById(slideId));\n }\n\n private _getNextSlide(currentSlideId: string): string {\n const slideArr = this.slides.toArray();\n const currentSlideIdx = this._getSlideIdxById(currentSlideId);\n const isLastSlide = currentSlideIdx === slideArr.length - 1;\n\n return isLastSlide ? (this.wrap ? slideArr[0].id : slideArr[slideArr.length - 1].id) :\n slideArr[currentSlideIdx + 1].id;\n }\n\n private _getPrevSlide(currentSlideId: string): string {\n const slideArr = this.slides.toArray();\n const currentSlideIdx = this._getSlideIdxById(currentSlideId);\n const isFirstSlide = currentSlideIdx === 0;\n\n return isFirstSlide ? (this.wrap ? slideArr[slideArr.length - 1].id : slideArr[0].id) :\n slideArr[currentSlideIdx - 1].id;\n }\n}\n\n/**\n * A slide change event emitted right after the slide transition is completed.\n */\nexport interface NgbSlideEvent {\n /**\n * The previous slide id.\n */\n prev: string;\n\n /**\n * The current slide id.\n */\n current: string;\n\n /**\n * The slide event direction.\n *\n * Possible values are `'left' | 'right'`.\n */\n direction: NgbSlideEventDirection;\n\n /**\n * Whether the pause() method was called (and no cycle() call was done afterwards).\n *\n * @since 5.1.0\n */\n paused: boolean;\n\n /**\n * Source triggering the slide change event.\n *\n * Possible values are `'timer' | 'arrowLeft' | 'arrowRight' | 'indicator'`\n *\n * @since 5.1.0\n */\n source?: NgbSlideEventSource;\n}\n\n/**\n * Defines the carousel slide transition direction.\n */\nexport enum NgbSlideEventDirection {\n LEFT = 'left',\n RIGHT = 'right'\n}\n\nexport enum NgbSlideEventSource {\n TIMER = 'timer',\n ARROW_LEFT = 'arrowLeft',\n ARROW_RIGHT = 'arrowRight',\n INDICATOR = 'indicator'\n}\n\nexport const NGB_CAROUSEL_DIRECTIVES = [NgbCarousel, NgbSlide];\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\nimport {NGB_CAROUSEL_DIRECTIVES} from './carousel';\n\nexport {NgbCarousel, NgbSlide, NgbSlideEvent, NgbSlideEventDirection, NgbSlideEventSource} from './carousel';\nexport {NgbCarouselConfig} from './carousel-config';\n\n@NgModule({declarations: NGB_CAROUSEL_DIRECTIVES, exports: NGB_CAROUSEL_DIRECTIVES, imports: [CommonModule]})\nexport class NgbCarouselModule {\n}\n","import {Directive, Input} from '@angular/core';\n\n/**\n * A directive to provide a simple way of hiding and showing elements on the page.\n */\n@Directive({\n selector: '[ngbCollapse]',\n exportAs: 'ngbCollapse',\n host: {'[class.collapse]': 'true', '[class.show]': '!collapsed'}\n})\nexport class NgbCollapse {\n /**\n * If `true`, will collapse the element or show it otherwise.\n */\n @Input('ngbCollapse') collapsed = false;\n}\n","import {NgModule} from '@angular/core';\nimport {NgbCollapse} from './collapse';\n\nexport {NgbCollapse} from './collapse';\n\n@NgModule({declarations: [NgbCollapse], exports: [NgbCollapse]})\nexport class NgbCollapseModule {\n}\n","import {NgbDateStruct} from './ngb-date-struct';\nimport {isInteger} from '../util/util';\n\n/**\n * A simple class that represents a date that datepicker also uses internally.\n *\n * It is the implementation of the `NgbDateStruct` interface that adds some convenience methods,\n * like `.equals()`, `.before()`, etc.\n *\n * All datepicker APIs consume `NgbDateStruct`, but return `NgbDate`.\n *\n * In many cases it is simpler to manipulate these objects together with\n * [`NgbCalendar`](#/components/datepicker/api#NgbCalendar) than native JS Dates.\n *\n * See the [date format overview](#/components/datepicker/overview#date-model) for more details.\n *\n * @since 3.0.0\n */\nexport class NgbDate implements NgbDateStruct {\n /**\n * The year, for example 2016\n */\n year: number;\n\n /**\n * The month, for example 1=Jan ... 12=Dec as in ISO 8601\n */\n month: number;\n\n /**\n * The day of month, starting with 1\n */\n day: number;\n\n /**\n * A **static method** that creates a new date object from the `NgbDateStruct`,\n *\n * ex. `NgbDate.from({year: 2000, month: 5, day: 1})`.\n *\n * If the `date` is already of `NgbDate` type, the method will return the same object.\n */\n static from(date: NgbDateStruct): NgbDate {\n if (date instanceof NgbDate) {\n return date;\n }\n return date ? new NgbDate(date.year, date.month, date.day) : null;\n }\n\n constructor(year: number, month: number, day: number) {\n this.year = isInteger(year) ? year : null;\n this.month = isInteger(month) ? month : null;\n this.day = isInteger(day) ? day : null;\n }\n\n /**\n * Checks if the current date is equal to another date.\n */\n equals(other: NgbDateStruct): boolean {\n return other && this.year === other.year && this.month === other.month && this.day === other.day;\n }\n\n /**\n * Checks if the current date is before another date.\n */\n before(other: NgbDateStruct): boolean {\n if (!other) {\n return false;\n }\n\n if (this.year === other.year) {\n if (this.month === other.month) {\n return this.day === other.day ? false : this.day < other.day;\n } else {\n return this.month < other.month;\n }\n } else {\n return this.year < other.year;\n }\n }\n\n /**\n * Checks if the current date is after another date.\n */\n after(other: NgbDateStruct): boolean {\n if (!other) {\n return false;\n }\n if (this.year === other.year) {\n if (this.month === other.month) {\n return this.day === other.day ? false : this.day > other.day;\n } else {\n return this.month > other.month;\n }\n } else {\n return this.year > other.year;\n }\n }\n}\n","import {NgbDate} from './ngb-date';\nimport {Injectable} from '@angular/core';\nimport {isInteger} from '../util/util';\n\nexport function fromJSDate(jsDate: Date) {\n return new NgbDate(jsDate.getFullYear(), jsDate.getMonth() + 1, jsDate.getDate());\n}\nexport function toJSDate(date: NgbDate) {\n const jsDate = new Date(date.year, date.month - 1, date.day, 12);\n // this is done avoid 30 -> 1930 conversion\n if (!isNaN(jsDate.getTime())) {\n jsDate.setFullYear(date.year);\n }\n return jsDate;\n}\n\nexport type NgbPeriod = 'y' | 'm' | 'd';\n\nexport function NGB_DATEPICKER_CALENDAR_FACTORY() {\n return new NgbCalendarGregorian();\n}\n\n/**\n * A service that represents the calendar used by the datepicker.\n *\n * The default implementation uses the Gregorian calendar. You can inject it in your own\n * implementations if necessary to simplify `NgbDate` calculations.\n */\n@Injectable({providedIn: 'root', useFactory: NGB_DATEPICKER_CALENDAR_FACTORY})\nexport abstract class NgbCalendar {\n /**\n * Returns the number of days per week.\n */\n abstract getDaysPerWeek(): number;\n\n /**\n * Returns an array of months per year.\n *\n * With default calendar we use ISO 8601 and return [1, 2, ..., 12];\n */\n abstract getMonths(year?: number): number[];\n\n /**\n * Returns the number of weeks per month.\n */\n abstract getWeeksPerMonth(): number;\n\n /**\n * Returns the weekday number for a given day.\n *\n * With the default calendar we use ISO 8601: 'weekday' is 1=Mon ... 7=Sun\n */\n abstract getWeekday(date: NgbDate): number;\n\n /**\n * Adds a number of years, months or days to a given date.\n *\n * * `period` can be `y`, `m` or `d` and defaults to day.\n * * `number` defaults to 1.\n *\n * Always returns a new date.\n */\n abstract getNext(date: NgbDate, period?: NgbPeriod, number?: number): NgbDate;\n\n /**\n * Subtracts a number of years, months or days from a given date.\n *\n * * `period` can be `y`, `m` or `d` and defaults to day.\n * * `number` defaults to 1.\n *\n * Always returns a new date.\n */\n abstract getPrev(date: NgbDate, period?: NgbPeriod, number?: number): NgbDate;\n\n /**\n * Returns the week number for a given week.\n */\n abstract getWeekNumber(week: NgbDate[], firstDayOfWeek: number): number;\n\n /**\n * Returns the today's date.\n */\n abstract getToday(): NgbDate;\n\n /**\n * Checks if a date is valid in the current calendar.\n */\n abstract isValid(date: NgbDate): boolean;\n}\n\n@Injectable()\nexport class NgbCalendarGregorian extends NgbCalendar {\n getDaysPerWeek() { return 7; }\n\n getMonths() { return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; }\n\n getWeeksPerMonth() { return 6; }\n\n getNext(date: NgbDate, period: NgbPeriod = 'd', number = 1) {\n let jsDate = toJSDate(date);\n\n switch (period) {\n case 'y':\n return new NgbDate(date.year + number, 1, 1);\n case 'm':\n jsDate = new Date(date.year, date.month + number - 1, 1, 12);\n break;\n case 'd':\n jsDate.setDate(jsDate.getDate() + number);\n break;\n default:\n return date;\n }\n\n return fromJSDate(jsDate);\n }\n\n getPrev(date: NgbDate, period: NgbPeriod = 'd', number = 1) { return this.getNext(date, period, -number); }\n\n getWeekday(date: NgbDate) {\n let jsDate = toJSDate(date);\n let day = jsDate.getDay();\n // in JS Date Sun=0, in ISO 8601 Sun=7\n return day === 0 ? 7 : day;\n }\n\n getWeekNumber(week: NgbDate[], firstDayOfWeek: number) {\n // in JS Date Sun=0, in ISO 8601 Sun=7\n if (firstDayOfWeek === 7) {\n firstDayOfWeek = 0;\n }\n\n const thursdayIndex = (4 + 7 - firstDayOfWeek) % 7;\n let date = week[thursdayIndex];\n\n const jsDate = toJSDate(date);\n jsDate.setDate(jsDate.getDate() + 4 - (jsDate.getDay() || 7)); // Thursday\n const time = jsDate.getTime();\n jsDate.setMonth(0); // Compare with Jan 1\n jsDate.setDate(1);\n return Math.floor(Math.round((time - jsDate.getTime()) / 86400000) / 7) + 1;\n }\n\n getToday(): NgbDate { return fromJSDate(new Date()); }\n\n isValid(date: NgbDate): boolean {\n if (!date || !isInteger(date.year) || !isInteger(date.month) || !isInteger(date.day)) {\n return false;\n }\n\n // year 0 doesn't exist in Gregorian calendar\n if (date.year === 0) {\n return false;\n }\n\n const jsDate = toJSDate(date);\n\n return !isNaN(jsDate.getTime()) && jsDate.getFullYear() === date.year && jsDate.getMonth() + 1 === date.month &&\n jsDate.getDate() === date.day;\n }\n}\n","import {NgbDate} from './ngb-date';\nimport {DatepickerViewModel, DayViewModel, MonthViewModel} from './datepicker-view-model';\nimport {NgbCalendar} from './ngb-calendar';\nimport {isDefined} from '../util/util';\nimport {NgbDatepickerI18n} from './datepicker-i18n';\n\nexport function isChangedDate(prev: NgbDate, next: NgbDate) {\n return !dateComparator(prev, next);\n}\n\nexport function isChangedMonth(prev: NgbDate, next: NgbDate) {\n return !prev && !next ? false : !prev || !next ? true : prev.year !== next.year || prev.month !== next.month;\n}\n\nexport function dateComparator(prev: NgbDate, next: NgbDate) {\n return (!prev && !next) || (!!prev && !!next && prev.equals(next));\n}\n\nexport function checkMinBeforeMax(minDate: NgbDate, maxDate: NgbDate) {\n if (maxDate && minDate && maxDate.before(minDate)) {\n throw new Error(`'maxDate' ${maxDate} should be greater than 'minDate' ${minDate}`);\n }\n}\n\nexport function checkDateInRange(date: NgbDate, minDate: NgbDate, maxDate: NgbDate): NgbDate {\n if (date && minDate && date.before(minDate)) {\n return minDate;\n }\n if (date && maxDate && date.after(maxDate)) {\n return maxDate;\n }\n\n return date;\n}\n\nexport function isDateSelectable(date: NgbDate, state: DatepickerViewModel) {\n const {minDate, maxDate, disabled, markDisabled} = state;\n // clang-format off\n return !(\n !isDefined(date) ||\n disabled ||\n (markDisabled && markDisabled(date, {year: date.year, month: date.month})) ||\n (minDate && date.before(minDate)) ||\n (maxDate && date.after(maxDate))\n );\n // clang-format on\n}\n\nexport function generateSelectBoxMonths(calendar: NgbCalendar, date: NgbDate, minDate: NgbDate, maxDate: NgbDate) {\n if (!date) {\n return [];\n }\n\n let months = calendar.getMonths(date.year);\n\n if (minDate && date.year === minDate.year) {\n const index = months.findIndex(month => month === minDate.month);\n months = months.slice(index);\n }\n\n if (maxDate && date.year === maxDate.year) {\n const index = months.findIndex(month => month === maxDate.month);\n months = months.slice(0, index + 1);\n }\n\n return months;\n}\n\nexport function generateSelectBoxYears(date: NgbDate, minDate: NgbDate, maxDate: NgbDate) {\n if (!date) {\n return [];\n }\n\n const start = minDate && minDate.year || date.year - 10;\n const end = maxDate && maxDate.year || date.year + 10;\n\n return Array.from({length: end - start + 1}, (e, i) => start + i);\n}\n\nexport function nextMonthDisabled(calendar: NgbCalendar, date: NgbDate, maxDate: NgbDate) {\n return maxDate && calendar.getNext(date, 'm').after(maxDate);\n}\n\nexport function prevMonthDisabled(calendar: NgbCalendar, date: NgbDate, minDate: NgbDate) {\n const prevDate = calendar.getPrev(date, 'm');\n return minDate && (prevDate.year === minDate.year && prevDate.month < minDate.month ||\n prevDate.year < minDate.year && minDate.month === 1);\n}\n\nexport function buildMonths(\n calendar: NgbCalendar, date: NgbDate, state: DatepickerViewModel, i18n: NgbDatepickerI18n,\n force: boolean): MonthViewModel[] {\n const {displayMonths, months} = state;\n // move old months to a temporary array\n const monthsToReuse = months.splice(0, months.length);\n\n // generate new first dates, nullify or reuse months\n const firstDates = Array.from({length: displayMonths}, (_, i) => {\n const firstDate = calendar.getNext(date, 'm', i);\n months[i] = null;\n\n if (!force) {\n const reusedIndex = monthsToReuse.findIndex(month => month.firstDate.equals(firstDate));\n // move reused month back to months\n if (reusedIndex !== -1) {\n months[i] = monthsToReuse.splice(reusedIndex, 1)[0];\n }\n }\n\n return firstDate;\n });\n\n // rebuild nullified months\n firstDates.forEach((firstDate, i) => {\n if (months[i] === null) {\n months[i] = buildMonth(calendar, firstDate, state, i18n, monthsToReuse.shift() || {} as MonthViewModel);\n }\n });\n\n return months;\n}\n\nexport function buildMonth(\n calendar: NgbCalendar, date: NgbDate, state: DatepickerViewModel, i18n: NgbDatepickerI18n,\n month: MonthViewModel = {} as MonthViewModel): MonthViewModel {\n const {dayTemplateData, minDate, maxDate, firstDayOfWeek, markDisabled, outsideDays} = state;\n const calendarToday = calendar.getToday();\n\n month.firstDate = null;\n month.lastDate = null;\n month.number = date.month;\n month.year = date.year;\n month.weeks = month.weeks || [];\n month.weekdays = month.weekdays || [];\n\n date = getFirstViewDate(calendar, date, firstDayOfWeek);\n\n // month has weeks\n for (let week = 0; week < calendar.getWeeksPerMonth(); week++) {\n let weekObject = month.weeks[week];\n if (!weekObject) {\n weekObject = month.weeks[week] = {number: 0, days: [], collapsed: true};\n }\n const days = weekObject.days;\n\n // week has days\n for (let day = 0; day < calendar.getDaysPerWeek(); day++) {\n if (week === 0) {\n month.weekdays[day] = calendar.getWeekday(date);\n }\n\n const newDate = new NgbDate(date.year, date.month, date.day);\n const nextDate = calendar.getNext(newDate);\n\n const ariaLabel = i18n.getDayAriaLabel(newDate);\n\n // marking date as disabled\n let disabled = !!((minDate && newDate.before(minDate)) || (maxDate && newDate.after(maxDate)));\n if (!disabled && markDisabled) {\n disabled = markDisabled(newDate, {month: month.number, year: month.year});\n }\n\n // today\n let today = newDate.equals(calendarToday);\n\n // adding user-provided data to the context\n let contextUserData =\n dayTemplateData ? dayTemplateData(newDate, {month: month.number, year: month.year}) : undefined;\n\n // saving first date of the month\n if (month.firstDate === null && newDate.month === month.number) {\n month.firstDate = newDate;\n }\n\n // saving last date of the month\n if (newDate.month === month.number && nextDate.month !== month.number) {\n month.lastDate = newDate;\n }\n\n let dayObject = days[day];\n if (!dayObject) {\n dayObject = days[day] = {} as DayViewModel;\n }\n dayObject.date = newDate;\n dayObject.context = Object.assign(dayObject.context || {}, {\n $implicit: newDate,\n date: newDate,\n data: contextUserData,\n currentMonth: month.number, disabled,\n focused: false,\n selected: false, today\n });\n dayObject.tabindex = -1;\n dayObject.ariaLabel = ariaLabel;\n dayObject.hidden = false;\n\n date = nextDate;\n }\n\n weekObject.number = calendar.getWeekNumber(days.map(day => day.date), firstDayOfWeek);\n\n // marking week as collapsed\n weekObject.collapsed = outsideDays === 'collapsed' && days[0].date.month !== month.number &&\n days[days.length - 1].date.month !== month.number;\n }\n\n return month;\n}\n\nexport function getFirstViewDate(calendar: NgbCalendar, date: NgbDate, firstDayOfWeek: number): NgbDate {\n const daysPerWeek = calendar.getDaysPerWeek();\n const firstMonthDate = new NgbDate(date.year, date.month, 1);\n const dayOfWeek = calendar.getWeekday(firstMonthDate) % daysPerWeek;\n return calendar.getPrev(firstMonthDate, 'd', (daysPerWeek + dayOfWeek - firstDayOfWeek) % daysPerWeek);\n}\n","import {Inject, Injectable, LOCALE_ID} from '@angular/core';\nimport {FormStyle, getLocaleDayNames, getLocaleMonthNames, TranslationWidth, formatDate} from '@angular/common';\nimport {NgbDateStruct} from './ngb-date-struct';\n\nexport function NGB_DATEPICKER_18N_FACTORY(locale) {\n return new NgbDatepickerI18nDefault(locale);\n}\n\n/**\n * A service supplying i18n data to the datepicker component.\n *\n * The default implementation of this service uses the Angular locale and registered locale data for\n * weekdays and month names (as explained in the Angular i18n guide).\n *\n * It also provides a way to i18n data that depends on calendar calculations, like aria labels, day, week and year\n * numerals. For other static labels the datepicker uses the default Angular i18n.\n *\n * See the [i18n demo](#/components/datepicker/examples#i18n) and\n * [Hebrew calendar demo](#/components/datepicker/calendars#hebrew) on how to extend this class and define\n * a custom provider for i18n.\n */\n@Injectable({providedIn: 'root', useFactory: NGB_DATEPICKER_18N_FACTORY, deps: [LOCALE_ID]})\nexport abstract class NgbDatepickerI18n {\n /**\n * Returns the short weekday name to display in the heading of the month view.\n *\n * With default calendar we use ISO 8601: 'weekday' is 1=Mon ... 7=Sun.\n */\n abstract getWeekdayShortName(weekday: number): string;\n\n /**\n * Returns the short month name to display in the date picker navigation.\n *\n * With default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec.\n */\n abstract getMonthShortName(month: number, year?: number): string;\n\n /**\n * Returns the full month name to display in the date picker navigation.\n *\n * With default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec.\n */\n abstract getMonthFullName(month: number, year?: number): string;\n\n /**\n * Returns the value of the `aria-label` attribute for a specific date.\n *\n * @since 2.0.0\n */\n abstract getDayAriaLabel(date: NgbDateStruct): string;\n\n /**\n * Returns the textual representation of a day that is rendered in a day cell.\n *\n * @since 3.0.0\n */\n getDayNumerals(date: NgbDateStruct): string { return `${date.day}`; }\n\n /**\n * Returns the textual representation of a week number rendered by datepicker.\n *\n * @since 3.0.0\n */\n getWeekNumerals(weekNumber: number): string { return `${weekNumber}`; }\n\n /**\n * Returns the textual representation of a year that is rendered in the datepicker year select box.\n *\n * @since 3.0.0\n */\n getYearNumerals(year: number): string { return `${year}`; }\n}\n\n@Injectable()\nexport class NgbDatepickerI18nDefault extends NgbDatepickerI18n {\n private _weekdaysShort: Array;\n private _monthsShort: Array;\n private _monthsFull: Array;\n\n constructor(@Inject(LOCALE_ID) private _locale: string) {\n super();\n\n const weekdaysStartingOnSunday = getLocaleDayNames(_locale, FormStyle.Standalone, TranslationWidth.Short);\n this._weekdaysShort = weekdaysStartingOnSunday.map((day, index) => weekdaysStartingOnSunday[(index + 1) % 7]);\n\n this._monthsShort = getLocaleMonthNames(_locale, FormStyle.Standalone, TranslationWidth.Abbreviated);\n this._monthsFull = getLocaleMonthNames(_locale, FormStyle.Standalone, TranslationWidth.Wide);\n }\n\n getWeekdayShortName(weekday: number): string { return this._weekdaysShort[weekday - 1]; }\n\n getMonthShortName(month: number): string { return this._monthsShort[month - 1]; }\n\n getMonthFullName(month: number): string { return this._monthsFull[month - 1]; }\n\n getDayAriaLabel(date: NgbDateStruct): string {\n const jsDate = new Date(date.year, date.month - 1, date.day);\n return formatDate(jsDate, 'fullDate', this._locale);\n }\n}\n","import {NgbCalendar, NgbPeriod} from './ngb-calendar';\nimport {NgbDate} from './ngb-date';\nimport {NgbDateStruct} from './ngb-date-struct';\nimport {DatepickerViewModel, NgbDayTemplateData, NgbMarkDisabled} from './datepicker-view-model';\nimport {Injectable} from '@angular/core';\nimport {isInteger, toInteger} from '../util/util';\nimport {Observable, Subject} from 'rxjs';\nimport {\n buildMonths,\n checkDateInRange,\n checkMinBeforeMax,\n isChangedDate,\n isChangedMonth,\n isDateSelectable,\n generateSelectBoxYears,\n generateSelectBoxMonths,\n prevMonthDisabled,\n nextMonthDisabled\n} from './datepicker-tools';\n\nimport {filter} from 'rxjs/operators';\nimport {NgbDatepickerI18n} from './datepicker-i18n';\n\n@Injectable()\nexport class NgbDatepickerService {\n private _model$ = new Subject();\n\n private _select$ = new Subject();\n\n private _state: DatepickerViewModel = {\n disabled: false,\n displayMonths: 1,\n firstDayOfWeek: 1,\n focusVisible: false,\n months: [],\n navigation: 'select',\n outsideDays: 'visible',\n prevDisabled: false,\n nextDisabled: false,\n selectBoxes: {years: [], months: []},\n selectedDate: null\n };\n\n get model$(): Observable { return this._model$.pipe(filter(model => model.months.length > 0)); }\n\n get select$(): Observable { return this._select$.pipe(filter(date => date !== null)); }\n\n set dayTemplateData(dayTemplateData: NgbDayTemplateData) {\n if (this._state.dayTemplateData !== dayTemplateData) {\n this._nextState({dayTemplateData});\n }\n }\n\n set disabled(disabled: boolean) {\n if (this._state.disabled !== disabled) {\n this._nextState({disabled});\n }\n }\n\n set displayMonths(displayMonths: number) {\n displayMonths = toInteger(displayMonths);\n if (isInteger(displayMonths) && displayMonths > 0 && this._state.displayMonths !== displayMonths) {\n this._nextState({displayMonths});\n }\n }\n\n set firstDayOfWeek(firstDayOfWeek: number) {\n firstDayOfWeek = toInteger(firstDayOfWeek);\n if (isInteger(firstDayOfWeek) && firstDayOfWeek >= 0 && this._state.firstDayOfWeek !== firstDayOfWeek) {\n this._nextState({firstDayOfWeek});\n }\n }\n\n set focusVisible(focusVisible: boolean) {\n if (this._state.focusVisible !== focusVisible && !this._state.disabled) {\n this._nextState({focusVisible});\n }\n }\n\n set maxDate(date: NgbDate) {\n const maxDate = this.toValidDate(date, null);\n if (isChangedDate(this._state.maxDate, maxDate)) {\n this._nextState({maxDate});\n }\n }\n\n set markDisabled(markDisabled: NgbMarkDisabled) {\n if (this._state.markDisabled !== markDisabled) {\n this._nextState({markDisabled});\n }\n }\n\n set minDate(date: NgbDate) {\n const minDate = this.toValidDate(date, null);\n if (isChangedDate(this._state.minDate, minDate)) {\n this._nextState({minDate});\n }\n }\n\n set navigation(navigation: 'select' | 'arrows' | 'none') {\n if (this._state.navigation !== navigation) {\n this._nextState({navigation});\n }\n }\n\n set outsideDays(outsideDays: 'visible' | 'collapsed' | 'hidden') {\n if (this._state.outsideDays !== outsideDays) {\n this._nextState({outsideDays});\n }\n }\n\n constructor(private _calendar: NgbCalendar, private _i18n: NgbDatepickerI18n) {}\n\n focus(date: NgbDate) {\n if (!this._state.disabled && this._calendar.isValid(date) && isChangedDate(this._state.focusDate, date)) {\n this._nextState({focusDate: date});\n }\n }\n\n focusMove(period?: NgbPeriod, number?: number) {\n this.focus(this._calendar.getNext(this._state.focusDate, period, number));\n }\n\n focusSelect() {\n if (isDateSelectable(this._state.focusDate, this._state)) {\n this.select(this._state.focusDate, {emitEvent: true});\n }\n }\n\n open(date: NgbDate) {\n const firstDate = this.toValidDate(date, this._calendar.getToday());\n if (!this._state.disabled && (!this._state.firstDate || isChangedMonth(this._state.firstDate, date))) {\n this._nextState({firstDate});\n }\n }\n\n select(date: NgbDate, options: {emitEvent?: boolean} = {}) {\n const selectedDate = this.toValidDate(date, null);\n if (!this._state.disabled) {\n if (isChangedDate(this._state.selectedDate, selectedDate)) {\n this._nextState({selectedDate});\n }\n\n if (options.emitEvent && isDateSelectable(selectedDate, this._state)) {\n this._select$.next(selectedDate);\n }\n }\n }\n\n toValidDate(date: NgbDateStruct, defaultValue?: NgbDate): NgbDate {\n const ngbDate = NgbDate.from(date);\n if (defaultValue === undefined) {\n defaultValue = this._calendar.getToday();\n }\n return this._calendar.isValid(ngbDate) ? ngbDate : defaultValue;\n }\n\n private _nextState(patch: Partial) {\n const newState = this._updateState(patch);\n this._patchContexts(newState);\n this._state = newState;\n this._model$.next(this._state);\n }\n\n private _patchContexts(state: DatepickerViewModel) {\n const {months, displayMonths, selectedDate, focusDate, focusVisible, disabled, outsideDays} = state;\n state.months.forEach(month => {\n month.weeks.forEach(week => {\n week.days.forEach(day => {\n\n // patch focus flag\n if (focusDate) {\n day.context.focused = focusDate.equals(day.date) && focusVisible;\n }\n\n // calculating tabindex\n day.tabindex = !disabled && day.date.equals(focusDate) && focusDate.month === month.number ? 0 : -1;\n\n // override context disabled\n if (disabled === true) {\n day.context.disabled = true;\n }\n\n // patch selection flag\n if (selectedDate !== undefined) {\n day.context.selected = selectedDate !== null && selectedDate.equals(day.date);\n }\n\n // visibility\n if (month.number !== day.date.month) {\n day.hidden = outsideDays === 'hidden' || outsideDays === 'collapsed' ||\n (displayMonths > 1 && day.date.after(months[0].firstDate) &&\n day.date.before(months[displayMonths - 1].lastDate));\n }\n });\n });\n });\n }\n\n private _updateState(patch: Partial): DatepickerViewModel {\n // patching fields\n const state = Object.assign({}, this._state, patch);\n\n let startDate = state.firstDate;\n\n // min/max dates changed\n if ('minDate' in patch || 'maxDate' in patch) {\n checkMinBeforeMax(state.minDate, state.maxDate);\n state.focusDate = checkDateInRange(state.focusDate, state.minDate, state.maxDate);\n state.firstDate = checkDateInRange(state.firstDate, state.minDate, state.maxDate);\n startDate = state.focusDate;\n }\n\n // disabled\n if ('disabled' in patch) {\n state.focusVisible = false;\n }\n\n // initial rebuild via 'select()'\n if ('selectedDate' in patch && this._state.months.length === 0) {\n startDate = state.selectedDate;\n }\n\n // terminate early if only focus visibility was changed\n if ('focusVisible' in patch) {\n return state;\n }\n\n // focus date changed\n if ('focusDate' in patch) {\n state.focusDate = checkDateInRange(state.focusDate, state.minDate, state.maxDate);\n startDate = state.focusDate;\n\n // nothing to rebuild if only focus changed and it is still visible\n if (state.months.length !== 0 && !state.focusDate.before(state.firstDate) &&\n !state.focusDate.after(state.lastDate)) {\n return state;\n }\n }\n\n // first date changed\n if ('firstDate' in patch) {\n state.firstDate = checkDateInRange(state.firstDate, state.minDate, state.maxDate);\n startDate = state.firstDate;\n }\n\n // rebuilding months\n if (startDate) {\n const forceRebuild = 'dayTemplateData' in patch || 'firstDayOfWeek' in patch || 'markDisabled' in patch ||\n 'minDate' in patch || 'maxDate' in patch || 'disabled' in patch || 'outsideDays' in patch;\n\n const months = buildMonths(this._calendar, startDate, state, this._i18n, forceRebuild);\n\n // updating months and boundary dates\n state.months = months;\n state.firstDate = months.length > 0 ? months[0].firstDate : undefined;\n state.lastDate = months.length > 0 ? months[months.length - 1].lastDate : undefined;\n\n // reset selected date if 'markDisabled' returns true\n if ('selectedDate' in patch && !isDateSelectable(state.selectedDate, state)) {\n state.selectedDate = null;\n }\n\n // adjusting focus after months were built\n if ('firstDate' in patch) {\n if (state.focusDate === undefined || state.focusDate.before(state.firstDate) ||\n state.focusDate.after(state.lastDate)) {\n state.focusDate = startDate;\n }\n }\n\n // adjusting months/years for the select box navigation\n const yearChanged = !this._state.firstDate || this._state.firstDate.year !== state.firstDate.year;\n const monthChanged = !this._state.firstDate || this._state.firstDate.month !== state.firstDate.month;\n if (state.navigation === 'select') {\n // years -> boundaries (min/max were changed)\n if ('minDate' in patch || 'maxDate' in patch || state.selectBoxes.years.length === 0 || yearChanged) {\n state.selectBoxes.years = generateSelectBoxYears(state.firstDate, state.minDate, state.maxDate);\n }\n\n // months -> when current year or boundaries change\n if ('minDate' in patch || 'maxDate' in patch || state.selectBoxes.months.length === 0 || yearChanged) {\n state.selectBoxes.months =\n generateSelectBoxMonths(this._calendar, state.firstDate, state.minDate, state.maxDate);\n }\n } else {\n state.selectBoxes = {years: [], months: []};\n }\n\n // updating navigation arrows -> boundaries change (min/max) or month/year changes\n if ((state.navigation === 'arrows' || state.navigation === 'select') &&\n (monthChanged || yearChanged || 'minDate' in patch || 'maxDate' in patch || 'disabled' in patch)) {\n state.prevDisabled = state.disabled || prevMonthDisabled(this._calendar, state.firstDate, state.minDate);\n state.nextDisabled = state.disabled || nextMonthDisabled(this._calendar, state.lastDate, state.maxDate);\n }\n }\n\n return state;\n }\n}\n","export enum Key {\n Tab = 9,\n Enter = 13,\n Escape = 27,\n Space = 32,\n PageUp = 33,\n PageDown = 34,\n End = 35,\n Home = 36,\n ArrowLeft = 37,\n ArrowUp = 38,\n ArrowRight = 39,\n ArrowDown = 40\n}\n","import {Injectable} from '@angular/core';\nimport {NgbDatepickerService} from './datepicker-service';\nimport {NgbCalendar} from './ngb-calendar';\nimport {Key} from '../util/key';\nimport {NgbDate} from './ngb-date';\n\n@Injectable()\nexport class NgbDatepickerKeyMapService {\n private _minDate: NgbDate;\n private _maxDate: NgbDate;\n private _firstViewDate: NgbDate;\n private _lastViewDate: NgbDate;\n\n constructor(private _service: NgbDatepickerService, private _calendar: NgbCalendar) {\n _service.model$.subscribe(model => {\n this._minDate = model.minDate;\n this._maxDate = model.maxDate;\n this._firstViewDate = model.firstDate;\n this._lastViewDate = model.lastDate;\n });\n }\n\n processKey(event: KeyboardEvent) {\n // tslint:disable-next-line:deprecation\n switch (event.which) {\n case Key.PageUp:\n this._service.focusMove(event.shiftKey ? 'y' : 'm', -1);\n break;\n case Key.PageDown:\n this._service.focusMove(event.shiftKey ? 'y' : 'm', 1);\n break;\n case Key.End:\n this._service.focus(event.shiftKey ? this._maxDate : this._lastViewDate);\n break;\n case Key.Home:\n this._service.focus(event.shiftKey ? this._minDate : this._firstViewDate);\n break;\n case Key.ArrowLeft:\n this._service.focusMove('d', -1);\n break;\n case Key.ArrowUp:\n this._service.focusMove('d', -this._calendar.getDaysPerWeek());\n break;\n case Key.ArrowRight:\n this._service.focusMove('d', 1);\n break;\n case Key.ArrowDown:\n this._service.focusMove('d', this._calendar.getDaysPerWeek());\n break;\n case Key.Enter:\n case Key.Space:\n this._service.focusSelect();\n break;\n default:\n return;\n }\n\n // note 'return' in default case\n event.preventDefault();\n event.stopPropagation();\n }\n}\n","import {NgbDate} from './ngb-date';\nimport {NgbDateStruct} from './ngb-date-struct';\nimport {DayTemplateContext} from './datepicker-day-template-context';\n\nexport type NgbMarkDisabled = (date: NgbDateStruct, current: {year: number, month: number}) => boolean;\nexport type NgbDayTemplateData = (date: NgbDateStruct, current: {year: number, month: number}) => any;\n\nexport type DayViewModel = {\n date: NgbDate,\n context: DayTemplateContext,\n tabindex: number,\n ariaLabel: string,\n hidden: boolean\n};\n\nexport type WeekViewModel = {\n number: number,\n days: DayViewModel[],\n collapsed: boolean\n};\n\nexport type MonthViewModel = {\n firstDate: NgbDate,\n lastDate: NgbDate,\n number: number,\n year: number,\n weeks: WeekViewModel[],\n weekdays: number[]\n};\n\n// clang-format off\nexport type DatepickerViewModel = {\n dayTemplateData?: NgbDayTemplateData,\n disabled: boolean,\n displayMonths: number,\n firstDate?: NgbDate,\n firstDayOfWeek: number,\n focusDate?: NgbDate,\n focusVisible: boolean,\n lastDate?: NgbDate,\n markDisabled?: NgbMarkDisabled,\n maxDate?: NgbDate,\n minDate?: NgbDate,\n months: MonthViewModel[],\n navigation: 'select' | 'arrows' | 'none',\n outsideDays: 'visible' | 'collapsed' | 'hidden',\n prevDisabled: boolean,\n nextDisabled: boolean,\n selectBoxes: {\n years: number[],\n months: number[]\n },\n selectedDate: NgbDate\n};\n// clang-format on\n\nexport enum NavigationEvent {\n PREV,\n NEXT\n}\n","import {Injectable, TemplateRef} from '@angular/core';\nimport {DayTemplateContext} from './datepicker-day-template-context';\nimport {NgbDateStruct} from './ngb-date-struct';\n\n/**\n * A configuration service for the [`NgbDatepicker`](#/components/datepicker/api#NgbDatepicker) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the datepickers used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbDatepickerConfig {\n dayTemplate: TemplateRef;\n dayTemplateData: (date: NgbDateStruct, current: {year: number, month: number}) => any;\n footerTemplate: TemplateRef;\n displayMonths = 1;\n firstDayOfWeek = 1;\n markDisabled: (date: NgbDateStruct, current: {year: number, month: number}) => boolean;\n minDate: NgbDateStruct;\n maxDate: NgbDateStruct;\n navigation: 'select' | 'arrows' | 'none' = 'select';\n outsideDays: 'visible' | 'collapsed' | 'hidden' = 'visible';\n showWeekdays = true;\n showWeekNumbers = false;\n startDate: {year: number, month: number};\n}\n","import {Injectable} from '@angular/core';\nimport {NgbDateStruct} from '../ngb-date-struct';\nimport {isInteger} from '../../util/util';\n\nexport function NGB_DATEPICKER_DATE_ADAPTER_FACTORY() {\n return new NgbDateStructAdapter();\n}\n\n/**\n * An abstract service that does the conversion between the internal datepicker `NgbDateStruct` model and\n * any provided user date model `D`, ex. a string, a native date, etc.\n *\n * The adapter is used **only** for conversion when binding datepicker to a form control,\n * ex. `[(ngModel)]=\"userDateModel\"`. Here `userDateModel` can be of any type.\n *\n * The default datepicker implementation assumes we use `NgbDateStruct` as a user model.\n *\n * See the [date format overview](#/components/datepicker/overview#date-model) for more details\n * and the [custom adapter demo](#/components/datepicker/examples#adapter) for an example.\n */\n@Injectable({providedIn: 'root', useFactory: NGB_DATEPICKER_DATE_ADAPTER_FACTORY})\nexport abstract class NgbDateAdapter {\n /**\n * Converts a user-model date of type `D` to an `NgbDateStruct` for internal use.\n */\n abstract fromModel(value: D): NgbDateStruct;\n\n /**\n * Converts an internal `NgbDateStruct` date to a user-model date of type `D`.\n */\n abstract toModel(date: NgbDateStruct): D;\n}\n\n@Injectable()\nexport class NgbDateStructAdapter extends NgbDateAdapter {\n /**\n * Converts a NgbDateStruct value into NgbDateStruct value\n */\n fromModel(date: NgbDateStruct): NgbDateStruct {\n return (date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day)) ?\n {year: date.year, month: date.month, day: date.day} :\n null;\n }\n\n /**\n * Converts a NgbDateStruct value into NgbDateStruct value\n */\n toModel(date: NgbDateStruct): NgbDateStruct {\n return (date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day)) ?\n {year: date.year, month: date.month, day: date.day} :\n null;\n }\n}\n","import {fromEvent, merge, Subject} from 'rxjs';\nimport {filter, take, takeUntil} from 'rxjs/operators';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {NgbCalendar} from './ngb-calendar';\nimport {NgbDate} from './ngb-date';\nimport {NgbDatepickerService} from './datepicker-service';\nimport {NgbDatepickerKeyMapService} from './datepicker-keymap-service';\nimport {DatepickerViewModel, NavigationEvent} from './datepicker-view-model';\nimport {DayTemplateContext} from './datepicker-day-template-context';\nimport {NgbDatepickerConfig} from './datepicker-config';\nimport {NgbDateAdapter} from './adapters/ngb-date-adapter';\nimport {NgbDateStruct} from './ngb-date-struct';\nimport {NgbDatepickerI18n} from './datepicker-i18n';\nimport {isChangedDate, isChangedMonth} from './datepicker-tools';\nimport {hasClassName} from '../util/util';\n\nconst NGB_DATEPICKER_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgbDatepicker),\n multi: true\n};\n\n/**\n * An event emitted right before the navigation happens and the month displayed by the datepicker changes.\n */\nexport interface NgbDatepickerNavigateEvent {\n /**\n * The currently displayed month.\n */\n current: {year: number, month: number};\n\n /**\n * The month we're navigating to.\n */\n next: {year: number, month: number};\n\n /**\n * Calling this function will prevent navigation from happening.\n *\n * @since 4.1.0\n */\n preventDefault: () => void;\n}\n\n/**\n * A highly configurable component that helps you with selecting calendar dates.\n *\n * `NgbDatepicker` is meant to be displayed inline on a page or put inside a popup.\n */\n@Component({\n exportAs: 'ngbDatepicker',\n selector: 'ngb-datepicker',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./datepicker.scss'],\n template: `\n \n
\n
\n
\n\n
\n \n \n
\n\n
\n \n
\n
1 && navigation === 'select')\"\n class=\"ngb-dp-month-name\">\n {{ i18n.getMonthFullName(month.number, month.year) }} {{ i18n.getYearNumerals(month.year) }}\n
\n \n \n
\n
\n
\n\n \n `,\n providers: [NGB_DATEPICKER_VALUE_ACCESSOR, NgbDatepickerService, NgbDatepickerKeyMapService]\n})\nexport class NgbDatepicker implements OnDestroy,\n OnChanges, OnInit, AfterViewInit, ControlValueAccessor {\n model: DatepickerViewModel;\n\n @ViewChild('months', {static: true}) private _monthsEl: ElementRef;\n private _controlValue: NgbDate;\n private _destroyed$ = new Subject();\n\n /**\n * The reference to a custom template for the day.\n *\n * Allows to completely override the way a day 'cell' in the calendar is displayed.\n *\n * See [`DayTemplateContext`](#/components/datepicker/api#DayTemplateContext) for the data you get inside.\n */\n @Input() dayTemplate: TemplateRef;\n\n /**\n * The callback to pass any arbitrary data to the template cell via the\n * [`DayTemplateContext`](#/components/datepicker/api#DayTemplateContext)'s `data` parameter.\n *\n * `current` is the month that is currently displayed by the datepicker.\n *\n * @since 3.3.0\n */\n @Input() dayTemplateData: (date: NgbDate, current: {year: number, month: number}) => any;\n\n /**\n * The number of months to display.\n */\n @Input() displayMonths: number;\n\n /**\n * The first day of the week.\n *\n * With default calendar we use ISO 8601: 'weekday' is 1=Mon ... 7=Sun.\n */\n @Input() firstDayOfWeek: number;\n\n /**\n * The reference to the custom template for the datepicker footer.\n *\n * @since 3.3.0\n */\n @Input() footerTemplate: TemplateRef;\n\n /**\n * The callback to mark some dates as disabled.\n *\n * It is called for each new date when navigating to a different month.\n *\n * `current` is the month that is currently displayed by the datepicker.\n */\n @Input() markDisabled: (date: NgbDate, current: {year: number, month: number}) => boolean;\n\n /**\n * The latest date that can be displayed or selected.\n *\n * If not provided, 'year' select box will display 10 years after the current month.\n */\n @Input() maxDate: NgbDateStruct;\n\n /**\n * The earliest date that can be displayed or selected.\n *\n * If not provided, 'year' select box will display 10 years before the current month.\n */\n @Input() minDate: NgbDateStruct;\n\n /**\n * Navigation type.\n *\n * * `\"select\"` - select boxes for month and navigation arrows\n * * `\"arrows\"` - only navigation arrows\n * * `\"none\"` - no navigation visible at all\n */\n @Input() navigation: 'select' | 'arrows' | 'none';\n\n /**\n * The way of displaying days that don't belong to the current month.\n *\n * * `\"visible\"` - days are visible\n * * `\"hidden\"` - days are hidden, white space preserved\n * * `\"collapsed\"` - days are collapsed, so the datepicker height might change between months\n *\n * For the 2+ months view, days in between months are never shown.\n */\n @Input() outsideDays: 'visible' | 'collapsed' | 'hidden';\n\n /**\n * If `true`, weekdays will be displayed.\n */\n @Input() showWeekdays: boolean;\n\n /**\n * If `true`, week numbers will be displayed.\n */\n @Input() showWeekNumbers: boolean;\n\n /**\n * The date to open calendar with.\n *\n * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec.\n * If nothing or invalid date is provided, calendar will open with current month.\n *\n * You could use `navigateTo(date)` method as an alternative.\n */\n @Input() startDate: {year: number, month: number, day?: number};\n\n /**\n * An event emitted right before the navigation happens and displayed month changes.\n *\n * See [`NgbDatepickerNavigateEvent`](#/components/datepicker/api#NgbDatepickerNavigateEvent) for the payload info.\n */\n @Output() navigate = new EventEmitter();\n\n /**\n * An event emitted when user selects a date using keyboard or mouse.\n *\n * The payload of the event is currently selected `NgbDate`.\n */\n @Output() select = new EventEmitter();\n\n onChange = (_: any) => {};\n onTouched = () => {};\n\n constructor(\n private _keyMapService: NgbDatepickerKeyMapService, public _service: NgbDatepickerService,\n private _calendar: NgbCalendar, public i18n: NgbDatepickerI18n, config: NgbDatepickerConfig,\n private _cd: ChangeDetectorRef, private _elementRef: ElementRef,\n private _ngbDateAdapter: NgbDateAdapter, private _ngZone: NgZone) {\n ['dayTemplate', 'dayTemplateData', 'displayMonths', 'firstDayOfWeek', 'footerTemplate', 'markDisabled', 'minDate',\n 'maxDate', 'navigation', 'outsideDays', 'showWeekdays', 'showWeekNumbers', 'startDate']\n .forEach(input => this[input] = config[input]);\n\n _service.select$.pipe(takeUntil(this._destroyed$)).subscribe(date => { this.select.emit(date); });\n\n _service.model$.pipe(takeUntil(this._destroyed$)).subscribe(model => {\n const newDate = model.firstDate;\n const oldDate = this.model ? this.model.firstDate : null;\n\n let navigationPrevented = false;\n // emitting navigation event if the first month changes\n if (!newDate.equals(oldDate)) {\n this.navigate.emit({\n current: oldDate ? {year: oldDate.year, month: oldDate.month} : null,\n next: {year: newDate.year, month: newDate.month},\n preventDefault: () => navigationPrevented = true\n });\n\n // can't prevent the very first navigation\n if (navigationPrevented && oldDate !== null) {\n this._service.open(oldDate);\n return;\n }\n }\n\n const newSelectedDate = model.selectedDate;\n const newFocusedDate = model.focusDate;\n const oldFocusedDate = this.model ? this.model.focusDate : null;\n\n this.model = model;\n\n // handling selection change\n if (isChangedDate(newSelectedDate, this._controlValue)) {\n this._controlValue = newSelectedDate;\n this.onTouched();\n this.onChange(this._ngbDateAdapter.toModel(newSelectedDate));\n }\n\n // handling focus change\n if (isChangedDate(newFocusedDate, oldFocusedDate) && oldFocusedDate && model.focusVisible) {\n this.focus();\n }\n\n _cd.markForCheck();\n });\n }\n\n focus() {\n this._ngZone.onStable.asObservable().pipe(take(1)).subscribe(() => {\n const elementToFocus =\n this._elementRef.nativeElement.querySelector('div.ngb-dp-day[tabindex=\"0\"]');\n if (elementToFocus) {\n elementToFocus.focus();\n }\n });\n }\n\n /**\n * Navigates to the provided date.\n *\n * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec.\n * If nothing or invalid date provided calendar will open current month.\n *\n * Use the `[startDate]` input as an alternative.\n */\n navigateTo(date?: {year: number, month: number, day?: number}) {\n this._service.open(NgbDate.from(date ? date.day ? date as NgbDateStruct : {...date, day: 1} : null));\n }\n\n ngAfterViewInit() {\n this._ngZone.runOutsideAngular(() => {\n const focusIns$ = fromEvent(this._monthsEl.nativeElement, 'focusin');\n const focusOuts$ = fromEvent(this._monthsEl.nativeElement, 'focusout');\n\n // we're changing 'focusVisible' only when entering or leaving months view\n // and ignoring all focus events where both 'target' and 'related' target are day cells\n merge(focusIns$, focusOuts$)\n .pipe(\n filter(\n ({target, relatedTarget}) =>\n !(hasClassName(target, 'ngb-dp-day') && hasClassName(relatedTarget, 'ngb-dp-day'))),\n takeUntil(this._destroyed$))\n .subscribe(({type}) => this._ngZone.run(() => this._service.focusVisible = type === 'focusin'));\n });\n }\n\n ngOnDestroy() { this._destroyed$.next(); }\n\n ngOnInit() {\n if (this.model === undefined) {\n ['dayTemplateData', 'displayMonths', 'markDisabled', 'firstDayOfWeek', 'navigation', 'minDate', 'maxDate',\n 'outsideDays']\n .forEach(input => this._service[input] = this[input]);\n this.navigateTo(this.startDate);\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n ['dayTemplateData', 'displayMonths', 'markDisabled', 'firstDayOfWeek', 'navigation', 'minDate', 'maxDate',\n 'outsideDays']\n .filter(input => input in changes)\n .forEach(input => this._service[input] = this[input]);\n\n if ('startDate' in changes) {\n const {currentValue, previousValue} = changes.startDate;\n if (isChangedMonth(previousValue, currentValue)) {\n this.navigateTo(this.startDate);\n }\n }\n }\n\n onDateSelect(date: NgbDate) {\n this._service.focus(date);\n this._service.select(date, {emitEvent: true});\n }\n\n onKeyDown(event: KeyboardEvent) { this._keyMapService.processKey(event); }\n\n onNavigateDateSelect(date: NgbDate) { this._service.open(date); }\n\n onNavigateEvent(event: NavigationEvent) {\n switch (event) {\n case NavigationEvent.PREV:\n this._service.open(this._calendar.getPrev(this.model.firstDate, 'm', 1));\n break;\n case NavigationEvent.NEXT:\n this._service.open(this._calendar.getNext(this.model.firstDate, 'm', 1));\n break;\n }\n }\n\n registerOnChange(fn: (value: any) => any): void { this.onChange = fn; }\n\n registerOnTouched(fn: () => any): void { this.onTouched = fn; }\n\n setDisabledState(isDisabled: boolean) { this._service.disabled = isDisabled; }\n\n writeValue(value) {\n this._controlValue = NgbDate.from(this._ngbDateAdapter.fromModel(value));\n this._service.select(this._controlValue);\n }\n}\n","import {Component, Input, TemplateRef, Output, EventEmitter, ViewEncapsulation} from '@angular/core';\nimport {MonthViewModel, DayViewModel} from './datepicker-view-model';\nimport {NgbDate} from './ngb-date';\nimport {NgbDatepickerI18n} from './datepicker-i18n';\nimport {DayTemplateContext} from './datepicker-day-template-context';\n\n@Component({\n selector: 'ngb-datepicker-month-view',\n host: {'role': 'grid'},\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./datepicker-month-view.scss'],\n template: `\n
\n
\n
\n {{ i18n.getWeekdayShortName(w) }}\n
\n
\n \n
\n
{{ i18n.getWeekNumerals(week.number) }}
\n
\n \n \n \n
\n
\n
\n `\n})\nexport class NgbDatepickerMonthView {\n @Input() dayTemplate: TemplateRef;\n @Input() month: MonthViewModel;\n @Input() showWeekdays;\n @Input() showWeekNumbers;\n\n @Output() select = new EventEmitter();\n\n constructor(public i18n: NgbDatepickerI18n) {}\n\n doSelect(day: DayViewModel) {\n if (!day.context.disabled && !day.hidden) {\n this.select.emit(day.date);\n }\n }\n}\n","import {Component, Input, Output, EventEmitter, ChangeDetectionStrategy, ViewEncapsulation} from '@angular/core';\nimport {NavigationEvent, MonthViewModel} from './datepicker-view-model';\nimport {NgbDate} from './ngb-date';\nimport {NgbDatepickerI18n} from './datepicker-i18n';\n\n@Component({\n selector: 'ngb-datepicker-navigation',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./datepicker-navigation.scss'],\n template: `\n
\n \n
\n \n \n\n \n
0\">
\n
\n {{ i18n.getMonthFullName(month.number, month.year) }} {{ i18n.getYearNumerals(month.year) }}\n
\n
\n
\n
\n \n
\n `\n})\nexport class NgbDatepickerNavigation {\n navigation = NavigationEvent;\n\n @Input() date: NgbDate;\n @Input() disabled: boolean;\n @Input() months: MonthViewModel[] = [];\n @Input() showSelect: boolean;\n @Input() prevDisabled: boolean;\n @Input() nextDisabled: boolean;\n @Input() selectBoxes: {years: number[], months: number[]};\n\n @Output() navigate = new EventEmitter();\n @Output() select = new EventEmitter();\n\n constructor(public i18n: NgbDatepickerI18n) {}\n}\n","import {NgZone} from '@angular/core';\nimport {fromEvent, Observable, race} from 'rxjs';\nimport {delay, filter, map, takeUntil, withLatestFrom} from 'rxjs/operators';\nimport {Key} from './key';\nimport {closest} from './util';\n\nconst isContainedIn = (element: HTMLElement, array?: HTMLElement[]) =>\n array ? array.some(item => item.contains(element)) : false;\n\nconst matchesSelectorIfAny = (element: HTMLElement, selector?: string) =>\n !selector || closest(element, selector) != null;\n\n// we'll have to use 'touch' events instead of 'mouse' events on iOS and add a more significant delay\n// to avoid re-opening when handling (click) on a toggling element\n// TODO: use proper Angular platform detection when NgbAutoClose becomes a service and we can inject PLATFORM_ID\nlet iOS = false;\nif (typeof navigator !== 'undefined') {\n iOS = !!navigator.userAgent && /iPad|iPhone|iPod/.test(navigator.userAgent);\n}\n\nexport function ngbAutoClose(\n zone: NgZone, document: any, type: boolean | 'inside' | 'outside', close: () => void, closed$: Observable,\n insideElements: HTMLElement[], ignoreElements?: HTMLElement[], insideSelector?: string) {\n // closing on ESC and outside clicks\n if (type) {\n zone.runOutsideAngular(() => {\n\n const shouldCloseOnClick = (event: MouseEvent | TouchEvent) => {\n const element = event.target as HTMLElement;\n if ((event instanceof MouseEvent && event.button === 2) || isContainedIn(element, ignoreElements)) {\n return false;\n }\n if (type === 'inside') {\n return isContainedIn(element, insideElements) && matchesSelectorIfAny(element, insideSelector);\n } else if (type === 'outside') {\n return !isContainedIn(element, insideElements);\n } else /* if (type === true) */ {\n return matchesSelectorIfAny(element, insideSelector) || !isContainedIn(element, insideElements);\n }\n };\n\n const escapes$ = fromEvent(document, 'keydown')\n .pipe(\n takeUntil(closed$),\n // tslint:disable-next-line:deprecation\n filter(e => e.which === Key.Escape));\n\n\n // we have to pre-calculate 'shouldCloseOnClick' on 'mousedown/touchstart',\n // because on 'mouseup/touchend' DOM nodes might be detached\n const mouseDowns$ = fromEvent(document, iOS ? 'touchstart' : 'mousedown')\n .pipe(map(shouldCloseOnClick), takeUntil(closed$));\n\n const closeableClicks$ = fromEvent(document, iOS ? 'touchend' : 'mouseup')\n .pipe(\n withLatestFrom(mouseDowns$), filter(([_, shouldClose]) => shouldClose),\n delay(iOS ? 16 : 0), takeUntil(closed$)) as Observable;\n\n\n race([escapes$, closeableClicks$]).subscribe(() => zone.run(close));\n });\n }\n}\n","import {fromEvent, Observable} from 'rxjs';\nimport {filter, map, takeUntil, withLatestFrom} from 'rxjs/operators';\n\nimport {Key} from '../util/key';\n\n\nconst FOCUSABLE_ELEMENTS_SELECTOR = [\n 'a[href]', 'button:not([disabled])', 'input:not([disabled]):not([type=\"hidden\"])', 'select:not([disabled])',\n 'textarea:not([disabled])', '[contenteditable]', '[tabindex]:not([tabindex=\"-1\"])'\n].join(', ');\n\n/**\n * Returns first and last focusable elements inside of a given element based on specific CSS selector\n */\nexport function getFocusableBoundaryElements(element: HTMLElement): HTMLElement[] {\n const list: HTMLElement[] =\n Array.from(element.querySelectorAll(FOCUSABLE_ELEMENTS_SELECTOR) as NodeListOf)\n .filter(el => el.tabIndex !== -1);\n return [list[0], list[list.length - 1]];\n}\n\n/**\n * Function that enforces browser focus to be trapped inside a DOM element.\n *\n * Works only for clicks inside the element and navigation with 'Tab', ignoring clicks outside of the element\n *\n * @param element The element around which focus will be trapped inside\n * @param stopFocusTrap$ The observable stream. When completed the focus trap will clean up listeners\n * and free internal resources\n * @param refocusOnClick Put the focus back to the last focused element whenever a click occurs on element (default to\n * false)\n */\nexport const ngbFocusTrap = (element: HTMLElement, stopFocusTrap$: Observable, refocusOnClick = false) => {\n // last focused element\n const lastFocusedElement$ =\n fromEvent(element, 'focusin').pipe(takeUntil(stopFocusTrap$), map(e => e.target));\n\n // 'tab' / 'shift+tab' stream\n fromEvent(element, 'keydown')\n .pipe(\n takeUntil(stopFocusTrap$),\n // tslint:disable:deprecation\n filter(e => e.which === Key.Tab),\n // tslint:enable:deprecation\n withLatestFrom(lastFocusedElement$))\n .subscribe(([tabEvent, focusedElement]) => {\n const[first, last] = getFocusableBoundaryElements(element);\n\n if ((focusedElement === first || focusedElement === element) && tabEvent.shiftKey) {\n last.focus();\n tabEvent.preventDefault();\n }\n\n if (focusedElement === last && !tabEvent.shiftKey) {\n first.focus();\n tabEvent.preventDefault();\n }\n });\n\n // inside click\n if (refocusOnClick) {\n fromEvent(element, 'click')\n .pipe(takeUntil(stopFocusTrap$), withLatestFrom(lastFocusedElement$), map(arr => arr[1] as HTMLElement))\n .subscribe(lastFocusedElement => lastFocusedElement.focus());\n }\n};\n","// previous version:\n// https://github.com/angular-ui/bootstrap/blob/07c31d0731f7cb068a1932b8e01d2312b796b4ec/src/position/position.js\nexport class Positioning {\n private getAllStyles(element: HTMLElement) { return window.getComputedStyle(element); }\n\n private getStyle(element: HTMLElement, prop: string): string { return this.getAllStyles(element)[prop]; }\n\n private isStaticPositioned(element: HTMLElement): boolean {\n return (this.getStyle(element, 'position') || 'static') === 'static';\n }\n\n private offsetParent(element: HTMLElement): HTMLElement {\n let offsetParentEl = element.offsetParent || document.documentElement;\n\n while (offsetParentEl && offsetParentEl !== document.documentElement && this.isStaticPositioned(offsetParentEl)) {\n offsetParentEl = offsetParentEl.offsetParent;\n }\n\n return offsetParentEl || document.documentElement;\n }\n\n position(element: HTMLElement, round = true): ClientRect {\n let elPosition: ClientRect;\n let parentOffset: ClientRect = {width: 0, height: 0, top: 0, bottom: 0, left: 0, right: 0};\n\n if (this.getStyle(element, 'position') === 'fixed') {\n elPosition = element.getBoundingClientRect();\n elPosition = {\n top: elPosition.top,\n bottom: elPosition.bottom,\n left: elPosition.left,\n right: elPosition.right,\n height: elPosition.height,\n width: elPosition.width\n };\n } else {\n const offsetParentEl = this.offsetParent(element);\n\n elPosition = this.offset(element, false);\n\n if (offsetParentEl !== document.documentElement) {\n parentOffset = this.offset(offsetParentEl, false);\n }\n\n parentOffset.top += offsetParentEl.clientTop;\n parentOffset.left += offsetParentEl.clientLeft;\n }\n\n elPosition.top -= parentOffset.top;\n elPosition.bottom -= parentOffset.top;\n elPosition.left -= parentOffset.left;\n elPosition.right -= parentOffset.left;\n\n if (round) {\n elPosition.top = Math.round(elPosition.top);\n elPosition.bottom = Math.round(elPosition.bottom);\n elPosition.left = Math.round(elPosition.left);\n elPosition.right = Math.round(elPosition.right);\n }\n\n return elPosition;\n }\n\n offset(element: HTMLElement, round = true): ClientRect {\n const elBcr = element.getBoundingClientRect();\n const viewportOffset = {\n top: window.pageYOffset - document.documentElement.clientTop,\n left: window.pageXOffset - document.documentElement.clientLeft\n };\n\n let elOffset = {\n height: elBcr.height || element.offsetHeight,\n width: elBcr.width || element.offsetWidth,\n top: elBcr.top + viewportOffset.top,\n bottom: elBcr.bottom + viewportOffset.top,\n left: elBcr.left + viewportOffset.left,\n right: elBcr.right + viewportOffset.left\n };\n\n if (round) {\n elOffset.height = Math.round(elOffset.height);\n elOffset.width = Math.round(elOffset.width);\n elOffset.top = Math.round(elOffset.top);\n elOffset.bottom = Math.round(elOffset.bottom);\n elOffset.left = Math.round(elOffset.left);\n elOffset.right = Math.round(elOffset.right);\n }\n\n return elOffset;\n }\n\n /*\n Return false if the element to position is outside the viewport\n */\n positionElements(hostElement: HTMLElement, targetElement: HTMLElement, placement: string, appendToBody?: boolean):\n boolean {\n const[placementPrimary = 'top', placementSecondary = 'center'] = placement.split('-');\n\n const hostElPosition = appendToBody ? this.offset(hostElement, false) : this.position(hostElement, false);\n const targetElStyles = this.getAllStyles(targetElement);\n\n const marginTop = parseFloat(targetElStyles.marginTop);\n const marginBottom = parseFloat(targetElStyles.marginBottom);\n const marginLeft = parseFloat(targetElStyles.marginLeft);\n const marginRight = parseFloat(targetElStyles.marginRight);\n\n let topPosition = 0;\n let leftPosition = 0;\n\n switch (placementPrimary) {\n case 'top':\n topPosition = (hostElPosition.top - (targetElement.offsetHeight + marginTop + marginBottom));\n break;\n case 'bottom':\n topPosition = (hostElPosition.top + hostElPosition.height);\n break;\n case 'left':\n leftPosition = (hostElPosition.left - (targetElement.offsetWidth + marginLeft + marginRight));\n break;\n case 'right':\n leftPosition = (hostElPosition.left + hostElPosition.width);\n break;\n }\n\n switch (placementSecondary) {\n case 'top':\n topPosition = hostElPosition.top;\n break;\n case 'bottom':\n topPosition = hostElPosition.top + hostElPosition.height - targetElement.offsetHeight;\n break;\n case 'left':\n leftPosition = hostElPosition.left;\n break;\n case 'right':\n leftPosition = hostElPosition.left + hostElPosition.width - targetElement.offsetWidth;\n break;\n case 'center':\n if (placementPrimary === 'top' || placementPrimary === 'bottom') {\n leftPosition = (hostElPosition.left + hostElPosition.width / 2 - targetElement.offsetWidth / 2);\n } else {\n topPosition = (hostElPosition.top + hostElPosition.height / 2 - targetElement.offsetHeight / 2);\n }\n break;\n }\n\n /// The translate3d/gpu acceleration render a blurry text on chrome, the next line is commented until a browser fix\n // targetElement.style.transform = `translate3d(${Math.round(leftPosition)}px, ${Math.floor(topPosition)}px, 0px)`;\n targetElement.style.transform = `translate(${Math.round(leftPosition)}px, ${Math.round(topPosition)}px)`;\n\n // Check if the targetElement is inside the viewport\n const targetElBCR = targetElement.getBoundingClientRect();\n const html = document.documentElement;\n const windowHeight = window.innerHeight || html.clientHeight;\n const windowWidth = window.innerWidth || html.clientWidth;\n\n return targetElBCR.left >= 0 && targetElBCR.top >= 0 && targetElBCR.right <= windowWidth &&\n targetElBCR.bottom <= windowHeight;\n }\n}\n\nconst placementSeparator = /\\s+/;\nconst positionService = new Positioning();\n\n/*\n * Accept the placement array and applies the appropriate placement dependent on the viewport.\n * Returns the applied placement.\n * In case of auto placement, placements are selected in order\n * 'top', 'bottom', 'left', 'right',\n * 'top-left', 'top-right',\n * 'bottom-left', 'bottom-right',\n * 'left-top', 'left-bottom',\n * 'right-top', 'right-bottom'.\n * */\nexport function positionElements(\n hostElement: HTMLElement, targetElement: HTMLElement, placement: string | Placement | PlacementArray,\n appendToBody?: boolean, baseClass?: string): Placement {\n let placementVals: Array =\n Array.isArray(placement) ? placement : placement.split(placementSeparator) as Array;\n\n const allowedPlacements = [\n 'top', 'bottom', 'left', 'right', 'top-left', 'top-right', 'bottom-left', 'bottom-right', 'left-top', 'left-bottom',\n 'right-top', 'right-bottom'\n ];\n\n const classList = targetElement.classList;\n const addClassesToTarget = (targetPlacement: Placement): Array => {\n const[primary, secondary] = targetPlacement.split('-');\n const classes = [];\n if (baseClass) {\n classes.push(`${baseClass}-${primary}`);\n if (secondary) {\n classes.push(`${baseClass}-${primary}-${secondary}`);\n }\n\n classes.forEach((classname) => { classList.add(classname); });\n }\n return classes;\n };\n\n // Remove old placement classes to avoid issues\n if (baseClass) {\n allowedPlacements.forEach((placementToRemove) => { classList.remove(`${baseClass}-${placementToRemove}`); });\n }\n\n // replace auto placement with other placements\n let hasAuto = placementVals.findIndex(val => val === 'auto');\n if (hasAuto >= 0) {\n allowedPlacements.forEach(function(obj) {\n if (placementVals.find(val => val.search('^' + obj) !== -1) == null) {\n placementVals.splice(hasAuto++, 1, obj as Placement);\n }\n });\n }\n\n // coordinates where to position\n\n // Required for transform:\n const style = targetElement.style;\n style.position = 'absolute';\n style.top = '0';\n style.left = '0';\n style['will-change'] = 'transform';\n\n let testPlacement: Placement;\n let isInViewport = false;\n for (testPlacement of placementVals) {\n let addedClasses = addClassesToTarget(testPlacement);\n\n if (positionService.positionElements(hostElement, targetElement, testPlacement, appendToBody)) {\n isInViewport = true;\n break;\n }\n\n // Remove the baseClasses for further calculation\n if (baseClass) {\n addedClasses.forEach((classname) => { classList.remove(classname); });\n }\n }\n\n if (!isInViewport) {\n // If nothing match, the first placement is the default one\n testPlacement = placementVals[0];\n addClassesToTarget(testPlacement);\n positionService.positionElements(hostElement, targetElement, testPlacement, appendToBody);\n }\n\n return testPlacement;\n}\n\nexport type Placement = 'auto' | 'top' | 'bottom' | 'left' | 'right' | 'top-left' | 'top-right' | 'bottom-left' |\n 'bottom-right' | 'left-top' | 'left-bottom' | 'right-top' | 'right-bottom';\n\nexport type PlacementArray = Placement | Array| string;\n","import {padNumber, toInteger, isNumber} from '../util/util';\nimport {NgbDateStruct} from './ngb-date-struct';\nimport {Injectable} from '@angular/core';\n\nexport function NGB_DATEPICKER_PARSER_FORMATTER_FACTORY() {\n return new NgbDateISOParserFormatter();\n}\n\n/**\n * An abstract service for parsing and formatting dates for the\n * [`NgbInputDatepicker`](#/components/datepicker/api#NgbInputDatepicker) directive.\n * Converts between the internal `NgbDateStruct` model presentation and a `string` that is displayed in the\n * input element.\n *\n * When user types something in the input this service attempts to parse it into a `NgbDateStruct` object.\n * And vice versa, when users selects a date in the calendar with the mouse, it must be displayed as a `string`\n * in the input.\n *\n * Default implementation uses the ISO 8601 format, but you can provide another implementation via DI\n * to use an alternative string format or a custom parsing logic.\n *\n * See the [date format overview](#/components/datepicker/overview#date-model) for more details.\n */\n@Injectable({providedIn: 'root', useFactory: NGB_DATEPICKER_PARSER_FORMATTER_FACTORY})\nexport abstract class NgbDateParserFormatter {\n /**\n * Parses the given `string` to an `NgbDateStruct`.\n *\n * Implementations should try their best to provide a result, even\n * partial. They must return `null` if the value can't be parsed.\n */\n abstract parse(value: string): NgbDateStruct;\n\n /**\n * Formats the given `NgbDateStruct` to a `string`.\n *\n * Implementations should return an empty string if the given date is `null`,\n * and try their best to provide a partial result if the given date is incomplete or invalid.\n */\n abstract format(date: NgbDateStruct): string;\n}\n\n@Injectable()\nexport class NgbDateISOParserFormatter extends NgbDateParserFormatter {\n parse(value: string): NgbDateStruct {\n if (value) {\n const dateParts = value.trim().split('-');\n if (dateParts.length === 1 && isNumber(dateParts[0])) {\n return {year: toInteger(dateParts[0]), month: null, day: null};\n } else if (dateParts.length === 2 && isNumber(dateParts[0]) && isNumber(dateParts[1])) {\n return {year: toInteger(dateParts[0]), month: toInteger(dateParts[1]), day: null};\n } else if (dateParts.length === 3 && isNumber(dateParts[0]) && isNumber(dateParts[1]) && isNumber(dateParts[2])) {\n return {year: toInteger(dateParts[0]), month: toInteger(dateParts[1]), day: toInteger(dateParts[2])};\n }\n }\n return null;\n }\n\n format(date: NgbDateStruct): string {\n return date ?\n `${date.year}-${isNumber(date.month) ? padNumber(date.month) : ''}-${isNumber(date.day) ? padNumber(date.day) : ''}` :\n '';\n }\n}\n","import {\n ChangeDetectorRef,\n ComponentFactoryResolver,\n ComponentRef,\n Directive,\n ElementRef,\n EventEmitter,\n forwardRef,\n Inject,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n Output,\n Renderer2,\n SimpleChanges,\n TemplateRef,\n ViewContainerRef\n} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\nimport {AbstractControl, ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validator} from '@angular/forms';\n\nimport {ngbAutoClose} from '../util/autoclose';\nimport {ngbFocusTrap} from '../util/focus-trap';\nimport {PlacementArray, positionElements} from '../util/positioning';\n\nimport {NgbDateAdapter} from './adapters/ngb-date-adapter';\nimport {NgbDatepicker, NgbDatepickerNavigateEvent} from './datepicker';\nimport {DayTemplateContext} from './datepicker-day-template-context';\nimport {NgbDatepickerService} from './datepicker-service';\nimport {NgbCalendar} from './ngb-calendar';\nimport {NgbDate} from './ngb-date';\nimport {NgbDateParserFormatter} from './ngb-date-parser-formatter';\nimport {NgbDateStruct} from './ngb-date-struct';\n\nconst NGB_DATEPICKER_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgbInputDatepicker),\n multi: true\n};\n\nconst NGB_DATEPICKER_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => NgbInputDatepicker),\n multi: true\n};\n\n/**\n * A directive that allows to stick a datepicker popup to an input field.\n *\n * Manages interaction with the input field itself, does value formatting and provides forms integration.\n */\n@Directive({\n selector: 'input[ngbDatepicker]',\n exportAs: 'ngbDatepicker',\n host: {\n '(input)': 'manualDateChange($event.target.value)',\n '(change)': 'manualDateChange($event.target.value, true)',\n '(blur)': 'onBlur()',\n '[disabled]': 'disabled'\n },\n providers: [NGB_DATEPICKER_VALUE_ACCESSOR, NGB_DATEPICKER_VALIDATOR, NgbDatepickerService]\n})\nexport class NgbInputDatepicker implements OnChanges,\n OnDestroy, ControlValueAccessor, Validator {\n private _cRef: ComponentRef = null;\n private _disabled = false;\n private _model: NgbDate;\n private _inputValue: string;\n private _zoneSubscription: any;\n\n /**\n * Indicates whether the datepicker popup should be closed automatically after date selection / outside click or not.\n *\n * * `true` - the popup will close on both date selection and outside click.\n * * `false` - the popup can only be closed manually via `close()` or `toggle()` methods.\n * * `\"inside\"` - the popup will close on date selection, but not outside clicks.\n * * `\"outside\"` - the popup will close only on the outside click and not on date selection/inside clicks.\n *\n * @since 3.0.0\n */\n @Input() autoClose: boolean | 'inside' | 'outside' = true;\n\n /**\n * The reference to a custom template for the day.\n *\n * Allows to completely override the way a day 'cell' in the calendar is displayed.\n *\n * See [`DayTemplateContext`](#/components/datepicker/api#DayTemplateContext) for the data you get inside.\n */\n @Input() dayTemplate: TemplateRef;\n\n /**\n * The callback to pass any arbitrary data to the template cell via the\n * [`DayTemplateContext`](#/components/datepicker/api#DayTemplateContext)'s `data` parameter.\n *\n * `current` is the month that is currently displayed by the datepicker.\n *\n * @since 3.3.0\n */\n @Input() dayTemplateData: (date: NgbDate, current: {year: number, month: number}) => any;\n\n /**\n * The number of months to display.\n */\n @Input() displayMonths: number;\n\n /**\n * The first day of the week.\n *\n * With default calendar we use ISO 8601: 'weekday' is 1=Mon ... 7=Sun.\n */\n @Input() firstDayOfWeek: number;\n\n /**\n * The reference to the custom template for the datepicker footer.\n *\n * @since 3.3.0\n */\n @Input() footerTemplate: TemplateRef;\n\n /**\n * The callback to mark some dates as disabled.\n *\n * It is called for each new date when navigating to a different month.\n *\n * `current` is the month that is currently displayed by the datepicker.\n */\n @Input() markDisabled: (date: NgbDate, current: {year: number, month: number}) => boolean;\n\n /**\n * The earliest date that can be displayed or selected. Also used for form validation.\n *\n * If not provided, 'year' select box will display 10 years before the current month.\n */\n @Input() minDate: NgbDateStruct;\n\n /**\n * The latest date that can be displayed or selected. Also used for form validation.\n *\n * If not provided, 'year' select box will display 10 years after the current month.\n */\n @Input() maxDate: NgbDateStruct;\n\n /**\n * Navigation type.\n *\n * * `\"select\"` - select boxes for month and navigation arrows\n * * `\"arrows\"` - only navigation arrows\n * * `\"none\"` - no navigation visible at all\n */\n @Input() navigation: 'select' | 'arrows' | 'none';\n\n /**\n * The way of displaying days that don't belong to the current month.\n *\n * * `\"visible\"` - days are visible\n * * `\"hidden\"` - days are hidden, white space preserved\n * * `\"collapsed\"` - days are collapsed, so the datepicker height might change between months\n *\n * For the 2+ months view, days in between months are never shown.\n */\n @Input() outsideDays: 'visible' | 'collapsed' | 'hidden';\n\n /**\n * The preferred placement of the datepicker popup.\n *\n * Possible values are `\"top\"`, `\"top-left\"`, `\"top-right\"`, `\"bottom\"`, `\"bottom-left\"`,\n * `\"bottom-right\"`, `\"left\"`, `\"left-top\"`, `\"left-bottom\"`, `\"right\"`, `\"right-top\"`,\n * `\"right-bottom\"`\n *\n * Accepts an array of strings or a string with space separated possible values.\n *\n * The default order of preference is `\"bottom-left bottom-right top-left top-right\"`\n *\n * Please see the [positioning overview](#/positioning) for more details.\n */\n @Input() placement: PlacementArray = ['bottom-left', 'bottom-right', 'top-left', 'top-right'];\n\n /**\n * If `true`, weekdays will be displayed.\n */\n @Input() showWeekdays: boolean;\n\n /**\n * If `true`, week numbers will be displayed.\n */\n @Input() showWeekNumbers: boolean;\n\n /**\n * The date to open calendar with.\n *\n * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec.\n * If nothing or invalid date is provided, calendar will open with current month.\n *\n * You could use `navigateTo(date)` method as an alternative.\n */\n @Input() startDate: {year: number, month: number, day?: number};\n\n /**\n * A selector specifying the element the datepicker popup should be appended to.\n *\n * Currently only supports `\"body\"`.\n */\n @Input() container: string;\n\n /**\n * A css selector or html element specifying the element the datepicker popup should be positioned against.\n *\n * By default the input is used as a target.\n *\n * @since 4.2.0\n */\n @Input() positionTarget: string | HTMLElement;\n\n /**\n * An event emitted when user selects a date using keyboard or mouse.\n *\n * The payload of the event is currently selected `NgbDate`.\n *\n * @since 1.1.1\n */\n @Output() dateSelect = new EventEmitter();\n\n /**\n * Event emitted right after the navigation happens and displayed month changes.\n *\n * See [`NgbDatepickerNavigateEvent`](#/components/datepicker/api#NgbDatepickerNavigateEvent) for the payload info.\n */\n @Output() navigate = new EventEmitter();\n\n /**\n * An event fired after closing datepicker window.\n *\n * @since 4.2.0\n */\n @Output() closed = new EventEmitter();\n\n @Input()\n get disabled() {\n return this._disabled;\n }\n set disabled(value: any) {\n this._disabled = value === '' || (value && value !== 'false');\n\n if (this.isOpen()) {\n this._cRef.instance.setDisabledState(this._disabled);\n }\n }\n\n private _onChange = (_: any) => {};\n private _onTouched = () => {};\n private _validatorChange = () => {};\n\n\n constructor(\n private _parserFormatter: NgbDateParserFormatter, private _elRef: ElementRef,\n private _vcRef: ViewContainerRef, private _renderer: Renderer2, private _cfr: ComponentFactoryResolver,\n private _ngZone: NgZone, private _service: NgbDatepickerService, private _calendar: NgbCalendar,\n private _dateAdapter: NgbDateAdapter, @Inject(DOCUMENT) private _document: any,\n private _changeDetector: ChangeDetectorRef) {\n this._zoneSubscription = _ngZone.onStable.subscribe(() => this._updatePopupPosition());\n }\n\n registerOnChange(fn: (value: any) => any): void { this._onChange = fn; }\n\n registerOnTouched(fn: () => any): void { this._onTouched = fn; }\n\n registerOnValidatorChange(fn: () => void): void { this._validatorChange = fn; }\n\n setDisabledState(isDisabled: boolean): void { this.disabled = isDisabled; }\n\n validate(c: AbstractControl): {[key: string]: any} {\n const value = c.value;\n\n if (value === null || value === undefined) {\n return null;\n }\n\n const ngbDate = this._fromDateStruct(this._dateAdapter.fromModel(value));\n\n if (!this._calendar.isValid(ngbDate)) {\n return {'ngbDate': {invalid: c.value}};\n }\n\n if (this.minDate && ngbDate.before(NgbDate.from(this.minDate))) {\n return {'ngbDate': {requiredBefore: this.minDate}};\n }\n\n if (this.maxDate && ngbDate.after(NgbDate.from(this.maxDate))) {\n return {'ngbDate': {requiredAfter: this.maxDate}};\n }\n }\n\n writeValue(value) {\n this._model = this._fromDateStruct(this._dateAdapter.fromModel(value));\n this._writeModelValue(this._model);\n }\n\n manualDateChange(value: string, updateView = false) {\n const inputValueChanged = value !== this._inputValue;\n if (inputValueChanged) {\n this._inputValue = value;\n this._model = this._fromDateStruct(this._parserFormatter.parse(value));\n }\n if (inputValueChanged || !updateView) {\n this._onChange(this._model ? this._dateAdapter.toModel(this._model) : (value === '' ? null : value));\n }\n if (updateView && this._model) {\n this._writeModelValue(this._model);\n }\n }\n\n isOpen() { return !!this._cRef; }\n\n /**\n * Opens the datepicker popup.\n *\n * If the related form control contains a valid date, the corresponding month will be opened.\n */\n open() {\n if (!this.isOpen()) {\n const cf = this._cfr.resolveComponentFactory(NgbDatepicker);\n this._cRef = this._vcRef.createComponent(cf);\n\n this._applyPopupStyling(this._cRef.location.nativeElement);\n this._applyDatepickerInputs(this._cRef.instance);\n this._subscribeForDatepickerOutputs(this._cRef.instance);\n this._cRef.instance.ngOnInit();\n this._cRef.instance.writeValue(this._dateAdapter.toModel(this._model));\n\n // date selection event handling\n this._cRef.instance.registerOnChange((selectedDate) => {\n this.writeValue(selectedDate);\n this._onChange(selectedDate);\n this._onTouched();\n });\n\n this._cRef.changeDetectorRef.detectChanges();\n\n this._cRef.instance.setDisabledState(this.disabled);\n\n if (this.container === 'body') {\n window.document.querySelector(this.container).appendChild(this._cRef.location.nativeElement);\n }\n\n // focus handling\n ngbFocusTrap(this._cRef.location.nativeElement, this.closed, true);\n this._cRef.instance.focus();\n\n ngbAutoClose(\n this._ngZone, this._document, this.autoClose, () => this.close(), this.closed, [],\n [this._elRef.nativeElement, this._cRef.location.nativeElement]);\n }\n }\n\n /**\n * Closes the datepicker popup.\n */\n close() {\n if (this.isOpen()) {\n this._vcRef.remove(this._vcRef.indexOf(this._cRef.hostView));\n this._cRef = null;\n this.closed.emit();\n this._changeDetector.markForCheck();\n }\n }\n\n /**\n * Toggles the datepicker popup.\n */\n toggle() {\n if (this.isOpen()) {\n this.close();\n } else {\n this.open();\n }\n }\n\n /**\n * Navigates to the provided date.\n *\n * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec.\n * If nothing or invalid date provided calendar will open current month.\n *\n * Use the `[startDate]` input as an alternative.\n */\n navigateTo(date?: {year: number, month: number, day?: number}) {\n if (this.isOpen()) {\n this._cRef.instance.navigateTo(date);\n }\n }\n\n onBlur() { this._onTouched(); }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['minDate'] || changes['maxDate']) {\n this._validatorChange();\n }\n }\n\n ngOnDestroy() {\n this.close();\n this._zoneSubscription.unsubscribe();\n }\n\n private _applyDatepickerInputs(datepickerInstance: NgbDatepicker): void {\n ['dayTemplate', 'dayTemplateData', 'displayMonths', 'firstDayOfWeek', 'footerTemplate', 'markDisabled', 'minDate',\n 'maxDate', 'navigation', 'outsideDays', 'showNavigation', 'showWeekdays', 'showWeekNumbers']\n .forEach((optionName: string) => {\n if (this[optionName] !== undefined) {\n datepickerInstance[optionName] = this[optionName];\n }\n });\n datepickerInstance.startDate = this.startDate || this._model;\n }\n\n private _applyPopupStyling(nativeElement: any) {\n this._renderer.addClass(nativeElement, 'dropdown-menu');\n this._renderer.addClass(nativeElement, 'show');\n\n if (this.container === 'body') {\n this._renderer.addClass(nativeElement, 'ngb-dp-body');\n }\n }\n\n private _subscribeForDatepickerOutputs(datepickerInstance: NgbDatepicker) {\n datepickerInstance.navigate.subscribe(navigateEvent => this.navigate.emit(navigateEvent));\n datepickerInstance.select.subscribe(date => {\n this.dateSelect.emit(date);\n if (this.autoClose === true || this.autoClose === 'inside') {\n this.close();\n }\n });\n }\n\n private _writeModelValue(model: NgbDate) {\n const value = this._parserFormatter.format(model);\n this._inputValue = value;\n this._renderer.setProperty(this._elRef.nativeElement, 'value', value);\n if (this.isOpen()) {\n this._cRef.instance.writeValue(this._dateAdapter.toModel(model));\n this._onTouched();\n }\n }\n\n private _fromDateStruct(date: NgbDateStruct): NgbDate {\n const ngbDate = date ? new NgbDate(date.year, date.month, date.day) : null;\n return this._calendar.isValid(ngbDate) ? ngbDate : null;\n }\n\n private _updatePopupPosition() {\n if (!this._cRef) {\n return;\n }\n\n let hostElement: HTMLElement;\n if (typeof this.positionTarget === 'string') {\n hostElement = window.document.querySelector(this.positionTarget);\n } else if (this.positionTarget instanceof HTMLElement) {\n hostElement = this.positionTarget;\n } else {\n hostElement = this._elRef.nativeElement;\n }\n\n if (this.positionTarget && !hostElement) {\n throw new Error('ngbDatepicker could not find element declared in [positionTarget] to position against.');\n }\n\n positionElements(hostElement, this._cRef.location.nativeElement, this.placement, this.container === 'body');\n }\n}\n","import {ChangeDetectionStrategy, Component, Input, ViewEncapsulation} from '@angular/core';\nimport {NgbDate} from './ngb-date';\nimport {NgbDatepickerI18n} from './datepicker-i18n';\n\n@Component({\n selector: '[ngbDatepickerDayView]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./datepicker-day-view.scss'],\n host: {\n 'class': 'btn-light',\n '[class.bg-primary]': 'selected',\n '[class.text-white]': 'selected',\n '[class.text-muted]': 'isMuted()',\n '[class.outside]': 'isMuted()',\n '[class.active]': 'focused'\n },\n template: `{{ i18n.getDayNumerals(date) }}`\n})\nexport class NgbDatepickerDayView {\n @Input() currentMonth: number;\n @Input() date: NgbDate;\n @Input() disabled: boolean;\n @Input() focused: boolean;\n @Input() selected: boolean;\n\n constructor(public i18n: NgbDatepickerI18n) {}\n\n isMuted() { return !this.selected && (this.date.month !== this.currentMonth || this.disabled); }\n}\n","import {Component, Input, Output, EventEmitter, ChangeDetectionStrategy, ViewEncapsulation} from '@angular/core';\nimport {NgbDate} from './ngb-date';\nimport {toInteger} from '../util/util';\nimport {NgbDatepickerI18n} from './datepicker-i18n';\n\n@Component({\n selector: 'ngb-datepicker-navigation-select',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./datepicker-navigation-select.scss'],\n template: `\n \n \n \n \n \n `\n})\nexport class NgbDatepickerNavigationSelect {\n @Input() date: NgbDate;\n @Input() disabled: boolean;\n @Input() months: number[];\n @Input() years: number[];\n\n @Output() select = new EventEmitter();\n\n constructor(public i18n: NgbDatepickerI18n) {}\n\n changeMonth(month: string) { this.select.emit(new NgbDate(this.date.year, toInteger(month), 1)); }\n\n changeYear(year: string) { this.select.emit(new NgbDate(toInteger(year), this.date.month, 1)); }\n}\n","import {NgbDate} from '../ngb-date';\nimport {NgbPeriod, NgbCalendar} from '../ngb-calendar';\nimport {Injectable} from '@angular/core';\nimport {isNumber} from '../../util/util';\n\n@Injectable()\nexport abstract class NgbCalendarHijri extends NgbCalendar {\n /**\n * Returns the number of days in a specific Hijri month.\n * `month` is 1 for Muharram, 2 for Safar, etc.\n * `year` is any Hijri year.\n */\n abstract getDaysPerMonth(month: number, year: number): number;\n\n /**\n * Returns the equivalent Hijri date value for a give input Gregorian date.\n * `gDate` is s JS Date to be converted to Hijri.\n */\n abstract fromGregorian(gDate: Date): NgbDate;\n\n /**\n * Converts the current Hijri date to Gregorian.\n */\n abstract toGregorian(hDate: NgbDate): Date;\n\n getDaysPerWeek() { return 7; }\n\n getMonths() { return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; }\n\n getWeeksPerMonth() { return 6; }\n\n getNext(date: NgbDate, period: NgbPeriod = 'd', number = 1) {\n date = new NgbDate(date.year, date.month, date.day);\n\n switch (period) {\n case 'y':\n date = this._setYear(date, date.year + number);\n date.month = 1;\n date.day = 1;\n return date;\n case 'm':\n date = this._setMonth(date, date.month + number);\n date.day = 1;\n return date;\n case 'd':\n return this._setDay(date, date.day + number);\n default:\n return date;\n }\n }\n\n getPrev(date: NgbDate, period: NgbPeriod = 'd', number = 1) { return this.getNext(date, period, -number); }\n\n getWeekday(date: NgbDate) {\n const day = this.toGregorian(date).getDay();\n // in JS Date Sun=0, in ISO 8601 Sun=7\n return day === 0 ? 7 : day;\n }\n\n getWeekNumber(week: NgbDate[], firstDayOfWeek: number) {\n // in JS Date Sun=0, in ISO 8601 Sun=7\n if (firstDayOfWeek === 7) {\n firstDayOfWeek = 0;\n }\n\n const thursdayIndex = (4 + 7 - firstDayOfWeek) % 7;\n const date = week[thursdayIndex];\n\n const jsDate = this.toGregorian(date);\n jsDate.setDate(jsDate.getDate() + 4 - (jsDate.getDay() || 7)); // Thursday\n const time = jsDate.getTime();\n const MuhDate = this.toGregorian(new NgbDate(date.year, 1, 1)); // Compare with Muharram 1\n return Math.floor(Math.round((time - MuhDate.getTime()) / 86400000) / 7) + 1;\n }\n\n getToday(): NgbDate { return this.fromGregorian(new Date()); }\n\n\n isValid(date: NgbDate): boolean {\n return date && isNumber(date.year) && isNumber(date.month) && isNumber(date.day) &&\n !isNaN(this.toGregorian(date).getTime());\n }\n\n private _setDay(date: NgbDate, day: number): NgbDate {\n day = +day;\n let mDays = this.getDaysPerMonth(date.month, date.year);\n if (day <= 0) {\n while (day <= 0) {\n date = this._setMonth(date, date.month - 1);\n mDays = this.getDaysPerMonth(date.month, date.year);\n day += mDays;\n }\n } else if (day > mDays) {\n while (day > mDays) {\n day -= mDays;\n date = this._setMonth(date, date.month + 1);\n mDays = this.getDaysPerMonth(date.month, date.year);\n }\n }\n date.day = day;\n return date;\n }\n\n private _setMonth(date: NgbDate, month: number): NgbDate {\n month = +month;\n date.year = date.year + Math.floor((month - 1) / 12);\n date.month = Math.floor(((month - 1) % 12 + 12) % 12) + 1;\n return date;\n }\n\n private _setYear(date: NgbDate, year: number): NgbDate {\n date.year = +year;\n return date;\n }\n}\n","import {NgbCalendarHijri} from './ngb-calendar-hijri';\nimport {NgbDate} from '../ngb-date';\nimport {Injectable} from '@angular/core';\n\n/**\n * Checks if islamic year is a leap year\n */\nfunction isIslamicLeapYear(hYear: number): boolean {\n return (14 + 11 * hYear) % 30 < 11;\n}\n\n/**\n * Checks if gregorian years is a leap year\n */\nfunction isGregorianLeapYear(gDate: Date): boolean {\n const year = gDate.getFullYear();\n return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;\n}\n\n/**\n * Returns the start of Hijri Month.\n * `hMonth` is 0 for Muharram, 1 for Safar, etc.\n * `hYear` is any Hijri hYear.\n */\nfunction getIslamicMonthStart(hYear: number, hMonth: number): number {\n return Math.ceil(29.5 * hMonth) + (hYear - 1) * 354 + Math.floor((3 + 11 * hYear) / 30.0);\n}\n\n/**\n * Returns the start of Hijri year.\n * `year` is any Hijri year.\n */\nfunction getIslamicYearStart(year: number): number {\n return (year - 1) * 354 + Math.floor((3 + 11 * year) / 30.0);\n}\n\nfunction mod(a: number, b: number): number {\n return a - b * Math.floor(a / b);\n}\n\n/**\n * The civil calendar is one type of Hijri calendars used in islamic countries.\n * Uses a fixed cycle of alternating 29- and 30-day months,\n * with a leap day added to the last month of 11 out of every 30 years.\n * http://cldr.unicode.org/development/development-process/design-proposals/islamic-calendar-types\n * All the calculations here are based on the equations from \"Calendrical Calculations\" By Edward M. Reingold, Nachum\n * Dershowitz.\n */\n\nconst GREGORIAN_EPOCH = 1721425.5;\nconst ISLAMIC_EPOCH = 1948439.5;\n\n@Injectable()\nexport class NgbCalendarIslamicCivil extends NgbCalendarHijri {\n /**\n * Returns the equivalent islamic(civil) date value for a give input Gregorian date.\n * `gDate` is a JS Date to be converted to Hijri.\n */\n fromGregorian(gDate: Date): NgbDate {\n const gYear = gDate.getFullYear(), gMonth = gDate.getMonth(), gDay = gDate.getDate();\n\n let julianDay = GREGORIAN_EPOCH - 1 + 365 * (gYear - 1) + Math.floor((gYear - 1) / 4) +\n -Math.floor((gYear - 1) / 100) + Math.floor((gYear - 1) / 400) +\n Math.floor(\n (367 * (gMonth + 1) - 362) / 12 + (gMonth + 1 <= 2 ? 0 : isGregorianLeapYear(gDate) ? -1 : -2) + gDay);\n julianDay = Math.floor(julianDay) + 0.5;\n\n const days = julianDay - ISLAMIC_EPOCH;\n const hYear = Math.floor((30 * days + 10646) / 10631.0);\n let hMonth = Math.ceil((days - 29 - getIslamicYearStart(hYear)) / 29.5);\n hMonth = Math.min(hMonth, 11);\n const hDay = Math.ceil(days - getIslamicMonthStart(hYear, hMonth)) + 1;\n return new NgbDate(hYear, hMonth + 1, hDay);\n }\n\n /**\n * Returns the equivalent JS date value for a give input islamic(civil) date.\n * `hDate` is an islamic(civil) date to be converted to Gregorian.\n */\n toGregorian(hDate: NgbDate): Date {\n const hYear = hDate.year;\n const hMonth = hDate.month - 1;\n const hDay = hDate.day;\n const julianDay =\n hDay + Math.ceil(29.5 * hMonth) + (hYear - 1) * 354 + Math.floor((3 + 11 * hYear) / 30) + ISLAMIC_EPOCH - 1;\n\n const wjd = Math.floor(julianDay - 0.5) + 0.5, depoch = wjd - GREGORIAN_EPOCH,\n quadricent = Math.floor(depoch / 146097), dqc = mod(depoch, 146097), cent = Math.floor(dqc / 36524),\n dcent = mod(dqc, 36524), quad = Math.floor(dcent / 1461), dquad = mod(dcent, 1461),\n yindex = Math.floor(dquad / 365);\n let year = quadricent * 400 + cent * 100 + quad * 4 + yindex;\n if (!(cent === 4 || yindex === 4)) {\n year++;\n }\n\n const gYearStart = GREGORIAN_EPOCH + 365 * (year - 1) + Math.floor((year - 1) / 4) - Math.floor((year - 1) / 100) +\n Math.floor((year - 1) / 400);\n\n const yearday = wjd - gYearStart;\n\n const tjd = GREGORIAN_EPOCH - 1 + 365 * (year - 1) + Math.floor((year - 1) / 4) - Math.floor((year - 1) / 100) +\n Math.floor((year - 1) / 400) + Math.floor(739 / 12 + (isGregorianLeapYear(new Date(year, 3, 1)) ? -1 : -2) + 1);\n\n const leapadj = wjd < tjd ? 0 : isGregorianLeapYear(new Date(year, 3, 1)) ? 1 : 2;\n\n const month = Math.floor(((yearday + leapadj) * 12 + 373) / 367);\n const tjd2 = GREGORIAN_EPOCH - 1 + 365 * (year - 1) + Math.floor((year - 1) / 4) - Math.floor((year - 1) / 100) +\n Math.floor((year - 1) / 400) +\n Math.floor(\n (367 * month - 362) / 12 + (month <= 2 ? 0 : isGregorianLeapYear(new Date(year, month - 1, 1)) ? -1 : -2) +\n 1);\n\n const day = wjd - tjd2 + 1;\n\n return new Date(year, month - 1, day);\n }\n\n /**\n * Returns the number of days in a specific Hijri month.\n * `month` is 1 for Muharram, 2 for Safar, etc.\n * `year` is any Hijri year.\n */\n getDaysPerMonth(month: number, year: number): number {\n year = year + Math.floor(month / 13);\n month = ((month - 1) % 12) + 1;\n let length = 29 + month % 2;\n if (month === 12 && isIslamicLeapYear(year)) {\n length++;\n }\n return length;\n }\n}\n","import {NgbCalendarIslamicCivil} from './ngb-calendar-islamic-civil';\nimport {NgbDate} from '../ngb-date';\nimport {Injectable} from '@angular/core';\n\n/**\n * Umalqura calendar is one type of Hijri calendars used in islamic countries.\n * This Calendar is used by Saudi Arabia for administrative purpose.\n * Unlike tabular calendars, the algorithm involves astronomical calculation, but it's still deterministic.\n * http://cldr.unicode.org/development/development-process/design-proposals/islamic-calendar-types\n */\n\nconst GREGORIAN_FIRST_DATE = new Date(1882, 10, 12);\nconst GREGORIAN_LAST_DATE = new Date(2174, 10, 25);\nconst HIJRI_BEGIN = 1300;\nconst HIJRI_END = 1600;\nconst ONE_DAY = 1000 * 60 * 60 * 24;\n\nconst MONTH_LENGTH = [\n // 1300-1304\n '101010101010', '110101010100', '111011001001', '011011010100', '011011101010',\n // 1305-1309\n '001101101100', '101010101101', '010101010101', '011010101001', '011110010010',\n // 1310-1314\n '101110101001', '010111010100', '101011011010', '010101011100', '110100101101',\n // 1315-1319\n '011010010101', '011101001010', '101101010100', '101101101010', '010110101101',\n // 1320-1324\n '010010101110', '101001001111', '010100010111', '011010001011', '011010100101',\n // 1325-1329\n '101011010101', '001011010110', '100101011011', '010010011101', '101001001101',\n // 1330-1334\n '110100100110', '110110010101', '010110101100', '100110110110', '001010111010',\n // 1335-1339\n '101001011011', '010100101011', '101010010101', '011011001010', '101011101001',\n // 1340-1344\n '001011110100', '100101110110', '001010110110', '100101010110', '101011001010',\n // 1345-1349\n '101110100100', '101111010010', '010111011001', '001011011100', '100101101101',\n // 1350-1354\n '010101001101', '101010100101', '101101010010', '101110100101', '010110110100',\n // 1355-1359\n '100110110110', '010101010111', '001010010111', '010101001011', '011010100011',\n // 1360-1364\n '011101010010', '101101100101', '010101101010', '101010101011', '010100101011',\n // 1365-1369\n '110010010101', '110101001010', '110110100101', '010111001010', '101011010110',\n // 1370-1374\n '100101010111', '010010101011', '100101001011', '101010100101', '101101010010',\n // 1375-1379\n '101101101010', '010101110101', '001001110110', '100010110111', '010001011011',\n // 1380-1384\n '010101010101', '010110101001', '010110110100', '100111011010', '010011011101',\n // 1385-1389\n '001001101110', '100100110110', '101010101010', '110101010100', '110110110010',\n // 1390-1394\n '010111010101', '001011011010', '100101011011', '010010101011', '101001010101',\n // 1395-1399\n '101101001001', '101101100100', '101101110001', '010110110100', '101010110101',\n // 1400-1404\n '101001010101', '110100100101', '111010010010', '111011001001', '011011010100',\n // 1405-1409\n '101011101001', '100101101011', '010010101011', '101010010011', '110101001001',\n // 1410-1414\n '110110100100', '110110110010', '101010111001', '010010111010', '101001011011',\n // 1415-1419\n '010100101011', '101010010101', '101100101010', '101101010101', '010101011100',\n // 1420-1424\n '010010111101', '001000111101', '100100011101', '101010010101', '101101001010',\n // 1425-1429\n '101101011010', '010101101101', '001010110110', '100100111011', '010010011011',\n // 1430-1434\n '011001010101', '011010101001', '011101010100', '101101101010', '010101101100',\n // 1435-1439\n '101010101101', '010101010101', '101100101001', '101110010010', '101110101001',\n // 1440-1444\n '010111010100', '101011011010', '010101011010', '101010101011', '010110010101',\n // 1445-1449\n '011101001001', '011101100100', '101110101010', '010110110101', '001010110110',\n // 1450-1454\n '101001010110', '111001001101', '101100100101', '101101010010', '101101101010',\n // 1455-1459\n '010110101101', '001010101110', '100100101111', '010010010111', '011001001011',\n // 1460-1464\n '011010100101', '011010101100', '101011010110', '010101011101', '010010011101',\n // 1465-1469\n '101001001101', '110100010110', '110110010101', '010110101010', '010110110101',\n // 1470-1474\n '001011011010', '100101011011', '010010101101', '010110010101', '011011001010',\n // 1475-1479\n '011011100100', '101011101010', '010011110101', '001010110110', '100101010110',\n // 1480-1484\n '101010101010', '101101010100', '101111010010', '010111011001', '001011101010',\n // 1485-1489\n '100101101101', '010010101101', '101010010101', '101101001010', '101110100101',\n // 1490-1494\n '010110110010', '100110110101', '010011010110', '101010010111', '010101000111',\n // 1495-1499\n '011010010011', '011101001001', '101101010101', '010101101010', '101001101011',\n // 1500-1504\n '010100101011', '101010001011', '110101000110', '110110100011', '010111001010',\n // 1505-1509\n '101011010110', '010011011011', '001001101011', '100101001011', '101010100101',\n // 1510-1514\n '101101010010', '101101101001', '010101110101', '000101110110', '100010110111',\n // 1515-1519\n '001001011011', '010100101011', '010101100101', '010110110100', '100111011010',\n // 1520-1524\n '010011101101', '000101101101', '100010110110', '101010100110', '110101010010',\n // 1525-1529\n '110110101001', '010111010100', '101011011010', '100101011011', '010010101011',\n // 1530-1534\n '011001010011', '011100101001', '011101100010', '101110101001', '010110110010',\n // 1535-1539\n '101010110101', '010101010101', '101100100101', '110110010010', '111011001001',\n // 1540-1544\n '011011010010', '101011101001', '010101101011', '010010101011', '101001010101',\n // 1545-1549\n '110100101001', '110101010100', '110110101010', '100110110101', '010010111010',\n // 1550-1554\n '101000111011', '010010011011', '101001001101', '101010101010', '101011010101',\n // 1555-1559\n '001011011010', '100101011101', '010001011110', '101000101110', '110010011010',\n // 1560-1564\n '110101010101', '011010110010', '011010111001', '010010111010', '101001011101',\n // 1565-1569\n '010100101101', '101010010101', '101101010010', '101110101000', '101110110100',\n // 1570-1574\n '010110111001', '001011011010', '100101011010', '101101001010', '110110100100',\n // 1575-1579\n '111011010001', '011011101000', '101101101010', '010101101101', '010100110101',\n // 1580-1584\n '011010010101', '110101001010', '110110101000', '110111010100', '011011011010',\n // 1585-1589\n '010101011011', '001010011101', '011000101011', '101100010101', '101101001010',\n // 1590-1594\n '101110010101', '010110101010', '101010101110', '100100101110', '110010001111',\n // 1595-1599\n '010100100111', '011010010101', '011010101010', '101011010110', '010101011101',\n // 1600\n '001010011101'\n];\n\nfunction getDaysDiff(date1: Date, date2: Date): number {\n // Ignores the time part in date1 and date2:\n const time1 = Date.UTC(date1.getFullYear(), date1.getMonth(), date1.getDate());\n const time2 = Date.UTC(date2.getFullYear(), date2.getMonth(), date2.getDate());\n const diff = Math.abs(time1 - time2);\n return Math.round(diff / ONE_DAY);\n}\n\n@Injectable()\nexport class NgbCalendarIslamicUmalqura extends NgbCalendarIslamicCivil {\n /**\n * Returns the equivalent islamic(Umalqura) date value for a give input Gregorian date.\n * `gdate` is s JS Date to be converted to Hijri.\n */\n fromGregorian(gDate: Date): NgbDate {\n let hDay = 1, hMonth = 0, hYear = 1300;\n let daysDiff = getDaysDiff(gDate, GREGORIAN_FIRST_DATE);\n if (gDate.getTime() - GREGORIAN_FIRST_DATE.getTime() >= 0 && gDate.getTime() - GREGORIAN_LAST_DATE.getTime() <= 0) {\n let year = 1300;\n for (let i = 0; i < MONTH_LENGTH.length; i++, year++) {\n for (let j = 0; j < 12; j++) {\n let numOfDays = +MONTH_LENGTH[i][j] + 29;\n if (daysDiff <= numOfDays) {\n hDay = daysDiff + 1;\n if (hDay > numOfDays) {\n hDay = 1;\n j++;\n }\n if (j > 11) {\n j = 0;\n year++;\n }\n hMonth = j;\n hYear = year;\n return new NgbDate(hYear, hMonth + 1, hDay);\n }\n daysDiff = daysDiff - numOfDays;\n }\n }\n } else {\n return super.fromGregorian(gDate);\n }\n }\n /**\n * Converts the current Hijri date to Gregorian.\n */\n toGregorian(hDate: NgbDate): Date {\n const hYear = hDate.year;\n const hMonth = hDate.month - 1;\n const hDay = hDate.day;\n let gDate = new Date(GREGORIAN_FIRST_DATE);\n let dayDiff = hDay - 1;\n if (hYear >= HIJRI_BEGIN && hYear <= HIJRI_END) {\n for (let y = 0; y < hYear - HIJRI_BEGIN; y++) {\n for (let m = 0; m < 12; m++) {\n dayDiff += +MONTH_LENGTH[y][m] + 29;\n }\n }\n for (let m = 0; m < hMonth; m++) {\n dayDiff += +MONTH_LENGTH[hYear - HIJRI_BEGIN][m] + 29;\n }\n gDate.setDate(GREGORIAN_FIRST_DATE.getDate() + dayDiff);\n } else {\n gDate = super.toGregorian(hDate);\n }\n return gDate;\n }\n /**\n * Returns the number of days in a specific Hijri hMonth.\n * `hMonth` is 1 for Muharram, 2 for Safar, etc.\n * `hYear` is any Hijri hYear.\n */\n getDaysPerMonth(hMonth: number, hYear: number): number {\n if (hYear >= HIJRI_BEGIN && hYear <= HIJRI_END) {\n const pos = hYear - HIJRI_BEGIN;\n return +MONTH_LENGTH[pos][hMonth - 1] + 29;\n }\n return super.getDaysPerMonth(hMonth, hYear);\n }\n}\n","import {NgbDate} from '../ngb-date';\n\n/**\n * Returns the equivalent JS date value for a give input Jalali date.\n * `jalaliDate` is an Jalali date to be converted to Gregorian.\n */\nexport function toGregorian(jalaliDate: NgbDate): Date {\n let jdn = jalaliToJulian(jalaliDate.year, jalaliDate.month, jalaliDate.day);\n let date = julianToGregorian(jdn);\n date.setHours(6, 30, 3, 200);\n return date;\n}\n\n/**\n * Returns the equivalent jalali date value for a give input Gregorian date.\n * `gdate` is a JS Date to be converted to jalali.\n * utc to local\n */\nexport function fromGregorian(gdate: Date): NgbDate {\n let g2d = gregorianToJulian(gdate.getFullYear(), gdate.getMonth() + 1, gdate.getDate());\n return julianToJalali(g2d);\n}\n\nexport function setJalaliYear(date: NgbDate, yearValue: number): NgbDate {\n date.year = +yearValue;\n return date;\n}\n\nexport function setJalaliMonth(date: NgbDate, month: number): NgbDate {\n month = +month;\n date.year = date.year + Math.floor((month - 1) / 12);\n date.month = Math.floor(((month - 1) % 12 + 12) % 12) + 1;\n return date;\n}\n\nexport function setJalaliDay(date: NgbDate, day: number): NgbDate {\n let mDays = getDaysPerMonth(date.month, date.year);\n if (day <= 0) {\n while (day <= 0) {\n date = setJalaliMonth(date, date.month - 1);\n mDays = getDaysPerMonth(date.month, date.year);\n day += mDays;\n }\n } else if (day > mDays) {\n while (day > mDays) {\n day -= mDays;\n date = setJalaliMonth(date, date.month + 1);\n mDays = getDaysPerMonth(date.month, date.year);\n }\n }\n date.day = day;\n return date;\n}\n\nfunction mod(a: number, b: number): number {\n return a - b * Math.floor(a / b);\n}\n\nfunction div(a: number, b: number) {\n return Math.trunc(a / b);\n}\n\n/*\n This function determines if the Jalali (Persian) year is\n leap (366-day long) or is the common year (365 days), and\n finds the day in March (Gregorian calendar) of the first\n day of the Jalali year (jalaliYear).\n @param jalaliYear Jalali calendar year (-61 to 3177)\n @return\n leap: number of years since the last leap year (0 to 4)\n gYear: Gregorian year of the beginning of Jalali year\n march: the March day of Farvardin the 1st (1st day of jalaliYear)\n @see: http://www.astro.uni.torun.pl/~kb/Papers/EMP/PersianC-EMP.htm\n @see: http://www.fourmilab.ch/documents/calendar/\n */\nfunction jalCal(jalaliYear: number) {\n // Jalali years starting the 33-year rule.\n let breaks =\n [-61, 9, 38, 199, 426, 686, 756, 818, 1111, 1181, 1210, 1635, 2060, 2097, 2192, 2262, 2324, 2394, 2456, 3178];\n const breaksLength = breaks.length;\n const gYear = jalaliYear + 621;\n let leapJ = -14;\n let jp = breaks[0];\n\n if (jalaliYear < jp || jalaliYear >= breaks[breaksLength - 1]) {\n throw new Error('Invalid Jalali year ' + jalaliYear);\n }\n\n // Find the limiting years for the Jalali year jalaliYear.\n let jump;\n for (let i = 1; i < breaksLength; i += 1) {\n const jm = breaks[i];\n jump = jm - jp;\n if (jalaliYear < jm) {\n break;\n }\n leapJ = leapJ + div(jump, 33) * 8 + div(mod(jump, 33), 4);\n jp = jm;\n }\n let n = jalaliYear - jp;\n\n // Find the number of leap years from AD 621 to the beginning\n // of the current Jalali year in the Persian calendar.\n leapJ = leapJ + div(n, 33) * 8 + div(mod(n, 33) + 3, 4);\n if (mod(jump, 33) === 4 && jump - n === 4) {\n leapJ += 1;\n }\n\n // And the same in the Gregorian calendar (until the year gYear).\n const leapG = div(gYear, 4) - div((div(gYear, 100) + 1) * 3, 4) - 150;\n\n // Determine the Gregorian date of Farvardin the 1st.\n const march = 20 + leapJ - leapG;\n\n // Find how many years have passed since the last leap year.\n if (jump - n < 6) {\n n = n - jump + div(jump + 4, 33) * 33;\n }\n let leap = mod(mod(n + 1, 33) - 1, 4);\n if (leap === -1) {\n leap = 4;\n }\n\n return {leap: leap, gy: gYear, march: march};\n}\n\n/*\n Calculates Gregorian and Julian calendar dates from the Julian Day number\n (jdn) for the period since jdn=-34839655 (i.e. the year -100100 of both\n calendars) to some millions years ahead of the present.\n @param jdn Julian Day number\n @return\n gYear: Calendar year (years BC numbered 0, -1, -2, ...)\n gMonth: Calendar month (1 to 12)\n gDay: Calendar day of the month M (1 to 28/29/30/31)\n */\nfunction julianToGregorian(julianDayNumber: number) {\n let j = 4 * julianDayNumber + 139361631;\n j = j + div(div(4 * julianDayNumber + 183187720, 146097) * 3, 4) * 4 - 3908;\n const i = div(mod(j, 1461), 4) * 5 + 308;\n const gDay = div(mod(i, 153), 5) + 1;\n const gMonth = mod(div(i, 153), 12) + 1;\n const gYear = div(j, 1461) - 100100 + div(8 - gMonth, 6);\n\n return new Date(gYear, gMonth - 1, gDay);\n}\n\n/*\n Converts a date of the Jalali calendar to the Julian Day number.\n @param jy Jalali year (1 to 3100)\n @param jm Jalali month (1 to 12)\n @param jd Jalali day (1 to 29/31)\n @return Julian Day number\n */\nfunction gregorianToJulian(gy: number, gm: number, gd: number) {\n let d = div((gy + div(gm - 8, 6) + 100100) * 1461, 4) + div(153 * mod(gm + 9, 12) + 2, 5) + gd - 34840408;\n d = d - div(div(gy + 100100 + div(gm - 8, 6), 100) * 3, 4) + 752;\n return d;\n}\n\n/*\n Converts the Julian Day number to a date in the Jalali calendar.\n @param julianDayNumber Julian Day number\n @return\n jalaliYear: Jalali year (1 to 3100)\n jalaliMonth: Jalali month (1 to 12)\n jalaliDay: Jalali day (1 to 29/31)\n */\nfunction julianToJalali(julianDayNumber: number) {\n let gy = julianToGregorian(julianDayNumber).getFullYear() // Calculate Gregorian year (gy).\n ,\n jalaliYear = gy - 621, r = jalCal(jalaliYear), gregorianDay = gregorianToJulian(gy, 3, r.march), jalaliDay,\n jalaliMonth, numberOfDays;\n\n // Find number of days that passed since 1 Farvardin.\n numberOfDays = julianDayNumber - gregorianDay;\n if (numberOfDays >= 0) {\n if (numberOfDays <= 185) {\n // The first 6 months.\n jalaliMonth = 1 + div(numberOfDays, 31);\n jalaliDay = mod(numberOfDays, 31) + 1;\n return new NgbDate(jalaliYear, jalaliMonth, jalaliDay);\n } else {\n // The remaining months.\n numberOfDays -= 186;\n }\n } else {\n // Previous Jalali year.\n jalaliYear -= 1;\n numberOfDays += 179;\n if (r.leap === 1) {\n numberOfDays += 1;\n }\n }\n jalaliMonth = 7 + div(numberOfDays, 30);\n jalaliDay = mod(numberOfDays, 30) + 1;\n\n return new NgbDate(jalaliYear, jalaliMonth, jalaliDay);\n}\n\n/*\n Converts a date of the Jalali calendar to the Julian Day number.\n @param jYear Jalali year (1 to 3100)\n @param jMonth Jalali month (1 to 12)\n @param jDay Jalali day (1 to 29/31)\n @return Julian Day number\n */\nfunction jalaliToJulian(jYear: number, jMonth: number, jDay: number) {\n let r = jalCal(jYear);\n return gregorianToJulian(r.gy, 3, r.march) + (jMonth - 1) * 31 - div(jMonth, 7) * (jMonth - 7) + jDay - 1;\n}\n\n/**\n * Returns the number of days in a specific jalali month.\n */\nfunction getDaysPerMonth(month: number, year: number): number {\n if (month <= 6) {\n return 31;\n }\n if (month <= 11) {\n return 30;\n }\n if (jalCal(year).leap === 0) {\n return 30;\n }\n return 29;\n}\n","import {Injectable} from '@angular/core';\nimport {NgbDate} from '../ngb-date';\nimport {NgbCalendar, NgbPeriod} from '../ngb-calendar';\nimport {isInteger} from '../../util/util';\n\nimport {fromGregorian, setJalaliDay, setJalaliMonth, setJalaliYear, toGregorian} from './jalali';\n\n@Injectable()\nexport class NgbCalendarPersian extends NgbCalendar {\n getDaysPerWeek() { return 7; }\n\n getMonths() { return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; }\n\n getWeeksPerMonth() { return 6; }\n\n getNext(date: NgbDate, period: NgbPeriod = 'd', number = 1) {\n date = new NgbDate(date.year, date.month, date.day);\n\n switch (period) {\n case 'y':\n date = setJalaliYear(date, date.year + number);\n date.month = 1;\n date.day = 1;\n return date;\n case 'm':\n date = setJalaliMonth(date, date.month + number);\n date.day = 1;\n return date;\n case 'd':\n return setJalaliDay(date, date.day + number);\n default:\n return date;\n }\n }\n\n getPrev(date: NgbDate, period: NgbPeriod = 'd', number = 1) { return this.getNext(date, period, -number); }\n\n getWeekday(date: NgbDate) {\n const day = toGregorian(date).getDay();\n // in JS Date Sun=0, in ISO 8601 Sun=7\n return day === 0 ? 7 : day;\n }\n\n getWeekNumber(week: NgbDate[], firstDayOfWeek: number) {\n // in JS Date Sun=0, in ISO 8601 Sun=7\n if (firstDayOfWeek === 7) {\n firstDayOfWeek = 0;\n }\n\n const thursdayIndex = (4 + 7 - firstDayOfWeek) % 7;\n const date = week[thursdayIndex];\n\n const jsDate = toGregorian(date);\n jsDate.setDate(jsDate.getDate() + 4 - (jsDate.getDay() || 7)); // Thursday\n const time = jsDate.getTime();\n const startDate = toGregorian(new NgbDate(date.year, 1, 1));\n return Math.floor(Math.round((time - startDate.getTime()) / 86400000) / 7) + 1;\n }\n\n getToday(): NgbDate { return fromGregorian(new Date()); }\n\n isValid(date: NgbDate): boolean {\n return date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day) &&\n !isNaN(toGregorian(date).getTime());\n }\n}\n","import {NgbDate} from '../ngb-date';\nimport {NgbDateStruct} from '../ngb-date-struct';\n\nconst PARTS_PER_HOUR = 1080;\nconst PARTS_PER_DAY = 24 * PARTS_PER_HOUR;\nconst PARTS_FRACTIONAL_MONTH = 12 * PARTS_PER_HOUR + 793;\nconst PARTS_PER_MONTH = 29 * PARTS_PER_DAY + PARTS_FRACTIONAL_MONTH;\nconst BAHARAD = 11 * PARTS_PER_HOUR + 204;\nconst HEBREW_DAY_ON_JAN_1_1970 = 2092591;\nconst GREGORIAN_EPOCH = 1721425.5;\n\nfunction isGregorianLeapYear(year: number): boolean {\n return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;\n}\n\nfunction numberOfFirstDayInYear(year: number): number {\n let monthsBeforeYear = Math.floor((235 * year - 234) / 19);\n let fractionalMonthsBeforeYear = monthsBeforeYear * PARTS_FRACTIONAL_MONTH + BAHARAD;\n let dayNumber = monthsBeforeYear * 29 + Math.floor(fractionalMonthsBeforeYear / PARTS_PER_DAY);\n let timeOfDay = fractionalMonthsBeforeYear % PARTS_PER_DAY;\n\n let dayOfWeek = dayNumber % 7; // 0 == Monday\n\n if (dayOfWeek === 2 || dayOfWeek === 4 || dayOfWeek === 6) {\n dayNumber++;\n dayOfWeek = dayNumber % 7;\n }\n if (dayOfWeek === 1 && timeOfDay > 15 * PARTS_PER_HOUR + 204 && !isHebrewLeapYear(year)) {\n dayNumber += 2;\n } else if (dayOfWeek === 0 && timeOfDay > 21 * PARTS_PER_HOUR + 589 && isHebrewLeapYear(year - 1)) {\n dayNumber++;\n }\n return dayNumber;\n}\n\nfunction getDaysInGregorianMonth(month: number, year: number): number {\n let days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n if (isGregorianLeapYear(year)) {\n days[1]++;\n }\n return days[month - 1];\n}\n\nfunction getHebrewMonths(year: number): number {\n return isHebrewLeapYear(year) ? 13 : 12;\n}\n\n/**\n * Returns the number of days in a specific Hebrew year.\n * `year` is any Hebrew year.\n */\nfunction getDaysInHebrewYear(year: number): number {\n return numberOfFirstDayInYear(year + 1) - numberOfFirstDayInYear(year);\n}\n\nexport function isHebrewLeapYear(year: number): boolean {\n let b = (year * 12 + 17) % 19;\n return b >= ((b < 0) ? -7 : 12);\n}\n\n/**\n * Returns the number of days in a specific Hebrew month.\n * `month` is 1 for Nisan, 2 for Iyar etc. Note: Hebrew leap year contains 13 months.\n * `year` is any Hebrew year.\n */\nexport function getDaysInHebrewMonth(month: number, year: number): number {\n let yearLength = numberOfFirstDayInYear(year + 1) - numberOfFirstDayInYear(year);\n let yearType = (yearLength <= 380 ? yearLength : (yearLength - 30)) - 353;\n let leapYear = isHebrewLeapYear(year);\n let daysInMonth = leapYear ? [30, 29, 29, 29, 30, 30, 29, 30, 29, 30, 29, 30, 29] :\n [30, 29, 29, 29, 30, 29, 30, 29, 30, 29, 30, 29];\n if (yearType > 0) {\n daysInMonth[2]++; // Kislev gets an extra day in normal or complete years.\n }\n if (yearType > 1) {\n daysInMonth[1]++; // Heshvan gets an extra day in complete years only.\n }\n return daysInMonth[month - 1];\n}\n\nexport function getDayNumberInHebrewYear(date: NgbDate): number {\n let numberOfDay = 0;\n for (let i = 1; i < date.month; i++) {\n numberOfDay += getDaysInHebrewMonth(i, date.year);\n }\n return numberOfDay + date.day;\n}\n\nexport function setHebrewMonth(date: NgbDate, val: number): NgbDate {\n let after = val >= 0;\n if (!after) {\n val = -val;\n }\n while (val > 0) {\n if (after) {\n if (val > getHebrewMonths(date.year) - date.month) {\n val -= getHebrewMonths(date.year) - date.month + 1;\n date.year++;\n date.month = 1;\n } else {\n date.month += val;\n val = 0;\n }\n } else {\n if (val >= date.month) {\n date.year--;\n val -= date.month;\n date.month = getHebrewMonths(date.year);\n } else {\n date.month -= val;\n val = 0;\n }\n }\n }\n return date;\n}\n\nexport function setHebrewDay(date: NgbDate, val: number): NgbDate {\n let after = val >= 0;\n if (!after) {\n val = -val;\n }\n while (val > 0) {\n if (after) {\n if (val > getDaysInHebrewYear(date.year) - getDayNumberInHebrewYear(date)) {\n val -= getDaysInHebrewYear(date.year) - getDayNumberInHebrewYear(date) + 1;\n date.year++;\n date.month = 1;\n date.day = 1;\n } else if (val > getDaysInHebrewMonth(date.month, date.year) - date.day) {\n val -= getDaysInHebrewMonth(date.month, date.year) - date.day + 1;\n date.month++;\n date.day = 1;\n } else {\n date.day += val;\n val = 0;\n }\n } else {\n if (val >= date.day) {\n val -= date.day;\n date.month--;\n if (date.month === 0) {\n date.year--;\n date.month = getHebrewMonths(date.year);\n }\n date.day = getDaysInHebrewMonth(date.month, date.year);\n } else {\n date.day -= val;\n val = 0;\n }\n }\n }\n return date;\n}\n\n/**\n * Returns the equivalent Hebrew date value for a give input Gregorian date.\n * `gdate` is a JS Date to be converted to Hebrew date.\n */\nexport function fromGregorian(gdate: Date): NgbDate {\n const date = new Date(gdate);\n const gYear = date.getFullYear(), gMonth = date.getMonth(), gDay = date.getDate();\n let julianDay = GREGORIAN_EPOCH - 1 + 365 * (gYear - 1) + Math.floor((gYear - 1) / 4) -\n Math.floor((gYear - 1) / 100) + Math.floor((gYear - 1) / 400) +\n Math.floor((367 * (gMonth + 1) - 362) / 12 + (gMonth + 1 <= 2 ? 0 : isGregorianLeapYear(gYear) ? -1 : -2) + gDay);\n julianDay = Math.floor(julianDay + 0.5);\n let daysSinceHebEpoch = julianDay - 347997;\n let monthsSinceHebEpoch = Math.floor(daysSinceHebEpoch * PARTS_PER_DAY / PARTS_PER_MONTH);\n let hYear = Math.floor((monthsSinceHebEpoch * 19 + 234) / 235) + 1;\n let firstDayOfThisYear = numberOfFirstDayInYear(hYear);\n let dayOfYear = daysSinceHebEpoch - firstDayOfThisYear;\n while (dayOfYear < 1) {\n hYear--;\n firstDayOfThisYear = numberOfFirstDayInYear(hYear);\n dayOfYear = daysSinceHebEpoch - firstDayOfThisYear;\n }\n let hMonth = 1;\n let hDay = dayOfYear;\n while (hDay > getDaysInHebrewMonth(hMonth, hYear)) {\n hDay -= getDaysInHebrewMonth(hMonth, hYear);\n hMonth++;\n }\n return new NgbDate(hYear, hMonth, hDay);\n}\n\n/**\n * Returns the equivalent JS date value for a given Hebrew date.\n * `hebrewDate` is an Hebrew date to be converted to Gregorian.\n */\nexport function toGregorian(hebrewDate: NgbDateStruct | NgbDate): Date {\n const hYear = hebrewDate.year;\n const hMonth = hebrewDate.month;\n const hDay = hebrewDate.day;\n let days = numberOfFirstDayInYear(hYear);\n for (let i = 1; i < hMonth; i++) {\n days += getDaysInHebrewMonth(i, hYear);\n }\n days += hDay;\n let diffDays = days - HEBREW_DAY_ON_JAN_1_1970;\n let after = diffDays >= 0;\n if (!after) {\n diffDays = -diffDays;\n }\n let gYear = 1970;\n let gMonth = 1;\n let gDay = 1;\n while (diffDays > 0) {\n if (after) {\n if (diffDays >= (isGregorianLeapYear(gYear) ? 366 : 365)) {\n diffDays -= isGregorianLeapYear(gYear) ? 366 : 365;\n gYear++;\n } else if (diffDays >= getDaysInGregorianMonth(gMonth, gYear)) {\n diffDays -= getDaysInGregorianMonth(gMonth, gYear);\n gMonth++;\n } else {\n gDay += diffDays;\n diffDays = 0;\n }\n } else {\n if (diffDays >= (isGregorianLeapYear(gYear - 1) ? 366 : 365)) {\n diffDays -= isGregorianLeapYear(gYear - 1) ? 366 : 365;\n gYear--;\n } else {\n if (gMonth > 1) {\n gMonth--;\n } else {\n gMonth = 12;\n gYear--;\n }\n if (diffDays >= getDaysInGregorianMonth(gMonth, gYear)) {\n diffDays -= getDaysInGregorianMonth(gMonth, gYear);\n } else {\n gDay = getDaysInGregorianMonth(gMonth, gYear) - diffDays + 1;\n diffDays = 0;\n }\n }\n }\n }\n return new Date(gYear, gMonth - 1, gDay);\n}\n\nexport function hebrewNumerals(numerals: number): string {\n if (!numerals) {\n return '';\n }\n const hArray0_9 = ['', '\\u05d0', '\\u05d1', '\\u05d2', '\\u05d3', '\\u05d4', '\\u05d5', '\\u05d6', '\\u05d7', '\\u05d8'];\n const hArray10_19 = [\n '\\u05d9', '\\u05d9\\u05d0', '\\u05d9\\u05d1', '\\u05d9\\u05d2', '\\u05d9\\u05d3', '\\u05d8\\u05d5', '\\u05d8\\u05d6',\n '\\u05d9\\u05d6', '\\u05d9\\u05d7', '\\u05d9\\u05d8'\n ];\n const hArray20_90 = ['', '', '\\u05db', '\\u05dc', '\\u05de', '\\u05e0', '\\u05e1', '\\u05e2', '\\u05e4', '\\u05e6'];\n const hArray100_900 = [\n '', '\\u05e7', '\\u05e8', '\\u05e9', '\\u05ea', '\\u05ea\\u05e7', '\\u05ea\\u05e8', '\\u05ea\\u05e9', '\\u05ea\\u05ea',\n '\\u05ea\\u05ea\\u05e7'\n ];\n const hArray1000_9000 = [\n '', '\\u05d0', '\\u05d1', '\\u05d1\\u05d0', '\\u05d1\\u05d1', '\\u05d4', '\\u05d4\\u05d0', '\\u05d4\\u05d1',\n '\\u05d4\\u05d1\\u05d0', '\\u05d4\\u05d1\\u05d1'\n ];\n const geresh = '\\u05f3', gershaim = '\\u05f4';\n let mem = 0;\n let result = [];\n let step = 0;\n while (numerals > 0) {\n let m = numerals % 10;\n if (step === 0) {\n mem = m;\n } else if (step === 1) {\n if (m !== 1) {\n result.unshift(hArray20_90[m], hArray0_9[mem]);\n } else {\n result.unshift(hArray10_19[mem]);\n }\n } else if (step === 2) {\n result.unshift(hArray100_900[m]);\n } else {\n if (m !== 5) {\n result.unshift(hArray1000_9000[m], geresh, ' ');\n }\n break;\n }\n numerals = Math.floor(numerals / 10);\n if (step === 0 && numerals === 0) {\n result.unshift(hArray0_9[m]);\n }\n step++;\n }\n result = result.join('').split('');\n if (result.length === 1) {\n result.push(geresh);\n } else if (result.length > 1) {\n result.splice(result.length - 1, 0, gershaim);\n }\n return result.join('');\n}\n","import {NgbDate} from '../ngb-date';\nimport {fromJSDate, NgbCalendar, NgbPeriod, toJSDate} from '../ngb-calendar';\nimport {Injectable} from '@angular/core';\nimport {isNumber} from '../../util/util';\nimport {\n fromGregorian,\n getDayNumberInHebrewYear,\n getDaysInHebrewMonth,\n isHebrewLeapYear,\n toGregorian,\n setHebrewDay,\n setHebrewMonth\n} from './hebrew';\n\n/**\n * @since 3.2.0\n */\n@Injectable()\nexport class NgbCalendarHebrew extends NgbCalendar {\n getDaysPerWeek() { return 7; }\n\n getMonths(year?: number) {\n if (year && isHebrewLeapYear(year)) {\n return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13];\n } else {\n return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];\n }\n }\n\n getWeeksPerMonth() { return 6; }\n\n isValid(date: NgbDate): boolean {\n let b = date && isNumber(date.year) && isNumber(date.month) && isNumber(date.day);\n b = b && date.month > 0 && date.month <= (isHebrewLeapYear(date.year) ? 13 : 12);\n b = b && date.day > 0 && date.day <= getDaysInHebrewMonth(date.month, date.year);\n return b && !isNaN(toGregorian(date).getTime());\n }\n\n getNext(date: NgbDate, period: NgbPeriod = 'd', number = 1) {\n date = new NgbDate(date.year, date.month, date.day);\n\n switch (period) {\n case 'y':\n date.year += number;\n date.month = 1;\n date.day = 1;\n return date;\n case 'm':\n date = setHebrewMonth(date, number);\n date.day = 1;\n return date;\n case 'd':\n return setHebrewDay(date, number);\n default:\n return date;\n }\n }\n\n getPrev(date: NgbDate, period: NgbPeriod = 'd', number = 1) { return this.getNext(date, period, -number); }\n\n getWeekday(date: NgbDate) {\n const day = toGregorian(date).getDay();\n // in JS Date Sun=0, in ISO 8601 Sun=7\n return day === 0 ? 7 : day;\n }\n\n getWeekNumber(week: NgbDate[], firstDayOfWeek: number) {\n const date = week[week.length - 1];\n return Math.ceil(getDayNumberInHebrewYear(date) / 7);\n }\n\n getToday(): NgbDate { return fromGregorian(new Date()); }\n\n /**\n * @since 3.4.0\n */\n toGregorian(date: NgbDate): NgbDate { return fromJSDate(toGregorian(date)); }\n\n /**\n * @since 3.4.0\n */\n fromGregorian(date: NgbDate): NgbDate { return fromGregorian(toJSDate(date)); }\n}\n","import {NgbDatepickerI18n} from '../datepicker-i18n';\nimport {NgbDateStruct} from '../../index';\nimport {hebrewNumerals, isHebrewLeapYear} from './hebrew';\nimport {Injectable} from '@angular/core';\n\n\nconst WEEKDAYS = ['שני', 'שלישי', 'רביעי', 'חמישי', 'שישי', 'שבת', 'ראשון'];\nconst MONTHS = ['תשרי', 'חשון', 'כסלו', 'טבת', 'שבט', 'אדר', 'ניסן', 'אייר', 'סיון', 'תמוז', 'אב', 'אלול'];\nconst MONTHS_LEAP =\n ['תשרי', 'חשון', 'כסלו', 'טבת', 'שבט', 'אדר א׳', 'אדר ב׳', 'ניסן', 'אייר', 'סיון', 'תמוז', 'אב', 'אלול'];\n\n/**\n * @since 3.2.0\n */\n@Injectable()\nexport class NgbDatepickerI18nHebrew extends NgbDatepickerI18n {\n getMonthShortName(month: number, year?: number): string { return this.getMonthFullName(month, year); }\n\n getMonthFullName(month: number, year?: number): string {\n return isHebrewLeapYear(year) ? MONTHS_LEAP[month - 1] : MONTHS[month - 1];\n }\n\n getWeekdayShortName(weekday: number): string { return WEEKDAYS[weekday - 1]; }\n\n getDayAriaLabel(date: NgbDateStruct): string {\n return `${hebrewNumerals(date.day)} ${this.getMonthFullName(date.month, date.year)} ${hebrewNumerals(date.year)}`;\n }\n\n getDayNumerals(date: NgbDateStruct): string { return hebrewNumerals(date.day); }\n\n getWeekNumerals(weekNumber: number): string { return hebrewNumerals(weekNumber); }\n\n getYearNumerals(year: number): string { return hebrewNumerals(year); }\n}\n","import {Injectable} from '@angular/core';\nimport {NgbDateAdapter} from './ngb-date-adapter';\nimport {NgbDateStruct} from '../ngb-date-struct';\nimport {isInteger} from '../../util/util';\n\n/**\n * [`NgbDateAdapter`](#/components/datepicker/api#NgbDateAdapter) implementation that uses\n * native javascript dates as a user date model.\n */\n@Injectable()\nexport class NgbDateNativeAdapter extends NgbDateAdapter {\n /**\n * Converts a native `Date` to a `NgbDateStruct`.\n */\n fromModel(date: Date): NgbDateStruct {\n return (date instanceof Date && !isNaN(date.getTime())) ? this._fromNativeDate(date) : null;\n }\n\n /**\n * Converts a `NgbDateStruct` to a native `Date`.\n */\n toModel(date: NgbDateStruct): Date {\n return date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day) ? this._toNativeDate(date) :\n null;\n }\n\n protected _fromNativeDate(date: Date): NgbDateStruct {\n return {year: date.getFullYear(), month: date.getMonth() + 1, day: date.getDate()};\n }\n\n protected _toNativeDate(date: NgbDateStruct): Date {\n const jsDate = new Date(date.year, date.month - 1, date.day, 12);\n // avoid 30 -> 1930 conversion\n jsDate.setFullYear(date.year);\n return jsDate;\n }\n}\n","import {Injectable} from '@angular/core';\nimport {NgbDateStruct} from '../ngb-date-struct';\nimport {NgbDateNativeAdapter} from './ngb-date-native-adapter';\n\n/**\n * Same as [`NgbDateNativeAdapter`](#/components/datepicker/api#NgbDateNativeAdapter), but with UTC dates.\n *\n * @since 3.2.0\n */\n@Injectable()\nexport class NgbDateNativeUTCAdapter extends NgbDateNativeAdapter {\n protected _fromNativeDate(date: Date): NgbDateStruct {\n return {year: date.getUTCFullYear(), month: date.getUTCMonth() + 1, day: date.getUTCDate()};\n }\n\n protected _toNativeDate(date: NgbDateStruct): Date {\n const jsDate = new Date(Date.UTC(date.year, date.month - 1, date.day));\n // avoid 30 -> 1930 conversion\n jsDate.setUTCFullYear(date.year);\n return jsDate;\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FormsModule} from '@angular/forms';\nimport {NgbDatepicker} from './datepicker';\nimport {NgbDatepickerMonthView} from './datepicker-month-view';\nimport {NgbDatepickerNavigation} from './datepicker-navigation';\nimport {NgbInputDatepicker} from './datepicker-input';\nimport {NgbDatepickerDayView} from './datepicker-day-view';\nimport {NgbDatepickerNavigationSelect} from './datepicker-navigation-select';\n\nexport {NgbDatepicker, NgbDatepickerNavigateEvent} from './datepicker';\nexport {NgbInputDatepicker} from './datepicker-input';\nexport {NgbCalendar, NgbPeriod, NgbCalendarGregorian} from './ngb-calendar';\nexport {NgbCalendarIslamicCivil} from './hijri/ngb-calendar-islamic-civil';\nexport {NgbCalendarIslamicUmalqura} from './hijri/ngb-calendar-islamic-umalqura';\nexport {NgbCalendarPersian} from './jalali/ngb-calendar-persian';\nexport {NgbCalendarHebrew} from './hebrew/ngb-calendar-hebrew';\nexport {NgbDatepickerI18nHebrew} from './hebrew/datepicker-i18n-hebrew';\nexport {NgbDatepickerMonthView} from './datepicker-month-view';\nexport {NgbDatepickerDayView} from './datepicker-day-view';\nexport {NgbDatepickerNavigation} from './datepicker-navigation';\nexport {NgbDatepickerNavigationSelect} from './datepicker-navigation-select';\nexport {NgbDatepickerConfig} from './datepicker-config';\nexport {NgbDatepickerI18n} from './datepicker-i18n';\nexport {NgbDateStruct} from './ngb-date-struct';\nexport {NgbDate} from './ngb-date';\nexport {NgbDateAdapter} from './adapters/ngb-date-adapter';\nexport {NgbDateNativeAdapter} from './adapters/ngb-date-native-adapter';\nexport {NgbDateNativeUTCAdapter} from './adapters/ngb-date-native-utc-adapter';\nexport {NgbDateParserFormatter} from './ngb-date-parser-formatter';\n\n@NgModule({\n declarations: [\n NgbDatepicker, NgbDatepickerMonthView, NgbDatepickerNavigation, NgbDatepickerNavigationSelect, NgbDatepickerDayView,\n NgbInputDatepicker\n ],\n exports: [NgbDatepicker, NgbInputDatepicker],\n imports: [CommonModule, FormsModule],\n entryComponents: [NgbDatepicker]\n})\nexport class NgbDatepickerModule {\n}\n","import {Injectable} from '@angular/core';\nimport {PlacementArray} from '../util/positioning';\n\n/**\n * A configuration service for the [`NgbDropdown`](#/components/dropdown/api#NgbDropdown) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the dropdowns used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbDropdownConfig {\n autoClose: boolean | 'outside' | 'inside' = true;\n placement: PlacementArray = ['bottom-left', 'bottom-right', 'top-left', 'top-right'];\n container: null | 'body';\n}\n","import {\n ChangeDetectorRef,\n ContentChild,\n ContentChildren,\n Directive,\n ElementRef,\n EventEmitter,\n forwardRef,\n Inject,\n Input,\n NgZone,\n AfterContentInit,\n OnDestroy,\n Output,\n QueryList,\n Renderer2,\n SimpleChanges,\n Optional\n} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\nimport {Subject, Subscription} from 'rxjs';\nimport {take} from 'rxjs/operators';\n\nimport {Placement, PlacementArray, positionElements} from '../util/positioning';\nimport {ngbAutoClose} from '../util/autoclose';\nimport {Key} from '../util/key';\n\nimport {NgbDropdownConfig} from './dropdown-config';\n\n@Directive({selector: '.navbar'})\nexport class NgbNavbar {\n}\n\n/**\n * A directive you should put put on a dropdown item to enable keyboard navigation.\n * Arrow keys will move focus between items marked with this directive.\n *\n * @since 4.1.0\n */\n@Directive({selector: '[ngbDropdownItem]', host: {'class': 'dropdown-item', '[class.disabled]': 'disabled'}})\nexport class NgbDropdownItem {\n private _disabled = false;\n\n @Input()\n set disabled(value: boolean) {\n this._disabled = value === '' || value === true; // accept an empty attribute as true\n }\n\n get disabled(): boolean { return this._disabled; }\n\n constructor(public elementRef: ElementRef) {}\n}\n\n/**\n * A directive that wraps dropdown menu content and dropdown items.\n */\n@Directive({\n selector: '[ngbDropdownMenu]',\n host: {\n '[class.dropdown-menu]': 'true',\n '[class.show]': 'dropdown.isOpen()',\n '[attr.x-placement]': 'placement',\n '(keydown.ArrowUp)': 'dropdown.onKeyDown($event)',\n '(keydown.ArrowDown)': 'dropdown.onKeyDown($event)',\n '(keydown.Home)': 'dropdown.onKeyDown($event)',\n '(keydown.End)': 'dropdown.onKeyDown($event)',\n '(keydown.Enter)': 'dropdown.onKeyDown($event)',\n '(keydown.Space)': 'dropdown.onKeyDown($event)'\n }\n})\nexport class NgbDropdownMenu {\n placement: Placement = 'bottom';\n isOpen = false;\n\n @ContentChildren(NgbDropdownItem) menuItems: QueryList;\n\n constructor(@Inject(forwardRef(() => NgbDropdown)) public dropdown) {}\n}\n\n/**\n * A directive to mark an element to which dropdown menu will be anchored.\n *\n * This is a simple version of the `NgbDropdownToggle` directive.\n * It plays the same role, but doesn't listen to click events to toggle dropdown menu thus enabling support\n * for events other than click.\n *\n * @since 1.1.0\n */\n@Directive({\n selector: '[ngbDropdownAnchor]',\n host: {'class': 'dropdown-toggle', 'aria-haspopup': 'true', '[attr.aria-expanded]': 'dropdown.isOpen()'}\n})\nexport class NgbDropdownAnchor {\n anchorEl;\n\n constructor(@Inject(forwardRef(() => NgbDropdown)) public dropdown, private _elementRef: ElementRef) {\n this.anchorEl = _elementRef.nativeElement;\n }\n\n getNativeElement() { return this._elementRef.nativeElement; }\n}\n\n/**\n * A directive to mark an element that will toggle dropdown via the `click` event.\n *\n * You can also use `NgbDropdownAnchor` as an alternative.\n */\n@Directive({\n selector: '[ngbDropdownToggle]',\n host: {\n 'class': 'dropdown-toggle',\n 'aria-haspopup': 'true',\n '[attr.aria-expanded]': 'dropdown.isOpen()',\n '(click)': 'dropdown.toggle()',\n '(keydown.ArrowUp)': 'dropdown.onKeyDown($event)',\n '(keydown.ArrowDown)': 'dropdown.onKeyDown($event)',\n '(keydown.Home)': 'dropdown.onKeyDown($event)',\n '(keydown.End)': 'dropdown.onKeyDown($event)'\n },\n providers: [{provide: NgbDropdownAnchor, useExisting: forwardRef(() => NgbDropdownToggle)}]\n})\nexport class NgbDropdownToggle extends NgbDropdownAnchor {\n constructor(@Inject(forwardRef(() => NgbDropdown)) dropdown, elementRef: ElementRef) {\n super(dropdown, elementRef);\n }\n}\n\n/**\n * A directive that provides contextual overlays for displaying lists of links and more.\n */\n@Directive({selector: '[ngbDropdown]', exportAs: 'ngbDropdown', host: {'[class.show]': 'isOpen()'}})\nexport class NgbDropdown implements AfterContentInit, OnDestroy {\n private _closed$ = new Subject();\n private _zoneSubscription: Subscription;\n private _bodyContainer: HTMLElement;\n\n @ContentChild(NgbDropdownMenu, {static: false}) private _menu: NgbDropdownMenu;\n @ContentChild(NgbDropdownMenu, {read: ElementRef, static: false}) private _menuElement: ElementRef;\n @ContentChild(NgbDropdownAnchor, {static: false}) private _anchor: NgbDropdownAnchor;\n\n /**\n * Indicates whether the dropdown should be closed when clicking one of dropdown items or pressing ESC.\n *\n * * `true` - the dropdown will close on both outside and inside (menu) clicks.\n * * `false` - the dropdown can only be closed manually via `close()` or `toggle()` methods.\n * * `\"inside\"` - the dropdown will close on inside menu clicks, but not outside clicks.\n * * `\"outside\"` - the dropdown will close only on the outside clicks and not on menu clicks.\n */\n @Input() autoClose: boolean | 'outside' | 'inside';\n\n /**\n * Defines whether or not the dropdown menu is opened initially.\n */\n @Input('open') _open = false;\n\n /**\n * The preferred placement of the dropdown.\n *\n * Possible values are `\"top\"`, `\"top-left\"`, `\"top-right\"`, `\"bottom\"`, `\"bottom-left\"`,\n * `\"bottom-right\"`, `\"left\"`, `\"left-top\"`, `\"left-bottom\"`, `\"right\"`, `\"right-top\"`,\n * `\"right-bottom\"`\n *\n * Accepts an array of strings or a string with space separated possible values.\n *\n * The default order of preference is `\"bottom-left bottom-right top-left top-right\"`\n *\n * Please see the [positioning overview](#/positioning) for more details.\n */\n @Input() placement: PlacementArray;\n\n /**\n * A selector specifying the element the dropdown should be appended to.\n * Currently only supports \"body\".\n *\n * @since 4.1.0\n */\n @Input() container: null | 'body';\n\n /**\n * Enable or disable the dynamic positioning. The default value is dynamic unless the dropdown is used\n * inside a Bootstrap navbar. If you need custom placement for a dropdown in a navbar, set it to\n * dynamic explicitly. See the [positioning of dropdown](#/positioning#dropdown)\n * and the [navbar demo](/#/components/dropdown/examples#navbar) for more details.\n *\n * @since 4.2.0\n */\n @Input() display: 'dynamic' | 'static';\n\n /**\n * An event fired when the dropdown is opened or closed.\n *\n * The event payload is a `boolean`:\n * * `true` - the dropdown was opened\n * * `false` - the dropdown was closed\n */\n @Output() openChange = new EventEmitter();\n\n constructor(\n private _changeDetector: ChangeDetectorRef, config: NgbDropdownConfig, @Inject(DOCUMENT) private _document: any,\n private _ngZone: NgZone, private _elementRef: ElementRef, private _renderer: Renderer2,\n @Optional() ngbNavbar: NgbNavbar) {\n this.placement = config.placement;\n this.container = config.container;\n this.autoClose = config.autoClose;\n\n this.display = ngbNavbar ? 'static' : 'dynamic';\n\n this._zoneSubscription = _ngZone.onStable.subscribe(() => { this._positionMenu(); });\n }\n\n ngAfterContentInit() {\n this._ngZone.onStable.pipe(take(1)).subscribe(() => {\n this._applyPlacementClasses();\n if (this._open) {\n this._setCloseHandlers();\n }\n });\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.container && this._open) {\n this._applyContainer(this.container);\n }\n\n if (changes.placement && !changes.placement.isFirstChange) {\n this._applyPlacementClasses();\n }\n }\n\n /**\n * Checks if the dropdown menu is open.\n */\n isOpen(): boolean { return this._open; }\n\n /**\n * Opens the dropdown menu.\n */\n open(): void {\n if (!this._open) {\n this._open = true;\n this._applyContainer(this.container);\n this.openChange.emit(true);\n this._setCloseHandlers();\n }\n }\n\n private _setCloseHandlers() {\n const anchor = this._anchor;\n ngbAutoClose(\n this._ngZone, this._document, this.autoClose, () => this.close(), this._closed$,\n this._menu ? [this._menuElement.nativeElement] : [], anchor ? [anchor.getNativeElement()] : [],\n '.dropdown-item,.dropdown-divider');\n }\n\n /**\n * Closes the dropdown menu.\n */\n close(): void {\n if (this._open) {\n this._open = false;\n this._resetContainer();\n this._closed$.next();\n this.openChange.emit(false);\n this._changeDetector.markForCheck();\n }\n }\n\n /**\n * Toggles the dropdown menu.\n */\n toggle(): void {\n if (this.isOpen()) {\n this.close();\n } else {\n this.open();\n }\n }\n\n ngOnDestroy() {\n this._resetContainer();\n\n this._closed$.next();\n this._zoneSubscription.unsubscribe();\n }\n\n onKeyDown(event: KeyboardEvent) {\n // tslint:disable-next-line:deprecation\n const key = event.which;\n const itemElements = this._getMenuElements();\n\n let position = -1;\n let isEventFromItems = false;\n const isEventFromToggle = this._isEventFromToggle(event);\n\n if (!isEventFromToggle && itemElements.length) {\n itemElements.forEach((itemElement, index) => {\n if (itemElement.contains(event.target as HTMLElement)) {\n isEventFromItems = true;\n }\n if (itemElement === this._document.activeElement) {\n position = index;\n }\n });\n }\n\n // closing on Enter / Space\n if (key === Key.Space || key === Key.Enter) {\n if (isEventFromItems && (this.autoClose === true || this.autoClose === 'inside')) {\n this.close();\n }\n return;\n }\n\n // opening / navigating\n if (isEventFromToggle || isEventFromItems) {\n this.open();\n\n if (itemElements.length) {\n switch (key) {\n case Key.ArrowDown:\n position = Math.min(position + 1, itemElements.length - 1);\n break;\n case Key.ArrowUp:\n if (this._isDropup() && position === -1) {\n position = itemElements.length - 1;\n break;\n }\n position = Math.max(position - 1, 0);\n break;\n case Key.Home:\n position = 0;\n break;\n case Key.End:\n position = itemElements.length - 1;\n break;\n }\n itemElements[position].focus();\n }\n event.preventDefault();\n }\n }\n\n private _isDropup(): boolean { return this._elementRef.nativeElement.classList.contains('dropup'); }\n\n private _isEventFromToggle(event: KeyboardEvent) {\n return this._anchor.getNativeElement().contains(event.target as HTMLElement);\n }\n\n private _getMenuElements(): HTMLElement[] {\n const menu = this._menu;\n if (menu == null) {\n return [];\n }\n return menu.menuItems.filter(item => !item.disabled).map(item => item.elementRef.nativeElement);\n }\n\n private _positionMenu() {\n const menu = this._menu;\n if (this.isOpen() && menu) {\n this._applyPlacementClasses(\n this.display === 'dynamic' ?\n positionElements(\n this._anchor.anchorEl, this._bodyContainer || this._menuElement.nativeElement, this.placement,\n this.container === 'body') :\n this._getFirstPlacement(this.placement));\n }\n }\n\n private _getFirstPlacement(placement: PlacementArray): Placement {\n return Array.isArray(placement) ? placement[0] : placement.split(' ')[0] as Placement;\n }\n\n private _resetContainer() {\n const renderer = this._renderer;\n const menuElement = this._menuElement;\n if (menuElement) {\n const dropdownElement = this._elementRef.nativeElement;\n const dropdownMenuElement = menuElement.nativeElement;\n\n renderer.appendChild(dropdownElement, dropdownMenuElement);\n renderer.removeStyle(dropdownMenuElement, 'position');\n renderer.removeStyle(dropdownMenuElement, 'transform');\n }\n if (this._bodyContainer) {\n renderer.removeChild(this._document.body, this._bodyContainer);\n this._bodyContainer = null;\n }\n }\n\n private _applyContainer(container: null | 'body' = null) {\n this._resetContainer();\n if (container === 'body') {\n const renderer = this._renderer;\n const dropdownMenuElement = this._menuElement.nativeElement;\n const bodyContainer = this._bodyContainer = this._bodyContainer || renderer.createElement('div');\n\n // Override some styles to have the positionning working\n renderer.setStyle(bodyContainer, 'position', 'absolute');\n renderer.setStyle(dropdownMenuElement, 'position', 'static');\n renderer.setStyle(bodyContainer, 'z-index', '1050');\n\n renderer.appendChild(bodyContainer, dropdownMenuElement);\n renderer.appendChild(this._document.body, bodyContainer);\n }\n }\n\n private _applyPlacementClasses(placement?: Placement) {\n const menu = this._menu;\n if (menu) {\n if (!placement) {\n placement = this._getFirstPlacement(this.placement);\n }\n\n const renderer = this._renderer;\n const dropdownElement = this._elementRef.nativeElement;\n\n // remove the current placement classes\n renderer.removeClass(dropdownElement, 'dropup');\n renderer.removeClass(dropdownElement, 'dropdown');\n menu.placement = this.display === 'static' ? null : placement;\n\n /*\n * apply the new placement\n * in case of top use up-arrow or down-arrow otherwise\n */\n const dropdownClass = placement.search('^top') !== -1 ? 'dropup' : 'dropdown';\n renderer.addClass(dropdownElement, dropdownClass);\n\n const bodyContainer = this._bodyContainer;\n if (bodyContainer) {\n renderer.removeClass(bodyContainer, 'dropup');\n renderer.removeClass(bodyContainer, 'dropdown');\n renderer.addClass(bodyContainer, dropdownClass);\n }\n }\n }\n}\n","import {NgModule} from '@angular/core';\nimport {\n NgbDropdown,\n NgbDropdownAnchor,\n NgbDropdownToggle,\n NgbDropdownMenu,\n NgbDropdownItem,\n NgbNavbar\n} from './dropdown';\n\nexport {NgbDropdown, NgbDropdownAnchor, NgbDropdownToggle, NgbDropdownMenu, NgbDropdownItem} from './dropdown';\nexport {NgbDropdownConfig} from './dropdown-config';\n\nconst NGB_DROPDOWN_DIRECTIVES =\n [NgbDropdown, NgbDropdownAnchor, NgbDropdownToggle, NgbDropdownMenu, NgbDropdownItem, NgbNavbar];\n\n@NgModule({declarations: NGB_DROPDOWN_DIRECTIVES, exports: NGB_DROPDOWN_DIRECTIVES})\nexport class NgbDropdownModule {\n}\n","import {Injectable, Injector} from '@angular/core';\n\n/**\n * Options available when opening new modal windows with `NgbModal.open()` method.\n */\nexport interface NgbModalOptions {\n /**\n * `aria-labelledby` attribute value to set on the modal window.\n *\n * @since 2.2.0\n */\n ariaLabelledBy?: string;\n\n /**\n * If `true`, the backdrop element will be created for a given modal.\n *\n * Alternatively, specify `'static'` for a backdrop which doesn't close the modal on click.\n *\n * Default value is `true`.\n */\n backdrop?: boolean | 'static';\n\n /**\n * Callback right before the modal will be dismissed.\n *\n * If this function returns:\n * * `false`\n * * a promise resolved with `false`\n * * a promise that is rejected\n *\n * then the modal won't be dismissed.\n */\n beforeDismiss?: () => boolean | Promise;\n\n /**\n * If `true`, the modal will be centered vertically.\n *\n * Default value is `false`.\n *\n * @since 1.1.0\n */\n centered?: boolean;\n\n /**\n * A selector specifying the element all new modal windows should be appended to.\n *\n * If not specified, will be `body`.\n */\n container?: string;\n\n /**\n * The `Injector` to use for modal content.\n */\n injector?: Injector;\n\n /**\n * If `true`, the modal will be closed when `Escape` key is pressed\n *\n * Default value is `true`.\n */\n keyboard?: boolean;\n\n /**\n * Scrollable modal content (false by default).\n *\n * @since 5.0.0\n */\n scrollable?: boolean;\n\n /**\n * Size of a new modal window.\n */\n size?: 'sm' | 'lg' | 'xl';\n\n /**\n * A custom class to append to the modal window.\n */\n windowClass?: string;\n\n /**\n * A custom class to append to the modal backdrop.\n *\n * @since 1.1.0\n */\n backdropClass?: string;\n}\n\n/**\n * A configuration service for the [`NgbModal`](#/components/modal/api#NgbModal) service.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all modals used in the application.\n*\n* @since 3.1.0\n*/\n@Injectable({providedIn: 'root'})\nexport class NgbModalConfig implements NgbModalOptions {\n backdrop: boolean | 'static' = true;\n keyboard = true;\n}\n","import {\n Injector,\n TemplateRef,\n ViewRef,\n ViewContainerRef,\n Renderer2,\n ComponentRef,\n ComponentFactoryResolver,\n ApplicationRef\n} from '@angular/core';\n\nexport class ContentRef {\n constructor(public nodes: any[], public viewRef?: ViewRef, public componentRef?: ComponentRef) {}\n}\n\nexport class PopupService {\n private _windowRef: ComponentRef;\n private _contentRef: ContentRef;\n\n constructor(\n private _type: any, private _injector: Injector, private _viewContainerRef: ViewContainerRef,\n private _renderer: Renderer2, private _componentFactoryResolver: ComponentFactoryResolver,\n private _applicationRef: ApplicationRef) {}\n\n open(content?: string | TemplateRef, context?: any): ComponentRef {\n if (!this._windowRef) {\n this._contentRef = this._getContentRef(content, context);\n this._windowRef = this._viewContainerRef.createComponent(\n this._componentFactoryResolver.resolveComponentFactory(this._type), 0, this._injector,\n this._contentRef.nodes);\n }\n\n return this._windowRef;\n }\n\n close() {\n if (this._windowRef) {\n this._viewContainerRef.remove(this._viewContainerRef.indexOf(this._windowRef.hostView));\n this._windowRef = null;\n\n if (this._contentRef.viewRef) {\n this._applicationRef.detachView(this._contentRef.viewRef);\n this._contentRef.viewRef.destroy();\n this._contentRef = null;\n }\n }\n }\n\n private _getContentRef(content: string | TemplateRef, context?: any): ContentRef {\n if (!content) {\n return new ContentRef([]);\n } else if (content instanceof TemplateRef) {\n const viewRef = content.createEmbeddedView(context);\n this._applicationRef.attachView(viewRef);\n return new ContentRef([viewRef.rootNodes], viewRef);\n } else {\n return new ContentRef([[this._renderer.createText(`${content}`)]]);\n }\n }\n}\n","import {Injectable, Inject} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\n\n\nconst noop = () => {};\n\n\n\n/** Type for the callback used to revert the scrollbar compensation. */\nexport type CompensationReverter = () => void;\n\n\n\n/**\n * Utility to handle the scrollbar.\n *\n * It allows to compensate the lack of a vertical scrollbar by adding an\n * equivalent padding on the right of the body, and to remove this compensation.\n */\n@Injectable({providedIn: 'root'})\nexport class ScrollBar {\n constructor(@Inject(DOCUMENT) private _document: any) {}\n\n /**\n * Detects if a scrollbar is present and if yes, already compensates for its\n * removal by adding an equivalent padding on the right of the body.\n *\n * @return a callback used to revert the compensation (noop if there was none,\n * otherwise a function removing the padding)\n */\n compensate(): CompensationReverter { return !this._isPresent() ? noop : this._adjustBody(this._getWidth()); }\n\n /**\n * Adds a padding of the given width on the right of the body.\n *\n * @return a callback used to revert the padding to its previous value\n */\n private _adjustBody(width: number): CompensationReverter {\n const body = this._document.body;\n const userSetPadding = body.style.paddingRight;\n const paddingAmount = parseFloat(window.getComputedStyle(body)['padding-right']);\n body.style['padding-right'] = `${paddingAmount + width}px`;\n return () => body.style['padding-right'] = userSetPadding;\n }\n\n /**\n * Tells whether a scrollbar is currently present on the body.\n *\n * @return true if scrollbar is present, false otherwise\n */\n private _isPresent(): boolean {\n const rect = this._document.body.getBoundingClientRect();\n return rect.left + rect.right < window.innerWidth;\n }\n\n /**\n * Calculates and returns the width of a scrollbar.\n *\n * @return the width of a scrollbar on this page\n */\n private _getWidth(): number {\n const measurer = this._document.createElement('div');\n measurer.className = 'modal-scrollbar-measure';\n\n const body = this._document.body;\n body.appendChild(measurer);\n const width = measurer.getBoundingClientRect().width - measurer.clientWidth;\n body.removeChild(measurer);\n\n return width;\n }\n}\n","import {Component, Input} from '@angular/core';\n\n@Component({\n selector: 'ngb-modal-backdrop',\n template: '',\n host:\n {'[class]': '\"modal-backdrop fade show\" + (backdropClass ? \" \" + backdropClass : \"\")', 'style': 'z-index: 1050'}\n})\nexport class NgbModalBackdrop {\n @Input() backdropClass: string;\n}\n","import {ComponentRef} from '@angular/core';\n\nimport {NgbModalBackdrop} from './modal-backdrop';\nimport {NgbModalWindow} from './modal-window';\n\nimport {ContentRef} from '../util/popup';\n\n/**\n * A reference to the currently opened (active) modal.\n *\n * Instances of this class can be injected into your component passed as modal content.\n * So you can `.close()` or `.dismiss()` the modal window from your component.\n */\nexport class NgbActiveModal {\n /**\n * Closes the modal with an optional `result` value.\n *\n * The `NgbMobalRef.result` promise will be resolved with the provided value.\n */\n close(result?: any): void {}\n\n /**\n * Dismisses the modal with an optional `reason` value.\n *\n * The `NgbModalRef.result` promise will be rejected with the provided value.\n */\n dismiss(reason?: any): void {}\n}\n\n/**\n * A reference to the newly opened modal returned by the `NgbModal.open()` method.\n */\nexport class NgbModalRef {\n private _resolve: (result?: any) => void;\n private _reject: (reason?: any) => void;\n\n /**\n * The instance of a component used for the modal content.\n *\n * When a `TemplateRef` is used as the content, will return `undefined`.\n */\n get componentInstance(): any {\n if (this._contentRef.componentRef) {\n return this._contentRef.componentRef.instance;\n }\n }\n\n /**\n * The promise that is resolved when the modal is closed and rejected when the modal is dismissed.\n */\n result: Promise;\n\n constructor(\n private _windowCmptRef: ComponentRef, private _contentRef: ContentRef,\n private _backdropCmptRef?: ComponentRef, private _beforeDismiss?: Function) {\n _windowCmptRef.instance.dismissEvent.subscribe((reason: any) => { this.dismiss(reason); });\n\n this.result = new Promise((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n this.result.then(null, () => {});\n }\n\n /**\n * Closes the modal with an optional `result` value.\n *\n * The `NgbMobalRef.result` promise will be resolved with the provided value.\n */\n close(result?: any): void {\n if (this._windowCmptRef) {\n this._resolve(result);\n this._removeModalElements();\n }\n }\n\n private _dismiss(reason?: any) {\n this._reject(reason);\n this._removeModalElements();\n }\n\n /**\n * Dismisses the modal with an optional `reason` value.\n *\n * The `NgbModalRef.result` promise will be rejected with the provided value.\n */\n dismiss(reason?: any): void {\n if (this._windowCmptRef) {\n if (!this._beforeDismiss) {\n this._dismiss(reason);\n } else {\n const dismiss = this._beforeDismiss();\n if (dismiss && dismiss.then) {\n dismiss.then(\n result => {\n if (result !== false) {\n this._dismiss(reason);\n }\n },\n () => {});\n } else if (dismiss !== false) {\n this._dismiss(reason);\n }\n }\n }\n }\n\n private _removeModalElements() {\n const windowNativeEl = this._windowCmptRef.location.nativeElement;\n windowNativeEl.parentNode.removeChild(windowNativeEl);\n this._windowCmptRef.destroy();\n\n if (this._backdropCmptRef) {\n const backdropNativeEl = this._backdropCmptRef.location.nativeElement;\n backdropNativeEl.parentNode.removeChild(backdropNativeEl);\n this._backdropCmptRef.destroy();\n }\n\n if (this._contentRef && this._contentRef.viewRef) {\n this._contentRef.viewRef.destroy();\n }\n\n this._windowCmptRef = null;\n this._backdropCmptRef = null;\n this._contentRef = null;\n }\n}\n","export enum ModalDismissReasons {\n BACKDROP_CLICK,\n ESC\n}\n","import {DOCUMENT} from '@angular/common';\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport {getFocusableBoundaryElements} from '../util/focus-trap';\nimport {ModalDismissReasons} from './modal-dismiss-reasons';\n\n@Component({\n selector: 'ngb-modal-window',\n host: {\n '[class]': '\"modal fade show d-block\" + (windowClass ? \" \" + windowClass : \"\")',\n 'role': 'dialog',\n 'tabindex': '-1',\n '(keyup.esc)': 'escKey($event)',\n '(click)': 'backdropClick($event)',\n '[attr.aria-modal]': 'true',\n '[attr.aria-labelledby]': 'ariaLabelledBy',\n },\n template: `\n
\n
\n
\n `,\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./modal.scss']\n})\nexport class NgbModalWindow implements OnInit,\n AfterViewInit, OnDestroy {\n private _elWithFocus: Element; // element that is focused prior to modal opening\n\n @Input() ariaLabelledBy: string;\n @Input() backdrop: boolean | string = true;\n @Input() centered: string;\n @Input() keyboard = true;\n @Input() scrollable: string;\n @Input() size: string;\n @Input() windowClass: string;\n\n @Output('dismiss') dismissEvent = new EventEmitter();\n\n constructor(@Inject(DOCUMENT) private _document: any, private _elRef: ElementRef) {}\n\n backdropClick($event): void {\n if (this.backdrop === true && this._elRef.nativeElement === $event.target) {\n this.dismiss(ModalDismissReasons.BACKDROP_CLICK);\n }\n }\n\n escKey($event): void {\n if (this.keyboard && !$event.defaultPrevented) {\n this.dismiss(ModalDismissReasons.ESC);\n }\n }\n\n dismiss(reason): void { this.dismissEvent.emit(reason); }\n\n ngOnInit() { this._elWithFocus = this._document.activeElement; }\n\n ngAfterViewInit() {\n if (!this._elRef.nativeElement.contains(document.activeElement)) {\n const autoFocusable = this._elRef.nativeElement.querySelector(`[ngbAutofocus]`) as HTMLElement;\n const firstFocusable = getFocusableBoundaryElements(this._elRef.nativeElement)[0];\n\n const elementToFocus = autoFocusable || firstFocusable || this._elRef.nativeElement;\n elementToFocus.focus();\n }\n }\n\n ngOnDestroy() {\n const body = this._document.body;\n const elWithFocus = this._elWithFocus;\n\n let elementToFocus;\n if (elWithFocus && elWithFocus['focus'] && body.contains(elWithFocus)) {\n elementToFocus = elWithFocus;\n } else {\n elementToFocus = body;\n }\n elementToFocus.focus();\n this._elWithFocus = null;\n }\n}\n","import {DOCUMENT} from '@angular/common';\nimport {\n ApplicationRef,\n ComponentFactoryResolver,\n ComponentRef,\n Inject,\n Injectable,\n Injector,\n RendererFactory2,\n TemplateRef,\n} from '@angular/core';\nimport {Subject} from 'rxjs';\n\nimport {ngbFocusTrap} from '../util/focus-trap';\nimport {ContentRef} from '../util/popup';\nimport {ScrollBar} from '../util/scrollbar';\nimport {isDefined, isString} from '../util/util';\nimport {NgbModalBackdrop} from './modal-backdrop';\nimport {NgbModalOptions} from './modal-config';\nimport {NgbActiveModal, NgbModalRef} from './modal-ref';\nimport {NgbModalWindow} from './modal-window';\n\n@Injectable({providedIn: 'root'})\nexport class NgbModalStack {\n private _activeWindowCmptHasChanged = new Subject();\n private _ariaHiddenValues: Map = new Map();\n private _backdropAttributes = ['backdropClass'];\n private _modalRefs: NgbModalRef[] = [];\n private _windowAttributes =\n ['ariaLabelledBy', 'backdrop', 'centered', 'keyboard', 'scrollable', 'size', 'windowClass'];\n private _windowCmpts: ComponentRef[] = [];\n\n constructor(\n private _applicationRef: ApplicationRef, private _injector: Injector, @Inject(DOCUMENT) private _document: any,\n private _scrollBar: ScrollBar, private _rendererFactory: RendererFactory2) {\n // Trap focus on active WindowCmpt\n this._activeWindowCmptHasChanged.subscribe(() => {\n if (this._windowCmpts.length) {\n const activeWindowCmpt = this._windowCmpts[this._windowCmpts.length - 1];\n ngbFocusTrap(activeWindowCmpt.location.nativeElement, this._activeWindowCmptHasChanged);\n this._revertAriaHidden();\n this._setAriaHidden(activeWindowCmpt.location.nativeElement);\n }\n });\n }\n\n open(moduleCFR: ComponentFactoryResolver, contentInjector: Injector, content: any, options): NgbModalRef {\n const containerEl =\n isDefined(options.container) ? this._document.querySelector(options.container) : this._document.body;\n const renderer = this._rendererFactory.createRenderer(null, null);\n\n const revertPaddingForScrollBar = this._scrollBar.compensate();\n const removeBodyClass = () => {\n if (!this._modalRefs.length) {\n renderer.removeClass(this._document.body, 'modal-open');\n this._revertAriaHidden();\n }\n };\n\n if (!containerEl) {\n throw new Error(`The specified modal container \"${options.container || 'body'}\" was not found in the DOM.`);\n }\n\n const activeModal = new NgbActiveModal();\n const contentRef =\n this._getContentRef(moduleCFR, options.injector || contentInjector, content, activeModal, options);\n\n let backdropCmptRef: ComponentRef =\n options.backdrop !== false ? this._attachBackdrop(moduleCFR, containerEl) : null;\n let windowCmptRef: ComponentRef = this._attachWindowComponent(moduleCFR, containerEl, contentRef);\n let ngbModalRef: NgbModalRef = new NgbModalRef(windowCmptRef, contentRef, backdropCmptRef, options.beforeDismiss);\n\n this._registerModalRef(ngbModalRef);\n this._registerWindowCmpt(windowCmptRef);\n ngbModalRef.result.then(revertPaddingForScrollBar, revertPaddingForScrollBar);\n ngbModalRef.result.then(removeBodyClass, removeBodyClass);\n activeModal.close = (result: any) => { ngbModalRef.close(result); };\n activeModal.dismiss = (reason: any) => { ngbModalRef.dismiss(reason); };\n\n this._applyWindowOptions(windowCmptRef.instance, options);\n if (this._modalRefs.length === 1) {\n renderer.addClass(this._document.body, 'modal-open');\n }\n\n if (backdropCmptRef && backdropCmptRef.instance) {\n this._applyBackdropOptions(backdropCmptRef.instance, options);\n }\n return ngbModalRef;\n }\n\n dismissAll(reason?: any) { this._modalRefs.forEach(ngbModalRef => ngbModalRef.dismiss(reason)); }\n\n hasOpenModals(): boolean { return this._modalRefs.length > 0; }\n\n private _attachBackdrop(moduleCFR: ComponentFactoryResolver, containerEl: any): ComponentRef {\n let backdropFactory = moduleCFR.resolveComponentFactory(NgbModalBackdrop);\n let backdropCmptRef = backdropFactory.create(this._injector);\n this._applicationRef.attachView(backdropCmptRef.hostView);\n containerEl.appendChild(backdropCmptRef.location.nativeElement);\n return backdropCmptRef;\n }\n\n private _attachWindowComponent(moduleCFR: ComponentFactoryResolver, containerEl: any, contentRef: any):\n ComponentRef {\n let windowFactory = moduleCFR.resolveComponentFactory(NgbModalWindow);\n let windowCmptRef = windowFactory.create(this._injector, contentRef.nodes);\n this._applicationRef.attachView(windowCmptRef.hostView);\n containerEl.appendChild(windowCmptRef.location.nativeElement);\n return windowCmptRef;\n }\n\n private _applyWindowOptions(windowInstance: NgbModalWindow, options: Object): void {\n this._windowAttributes.forEach((optionName: string) => {\n if (isDefined(options[optionName])) {\n windowInstance[optionName] = options[optionName];\n }\n });\n }\n\n private _applyBackdropOptions(backdropInstance: NgbModalBackdrop, options: Object): void {\n this._backdropAttributes.forEach((optionName: string) => {\n if (isDefined(options[optionName])) {\n backdropInstance[optionName] = options[optionName];\n }\n });\n }\n\n private _getContentRef(\n moduleCFR: ComponentFactoryResolver, contentInjector: Injector, content: any, activeModal: NgbActiveModal,\n options: NgbModalOptions): ContentRef {\n if (!content) {\n return new ContentRef([]);\n } else if (content instanceof TemplateRef) {\n return this._createFromTemplateRef(content, activeModal);\n } else if (isString(content)) {\n return this._createFromString(content);\n } else {\n return this._createFromComponent(moduleCFR, contentInjector, content, activeModal, options);\n }\n }\n\n private _createFromTemplateRef(content: TemplateRef, activeModal: NgbActiveModal): ContentRef {\n const context = {\n $implicit: activeModal,\n close(result) { activeModal.close(result); },\n dismiss(reason) { activeModal.dismiss(reason); }\n };\n const viewRef = content.createEmbeddedView(context);\n this._applicationRef.attachView(viewRef);\n return new ContentRef([viewRef.rootNodes], viewRef);\n }\n\n private _createFromString(content: string): ContentRef {\n const component = this._document.createTextNode(`${content}`);\n return new ContentRef([[component]]);\n }\n\n private _createFromComponent(\n moduleCFR: ComponentFactoryResolver, contentInjector: Injector, content: any, context: NgbActiveModal,\n options: NgbModalOptions): ContentRef {\n const contentCmptFactory = moduleCFR.resolveComponentFactory(content);\n const modalContentInjector =\n Injector.create({providers: [{provide: NgbActiveModal, useValue: context}], parent: contentInjector});\n const componentRef = contentCmptFactory.create(modalContentInjector);\n const componentNativeEl = componentRef.location.nativeElement;\n if (options.scrollable) {\n (componentNativeEl as HTMLElement).classList.add('component-host-scrollable');\n }\n this._applicationRef.attachView(componentRef.hostView);\n // FIXME: we should here get rid of the component nativeElement\n // and use `[Array.from(componentNativeEl.childNodes)]` instead and remove the above CSS class.\n return new ContentRef([[componentNativeEl]], componentRef.hostView, componentRef);\n }\n\n private _setAriaHidden(element: Element) {\n const parent = element.parentElement;\n if (parent && element !== this._document.body) {\n Array.from(parent.children).forEach(sibling => {\n if (sibling !== element && sibling.nodeName !== 'SCRIPT') {\n this._ariaHiddenValues.set(sibling, sibling.getAttribute('aria-hidden'));\n sibling.setAttribute('aria-hidden', 'true');\n }\n });\n\n this._setAriaHidden(parent);\n }\n }\n\n private _revertAriaHidden() {\n this._ariaHiddenValues.forEach((value, element) => {\n if (value) {\n element.setAttribute('aria-hidden', value);\n } else {\n element.removeAttribute('aria-hidden');\n }\n });\n this._ariaHiddenValues.clear();\n }\n\n private _registerModalRef(ngbModalRef: NgbModalRef) {\n const unregisterModalRef = () => {\n const index = this._modalRefs.indexOf(ngbModalRef);\n if (index > -1) {\n this._modalRefs.splice(index, 1);\n }\n };\n this._modalRefs.push(ngbModalRef);\n ngbModalRef.result.then(unregisterModalRef, unregisterModalRef);\n }\n\n private _registerWindowCmpt(ngbWindowCmpt: ComponentRef) {\n this._windowCmpts.push(ngbWindowCmpt);\n this._activeWindowCmptHasChanged.next();\n\n ngbWindowCmpt.onDestroy(() => {\n const index = this._windowCmpts.indexOf(ngbWindowCmpt);\n if (index > -1) {\n this._windowCmpts.splice(index, 1);\n this._activeWindowCmptHasChanged.next();\n }\n });\n }\n}\n","import {Injectable, Injector, ComponentFactoryResolver} from '@angular/core';\n\nimport {NgbModalOptions, NgbModalConfig} from './modal-config';\nimport {NgbModalRef} from './modal-ref';\nimport {NgbModalStack} from './modal-stack';\n\n/**\n * A service for opening modal windows.\n *\n * Creating a modal is straightforward: create a component or a template and pass it as an argument to\n * the `.open()` method.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbModal {\n constructor(\n private _moduleCFR: ComponentFactoryResolver, private _injector: Injector, private _modalStack: NgbModalStack,\n private _config: NgbModalConfig) {}\n\n /**\n * Opens a new modal window with the specified content and supplied options.\n *\n * Content can be provided as a `TemplateRef` or a component type. If you pass a component type as content,\n * then instances of those components can be injected with an instance of the `NgbActiveModal` class. You can then\n * use `NgbActiveModal` methods to close / dismiss modals from \"inside\" of your component.\n *\n * Also see the [`NgbModalOptions`](#/components/modal/api#NgbModalOptions) for the list of supported options.\n */\n open(content: any, options: NgbModalOptions = {}): NgbModalRef {\n const combinedOptions = Object.assign({}, this._config, options);\n return this._modalStack.open(this._moduleCFR, this._injector, content, combinedOptions);\n }\n\n /**\n * Dismisses all currently displayed modal windows with the supplied reason.\n *\n * @since 3.1.0\n */\n dismissAll(reason?: any) { this._modalStack.dismissAll(reason); }\n\n /**\n * Indicates if there are currently any open modal windows in the application.\n *\n * @since 3.3.0\n */\n hasOpenModals(): boolean { return this._modalStack.hasOpenModals(); }\n}\n","import {NgModule} from '@angular/core';\n\nimport {NgbModal} from './modal';\nimport {NgbModalBackdrop} from './modal-backdrop';\nimport {NgbModalWindow} from './modal-window';\n\nexport {NgbModal} from './modal';\nexport {NgbModalConfig, NgbModalOptions} from './modal-config';\nexport {NgbModalRef, NgbActiveModal} from './modal-ref';\nexport {ModalDismissReasons} from './modal-dismiss-reasons';\n\n@NgModule({\n declarations: [NgbModalBackdrop, NgbModalWindow],\n entryComponents: [NgbModalBackdrop, NgbModalWindow],\n providers: [NgbModal]\n})\nexport class NgbModalModule {\n}\n","import {Injectable} from '@angular/core';\n\n/**\n * A configuration service for the [`NgbPagination`](#/components/pagination/api#NgbPagination) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the paginations used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbPaginationConfig {\n disabled = false;\n boundaryLinks = false;\n directionLinks = true;\n ellipses = true;\n maxSize = 0;\n pageSize = 10;\n rotate = false;\n size: 'sm' | 'lg';\n}\n","import {\n Component,\n ContentChild,\n Directive,\n EventEmitter,\n Input,\n Output,\n OnChanges,\n ChangeDetectionStrategy,\n SimpleChanges,\n TemplateRef\n} from '@angular/core';\nimport {getValueInRange, isNumber} from '../util/util';\nimport {NgbPaginationConfig} from './pagination-config';\n\n/**\n * A context for the\n * * `NgbPaginationFirst`\n * * `NgbPaginationPrevious`\n * * `NgbPaginationNext`\n * * `NgbPaginationLast`\n * * `NgbPaginationEllipsis`\n *\n * link templates in case you want to override one.\n *\n * @since 4.1.0\n */\nexport interface NgbPaginationLinkContext {\n /**\n * The currently selected page number\n */\n currentPage: number;\n\n /**\n * If `true`, the current link is disabled\n */\n disabled: boolean;\n}\n\n/**\n * A context for the `NgbPaginationNumber` link template in case you want to override one.\n *\n * Extends `NgbPaginationLinkContext`.\n *\n * @since 4.1.0\n */\nexport interface NgbPaginationNumberContext extends NgbPaginationLinkContext {\n /**\n * The page number, displayed by the current page link.\n */\n $implicit: number;\n}\n\n/**\n * A directive to match the 'ellipsis' link template\n *\n * @since 4.1.0\n */\n@Directive({selector: 'ng-template[ngbPaginationEllipsis]'})\nexport class NgbPaginationEllipsis {\n constructor(public templateRef: TemplateRef) {}\n}\n\n/**\n * A directive to match the 'first' link template\n *\n * @since 4.1.0\n */\n@Directive({selector: 'ng-template[ngbPaginationFirst]'})\nexport class NgbPaginationFirst {\n constructor(public templateRef: TemplateRef) {}\n}\n\n/**\n * A directive to match the 'last' link template\n *\n * @since 4.1.0\n */\n@Directive({selector: 'ng-template[ngbPaginationLast]'})\nexport class NgbPaginationLast {\n constructor(public templateRef: TemplateRef) {}\n}\n\n/**\n * A directive to match the 'next' link template\n *\n * @since 4.1.0\n */\n@Directive({selector: 'ng-template[ngbPaginationNext]'})\nexport class NgbPaginationNext {\n constructor(public templateRef: TemplateRef) {}\n}\n\n/**\n * A directive to match the page 'number' link template\n *\n * @since 4.1.0\n */\n@Directive({selector: 'ng-template[ngbPaginationNumber]'})\nexport class NgbPaginationNumber {\n constructor(public templateRef: TemplateRef) {}\n}\n\n/**\n * A directive to match the 'previous' link template\n *\n * @since 4.1.0\n */\n@Directive({selector: 'ng-template[ngbPaginationPrevious]'})\nexport class NgbPaginationPrevious {\n constructor(public templateRef: TemplateRef) {}\n}\n\n/**\n * A component that displays page numbers and allows to customize them in several ways.\n */\n@Component({\n selector: 'ngb-pagination',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {'role': 'navigation'},\n template: `\n ««\n «\n »\n »»\n ...\n \n {{ page }}\n (current)\n \n \n `\n})\nexport class NgbPagination implements OnChanges {\n pageCount = 0;\n pages: number[] = [];\n\n @ContentChild(NgbPaginationEllipsis, {static: false}) tplEllipsis: NgbPaginationEllipsis;\n @ContentChild(NgbPaginationFirst, {static: false}) tplFirst: NgbPaginationFirst;\n @ContentChild(NgbPaginationLast, {static: false}) tplLast: NgbPaginationLast;\n @ContentChild(NgbPaginationNext, {static: false}) tplNext: NgbPaginationNext;\n @ContentChild(NgbPaginationNumber, {static: false}) tplNumber: NgbPaginationNumber;\n @ContentChild(NgbPaginationPrevious, {static: false}) tplPrevious: NgbPaginationPrevious;\n\n /**\n * If `true`, pagination links will be disabled.\n */\n @Input() disabled: boolean;\n\n /**\n * If `true`, the \"First\" and \"Last\" page links are shown.\n */\n @Input() boundaryLinks: boolean;\n\n /**\n * If `true`, the \"Next\" and \"Previous\" page links are shown.\n */\n @Input() directionLinks: boolean;\n\n /**\n * If `true`, the ellipsis symbols and first/last page numbers will be shown when `maxSize` > number of pages.\n */\n @Input() ellipses: boolean;\n\n /**\n * Whether to rotate pages when `maxSize` > number of pages.\n *\n * The current page always stays in the middle if `true`.\n */\n @Input() rotate: boolean;\n\n /**\n * The number of items in your paginated collection.\n *\n * Note, that this is not the number of pages. Page numbers are calculated dynamically based on\n * `collectionSize` and `pageSize`. Ex. if you have 100 items in your collection and displaying 20 items per page,\n * you'll end up with 5 pages.\n */\n @Input() collectionSize: number;\n\n /**\n * The maximum number of pages to display.\n */\n @Input() maxSize: number;\n\n /**\n * The current page.\n *\n * Page numbers start with `1`.\n */\n @Input() page = 1;\n\n /**\n * The number of items per page.\n */\n @Input() pageSize: number;\n\n /**\n * An event fired when the page is changed. Will fire only if collection size is set and all values are valid.\n *\n * Event payload is the number of the newly selected page.\n *\n * Page numbers start with `1`.\n */\n @Output() pageChange = new EventEmitter(true);\n\n /**\n * The pagination display size.\n *\n * Bootstrap currently supports small and large sizes.\n */\n @Input() size: 'sm' | 'lg';\n\n constructor(config: NgbPaginationConfig) {\n this.disabled = config.disabled;\n this.boundaryLinks = config.boundaryLinks;\n this.directionLinks = config.directionLinks;\n this.ellipses = config.ellipses;\n this.maxSize = config.maxSize;\n this.pageSize = config.pageSize;\n this.rotate = config.rotate;\n this.size = config.size;\n }\n\n hasPrevious(): boolean { return this.page > 1; }\n\n hasNext(): boolean { return this.page < this.pageCount; }\n\n nextDisabled(): boolean { return !this.hasNext() || this.disabled; }\n\n previousDisabled(): boolean { return !this.hasPrevious() || this.disabled; }\n\n selectPage(pageNumber: number): void { this._updatePages(pageNumber); }\n\n ngOnChanges(changes: SimpleChanges): void { this._updatePages(this.page); }\n\n isEllipsis(pageNumber): boolean { return pageNumber === -1; }\n\n /**\n * Appends ellipses and first/last page number to the displayed pages\n */\n private _applyEllipses(start: number, end: number) {\n if (this.ellipses) {\n if (start > 0) {\n if (start > 1) {\n this.pages.unshift(-1);\n }\n this.pages.unshift(1);\n }\n if (end < this.pageCount) {\n if (end < (this.pageCount - 1)) {\n this.pages.push(-1);\n }\n this.pages.push(this.pageCount);\n }\n }\n }\n\n /**\n * Rotates page numbers based on maxSize items visible.\n * Currently selected page stays in the middle:\n *\n * Ex. for selected page = 6:\n * [5,*6*,7] for maxSize = 3\n * [4,5,*6*,7] for maxSize = 4\n */\n private _applyRotation(): [number, number] {\n let start = 0;\n let end = this.pageCount;\n let leftOffset = Math.floor(this.maxSize / 2);\n let rightOffset = this.maxSize % 2 === 0 ? leftOffset - 1 : leftOffset;\n\n if (this.page <= leftOffset) {\n // very beginning, no rotation -> [0..maxSize]\n end = this.maxSize;\n } else if (this.pageCount - this.page < leftOffset) {\n // very end, no rotation -> [len-maxSize..len]\n start = this.pageCount - this.maxSize;\n } else {\n // rotate\n start = this.page - leftOffset - 1;\n end = this.page + rightOffset;\n }\n\n return [start, end];\n }\n\n /**\n * Paginates page numbers based on maxSize items per page.\n */\n private _applyPagination(): [number, number] {\n let page = Math.ceil(this.page / this.maxSize) - 1;\n let start = page * this.maxSize;\n let end = start + this.maxSize;\n\n return [start, end];\n }\n\n private _setPageInRange(newPageNo) {\n const prevPageNo = this.page;\n this.page = getValueInRange(newPageNo, this.pageCount, 1);\n\n if (this.page !== prevPageNo && isNumber(this.collectionSize)) {\n this.pageChange.emit(this.page);\n }\n }\n\n private _updatePages(newPage: number) {\n this.pageCount = Math.ceil(this.collectionSize / this.pageSize);\n\n if (!isNumber(this.pageCount)) {\n this.pageCount = 0;\n }\n\n // fill-in model needed to render pages\n this.pages.length = 0;\n for (let i = 1; i <= this.pageCount; i++) {\n this.pages.push(i);\n }\n\n // set page within 1..max range\n this._setPageInRange(newPage);\n\n // apply maxSize if necessary\n if (this.maxSize > 0 && this.pageCount > this.maxSize) {\n let start = 0;\n let end = this.pageCount;\n\n // either paginating or rotating page numbers\n if (this.rotate) {\n [start, end] = this._applyRotation();\n } else {\n [start, end] = this._applyPagination();\n }\n\n this.pages = this.pages.slice(start, end);\n\n // adding ellipses\n this._applyEllipses(start, end);\n }\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\nimport {\n NgbPagination,\n NgbPaginationEllipsis,\n NgbPaginationFirst,\n NgbPaginationLast,\n NgbPaginationNext,\n NgbPaginationNumber,\n NgbPaginationPrevious\n} from './pagination';\n\nexport {\n NgbPagination,\n NgbPaginationEllipsis,\n NgbPaginationFirst,\n NgbPaginationLast,\n NgbPaginationNext,\n NgbPaginationNumber,\n NgbPaginationPrevious\n} from './pagination';\nexport {NgbPaginationConfig} from './pagination-config';\n\nconst DIRECTIVES = [\n NgbPagination, NgbPaginationEllipsis, NgbPaginationFirst, NgbPaginationLast, NgbPaginationNext, NgbPaginationNumber,\n NgbPaginationPrevious\n];\n\n@NgModule({declarations: DIRECTIVES, exports: DIRECTIVES, imports: [CommonModule]})\nexport class NgbPaginationModule {\n}\n","import {Observable, merge} from 'rxjs';\nimport {share, filter, delay, map} from 'rxjs/operators';\n\nexport class Trigger {\n constructor(public open: string, public close?: string) {\n if (!close) {\n this.close = open;\n }\n }\n\n isManual() { return this.open === 'manual' || this.close === 'manual'; }\n}\n\nconst DEFAULT_ALIASES = {\n 'hover': ['mouseenter', 'mouseleave'],\n 'focus': ['focusin', 'focusout'],\n};\n\nexport function parseTriggers(triggers: string, aliases = DEFAULT_ALIASES): Trigger[] {\n const trimmedTriggers = (triggers || '').trim();\n\n if (trimmedTriggers.length === 0) {\n return [];\n }\n\n const parsedTriggers = trimmedTriggers.split(/\\s+/).map(trigger => trigger.split(':')).map((triggerPair) => {\n let alias = aliases[triggerPair[0]] || triggerPair;\n return new Trigger(alias[0], alias[1]);\n });\n\n const manualTriggers = parsedTriggers.filter(triggerPair => triggerPair.isManual());\n\n if (manualTriggers.length > 1) {\n throw 'Triggers parse error: only one manual trigger is allowed';\n }\n\n if (manualTriggers.length === 1 && parsedTriggers.length > 1) {\n throw 'Triggers parse error: manual trigger can\\'t be mixed with other triggers';\n }\n\n return parsedTriggers;\n}\n\nexport function observeTriggers(renderer: any, nativeElement: any, triggers: Trigger[], isOpenedFn: () => boolean) {\n return new Observable(subscriber => {\n const listeners = [];\n const openFn = () => subscriber.next(true);\n const closeFn = () => subscriber.next(false);\n const toggleFn = () => subscriber.next(!isOpenedFn());\n\n triggers.forEach((trigger: Trigger) => {\n if (trigger.open === trigger.close) {\n listeners.push(renderer.listen(nativeElement, trigger.open, toggleFn));\n } else {\n listeners.push(\n renderer.listen(nativeElement, trigger.open, openFn),\n renderer.listen(nativeElement, trigger.close, closeFn));\n }\n });\n\n return () => { listeners.forEach(unsubscribeFn => unsubscribeFn()); };\n });\n}\n\nconst delayOrNoop = (time: number) => time > 0 ? delay(time) : (a: Observable) => a;\n\nexport function triggerDelay(openDelay: number, closeDelay: number, isOpenedFn: () => boolean) {\n return (input$: Observable) => {\n let pending = null;\n const filteredInput$ = input$.pipe(\n map(open => ({open})), filter(event => {\n const currentlyOpen = isOpenedFn();\n if (currentlyOpen !== event.open && (!pending || pending.open === currentlyOpen)) {\n pending = event;\n return true;\n }\n if (pending && pending.open !== event.open) {\n pending = null;\n }\n return false;\n }),\n share());\n const delayedOpen$ = filteredInput$.pipe(filter(event => event.open), delayOrNoop(openDelay));\n const delayedClose$ = filteredInput$.pipe(filter(event => !event.open), delayOrNoop(closeDelay));\n return merge(delayedOpen$, delayedClose$)\n .pipe(\n filter(event => {\n if (event === pending) {\n pending = null;\n return event.open !== isOpenedFn();\n }\n return false;\n }),\n map(event => event.open));\n };\n}\n\nexport function listenToTriggers(\n renderer: any, nativeElement: any, triggers: string, isOpenedFn: () => boolean, openFn, closeFn, openDelay = 0,\n closeDelay = 0) {\n const parsedTriggers = parseTriggers(triggers);\n\n if (parsedTriggers.length === 1 && parsedTriggers[0].isManual()) {\n return () => {};\n }\n\n const subscription = observeTriggers(renderer, nativeElement, parsedTriggers, isOpenedFn)\n .pipe(triggerDelay(openDelay, closeDelay, isOpenedFn))\n .subscribe(open => (open ? openFn() : closeFn()));\n\n return () => subscription.unsubscribe();\n}\n","import {Injectable} from '@angular/core';\nimport {PlacementArray} from '../util/positioning';\n\n/**\n * A configuration service for the [`NgbPopover`](#/components/popover/api#NgbPopover) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the popovers used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbPopoverConfig {\n autoClose: boolean | 'inside' | 'outside' = true;\n placement: PlacementArray = 'auto';\n triggers = 'click';\n container: string;\n disablePopover = false;\n popoverClass: string;\n openDelay = 0;\n closeDelay = 0;\n}\n","import {\n Component,\n Directive,\n Input,\n Output,\n EventEmitter,\n ChangeDetectionStrategy,\n OnInit,\n OnDestroy,\n OnChanges,\n Inject,\n Injector,\n Renderer2,\n ComponentRef,\n ElementRef,\n TemplateRef,\n ViewContainerRef,\n ComponentFactoryResolver,\n NgZone,\n SimpleChanges,\n ViewEncapsulation,\n ChangeDetectorRef,\n ApplicationRef\n} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\n\nimport {listenToTriggers} from '../util/triggers';\nimport {ngbAutoClose} from '../util/autoclose';\nimport {positionElements, PlacementArray} from '../util/positioning';\nimport {PopupService} from '../util/popup';\n\nimport {NgbPopoverConfig} from './popover-config';\n\nlet nextId = 0;\n\n@Component({\n selector: 'ngb-popover-window',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {'[class]': '\"popover\" + (popoverClass ? \" \" + popoverClass : \"\")', 'role': 'tooltip', '[id]': 'id'},\n template: `\n
\n

\n {{title}}\n \n

\n
`,\n styleUrls: ['./popover.scss']\n})\nexport class NgbPopoverWindow {\n @Input() title: undefined | string | TemplateRef;\n @Input() id: string;\n @Input() popoverClass: string;\n @Input() context: any;\n\n isTitleTemplate() { return this.title instanceof TemplateRef; }\n}\n\n/**\n * A lightweight and extensible directive for fancy popover creation.\n */\n@Directive({selector: '[ngbPopover]', exportAs: 'ngbPopover'})\nexport class NgbPopover implements OnInit, OnDestroy, OnChanges {\n /**\n * Indicates whether the popover should be closed on `Escape` key and inside/outside clicks:\n *\n * * `true` - closes on both outside and inside clicks as well as `Escape` presses\n * * `false` - disables the autoClose feature (NB: triggers still apply)\n * * `\"inside\"` - closes on inside clicks as well as Escape presses\n * * `\"outside\"` - closes on outside clicks (sometimes also achievable through triggers)\n * as well as `Escape` presses\n *\n * @since 3.0.0\n */\n @Input() autoClose: boolean | 'inside' | 'outside';\n\n /**\n * The string content or a `TemplateRef` for the content to be displayed in the popover.\n *\n * If the title and the content are empty, the popover won't open.\n */\n @Input() ngbPopover: string | TemplateRef;\n\n /**\n * The title of the popover.\n *\n * If the title and the content are empty, the popover won't open.\n */\n @Input() popoverTitle: string | TemplateRef;\n\n /**\n * The preferred placement of the popover.\n *\n * Possible values are `\"top\"`, `\"top-left\"`, `\"top-right\"`, `\"bottom\"`, `\"bottom-left\"`,\n * `\"bottom-right\"`, `\"left\"`, `\"left-top\"`, `\"left-bottom\"`, `\"right\"`, `\"right-top\"`,\n * `\"right-bottom\"`\n *\n * Accepts an array of strings or a string with space separated possible values.\n *\n * The default order of preference is `\"auto\"` (same as the sequence above).\n *\n * Please see the [positioning overview](#/positioning) for more details.\n */\n @Input() placement: PlacementArray;\n\n /**\n * Specifies events that should trigger the tooltip.\n *\n * Supports a space separated list of event names.\n * For more details see the [triggers demo](#/components/popover/examples#triggers).\n */\n @Input() triggers: string;\n\n /**\n * A selector specifying the element the popover should be appended to.\n *\n * Currently only supports `body`.\n */\n @Input() container: string;\n\n /**\n * If `true`, popover is disabled and won't be displayed.\n *\n * @since 1.1.0\n */\n @Input() disablePopover: boolean;\n\n /**\n * An optional class applied to the popover window element.\n *\n * @since 2.2.0\n */\n @Input() popoverClass: string;\n\n /**\n * The opening delay in ms. Works only for \"non-manual\" opening triggers defined by the `triggers` input.\n *\n * @since 4.1.0\n */\n @Input() openDelay: number;\n\n /**\n * The closing delay in ms. Works only for \"non-manual\" opening triggers defined by the `triggers` input.\n *\n * @since 4.1.0\n */\n @Input() closeDelay: number;\n\n /**\n * An event emitted when the popover is shown. Contains no payload.\n */\n @Output() shown = new EventEmitter();\n\n /**\n * An event emitted when the popover is hidden. Contains no payload.\n */\n @Output() hidden = new EventEmitter();\n\n private _ngbPopoverWindowId = `ngb-popover-${nextId++}`;\n private _popupService: PopupService;\n private _windowRef: ComponentRef;\n private _unregisterListenersFn;\n private _zoneSubscription: any;\n private _isDisabled(): boolean {\n if (this.disablePopover) {\n return true;\n }\n if (!this.ngbPopover && !this.popoverTitle) {\n return true;\n }\n return false;\n }\n\n constructor(\n private _elementRef: ElementRef, private _renderer: Renderer2, injector: Injector,\n componentFactoryResolver: ComponentFactoryResolver, viewContainerRef: ViewContainerRef, config: NgbPopoverConfig,\n private _ngZone: NgZone, @Inject(DOCUMENT) private _document: any, private _changeDetector: ChangeDetectorRef,\n private _applicationRef: ApplicationRef) {\n this.autoClose = config.autoClose;\n this.placement = config.placement;\n this.triggers = config.triggers;\n this.container = config.container;\n this.disablePopover = config.disablePopover;\n this.popoverClass = config.popoverClass;\n this.openDelay = config.openDelay;\n this.closeDelay = config.closeDelay;\n this._popupService = new PopupService(\n NgbPopoverWindow, injector, viewContainerRef, _renderer, componentFactoryResolver, _applicationRef);\n\n this._zoneSubscription = _ngZone.onStable.subscribe(() => {\n if (this._windowRef) {\n positionElements(\n this._elementRef.nativeElement, this._windowRef.location.nativeElement, this.placement,\n this.container === 'body', 'bs-popover');\n }\n });\n }\n\n /**\n * Opens the popover.\n *\n * This is considered to be a \"manual\" triggering.\n * The `context` is an optional value to be injected into the popover template when it is created.\n */\n open(context?: any) {\n if (!this._windowRef && !this._isDisabled()) {\n this._windowRef = this._popupService.open(this.ngbPopover, context);\n this._windowRef.instance.title = this.popoverTitle;\n this._windowRef.instance.context = context;\n this._windowRef.instance.popoverClass = this.popoverClass;\n this._windowRef.instance.id = this._ngbPopoverWindowId;\n\n this._renderer.setAttribute(this._elementRef.nativeElement, 'aria-describedby', this._ngbPopoverWindowId);\n\n if (this.container === 'body') {\n this._document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement);\n }\n\n // We need to detect changes, because we don't know where .open() might be called from.\n // Ex. opening popover from one of lifecycle hooks that run after the CD\n // (say from ngAfterViewInit) will result in 'ExpressionHasChanged' exception\n this._windowRef.changeDetectorRef.detectChanges();\n\n // We need to mark for check, because popover won't work inside the OnPush component.\n // Ex. when we use expression like `{{ popover.isOpen() : 'opened' : 'closed' }}`\n // inside the template of an OnPush component and we change the popover from\n // open -> closed, the expression in question won't be updated unless we explicitly\n // mark the parent component to be checked.\n this._windowRef.changeDetectorRef.markForCheck();\n\n ngbAutoClose(\n this._ngZone, this._document, this.autoClose, () => this.close(), this.hidden,\n [this._windowRef.location.nativeElement]);\n this.shown.emit();\n }\n }\n\n /**\n * Closes the popover.\n *\n * This is considered to be a \"manual\" triggering of the popover.\n */\n close(): void {\n if (this._windowRef) {\n this._renderer.removeAttribute(this._elementRef.nativeElement, 'aria-describedby');\n this._popupService.close();\n this._windowRef = null;\n this.hidden.emit();\n this._changeDetector.markForCheck();\n }\n }\n\n /**\n * Toggles the popover.\n *\n * This is considered to be a \"manual\" triggering of the popover.\n */\n toggle(): void {\n if (this._windowRef) {\n this.close();\n } else {\n this.open();\n }\n }\n\n /**\n * Returns `true`, if the popover is currently shown.\n */\n isOpen(): boolean { return this._windowRef != null; }\n\n ngOnInit() {\n this._unregisterListenersFn = listenToTriggers(\n this._renderer, this._elementRef.nativeElement, this.triggers, this.isOpen.bind(this), this.open.bind(this),\n this.close.bind(this), +this.openDelay, +this.closeDelay);\n }\n\n ngOnChanges(changes: SimpleChanges) {\n // close popover if title and content become empty, or disablePopover set to true\n if ((changes['ngbPopover'] || changes['popoverTitle'] || changes['disablePopover']) && this._isDisabled()) {\n this.close();\n }\n }\n\n ngOnDestroy() {\n this.close();\n // This check is needed as it might happen that ngOnDestroy is called before ngOnInit\n // under certain conditions, see: https://github.com/ng-bootstrap/ng-bootstrap/issues/2199\n if (this._unregisterListenersFn) {\n this._unregisterListenersFn();\n }\n this._zoneSubscription.unsubscribe();\n }\n}\n","import {NgModule} from '@angular/core';\n\nimport {NgbPopover, NgbPopoverWindow} from './popover';\nimport {CommonModule} from '@angular/common';\n\nexport {NgbPopover} from './popover';\nexport {NgbPopoverConfig} from './popover-config';\nexport {Placement} from '../util/positioning';\n\n@NgModule({\n declarations: [NgbPopover, NgbPopoverWindow],\n exports: [NgbPopover],\n imports: [CommonModule],\n entryComponents: [NgbPopoverWindow]\n})\nexport class NgbPopoverModule {\n}\n","import {Injectable} from '@angular/core';\n\n/**\n * A configuration service for the [`NgbProgressbar`](#/components/progressbar/api#NgbProgressbar) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the progress bars used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbProgressbarConfig {\n max = 100;\n animated = false;\n striped = false;\n type: string;\n showValue = false;\n height: string;\n}\n","import {Component, Input, ChangeDetectionStrategy} from '@angular/core';\nimport {getValueInRange} from '../util/util';\nimport {NgbProgressbarConfig} from './progressbar-config';\n\n/**\n * A directive that provides feedback on the progress of a workflow or an action.\n */\n@Component({\n selector: 'ngb-progressbar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n
\n
\n {{getPercentValue()}}%\n
\n
\n `\n})\nexport class NgbProgressbar {\n /**\n * The maximal value to be displayed in the progressbar.\n */\n @Input() max: number;\n\n /**\n * If `true`, the stripes on the progressbar are animated.\n *\n * Takes effect only for browsers supporting CSS3 animations, and if `striped` is `true`.\n */\n @Input() animated: boolean;\n\n /**\n * If `true`, the progress bars will be displayed as striped.\n */\n @Input() striped: boolean;\n\n /**\n * If `true`, the current percentage will be shown in the `xx%` format.\n */\n @Input() showValue: boolean;\n\n /**\n * The type of the progress bar.\n *\n * Currently Bootstrap supports `\"success\"`, `\"info\"`, `\"warning\"` or `\"danger\"`.\n */\n @Input() type: string;\n\n /**\n * The current value for the progress bar.\n *\n * Should be in the `[0, max]` range.\n */\n @Input() value = 0;\n\n /**\n * THe height of the progress bar.\n *\n * Accepts any valid CSS height values, ex. `\"2rem\"`\n */\n @Input() height: string;\n\n constructor(config: NgbProgressbarConfig) {\n this.max = config.max;\n this.animated = config.animated;\n this.striped = config.striped;\n this.type = config.type;\n this.showValue = config.showValue;\n this.height = config.height;\n }\n\n getValue() { return getValueInRange(this.value, this.max); }\n\n getPercentValue() { return 100 * this.getValue() / this.max; }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\nimport {NgbProgressbar} from './progressbar';\n\nexport {NgbProgressbar} from './progressbar';\nexport {NgbProgressbarConfig} from './progressbar-config';\n\n@NgModule({declarations: [NgbProgressbar], exports: [NgbProgressbar], imports: [CommonModule]})\nexport class NgbProgressbarModule {\n}\n","import {Injectable} from '@angular/core';\n\n/**\n * A configuration service for the [`NgbRating`](#/components/rating/api#NgbRating) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the ratings used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbRatingConfig {\n max = 10;\n readonly = false;\n resettable = false;\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n Input,\n Output,\n EventEmitter,\n OnInit,\n TemplateRef,\n OnChanges,\n SimpleChanges,\n ContentChild,\n forwardRef,\n ChangeDetectorRef\n} from '@angular/core';\nimport {NgbRatingConfig} from './rating-config';\nimport {getValueInRange} from '../util/util';\nimport {Key} from '../util/key';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\n\n/**\n * The context for the custom star display template defined in the `starTemplate`.\n */\nexport interface StarTemplateContext {\n /**\n * The star fill percentage, an integer in the `[0, 100]` range.\n */\n fill: number;\n\n /**\n * Index of the star, starts with `0`.\n */\n index: number;\n}\n\nconst NGB_RATING_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgbRating),\n multi: true\n};\n\n/**\n * A directive that helps visualising and interacting with a star rating bar.\n */\n@Component({\n selector: 'ngb-rating',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'd-inline-flex',\n 'tabindex': '0',\n 'role': 'slider',\n 'aria-valuemin': '0',\n '[attr.aria-valuemax]': 'max',\n '[attr.aria-valuenow]': 'nextRate',\n '[attr.aria-valuetext]': 'ariaValueText()',\n '[attr.aria-disabled]': 'readonly ? true : null',\n '(blur)': 'handleBlur()',\n '(keydown)': 'handleKeyDown($event)',\n '(mouseleave)': 'reset()'\n },\n template: `\n {{ fill === 100 ? '★' : '☆' }}\n \n ({{ index < nextRate ? '*' : ' ' }})\n \n \n \n \n \n `,\n providers: [NGB_RATING_VALUE_ACCESSOR]\n})\nexport class NgbRating implements ControlValueAccessor,\n OnInit, OnChanges {\n contexts: StarTemplateContext[] = [];\n disabled = false;\n nextRate: number;\n\n\n /**\n * The maximal rating that can be given.\n */\n @Input() max: number;\n\n /**\n * The current rating. Could be a decimal value like `3.75`.\n */\n @Input() rate: number;\n\n /**\n * If `true`, the rating can't be changed.\n */\n @Input() readonly: boolean;\n\n /**\n * If `true`, the rating can be reset to `0` by mouse clicking currently set rating.\n */\n @Input() resettable: boolean;\n\n /**\n * The template to override the way each star is displayed.\n *\n * Alternatively put an `` as the only child of your `` element\n */\n @Input() starTemplate: TemplateRef;\n @ContentChild(TemplateRef, {static: false}) starTemplateFromContent: TemplateRef;\n\n /**\n * An event emitted when the user is hovering over a given rating.\n *\n * Event payload equals to the rating being hovered over.\n */\n @Output() hover = new EventEmitter();\n\n /**\n * An event emitted when the user stops hovering over a given rating.\n *\n * Event payload equals to the rating of the last item being hovered over.\n */\n @Output() leave = new EventEmitter();\n\n /**\n * An event emitted when the user selects a new rating.\n *\n * Event payload equals to the newly selected rating.\n */\n @Output() rateChange = new EventEmitter(true);\n\n onChange = (_: any) => {};\n onTouched = () => {};\n\n constructor(config: NgbRatingConfig, private _changeDetectorRef: ChangeDetectorRef) {\n this.max = config.max;\n this.readonly = config.readonly;\n }\n\n ariaValueText() { return `${this.nextRate} out of ${this.max}`; }\n\n enter(value: number): void {\n if (!this.readonly && !this.disabled) {\n this._updateState(value);\n }\n this.hover.emit(value);\n }\n\n handleBlur() { this.onTouched(); }\n\n handleClick(value: number) { this.update(this.resettable && this.rate === value ? 0 : value); }\n\n handleKeyDown(event: KeyboardEvent) {\n // tslint:disable-next-line:deprecation\n switch (event.which) {\n case Key.ArrowDown:\n case Key.ArrowLeft:\n this.update(this.rate - 1);\n break;\n case Key.ArrowUp:\n case Key.ArrowRight:\n this.update(this.rate + 1);\n break;\n case Key.Home:\n this.update(0);\n break;\n case Key.End:\n this.update(this.max);\n break;\n default:\n return;\n }\n\n // note 'return' in default case\n event.preventDefault();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['rate']) {\n this.update(this.rate);\n }\n }\n\n ngOnInit(): void {\n this.contexts = Array.from({length: this.max}, (v, k) => ({fill: 0, index: k}));\n this._updateState(this.rate);\n }\n\n registerOnChange(fn: (value: any) => any): void { this.onChange = fn; }\n\n registerOnTouched(fn: () => any): void { this.onTouched = fn; }\n\n reset(): void {\n this.leave.emit(this.nextRate);\n this._updateState(this.rate);\n }\n\n setDisabledState(isDisabled: boolean) { this.disabled = isDisabled; }\n\n update(value: number, internalChange = true): void {\n const newRate = getValueInRange(value, this.max, 0);\n if (!this.readonly && !this.disabled && this.rate !== newRate) {\n this.rate = newRate;\n this.rateChange.emit(this.rate);\n }\n if (internalChange) {\n this.onChange(this.rate);\n this.onTouched();\n }\n this._updateState(this.rate);\n }\n\n writeValue(value) {\n this.update(value, false);\n this._changeDetectorRef.markForCheck();\n }\n\n private _getFillValue(index: number): number {\n const diff = this.nextRate - index;\n\n if (diff >= 1) {\n return 100;\n }\n if (diff < 1 && diff > 0) {\n return parseInt((diff * 100).toFixed(2), 10);\n }\n\n return 0;\n }\n\n private _updateState(nextValue: number) {\n this.nextRate = nextValue;\n this.contexts.forEach((context, index) => context.fill = this._getFillValue(index));\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\nimport {NgbRating} from './rating';\n\nexport {NgbRating} from './rating';\nexport {NgbRatingConfig} from './rating-config';\n\n@NgModule({declarations: [NgbRating], exports: [NgbRating], imports: [CommonModule]})\nexport class NgbRatingModule {\n}\n","import {Injectable} from '@angular/core';\n\n/**\n * A configuration service for the [`NgbTabset`](#/components/tabset/api#NgbTabset) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the tabsets used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbTabsetConfig {\n justify: 'start' | 'center' | 'end' | 'fill' | 'justified' = 'start';\n orientation: 'horizontal' | 'vertical' = 'horizontal';\n type: 'tabs' | 'pills' = 'tabs';\n}\n","import {\n Component,\n Input,\n ContentChildren,\n QueryList,\n Directive,\n TemplateRef,\n AfterContentChecked,\n Output,\n EventEmitter\n} from '@angular/core';\nimport {NgbTabsetConfig} from './tabset-config';\n\nlet nextId = 0;\n\n/**\n * A directive to wrap tab titles that need to contain HTML markup or other directives.\n *\n * Alternatively you could use the `NgbTab.title` input for string titles.\n */\n@Directive({selector: 'ng-template[ngbTabTitle]'})\nexport class NgbTabTitle {\n constructor(public templateRef: TemplateRef) {}\n}\n\n/**\n * A directive to wrap content to be displayed in a tab.\n */\n@Directive({selector: 'ng-template[ngbTabContent]'})\nexport class NgbTabContent {\n constructor(public templateRef: TemplateRef) {}\n}\n\n/**\n * A directive representing an individual tab.\n */\n@Directive({selector: 'ngb-tab'})\nexport class NgbTab implements AfterContentChecked {\n /**\n * The tab identifier.\n *\n * Must be unique for the entire document for proper accessibility support.\n */\n @Input() id = `ngb-tab-${nextId++}`;\n\n /**\n * The tab title.\n *\n * Use the [`NgbTabTitle`](#/components/tabset/api#NgbTabTitle) directive for non-string titles.\n */\n @Input() title: string;\n\n /**\n * If `true`, the current tab is disabled and can't be toggled.\n */\n @Input() disabled = false;\n\n titleTpl: NgbTabTitle | null;\n contentTpl: NgbTabContent | null;\n\n @ContentChildren(NgbTabTitle, {descendants: false}) titleTpls: QueryList;\n @ContentChildren(NgbTabContent, {descendants: false}) contentTpls: QueryList;\n\n ngAfterContentChecked() {\n // We are using @ContentChildren instead of @ContentChild as in the Angular version being used\n // only @ContentChildren allows us to specify the {descendants: false} option.\n // Without {descendants: false} we are hitting bugs described in:\n // https://github.com/ng-bootstrap/ng-bootstrap/issues/2240\n this.titleTpl = this.titleTpls.first;\n this.contentTpl = this.contentTpls.first;\n }\n}\n\n/**\n * The payload of the change event fired right before the tab change.\n */\nexport interface NgbTabChangeEvent {\n /**\n * The id of the currently active tab.\n */\n activeId: string;\n\n /**\n * The id of the newly selected tab.\n */\n nextId: string;\n\n /**\n * Calling this function will prevent tab switching.\n */\n preventDefault: () => void;\n}\n\n/**\n * A component that makes it easy to create tabbed interface.\n */\n@Component({\n selector: 'ngb-tabset',\n exportAs: 'ngbTabset',\n template: `\n \n
\n \n \n \n
\n
\n \n `\n})\nexport class NgbTabset implements AfterContentChecked {\n justifyClass: string;\n\n @ContentChildren(NgbTab) tabs: QueryList;\n\n /**\n * The identifier of the tab that should be opened **initially**.\n *\n * For subsequent tab switches use the `.select()` method and the `(tabChange)` event.\n */\n @Input() activeId: string;\n\n /**\n * If `true`, non-visible tabs content will be removed from DOM. Otherwise it will just be hidden.\n */\n @Input() destroyOnHide = true;\n\n /**\n * The horizontal alignment of the tabs with flexbox utilities.\n */\n @Input()\n set justify(className: 'start' | 'center' | 'end' | 'fill' | 'justified') {\n if (className === 'fill' || className === 'justified') {\n this.justifyClass = `nav-${className}`;\n } else {\n this.justifyClass = `justify-content-${className}`;\n }\n }\n\n /**\n * The orientation of the tabset.\n */\n @Input() orientation: 'horizontal' | 'vertical';\n\n /**\n * Type of navigation to be used for tabs.\n *\n * Currently Bootstrap supports only `\"tabs\"` and `\"pills\"`.\n *\n * Since `3.0.0` can also be an arbitrary string (ex. for custom themes).\n */\n @Input() type: 'tabs' | 'pills' | string;\n\n /**\n * A tab change event emitted right before the tab change happens.\n *\n * See [`NgbTabChangeEvent`](#/components/tabset/api#NgbTabChangeEvent) for payload details.\n */\n @Output() tabChange = new EventEmitter();\n\n constructor(config: NgbTabsetConfig) {\n this.type = config.type;\n this.justify = config.justify;\n this.orientation = config.orientation;\n }\n\n /**\n * Selects the tab with the given id and shows its associated content panel.\n *\n * Any other tab that was previously selected becomes unselected and its associated pane is removed from DOM or\n * hidden depending on the `destroyOnHide` value.\n */\n select(tabId: string) {\n let selectedTab = this._getTabById(tabId);\n if (selectedTab && !selectedTab.disabled && this.activeId !== selectedTab.id) {\n let defaultPrevented = false;\n\n this.tabChange.emit(\n {activeId: this.activeId, nextId: selectedTab.id, preventDefault: () => { defaultPrevented = true; }});\n\n if (!defaultPrevented) {\n this.activeId = selectedTab.id;\n }\n }\n }\n\n ngAfterContentChecked() {\n // auto-correct activeId that might have been set incorrectly as input\n let activeTab = this._getTabById(this.activeId);\n this.activeId = activeTab ? activeTab.id : (this.tabs.length ? this.tabs.first.id : null);\n }\n\n private _getTabById(id: string): NgbTab {\n let tabsWithId: NgbTab[] = this.tabs.filter(tab => tab.id === id);\n return tabsWithId.length ? tabsWithId[0] : null;\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\nimport {NgbTabset, NgbTab, NgbTabContent, NgbTabTitle} from './tabset';\n\nexport {NgbTabset, NgbTab, NgbTabContent, NgbTabTitle, NgbTabChangeEvent} from './tabset';\nexport {NgbTabsetConfig} from './tabset-config';\n\nconst NGB_TABSET_DIRECTIVES = [NgbTabset, NgbTab, NgbTabContent, NgbTabTitle];\n\n@NgModule({declarations: NGB_TABSET_DIRECTIVES, exports: NGB_TABSET_DIRECTIVES, imports: [CommonModule]})\nexport class NgbTabsetModule {\n}\n","import {isNumber, toInteger} from '../util/util';\n\nexport class NgbTime {\n hour: number;\n minute: number;\n second: number;\n\n constructor(hour?: number, minute?: number, second?: number) {\n this.hour = toInteger(hour);\n this.minute = toInteger(minute);\n this.second = toInteger(second);\n }\n\n changeHour(step = 1) { this.updateHour((isNaN(this.hour) ? 0 : this.hour) + step); }\n\n updateHour(hour: number) {\n if (isNumber(hour)) {\n this.hour = (hour < 0 ? 24 + hour : hour) % 24;\n } else {\n this.hour = NaN;\n }\n }\n\n changeMinute(step = 1) { this.updateMinute((isNaN(this.minute) ? 0 : this.minute) + step); }\n\n updateMinute(minute: number) {\n if (isNumber(minute)) {\n this.minute = minute % 60 < 0 ? 60 + minute % 60 : minute % 60;\n this.changeHour(Math.floor(minute / 60));\n } else {\n this.minute = NaN;\n }\n }\n\n changeSecond(step = 1) { this.updateSecond((isNaN(this.second) ? 0 : this.second) + step); }\n\n updateSecond(second: number) {\n if (isNumber(second)) {\n this.second = second < 0 ? 60 + second % 60 : second % 60;\n this.changeMinute(Math.floor(second / 60));\n } else {\n this.second = NaN;\n }\n }\n\n isValid(checkSecs = true) {\n return isNumber(this.hour) && isNumber(this.minute) && (checkSecs ? isNumber(this.second) : true);\n }\n\n toString() { return `${this.hour || 0}:${this.minute || 0}:${this.second || 0}`; }\n}\n","import {Injectable} from '@angular/core';\n\n/**\n * A configuration service for the [`NgbTimepicker`](#/components/timepicker/api#NgbTimepicker) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the timepickers used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbTimepickerConfig {\n meridian = false;\n spinners = true;\n seconds = false;\n hourStep = 1;\n minuteStep = 1;\n secondStep = 1;\n disabled = false;\n readonlyInputs = false;\n size: 'small' | 'medium' | 'large' = 'medium';\n}\n","import {Injectable} from '@angular/core';\nimport {NgbTimeStruct} from './ngb-time-struct';\nimport {isInteger} from '../util/util';\n\nexport function NGB_DATEPICKER_TIME_ADAPTER_FACTORY() {\n return new NgbTimeStructAdapter();\n}\n\n/**\n * An abstract service that does the conversion between the internal timepicker `NgbTimeStruct` model and\n * any provided user time model `T`, ex. a string, a native date, etc.\n *\n * The adapter is used **only** for conversion when binding timepicker to a form control,\n * ex. `[(ngModel)]=\"userTimeModel\"`. Here `userTimeModel` can be of any type.\n *\n * The default timepicker implementation assumes we use `NgbTimeStruct` as a user model.\n *\n * See the [custom time adapter demo](#/components/timepicker/examples#adapter) for an example.\n *\n * @since 2.2.0\n */\n@Injectable({providedIn: 'root', useFactory: NGB_DATEPICKER_TIME_ADAPTER_FACTORY})\nexport abstract class NgbTimeAdapter {\n /**\n * Converts a user-model time of type `T` to an `NgbTimeStruct` for internal use.\n */\n abstract fromModel(value: T): NgbTimeStruct;\n\n /**\n * Converts an internal `NgbTimeStruct` time to a user-model time of type `T`.\n */\n abstract toModel(time: NgbTimeStruct): T;\n}\n\n@Injectable()\nexport class NgbTimeStructAdapter extends NgbTimeAdapter {\n /**\n * Converts a NgbTimeStruct value into NgbTimeStruct value\n */\n fromModel(time: NgbTimeStruct): NgbTimeStruct {\n return (time && isInteger(time.hour) && isInteger(time.minute)) ?\n {hour: time.hour, minute: time.minute, second: isInteger(time.second) ? time.second : null} :\n null;\n }\n\n /**\n * Converts a NgbTimeStruct value into NgbTimeStruct value\n */\n toModel(time: NgbTimeStruct): NgbTimeStruct {\n return (time && isInteger(time.hour) && isInteger(time.minute)) ?\n {hour: time.hour, minute: time.minute, second: isInteger(time.second) ? time.second : null} :\n null;\n }\n}\n","import {Inject, Injectable, LOCALE_ID} from '@angular/core';\nimport {FormStyle, getLocaleDayPeriods, TranslationWidth} from '@angular/common';\n\nexport function NGB_TIMEPICKER_I18N_FACTORY(locale) {\n return new NgbTimepickerI18nDefault(locale);\n}\n\n/**\n * Type of the service supplying day periods (for example, 'AM' and 'PM') to NgbTimepicker component.\n * The default implementation of this service honors the Angular locale, and uses the registered locale data,\n * as explained in the Angular i18n guide.\n */\n@Injectable({providedIn: 'root', useFactory: NGB_TIMEPICKER_I18N_FACTORY, deps: [LOCALE_ID]})\nexport abstract class NgbTimepickerI18n {\n /**\n * Returns the name for the period before midday.\n */\n abstract getMorningPeriod(): string;\n\n /**\n * Returns the name for the period after midday.\n */\n abstract getAfternoonPeriod(): string;\n}\n\n@Injectable()\nexport class NgbTimepickerI18nDefault extends NgbTimepickerI18n {\n private _periods: [string, string];\n\n constructor(@Inject(LOCALE_ID) locale: string) {\n super();\n\n this._periods = getLocaleDayPeriods(locale, FormStyle.Standalone, TranslationWidth.Narrow);\n }\n\n getMorningPeriod(): string { return this._periods[0]; }\n\n getAfternoonPeriod(): string { return this._periods[1]; }\n}\n","import {\n ChangeDetectorRef,\n Component,\n forwardRef,\n Input,\n OnChanges,\n SimpleChanges,\n ViewEncapsulation\n} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\n\nimport {isInteger, isNumber, padNumber, toInteger} from '../util/util';\nimport {NgbTime} from './ngb-time';\nimport {NgbTimepickerConfig} from './timepicker-config';\nimport {NgbTimeAdapter} from './ngb-time-adapter';\nimport {NgbTimepickerI18n} from './timepicker-i18n';\n\nconst NGB_TIMEPICKER_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgbTimepicker),\n multi: true\n};\n\n/**\n * A directive that helps with wth picking hours, minutes and seconds.\n */\n@Component({\n selector: 'ngb-timepicker',\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./timepicker.scss'],\n template: `\n
\n
\n
\n \n \n \n
\n
:
\n
\n \n \n \n
\n
:
\n
\n \n \n \n
\n
\n
\n \n
\n
\n
\n `,\n providers: [NGB_TIMEPICKER_VALUE_ACCESSOR]\n})\nexport class NgbTimepicker implements ControlValueAccessor,\n OnChanges {\n disabled: boolean;\n model: NgbTime;\n\n private _hourStep: number;\n private _minuteStep: number;\n private _secondStep: number;\n\n /**\n * Whether to display 12H or 24H mode.\n */\n @Input() meridian: boolean;\n\n /**\n * If `true`, the spinners above and below inputs are visible.\n */\n @Input() spinners: boolean;\n\n /**\n * If `true`, it is possible to select seconds.\n */\n @Input() seconds: boolean;\n\n /**\n * The number of hours to add/subtract when clicking hour spinners.\n */\n @Input()\n set hourStep(step: number) {\n this._hourStep = isInteger(step) ? step : this._config.hourStep;\n }\n\n get hourStep(): number { return this._hourStep; }\n\n /**\n * The number of minutes to add/subtract when clicking minute spinners.\n */\n @Input()\n set minuteStep(step: number) {\n this._minuteStep = isInteger(step) ? step : this._config.minuteStep;\n }\n\n get minuteStep(): number { return this._minuteStep; }\n\n /**\n * The number of seconds to add/subtract when clicking second spinners.\n */\n @Input()\n set secondStep(step: number) {\n this._secondStep = isInteger(step) ? step : this._config.secondStep;\n }\n\n get secondStep(): number { return this._secondStep; }\n\n /**\n * If `true`, the timepicker is readonly and can't be changed.\n */\n @Input() readonlyInputs: boolean;\n\n /**\n * The size of inputs and buttons.\n */\n @Input() size: 'small' | 'medium' | 'large';\n\n constructor(\n private readonly _config: NgbTimepickerConfig, private _ngbTimeAdapter: NgbTimeAdapter,\n private _cd: ChangeDetectorRef, public i18n: NgbTimepickerI18n) {\n this.meridian = _config.meridian;\n this.spinners = _config.spinners;\n this.seconds = _config.seconds;\n this.hourStep = _config.hourStep;\n this.minuteStep = _config.minuteStep;\n this.secondStep = _config.secondStep;\n this.disabled = _config.disabled;\n this.readonlyInputs = _config.readonlyInputs;\n this.size = _config.size;\n }\n\n onChange = (_: any) => {};\n onTouched = () => {};\n\n writeValue(value) {\n const structValue = this._ngbTimeAdapter.fromModel(value);\n this.model = structValue ? new NgbTime(structValue.hour, structValue.minute, structValue.second) : new NgbTime();\n if (!this.seconds && (!structValue || !isNumber(structValue.second))) {\n this.model.second = 0;\n }\n this._cd.markForCheck();\n }\n\n registerOnChange(fn: (value: any) => any): void { this.onChange = fn; }\n\n registerOnTouched(fn: () => any): void { this.onTouched = fn; }\n\n setDisabledState(isDisabled: boolean) { this.disabled = isDisabled; }\n\n changeHour(step: number) {\n this.model.changeHour(step);\n this.propagateModelChange();\n }\n\n changeMinute(step: number) {\n this.model.changeMinute(step);\n this.propagateModelChange();\n }\n\n changeSecond(step: number) {\n this.model.changeSecond(step);\n this.propagateModelChange();\n }\n\n updateHour(newVal: string) {\n const isPM = this.model.hour >= 12;\n const enteredHour = toInteger(newVal);\n if (this.meridian && (isPM && enteredHour < 12 || !isPM && enteredHour === 12)) {\n this.model.updateHour(enteredHour + 12);\n } else {\n this.model.updateHour(enteredHour);\n }\n this.propagateModelChange();\n }\n\n updateMinute(newVal: string) {\n this.model.updateMinute(toInteger(newVal));\n this.propagateModelChange();\n }\n\n updateSecond(newVal: string) {\n this.model.updateSecond(toInteger(newVal));\n this.propagateModelChange();\n }\n\n toggleMeridian() {\n if (this.meridian) {\n this.changeHour(12);\n }\n }\n\n formatHour(value: number) {\n if (isNumber(value)) {\n if (this.meridian) {\n return padNumber(value % 12 === 0 ? 12 : value % 12);\n } else {\n return padNumber(value % 24);\n }\n } else {\n return padNumber(NaN);\n }\n }\n\n formatMinSec(value: number) { return padNumber(value); }\n\n get isSmallSize(): boolean { return this.size === 'small'; }\n\n get isLargeSize(): boolean { return this.size === 'large'; }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['seconds'] && !this.seconds && this.model && !isNumber(this.model.second)) {\n this.model.second = 0;\n this.propagateModelChange(false);\n }\n }\n\n private propagateModelChange(touched = true) {\n if (touched) {\n this.onTouched();\n }\n if (this.model.isValid(this.seconds)) {\n this.onChange(\n this._ngbTimeAdapter.toModel({hour: this.model.hour, minute: this.model.minute, second: this.model.second}));\n } else {\n this.onChange(this._ngbTimeAdapter.toModel(null));\n }\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\nimport {NgbTimepicker} from './timepicker';\n\nexport {NgbTimepicker} from './timepicker';\nexport {NgbTimepickerConfig} from './timepicker-config';\nexport {NgbTimeStruct} from './ngb-time-struct';\nexport {NgbTimeAdapter} from './ngb-time-adapter';\nexport {NgbTimepickerI18n} from './timepicker-i18n';\n\n@NgModule({declarations: [NgbTimepicker], exports: [NgbTimepicker], imports: [CommonModule]})\nexport class NgbTimepickerModule {\n}\n","import {Injectable} from '@angular/core';\n\n/**\n * Interface used to type all toast config options. See `NgbToastConfig`.\n *\n * @since 5.0.0\n */\nexport interface NgbToastOptions {\n /**\n * Specify if the toast component should emit the `hide()` output\n * after a certain `delay` in ms.\n */\n autohide?: boolean;\n\n /**\n * Delay in ms after which the `hide()` output should be emitted.\n */\n delay?: number;\n\n /**\n * Type of aria-live attribute to be used.\n *\n * Could be one of these 2 values (as string):\n * - `polite` (default)\n * - `alert`\n */\n ariaLive?: 'polite' | 'alert';\n}\n\n/**\n * Configuration service for the NgbToast component. You can inject this service, typically in your root component,\n * and customize the values of its properties in order to provide default values for all the toasts used in the\n * application.\n *\n * @since 5.0.0\n */\n@Injectable({providedIn: 'root'})\nexport class NgbToastConfig implements NgbToastOptions {\n autohide = true;\n delay = 500;\n ariaLive: 'polite' | 'alert' = 'polite';\n}\n","import {\n AfterContentInit,\n Attribute,\n Component,\n ContentChild,\n Directive,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n TemplateRef,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport {NgbToastConfig} from './toast-config';\n\n/**\n * This directive allows the usage of HTML markup or other directives\n * inside of the toast's header.\n *\n * @since 5.0.0\n */\n@Directive({selector: '[ngbToastHeader]'})\nexport class NgbToastHeader {\n}\n\n/**\n * Toasts provide feedback messages as notifications to the user.\n * Goal is to mimic the push notifications available both on mobile and desktop operating systems.\n *\n * @since 5.0.0\n */\n@Component({\n selector: 'ngb-toast',\n exportAs: 'ngbToast',\n encapsulation: ViewEncapsulation.None,\n host: {\n 'role': 'alert',\n '[attr.aria-live]': 'ariaLive',\n 'aria-atomic': 'true',\n '[class.toast]': 'true',\n '[class.show]': 'true',\n '[class.autohide]': 'autohide',\n },\n template: `\n \n {{header}}\n \n \n
\n \n \n
\n
\n
\n \n
\n `,\n styleUrls: ['./toast.scss']\n})\nexport class NgbToast implements AfterContentInit,\n OnChanges {\n private _timeoutID;\n\n /**\n * Delay after which the toast will hide (ms).\n * default: `500` (ms) (inherited from NgbToastConfig)\n */\n @Input() delay: number;\n\n /**\n * Auto hide the toast after a delay in ms.\n * default: `true` (inherited from NgbToastConfig)\n */\n @Input() autohide: boolean;\n\n /**\n * Text to be used as toast's header.\n * Ignored if a ContentChild template is specified at the same time.\n */\n @Input() header: string;\n\n /**\n * A template like `` can be\n * used in the projected content to allow markup usage.\n */\n @ContentChild(NgbToastHeader, {read: TemplateRef, static: true}) contentHeaderTpl: TemplateRef| null = null;\n\n /**\n * An event fired immediately when toast's `hide()` method has been called.\n * It can only occur in 2 different scenarios:\n * - `autohide` timeout fires\n * - user clicks on a closing cross (×)\n *\n * Additionally this output is purely informative. The toast won't disappear. It's up to the user to take care of\n * that.\n */\n @Output('hide') hideOutput = new EventEmitter();\n\n constructor(@Attribute('aria-live') public ariaLive: string, config: NgbToastConfig) {\n if (this.ariaLive == null) {\n this.ariaLive = config.ariaLive;\n }\n this.delay = config.delay;\n this.autohide = config.autohide;\n }\n\n ngAfterContentInit() { this._init(); }\n\n ngOnChanges(changes: SimpleChanges) {\n if ('autohide' in changes) {\n this._clearTimeout();\n this._init();\n }\n }\n\n hide() {\n this._clearTimeout();\n this.hideOutput.emit();\n }\n\n private _init() {\n if (this.autohide && !this._timeoutID) {\n this._timeoutID = setTimeout(() => this.hide(), this.delay);\n }\n }\n\n private _clearTimeout() {\n if (this._timeoutID) {\n clearTimeout(this._timeoutID);\n this._timeoutID = null;\n }\n }\n}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\n\nimport {NgbToast, NgbToastHeader} from './toast';\n\nexport {NgbToast, NgbToastHeader} from './toast';\nexport {NgbToastConfig, NgbToastOptions} from './toast-config';\n\n@NgModule({declarations: [NgbToast, NgbToastHeader], imports: [CommonModule], exports: [NgbToast, NgbToastHeader]})\nexport class NgbToastModule {\n}\n","import {Injectable} from '@angular/core';\nimport {PlacementArray} from '../util/positioning';\n\n/**\n * A configuration service for the [`NgbTooltip`](#/components/tooltip/api#NgbTooltip) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the tooltips used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbTooltipConfig {\n autoClose: boolean | 'inside' | 'outside' = true;\n placement: PlacementArray = 'auto';\n triggers = 'hover focus';\n container: string;\n disableTooltip = false;\n tooltipClass: string;\n openDelay = 0;\n closeDelay = 0;\n}\n","import {\n Component,\n Directive,\n Input,\n Output,\n EventEmitter,\n ChangeDetectionStrategy,\n OnInit,\n OnDestroy,\n Inject,\n Injector,\n Renderer2,\n ComponentRef,\n ElementRef,\n TemplateRef,\n ViewContainerRef,\n ComponentFactoryResolver,\n NgZone,\n ViewEncapsulation,\n ChangeDetectorRef,\n ApplicationRef\n} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\n\nimport {listenToTriggers} from '../util/triggers';\nimport {ngbAutoClose} from '../util/autoclose';\nimport {positionElements, PlacementArray} from '../util/positioning';\nimport {PopupService} from '../util/popup';\n\nimport {NgbTooltipConfig} from './tooltip-config';\n\nlet nextId = 0;\n\n@Component({\n selector: 'ngb-tooltip-window',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {'[class]': '\"tooltip show\" + (tooltipClass ? \" \" + tooltipClass : \"\")', 'role': 'tooltip', '[id]': 'id'},\n template: `
`,\n styleUrls: ['./tooltip.scss']\n})\nexport class NgbTooltipWindow {\n @Input() id: string;\n @Input() tooltipClass: string;\n}\n\n/**\n * A lightweight and extensible directive for fancy tooltip creation.\n */\n@Directive({selector: '[ngbTooltip]', exportAs: 'ngbTooltip'})\nexport class NgbTooltip implements OnInit, OnDestroy {\n /**\n * Indicates whether the tooltip should be closed on `Escape` key and inside/outside clicks:\n *\n * * `true` - closes on both outside and inside clicks as well as `Escape` presses\n * * `false` - disables the autoClose feature (NB: triggers still apply)\n * * `\"inside\"` - closes on inside clicks as well as Escape presses\n * * `\"outside\"` - closes on outside clicks (sometimes also achievable through triggers)\n * as well as `Escape` presses\n *\n * @since 3.0.0\n */\n @Input() autoClose: boolean | 'inside' | 'outside';\n\n /**\n * The preferred placement of the tooltip.\n *\n * Possible values are `\"top\"`, `\"top-left\"`, `\"top-right\"`, `\"bottom\"`, `\"bottom-left\"`,\n * `\"bottom-right\"`, `\"left\"`, `\"left-top\"`, `\"left-bottom\"`, `\"right\"`, `\"right-top\"`,\n * `\"right-bottom\"`\n *\n * Accepts an array of strings or a string with space separated possible values.\n *\n * The default order of preference is `\"auto\"` (same as the sequence above).\n *\n * Please see the [positioning overview](#/positioning) for more details.\n */\n @Input() placement: PlacementArray;\n\n /**\n * Specifies events that should trigger the tooltip.\n *\n * Supports a space separated list of event names.\n * For more details see the [triggers demo](#/components/tooltip/examples#triggers).\n */\n @Input() triggers: string;\n\n /**\n * A selector specifying the element the tooltip should be appended to.\n *\n * Currently only supports `\"body\"`.\n */\n @Input() container: string;\n\n /**\n * If `true`, tooltip is disabled and won't be displayed.\n *\n * @since 1.1.0\n */\n @Input() disableTooltip: boolean;\n\n /**\n * An optional class applied to the tooltip window element.\n *\n * @since 3.2.0\n */\n @Input() tooltipClass: string;\n\n /**\n * The opening delay in ms. Works only for \"non-manual\" opening triggers defined by the `triggers` input.\n *\n * @since 4.1.0\n */\n @Input() openDelay: number;\n\n /**\n * The closing delay in ms. Works only for \"non-manual\" opening triggers defined by the `triggers` input.\n *\n * @since 4.1.0\n */\n @Input() closeDelay: number;\n\n /**\n * An event emitted when the tooltip is shown. Contains no payload.\n */\n @Output() shown = new EventEmitter();\n /**\n * An event emitted when the popover is hidden. Contains no payload.\n */\n @Output() hidden = new EventEmitter();\n\n private _ngbTooltip: string | TemplateRef;\n private _ngbTooltipWindowId = `ngb-tooltip-${nextId++}`;\n private _popupService: PopupService;\n private _windowRef: ComponentRef;\n private _unregisterListenersFn;\n private _zoneSubscription: any;\n\n constructor(\n private _elementRef: ElementRef, private _renderer: Renderer2, injector: Injector,\n componentFactoryResolver: ComponentFactoryResolver, viewContainerRef: ViewContainerRef, config: NgbTooltipConfig,\n private _ngZone: NgZone, @Inject(DOCUMENT) private _document: any, private _changeDetector: ChangeDetectorRef,\n private _applicationRef: ApplicationRef) {\n this.autoClose = config.autoClose;\n this.placement = config.placement;\n this.triggers = config.triggers;\n this.container = config.container;\n this.disableTooltip = config.disableTooltip;\n this.tooltipClass = config.tooltipClass;\n this.openDelay = config.openDelay;\n this.closeDelay = config.closeDelay;\n this._popupService = new PopupService(\n NgbTooltipWindow, injector, viewContainerRef, _renderer, componentFactoryResolver, _applicationRef);\n\n this._zoneSubscription = _ngZone.onStable.subscribe(() => {\n if (this._windowRef) {\n positionElements(\n this._elementRef.nativeElement, this._windowRef.location.nativeElement, this.placement,\n this.container === 'body', 'bs-tooltip');\n }\n });\n }\n\n /**\n * The string content or a `TemplateRef` for the content to be displayed in the tooltip.\n *\n * If the content if falsy, the tooltip won't open.\n */\n @Input()\n set ngbTooltip(value: string | TemplateRef) {\n this._ngbTooltip = value;\n if (!value && this._windowRef) {\n this.close();\n }\n }\n\n get ngbTooltip() { return this._ngbTooltip; }\n\n /**\n * Opens the tooltip.\n *\n * This is considered to be a \"manual\" triggering.\n * The `context` is an optional value to be injected into the tooltip template when it is created.\n */\n open(context?: any) {\n if (!this._windowRef && this._ngbTooltip && !this.disableTooltip) {\n this._windowRef = this._popupService.open(this._ngbTooltip, context);\n this._windowRef.instance.tooltipClass = this.tooltipClass;\n this._windowRef.instance.id = this._ngbTooltipWindowId;\n\n this._renderer.setAttribute(this._elementRef.nativeElement, 'aria-describedby', this._ngbTooltipWindowId);\n\n if (this.container === 'body') {\n this._document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement);\n }\n\n // We need to detect changes, because we don't know where .open() might be called from.\n // Ex. opening tooltip from one of lifecycle hooks that run after the CD\n // (say from ngAfterViewInit) will result in 'ExpressionHasChanged' exception\n this._windowRef.changeDetectorRef.detectChanges();\n\n // We need to mark for check, because tooltip won't work inside the OnPush component.\n // Ex. when we use expression like `{{ tooltip.isOpen() : 'opened' : 'closed' }}`\n // inside the template of an OnPush component and we change the tooltip from\n // open -> closed, the expression in question won't be updated unless we explicitly\n // mark the parent component to be checked.\n this._windowRef.changeDetectorRef.markForCheck();\n\n ngbAutoClose(\n this._ngZone, this._document, this.autoClose, () => this.close(), this.hidden,\n [this._windowRef.location.nativeElement]);\n\n this.shown.emit();\n }\n }\n\n /**\n * Closes the tooltip.\n *\n * This is considered to be a \"manual\" triggering of the tooltip.\n */\n close(): void {\n if (this._windowRef != null) {\n this._renderer.removeAttribute(this._elementRef.nativeElement, 'aria-describedby');\n this._popupService.close();\n this._windowRef = null;\n this.hidden.emit();\n this._changeDetector.markForCheck();\n }\n }\n\n /**\n * Toggles the tooltip.\n *\n * This is considered to be a \"manual\" triggering of the tooltip.\n */\n toggle(): void {\n if (this._windowRef) {\n this.close();\n } else {\n this.open();\n }\n }\n\n /**\n * Returns `true`, if the popover is currently shown.\n */\n isOpen(): boolean { return this._windowRef != null; }\n\n ngOnInit() {\n this._unregisterListenersFn = listenToTriggers(\n this._renderer, this._elementRef.nativeElement, this.triggers, this.isOpen.bind(this), this.open.bind(this),\n this.close.bind(this), +this.openDelay, +this.closeDelay);\n }\n\n ngOnDestroy() {\n this.close();\n // This check is needed as it might happen that ngOnDestroy is called before ngOnInit\n // under certain conditions, see: https://github.com/ng-bootstrap/ng-bootstrap/issues/2199\n if (this._unregisterListenersFn) {\n this._unregisterListenersFn();\n }\n this._zoneSubscription.unsubscribe();\n }\n}\n","import {NgModule} from '@angular/core';\n\nimport {NgbTooltip, NgbTooltipWindow} from './tooltip';\n\nexport {NgbTooltipConfig} from './tooltip-config';\nexport {NgbTooltip} from './tooltip';\nexport {Placement} from '../util/positioning';\n\n@NgModule({declarations: [NgbTooltip, NgbTooltipWindow], exports: [NgbTooltip], entryComponents: [NgbTooltipWindow]})\nexport class NgbTooltipModule {\n}\n","import {Component, Input, OnChanges, ChangeDetectionStrategy, SimpleChanges, ViewEncapsulation} from '@angular/core';\nimport {regExpEscape, toString} from '../util/util';\n\n/**\n * A component that helps with text highlighting.\n *\n * If splits the `result` text into parts that contain the searched `term` and generates the HTML markup to simplify\n * highlighting:\n *\n * Ex. `result=\"Alaska\"` and `term=\"as\"` will produce `Alaska`.\n */\n@Component({\n selector: 'ngb-highlight',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `` +\n `{{part}}{{part}}` +\n ``, // template needs to be formatted in a certain way so we don't add empty text nodes\n styleUrls: ['./highlight.scss']\n})\nexport class NgbHighlight implements OnChanges {\n parts: string[];\n\n /**\n * The CSS class for `` elements wrapping the `term` inside the `result`.\n */\n @Input() highlightClass = 'ngb-highlight';\n\n /**\n * The text highlighting is added to.\n *\n * If the `term` is found inside this text, it will be highlighted.\n * If the `term` contains array then all the items from it will be highlighted inside the text.\n */\n @Input() result: string;\n\n /**\n * The term or array of terms to be highlighted.\n * Since version `v4.2.0` term could be a `string[]`\n */\n @Input() term: string | string[];\n\n ngOnChanges(changes: SimpleChanges) {\n const result = toString(this.result);\n\n const terms = Array.isArray(this.term) ? this.term : [this.term];\n const escapedTerms = terms.map(term => regExpEscape(toString(term))).filter(term => term);\n\n this.parts = escapedTerms.length ? result.split(new RegExp(`(${escapedTerms.join('|')})`, 'gmi')) : [result];\n }\n}\n","import {Component, Input, Output, EventEmitter, TemplateRef, OnInit} from '@angular/core';\n\nimport {toString} from '../util/util';\n\n/**\n * The context for the typeahead result template in case you want to override the default one.\n */\nexport interface ResultTemplateContext {\n /**\n * Your typeahead result item.\n */\n result: any;\n\n /**\n * Search term from the `` used to get current result.\n */\n term: string;\n}\n\n@Component({\n selector: 'ngb-typeahead-window',\n exportAs: 'ngbTypeaheadWindow',\n host: {'(mousedown)': '$event.preventDefault()', 'class': 'dropdown-menu show', 'role': 'listbox', '[id]': 'id'},\n template: `\n \n \n \n \n \n \n `\n})\nexport class NgbTypeaheadWindow implements OnInit {\n activeIdx = 0;\n\n /**\n * The id for the typeahead window. The id should be unique and the same\n * as the associated typeahead's id.\n */\n @Input() id: string;\n\n /**\n * Flag indicating if the first row should be active initially\n */\n @Input() focusFirst = true;\n\n /**\n * Typeahead match results to be displayed\n */\n @Input() results;\n\n /**\n * Search term used to get current results\n */\n @Input() term: string;\n\n /**\n * A function used to format a given result before display. This function should return a formatted string without any\n * HTML markup\n */\n @Input() formatter = toString;\n\n /**\n * A template to override a matching result default display\n */\n @Input() resultTemplate: TemplateRef;\n\n /**\n * Event raised when user selects a particular result row\n */\n @Output('select') selectEvent = new EventEmitter();\n\n @Output('activeChange') activeChangeEvent = new EventEmitter();\n\n hasActive() { return this.activeIdx > -1 && this.activeIdx < this.results.length; }\n\n getActive() { return this.results[this.activeIdx]; }\n\n markActive(activeIdx: number) {\n this.activeIdx = activeIdx;\n this._activeChanged();\n }\n\n next() {\n if (this.activeIdx === this.results.length - 1) {\n this.activeIdx = this.focusFirst ? (this.activeIdx + 1) % this.results.length : -1;\n } else {\n this.activeIdx++;\n }\n this._activeChanged();\n }\n\n prev() {\n if (this.activeIdx < 0) {\n this.activeIdx = this.results.length - 1;\n } else if (this.activeIdx === 0) {\n this.activeIdx = this.focusFirst ? this.results.length - 1 : -1;\n } else {\n this.activeIdx--;\n }\n this._activeChanged();\n }\n\n resetActive() {\n this.activeIdx = this.focusFirst ? 0 : -1;\n this._activeChanged();\n }\n\n select(item) { this.selectEvent.emit(item); }\n\n ngOnInit() { this.resetActive(); }\n\n private _activeChanged() {\n this.activeChangeEvent.emit(this.activeIdx >= 0 ? this.id + '-' + this.activeIdx : undefined);\n }\n}\n","import {Injectable, Inject, InjectionToken, OnDestroy} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\n\n\n\n// usefulness (and default value) of delay documented in Material's CDK\n// https://github.com/angular/material2/blob/6405da9b8e8532a7e5c854c920ee1815c275d734/src/cdk/a11y/live-announcer/live-announcer.ts#L50\nexport type ARIA_LIVE_DELAY_TYPE = number | null;\nexport const ARIA_LIVE_DELAY = new InjectionToken(\n 'live announcer delay', {providedIn: 'root', factory: ARIA_LIVE_DELAY_FACTORY});\nexport function ARIA_LIVE_DELAY_FACTORY(): number {\n return 100;\n}\n\n\nfunction getLiveElement(document: any, lazyCreate = false): HTMLElement | null {\n let element = document.body.querySelector('#ngb-live') as HTMLElement;\n\n if (element == null && lazyCreate) {\n element = document.createElement('div');\n\n element.setAttribute('id', 'ngb-live');\n element.setAttribute('aria-live', 'polite');\n element.setAttribute('aria-atomic', 'true');\n\n element.classList.add('sr-only');\n\n document.body.appendChild(element);\n }\n\n return element;\n}\n\n\n\n@Injectable({providedIn: 'root'})\nexport class Live implements OnDestroy {\n constructor(@Inject(DOCUMENT) private _document: any, @Inject(ARIA_LIVE_DELAY) private _delay: any) {}\n\n ngOnDestroy() {\n const element = getLiveElement(this._document);\n if (element) {\n element.parentElement.removeChild(element);\n }\n }\n\n say(message: string) {\n const element = getLiveElement(this._document, true);\n const delay = this._delay;\n\n element.textContent = '';\n const setText = () => element.textContent = message;\n if (delay === null) {\n setText();\n } else {\n setTimeout(setText, delay);\n }\n }\n}\n","import {Injectable} from '@angular/core';\nimport {PlacementArray} from '../util/positioning';\n\n/**\n * A configuration service for the [`NgbTypeahead`](#/components/typeahead/api#NgbTypeahead) component.\n *\n * You can inject this service, typically in your root component, and customize the values of its properties in\n * order to provide default values for all the typeaheads used in the application.\n */\n@Injectable({providedIn: 'root'})\nexport class NgbTypeaheadConfig {\n container;\n editable = true;\n focusFirst = true;\n showHint = false;\n placement: PlacementArray = ['bottom-left', 'bottom-right', 'top-left', 'top-right'];\n}\n","import {\n ChangeDetectorRef,\n ComponentFactoryResolver,\n ComponentRef,\n Directive,\n ElementRef,\n EventEmitter,\n forwardRef,\n Inject,\n Injector,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Output,\n Renderer2,\n TemplateRef,\n ViewContainerRef,\n ApplicationRef\n} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {DOCUMENT} from '@angular/common';\nimport {BehaviorSubject, fromEvent, Observable, Subject, Subscription} from 'rxjs';\nimport {map, switchMap, tap} from 'rxjs/operators';\n\nimport {Live} from '../util/accessibility/live';\nimport {ngbAutoClose} from '../util/autoclose';\nimport {Key} from '../util/key';\nimport {PopupService} from '../util/popup';\nimport {PlacementArray, positionElements} from '../util/positioning';\nimport {isDefined, toString} from '../util/util';\n\nimport {NgbTypeaheadConfig} from './typeahead-config';\nimport {NgbTypeaheadWindow, ResultTemplateContext} from './typeahead-window';\n\n\nconst NGB_TYPEAHEAD_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgbTypeahead),\n multi: true\n};\n\n/**\n * An event emitted right before an item is selected from the result list.\n */\nexport interface NgbTypeaheadSelectItemEvent {\n /**\n * The item from the result list about to be selected.\n */\n item: any;\n\n /**\n * Calling this function will prevent item selection from happening.\n */\n preventDefault: () => void;\n}\n\nlet nextWindowId = 0;\n\n/**\n * A directive providing a simple way of creating powerful typeaheads from any text input.\n */\n@Directive({\n selector: 'input[ngbTypeahead]',\n exportAs: 'ngbTypeahead',\n host: {\n '(blur)': 'handleBlur()',\n '[class.open]': 'isPopupOpen()',\n '(keydown)': 'handleKeyDown($event)',\n '[autocomplete]': 'autocomplete',\n 'autocapitalize': 'off',\n 'autocorrect': 'off',\n 'role': 'combobox',\n 'aria-multiline': 'false',\n '[attr.aria-autocomplete]': 'showHint ? \"both\" : \"list\"',\n '[attr.aria-activedescendant]': 'activeDescendant',\n '[attr.aria-owns]': 'isPopupOpen() ? popupId : null',\n '[attr.aria-expanded]': 'isPopupOpen()'\n },\n providers: [NGB_TYPEAHEAD_VALUE_ACCESSOR]\n})\nexport class NgbTypeahead implements ControlValueAccessor,\n OnInit, OnDestroy {\n private _popupService: PopupService;\n private _subscription: Subscription;\n private _closed$ = new Subject();\n private _inputValueBackup: string;\n private _valueChanges: Observable;\n private _resubscribeTypeahead: BehaviorSubject;\n private _windowRef: ComponentRef;\n private _zoneSubscription: any;\n\n /**\n * The value for the `autocomplete` attribute for the `` element.\n *\n * Defaults to `\"off\"` to disable the native browser autocomplete, but you can override it if necessary.\n *\n * @since 2.1.0\n */\n @Input() autocomplete = 'off';\n\n /**\n * A selector specifying the element the typeahead popup will be appended to.\n *\n * Currently only supports `\"body\"`.\n */\n @Input() container: string;\n\n /**\n * If `true`, model values will not be restricted only to items selected from the popup.\n */\n @Input() editable: boolean;\n\n /**\n * If `true`, the first item in the result list will always stay focused while typing.\n */\n @Input() focusFirst: boolean;\n\n /**\n * The function that converts an item from the result list to a `string` to display in the `` field.\n *\n * It is called when the user selects something in the popup or the model value changes, so the input needs to\n * be updated.\n */\n @Input() inputFormatter: (item: any) => string;\n\n /**\n * The function that converts a stream of text values from the `` element to the stream of the array of items\n * to display in the typeahead popup.\n *\n * If the resulting observable emits a non-empty array - the popup will be shown. If it emits an empty array - the\n * popup will be closed.\n *\n * See the [basic example](#/components/typeahead/examples#basic) for more details.\n *\n * Note that the `this` argument is `undefined` so you need to explicitly bind it to a desired \"this\" target.\n */\n @Input() ngbTypeahead: (text: Observable) => Observable;\n\n /**\n * The function that converts an item from the result list to a `string` to display in the popup.\n *\n * Must be provided, if your `ngbTypeahead` returns something other than `Observable`.\n *\n * Alternatively for more complex markup in the popup you should use `resultTemplate`.\n */\n @Input() resultFormatter: (item: any) => string;\n\n /**\n * The template to override the way resulting items are displayed in the popup.\n *\n * See the [ResultTemplateContext](#/components/typeahead/api#ResultTemplateContext) for the template context.\n *\n * Also see the [template for results demo](#/components/typeahead/examples#template) for more details.\n */\n @Input() resultTemplate: TemplateRef;\n\n /**\n * If `true`, will show the hint in the `` when an item in the result list matches.\n */\n @Input() showHint: boolean;\n\n /**\n * The preferred placement of the typeahead.\n *\n * Possible values are `\"top\"`, `\"top-left\"`, `\"top-right\"`, `\"bottom\"`, `\"bottom-left\"`,\n * `\"bottom-right\"`, `\"left\"`, `\"left-top\"`, `\"left-bottom\"`, `\"right\"`, `\"right-top\"`,\n * `\"right-bottom\"`\n *\n * Accepts an array of strings or a string with space separated possible values.\n *\n * The default order of preference is `\"bottom-left bottom-right top-left top-right\"`\n *\n * Please see the [positioning overview](#/positioning) for more details.\n */\n @Input() placement: PlacementArray = 'bottom-left';\n\n /**\n * An event emitted right before an item is selected from the result list.\n *\n * Event payload is of type [`NgbTypeaheadSelectItemEvent`](#/components/typeahead/api#NgbTypeaheadSelectItemEvent).\n */\n @Output() selectItem = new EventEmitter();\n\n activeDescendant: string;\n popupId = `ngb-typeahead-${nextWindowId++}`;\n\n private _onTouched = () => {};\n private _onChange = (_: any) => {};\n\n constructor(\n private _elementRef: ElementRef, private _viewContainerRef: ViewContainerRef,\n private _renderer: Renderer2, private _injector: Injector, componentFactoryResolver: ComponentFactoryResolver,\n config: NgbTypeaheadConfig, ngZone: NgZone, private _live: Live, @Inject(DOCUMENT) private _document: any,\n private _ngZone: NgZone, private _changeDetector: ChangeDetectorRef, private _applicationRef: ApplicationRef) {\n this.container = config.container;\n this.editable = config.editable;\n this.focusFirst = config.focusFirst;\n this.showHint = config.showHint;\n this.placement = config.placement;\n\n this._valueChanges = fromEvent(_elementRef.nativeElement, 'input')\n .pipe(map($event => ($event.target as HTMLInputElement).value));\n\n this._resubscribeTypeahead = new BehaviorSubject(null);\n\n this._popupService = new PopupService(\n NgbTypeaheadWindow, _injector, _viewContainerRef, _renderer, componentFactoryResolver, _applicationRef);\n\n this._zoneSubscription = ngZone.onStable.subscribe(() => {\n if (this.isPopupOpen()) {\n positionElements(\n this._elementRef.nativeElement, this._windowRef.location.nativeElement, this.placement,\n this.container === 'body');\n }\n });\n }\n\n ngOnInit(): void {\n const inputValues$ = this._valueChanges.pipe(tap(value => {\n this._inputValueBackup = this.showHint ? value : null;\n if (this.editable) {\n this._onChange(value);\n }\n }));\n const results$ = inputValues$.pipe(this.ngbTypeahead);\n const processedResults$ = results$.pipe(tap(() => {\n if (!this.editable) {\n this._onChange(undefined);\n }\n }));\n const userInput$ = this._resubscribeTypeahead.pipe(switchMap(() => processedResults$));\n this._subscription = this._subscribeToUserInput(userInput$);\n }\n\n ngOnDestroy(): void {\n this._closePopup();\n this._unsubscribeFromUserInput();\n this._zoneSubscription.unsubscribe();\n }\n\n registerOnChange(fn: (value: any) => any): void { this._onChange = fn; }\n\n registerOnTouched(fn: () => any): void { this._onTouched = fn; }\n\n writeValue(value) {\n this._writeInputValue(this._formatItemForInput(value));\n if (this.showHint) {\n this._inputValueBackup = value;\n }\n }\n\n setDisabledState(isDisabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n\n /**\n * Dismisses typeahead popup window\n */\n dismissPopup() {\n if (this.isPopupOpen()) {\n this._resubscribeTypeahead.next(null);\n this._closePopup();\n if (this.showHint && this._inputValueBackup !== null) {\n this._writeInputValue(this._inputValueBackup);\n }\n this._changeDetector.markForCheck();\n }\n }\n\n /**\n * Returns true if the typeahead popup window is displayed\n */\n isPopupOpen() { return this._windowRef != null; }\n\n handleBlur() {\n this._resubscribeTypeahead.next(null);\n this._onTouched();\n }\n\n handleKeyDown(event: KeyboardEvent) {\n if (!this.isPopupOpen()) {\n return;\n }\n\n // tslint:disable-next-line:deprecation\n switch (event.which) {\n case Key.ArrowDown:\n event.preventDefault();\n this._windowRef.instance.next();\n this._showHint();\n break;\n case Key.ArrowUp:\n event.preventDefault();\n this._windowRef.instance.prev();\n this._showHint();\n break;\n case Key.Enter:\n case Key.Tab:\n const result = this._windowRef.instance.getActive();\n if (isDefined(result)) {\n event.preventDefault();\n event.stopPropagation();\n this._selectResult(result);\n }\n this._closePopup();\n break;\n }\n }\n\n private _openPopup() {\n if (!this.isPopupOpen()) {\n this._inputValueBackup = this._elementRef.nativeElement.value;\n this._windowRef = this._popupService.open();\n this._windowRef.instance.id = this.popupId;\n this._windowRef.instance.selectEvent.subscribe((result: any) => this._selectResultClosePopup(result));\n this._windowRef.instance.activeChangeEvent.subscribe((activeId: string) => this.activeDescendant = activeId);\n\n if (this.container === 'body') {\n window.document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement);\n }\n\n this._changeDetector.markForCheck();\n\n ngbAutoClose(\n this._ngZone, this._document, 'outside', () => this.dismissPopup(), this._closed$,\n [this._elementRef.nativeElement, this._windowRef.location.nativeElement]);\n }\n }\n\n private _closePopup() {\n this._closed$.next();\n this._popupService.close();\n this._windowRef = null;\n this.activeDescendant = undefined;\n }\n\n private _selectResult(result: any) {\n let defaultPrevented = false;\n this.selectItem.emit({item: result, preventDefault: () => { defaultPrevented = true; }});\n this._resubscribeTypeahead.next(null);\n\n if (!defaultPrevented) {\n this.writeValue(result);\n this._onChange(result);\n }\n }\n\n private _selectResultClosePopup(result: any) {\n this._selectResult(result);\n this._closePopup();\n }\n\n private _showHint() {\n if (this.showHint && this._windowRef.instance.hasActive() && this._inputValueBackup != null) {\n const userInputLowerCase = this._inputValueBackup.toLowerCase();\n const formattedVal = this._formatItemForInput(this._windowRef.instance.getActive());\n\n if (userInputLowerCase === formattedVal.substr(0, this._inputValueBackup.length).toLowerCase()) {\n this._writeInputValue(this._inputValueBackup + formattedVal.substr(this._inputValueBackup.length));\n this._elementRef.nativeElement['setSelectionRange'].apply(\n this._elementRef.nativeElement, [this._inputValueBackup.length, formattedVal.length]);\n } else {\n this._writeInputValue(formattedVal);\n }\n }\n }\n\n private _formatItemForInput(item: any): string {\n return item != null && this.inputFormatter ? this.inputFormatter(item) : toString(item);\n }\n\n private _writeInputValue(value: string): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', toString(value));\n }\n\n private _subscribeToUserInput(userInput$: Observable): Subscription {\n return userInput$.subscribe((results) => {\n if (!results || results.length === 0) {\n this._closePopup();\n } else {\n this._openPopup();\n this._windowRef.instance.focusFirst = this.focusFirst;\n this._windowRef.instance.results = results;\n this._windowRef.instance.term = this._elementRef.nativeElement.value;\n if (this.resultFormatter) {\n this._windowRef.instance.formatter = this.resultFormatter;\n }\n if (this.resultTemplate) {\n this._windowRef.instance.resultTemplate = this.resultTemplate;\n }\n this._windowRef.instance.resetActive();\n\n // The observable stream we are subscribing to might have async steps\n // and if a component containing typeahead is using the OnPush strategy\n // the change detection turn wouldn't be invoked automatically.\n this._windowRef.changeDetectorRef.detectChanges();\n\n this._showHint();\n }\n\n // live announcer\n const count = results ? results.length : 0;\n this._live.say(count === 0 ? 'No results available' : `${count} result${count === 1 ? '' : 's'} available`);\n });\n }\n\n private _unsubscribeFromUserInput() {\n if (this._subscription) {\n this._subscription.unsubscribe();\n }\n this._subscription = null;\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\nimport {NgbHighlight} from './highlight';\nimport {NgbTypeaheadWindow} from './typeahead-window';\nimport {NgbTypeahead} from './typeahead';\n\nexport {NgbHighlight} from './highlight';\nexport {NgbTypeaheadWindow} from './typeahead-window';\nexport {NgbTypeaheadConfig} from './typeahead-config';\nexport {NgbTypeahead, NgbTypeaheadSelectItemEvent} from './typeahead';\n\n@NgModule({\n declarations: [NgbTypeahead, NgbHighlight, NgbTypeaheadWindow],\n exports: [NgbTypeahead, NgbHighlight],\n imports: [CommonModule],\n entryComponents: [NgbTypeaheadWindow]\n})\nexport class NgbTypeaheadModule {\n}\n","import {NgModule} from '@angular/core';\n\nimport {SbCardModule} from './card/card.module';\nimport {NgbAccordionModule} from './accordion/accordion.module';\nimport {NgbAlertModule} from './alert/alert.module';\nimport {NgbButtonsModule} from './buttons/buttons.module';\nimport {NgbCarouselModule} from './carousel/carousel.module';\nimport {NgbCollapseModule} from './collapse/collapse.module';\nimport {NgbDatepickerModule} from './datepicker/datepicker.module';\nimport {NgbDropdownModule} from './dropdown/dropdown.module';\nimport {NgbModalModule} from './modal/modal.module';\nimport {NgbPaginationModule} from './pagination/pagination.module';\nimport {NgbPopoverModule} from './popover/popover.module';\nimport {NgbProgressbarModule} from './progressbar/progressbar.module';\nimport {NgbRatingModule} from './rating/rating.module';\nimport {NgbTabsetModule} from './tabset/tabset.module';\nimport {NgbTimepickerModule} from './timepicker/timepicker.module';\nimport {NgbToastModule} from './toast/toast.module';\nimport {NgbTooltipModule} from './tooltip/tooltip.module';\nimport {NgbTypeaheadModule} from './typeahead/typeahead.module';\n\n\n\nexport {\n NgbAccordion,\n NgbAccordionConfig,\n NgbAccordionModule,\n NgbPanel,\n NgbPanelChangeEvent,\n NgbPanelContent,\n NgbPanelHeader,\n NgbPanelHeaderContext,\n NgbPanelTitle,\n NgbPanelToggle\n} from './accordion/accordion.module';\nexport {SbCard, SbCardConfig, SbCardModule} from './card/card.module';\nexport {NgbAlert, NgbAlertConfig, NgbAlertModule} from './alert/alert.module';\nexport {NgbButtonLabel, NgbButtonsModule, NgbCheckBox, NgbRadio, NgbRadioGroup} from './buttons/buttons.module';\nexport {\n NgbCarousel,\n NgbCarouselConfig,\n NgbCarouselModule,\n NgbSlide,\n NgbSlideEvent,\n NgbSlideEventDirection,\n NgbSlideEventSource\n} from './carousel/carousel.module';\nexport {NgbCollapse, NgbCollapseModule} from './collapse/collapse.module';\nexport {\n NgbCalendar,\n NgbCalendarGregorian,\n NgbCalendarHebrew,\n NgbCalendarIslamicCivil,\n NgbCalendarIslamicUmalqura,\n NgbCalendarPersian,\n NgbDate,\n NgbDateAdapter,\n NgbDateNativeAdapter,\n NgbDateNativeUTCAdapter,\n NgbDateParserFormatter,\n NgbDatepicker,\n NgbDatepickerConfig,\n NgbDatepickerI18n,\n NgbDatepickerI18nHebrew,\n NgbDatepickerModule,\n NgbDatepickerNavigateEvent,\n NgbDateStruct,\n NgbInputDatepicker,\n NgbPeriod\n} from './datepicker/datepicker.module';\nexport {\n NgbDropdown,\n NgbDropdownAnchor,\n NgbDropdownConfig,\n NgbDropdownItem,\n NgbDropdownMenu,\n NgbDropdownModule,\n NgbDropdownToggle\n} from './dropdown/dropdown.module';\nexport {\n ModalDismissReasons,\n NgbActiveModal,\n NgbModal,\n NgbModalConfig,\n NgbModalModule,\n NgbModalOptions,\n NgbModalRef\n} from './modal/modal.module';\nexport {\n NgbPagination,\n NgbPaginationConfig,\n NgbPaginationEllipsis,\n NgbPaginationFirst,\n NgbPaginationLast,\n NgbPaginationModule,\n NgbPaginationNext,\n NgbPaginationNumber,\n NgbPaginationPrevious\n} from './pagination/pagination.module';\nexport {NgbPopover, NgbPopoverConfig, NgbPopoverModule} from './popover/popover.module';\nexport {NgbProgressbar, NgbProgressbarConfig, NgbProgressbarModule} from './progressbar/progressbar.module';\nexport {NgbRating, NgbRatingConfig, NgbRatingModule} from './rating/rating.module';\nexport {\n NgbTab,\n NgbTabChangeEvent,\n NgbTabContent,\n NgbTabset,\n NgbTabsetConfig,\n NgbTabsetModule,\n NgbTabTitle\n} from './tabset/tabset.module';\nexport {\n NgbTimeAdapter,\n NgbTimepickerI18n,\n NgbTimepicker,\n NgbTimepickerConfig,\n NgbTimepickerModule,\n NgbTimeStruct\n} from './timepicker/timepicker.module';\nexport {NgbToast, NgbToastConfig, NgbToastHeader, NgbToastModule} from './toast/toast.module';\nexport {NgbTooltip, NgbTooltipConfig, NgbTooltipModule} from './tooltip/tooltip.module';\nexport {\n NgbHighlight,\n NgbTypeahead,\n NgbTypeaheadConfig,\n NgbTypeaheadModule,\n NgbTypeaheadSelectItemEvent\n} from './typeahead/typeahead.module';\nexport {Placement} from './util/positioning';\n\n\nconst NGB_MODULES = [\n SbCardModule, NgbAccordionModule, NgbAlertModule, NgbButtonsModule, NgbCarouselModule, NgbCollapseModule, NgbDatepickerModule,\n NgbDropdownModule, NgbModalModule, NgbPaginationModule, NgbPopoverModule, NgbProgressbarModule, NgbRatingModule,\n NgbTabsetModule, NgbTimepickerModule, NgbToastModule, NgbTooltipModule, NgbTypeaheadModule\n];\n\n@NgModule({imports: NGB_MODULES, exports: NGB_MODULES})\nexport class NgbModule {\n}\n"],"names":["nextId","tslib_1.__extends","tslib_1.__values","NGB_DATEPICKER_VALUE_ACCESSOR","mod","GREGORIAN_EPOCH","isGregorianLeapYear","fromGregorian","toGregorian"],"mappings":"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AE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;;IAE9E,cAAc,EAAE,cAAc,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"} \ No newline at end of file diff --git a/dist/sunbird-ui-components/index.d.ts b/dist/sunbird-ui-components/index.d.ts new file mode 100644 index 0000000..971c8c0 --- /dev/null +++ b/dist/sunbird-ui-components/index.d.ts @@ -0,0 +1,21 @@ +export { NgbAccordion, NgbAccordionConfig, NgbAccordionModule, NgbPanel, NgbPanelChangeEvent, NgbPanelContent, NgbPanelHeader, NgbPanelHeaderContext, NgbPanelTitle, NgbPanelToggle } from './accordion/accordion.module'; +export { SbCard, SbCardConfig, SbCardModule } from './card/card.module'; +export { NgbAlert, NgbAlertConfig, NgbAlertModule } from './alert/alert.module'; +export { NgbButtonLabel, NgbButtonsModule, NgbCheckBox, NgbRadio, NgbRadioGroup } from './buttons/buttons.module'; +export { NgbCarousel, NgbCarouselConfig, NgbCarouselModule, NgbSlide, NgbSlideEvent, NgbSlideEventDirection, NgbSlideEventSource } from './carousel/carousel.module'; +export { NgbCollapse, NgbCollapseModule } from './collapse/collapse.module'; +export { NgbCalendar, NgbCalendarGregorian, NgbCalendarHebrew, NgbCalendarIslamicCivil, NgbCalendarIslamicUmalqura, NgbCalendarPersian, NgbDate, NgbDateAdapter, NgbDateNativeAdapter, NgbDateNativeUTCAdapter, NgbDateParserFormatter, NgbDatepicker, NgbDatepickerConfig, NgbDatepickerI18n, NgbDatepickerI18nHebrew, NgbDatepickerModule, NgbDatepickerNavigateEvent, NgbDateStruct, NgbInputDatepicker, NgbPeriod } from './datepicker/datepicker.module'; +export { NgbDropdown, NgbDropdownAnchor, NgbDropdownConfig, NgbDropdownItem, NgbDropdownMenu, NgbDropdownModule, NgbDropdownToggle } from './dropdown/dropdown.module'; +export { ModalDismissReasons, NgbActiveModal, NgbModal, NgbModalConfig, NgbModalModule, NgbModalOptions, NgbModalRef } from './modal/modal.module'; +export { NgbPagination, NgbPaginationConfig, NgbPaginationEllipsis, NgbPaginationFirst, NgbPaginationLast, NgbPaginationModule, NgbPaginationNext, NgbPaginationNumber, NgbPaginationPrevious } from './pagination/pagination.module'; +export { NgbPopover, NgbPopoverConfig, NgbPopoverModule } from './popover/popover.module'; +export { NgbProgressbar, NgbProgressbarConfig, NgbProgressbarModule } from './progressbar/progressbar.module'; +export { NgbRating, NgbRatingConfig, NgbRatingModule } from './rating/rating.module'; +export { NgbTab, NgbTabChangeEvent, NgbTabContent, NgbTabset, NgbTabsetConfig, NgbTabsetModule, NgbTabTitle } from './tabset/tabset.module'; +export { NgbTimeAdapter, NgbTimepickerI18n, NgbTimepicker, NgbTimepickerConfig, NgbTimepickerModule, NgbTimeStruct } from './timepicker/timepicker.module'; +export { NgbToast, NgbToastConfig, NgbToastHeader, NgbToastModule } from './toast/toast.module'; +export { NgbTooltip, NgbTooltipConfig, NgbTooltipModule } from './tooltip/tooltip.module'; +export { NgbHighlight, NgbTypeahead, NgbTypeaheadConfig, NgbTypeaheadModule, NgbTypeaheadSelectItemEvent } from './typeahead/typeahead.module'; +export { Placement } from './util/positioning'; +export declare class NgbModule { +} diff --git a/dist/sunbird-ui-components/modal/modal-backdrop.d.ts b/dist/sunbird-ui-components/modal/modal-backdrop.d.ts new file mode 100644 index 0000000..612304c --- /dev/null +++ b/dist/sunbird-ui-components/modal/modal-backdrop.d.ts @@ -0,0 +1,3 @@ +export declare class NgbModalBackdrop { + backdropClass: string; +} diff --git a/dist/sunbird-ui-components/modal/modal-config.d.ts b/dist/sunbird-ui-components/modal/modal-config.d.ts new file mode 100644 index 0000000..3a4d624 --- /dev/null +++ b/dist/sunbird-ui-components/modal/modal-config.d.ts @@ -0,0 +1,87 @@ +import { Injector } from '@angular/core'; +/** + * Options available when opening new modal windows with `NgbModal.open()` method. + */ +export interface NgbModalOptions { + /** + * `aria-labelledby` attribute value to set on the modal window. + * + * @since 2.2.0 + */ + ariaLabelledBy?: string; + /** + * If `true`, the backdrop element will be created for a given modal. + * + * Alternatively, specify `'static'` for a backdrop which doesn't close the modal on click. + * + * Default value is `true`. + */ + backdrop?: boolean | 'static'; + /** + * Callback right before the modal will be dismissed. + * + * If this function returns: + * * `false` + * * a promise resolved with `false` + * * a promise that is rejected + * + * then the modal won't be dismissed. + */ + beforeDismiss?: () => boolean | Promise; + /** + * If `true`, the modal will be centered vertically. + * + * Default value is `false`. + * + * @since 1.1.0 + */ + centered?: boolean; + /** + * A selector specifying the element all new modal windows should be appended to. + * + * If not specified, will be `body`. + */ + container?: string; + /** + * The `Injector` to use for modal content. + */ + injector?: Injector; + /** + * If `true`, the modal will be closed when `Escape` key is pressed + * + * Default value is `true`. + */ + keyboard?: boolean; + /** + * Scrollable modal content (false by default). + * + * @since 5.0.0 + */ + scrollable?: boolean; + /** + * Size of a new modal window. + */ + size?: 'sm' | 'lg' | 'xl'; + /** + * A custom class to append to the modal window. + */ + windowClass?: string; + /** + * A custom class to append to the modal backdrop. + * + * @since 1.1.0 + */ + backdropClass?: string; +} +/** + * A configuration service for the [`NgbModal`](#/components/modal/api#NgbModal) service. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all modals used in the application. +* +* @since 3.1.0 +*/ +export declare class NgbModalConfig implements NgbModalOptions { + backdrop: boolean | 'static'; + keyboard: boolean; +} diff --git a/dist/sunbird-ui-components/modal/modal-dismiss-reasons.d.ts b/dist/sunbird-ui-components/modal/modal-dismiss-reasons.d.ts new file mode 100644 index 0000000..342fe32 --- /dev/null +++ b/dist/sunbird-ui-components/modal/modal-dismiss-reasons.d.ts @@ -0,0 +1,4 @@ +export declare enum ModalDismissReasons { + BACKDROP_CLICK = 0, + ESC = 1 +} diff --git a/dist/sunbird-ui-components/modal/modal-ref.d.ts b/dist/sunbird-ui-components/modal/modal-ref.d.ts new file mode 100644 index 0000000..20f7487 --- /dev/null +++ b/dist/sunbird-ui-components/modal/modal-ref.d.ts @@ -0,0 +1,60 @@ +import { ComponentRef } from '@angular/core'; +import { NgbModalBackdrop } from './modal-backdrop'; +import { NgbModalWindow } from './modal-window'; +import { ContentRef } from '../util/popup'; +/** + * A reference to the currently opened (active) modal. + * + * Instances of this class can be injected into your component passed as modal content. + * So you can `.close()` or `.dismiss()` the modal window from your component. + */ +export declare class NgbActiveModal { + /** + * Closes the modal with an optional `result` value. + * + * The `NgbMobalRef.result` promise will be resolved with the provided value. + */ + close(result?: any): void; + /** + * Dismisses the modal with an optional `reason` value. + * + * The `NgbModalRef.result` promise will be rejected with the provided value. + */ + dismiss(reason?: any): void; +} +/** + * A reference to the newly opened modal returned by the `NgbModal.open()` method. + */ +export declare class NgbModalRef { + private _windowCmptRef; + private _contentRef; + private _backdropCmptRef?; + private _beforeDismiss?; + private _resolve; + private _reject; + /** + * The instance of a component used for the modal content. + * + * When a `TemplateRef` is used as the content, will return `undefined`. + */ + readonly componentInstance: any; + /** + * The promise that is resolved when the modal is closed and rejected when the modal is dismissed. + */ + result: Promise; + constructor(_windowCmptRef: ComponentRef, _contentRef: ContentRef, _backdropCmptRef?: ComponentRef, _beforeDismiss?: Function); + /** + * Closes the modal with an optional `result` value. + * + * The `NgbMobalRef.result` promise will be resolved with the provided value. + */ + close(result?: any): void; + private _dismiss; + /** + * Dismisses the modal with an optional `reason` value. + * + * The `NgbModalRef.result` promise will be rejected with the provided value. + */ + dismiss(reason?: any): void; + private _removeModalElements; +} diff --git a/dist/sunbird-ui-components/modal/modal-stack.d.ts b/dist/sunbird-ui-components/modal/modal-stack.d.ts new file mode 100644 index 0000000..c943560 --- /dev/null +++ b/dist/sunbird-ui-components/modal/modal-stack.d.ts @@ -0,0 +1,32 @@ +import { ApplicationRef, ComponentFactoryResolver, Injector, RendererFactory2 } from '@angular/core'; +import { ScrollBar } from '../util/scrollbar'; +import { NgbModalRef } from './modal-ref'; +export declare class NgbModalStack { + private _applicationRef; + private _injector; + private _document; + private _scrollBar; + private _rendererFactory; + private _activeWindowCmptHasChanged; + private _ariaHiddenValues; + private _backdropAttributes; + private _modalRefs; + private _windowAttributes; + private _windowCmpts; + constructor(_applicationRef: ApplicationRef, _injector: Injector, _document: any, _scrollBar: ScrollBar, _rendererFactory: RendererFactory2); + open(moduleCFR: ComponentFactoryResolver, contentInjector: Injector, content: any, options: any): NgbModalRef; + dismissAll(reason?: any): void; + hasOpenModals(): boolean; + private _attachBackdrop; + private _attachWindowComponent; + private _applyWindowOptions; + private _applyBackdropOptions; + private _getContentRef; + private _createFromTemplateRef; + private _createFromString; + private _createFromComponent; + private _setAriaHidden; + private _revertAriaHidden; + private _registerModalRef; + private _registerWindowCmpt; +} diff --git a/dist/sunbird-ui-components/modal/modal-window.d.ts b/dist/sunbird-ui-components/modal/modal-window.d.ts new file mode 100644 index 0000000..3435847 --- /dev/null +++ b/dist/sunbird-ui-components/modal/modal-window.d.ts @@ -0,0 +1,21 @@ +import { AfterViewInit, ElementRef, EventEmitter, OnDestroy, OnInit } from '@angular/core'; +export declare class NgbModalWindow implements OnInit, AfterViewInit, OnDestroy { + private _document; + private _elRef; + private _elWithFocus; + ariaLabelledBy: string; + backdrop: boolean | string; + centered: string; + keyboard: boolean; + scrollable: string; + size: string; + windowClass: string; + dismissEvent: EventEmitter<{}>; + constructor(_document: any, _elRef: ElementRef); + backdropClick($event: any): void; + escKey($event: any): void; + dismiss(reason: any): void; + ngOnInit(): void; + ngAfterViewInit(): void; + ngOnDestroy(): void; +} diff --git a/dist/sunbird-ui-components/modal/modal.d.ts b/dist/sunbird-ui-components/modal/modal.d.ts new file mode 100644 index 0000000..0b9ba58 --- /dev/null +++ b/dist/sunbird-ui-components/modal/modal.d.ts @@ -0,0 +1,39 @@ +import { Injector, ComponentFactoryResolver } from '@angular/core'; +import { NgbModalOptions, NgbModalConfig } from './modal-config'; +import { NgbModalRef } from './modal-ref'; +import { NgbModalStack } from './modal-stack'; +/** + * A service for opening modal windows. + * + * Creating a modal is straightforward: create a component or a template and pass it as an argument to + * the `.open()` method. + */ +export declare class NgbModal { + private _moduleCFR; + private _injector; + private _modalStack; + private _config; + constructor(_moduleCFR: ComponentFactoryResolver, _injector: Injector, _modalStack: NgbModalStack, _config: NgbModalConfig); + /** + * Opens a new modal window with the specified content and supplied options. + * + * Content can be provided as a `TemplateRef` or a component type. If you pass a component type as content, + * then instances of those components can be injected with an instance of the `NgbActiveModal` class. You can then + * use `NgbActiveModal` methods to close / dismiss modals from "inside" of your component. + * + * Also see the [`NgbModalOptions`](#/components/modal/api#NgbModalOptions) for the list of supported options. + */ + open(content: any, options?: NgbModalOptions): NgbModalRef; + /** + * Dismisses all currently displayed modal windows with the supplied reason. + * + * @since 3.1.0 + */ + dismissAll(reason?: any): void; + /** + * Indicates if there are currently any open modal windows in the application. + * + * @since 3.3.0 + */ + hasOpenModals(): boolean; +} diff --git a/dist/sunbird-ui-components/modal/modal.module.d.ts b/dist/sunbird-ui-components/modal/modal.module.d.ts new file mode 100644 index 0000000..2dec28e --- /dev/null +++ b/dist/sunbird-ui-components/modal/modal.module.d.ts @@ -0,0 +1,6 @@ +export { NgbModal } from './modal'; +export { NgbModalConfig, NgbModalOptions } from './modal-config'; +export { NgbModalRef, NgbActiveModal } from './modal-ref'; +export { ModalDismissReasons } from './modal-dismiss-reasons'; +export declare class NgbModalModule { +} diff --git a/dist/sunbird-ui-components/package.json b/dist/sunbird-ui-components/package.json new file mode 100644 index 0000000..45f527f --- /dev/null +++ b/dist/sunbird-ui-components/package.json @@ -0,0 +1,56 @@ +{ + "name": "@sunbird-ed/sunbird-ui-components", + "version": "1.1.0", + "description": "Sunbird UI Components", + "keywords": [ + "angular", + "bootstrap", + "components", + "accordion", + "alert", + "buttons", + "carousel", + "collapse", + "datepicker", + "dropdown", + "modal", + "pagination", + "popover", + "progressbar", + "rating", + "table", + "tabset", + "timepicker", + "tooltip", + "typeahead" + ], + "author": "https://github.com/Sunbird-Ed/sunbird-ui-components/graphs/contributors", + "repository": { + "type": "git", + "url": "git+https://github.com/Sunbird-Ed/sunbird-ui-components.git" + }, + "license": "MIT", + "bugs": { + "url": "https://github.com/Sunbird-Ed/sunbird-ui-components/issues" + }, + "homepage": "https://github.com/Sunbird-Ed/sunbird-ui-components#readme", + "peerDependencies": { + "@angular/common": "^8.0.0", + "@angular/core": "^8.0.0", + "@angular/forms": "^8.0.0", + "rxjs": "^6.4.0" + }, + "main": "bundles/sunbird-ui-components.umd.js", + "module": "fesm5/sunbird-ui-components.js", + "es2015": "fesm2015/sunbird-ui-components.js", + "esm5": "esm5/sunbird-ui-components.js", + "esm2015": "esm2015/sunbird-ui-components.js", + "fesm5": "fesm5/sunbird-ui-components.js", + "fesm2015": "fesm2015/sunbird-ui-components.js", + "typings": "sunbird-ui-components.d.ts", + "metadata": "sunbird-ui-components.metadata.json", + "sideEffects": false, + "dependencies": { + "tslib": "^1.9.0" + } +} diff --git a/dist/sunbird-ui-components/pagination/pagination-config.d.ts b/dist/sunbird-ui-components/pagination/pagination-config.d.ts new file mode 100644 index 0000000..8a4c9f7 --- /dev/null +++ b/dist/sunbird-ui-components/pagination/pagination-config.d.ts @@ -0,0 +1,16 @@ +/** + * A configuration service for the [`NgbPagination`](#/components/pagination/api#NgbPagination) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the paginations used in the application. + */ +export declare class NgbPaginationConfig { + disabled: boolean; + boundaryLinks: boolean; + directionLinks: boolean; + ellipses: boolean; + maxSize: number; + pageSize: number; + rotate: boolean; + size: 'sm' | 'lg'; +} diff --git a/dist/sunbird-ui-components/pagination/pagination.d.ts b/dist/sunbird-ui-components/pagination/pagination.d.ts new file mode 100644 index 0000000..62dc638 --- /dev/null +++ b/dist/sunbird-ui-components/pagination/pagination.d.ts @@ -0,0 +1,189 @@ +import { EventEmitter, OnChanges, SimpleChanges, TemplateRef } from '@angular/core'; +import { NgbPaginationConfig } from './pagination-config'; +/** + * A context for the + * * `NgbPaginationFirst` + * * `NgbPaginationPrevious` + * * `NgbPaginationNext` + * * `NgbPaginationLast` + * * `NgbPaginationEllipsis` + * + * link templates in case you want to override one. + * + * @since 4.1.0 + */ +export interface NgbPaginationLinkContext { + /** + * The currently selected page number + */ + currentPage: number; + /** + * If `true`, the current link is disabled + */ + disabled: boolean; +} +/** + * A context for the `NgbPaginationNumber` link template in case you want to override one. + * + * Extends `NgbPaginationLinkContext`. + * + * @since 4.1.0 + */ +export interface NgbPaginationNumberContext extends NgbPaginationLinkContext { + /** + * The page number, displayed by the current page link. + */ + $implicit: number; +} +/** + * A directive to match the 'ellipsis' link template + * + * @since 4.1.0 + */ +export declare class NgbPaginationEllipsis { + templateRef: TemplateRef; + constructor(templateRef: TemplateRef); +} +/** + * A directive to match the 'first' link template + * + * @since 4.1.0 + */ +export declare class NgbPaginationFirst { + templateRef: TemplateRef; + constructor(templateRef: TemplateRef); +} +/** + * A directive to match the 'last' link template + * + * @since 4.1.0 + */ +export declare class NgbPaginationLast { + templateRef: TemplateRef; + constructor(templateRef: TemplateRef); +} +/** + * A directive to match the 'next' link template + * + * @since 4.1.0 + */ +export declare class NgbPaginationNext { + templateRef: TemplateRef; + constructor(templateRef: TemplateRef); +} +/** + * A directive to match the page 'number' link template + * + * @since 4.1.0 + */ +export declare class NgbPaginationNumber { + templateRef: TemplateRef; + constructor(templateRef: TemplateRef); +} +/** + * A directive to match the 'previous' link template + * + * @since 4.1.0 + */ +export declare class NgbPaginationPrevious { + templateRef: TemplateRef; + constructor(templateRef: TemplateRef); +} +/** + * A component that displays page numbers and allows to customize them in several ways. + */ +export declare class NgbPagination implements OnChanges { + pageCount: number; + pages: number[]; + tplEllipsis: NgbPaginationEllipsis; + tplFirst: NgbPaginationFirst; + tplLast: NgbPaginationLast; + tplNext: NgbPaginationNext; + tplNumber: NgbPaginationNumber; + tplPrevious: NgbPaginationPrevious; + /** + * If `true`, pagination links will be disabled. + */ + disabled: boolean; + /** + * If `true`, the "First" and "Last" page links are shown. + */ + boundaryLinks: boolean; + /** + * If `true`, the "Next" and "Previous" page links are shown. + */ + directionLinks: boolean; + /** + * If `true`, the ellipsis symbols and first/last page numbers will be shown when `maxSize` > number of pages. + */ + ellipses: boolean; + /** + * Whether to rotate pages when `maxSize` > number of pages. + * + * The current page always stays in the middle if `true`. + */ + rotate: boolean; + /** + * The number of items in your paginated collection. + * + * Note, that this is not the number of pages. Page numbers are calculated dynamically based on + * `collectionSize` and `pageSize`. Ex. if you have 100 items in your collection and displaying 20 items per page, + * you'll end up with 5 pages. + */ + collectionSize: number; + /** + * The maximum number of pages to display. + */ + maxSize: number; + /** + * The current page. + * + * Page numbers start with `1`. + */ + page: number; + /** + * The number of items per page. + */ + pageSize: number; + /** + * An event fired when the page is changed. Will fire only if collection size is set and all values are valid. + * + * Event payload is the number of the newly selected page. + * + * Page numbers start with `1`. + */ + pageChange: EventEmitter; + /** + * The pagination display size. + * + * Bootstrap currently supports small and large sizes. + */ + size: 'sm' | 'lg'; + constructor(config: NgbPaginationConfig); + hasPrevious(): boolean; + hasNext(): boolean; + nextDisabled(): boolean; + previousDisabled(): boolean; + selectPage(pageNumber: number): void; + ngOnChanges(changes: SimpleChanges): void; + isEllipsis(pageNumber: any): boolean; + /** + * Appends ellipses and first/last page number to the displayed pages + */ + private _applyEllipses; + /** + * Rotates page numbers based on maxSize items visible. + * Currently selected page stays in the middle: + * + * Ex. for selected page = 6: + * [5,*6*,7] for maxSize = 3 + * [4,5,*6*,7] for maxSize = 4 + */ + private _applyRotation; + /** + * Paginates page numbers based on maxSize items per page. + */ + private _applyPagination; + private _setPageInRange; + private _updatePages; +} diff --git a/dist/sunbird-ui-components/pagination/pagination.module.d.ts b/dist/sunbird-ui-components/pagination/pagination.module.d.ts new file mode 100644 index 0000000..c34a299 --- /dev/null +++ b/dist/sunbird-ui-components/pagination/pagination.module.d.ts @@ -0,0 +1,4 @@ +export { NgbPagination, NgbPaginationEllipsis, NgbPaginationFirst, NgbPaginationLast, NgbPaginationNext, NgbPaginationNumber, NgbPaginationPrevious } from './pagination'; +export { NgbPaginationConfig } from './pagination-config'; +export declare class NgbPaginationModule { +} diff --git a/dist/sunbird-ui-components/popover/popover-config.d.ts b/dist/sunbird-ui-components/popover/popover-config.d.ts new file mode 100644 index 0000000..c7bfd7a --- /dev/null +++ b/dist/sunbird-ui-components/popover/popover-config.d.ts @@ -0,0 +1,17 @@ +import { PlacementArray } from '../util/positioning'; +/** + * A configuration service for the [`NgbPopover`](#/components/popover/api#NgbPopover) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the popovers used in the application. + */ +export declare class NgbPopoverConfig { + autoClose: boolean | 'inside' | 'outside'; + placement: PlacementArray; + triggers: string; + container: string; + disablePopover: boolean; + popoverClass: string; + openDelay: number; + closeDelay: number; +} diff --git a/dist/sunbird-ui-components/popover/popover.d.ts b/dist/sunbird-ui-components/popover/popover.d.ts new file mode 100644 index 0000000..2c3d0fb --- /dev/null +++ b/dist/sunbird-ui-components/popover/popover.d.ts @@ -0,0 +1,137 @@ +import { EventEmitter, OnInit, OnDestroy, OnChanges, Injector, Renderer2, ElementRef, TemplateRef, ViewContainerRef, ComponentFactoryResolver, NgZone, SimpleChanges, ChangeDetectorRef, ApplicationRef } from '@angular/core'; +import { PlacementArray } from '../util/positioning'; +import { NgbPopoverConfig } from './popover-config'; +export declare class NgbPopoverWindow { + title: undefined | string | TemplateRef; + id: string; + popoverClass: string; + context: any; + isTitleTemplate(): boolean; +} +/** + * A lightweight and extensible directive for fancy popover creation. + */ +export declare class NgbPopover implements OnInit, OnDestroy, OnChanges { + private _elementRef; + private _renderer; + private _ngZone; + private _document; + private _changeDetector; + private _applicationRef; + /** + * Indicates whether the popover should be closed on `Escape` key and inside/outside clicks: + * + * * `true` - closes on both outside and inside clicks as well as `Escape` presses + * * `false` - disables the autoClose feature (NB: triggers still apply) + * * `"inside"` - closes on inside clicks as well as Escape presses + * * `"outside"` - closes on outside clicks (sometimes also achievable through triggers) + * as well as `Escape` presses + * + * @since 3.0.0 + */ + autoClose: boolean | 'inside' | 'outside'; + /** + * The string content or a `TemplateRef` for the content to be displayed in the popover. + * + * If the title and the content are empty, the popover won't open. + */ + ngbPopover: string | TemplateRef; + /** + * The title of the popover. + * + * If the title and the content are empty, the popover won't open. + */ + popoverTitle: string | TemplateRef; + /** + * The preferred placement of the popover. + * + * Possible values are `"top"`, `"top-left"`, `"top-right"`, `"bottom"`, `"bottom-left"`, + * `"bottom-right"`, `"left"`, `"left-top"`, `"left-bottom"`, `"right"`, `"right-top"`, + * `"right-bottom"` + * + * Accepts an array of strings or a string with space separated possible values. + * + * The default order of preference is `"auto"` (same as the sequence above). + * + * Please see the [positioning overview](#/positioning) for more details. + */ + placement: PlacementArray; + /** + * Specifies events that should trigger the tooltip. + * + * Supports a space separated list of event names. + * For more details see the [triggers demo](#/components/popover/examples#triggers). + */ + triggers: string; + /** + * A selector specifying the element the popover should be appended to. + * + * Currently only supports `body`. + */ + container: string; + /** + * If `true`, popover is disabled and won't be displayed. + * + * @since 1.1.0 + */ + disablePopover: boolean; + /** + * An optional class applied to the popover window element. + * + * @since 2.2.0 + */ + popoverClass: string; + /** + * The opening delay in ms. Works only for "non-manual" opening triggers defined by the `triggers` input. + * + * @since 4.1.0 + */ + openDelay: number; + /** + * The closing delay in ms. Works only for "non-manual" opening triggers defined by the `triggers` input. + * + * @since 4.1.0 + */ + closeDelay: number; + /** + * An event emitted when the popover is shown. Contains no payload. + */ + shown: EventEmitter; + /** + * An event emitted when the popover is hidden. Contains no payload. + */ + hidden: EventEmitter; + private _ngbPopoverWindowId; + private _popupService; + private _windowRef; + private _unregisterListenersFn; + private _zoneSubscription; + private _isDisabled; + constructor(_elementRef: ElementRef, _renderer: Renderer2, injector: Injector, componentFactoryResolver: ComponentFactoryResolver, viewContainerRef: ViewContainerRef, config: NgbPopoverConfig, _ngZone: NgZone, _document: any, _changeDetector: ChangeDetectorRef, _applicationRef: ApplicationRef); + /** + * Opens the popover. + * + * This is considered to be a "manual" triggering. + * The `context` is an optional value to be injected into the popover template when it is created. + */ + open(context?: any): void; + /** + * Closes the popover. + * + * This is considered to be a "manual" triggering of the popover. + */ + close(): void; + /** + * Toggles the popover. + * + * This is considered to be a "manual" triggering of the popover. + */ + toggle(): void; + /** + * Returns `true`, if the popover is currently shown. + */ + isOpen(): boolean; + ngOnInit(): void; + ngOnChanges(changes: SimpleChanges): void; + ngOnDestroy(): void; +} diff --git a/dist/sunbird-ui-components/popover/popover.module.d.ts b/dist/sunbird-ui-components/popover/popover.module.d.ts new file mode 100644 index 0000000..5877109 --- /dev/null +++ b/dist/sunbird-ui-components/popover/popover.module.d.ts @@ -0,0 +1,5 @@ +export { NgbPopover } from './popover'; +export { NgbPopoverConfig } from './popover-config'; +export { Placement } from '../util/positioning'; +export declare class NgbPopoverModule { +} diff --git a/dist/sunbird-ui-components/progressbar/progressbar-config.d.ts b/dist/sunbird-ui-components/progressbar/progressbar-config.d.ts new file mode 100644 index 0000000..48ec316 --- /dev/null +++ b/dist/sunbird-ui-components/progressbar/progressbar-config.d.ts @@ -0,0 +1,14 @@ +/** + * A configuration service for the [`NgbProgressbar`](#/components/progressbar/api#NgbProgressbar) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the progress bars used in the application. + */ +export declare class NgbProgressbarConfig { + max: number; + animated: boolean; + striped: boolean; + type: string; + showValue: boolean; + height: string; +} diff --git a/dist/sunbird-ui-components/progressbar/progressbar.d.ts b/dist/sunbird-ui-components/progressbar/progressbar.d.ts new file mode 100644 index 0000000..cf1db55 --- /dev/null +++ b/dist/sunbird-ui-components/progressbar/progressbar.d.ts @@ -0,0 +1,45 @@ +import { NgbProgressbarConfig } from './progressbar-config'; +/** + * A directive that provides feedback on the progress of a workflow or an action. + */ +export declare class NgbProgressbar { + /** + * The maximal value to be displayed in the progressbar. + */ + max: number; + /** + * If `true`, the stripes on the progressbar are animated. + * + * Takes effect only for browsers supporting CSS3 animations, and if `striped` is `true`. + */ + animated: boolean; + /** + * If `true`, the progress bars will be displayed as striped. + */ + striped: boolean; + /** + * If `true`, the current percentage will be shown in the `xx%` format. + */ + showValue: boolean; + /** + * The type of the progress bar. + * + * Currently Bootstrap supports `"success"`, `"info"`, `"warning"` or `"danger"`. + */ + type: string; + /** + * The current value for the progress bar. + * + * Should be in the `[0, max]` range. + */ + value: number; + /** + * THe height of the progress bar. + * + * Accepts any valid CSS height values, ex. `"2rem"` + */ + height: string; + constructor(config: NgbProgressbarConfig); + getValue(): number; + getPercentValue(): number; +} diff --git a/dist/sunbird-ui-components/progressbar/progressbar.module.d.ts b/dist/sunbird-ui-components/progressbar/progressbar.module.d.ts new file mode 100644 index 0000000..25082e0 --- /dev/null +++ b/dist/sunbird-ui-components/progressbar/progressbar.module.d.ts @@ -0,0 +1,4 @@ +export { NgbProgressbar } from './progressbar'; +export { NgbProgressbarConfig } from './progressbar-config'; +export declare class NgbProgressbarModule { +} diff --git a/dist/sunbird-ui-components/rating/rating-config.d.ts b/dist/sunbird-ui-components/rating/rating-config.d.ts new file mode 100644 index 0000000..a569880 --- /dev/null +++ b/dist/sunbird-ui-components/rating/rating-config.d.ts @@ -0,0 +1,11 @@ +/** + * A configuration service for the [`NgbRating`](#/components/rating/api#NgbRating) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the ratings used in the application. + */ +export declare class NgbRatingConfig { + max: number; + readonly: boolean; + resettable: boolean; +} diff --git a/dist/sunbird-ui-components/rating/rating.d.ts b/dist/sunbird-ui-components/rating/rating.d.ts new file mode 100644 index 0000000..9ac9a34 --- /dev/null +++ b/dist/sunbird-ui-components/rating/rating.d.ts @@ -0,0 +1,84 @@ +import { EventEmitter, OnInit, TemplateRef, OnChanges, SimpleChanges, ChangeDetectorRef } from '@angular/core'; +import { NgbRatingConfig } from './rating-config'; +import { ControlValueAccessor } from '@angular/forms'; +/** + * The context for the custom star display template defined in the `starTemplate`. + */ +export interface StarTemplateContext { + /** + * The star fill percentage, an integer in the `[0, 100]` range. + */ + fill: number; + /** + * Index of the star, starts with `0`. + */ + index: number; +} +/** + * A directive that helps visualising and interacting with a star rating bar. + */ +export declare class NgbRating implements ControlValueAccessor, OnInit, OnChanges { + private _changeDetectorRef; + contexts: StarTemplateContext[]; + disabled: boolean; + nextRate: number; + /** + * The maximal rating that can be given. + */ + max: number; + /** + * The current rating. Could be a decimal value like `3.75`. + */ + rate: number; + /** + * If `true`, the rating can't be changed. + */ + readonly: boolean; + /** + * If `true`, the rating can be reset to `0` by mouse clicking currently set rating. + */ + resettable: boolean; + /** + * The template to override the way each star is displayed. + * + * Alternatively put an `` as the only child of your `` element + */ + starTemplate: TemplateRef; + starTemplateFromContent: TemplateRef; + /** + * An event emitted when the user is hovering over a given rating. + * + * Event payload equals to the rating being hovered over. + */ + hover: EventEmitter; + /** + * An event emitted when the user stops hovering over a given rating. + * + * Event payload equals to the rating of the last item being hovered over. + */ + leave: EventEmitter; + /** + * An event emitted when the user selects a new rating. + * + * Event payload equals to the newly selected rating. + */ + rateChange: EventEmitter; + onChange: (_: any) => void; + onTouched: () => void; + constructor(config: NgbRatingConfig, _changeDetectorRef: ChangeDetectorRef); + ariaValueText(): string; + enter(value: number): void; + handleBlur(): void; + handleClick(value: number): void; + handleKeyDown(event: KeyboardEvent): void; + ngOnChanges(changes: SimpleChanges): void; + ngOnInit(): void; + registerOnChange(fn: (value: any) => any): void; + registerOnTouched(fn: () => any): void; + reset(): void; + setDisabledState(isDisabled: boolean): void; + update(value: number, internalChange?: boolean): void; + writeValue(value: any): void; + private _getFillValue; + private _updateState; +} diff --git a/dist/sunbird-ui-components/rating/rating.module.d.ts b/dist/sunbird-ui-components/rating/rating.module.d.ts new file mode 100644 index 0000000..39d6254 --- /dev/null +++ b/dist/sunbird-ui-components/rating/rating.module.d.ts @@ -0,0 +1,4 @@ +export { NgbRating } from './rating'; +export { NgbRatingConfig } from './rating-config'; +export declare class NgbRatingModule { +} diff --git a/dist/sunbird-ui-components/sunbird-ui-components.d.ts b/dist/sunbird-ui-components/sunbird-ui-components.d.ts new file mode 100644 index 0000000..abef2de --- /dev/null +++ b/dist/sunbird-ui-components/sunbird-ui-components.d.ts @@ -0,0 +1,28 @@ +/** + * Generated bundle index. Do not edit. + */ +export * from './index'; +export { NGB_CAROUSEL_DIRECTIVES as ɵa } from './carousel/carousel'; +export { NGB_DATEPICKER_DATE_ADAPTER_FACTORY as ɵi, NgbDateStructAdapter as ɵj } from './datepicker/adapters/ngb-date-adapter'; +export { NgbDatepickerDayView as ɵd } from './datepicker/datepicker-day-view'; +export { NGB_DATEPICKER_18N_FACTORY as ɵg, NgbDatepickerI18nDefault as ɵh } from './datepicker/datepicker-i18n'; +export { NgbDatepickerKeyMapService as ɵv } from './datepicker/datepicker-keymap-service'; +export { NgbDatepickerMonthView as ɵc } from './datepicker/datepicker-month-view'; +export { NgbDatepickerNavigation as ɵe } from './datepicker/datepicker-navigation'; +export { NgbDatepickerNavigationSelect as ɵf } from './datepicker/datepicker-navigation-select'; +export { NgbDatepickerService as ɵu } from './datepicker/datepicker-service'; +export { NgbCalendarHijri as ɵbd } from './datepicker/hijri/ngb-calendar-hijri'; +export { NGB_DATEPICKER_CALENDAR_FACTORY as ɵb } from './datepicker/ngb-calendar'; +export { NGB_DATEPICKER_PARSER_FORMATTER_FACTORY as ɵk, NgbDateISOParserFormatter as ɵl } from './datepicker/ngb-date-parser-formatter'; +export { NgbNavbar as ɵm } from './dropdown/dropdown'; +export { NgbModalBackdrop as ɵw } from './modal/modal-backdrop'; +export { NgbModalStack as ɵy } from './modal/modal-stack'; +export { NgbModalWindow as ɵx } from './modal/modal-window'; +export { NgbPopoverWindow as ɵn } from './popover/popover'; +export { NGB_DATEPICKER_TIME_ADAPTER_FACTORY as ɵo, NgbTimeStructAdapter as ɵp } from './timepicker/ngb-time-adapter'; +export { NGB_TIMEPICKER_I18N_FACTORY as ɵq, NgbTimepickerI18nDefault as ɵr } from './timepicker/timepicker-i18n'; +export { NgbTooltipWindow as ɵs } from './tooltip/tooltip'; +export { NgbTypeaheadWindow as ɵt } from './typeahead/typeahead-window'; +export { ARIA_LIVE_DELAY as ɵba, ARIA_LIVE_DELAY_FACTORY as ɵbb, Live as ɵbc } from './util/accessibility/live'; +export { ContentRef as ɵbe } from './util/popup'; +export { ScrollBar as ɵz } from './util/scrollbar'; diff --git a/dist/sunbird-ui-components/sunbird-ui-components.metadata.json b/dist/sunbird-ui-components/sunbird-ui-components.metadata.json new file mode 100644 index 0000000..7302e60 --- /dev/null +++ b/dist/sunbird-ui-components/sunbird-ui-components.metadata.json @@ -0,0 +1 @@ +{"__symbolic":"module","version":4,"metadata":{"NgbModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":137,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","name":"SbCardModule"},{"__symbolic":"reference","name":"NgbAccordionModule"},{"__symbolic":"reference","name":"NgbAlertModule"},{"__symbolic":"reference","name":"NgbButtonsModule"},{"__symbolic":"reference","name":"NgbCarouselModule"},{"__symbolic":"reference","name":"NgbCollapseModule"},{"__symbolic":"reference","name":"NgbDatepickerModule"},{"__symbolic":"reference","name":"NgbDropdownModule"},{"__symbolic":"reference","name":"NgbModalModule"},{"__symbolic":"reference","name":"NgbPaginationModule"},{"__symbolic":"reference","name":"NgbPopoverModule"},{"__symbolic":"reference","name":"NgbProgressbarModule"},{"__symbolic":"reference","name":"NgbRatingModule"},{"__symbolic":"reference","name":"NgbTabsetModule"},{"__symbolic":"reference","name":"NgbTimepickerModule"},{"__symbolic":"reference","name":"NgbToastModule"},{"__symbolic":"reference","name":"NgbTooltipModule"},{"__symbolic":"reference","name":"NgbTypeaheadModule"}],"exports":[{"__symbolic":"reference","name":"SbCardModule"},{"__symbolic":"reference","name":"NgbAccordionModule"},{"__symbolic":"reference","name":"NgbAlertModule"},{"__symbolic":"reference","name":"NgbButtonsModule"},{"__symbolic":"reference","name":"NgbCarouselModule"},{"__symbolic":"reference","name":"NgbCollapseModule"},{"__symbolic":"reference","name":"NgbDatepickerModule"},{"__symbolic":"reference","name":"NgbDropdownModule"},{"__symbolic":"reference","name":"NgbModalModule"},{"__symbolic":"reference","name":"NgbPaginationModule"},{"__symbolic":"reference","name":"NgbPopoverModule"},{"__symbolic":"reference","name":"NgbProgressbarModule"},{"__symbolic":"reference","name":"NgbRatingModule"},{"__symbolic":"reference","name":"NgbTabsetModule"},{"__symbolic":"reference","name":"NgbTimepickerModule"},{"__symbolic":"reference","name":"NgbToastModule"},{"__symbolic":"reference","name":"NgbTooltipModule"},{"__symbolic":"reference","name":"NgbTypeaheadModule"}]}]}],"members":{}},"NgbAccordion":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":145,"character":1},"arguments":[{"selector":"ngb-accordion","exportAs":"ngbAccordion","host":{"class":"accordion","role":"tablist","[attr.aria-multiselectable]":"!closeOtherPanels","$quoted$":["class","role","[attr.aria-multiselectable]"]},"template":"\n \n \n \n \n
\n
\n \n
\n
\n
\n \n
\n
\n
\n
\n "}]}],"members":{"panels":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ContentChildren","line":172,"character":3},"arguments":[{"__symbolic":"reference","name":"NgbPanel"}]}]}],"activeIds":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":180,"character":3}}]}],"closeOtherPanels":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":187,"character":3},"arguments":["closeOthers"]}]}],"destroyOnHide":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":192,"character":3}}]}],"type":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":200,"character":3}}]}],"panelChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":207,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"NgbAccordionConfig"}]}],"isExpanded":[{"__symbolic":"method"}],"expand":[{"__symbolic":"method"}],"expandAll":[{"__symbolic":"method"}],"collapse":[{"__symbolic":"method"}],"collapseAll":[{"__symbolic":"method"}],"toggle":[{"__symbolic":"method"}],"ngAfterContentChecked":[{"__symbolic":"method"}],"_changeOpenState":[{"__symbolic":"method"}],"_closeOthers":[{"__symbolic":"method"}],"_findPanelById":[{"__symbolic":"method"}],"_updateActiveIds":[{"__symbolic":"method"}]}},"NgbAccordionConfig":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":8,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{},"statics":{"ngInjectableDef":{}}},"NgbAccordionModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":20,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"NgbAccordion"},{"__symbolic":"reference","name":"NgbPanel"},{"__symbolic":"reference","name":"NgbPanelTitle"},{"__symbolic":"reference","name":"NgbPanelContent"},{"__symbolic":"reference","name":"NgbPanelHeader"},{"__symbolic":"reference","name":"NgbPanelToggle"}],"exports":[{"__symbolic":"reference","name":"NgbAccordion"},{"__symbolic":"reference","name":"NgbPanel"},{"__symbolic":"reference","name":"NgbPanelTitle"},{"__symbolic":"reference","name":"NgbPanelContent"},{"__symbolic":"reference","name":"NgbPanelHeader"},{"__symbolic":"reference","name":"NgbPanelToggle"}],"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":20,"character":96}]}]}],"members":{}},"NgbPanel":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":67,"character":1},"arguments":[{"selector":"ngb-panel"}]}],"members":{"disabled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":72,"character":3}}]}],"id":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":79,"character":3}}]}],"title":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":88,"character":3}}]}],"type":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":96,"character":3}}]}],"titleTpls":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ContentChildren","line":102,"character":3},"arguments":[{"__symbolic":"reference","name":"NgbPanelTitle"},{"descendants":false}]}]}],"headerTpls":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ContentChildren","line":103,"character":3},"arguments":[{"__symbolic":"reference","name":"NgbPanelHeader"},{"descendants":false}]}]}],"contentTpls":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ContentChildren","line":104,"character":3},"arguments":[{"__symbolic":"reference","name":"NgbPanelContent"},{"descendants":false}]}]}],"ngAfterContentChecked":[{"__symbolic":"method"}]}},"NgbPanelChangeEvent":{"__symbolic":"interface"},"NgbPanelContent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":59,"character":1},"arguments":[{"selector":"ng-template[ngbPanelContent]"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"TemplateRef","module":"@angular/core","arguments":[{"__symbolic":"reference","name":"any"}]}]}]}},"NgbPanelHeader":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":41,"character":1},"arguments":[{"selector":"ng-template[ngbPanelHeader]"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"TemplateRef","module":"@angular/core","arguments":[{"__symbolic":"reference","name":"any"}]}]}]}},"NgbPanelHeaderContext":{"__symbolic":"interface"},"NgbPanelTitle":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":51,"character":1},"arguments":[{"selector":"ng-template[ngbPanelTitle]"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"TemplateRef","module":"@angular/core","arguments":[{"__symbolic":"reference","name":"any"}]}]}]}},"NgbPanelToggle":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":323,"character":1},"arguments":[{"selector":"button[ngbPanelToggle]","host":{"type":"button","[disabled]":"panel.disabled","[class.collapsed]":"!panel.isOpen","[attr.aria-expanded]":"panel.isOpen","[attr.aria-controls]":"panel.id","(click)":"accordion.toggle(panel.id)","$quoted$":["type","[disabled]","[class.collapsed]","[attr.aria-expanded]","[attr.aria-controls]","(click)"]}}]}],"members":{"ngbPanelToggle":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":335,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":342,"character":47}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Host","line":342,"character":59}}]],"parameters":[{"__symbolic":"reference","name":"NgbAccordion"},{"__symbolic":"reference","name":"NgbPanel"}]}]}},"SbCard":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":21,"character":1},"arguments":[{"selector":"sb-card","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":23,"character":19},"member":"OnPush"},"encapsulation":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewEncapsulation","line":24,"character":17},"member":"None"},"host":{"role":"alert","class":"alert","[class.alert-dismissible]":"dismissible","$quoted$":["role","class","[class.alert-dismissible]"]},"template":"\n \n \n ","styles":["ngb-alert{display:block}"]}]}],"members":{"dismissible":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":43,"character":3}}]}],"type":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":50,"character":3}}]}],"close":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":54,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"SbCardConfig"},{"__symbolic":"reference","module":"@angular/core","name":"Renderer2","line":56,"character":55},{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":56,"character":84}]}],"closeHandler":[{"__symbolic":"method"}],"ngOnChanges":[{"__symbolic":"method"}],"ngOnInit":[{"__symbolic":"method"}]}},"SbCardConfig":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":8,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{},"statics":{"ngInjectableDef":{}}},"SbCardModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":8,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"SbCard"}],"exports":[{"__symbolic":"reference","name":"SbCard"}],"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":8,"character":64}],"entryComponents":[{"__symbolic":"reference","name":"SbCard"}]}]}],"members":{}},"NgbAlert":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":21,"character":1},"arguments":[{"selector":"ngb-alert","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":23,"character":19},"member":"OnPush"},"encapsulation":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewEncapsulation","line":24,"character":17},"member":"None"},"host":{"role":"alert","class":"alert","[class.alert-dismissible]":"dismissible","$quoted$":["role","class","[class.alert-dismissible]"]},"template":"\n \n \n ","styles":["ngb-alert{display:block}"]}]}],"members":{"dismissible":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":43,"character":3}}]}],"type":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":50,"character":3}}]}],"close":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":54,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"NgbAlertConfig"},{"__symbolic":"reference","module":"@angular/core","name":"Renderer2","line":56,"character":57},{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":56,"character":86}]}],"closeHandler":[{"__symbolic":"method"}],"ngOnChanges":[{"__symbolic":"method"}],"ngOnInit":[{"__symbolic":"method"}]}},"NgbAlertConfig":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":8,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{},"statics":{"ngInjectableDef":{}}},"NgbAlertModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":8,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"NgbAlert"}],"exports":[{"__symbolic":"reference","name":"NgbAlert"}],"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":8,"character":68}],"entryComponents":[{"__symbolic":"reference","name":"NgbAlert"}]}]}],"members":{}},"NgbButtonLabel":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":2,"character":1},"arguments":[{"selector":"[ngbButtonLabel]","host":{"[class.btn]":"true","[class.active]":"active","[class.disabled]":"disabled","[class.focus]":"focused","$quoted$":["[class.btn]","[class.active]","[class.disabled]","[class.focus]"]}}]}],"members":{}},"NgbButtonsModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":12,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"NgbButtonLabel"},{"__symbolic":"reference","name":"NgbCheckBox"},{"__symbolic":"reference","name":"NgbRadioGroup"},{"__symbolic":"reference","name":"NgbRadio"}],"exports":[{"__symbolic":"reference","name":"NgbButtonLabel"},{"__symbolic":"reference","name":"NgbCheckBox"},{"__symbolic":"reference","name":"NgbRadioGroup"},{"__symbolic":"reference","name":"NgbRadio"}]}]}],"members":{}},"NgbCheckBox":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":18,"character":1},"arguments":[{"selector":"[ngbButton][type=checkbox]","host":{"autocomplete":"off","[checked]":"checked","[disabled]":"disabled","(change)":"onInputChange($event)","(focus)":"focused = true","(blur)":"focused = false","$quoted$":["autocomplete","[checked]","[disabled]","(change)","(focus)","(blur)"]},"providers":[{"provide":{"__symbolic":"reference","module":"@angular/forms","name":"NG_VALUE_ACCESSOR","line":6,"character":11},"useExisting":{"__symbolic":"reference","name":"NgbCheckBox"},"multi":true}]}]}],"members":{"disabled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":36,"character":3}}]}],"valueChecked":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":41,"character":3}}]}],"valueUnChecked":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":46,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"NgbButtonLabel"},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":58,"character":59}]}],"onInputChange":[{"__symbolic":"method"}],"registerOnChange":[{"__symbolic":"method"}],"registerOnTouched":[{"__symbolic":"method"}],"setDisabledState":[{"__symbolic":"method"}],"writeValue":[{"__symbolic":"method"}]}},"NgbRadio":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":75,"character":1},"arguments":[{"selector":"[ngbButton][type=radio]","host":{"[checked]":"checked","[disabled]":"disabled","[name]":"nameAttr","(change)":"onChange()","(focus)":"focused = true","(blur)":"focused = false","$quoted$":["[checked]","[disabled]","[name]","(change)","(focus)","(blur)"]}}]}],"members":{"name":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":97,"character":3}}]}],"value":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":102,"character":3},"arguments":["value"]}]}],"disabled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":113,"character":3},"arguments":["disabled"]}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"NgbRadioGroup"},{"__symbolic":"reference","name":"NgbButtonLabel"},{"__symbolic":"reference","module":"@angular/core","name":"Renderer2","line":137,"character":88},{"__symbolic":"reference","name":"ElementRef","module":"@angular/core","arguments":[{"__symbolic":"error","message":"Could not resolve type","line":138,"character":35,"context":{"typeName":"HTMLInputElement"},"module":"./buttons/radio"}]},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":138,"character":67}]}],"ngOnDestroy":[{"__symbolic":"method"}],"onChange":[{"__symbolic":"method"}],"updateValue":[{"__symbolic":"method"}],"updateDisabled":[{"__symbolic":"method"}]}},"NgbRadioGroup":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":19,"character":1},"arguments":[{"selector":"[ngbRadioGroup]","host":{"role":"radiogroup","$quoted$":["role"]},"providers":[{"provide":{"__symbolic":"reference","module":"@angular/forms","name":"NG_VALUE_ACCESSOR","line":6,"character":11},"useExisting":{"__symbolic":"reference","name":"NgbRadioGroup"},"multi":true}]}]}],"members":{"name":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":36,"character":3}}]}],"onRadioChange":[{"__symbolic":"method"}],"onRadioValueUpdate":[{"__symbolic":"method"}],"register":[{"__symbolic":"method"}],"registerOnChange":[{"__symbolic":"method"}],"registerOnTouched":[{"__symbolic":"method"}],"setDisabledState":[{"__symbolic":"method"}],"unregister":[{"__symbolic":"method"}],"writeValue":[{"__symbolic":"method"}],"_updateRadiosValue":[{"__symbolic":"method"}],"_updateRadiosDisabled":[{"__symbolic":"method"}]}},"ɵa":[{"__symbolic":"reference","name":"NgbCarousel"},{"__symbolic":"reference","name":"NgbSlide"}],"NgbCarousel":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":47,"character":1},"arguments":[{"selector":"ngb-carousel","exportAs":"ngbCarousel","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":50,"character":19},"member":"OnPush"},"host":{"class":"carousel slide","[style.display]":"\"block\"","tabIndex":"0","(keydown.arrowLeft)":"keyboard && prev(NgbSlideEventSource.ARROW_LEFT)","(keydown.arrowRight)":"keyboard && next(NgbSlideEventSource.ARROW_RIGHT)","$quoted$":["class","[style.display]","tabIndex","(keydown.arrowLeft)","(keydown.arrowRight)"]},"template":"\n
    \n
  1. \n
\n
\n
\n \n
\n
\n \n \n Previous\n \n \n \n Next\n \n "}]}],"members":{"slides":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ContentChildren","line":80,"character":3},"arguments":[{"__symbolic":"reference","name":"NgbSlide"}]}]}],"activeId":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":96,"character":3}}]}],"interval":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":101,"character":3}}]}],"wrap":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":111,"character":3}}]}],"keyboard":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":121,"character":3}}]}],"pauseOnHover":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":128,"character":3}}]}],"showNavigationArrows":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":140,"character":3}}]}],"showNavigationIndicators":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":147,"character":3}}]}],"slide":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":154,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":157,"character":34},"arguments":[{"__symbolic":"reference","module":"@angular/core","name":"PLATFORM_ID","line":157,"character":41}]}],null,null],"parameters":[{"__symbolic":"reference","name":"NgbCarouselConfig"},null,{"__symbolic":"reference","module":"@angular/core","name":"NgZone","line":157,"character":92},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":158,"character":19}]}],"mouseEnter":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":167,"character":3},"arguments":["mouseenter"]}]}],"mouseLeave":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":172,"character":3},"arguments":["mouseleave"]}]}],"ngAfterContentInit":[{"__symbolic":"method"}],"ngAfterContentChecked":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"select":[{"__symbolic":"method"}],"prev":[{"__symbolic":"method"}],"next":[{"__symbolic":"method"}],"pause":[{"__symbolic":"method"}],"cycle":[{"__symbolic":"method"}],"_cycleToSelected":[{"__symbolic":"method"}],"_getSlideEventDirection":[{"__symbolic":"method"}],"_getSlideById":[{"__symbolic":"method"}],"_getSlideIdxById":[{"__symbolic":"method"}],"_getNextSlide":[{"__symbolic":"method"}],"_getPrevSlide":[{"__symbolic":"method"}]}},"NgbCarouselConfig":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":8,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{},"statics":{"ngInjectableDef":{}}},"NgbCarouselModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":8,"character":1},"arguments":[{"declarations":{"__symbolic":"reference","name":"ɵa"},"exports":{"__symbolic":"reference","name":"ɵa"},"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":8,"character":94}]}]}],"members":{}},"NgbSlide":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":31,"character":1},"arguments":[{"selector":"ng-template[ngbSlide]"}]}],"members":{"id":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":38,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"TemplateRef","module":"@angular/core","arguments":[{"__symbolic":"reference","name":"any"}]}]}]}},"NgbSlideEvent":{"__symbolic":"interface"},"NgbSlideEventDirection":{"LEFT":"left","RIGHT":"right"},"NgbSlideEventSource":{"TIMER":"timer","ARROW_LEFT":"arrowLeft","ARROW_RIGHT":"arrowRight","INDICATOR":"indicator"},"NgbCollapse":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":5,"character":1},"arguments":[{"selector":"[ngbCollapse]","exportAs":"ngbCollapse","host":{"[class.collapse]":"true","[class.show]":"!collapsed","$quoted$":["[class.collapse]","[class.show]"]}}]}],"members":{"collapsed":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":14,"character":3},"arguments":["ngbCollapse"]}]}]}},"NgbCollapseModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":5,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"NgbCollapse"}],"exports":[{"__symbolic":"reference","name":"NgbCollapse"}]}]}],"members":{}},"ɵb":{"__symbolic":"function","parameters":[],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"NgbCalendarGregorian"}}},"ɵc":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":6,"character":1},"arguments":[{"selector":"ngb-datepicker-month-view","host":{"role":"grid","$quoted$":["role"]},"encapsulation":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewEncapsulation","line":9,"character":17},"member":"None"},"template":"\n
\n
\n
\n {{ i18n.getWeekdayShortName(w) }}\n
\n
\n \n
\n
{{ i18n.getWeekNumerals(week.number) }}
\n
\n \n \n \n
\n
\n
\n ","styles":["ngb-datepicker-month-view{display:block}.ngb-dp-week-number,.ngb-dp-weekday{line-height:2rem;text-align:center;font-style:italic}.ngb-dp-weekday{color:#5bc0de;color:var(--info)}.ngb-dp-week{border-radius:.25rem;display:-ms-flexbox;display:flex}.ngb-dp-weekdays{border-bottom:1px solid rgba(0,0,0,.125);border-radius:0}.ngb-dp-day,.ngb-dp-week-number,.ngb-dp-weekday{width:2rem;height:2rem}.ngb-dp-day{cursor:pointer}.ngb-dp-day.disabled,.ngb-dp-day.hidden{cursor:default}"]}]}],"members":{"dayTemplate":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":36,"character":3}}]}],"month":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":37,"character":3}}]}],"showWeekdays":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":38,"character":3}}]}],"showWeekNumbers":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":39,"character":3}}]}],"select":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":41,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"NgbDatepickerI18n"}]}],"doSelect":[{"__symbolic":"method"}]}},"ɵd":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":4,"character":1},"arguments":[{"selector":"[ngbDatepickerDayView]","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":6,"character":19},"member":"OnPush"},"encapsulation":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewEncapsulation","line":7,"character":17},"member":"None"},"host":{"class":"btn-light","[class.bg-primary]":"selected","[class.text-white]":"selected","[class.text-muted]":"isMuted()","[class.outside]":"isMuted()","[class.active]":"focused","$quoted$":["class","[class.bg-primary]","[class.text-white]","[class.text-muted]","[class.outside]","[class.active]"]},"template":"{{ i18n.getDayNumerals(date) }}","styles":["[ngbDatepickerDayView]{text-align:center;width:2rem;height:2rem;line-height:2rem;border-radius:.25rem;background:0 0}[ngbDatepickerDayView].outside{opacity:.5}"]}]}],"members":{"currentMonth":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":20,"character":3}}]}],"date":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":21,"character":3}}]}],"disabled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":22,"character":3}}]}],"focused":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":23,"character":3}}]}],"selected":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":24,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"NgbDatepickerI18n"}]}],"isMuted":[{"__symbolic":"method"}]}},"ɵe":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":5,"character":1},"arguments":[{"selector":"ngb-datepicker-navigation","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":7,"character":19},"member":"OnPush"},"encapsulation":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewEncapsulation","line":8,"character":17},"member":"None"},"template":"\n
\n \n
\n \n \n\n \n
0\">
\n
\n {{ i18n.getMonthFullName(month.number, month.year) }} {{ i18n.getYearNumerals(month.year) }}\n
\n
\n
\n
\n \n
\n ","styles":["ngb-datepicker-navigation{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.ngb-dp-navigation-chevron{border-style:solid;border-width:.2em .2em 0 0;display:inline-block;width:.75em;height:.75em;margin-left:.25em;margin-right:.15em;-webkit-transform:rotate(-135deg);transform:rotate(-135deg)}.right .ngb-dp-navigation-chevron{-webkit-transform:rotate(45deg);transform:rotate(45deg);margin-left:.15em;margin-right:.25em}.ngb-dp-arrow{display:-ms-flexbox;display:flex;-ms-flex:1 1 auto;flex:1 1 auto;padding-right:0;padding-left:0;margin:0;width:2rem;height:2rem}.ngb-dp-arrow.right{-ms-flex-pack:end;justify-content:flex-end}.ngb-dp-arrow-btn{padding:0 .25rem;margin:0 .5rem;border:none;background-color:transparent;z-index:1}.ngb-dp-arrow-btn:focus{outline-width:1px;outline-style:auto}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.ngb-dp-arrow-btn:focus{outline-style:solid}}.ngb-dp-month-name{font-size:larger;height:2rem;line-height:2rem;text-align:center}.ngb-dp-navigation-select{display:-ms-flexbox;display:flex;-ms-flex:1 1 9rem;flex:1 1 9rem}"]}]}],"members":{"date":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":45,"character":3}}]}],"disabled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":46,"character":3}}]}],"months":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":47,"character":3}}]}],"showSelect":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":48,"character":3}}]}],"prevDisabled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":49,"character":3}}]}],"nextDisabled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":50,"character":3}}]}],"selectBoxes":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":51,"character":3}}]}],"navigate":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":53,"character":3}}]}],"select":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":54,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"NgbDatepickerI18n"}]}]}},"ɵf":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":5,"character":1},"arguments":[{"selector":"ngb-datepicker-navigation-select","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":7,"character":19},"member":"OnPush"},"encapsulation":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewEncapsulation","line":8,"character":17},"member":"None"},"template":"\n \n \n \n \n \n ","styles":["ngb-datepicker-navigation-select>.custom-select{-ms-flex:1 1 auto;flex:1 1 auto;padding:0 .5rem;font-size:.875rem;height:1.85rem}"]}]}],"members":{"date":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":32,"character":3}}]}],"disabled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":33,"character":3}}]}],"months":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":34,"character":3}}]}],"years":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":35,"character":3}}]}],"select":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":37,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"NgbDatepickerI18n"}]}],"changeMonth":[{"__symbolic":"method"}],"changeYear":[{"__symbolic":"method"}]}},"ɵg":{"__symbolic":"function","parameters":["locale"],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"ɵh"},"arguments":[{"__symbolic":"reference","name":"locale"}]}},"ɵh":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"NgbDatepickerI18n"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":73,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":79,"character":15},"arguments":[{"__symbolic":"reference","module":"@angular/core","name":"LOCALE_ID","line":79,"character":22}]}]],"parameters":[{"__symbolic":"reference","name":"string"}]}],"getWeekdayShortName":[{"__symbolic":"method"}],"getMonthShortName":[{"__symbolic":"method"}],"getMonthFullName":[{"__symbolic":"method"}],"getDayAriaLabel":[{"__symbolic":"method"}]}},"ɵi":{"__symbolic":"function","parameters":[],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"ɵj"}}},"ɵj":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"NgbDateAdapter"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":33,"character":1}}],"members":{"fromModel":[{"__symbolic":"method"}],"toModel":[{"__symbolic":"method"}]}},"ɵk":{"__symbolic":"function","parameters":[],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"ɵl"}}},"ɵl":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"NgbDateParserFormatter"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":42,"character":1}}],"members":{"parse":[{"__symbolic":"method"}],"format":[{"__symbolic":"method"}]}},"NgbCalendar":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":28,"character":1},"arguments":[{"providedIn":"root","useFactory":{"__symbolic":"reference","name":"ɵb"}}]}],"members":{"getDaysPerWeek":[{"__symbolic":"method"}],"getMonths":[{"__symbolic":"method"}],"getWeeksPerMonth":[{"__symbolic":"method"}],"getWeekday":[{"__symbolic":"method"}],"getNext":[{"__symbolic":"method"}],"getPrev":[{"__symbolic":"method"}],"getWeekNumber":[{"__symbolic":"method"}],"getToday":[{"__symbolic":"method"}],"isValid":[{"__symbolic":"method"}]},"statics":{"ngInjectableDef":{}}},"NgbCalendarGregorian":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"NgbCalendar"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":90,"character":1}}],"members":{"getDaysPerWeek":[{"__symbolic":"method"}],"getMonths":[{"__symbolic":"method"}],"getWeeksPerMonth":[{"__symbolic":"method"}],"getNext":[{"__symbolic":"method"}],"getPrev":[{"__symbolic":"method"}],"getWeekday":[{"__symbolic":"method"}],"getWeekNumber":[{"__symbolic":"method"}],"getToday":[{"__symbolic":"method"}],"isValid":[{"__symbolic":"method"}]}},"NgbCalendarHebrew":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"NgbCalendar"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":17,"character":1}}],"members":{"getDaysPerWeek":[{"__symbolic":"method"}],"getMonths":[{"__symbolic":"method"}],"getWeeksPerMonth":[{"__symbolic":"method"}],"isValid":[{"__symbolic":"method"}],"getNext":[{"__symbolic":"method"}],"getPrev":[{"__symbolic":"method"}],"getWeekday":[{"__symbolic":"method"}],"getWeekNumber":[{"__symbolic":"method"}],"getToday":[{"__symbolic":"method"}],"toGregorian":[{"__symbolic":"method"}],"fromGregorian":[{"__symbolic":"method"}]}},"NgbCalendarIslamicCivil":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ɵbd"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":52,"character":1}}],"members":{"fromGregorian":[{"__symbolic":"method"}],"toGregorian":[{"__symbolic":"method"}],"getDaysPerMonth":[{"__symbolic":"method"}]}},"NgbCalendarIslamicUmalqura":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"NgbCalendarIslamicCivil"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":150,"character":1}}],"members":{"fromGregorian":[{"__symbolic":"method"}],"toGregorian":[{"__symbolic":"method"}],"getDaysPerMonth":[{"__symbolic":"method"}]}},"NgbCalendarPersian":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"NgbCalendar"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":7,"character":1}}],"members":{"getDaysPerWeek":[{"__symbolic":"method"}],"getMonths":[{"__symbolic":"method"}],"getWeeksPerMonth":[{"__symbolic":"method"}],"getNext":[{"__symbolic":"method"}],"getPrev":[{"__symbolic":"method"}],"getWeekday":[{"__symbolic":"method"}],"getWeekNumber":[{"__symbolic":"method"}],"getToday":[{"__symbolic":"method"}],"isValid":[{"__symbolic":"method"}]}},"NgbDate":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"number"},{"__symbolic":"reference","name":"number"},{"__symbolic":"reference","name":"number"}]}],"equals":[{"__symbolic":"method"}],"before":[{"__symbolic":"method"}],"after":[{"__symbolic":"method"}]}},"NgbDateAdapter":{"__symbolic":"class","arity":1,"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":20,"character":1},"arguments":[{"providedIn":"root","useFactory":{"__symbolic":"reference","name":"ɵi"}}]}],"members":{"fromModel":[{"__symbolic":"method"}],"toModel":[{"__symbolic":"method"}]},"statics":{"ngInjectableDef":{}}},"NgbDateNativeAdapter":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"NgbDateAdapter"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":9,"character":1}}],"members":{"fromModel":[{"__symbolic":"method"}],"toModel":[{"__symbolic":"method"}],"_fromNativeDate":[{"__symbolic":"method"}],"_toNativeDate":[{"__symbolic":"method"}]}},"NgbDateNativeUTCAdapter":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"NgbDateNativeAdapter"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":9,"character":1}}],"members":{"_fromNativeDate":[{"__symbolic":"method"}],"_toNativeDate":[{"__symbolic":"method"}]}},"NgbDateParserFormatter":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":23,"character":1},"arguments":[{"providedIn":"root","useFactory":{"__symbolic":"reference","name":"ɵk"}}]}],"members":{"parse":[{"__symbolic":"method"}],"format":[{"__symbolic":"method"}]},"statics":{"ngInjectableDef":{}}},"NgbDatepicker":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":68,"character":1},"arguments":[{"exportAs":"ngbDatepicker","selector":"ngb-datepicker","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":71,"character":19},"member":"OnPush"},"encapsulation":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewEncapsulation","line":72,"character":17},"member":"None"},"template":"\n \n
\n
\n
\n\n
\n \n \n
\n\n
\n \n
\n
1 && navigation === 'select')\"\n class=\"ngb-dp-month-name\">\n {{ i18n.getMonthFullName(month.number, month.year) }} {{ i18n.getYearNumerals(month.year) }}\n
\n \n \n
\n
\n
\n\n \n ","providers":[{"provide":{"__symbolic":"reference","module":"@angular/forms","name":"NG_VALUE_ACCESSOR","line":36,"character":11},"useExisting":{"__symbolic":"reference","name":"NgbDatepicker"},"multi":true},{"__symbolic":"reference","name":"ɵu"},{"__symbolic":"reference","name":"ɵv"}],"styles":["ngb-datepicker{border:1px solid #dfdfdf;border-radius:.25rem;display:inline-block}ngb-datepicker-month-view{pointer-events:auto}ngb-datepicker.dropdown-menu{padding:0}.ngb-dp-body{z-index:1050}.ngb-dp-header{border-bottom:0;border-radius:.25rem .25rem 0 0;padding-top:.25rem;background-color:#f8f9fa}.ngb-dp-months{display:-ms-flexbox;display:flex}.ngb-dp-month{pointer-events:none}.ngb-dp-month-name{font-size:larger;height:2rem;line-height:2rem;text-align:center;background-color:#f8f9fa}.ngb-dp-month+.ngb-dp-month .ngb-dp-month-name,.ngb-dp-month+.ngb-dp-month .ngb-dp-week{padding-left:1rem}.ngb-dp-month:last-child .ngb-dp-week{padding-right:.25rem}.ngb-dp-month:first-child .ngb-dp-week{padding-left:.25rem}.ngb-dp-month .ngb-dp-week:last-child{padding-bottom:.25rem}"]}]}],"members":{"_monthsEl":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":125,"character":3},"arguments":["months",{"static":true}]}]}],"dayTemplate":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":136,"character":3}}]}],"dayTemplateData":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":146,"character":3}}]}],"displayMonths":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":151,"character":3}}]}],"firstDayOfWeek":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":158,"character":3}}]}],"footerTemplate":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":165,"character":3}}]}],"markDisabled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":174,"character":3}}]}],"maxDate":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":181,"character":3}}]}],"minDate":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":188,"character":3}}]}],"navigation":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":197,"character":3}}]}],"outsideDays":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":208,"character":3}}]}],"showWeekdays":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":213,"character":3}}]}],"showWeekNumbers":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":218,"character":3}}]}],"startDate":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":228,"character":3}}]}],"navigate":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":235,"character":3}}]}],"select":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":242,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ɵv"},{"__symbolic":"reference","name":"ɵu"},{"__symbolic":"reference","name":"NgbCalendar"},{"__symbolic":"reference","name":"NgbDatepickerI18n"},{"__symbolic":"reference","name":"NgbDatepickerConfig"},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":250,"character":19},{"__symbolic":"reference","name":"ElementRef","module":"@angular/core","arguments":[{"__symbolic":"error","message":"Could not resolve type","line":250,"character":70,"context":{"typeName":"HTMLElement"},"module":"./datepicker/datepicker"}]},{"__symbolic":"reference","name":"NgbDateAdapter"},{"__symbolic":"reference","module":"@angular/core","name":"NgZone","line":251,"character":69}]}],"focus":[{"__symbolic":"method"}],"navigateTo":[{"__symbolic":"method"}],"ngAfterViewInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"ngOnInit":[{"__symbolic":"method"}],"ngOnChanges":[{"__symbolic":"method"}],"onDateSelect":[{"__symbolic":"method"}],"onKeyDown":[{"__symbolic":"method"}],"onNavigateDateSelect":[{"__symbolic":"method"}],"onNavigateEvent":[{"__symbolic":"method"}],"registerOnChange":[{"__symbolic":"method"}],"registerOnTouched":[{"__symbolic":"method"}],"setDisabledState":[{"__symbolic":"method"}],"writeValue":[{"__symbolic":"method"}]}},"NgbDatepickerConfig":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":10,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{},"statics":{"ngInjectableDef":{}}},"NgbDatepickerI18n":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":21,"character":1},"arguments":[{"providedIn":"root","useFactory":{"__symbolic":"reference","name":"ɵg"},"deps":[{"__symbolic":"reference","module":"@angular/core","name":"LOCALE_ID","line":21,"character":80}]}]}],"members":{"getWeekdayShortName":[{"__symbolic":"method"}],"getMonthShortName":[{"__symbolic":"method"}],"getMonthFullName":[{"__symbolic":"method"}],"getDayAriaLabel":[{"__symbolic":"method"}],"getDayNumerals":[{"__symbolic":"method"}],"getWeekNumerals":[{"__symbolic":"method"}],"getYearNumerals":[{"__symbolic":"method"}]},"statics":{"ngInjectableDef":{}}},"NgbDatepickerI18nHebrew":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"NgbDatepickerI18n"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":14,"character":1}}],"members":{"getMonthShortName":[{"__symbolic":"method"}],"getMonthFullName":[{"__symbolic":"method"}],"getWeekdayShortName":[{"__symbolic":"method"}],"getDayAriaLabel":[{"__symbolic":"method"}],"getDayNumerals":[{"__symbolic":"method"}],"getWeekNumerals":[{"__symbolic":"method"}],"getYearNumerals":[{"__symbolic":"method"}]}},"NgbDatepickerModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":31,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"NgbDatepicker"},{"__symbolic":"reference","name":"ɵc"},{"__symbolic":"reference","name":"ɵe"},{"__symbolic":"reference","name":"ɵf"},{"__symbolic":"reference","name":"ɵd"},{"__symbolic":"reference","name":"NgbInputDatepicker"}],"exports":[{"__symbolic":"reference","name":"NgbDatepicker"},{"__symbolic":"reference","name":"NgbInputDatepicker"}],"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":37,"character":12},{"__symbolic":"reference","module":"@angular/forms","name":"FormsModule","line":37,"character":26}],"entryComponents":[{"__symbolic":"reference","name":"NgbDatepicker"}]}]}],"members":{}},"NgbDatepickerNavigateEvent":{"__symbolic":"interface"},"NgbDateStruct":{"__symbolic":"interface"},"NgbInputDatepicker":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":52,"character":1},"arguments":[{"selector":"input[ngbDatepicker]","exportAs":"ngbDatepicker","host":{"(input)":"manualDateChange($event.target.value)","(change)":"manualDateChange($event.target.value, true)","(blur)":"onBlur()","[disabled]":"disabled","$quoted$":["(input)","(change)","(blur)","[disabled]"]},"providers":[{"provide":{"__symbolic":"reference","module":"@angular/forms","name":"NG_VALUE_ACCESSOR","line":36,"character":11},"useExisting":{"__symbolic":"reference","name":"NgbInputDatepicker"},"multi":true},{"provide":{"__symbolic":"reference","module":"@angular/forms","name":"NG_VALIDATORS","line":42,"character":11},"useExisting":{"__symbolic":"reference","name":"NgbInputDatepicker"},"multi":true},{"__symbolic":"reference","name":"ɵu"}]}]}],"members":{"autoClose":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":81,"character":3}}]}],"dayTemplate":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":90,"character":3}}]}],"dayTemplateData":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":100,"character":3}}]}],"displayMonths":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":105,"character":3}}]}],"firstDayOfWeek":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":112,"character":3}}]}],"footerTemplate":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":119,"character":3}}]}],"markDisabled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":128,"character":3}}]}],"minDate":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":135,"character":3}}]}],"maxDate":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":142,"character":3}}]}],"navigation":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":151,"character":3}}]}],"outsideDays":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":162,"character":3}}]}],"placement":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":177,"character":3}}]}],"showWeekdays":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":182,"character":3}}]}],"showWeekNumbers":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":187,"character":3}}]}],"startDate":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":197,"character":3}}]}],"container":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":204,"character":3}}]}],"positionTarget":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":213,"character":3}}]}],"dateSelect":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":222,"character":3}}]}],"navigate":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":229,"character":3}}]}],"closed":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":236,"character":3}}]}],"disabled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":238,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,null,null,null,null,null,null,null,null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":259,"character":50},"arguments":[{"__symbolic":"reference","module":"@angular/common","name":"DOCUMENT","line":259,"character":57}]}],null],"parameters":[{"__symbolic":"reference","name":"NgbDateParserFormatter"},{"__symbolic":"reference","name":"ElementRef","module":"@angular/core","arguments":[{"__symbolic":"error","message":"Could not resolve type","line":256,"character":83,"context":{"typeName":"HTMLInputElement"},"module":"./datepicker/datepicker-input"}]},{"__symbolic":"reference","module":"@angular/core","name":"ViewContainerRef","line":257,"character":22},{"__symbolic":"reference","module":"@angular/core","name":"Renderer2","line":257,"character":59},{"__symbolic":"reference","module":"@angular/core","name":"ComponentFactoryResolver","line":257,"character":84},{"__symbolic":"reference","module":"@angular/core","name":"NgZone","line":258,"character":23},{"__symbolic":"reference","name":"ɵu"},{"__symbolic":"reference","name":"NgbCalendar"},{"__symbolic":"reference","name":"NgbDateAdapter"},{"__symbolic":"reference","name":"any"},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":260,"character":31}]}],"registerOnChange":[{"__symbolic":"method"}],"registerOnTouched":[{"__symbolic":"method"}],"registerOnValidatorChange":[{"__symbolic":"method"}],"setDisabledState":[{"__symbolic":"method"}],"validate":[{"__symbolic":"method"}],"writeValue":[{"__symbolic":"method"}],"manualDateChange":[{"__symbolic":"method"}],"isOpen":[{"__symbolic":"method"}],"open":[{"__symbolic":"method"}],"close":[{"__symbolic":"method"}],"toggle":[{"__symbolic":"method"}],"navigateTo":[{"__symbolic":"method"}],"onBlur":[{"__symbolic":"method"}],"ngOnChanges":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"_applyDatepickerInputs":[{"__symbolic":"method"}],"_applyPopupStyling":[{"__symbolic":"method"}],"_subscribeForDatepickerOutputs":[{"__symbolic":"method"}],"_writeModelValue":[{"__symbolic":"method"}],"_fromDateStruct":[{"__symbolic":"method"}],"_updatePopupPosition":[{"__symbolic":"method"}]}},"NgbPeriod":{"__symbolic":"interface"},"ɵm":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":29,"character":1},"arguments":[{"selector":".navbar"}]}],"members":{}},"NgbDropdown":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":130,"character":1},"arguments":[{"selector":"[ngbDropdown]","exportAs":"ngbDropdown","host":{"[class.show]":"isOpen()","$quoted$":["[class.show]"]}}]}],"members":{"_menu":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ContentChild","line":136,"character":3},"arguments":[{"__symbolic":"reference","name":"NgbDropdownMenu"},{"static":false}]}]}],"_menuElement":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ContentChild","line":137,"character":3},"arguments":[{"__symbolic":"reference","name":"NgbDropdownMenu"},{"read":{"__symbolic":"reference","name":"ElementRef","module":"@angular/core","arguments":[{"__symbolic":"error","message":"Could not resolve type","line":122,"character":86,"context":{"typeName":"HTMLElement"},"module":"./dropdown/dropdown"}]},"static":false}]}]}],"_anchor":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ContentChild","line":138,"character":3},"arguments":[{"__symbolic":"reference","name":"NgbDropdownAnchor"},{"static":false}]}]}],"autoClose":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":148,"character":3}}]}],"_open":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":153,"character":3},"arguments":["open"]}]}],"placement":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":168,"character":3}}]}],"container":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":176,"character":3}}]}],"display":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":186,"character":3}}]}],"openChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":195,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":198,"character":78},"arguments":[{"__symbolic":"reference","module":"@angular/common","name":"DOCUMENT","line":198,"character":85}]}],null,null,null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":200,"character":7}}]],"parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":198,"character":31},{"__symbolic":"reference","name":"NgbDropdownConfig"},{"__symbolic":"reference","name":"any"},{"__symbolic":"reference","module":"@angular/core","name":"NgZone","line":199,"character":23},{"__symbolic":"reference","name":"ElementRef","module":"@angular/core","arguments":[{"__symbolic":"error","message":"Could not resolve type","line":199,"character":63,"context":{"typeName":"HTMLElement"},"module":"./dropdown/dropdown"}]},{"__symbolic":"reference","module":"@angular/core","name":"Renderer2","line":199,"character":96},{"__symbolic":"reference","name":"ɵm"}]}],"ngAfterContentInit":[{"__symbolic":"method"}],"ngOnChanges":[{"__symbolic":"method"}],"isOpen":[{"__symbolic":"method"}],"open":[{"__symbolic":"method"}],"_setCloseHandlers":[{"__symbolic":"method"}],"close":[{"__symbolic":"method"}],"toggle":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"onKeyDown":[{"__symbolic":"method"}],"_isDropup":[{"__symbolic":"method"}],"_isEventFromToggle":[{"__symbolic":"method"}],"_getMenuElements":[{"__symbolic":"method"}],"_positionMenu":[{"__symbolic":"method"}],"_getFirstPlacement":[{"__symbolic":"method"}],"_resetContainer":[{"__symbolic":"method"}],"_applyContainer":[{"__symbolic":"method"}],"_applyPlacementClasses":[{"__symbolic":"method"}]}},"NgbDropdownAnchor":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":88,"character":1},"arguments":[{"selector":"[ngbDropdownAnchor]","host":{"class":"dropdown-toggle","aria-haspopup":"true","[attr.aria-expanded]":"dropdown.isOpen()","$quoted$":["class","aria-haspopup","[attr.aria-expanded]"]}}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":95,"character":15},"arguments":[{"__symbolic":"reference","name":"NgbDropdown"}]}],null],"parameters":[null,{"__symbolic":"reference","name":"ElementRef","module":"@angular/core","arguments":[{"__symbolic":"error","message":"Could not resolve type","line":199,"character":63,"context":{"typeName":"HTMLElement"},"module":"./dropdown/dropdown"}]}]}],"getNativeElement":[{"__symbolic":"method"}]}},"NgbDropdownConfig":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":9,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{},"statics":{"ngInjectableDef":{}}},"NgbDropdownItem":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":39,"character":1},"arguments":[{"selector":"[ngbDropdownItem]","host":{"class":"dropdown-item","[class.disabled]":"disabled","$quoted$":["class","[class.disabled]"]}}]}],"members":{"disabled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":43,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ElementRef","module":"@angular/core","arguments":[{"__symbolic":"error","message":"Could not resolve type","line":199,"character":63,"context":{"typeName":"HTMLElement"},"module":"./dropdown/dropdown"}]}]}]}},"NgbDropdownMenu":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":56,"character":1},"arguments":[{"selector":"[ngbDropdownMenu]","host":{"[class.dropdown-menu]":"true","[class.show]":"dropdown.isOpen()","[attr.x-placement]":"placement","(keydown.ArrowUp)":"dropdown.onKeyDown($event)","(keydown.ArrowDown)":"dropdown.onKeyDown($event)","(keydown.Home)":"dropdown.onKeyDown($event)","(keydown.End)":"dropdown.onKeyDown($event)","(keydown.Enter)":"dropdown.onKeyDown($event)","(keydown.Space)":"dropdown.onKeyDown($event)","$quoted$":["[class.dropdown-menu]","[class.show]","[attr.x-placement]","(keydown.ArrowUp)","(keydown.ArrowDown)","(keydown.Home)","(keydown.End)","(keydown.Enter)","(keydown.Space)"]}}]}],"members":{"menuItems":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ContentChildren","line":74,"character":3},"arguments":[{"__symbolic":"reference","name":"NgbDropdownItem"}]}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":76,"character":15},"arguments":[{"__symbolic":"reference","name":"NgbDropdown"}]}]],"parameters":[null]}]}},"NgbDropdownModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":16,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"NgbDropdown"},{"__symbolic":"reference","name":"NgbDropdownAnchor"},{"__symbolic":"reference","name":"NgbDropdownToggle"},{"__symbolic":"reference","name":"NgbDropdownMenu"},{"__symbolic":"reference","name":"NgbDropdownItem"},{"__symbolic":"reference","name":"ɵm"}],"exports":[{"__symbolic":"reference","name":"NgbDropdown"},{"__symbolic":"reference","name":"NgbDropdownAnchor"},{"__symbolic":"reference","name":"NgbDropdownToggle"},{"__symbolic":"reference","name":"NgbDropdownMenu"},{"__symbolic":"reference","name":"NgbDropdownItem"},{"__symbolic":"reference","name":"ɵm"}]}]}],"members":{}},"NgbDropdownToggle":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"NgbDropdownAnchor"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":107,"character":1},"arguments":[{"selector":"[ngbDropdownToggle]","host":{"class":"dropdown-toggle","aria-haspopup":"true","[attr.aria-expanded]":"dropdown.isOpen()","(click)":"dropdown.toggle()","(keydown.ArrowUp)":"dropdown.onKeyDown($event)","(keydown.ArrowDown)":"dropdown.onKeyDown($event)","(keydown.Home)":"dropdown.onKeyDown($event)","(keydown.End)":"dropdown.onKeyDown($event)","$quoted$":["class","aria-haspopup","[attr.aria-expanded]","(click)","(keydown.ArrowUp)","(keydown.ArrowDown)","(keydown.Home)","(keydown.End)"]},"providers":[{"provide":{"__symbolic":"reference","name":"NgbDropdownAnchor"},"useExisting":{"__symbolic":"reference","name":"NgbDropdownToggle"}}]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":122,"character":15},"arguments":[{"__symbolic":"reference","name":"NgbDropdown"}]}],null],"parameters":[null,{"__symbolic":"reference","name":"ElementRef","module":"@angular/core","arguments":[{"__symbolic":"error","message":"Could not resolve type","line":199,"character":63,"context":{"typeName":"HTMLElement"},"module":"./dropdown/dropdown"}]}]}]}},"ModalDismissReasons":{"BACKDROP_CLICK":0,"ESC":1},"NgbActiveModal":{"__symbolic":"class","members":{"close":[{"__symbolic":"method"}],"dismiss":[{"__symbolic":"method"}]}},"NgbModal":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":12,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ComponentFactoryResolver","line":15,"character":26},{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":15,"character":71},{"__symbolic":"reference","name":"ɵy"},{"__symbolic":"reference","name":"NgbModalConfig"}]}],"open":[{"__symbolic":"method"}],"dismissAll":[{"__symbolic":"method"}],"hasOpenModals":[{"__symbolic":"method"}]},"statics":{"ngInjectableDef":{}}},"NgbModalConfig":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":95,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{},"statics":{"ngInjectableDef":{}}},"NgbModalModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":11,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"ɵw"},{"__symbolic":"reference","name":"ɵx"}],"entryComponents":[{"__symbolic":"reference","name":"ɵw"},{"__symbolic":"reference","name":"ɵx"}],"providers":[{"__symbolic":"reference","name":"NgbModal"}]}]}],"members":{}},"NgbModalOptions":{"__symbolic":"interface"},"NgbModalRef":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ComponentRef","module":"@angular/core","arguments":[{"__symbolic":"reference","name":"ɵw"}]},{"__symbolic":"reference","name":"ɵbe"},{"__symbolic":"reference","name":"ComponentRef","module":"@angular/core","arguments":[{"__symbolic":"reference","name":"ɵw"}]},{"__symbolic":"reference","name":"Function"}]}],"close":[{"__symbolic":"method"}],"_dismiss":[{"__symbolic":"method"}],"dismiss":[{"__symbolic":"method"}],"_removeModalElements":[{"__symbolic":"method"}]}},"NgbPagination":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":116,"character":1},"arguments":[{"selector":"ngb-pagination","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":118,"character":19},"member":"OnPush"},"host":{"role":"navigation","$quoted$":["role"]},"template":"\n ««\n «\n »\n »»\n ...\n \n {{ page }}\n (current)\n \n \n "}]}],"members":{"tplEllipsis":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ContentChild","line":181,"character":3},"arguments":[{"__symbolic":"reference","name":"NgbPaginationEllipsis"},{"static":false}]}]}],"tplFirst":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ContentChild","line":182,"character":3},"arguments":[{"__symbolic":"reference","name":"NgbPaginationFirst"},{"static":false}]}]}],"tplLast":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ContentChild","line":183,"character":3},"arguments":[{"__symbolic":"reference","name":"NgbPaginationLast"},{"static":false}]}]}],"tplNext":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ContentChild","line":184,"character":3},"arguments":[{"__symbolic":"reference","name":"NgbPaginationNext"},{"static":false}]}]}],"tplNumber":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ContentChild","line":185,"character":3},"arguments":[{"__symbolic":"reference","name":"NgbPaginationNumber"},{"static":false}]}]}],"tplPrevious":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ContentChild","line":186,"character":3},"arguments":[{"__symbolic":"reference","name":"NgbPaginationPrevious"},{"static":false}]}]}],"disabled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":191,"character":3}}]}],"boundaryLinks":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":196,"character":3}}]}],"directionLinks":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":201,"character":3}}]}],"ellipses":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":206,"character":3}}]}],"rotate":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":213,"character":3}}]}],"collectionSize":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":222,"character":3}}]}],"maxSize":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":227,"character":3}}]}],"page":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":234,"character":3}}]}],"pageSize":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":239,"character":3}}]}],"pageChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":248,"character":3}}]}],"size":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":255,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"NgbPaginationConfig"}]}],"hasPrevious":[{"__symbolic":"method"}],"hasNext":[{"__symbolic":"method"}],"nextDisabled":[{"__symbolic":"method"}],"previousDisabled":[{"__symbolic":"method"}],"selectPage":[{"__symbolic":"method"}],"ngOnChanges":[{"__symbolic":"method"}],"isEllipsis":[{"__symbolic":"method"}],"_applyEllipses":[{"__symbolic":"method"}],"_applyRotation":[{"__symbolic":"method"}],"_applyPagination":[{"__symbolic":"method"}],"_setPageInRange":[{"__symbolic":"method"}],"_updatePages":[{"__symbolic":"method"}]}},"NgbPaginationConfig":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":8,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{},"statics":{"ngInjectableDef":{}}},"NgbPaginationEllipsis":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":58,"character":1},"arguments":[{"selector":"ng-template[ngbPaginationEllipsis]"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"TemplateRef","module":"@angular/core","arguments":[{"__symbolic":"reference","name":"any"}]}]}]}},"NgbPaginationFirst":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":68,"character":1},"arguments":[{"selector":"ng-template[ngbPaginationFirst]"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"TemplateRef","module":"@angular/core","arguments":[{"__symbolic":"reference","name":"any"}]}]}]}},"NgbPaginationLast":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":78,"character":1},"arguments":[{"selector":"ng-template[ngbPaginationLast]"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"TemplateRef","module":"@angular/core","arguments":[{"__symbolic":"reference","name":"any"}]}]}]}},"NgbPaginationModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":29,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"NgbPagination"},{"__symbolic":"reference","name":"NgbPaginationEllipsis"},{"__symbolic":"reference","name":"NgbPaginationFirst"},{"__symbolic":"reference","name":"NgbPaginationLast"},{"__symbolic":"reference","name":"NgbPaginationNext"},{"__symbolic":"reference","name":"NgbPaginationNumber"},{"__symbolic":"reference","name":"NgbPaginationPrevious"}],"exports":[{"__symbolic":"reference","name":"NgbPagination"},{"__symbolic":"reference","name":"NgbPaginationEllipsis"},{"__symbolic":"reference","name":"NgbPaginationFirst"},{"__symbolic":"reference","name":"NgbPaginationLast"},{"__symbolic":"reference","name":"NgbPaginationNext"},{"__symbolic":"reference","name":"NgbPaginationNumber"},{"__symbolic":"reference","name":"NgbPaginationPrevious"}],"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":29,"character":68}]}]}],"members":{}},"NgbPaginationNext":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":88,"character":1},"arguments":[{"selector":"ng-template[ngbPaginationNext]"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"TemplateRef","module":"@angular/core","arguments":[{"__symbolic":"reference","name":"any"}]}]}]}},"NgbPaginationNumber":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":98,"character":1},"arguments":[{"selector":"ng-template[ngbPaginationNumber]"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"TemplateRef","module":"@angular/core","arguments":[{"__symbolic":"reference","name":"any"}]}]}]}},"NgbPaginationPrevious":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":108,"character":1},"arguments":[{"selector":"ng-template[ngbPaginationPrevious]"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"TemplateRef","module":"@angular/core","arguments":[{"__symbolic":"reference","name":"any"}]}]}]}},"ɵn":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":35,"character":1},"arguments":[{"selector":"ngb-popover-window","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":37,"character":19},"member":"OnPush"},"encapsulation":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewEncapsulation","line":38,"character":17},"member":"None"},"host":{"[class]":"\"popover\" + (popoverClass ? \" \" + popoverClass : \"\")","role":"tooltip","[id]":"id","$quoted$":["[class]","role","[id]"]},"template":"\n
\n

\n {{title}}\n \n

\n
","styles":["ngb-popover-window.bs-popover-bottom>.arrow,ngb-popover-window.bs-popover-top>.arrow{left:50%;margin-left:-.5rem}ngb-popover-window.bs-popover-bottom-left>.arrow,ngb-popover-window.bs-popover-top-left>.arrow{left:2em}ngb-popover-window.bs-popover-bottom-right>.arrow,ngb-popover-window.bs-popover-top-right>.arrow{left:auto;right:2em}ngb-popover-window.bs-popover-left>.arrow,ngb-popover-window.bs-popover-right>.arrow{top:50%;margin-top:-.5rem}ngb-popover-window.bs-popover-left-top>.arrow,ngb-popover-window.bs-popover-right-top>.arrow{top:.7em}ngb-popover-window.bs-popover-left-bottom>.arrow,ngb-popover-window.bs-popover-right-bottom>.arrow{top:auto;bottom:.7em}"]}]}],"members":{"title":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":50,"character":3}}]}],"id":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":51,"character":3}}]}],"popoverClass":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":52,"character":3}}]}],"context":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":53,"character":3}}]}],"isTitleTemplate":[{"__symbolic":"method"}]}},"NgbPopover":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":61,"character":1},"arguments":[{"selector":"[ngbPopover]","exportAs":"ngbPopover"}]}],"members":{"autoClose":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":74,"character":3}}]}],"ngbPopover":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":81,"character":3}}]}],"popoverTitle":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":88,"character":3}}]}],"placement":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":103,"character":3}}]}],"triggers":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":111,"character":3}}]}],"container":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":118,"character":3}}]}],"disablePopover":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":125,"character":3}}]}],"popoverClass":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":132,"character":3}}]}],"openDelay":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":139,"character":3}}]}],"closeDelay":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":146,"character":3}}]}],"shown":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":151,"character":3}}]}],"hidden":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":156,"character":3}}]}],"_isDisabled":[{"__symbolic":"method"}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,null,null,null,null,null,null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":176,"character":32},"arguments":[{"__symbolic":"reference","module":"@angular/common","name":"DOCUMENT","line":176,"character":39}]}],null,null],"parameters":[{"__symbolic":"reference","name":"ElementRef","module":"@angular/core","arguments":[{"__symbolic":"error","message":"Could not resolve type","line":174,"character":38,"context":{"typeName":"HTMLElement"},"module":"./popover/popover"}]},{"__symbolic":"reference","module":"@angular/core","name":"Renderer2","line":174,"character":71},{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":174,"character":92},{"__symbolic":"reference","module":"@angular/core","name":"ComponentFactoryResolver","line":175,"character":32},{"__symbolic":"reference","module":"@angular/core","name":"ViewContainerRef","line":175,"character":76},{"__symbolic":"reference","name":"NgbPopoverConfig"},{"__symbolic":"reference","module":"@angular/core","name":"NgZone","line":176,"character":23},{"__symbolic":"reference","name":"any"},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":176,"character":98},{"__symbolic":"reference","module":"@angular/core","name":"ApplicationRef","line":177,"character":31}]}],"open":[{"__symbolic":"method"}],"close":[{"__symbolic":"method"}],"toggle":[{"__symbolic":"method"}],"isOpen":[{"__symbolic":"method"}],"ngOnInit":[{"__symbolic":"method"}],"ngOnChanges":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}]}},"NgbPopoverConfig":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":9,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{},"statics":{"ngInjectableDef":{}}},"NgbPopoverModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":9,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"NgbPopover"},{"__symbolic":"reference","name":"ɵn"}],"exports":[{"__symbolic":"reference","name":"NgbPopover"}],"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":12,"character":12}],"entryComponents":[{"__symbolic":"reference","name":"ɵn"}]}]}],"members":{}},"NgbProgressbar":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":7,"character":1},"arguments":[{"selector":"ngb-progressbar","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":9,"character":19},"member":"OnPush"},"template":"\n
\n
\n {{getPercentValue()}}%\n
\n
\n "}]}],"members":{"max":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":24,"character":3}}]}],"animated":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":31,"character":3}}]}],"striped":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":36,"character":3}}]}],"showValue":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":41,"character":3}}]}],"type":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":48,"character":3}}]}],"value":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":55,"character":3}}]}],"height":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":62,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"NgbProgressbarConfig"}]}],"getValue":[{"__symbolic":"method"}],"getPercentValue":[{"__symbolic":"method"}]}},"NgbProgressbarConfig":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":8,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{},"statics":{"ngInjectableDef":{}}},"NgbProgressbarModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":8,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"NgbProgressbar"}],"exports":[{"__symbolic":"reference","name":"NgbProgressbar"}],"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":8,"character":80}]}]}],"members":{}},"NgbRating":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":43,"character":1},"arguments":[{"selector":"ngb-rating","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":45,"character":19},"member":"OnPush"},"host":{"class":"d-inline-flex","tabindex":"0","role":"slider","aria-valuemin":"0","[attr.aria-valuemax]":"max","[attr.aria-valuenow]":"nextRate","[attr.aria-valuetext]":"ariaValueText()","[attr.aria-disabled]":"readonly ? true : null","(blur)":"handleBlur()","(keydown)":"handleKeyDown($event)","(mouseleave)":"reset()","$quoted$":["class","tabindex","role","aria-valuemin","[attr.aria-valuemax]","[attr.aria-valuenow]","[attr.aria-valuetext]","[attr.aria-disabled]","(blur)","(keydown)","(mouseleave)"]},"template":"\n {{ fill === 100 ? '★' : '☆' }}\n \n ({{ index < nextRate ? '*' : ' ' }})\n \n \n \n \n \n ","providers":[{"provide":{"__symbolic":"reference","module":"@angular/forms","name":"NG_VALUE_ACCESSOR","line":35,"character":11},"useExisting":{"__symbolic":"reference","name":"NgbRating"},"multi":true}]}]}],"members":{"max":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":81,"character":3}}]}],"rate":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":86,"character":3}}]}],"readonly":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":91,"character":3}}]}],"resettable":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":96,"character":3}}]}],"starTemplate":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":103,"character":3}}]}],"starTemplateFromContent":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ContentChild","line":104,"character":3},"arguments":[{"__symbolic":"reference","module":"@angular/core","name":"TemplateRef","line":104,"character":16},{"static":false}]}]}],"hover":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":111,"character":3}}]}],"leave":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":118,"character":3}}]}],"rateChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":125,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"NgbRatingConfig"},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":130,"character":67}]}],"ariaValueText":[{"__symbolic":"method"}],"enter":[{"__symbolic":"method"}],"handleBlur":[{"__symbolic":"method"}],"handleClick":[{"__symbolic":"method"}],"handleKeyDown":[{"__symbolic":"method"}],"ngOnChanges":[{"__symbolic":"method"}],"ngOnInit":[{"__symbolic":"method"}],"registerOnChange":[{"__symbolic":"method"}],"registerOnTouched":[{"__symbolic":"method"}],"reset":[{"__symbolic":"method"}],"setDisabledState":[{"__symbolic":"method"}],"update":[{"__symbolic":"method"}],"writeValue":[{"__symbolic":"method"}],"_getFillValue":[{"__symbolic":"method"}],"_updateState":[{"__symbolic":"method"}]}},"NgbRatingConfig":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":8,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{},"statics":{"ngInjectableDef":{}}},"NgbRatingModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":8,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"NgbRating"}],"exports":[{"__symbolic":"reference","name":"NgbRating"}],"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":8,"character":70}]}]}],"members":{}},"NgbTab":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":36,"character":1},"arguments":[{"selector":"ngb-tab"}]}],"members":{"id":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":43,"character":3}}]}],"title":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":50,"character":3}}]}],"disabled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":55,"character":3}}]}],"titleTpls":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ContentChildren","line":60,"character":3},"arguments":[{"__symbolic":"reference","name":"NgbTabTitle"},{"descendants":false}]}]}],"contentTpls":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ContentChildren","line":61,"character":3},"arguments":[{"__symbolic":"reference","name":"NgbTabContent"},{"descendants":false}]}]}],"ngAfterContentChecked":[{"__symbolic":"method"}]}},"NgbTabChangeEvent":{"__symbolic":"interface"},"NgbTabContent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":28,"character":1},"arguments":[{"selector":"ng-template[ngbTabContent]"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"TemplateRef","module":"@angular/core","arguments":[{"__symbolic":"reference","name":"any"}]}]}]}},"NgbTabset":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":96,"character":1},"arguments":[{"selector":"ngb-tabset","exportAs":"ngbTabset","template":"\n \n
\n \n \n \n
\n
\n \n "}]}],"members":{"tabs":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ContentChildren","line":126,"character":3},"arguments":[{"__symbolic":"reference","name":"NgbTab"}]}]}],"activeId":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":133,"character":3}}]}],"destroyOnHide":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":138,"character":3}}]}],"justify":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":143,"character":3}}]}],"orientation":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":155,"character":3}}]}],"type":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":164,"character":3}}]}],"tabChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":171,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"NgbTabsetConfig"}]}],"select":[{"__symbolic":"method"}],"ngAfterContentChecked":[{"__symbolic":"method"}],"_getTabById":[{"__symbolic":"method"}]}},"NgbTabsetConfig":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":8,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{},"statics":{"ngInjectableDef":{}}},"NgbTabsetModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":10,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"NgbTabset"},{"__symbolic":"reference","name":"NgbTab"},{"__symbolic":"reference","name":"NgbTabContent"},{"__symbolic":"reference","name":"NgbTabTitle"}],"exports":[{"__symbolic":"reference","name":"NgbTabset"},{"__symbolic":"reference","name":"NgbTab"},{"__symbolic":"reference","name":"NgbTabContent"},{"__symbolic":"reference","name":"NgbTabTitle"}],"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":10,"character":90}]}]}],"members":{}},"NgbTabTitle":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":20,"character":1},"arguments":[{"selector":"ng-template[ngbTabTitle]"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"TemplateRef","module":"@angular/core","arguments":[{"__symbolic":"reference","name":"any"}]}]}]}},"ɵo":{"__symbolic":"function","parameters":[],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"ɵp"}}},"ɵp":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"NgbTimeAdapter"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":34,"character":1}}],"members":{"fromModel":[{"__symbolic":"method"}],"toModel":[{"__symbolic":"method"}]}},"ɵq":{"__symbolic":"function","parameters":["locale"],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"ɵr"},"arguments":[{"__symbolic":"reference","name":"locale"}]}},"ɵr":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"NgbTimepickerI18n"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":25,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":29,"character":15},"arguments":[{"__symbolic":"reference","module":"@angular/core","name":"LOCALE_ID","line":29,"character":22}]}]],"parameters":[{"__symbolic":"reference","name":"string"}]}],"getMorningPeriod":[{"__symbolic":"method"}],"getAfternoonPeriod":[{"__symbolic":"method"}]}},"NgbTimeAdapter":{"__symbolic":"class","arity":1,"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":21,"character":1},"arguments":[{"providedIn":"root","useFactory":{"__symbolic":"reference","name":"ɵo"}}]}],"members":{"fromModel":[{"__symbolic":"method"}],"toModel":[{"__symbolic":"method"}]},"statics":{"ngInjectableDef":{}}},"NgbTimepickerI18n":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":12,"character":1},"arguments":[{"providedIn":"root","useFactory":{"__symbolic":"reference","name":"ɵq"},"deps":[{"__symbolic":"reference","module":"@angular/core","name":"LOCALE_ID","line":12,"character":81}]}]}],"members":{"getMorningPeriod":[{"__symbolic":"method"}],"getAfternoonPeriod":[{"__symbolic":"method"}]},"statics":{"ngInjectableDef":{}}},"NgbTimepicker":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":26,"character":1},"arguments":[{"selector":"ngb-timepicker","encapsulation":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewEncapsulation","line":28,"character":17},"member":"None"},"template":"\n
\n
\n
\n \n \n \n
\n
:
\n
\n \n \n \n
\n
:
\n
\n \n \n \n
\n
\n
\n \n
\n
\n
\n ","providers":[{"provide":{"__symbolic":"reference","module":"@angular/forms","name":"NG_VALUE_ACCESSOR","line":18,"character":11},"useExisting":{"__symbolic":"reference","name":"NgbTimepicker"},"multi":true}],"styles":["ngb-timepicker{font-size:1rem}.ngb-tp{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.ngb-tp-input-container{width:4em}.ngb-tp-chevron::before{border-style:solid;border-width:.29em .29em 0 0;content:\"\";display:inline-block;height:.69em;left:.05em;position:relative;top:.15em;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);vertical-align:middle;width:.69em}.ngb-tp-chevron.bottom:before{top:-.3em;-webkit-transform:rotate(135deg);transform:rotate(135deg)}.ngb-tp-input{text-align:center}.ngb-tp-hour,.ngb-tp-meridian,.ngb-tp-minute,.ngb-tp-second{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-align:center;align-items:center;-ms-flex-pack:distribute;justify-content:space-around}.ngb-tp-spacer{width:1em;text-align:center}"]}]}],"members":{"meridian":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":121,"character":3}}]}],"spinners":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":126,"character":3}}]}],"seconds":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":131,"character":3}}]}],"hourStep":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":136,"character":3}}]}],"minuteStep":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":146,"character":3}}]}],"secondStep":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":156,"character":3}}]}],"readonlyInputs":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":166,"character":3}}]}],"size":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":171,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"NgbTimepickerConfig"},{"__symbolic":"reference","name":"NgbTimeAdapter"},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":175,"character":19},{"__symbolic":"reference","name":"NgbTimepickerI18n"}]}],"writeValue":[{"__symbolic":"method"}],"registerOnChange":[{"__symbolic":"method"}],"registerOnTouched":[{"__symbolic":"method"}],"setDisabledState":[{"__symbolic":"method"}],"changeHour":[{"__symbolic":"method"}],"changeMinute":[{"__symbolic":"method"}],"changeSecond":[{"__symbolic":"method"}],"updateHour":[{"__symbolic":"method"}],"updateMinute":[{"__symbolic":"method"}],"updateSecond":[{"__symbolic":"method"}],"toggleMeridian":[{"__symbolic":"method"}],"formatHour":[{"__symbolic":"method"}],"formatMinSec":[{"__symbolic":"method"}],"ngOnChanges":[{"__symbolic":"method"}],"propagateModelChange":[{"__symbolic":"method"}]}},"NgbTimepickerConfig":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":8,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{},"statics":{"ngInjectableDef":{}}},"NgbTimepickerModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":11,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"NgbTimepicker"}],"exports":[{"__symbolic":"reference","name":"NgbTimepicker"}],"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":11,"character":78}]}]}],"members":{}},"NgbTimeStruct":{"__symbolic":"interface"},"NgbToast":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":33,"character":1},"arguments":[{"selector":"ngb-toast","exportAs":"ngbToast","encapsulation":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewEncapsulation","line":36,"character":17},"member":"None"},"host":{"role":"alert","[attr.aria-live]":"ariaLive","aria-atomic":"true","[class.toast]":"true","[class.show]":"true","[class.autohide]":"autohide","$quoted$":["role","[attr.aria-live]","aria-atomic","[class.toast]","[class.show]","[class.autohide]"]},"template":"\n \n {{header}}\n \n \n
\n \n \n
\n
\n
\n \n
\n ","styles":[".ngb-toasts{position:fixed;top:0;right:0;margin:.5em;z-index:1200}ngb-toast .toast-header .close{margin-left:auto;margin-bottom:.25rem}"]}]}],"members":{"delay":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":71,"character":3}}]}],"autohide":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":77,"character":3}}]}],"header":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":83,"character":3}}]}],"contentHeaderTpl":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ContentChild","line":89,"character":3},"arguments":[{"__symbolic":"reference","name":"NgbToastHeader"},{"read":{"__symbolic":"reference","module":"@angular/core","name":"TemplateRef","line":89,"character":39},"static":true}]}]}],"hideOutput":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":100,"character":3},"arguments":["hide"]}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Attribute","line":102,"character":15},"arguments":["aria-live"]}],null],"parameters":[{"__symbolic":"reference","name":"string"},{"__symbolic":"reference","name":"NgbToastConfig"}]}],"ngAfterContentInit":[{"__symbolic":"method"}],"ngOnChanges":[{"__symbolic":"method"}],"hide":[{"__symbolic":"method"}],"_init":[{"__symbolic":"method"}],"_clearTimeout":[{"__symbolic":"method"}]}},"NgbToastConfig":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":36,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{},"statics":{"ngInjectableDef":{}}},"NgbToastHeader":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":23,"character":1},"arguments":[{"selector":"[ngbToastHeader]"}]}],"members":{}},"NgbToastModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":8,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"NgbToast"},{"__symbolic":"reference","name":"NgbToastHeader"}],"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":8,"character":63}],"exports":[{"__symbolic":"reference","name":"NgbToast"},{"__symbolic":"reference","name":"NgbToastHeader"}]}]}],"members":{}},"ɵs":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":33,"character":1},"arguments":[{"selector":"ngb-tooltip-window","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":35,"character":19},"member":"OnPush"},"encapsulation":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewEncapsulation","line":36,"character":17},"member":"None"},"host":{"[class]":"\"tooltip show\" + (tooltipClass ? \" \" + tooltipClass : \"\")","role":"tooltip","[id]":"id","$quoted$":["[class]","role","[id]"]},"template":"
","styles":["ngb-tooltip-window.bs-tooltip-bottom .arrow,ngb-tooltip-window.bs-tooltip-top .arrow{left:calc(50% - .4rem)}ngb-tooltip-window.bs-tooltip-bottom-left .arrow,ngb-tooltip-window.bs-tooltip-top-left .arrow{left:1em}ngb-tooltip-window.bs-tooltip-bottom-right .arrow,ngb-tooltip-window.bs-tooltip-top-right .arrow{left:auto;right:.8rem}ngb-tooltip-window.bs-tooltip-left .arrow,ngb-tooltip-window.bs-tooltip-right .arrow{top:calc(50% - .4rem)}ngb-tooltip-window.bs-tooltip-left-top .arrow,ngb-tooltip-window.bs-tooltip-right-top .arrow{top:.4rem}ngb-tooltip-window.bs-tooltip-left-bottom .arrow,ngb-tooltip-window.bs-tooltip-right-bottom .arrow{top:auto;bottom:.4rem}"]}]}],"members":{"id":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":42,"character":3}}]}],"tooltipClass":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":43,"character":3}}]}]}},"NgbTooltip":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":49,"character":1},"arguments":[{"selector":"[ngbTooltip]","exportAs":"ngbTooltip"}]}],"members":{"autoClose":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":62,"character":3}}]}],"placement":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":77,"character":3}}]}],"triggers":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":85,"character":3}}]}],"container":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":92,"character":3}}]}],"disableTooltip":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":99,"character":3}}]}],"tooltipClass":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":106,"character":3}}]}],"openDelay":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":113,"character":3}}]}],"closeDelay":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":120,"character":3}}]}],"shown":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":125,"character":3}}]}],"hidden":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":129,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,null,null,null,null,null,null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":141,"character":32},"arguments":[{"__symbolic":"reference","module":"@angular/common","name":"DOCUMENT","line":141,"character":39}]}],null,null],"parameters":[{"__symbolic":"reference","name":"ElementRef","module":"@angular/core","arguments":[{"__symbolic":"error","message":"Could not resolve type","line":139,"character":38,"context":{"typeName":"HTMLElement"},"module":"./tooltip/tooltip"}]},{"__symbolic":"reference","module":"@angular/core","name":"Renderer2","line":139,"character":71},{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":139,"character":92},{"__symbolic":"reference","module":"@angular/core","name":"ComponentFactoryResolver","line":140,"character":32},{"__symbolic":"reference","module":"@angular/core","name":"ViewContainerRef","line":140,"character":76},{"__symbolic":"reference","name":"NgbTooltipConfig"},{"__symbolic":"reference","module":"@angular/core","name":"NgZone","line":141,"character":23},{"__symbolic":"reference","name":"any"},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":141,"character":98},{"__symbolic":"reference","module":"@angular/core","name":"ApplicationRef","line":142,"character":31}]}],"ngbTooltip":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":168,"character":3}}]}],"open":[{"__symbolic":"method"}],"close":[{"__symbolic":"method"}],"toggle":[{"__symbolic":"method"}],"isOpen":[{"__symbolic":"method"}],"ngOnInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}]}},"NgbTooltipConfig":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":9,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{},"statics":{"ngInjectableDef":{}}},"NgbTooltipModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":8,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"NgbTooltip"},{"__symbolic":"reference","name":"ɵs"}],"exports":[{"__symbolic":"reference","name":"NgbTooltip"}],"entryComponents":[{"__symbolic":"reference","name":"ɵs"}]}]}],"members":{}},"ɵt":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":19,"character":1},"arguments":[{"selector":"ngb-typeahead-window","exportAs":"ngbTypeaheadWindow","host":{"(mousedown)":"$event.preventDefault()","class":"dropdown-menu show","role":"listbox","[id]":"id","$quoted$":["(mousedown)","class","role","[id]"]},"template":"\n \n \n \n \n \n \n "}]}],"members":{"id":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":46,"character":3}}]}],"focusFirst":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":51,"character":3}}]}],"results":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":56,"character":3}}]}],"term":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":61,"character":3}}]}],"formatter":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":67,"character":3}}]}],"resultTemplate":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":72,"character":3}}]}],"selectEvent":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":77,"character":3},"arguments":["select"]}]}],"activeChangeEvent":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":79,"character":3},"arguments":["activeChange"]}]}],"hasActive":[{"__symbolic":"method"}],"getActive":[{"__symbolic":"method"}],"markActive":[{"__symbolic":"method"}],"next":[{"__symbolic":"method"}],"prev":[{"__symbolic":"method"}],"resetActive":[{"__symbolic":"method"}],"select":[{"__symbolic":"method"}],"ngOnInit":[{"__symbolic":"method"}],"_activeChanged":[{"__symbolic":"method"}]}},"NgbHighlight":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":11,"character":1},"arguments":[{"selector":"ngb-highlight","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":13,"character":19},"member":"OnPush"},"encapsulation":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewEncapsulation","line":14,"character":17},"member":"None"},"template":"{{part}}{{part}}","styles":[".ngb-highlight{font-weight:700}"]}]}],"members":{"highlightClass":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":26,"character":3}}]}],"result":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":34,"character":3}}]}],"term":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":40,"character":3}}]}],"ngOnChanges":[{"__symbolic":"method"}]}},"NgbTypeahead":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":62,"character":1},"arguments":[{"selector":"input[ngbTypeahead]","exportAs":"ngbTypeahead","host":{"(blur)":"handleBlur()","[class.open]":"isPopupOpen()","(keydown)":"handleKeyDown($event)","[autocomplete]":"autocomplete","autocapitalize":"off","autocorrect":"off","role":"combobox","aria-multiline":"false","[attr.aria-autocomplete]":"showHint ? \"both\" : \"list\"","[attr.aria-activedescendant]":"activeDescendant","[attr.aria-owns]":"isPopupOpen() ? popupId : null","[attr.aria-expanded]":"isPopupOpen()","$quoted$":["(blur)","[class.open]","(keydown)","[autocomplete]","autocapitalize","autocorrect","role","aria-multiline","[attr.aria-autocomplete]","[attr.aria-activedescendant]","[attr.aria-owns]","[attr.aria-expanded]"]},"providers":[{"provide":{"__symbolic":"reference","module":"@angular/forms","name":"NG_VALUE_ACCESSOR","line":37,"character":11},"useExisting":{"__symbolic":"reference","name":"NgbTypeahead"},"multi":true}]}]}],"members":{"autocomplete":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":99,"character":3}}]}],"container":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":106,"character":3}}]}],"editable":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":111,"character":3}}]}],"focusFirst":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":116,"character":3}}]}],"inputFormatter":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":124,"character":3}}]}],"ngbTypeahead":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":137,"character":3}}]}],"resultFormatter":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":146,"character":3}}]}],"resultTemplate":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":155,"character":3}}]}],"showHint":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":160,"character":3}}]}],"placement":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":175,"character":3}}]}],"selectItem":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":182,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,null,null,null,null,null,null,null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":193,"character":72},"arguments":[{"__symbolic":"reference","module":"@angular/common","name":"DOCUMENT","line":193,"character":79}]}],null,null,null],"parameters":[{"__symbolic":"reference","name":"ElementRef","module":"@angular/core","arguments":[{"__symbolic":"error","message":"Could not resolve type","line":191,"character":38,"context":{"typeName":"HTMLInputElement"},"module":"./typeahead/typeahead"}]},{"__symbolic":"reference","module":"@angular/core","name":"ViewContainerRef","line":191,"character":84},{"__symbolic":"reference","module":"@angular/core","name":"Renderer2","line":192,"character":25},{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":192,"character":55},{"__symbolic":"reference","module":"@angular/core","name":"ComponentFactoryResolver","line":192,"character":91},{"__symbolic":"reference","name":"NgbTypeaheadConfig"},{"__symbolic":"reference","module":"@angular/core","name":"NgZone","line":193,"character":42},{"__symbolic":"reference","name":"ɵbc"},{"__symbolic":"reference","name":"any"},{"__symbolic":"reference","module":"@angular/core","name":"NgZone","line":193,"character":42},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":194,"character":56},{"__symbolic":"reference","module":"@angular/core","name":"ApplicationRef","line":194,"character":100}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"registerOnChange":[{"__symbolic":"method"}],"registerOnTouched":[{"__symbolic":"method"}],"writeValue":[{"__symbolic":"method"}],"setDisabledState":[{"__symbolic":"method"}],"dismissPopup":[{"__symbolic":"method"}],"isPopupOpen":[{"__symbolic":"method"}],"handleBlur":[{"__symbolic":"method"}],"handleKeyDown":[{"__symbolic":"method"}],"_openPopup":[{"__symbolic":"method"}],"_closePopup":[{"__symbolic":"method"}],"_selectResult":[{"__symbolic":"method"}],"_selectResultClosePopup":[{"__symbolic":"method"}],"_showHint":[{"__symbolic":"method"}],"_formatItemForInput":[{"__symbolic":"method"}],"_writeInputValue":[{"__symbolic":"method"}],"_subscribeToUserInput":[{"__symbolic":"method"}],"_unsubscribeFromUserInput":[{"__symbolic":"method"}]}},"NgbTypeaheadConfig":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":9,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{},"statics":{"ngInjectableDef":{}}},"NgbTypeaheadModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":12,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"NgbTypeahead"},{"__symbolic":"reference","name":"NgbHighlight"},{"__symbolic":"reference","name":"ɵt"}],"exports":[{"__symbolic":"reference","name":"NgbTypeahead"},{"__symbolic":"reference","name":"NgbHighlight"}],"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":15,"character":12}],"entryComponents":[{"__symbolic":"reference","name":"ɵt"}]}]}],"members":{}},"NgbTypeaheadSelectItemEvent":{"__symbolic":"interface"},"Placement":{"__symbolic":"interface"},"ɵu":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":23,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"NgbCalendar"},{"__symbolic":"reference","name":"NgbDatepickerI18n"}]}],"focus":[{"__symbolic":"method"}],"focusMove":[{"__symbolic":"method"}],"focusSelect":[{"__symbolic":"method"}],"open":[{"__symbolic":"method"}],"select":[{"__symbolic":"method"}],"toValidDate":[{"__symbolic":"method"}],"_nextState":[{"__symbolic":"method"}],"_patchContexts":[{"__symbolic":"method"}],"_updateState":[{"__symbolic":"method"}]}},"ɵv":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":6,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ɵu"},{"__symbolic":"reference","name":"NgbCalendar"}]}],"processKey":[{"__symbolic":"method"}]}},"ɵw":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":2,"character":1},"arguments":[{"selector":"ngb-modal-backdrop","template":"","host":{"[class]":"\"modal-backdrop fade show\" + (backdropClass ? \" \" + backdropClass : \"\")","style":"z-index: 1050","$quoted$":["[class]","style"]}}]}],"members":{"backdropClass":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":9,"character":3}}]}]}},"ɵx":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":17,"character":1},"arguments":[{"selector":"ngb-modal-window","host":{"[class]":"\"modal fade show d-block\" + (windowClass ? \" \" + windowClass : \"\")","role":"dialog","tabindex":"-1","(keyup.esc)":"escKey($event)","(click)":"backdropClick($event)","[attr.aria-modal]":"true","[attr.aria-labelledby]":"ariaLabelledBy","$quoted$":["[class]","role","tabindex","(keyup.esc)","(click)","[attr.aria-modal]","[attr.aria-labelledby]"]},"template":"\n
\n
\n
\n ","encapsulation":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewEncapsulation","line":34,"character":17},"member":"None"},"styles":["ngb-modal-window .component-host-scrollable{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;overflow:hidden}"]}]}],"members":{"ariaLabelledBy":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":41,"character":3}}]}],"backdrop":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":42,"character":3}}]}],"centered":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":43,"character":3}}]}],"keyboard":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":44,"character":3}}]}],"scrollable":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":45,"character":3}}]}],"size":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":46,"character":3}}]}],"windowClass":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":47,"character":3}}]}],"dismissEvent":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":49,"character":3},"arguments":["dismiss"]}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":51,"character":15},"arguments":[{"__symbolic":"reference","module":"@angular/common","name":"DOCUMENT","line":51,"character":22}]}],null],"parameters":[{"__symbolic":"reference","name":"any"},{"__symbolic":"reference","name":"ElementRef","module":"@angular/core","arguments":[{"__symbolic":"error","message":"Could not resolve type","line":51,"character":83,"context":{"typeName":"HTMLElement"},"module":"./modal/modal-window"}]}]}],"backdropClick":[{"__symbolic":"method"}],"escKey":[{"__symbolic":"method"}],"dismiss":[{"__symbolic":"method"}],"ngOnInit":[{"__symbolic":"method"}],"ngAfterViewInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}]}},"ɵy":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":22,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":33,"character":77},"arguments":[{"__symbolic":"reference","module":"@angular/common","name":"DOCUMENT","line":33,"character":84}]}],null,null],"parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ApplicationRef","line":33,"character":31},{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":33,"character":66},{"__symbolic":"reference","name":"any"},{"__symbolic":"reference","name":"ɵz"},{"__symbolic":"reference","module":"@angular/core","name":"RendererFactory2","line":34,"character":63}]}],"open":[{"__symbolic":"method"}],"dismissAll":[{"__symbolic":"method"}],"hasOpenModals":[{"__symbolic":"method"}],"_attachBackdrop":[{"__symbolic":"method"}],"_attachWindowComponent":[{"__symbolic":"method"}],"_applyWindowOptions":[{"__symbolic":"method"}],"_applyBackdropOptions":[{"__symbolic":"method"}],"_getContentRef":[{"__symbolic":"method"}],"_createFromTemplateRef":[{"__symbolic":"method"}],"_createFromString":[{"__symbolic":"method"}],"_createFromComponent":[{"__symbolic":"method"}],"_setAriaHidden":[{"__symbolic":"method"}],"_revertAriaHidden":[{"__symbolic":"method"}],"_registerModalRef":[{"__symbolic":"method"}],"_registerWindowCmpt":[{"__symbolic":"method"}]},"statics":{"ngInjectableDef":{}}},"ɵz":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":19,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":21,"character":15},"arguments":[{"__symbolic":"reference","module":"@angular/common","name":"DOCUMENT","line":21,"character":22}]}]],"parameters":[{"__symbolic":"reference","name":"any"}]}],"compensate":[{"__symbolic":"method"}],"_adjustBody":[{"__symbolic":"method"}],"_isPresent":[{"__symbolic":"method"}],"_getWidth":[{"__symbolic":"method"}]},"statics":{"ngInjectableDef":{}}},"ɵba":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":8,"character":35},"arguments":["live announcer delay",{"providedIn":"root","factory":{"__symbolic":"reference","name":"ɵbb"}}]},"ɵbb":{"__symbolic":"function","parameters":[],"value":100},"ɵbc":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":35,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":37,"character":15},"arguments":[{"__symbolic":"reference","module":"@angular/common","name":"DOCUMENT","line":37,"character":22}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":37,"character":57},"arguments":[{"__symbolic":"reference","name":"ɵba"}]}]],"parameters":[{"__symbolic":"reference","name":"any"},{"__symbolic":"reference","name":"any"}]}],"ngOnDestroy":[{"__symbolic":"method"}],"say":[{"__symbolic":"method"}]},"statics":{"ngInjectableDef":{}}},"ɵbd":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"NgbCalendar"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":5,"character":1}}],"members":{"getDaysPerMonth":[{"__symbolic":"method"}],"fromGregorian":[{"__symbolic":"method"}],"toGregorian":[{"__symbolic":"method"}],"getDaysPerWeek":[{"__symbolic":"method"}],"getMonths":[{"__symbolic":"method"}],"getWeeksPerMonth":[{"__symbolic":"method"}],"getNext":[{"__symbolic":"method"}],"getPrev":[{"__symbolic":"method"}],"getWeekday":[{"__symbolic":"method"}],"getWeekNumber":[{"__symbolic":"method"}],"getToday":[{"__symbolic":"method"}],"isValid":[{"__symbolic":"method"}],"_setDay":[{"__symbolic":"method"}],"_setMonth":[{"__symbolic":"method"}],"_setYear":[{"__symbolic":"method"}]}},"ɵbe":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","name":"any"}]},{"__symbolic":"reference","module":"@angular/core","name":"ViewRef","line":12,"character":52},{"__symbolic":"reference","name":"ComponentRef","module":"@angular/core","arguments":[{"__symbolic":"reference","name":"any"}]}]}]}}},"origins":{"NgbModule":"./index","NgbAccordion":"./accordion/accordion","NgbAccordionConfig":"./accordion/accordion-config","NgbAccordionModule":"./accordion/accordion.module","NgbPanel":"./accordion/accordion","NgbPanelChangeEvent":"./accordion/accordion","NgbPanelContent":"./accordion/accordion","NgbPanelHeader":"./accordion/accordion","NgbPanelHeaderContext":"./accordion/accordion","NgbPanelTitle":"./accordion/accordion","NgbPanelToggle":"./accordion/accordion","SbCard":"./card/card","SbCardConfig":"./card/card-config","SbCardModule":"./card/card.module","NgbAlert":"./alert/alert","NgbAlertConfig":"./alert/alert-config","NgbAlertModule":"./alert/alert.module","NgbButtonLabel":"./buttons/label","NgbButtonsModule":"./buttons/buttons.module","NgbCheckBox":"./buttons/checkbox","NgbRadio":"./buttons/radio","NgbRadioGroup":"./buttons/radio","ɵa":"./carousel/carousel","NgbCarousel":"./carousel/carousel","NgbCarouselConfig":"./carousel/carousel-config","NgbCarouselModule":"./carousel/carousel.module","NgbSlide":"./carousel/carousel","NgbSlideEvent":"./carousel/carousel","NgbSlideEventDirection":"./carousel/carousel","NgbSlideEventSource":"./carousel/carousel","NgbCollapse":"./collapse/collapse","NgbCollapseModule":"./collapse/collapse.module","ɵb":"./datepicker/ngb-calendar","ɵc":"./datepicker/datepicker-month-view","ɵd":"./datepicker/datepicker-day-view","ɵe":"./datepicker/datepicker-navigation","ɵf":"./datepicker/datepicker-navigation-select","ɵg":"./datepicker/datepicker-i18n","ɵh":"./datepicker/datepicker-i18n","ɵi":"./datepicker/adapters/ngb-date-adapter","ɵj":"./datepicker/adapters/ngb-date-adapter","ɵk":"./datepicker/ngb-date-parser-formatter","ɵl":"./datepicker/ngb-date-parser-formatter","NgbCalendar":"./datepicker/ngb-calendar","NgbCalendarGregorian":"./datepicker/ngb-calendar","NgbCalendarHebrew":"./datepicker/hebrew/ngb-calendar-hebrew","NgbCalendarIslamicCivil":"./datepicker/hijri/ngb-calendar-islamic-civil","NgbCalendarIslamicUmalqura":"./datepicker/hijri/ngb-calendar-islamic-umalqura","NgbCalendarPersian":"./datepicker/jalali/ngb-calendar-persian","NgbDate":"./datepicker/ngb-date","NgbDateAdapter":"./datepicker/adapters/ngb-date-adapter","NgbDateNativeAdapter":"./datepicker/adapters/ngb-date-native-adapter","NgbDateNativeUTCAdapter":"./datepicker/adapters/ngb-date-native-utc-adapter","NgbDateParserFormatter":"./datepicker/ngb-date-parser-formatter","NgbDatepicker":"./datepicker/datepicker","NgbDatepickerConfig":"./datepicker/datepicker-config","NgbDatepickerI18n":"./datepicker/datepicker-i18n","NgbDatepickerI18nHebrew":"./datepicker/hebrew/datepicker-i18n-hebrew","NgbDatepickerModule":"./datepicker/datepicker.module","NgbDatepickerNavigateEvent":"./datepicker/datepicker","NgbDateStruct":"./datepicker/ngb-date-struct","NgbInputDatepicker":"./datepicker/datepicker-input","NgbPeriod":"./datepicker/ngb-calendar","ɵm":"./dropdown/dropdown","NgbDropdown":"./dropdown/dropdown","NgbDropdownAnchor":"./dropdown/dropdown","NgbDropdownConfig":"./dropdown/dropdown-config","NgbDropdownItem":"./dropdown/dropdown","NgbDropdownMenu":"./dropdown/dropdown","NgbDropdownModule":"./dropdown/dropdown.module","NgbDropdownToggle":"./dropdown/dropdown","ModalDismissReasons":"./modal/modal-dismiss-reasons","NgbActiveModal":"./modal/modal-ref","NgbModal":"./modal/modal","NgbModalConfig":"./modal/modal-config","NgbModalModule":"./modal/modal.module","NgbModalOptions":"./modal/modal-config","NgbModalRef":"./modal/modal-ref","NgbPagination":"./pagination/pagination","NgbPaginationConfig":"./pagination/pagination-config","NgbPaginationEllipsis":"./pagination/pagination","NgbPaginationFirst":"./pagination/pagination","NgbPaginationLast":"./pagination/pagination","NgbPaginationModule":"./pagination/pagination.module","NgbPaginationNext":"./pagination/pagination","NgbPaginationNumber":"./pagination/pagination","NgbPaginationPrevious":"./pagination/pagination","ɵn":"./popover/popover","NgbPopover":"./popover/popover","NgbPopoverConfig":"./popover/popover-config","NgbPopoverModule":"./popover/popover.module","NgbProgressbar":"./progressbar/progressbar","NgbProgressbarConfig":"./progressbar/progressbar-config","NgbProgressbarModule":"./progressbar/progressbar.module","NgbRating":"./rating/rating","NgbRatingConfig":"./rating/rating-config","NgbRatingModule":"./rating/rating.module","NgbTab":"./tabset/tabset","NgbTabChangeEvent":"./tabset/tabset","NgbTabContent":"./tabset/tabset","NgbTabset":"./tabset/tabset","NgbTabsetConfig":"./tabset/tabset-config","NgbTabsetModule":"./tabset/tabset.module","NgbTabTitle":"./tabset/tabset","ɵo":"./timepicker/ngb-time-adapter","ɵp":"./timepicker/ngb-time-adapter","ɵq":"./timepicker/timepicker-i18n","ɵr":"./timepicker/timepicker-i18n","NgbTimeAdapter":"./timepicker/ngb-time-adapter","NgbTimepickerI18n":"./timepicker/timepicker-i18n","NgbTimepicker":"./timepicker/timepicker","NgbTimepickerConfig":"./timepicker/timepicker-config","NgbTimepickerModule":"./timepicker/timepicker.module","NgbTimeStruct":"./timepicker/ngb-time-struct","NgbToast":"./toast/toast","NgbToastConfig":"./toast/toast-config","NgbToastHeader":"./toast/toast","NgbToastModule":"./toast/toast.module","ɵs":"./tooltip/tooltip","NgbTooltip":"./tooltip/tooltip","NgbTooltipConfig":"./tooltip/tooltip-config","NgbTooltipModule":"./tooltip/tooltip.module","ɵt":"./typeahead/typeahead-window","NgbHighlight":"./typeahead/highlight","NgbTypeahead":"./typeahead/typeahead","NgbTypeaheadConfig":"./typeahead/typeahead-config","NgbTypeaheadModule":"./typeahead/typeahead.module","NgbTypeaheadSelectItemEvent":"./typeahead/typeahead","Placement":"./util/positioning","ɵu":"./datepicker/datepicker-service","ɵv":"./datepicker/datepicker-keymap-service","ɵw":"./modal/modal-backdrop","ɵx":"./modal/modal-window","ɵy":"./modal/modal-stack","ɵz":"./util/scrollbar","ɵba":"./util/accessibility/live","ɵbb":"./util/accessibility/live","ɵbc":"./util/accessibility/live","ɵbd":"./datepicker/hijri/ngb-calendar-hijri","ɵbe":"./util/popup"},"importAs":"@sunbird-ed/sunbird-ui-components"} \ No newline at end of file diff --git a/dist/sunbird-ui-components/tabset/tabset-config.d.ts b/dist/sunbird-ui-components/tabset/tabset-config.d.ts new file mode 100644 index 0000000..aa02baa --- /dev/null +++ b/dist/sunbird-ui-components/tabset/tabset-config.d.ts @@ -0,0 +1,11 @@ +/** + * A configuration service for the [`NgbTabset`](#/components/tabset/api#NgbTabset) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the tabsets used in the application. + */ +export declare class NgbTabsetConfig { + justify: 'start' | 'center' | 'end' | 'fill' | 'justified'; + orientation: 'horizontal' | 'vertical'; + type: 'tabs' | 'pills'; +} diff --git a/dist/sunbird-ui-components/tabset/tabset.d.ts b/dist/sunbird-ui-components/tabset/tabset.d.ts new file mode 100644 index 0000000..48841cf --- /dev/null +++ b/dist/sunbird-ui-components/tabset/tabset.d.ts @@ -0,0 +1,110 @@ +import { QueryList, TemplateRef, AfterContentChecked, EventEmitter } from '@angular/core'; +import { NgbTabsetConfig } from './tabset-config'; +/** + * A directive to wrap tab titles that need to contain HTML markup or other directives. + * + * Alternatively you could use the `NgbTab.title` input for string titles. + */ +export declare class NgbTabTitle { + templateRef: TemplateRef; + constructor(templateRef: TemplateRef); +} +/** + * A directive to wrap content to be displayed in a tab. + */ +export declare class NgbTabContent { + templateRef: TemplateRef; + constructor(templateRef: TemplateRef); +} +/** + * A directive representing an individual tab. + */ +export declare class NgbTab implements AfterContentChecked { + /** + * The tab identifier. + * + * Must be unique for the entire document for proper accessibility support. + */ + id: string; + /** + * The tab title. + * + * Use the [`NgbTabTitle`](#/components/tabset/api#NgbTabTitle) directive for non-string titles. + */ + title: string; + /** + * If `true`, the current tab is disabled and can't be toggled. + */ + disabled: boolean; + titleTpl: NgbTabTitle | null; + contentTpl: NgbTabContent | null; + titleTpls: QueryList; + contentTpls: QueryList; + ngAfterContentChecked(): void; +} +/** + * The payload of the change event fired right before the tab change. + */ +export interface NgbTabChangeEvent { + /** + * The id of the currently active tab. + */ + activeId: string; + /** + * The id of the newly selected tab. + */ + nextId: string; + /** + * Calling this function will prevent tab switching. + */ + preventDefault: () => void; +} +/** + * A component that makes it easy to create tabbed interface. + */ +export declare class NgbTabset implements AfterContentChecked { + justifyClass: string; + tabs: QueryList; + /** + * The identifier of the tab that should be opened **initially**. + * + * For subsequent tab switches use the `.select()` method and the `(tabChange)` event. + */ + activeId: string; + /** + * If `true`, non-visible tabs content will be removed from DOM. Otherwise it will just be hidden. + */ + destroyOnHide: boolean; + /** + * The horizontal alignment of the tabs with flexbox utilities. + */ + justify: 'start' | 'center' | 'end' | 'fill' | 'justified'; + /** + * The orientation of the tabset. + */ + orientation: 'horizontal' | 'vertical'; + /** + * Type of navigation to be used for tabs. + * + * Currently Bootstrap supports only `"tabs"` and `"pills"`. + * + * Since `3.0.0` can also be an arbitrary string (ex. for custom themes). + */ + type: 'tabs' | 'pills' | string; + /** + * A tab change event emitted right before the tab change happens. + * + * See [`NgbTabChangeEvent`](#/components/tabset/api#NgbTabChangeEvent) for payload details. + */ + tabChange: EventEmitter; + constructor(config: NgbTabsetConfig); + /** + * Selects the tab with the given id and shows its associated content panel. + * + * Any other tab that was previously selected becomes unselected and its associated pane is removed from DOM or + * hidden depending on the `destroyOnHide` value. + */ + select(tabId: string): void; + ngAfterContentChecked(): void; + private _getTabById; +} diff --git a/dist/sunbird-ui-components/tabset/tabset.module.d.ts b/dist/sunbird-ui-components/tabset/tabset.module.d.ts new file mode 100644 index 0000000..6b7756d --- /dev/null +++ b/dist/sunbird-ui-components/tabset/tabset.module.d.ts @@ -0,0 +1,4 @@ +export { NgbTabset, NgbTab, NgbTabContent, NgbTabTitle, NgbTabChangeEvent } from './tabset'; +export { NgbTabsetConfig } from './tabset-config'; +export declare class NgbTabsetModule { +} diff --git a/dist/sunbird-ui-components/test/typings/custom-jasmine.d.ts b/dist/sunbird-ui-components/test/typings/custom-jasmine.d.ts new file mode 100644 index 0000000..e0da4c8 --- /dev/null +++ b/dist/sunbird-ui-components/test/typings/custom-jasmine.d.ts @@ -0,0 +1,9 @@ +declare module jasmine { + interface Matchers { + toHaveToast(content?: string | string[]): boolean; + toHaveCssClass(expected: any): boolean; + toHaveModal(content?: string | string[], selector?: string): boolean; + toHaveBackdrop(): boolean; + toBeShown(): boolean; + } +} diff --git a/dist/sunbird-ui-components/timepicker/ngb-time-adapter.d.ts b/dist/sunbird-ui-components/timepicker/ngb-time-adapter.d.ts new file mode 100644 index 0000000..f0257ca --- /dev/null +++ b/dist/sunbird-ui-components/timepicker/ngb-time-adapter.d.ts @@ -0,0 +1,35 @@ +import { NgbTimeStruct } from './ngb-time-struct'; +export declare function NGB_DATEPICKER_TIME_ADAPTER_FACTORY(): NgbTimeStructAdapter; +/** + * An abstract service that does the conversion between the internal timepicker `NgbTimeStruct` model and + * any provided user time model `T`, ex. a string, a native date, etc. + * + * The adapter is used **only** for conversion when binding timepicker to a form control, + * ex. `[(ngModel)]="userTimeModel"`. Here `userTimeModel` can be of any type. + * + * The default timepicker implementation assumes we use `NgbTimeStruct` as a user model. + * + * See the [custom time adapter demo](#/components/timepicker/examples#adapter) for an example. + * + * @since 2.2.0 + */ +export declare abstract class NgbTimeAdapter { + /** + * Converts a user-model time of type `T` to an `NgbTimeStruct` for internal use. + */ + abstract fromModel(value: T): NgbTimeStruct; + /** + * Converts an internal `NgbTimeStruct` time to a user-model time of type `T`. + */ + abstract toModel(time: NgbTimeStruct): T; +} +export declare class NgbTimeStructAdapter extends NgbTimeAdapter { + /** + * Converts a NgbTimeStruct value into NgbTimeStruct value + */ + fromModel(time: NgbTimeStruct): NgbTimeStruct; + /** + * Converts a NgbTimeStruct value into NgbTimeStruct value + */ + toModel(time: NgbTimeStruct): NgbTimeStruct; +} diff --git a/dist/sunbird-ui-components/timepicker/ngb-time-struct.d.ts b/dist/sunbird-ui-components/timepicker/ngb-time-struct.d.ts new file mode 100644 index 0000000..f317d2a --- /dev/null +++ b/dist/sunbird-ui-components/timepicker/ngb-time-struct.d.ts @@ -0,0 +1,17 @@ +/** + * An interface for the time model used by the timepicker. + */ +export interface NgbTimeStruct { + /** + * The hour in the `[0, 23]` range. + */ + hour: number; + /** + * The minute in the `[0, 59]` range. + */ + minute: number; + /** + * The second in the `[0, 59]` range. + */ + second: number; +} diff --git a/dist/sunbird-ui-components/timepicker/ngb-time.d.ts b/dist/sunbird-ui-components/timepicker/ngb-time.d.ts new file mode 100644 index 0000000..9755d16 --- /dev/null +++ b/dist/sunbird-ui-components/timepicker/ngb-time.d.ts @@ -0,0 +1,14 @@ +export declare class NgbTime { + hour: number; + minute: number; + second: number; + constructor(hour?: number, minute?: number, second?: number); + changeHour(step?: number): void; + updateHour(hour: number): void; + changeMinute(step?: number): void; + updateMinute(minute: number): void; + changeSecond(step?: number): void; + updateSecond(second: number): void; + isValid(checkSecs?: boolean): boolean; + toString(): string; +} diff --git a/dist/sunbird-ui-components/timepicker/timepicker-config.d.ts b/dist/sunbird-ui-components/timepicker/timepicker-config.d.ts new file mode 100644 index 0000000..0b5a118 --- /dev/null +++ b/dist/sunbird-ui-components/timepicker/timepicker-config.d.ts @@ -0,0 +1,17 @@ +/** + * A configuration service for the [`NgbTimepicker`](#/components/timepicker/api#NgbTimepicker) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the timepickers used in the application. + */ +export declare class NgbTimepickerConfig { + meridian: boolean; + spinners: boolean; + seconds: boolean; + hourStep: number; + minuteStep: number; + secondStep: number; + disabled: boolean; + readonlyInputs: boolean; + size: 'small' | 'medium' | 'large'; +} diff --git a/dist/sunbird-ui-components/timepicker/timepicker-i18n.d.ts b/dist/sunbird-ui-components/timepicker/timepicker-i18n.d.ts new file mode 100644 index 0000000..5bca6b6 --- /dev/null +++ b/dist/sunbird-ui-components/timepicker/timepicker-i18n.d.ts @@ -0,0 +1,22 @@ +export declare function NGB_TIMEPICKER_I18N_FACTORY(locale: any): NgbTimepickerI18nDefault; +/** + * Type of the service supplying day periods (for example, 'AM' and 'PM') to NgbTimepicker component. + * The default implementation of this service honors the Angular locale, and uses the registered locale data, + * as explained in the Angular i18n guide. + */ +export declare abstract class NgbTimepickerI18n { + /** + * Returns the name for the period before midday. + */ + abstract getMorningPeriod(): string; + /** + * Returns the name for the period after midday. + */ + abstract getAfternoonPeriod(): string; +} +export declare class NgbTimepickerI18nDefault extends NgbTimepickerI18n { + private _periods; + constructor(locale: string); + getMorningPeriod(): string; + getAfternoonPeriod(): string; +} diff --git a/dist/sunbird-ui-components/timepicker/timepicker.d.ts b/dist/sunbird-ui-components/timepicker/timepicker.d.ts new file mode 100644 index 0000000..5369543 --- /dev/null +++ b/dist/sunbird-ui-components/timepicker/timepicker.d.ts @@ -0,0 +1,72 @@ +import { ChangeDetectorRef, OnChanges, SimpleChanges } from '@angular/core'; +import { ControlValueAccessor } from '@angular/forms'; +import { NgbTime } from './ngb-time'; +import { NgbTimepickerConfig } from './timepicker-config'; +import { NgbTimeAdapter } from './ngb-time-adapter'; +import { NgbTimepickerI18n } from './timepicker-i18n'; +/** + * A directive that helps with wth picking hours, minutes and seconds. + */ +export declare class NgbTimepicker implements ControlValueAccessor, OnChanges { + private readonly _config; + private _ngbTimeAdapter; + private _cd; + i18n: NgbTimepickerI18n; + disabled: boolean; + model: NgbTime; + private _hourStep; + private _minuteStep; + private _secondStep; + /** + * Whether to display 12H or 24H mode. + */ + meridian: boolean; + /** + * If `true`, the spinners above and below inputs are visible. + */ + spinners: boolean; + /** + * If `true`, it is possible to select seconds. + */ + seconds: boolean; + /** + * The number of hours to add/subtract when clicking hour spinners. + */ + hourStep: number; + /** + * The number of minutes to add/subtract when clicking minute spinners. + */ + minuteStep: number; + /** + * The number of seconds to add/subtract when clicking second spinners. + */ + secondStep: number; + /** + * If `true`, the timepicker is readonly and can't be changed. + */ + readonlyInputs: boolean; + /** + * The size of inputs and buttons. + */ + size: 'small' | 'medium' | 'large'; + constructor(_config: NgbTimepickerConfig, _ngbTimeAdapter: NgbTimeAdapter, _cd: ChangeDetectorRef, i18n: NgbTimepickerI18n); + onChange: (_: any) => void; + onTouched: () => void; + writeValue(value: any): void; + registerOnChange(fn: (value: any) => any): void; + registerOnTouched(fn: () => any): void; + setDisabledState(isDisabled: boolean): void; + changeHour(step: number): void; + changeMinute(step: number): void; + changeSecond(step: number): void; + updateHour(newVal: string): void; + updateMinute(newVal: string): void; + updateSecond(newVal: string): void; + toggleMeridian(): void; + formatHour(value: number): string; + formatMinSec(value: number): string; + readonly isSmallSize: boolean; + readonly isLargeSize: boolean; + ngOnChanges(changes: SimpleChanges): void; + private propagateModelChange; +} diff --git a/dist/sunbird-ui-components/timepicker/timepicker.module.d.ts b/dist/sunbird-ui-components/timepicker/timepicker.module.d.ts new file mode 100644 index 0000000..a316569 --- /dev/null +++ b/dist/sunbird-ui-components/timepicker/timepicker.module.d.ts @@ -0,0 +1,7 @@ +export { NgbTimepicker } from './timepicker'; +export { NgbTimepickerConfig } from './timepicker-config'; +export { NgbTimeStruct } from './ngb-time-struct'; +export { NgbTimeAdapter } from './ngb-time-adapter'; +export { NgbTimepickerI18n } from './timepicker-i18n'; +export declare class NgbTimepickerModule { +} diff --git a/dist/sunbird-ui-components/toast/toast-config.d.ts b/dist/sunbird-ui-components/toast/toast-config.d.ts new file mode 100644 index 0000000..ea480d1 --- /dev/null +++ b/dist/sunbird-ui-components/toast/toast-config.d.ts @@ -0,0 +1,36 @@ +/** + * Interface used to type all toast config options. See `NgbToastConfig`. + * + * @since 5.0.0 + */ +export interface NgbToastOptions { + /** + * Specify if the toast component should emit the `hide()` output + * after a certain `delay` in ms. + */ + autohide?: boolean; + /** + * Delay in ms after which the `hide()` output should be emitted. + */ + delay?: number; + /** + * Type of aria-live attribute to be used. + * + * Could be one of these 2 values (as string): + * - `polite` (default) + * - `alert` + */ + ariaLive?: 'polite' | 'alert'; +} +/** + * Configuration service for the NgbToast component. You can inject this service, typically in your root component, + * and customize the values of its properties in order to provide default values for all the toasts used in the + * application. + * + * @since 5.0.0 + */ +export declare class NgbToastConfig implements NgbToastOptions { + autohide: boolean; + delay: number; + ariaLive: 'polite' | 'alert'; +} diff --git a/dist/sunbird-ui-components/toast/toast.d.ts b/dist/sunbird-ui-components/toast/toast.d.ts new file mode 100644 index 0000000..b7c82cd --- /dev/null +++ b/dist/sunbird-ui-components/toast/toast.d.ts @@ -0,0 +1,56 @@ +import { AfterContentInit, EventEmitter, OnChanges, SimpleChanges, TemplateRef } from '@angular/core'; +import { NgbToastConfig } from './toast-config'; +/** + * This directive allows the usage of HTML markup or other directives + * inside of the toast's header. + * + * @since 5.0.0 + */ +export declare class NgbToastHeader { +} +/** + * Toasts provide feedback messages as notifications to the user. + * Goal is to mimic the push notifications available both on mobile and desktop operating systems. + * + * @since 5.0.0 + */ +export declare class NgbToast implements AfterContentInit, OnChanges { + ariaLive: string; + private _timeoutID; + /** + * Delay after which the toast will hide (ms). + * default: `500` (ms) (inherited from NgbToastConfig) + */ + delay: number; + /** + * Auto hide the toast after a delay in ms. + * default: `true` (inherited from NgbToastConfig) + */ + autohide: boolean; + /** + * Text to be used as toast's header. + * Ignored if a ContentChild template is specified at the same time. + */ + header: string; + /** + * A template like `` can be + * used in the projected content to allow markup usage. + */ + contentHeaderTpl: TemplateRef | null; + /** + * An event fired immediately when toast's `hide()` method has been called. + * It can only occur in 2 different scenarios: + * - `autohide` timeout fires + * - user clicks on a closing cross (×) + * + * Additionally this output is purely informative. The toast won't disappear. It's up to the user to take care of + * that. + */ + hideOutput: EventEmitter; + constructor(ariaLive: string, config: NgbToastConfig); + ngAfterContentInit(): void; + ngOnChanges(changes: SimpleChanges): void; + hide(): void; + private _init; + private _clearTimeout; +} diff --git a/dist/sunbird-ui-components/toast/toast.module.d.ts b/dist/sunbird-ui-components/toast/toast.module.d.ts new file mode 100644 index 0000000..90e5d3a --- /dev/null +++ b/dist/sunbird-ui-components/toast/toast.module.d.ts @@ -0,0 +1,4 @@ +export { NgbToast, NgbToastHeader } from './toast'; +export { NgbToastConfig, NgbToastOptions } from './toast-config'; +export declare class NgbToastModule { +} diff --git a/dist/sunbird-ui-components/tooltip/tooltip-config.d.ts b/dist/sunbird-ui-components/tooltip/tooltip-config.d.ts new file mode 100644 index 0000000..3e68215 --- /dev/null +++ b/dist/sunbird-ui-components/tooltip/tooltip-config.d.ts @@ -0,0 +1,17 @@ +import { PlacementArray } from '../util/positioning'; +/** + * A configuration service for the [`NgbTooltip`](#/components/tooltip/api#NgbTooltip) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the tooltips used in the application. + */ +export declare class NgbTooltipConfig { + autoClose: boolean | 'inside' | 'outside'; + placement: PlacementArray; + triggers: string; + container: string; + disableTooltip: boolean; + tooltipClass: string; + openDelay: number; + closeDelay: number; +} diff --git a/dist/sunbird-ui-components/tooltip/tooltip.d.ts b/dist/sunbird-ui-components/tooltip/tooltip.d.ts new file mode 100644 index 0000000..88ae2b7 --- /dev/null +++ b/dist/sunbird-ui-components/tooltip/tooltip.d.ts @@ -0,0 +1,127 @@ +import { EventEmitter, OnInit, OnDestroy, Injector, Renderer2, ElementRef, TemplateRef, ViewContainerRef, ComponentFactoryResolver, NgZone, ChangeDetectorRef, ApplicationRef } from '@angular/core'; +import { PlacementArray } from '../util/positioning'; +import { NgbTooltipConfig } from './tooltip-config'; +export declare class NgbTooltipWindow { + id: string; + tooltipClass: string; +} +/** + * A lightweight and extensible directive for fancy tooltip creation. + */ +export declare class NgbTooltip implements OnInit, OnDestroy { + private _elementRef; + private _renderer; + private _ngZone; + private _document; + private _changeDetector; + private _applicationRef; + /** + * Indicates whether the tooltip should be closed on `Escape` key and inside/outside clicks: + * + * * `true` - closes on both outside and inside clicks as well as `Escape` presses + * * `false` - disables the autoClose feature (NB: triggers still apply) + * * `"inside"` - closes on inside clicks as well as Escape presses + * * `"outside"` - closes on outside clicks (sometimes also achievable through triggers) + * as well as `Escape` presses + * + * @since 3.0.0 + */ + autoClose: boolean | 'inside' | 'outside'; + /** + * The preferred placement of the tooltip. + * + * Possible values are `"top"`, `"top-left"`, `"top-right"`, `"bottom"`, `"bottom-left"`, + * `"bottom-right"`, `"left"`, `"left-top"`, `"left-bottom"`, `"right"`, `"right-top"`, + * `"right-bottom"` + * + * Accepts an array of strings or a string with space separated possible values. + * + * The default order of preference is `"auto"` (same as the sequence above). + * + * Please see the [positioning overview](#/positioning) for more details. + */ + placement: PlacementArray; + /** + * Specifies events that should trigger the tooltip. + * + * Supports a space separated list of event names. + * For more details see the [triggers demo](#/components/tooltip/examples#triggers). + */ + triggers: string; + /** + * A selector specifying the element the tooltip should be appended to. + * + * Currently only supports `"body"`. + */ + container: string; + /** + * If `true`, tooltip is disabled and won't be displayed. + * + * @since 1.1.0 + */ + disableTooltip: boolean; + /** + * An optional class applied to the tooltip window element. + * + * @since 3.2.0 + */ + tooltipClass: string; + /** + * The opening delay in ms. Works only for "non-manual" opening triggers defined by the `triggers` input. + * + * @since 4.1.0 + */ + openDelay: number; + /** + * The closing delay in ms. Works only for "non-manual" opening triggers defined by the `triggers` input. + * + * @since 4.1.0 + */ + closeDelay: number; + /** + * An event emitted when the tooltip is shown. Contains no payload. + */ + shown: EventEmitter<{}>; + /** + * An event emitted when the popover is hidden. Contains no payload. + */ + hidden: EventEmitter<{}>; + private _ngbTooltip; + private _ngbTooltipWindowId; + private _popupService; + private _windowRef; + private _unregisterListenersFn; + private _zoneSubscription; + constructor(_elementRef: ElementRef, _renderer: Renderer2, injector: Injector, componentFactoryResolver: ComponentFactoryResolver, viewContainerRef: ViewContainerRef, config: NgbTooltipConfig, _ngZone: NgZone, _document: any, _changeDetector: ChangeDetectorRef, _applicationRef: ApplicationRef); + /** + * The string content or a `TemplateRef` for the content to be displayed in the tooltip. + * + * If the content if falsy, the tooltip won't open. + */ + ngbTooltip: string | TemplateRef; + /** + * Opens the tooltip. + * + * This is considered to be a "manual" triggering. + * The `context` is an optional value to be injected into the tooltip template when it is created. + */ + open(context?: any): void; + /** + * Closes the tooltip. + * + * This is considered to be a "manual" triggering of the tooltip. + */ + close(): void; + /** + * Toggles the tooltip. + * + * This is considered to be a "manual" triggering of the tooltip. + */ + toggle(): void; + /** + * Returns `true`, if the popover is currently shown. + */ + isOpen(): boolean; + ngOnInit(): void; + ngOnDestroy(): void; +} diff --git a/dist/sunbird-ui-components/tooltip/tooltip.module.d.ts b/dist/sunbird-ui-components/tooltip/tooltip.module.d.ts new file mode 100644 index 0000000..4eb84ae --- /dev/null +++ b/dist/sunbird-ui-components/tooltip/tooltip.module.d.ts @@ -0,0 +1,5 @@ +export { NgbTooltipConfig } from './tooltip-config'; +export { NgbTooltip } from './tooltip'; +export { Placement } from '../util/positioning'; +export declare class NgbTooltipModule { +} diff --git a/dist/sunbird-ui-components/typeahead/highlight.d.ts b/dist/sunbird-ui-components/typeahead/highlight.d.ts new file mode 100644 index 0000000..541ec20 --- /dev/null +++ b/dist/sunbird-ui-components/typeahead/highlight.d.ts @@ -0,0 +1,29 @@ +import { OnChanges, SimpleChanges } from '@angular/core'; +/** + * A component that helps with text highlighting. + * + * If splits the `result` text into parts that contain the searched `term` and generates the HTML markup to simplify + * highlighting: + * + * Ex. `result="Alaska"` and `term="as"` will produce `Alaska`. + */ +export declare class NgbHighlight implements OnChanges { + parts: string[]; + /** + * The CSS class for `` elements wrapping the `term` inside the `result`. + */ + highlightClass: string; + /** + * The text highlighting is added to. + * + * If the `term` is found inside this text, it will be highlighted. + * If the `term` contains array then all the items from it will be highlighted inside the text. + */ + result: string; + /** + * The term or array of terms to be highlighted. + * Since version `v4.2.0` term could be a `string[]` + */ + term: string | string[]; + ngOnChanges(changes: SimpleChanges): void; +} diff --git a/dist/sunbird-ui-components/typeahead/typeahead-config.d.ts b/dist/sunbird-ui-components/typeahead/typeahead-config.d.ts new file mode 100644 index 0000000..04329b5 --- /dev/null +++ b/dist/sunbird-ui-components/typeahead/typeahead-config.d.ts @@ -0,0 +1,14 @@ +import { PlacementArray } from '../util/positioning'; +/** + * A configuration service for the [`NgbTypeahead`](#/components/typeahead/api#NgbTypeahead) component. + * + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the typeaheads used in the application. + */ +export declare class NgbTypeaheadConfig { + container: any; + editable: boolean; + focusFirst: boolean; + showHint: boolean; + placement: PlacementArray; +} diff --git a/dist/sunbird-ui-components/typeahead/typeahead-window.d.ts b/dist/sunbird-ui-components/typeahead/typeahead-window.d.ts new file mode 100644 index 0000000..778edb8 --- /dev/null +++ b/dist/sunbird-ui-components/typeahead/typeahead-window.d.ts @@ -0,0 +1,58 @@ +import { EventEmitter, TemplateRef, OnInit } from '@angular/core'; +import { toString } from '../util/util'; +/** + * The context for the typeahead result template in case you want to override the default one. + */ +export interface ResultTemplateContext { + /** + * Your typeahead result item. + */ + result: any; + /** + * Search term from the `` used to get current result. + */ + term: string; +} +export declare class NgbTypeaheadWindow implements OnInit { + activeIdx: number; + /** + * The id for the typeahead window. The id should be unique and the same + * as the associated typeahead's id. + */ + id: string; + /** + * Flag indicating if the first row should be active initially + */ + focusFirst: boolean; + /** + * Typeahead match results to be displayed + */ + results: any; + /** + * Search term used to get current results + */ + term: string; + /** + * A function used to format a given result before display. This function should return a formatted string without any + * HTML markup + */ + formatter: typeof toString; + /** + * A template to override a matching result default display + */ + resultTemplate: TemplateRef; + /** + * Event raised when user selects a particular result row + */ + selectEvent: EventEmitter<{}>; + activeChangeEvent: EventEmitter<{}>; + hasActive(): boolean; + getActive(): any; + markActive(activeIdx: number): void; + next(): void; + prev(): void; + resetActive(): void; + select(item: any): void; + ngOnInit(): void; + private _activeChanged; +} diff --git a/dist/sunbird-ui-components/typeahead/typeahead.d.ts b/dist/sunbird-ui-components/typeahead/typeahead.d.ts new file mode 100644 index 0000000..f249165 --- /dev/null +++ b/dist/sunbird-ui-components/typeahead/typeahead.d.ts @@ -0,0 +1,153 @@ +import { ChangeDetectorRef, ComponentFactoryResolver, ElementRef, EventEmitter, Injector, NgZone, OnDestroy, OnInit, Renderer2, TemplateRef, ViewContainerRef, ApplicationRef } from '@angular/core'; +import { ControlValueAccessor } from '@angular/forms'; +import { Observable } from 'rxjs'; +import { Live } from '../util/accessibility/live'; +import { PlacementArray } from '../util/positioning'; +import { NgbTypeaheadConfig } from './typeahead-config'; +import { ResultTemplateContext } from './typeahead-window'; +/** + * An event emitted right before an item is selected from the result list. + */ +export interface NgbTypeaheadSelectItemEvent { + /** + * The item from the result list about to be selected. + */ + item: any; + /** + * Calling this function will prevent item selection from happening. + */ + preventDefault: () => void; +} +/** + * A directive providing a simple way of creating powerful typeaheads from any text input. + */ +export declare class NgbTypeahead implements ControlValueAccessor, OnInit, OnDestroy { + private _elementRef; + private _viewContainerRef; + private _renderer; + private _injector; + private _live; + private _document; + private _ngZone; + private _changeDetector; + private _applicationRef; + private _popupService; + private _subscription; + private _closed$; + private _inputValueBackup; + private _valueChanges; + private _resubscribeTypeahead; + private _windowRef; + private _zoneSubscription; + /** + * The value for the `autocomplete` attribute for the `` element. + * + * Defaults to `"off"` to disable the native browser autocomplete, but you can override it if necessary. + * + * @since 2.1.0 + */ + autocomplete: string; + /** + * A selector specifying the element the typeahead popup will be appended to. + * + * Currently only supports `"body"`. + */ + container: string; + /** + * If `true`, model values will not be restricted only to items selected from the popup. + */ + editable: boolean; + /** + * If `true`, the first item in the result list will always stay focused while typing. + */ + focusFirst: boolean; + /** + * The function that converts an item from the result list to a `string` to display in the `` field. + * + * It is called when the user selects something in the popup or the model value changes, so the input needs to + * be updated. + */ + inputFormatter: (item: any) => string; + /** + * The function that converts a stream of text values from the `` element to the stream of the array of items + * to display in the typeahead popup. + * + * If the resulting observable emits a non-empty array - the popup will be shown. If it emits an empty array - the + * popup will be closed. + * + * See the [basic example](#/components/typeahead/examples#basic) for more details. + * + * Note that the `this` argument is `undefined` so you need to explicitly bind it to a desired "this" target. + */ + ngbTypeahead: (text: Observable) => Observable; + /** + * The function that converts an item from the result list to a `string` to display in the popup. + * + * Must be provided, if your `ngbTypeahead` returns something other than `Observable`. + * + * Alternatively for more complex markup in the popup you should use `resultTemplate`. + */ + resultFormatter: (item: any) => string; + /** + * The template to override the way resulting items are displayed in the popup. + * + * See the [ResultTemplateContext](#/components/typeahead/api#ResultTemplateContext) for the template context. + * + * Also see the [template for results demo](#/components/typeahead/examples#template) for more details. + */ + resultTemplate: TemplateRef; + /** + * If `true`, will show the hint in the `` when an item in the result list matches. + */ + showHint: boolean; + /** + * The preferred placement of the typeahead. + * + * Possible values are `"top"`, `"top-left"`, `"top-right"`, `"bottom"`, `"bottom-left"`, + * `"bottom-right"`, `"left"`, `"left-top"`, `"left-bottom"`, `"right"`, `"right-top"`, + * `"right-bottom"` + * + * Accepts an array of strings or a string with space separated possible values. + * + * The default order of preference is `"bottom-left bottom-right top-left top-right"` + * + * Please see the [positioning overview](#/positioning) for more details. + */ + placement: PlacementArray; + /** + * An event emitted right before an item is selected from the result list. + * + * Event payload is of type [`NgbTypeaheadSelectItemEvent`](#/components/typeahead/api#NgbTypeaheadSelectItemEvent). + */ + selectItem: EventEmitter; + activeDescendant: string; + popupId: string; + private _onTouched; + private _onChange; + constructor(_elementRef: ElementRef, _viewContainerRef: ViewContainerRef, _renderer: Renderer2, _injector: Injector, componentFactoryResolver: ComponentFactoryResolver, config: NgbTypeaheadConfig, ngZone: NgZone, _live: Live, _document: any, _ngZone: NgZone, _changeDetector: ChangeDetectorRef, _applicationRef: ApplicationRef); + ngOnInit(): void; + ngOnDestroy(): void; + registerOnChange(fn: (value: any) => any): void; + registerOnTouched(fn: () => any): void; + writeValue(value: any): void; + setDisabledState(isDisabled: boolean): void; + /** + * Dismisses typeahead popup window + */ + dismissPopup(): void; + /** + * Returns true if the typeahead popup window is displayed + */ + isPopupOpen(): boolean; + handleBlur(): void; + handleKeyDown(event: KeyboardEvent): void; + private _openPopup; + private _closePopup; + private _selectResult; + private _selectResultClosePopup; + private _showHint; + private _formatItemForInput; + private _writeInputValue; + private _subscribeToUserInput; + private _unsubscribeFromUserInput; +} diff --git a/dist/sunbird-ui-components/typeahead/typeahead.module.d.ts b/dist/sunbird-ui-components/typeahead/typeahead.module.d.ts new file mode 100644 index 0000000..8174daa --- /dev/null +++ b/dist/sunbird-ui-components/typeahead/typeahead.module.d.ts @@ -0,0 +1,6 @@ +export { NgbHighlight } from './highlight'; +export { NgbTypeaheadWindow } from './typeahead-window'; +export { NgbTypeaheadConfig } from './typeahead-config'; +export { NgbTypeahead, NgbTypeaheadSelectItemEvent } from './typeahead'; +export declare class NgbTypeaheadModule { +} diff --git a/dist/sunbird-ui-components/util/accessibility/live.d.ts b/dist/sunbird-ui-components/util/accessibility/live.d.ts new file mode 100644 index 0000000..dfb4846 --- /dev/null +++ b/dist/sunbird-ui-components/util/accessibility/live.d.ts @@ -0,0 +1,11 @@ +import { InjectionToken, OnDestroy } from '@angular/core'; +export declare type ARIA_LIVE_DELAY_TYPE = number | null; +export declare const ARIA_LIVE_DELAY: InjectionToken; +export declare function ARIA_LIVE_DELAY_FACTORY(): number; +export declare class Live implements OnDestroy { + private _document; + private _delay; + constructor(_document: any, _delay: any); + ngOnDestroy(): void; + say(message: string): void; +} diff --git a/dist/sunbird-ui-components/util/autoclose.d.ts b/dist/sunbird-ui-components/util/autoclose.d.ts new file mode 100644 index 0000000..dc83762 --- /dev/null +++ b/dist/sunbird-ui-components/util/autoclose.d.ts @@ -0,0 +1,3 @@ +import { NgZone } from '@angular/core'; +import { Observable } from 'rxjs'; +export declare function ngbAutoClose(zone: NgZone, document: any, type: boolean | 'inside' | 'outside', close: () => void, closed$: Observable, insideElements: HTMLElement[], ignoreElements?: HTMLElement[], insideSelector?: string): void; diff --git a/dist/sunbird-ui-components/util/focus-trap.d.ts b/dist/sunbird-ui-components/util/focus-trap.d.ts new file mode 100644 index 0000000..6a30e96 --- /dev/null +++ b/dist/sunbird-ui-components/util/focus-trap.d.ts @@ -0,0 +1,17 @@ +import { Observable } from 'rxjs'; +/** + * Returns first and last focusable elements inside of a given element based on specific CSS selector + */ +export declare function getFocusableBoundaryElements(element: HTMLElement): HTMLElement[]; +/** + * Function that enforces browser focus to be trapped inside a DOM element. + * + * Works only for clicks inside the element and navigation with 'Tab', ignoring clicks outside of the element + * + * @param element The element around which focus will be trapped inside + * @param stopFocusTrap$ The observable stream. When completed the focus trap will clean up listeners + * and free internal resources + * @param refocusOnClick Put the focus back to the last focused element whenever a click occurs on element (default to + * false) + */ +export declare const ngbFocusTrap: (element: HTMLElement, stopFocusTrap$: Observable, refocusOnClick?: boolean) => void; diff --git a/dist/sunbird-ui-components/util/key.d.ts b/dist/sunbird-ui-components/util/key.d.ts new file mode 100644 index 0000000..db77e46 --- /dev/null +++ b/dist/sunbird-ui-components/util/key.d.ts @@ -0,0 +1,14 @@ +export declare enum Key { + Tab = 9, + Enter = 13, + Escape = 27, + Space = 32, + PageUp = 33, + PageDown = 34, + End = 35, + Home = 36, + ArrowLeft = 37, + ArrowUp = 38, + ArrowRight = 39, + ArrowDown = 40 +} diff --git a/dist/sunbird-ui-components/util/popup.d.ts b/dist/sunbird-ui-components/util/popup.d.ts new file mode 100644 index 0000000..ee1a4a8 --- /dev/null +++ b/dist/sunbird-ui-components/util/popup.d.ts @@ -0,0 +1,21 @@ +import { Injector, TemplateRef, ViewRef, ViewContainerRef, Renderer2, ComponentRef, ComponentFactoryResolver, ApplicationRef } from '@angular/core'; +export declare class ContentRef { + nodes: any[]; + viewRef?: ViewRef; + componentRef?: ComponentRef; + constructor(nodes: any[], viewRef?: ViewRef, componentRef?: ComponentRef); +} +export declare class PopupService { + private _type; + private _injector; + private _viewContainerRef; + private _renderer; + private _componentFactoryResolver; + private _applicationRef; + private _windowRef; + private _contentRef; + constructor(_type: any, _injector: Injector, _viewContainerRef: ViewContainerRef, _renderer: Renderer2, _componentFactoryResolver: ComponentFactoryResolver, _applicationRef: ApplicationRef); + open(content?: string | TemplateRef, context?: any): ComponentRef; + close(): void; + private _getContentRef; +} diff --git a/dist/sunbird-ui-components/util/positioning.d.ts b/dist/sunbird-ui-components/util/positioning.d.ts new file mode 100644 index 0000000..fd2604f --- /dev/null +++ b/dist/sunbird-ui-components/util/positioning.d.ts @@ -0,0 +1,12 @@ +export declare class Positioning { + private getAllStyles; + private getStyle; + private isStaticPositioned; + private offsetParent; + position(element: HTMLElement, round?: boolean): ClientRect; + offset(element: HTMLElement, round?: boolean): ClientRect; + positionElements(hostElement: HTMLElement, targetElement: HTMLElement, placement: string, appendToBody?: boolean): boolean; +} +export declare function positionElements(hostElement: HTMLElement, targetElement: HTMLElement, placement: string | Placement | PlacementArray, appendToBody?: boolean, baseClass?: string): Placement; +export declare type Placement = 'auto' | 'top' | 'bottom' | 'left' | 'right' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'left-top' | 'left-bottom' | 'right-top' | 'right-bottom'; +export declare type PlacementArray = Placement | Array | string; diff --git a/dist/sunbird-ui-components/util/scrollbar.d.ts b/dist/sunbird-ui-components/util/scrollbar.d.ts new file mode 100644 index 0000000..47ac4b9 --- /dev/null +++ b/dist/sunbird-ui-components/util/scrollbar.d.ts @@ -0,0 +1,38 @@ +/** Type for the callback used to revert the scrollbar compensation. */ +export declare type CompensationReverter = () => void; +/** + * Utility to handle the scrollbar. + * + * It allows to compensate the lack of a vertical scrollbar by adding an + * equivalent padding on the right of the body, and to remove this compensation. + */ +export declare class ScrollBar { + private _document; + constructor(_document: any); + /** + * Detects if a scrollbar is present and if yes, already compensates for its + * removal by adding an equivalent padding on the right of the body. + * + * @return a callback used to revert the compensation (noop if there was none, + * otherwise a function removing the padding) + */ + compensate(): CompensationReverter; + /** + * Adds a padding of the given width on the right of the body. + * + * @return a callback used to revert the padding to its previous value + */ + private _adjustBody; + /** + * Tells whether a scrollbar is currently present on the body. + * + * @return true if scrollbar is present, false otherwise + */ + private _isPresent; + /** + * Calculates and returns the width of a scrollbar. + * + * @return the width of a scrollbar on this page + */ + private _getWidth; +} diff --git a/dist/sunbird-ui-components/util/triggers.d.ts b/dist/sunbird-ui-components/util/triggers.d.ts new file mode 100644 index 0000000..a3891c3 --- /dev/null +++ b/dist/sunbird-ui-components/util/triggers.d.ts @@ -0,0 +1,14 @@ +import { Observable } from 'rxjs'; +export declare class Trigger { + open: string; + close?: string; + constructor(open: string, close?: string); + isManual(): boolean; +} +export declare function parseTriggers(triggers: string, aliases?: { + 'hover': string[]; + 'focus': string[]; +}): Trigger[]; +export declare function observeTriggers(renderer: any, nativeElement: any, triggers: Trigger[], isOpenedFn: () => boolean): Observable; +export declare function triggerDelay(openDelay: number, closeDelay: number, isOpenedFn: () => boolean): (input$: Observable) => Observable; +export declare function listenToTriggers(renderer: any, nativeElement: any, triggers: string, isOpenedFn: () => boolean, openFn: any, closeFn: any, openDelay?: number, closeDelay?: number): () => void; diff --git a/dist/sunbird-ui-components/util/util.d.ts b/dist/sunbird-ui-components/util/util.d.ts new file mode 100644 index 0000000..7f24ffb --- /dev/null +++ b/dist/sunbird-ui-components/util/util.d.ts @@ -0,0 +1,11 @@ +export declare function toInteger(value: any): number; +export declare function toString(value: any): string; +export declare function getValueInRange(value: number, max: number, min?: number): number; +export declare function isString(value: any): value is string; +export declare function isNumber(value: any): value is number; +export declare function isInteger(value: any): value is number; +export declare function isDefined(value: any): boolean; +export declare function padNumber(value: number): string; +export declare function regExpEscape(text: any): any; +export declare function hasClassName(element: any, className: string): boolean; +export declare function closest(element: HTMLElement, selector: any): HTMLElement; diff --git a/misc/api-doc-test-cases/class-with-doc.ts b/misc/api-doc-test-cases/class-with-doc.ts deleted file mode 100644 index 81bef56..0000000 --- a/misc/api-doc-test-cases/class-with-doc.ts +++ /dev/null @@ -1,22 +0,0 @@ -//a class with doc to extract - -/** - * This is a documented foo - */ -class DocumentedFoo { - /** - * the bar - */ - bar: string; - - /** - * A getter - */ - get componentInstance(): any { - } - - /** - * some method - */ - someMethod(): void {} -} diff --git a/misc/api-doc-test-cases/component-with-internal-methods.ts b/misc/api-doc-test-cases/component-with-internal-methods.ts deleted file mode 100644 index d009547..0000000 --- a/misc/api-doc-test-cases/component-with-internal-methods.ts +++ /dev/null @@ -1,31 +0,0 @@ -import {Component, Input, OnInit} from '@angular/core'; - -/** - * Foo doc - */ -@Component({ - selector: '[foo]', - template: '', - exportAs: 'foo' -}) -export class Foo implements OnInit { - @Input() buttonTxt; - - constructor() { - } - - /** - * Only used in a template - * - * @internal - */ - forTemplateOnly() { - console.log('I was clicked!'); - } - - ngOnInit() { - } - - private _dontSerialize() { - } -} diff --git a/misc/api-doc-test-cases/directives-no-in-out.ts b/misc/api-doc-test-cases/directives-no-in-out.ts deleted file mode 100644 index 3b94fb0..0000000 --- a/misc/api-doc-test-cases/directives-no-in-out.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {Component, Directive} from '@angular/core'; - -/** - * Foo doc - */ -@Directive({ - selector: '[foo]', - exportAs: 'foo' -}) -export class Foo { -} - -/** - * Bar doc - */ -@Component({ - selector: 'bar', - template: ` - bar - ` -}) -export class Bar { -} diff --git a/misc/api-doc-test-cases/directives-with-inputs-default-vals.ts b/misc/api-doc-test-cases/directives-with-inputs-default-vals.ts deleted file mode 100644 index 1e41faf..0000000 --- a/misc/api-doc-test-cases/directives-with-inputs-default-vals.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Directive, Input } from '@angular/core'; - -/** - * Foo doc - */ -@Directive({ - selector: '[foo]' -}) -export class Foo { - - @Input() fooBoolean = false; - @Input() fooNumber = 5; - @Input() fooString = 'bar'; -} diff --git a/misc/api-doc-test-cases/directives-with-inputs-types-to-infer.ts b/misc/api-doc-test-cases/directives-with-inputs-types-to-infer.ts deleted file mode 100644 index 4b5f223..0000000 --- a/misc/api-doc-test-cases/directives-with-inputs-types-to-infer.ts +++ /dev/null @@ -1,14 +0,0 @@ -import {Directive, Input} from '@angular/core'; - -/** - * Foo doc - */ -@Directive({ - selector: '[foo]' -}) -export class Foo { - - @Input() fooBoolean = false; - @Input() fooNumber = 5; - @Input() fooString = 'bar'; -} diff --git a/misc/api-doc-test-cases/directives-with-inputs.ts b/misc/api-doc-test-cases/directives-with-inputs.ts deleted file mode 100644 index f2d4beb..0000000 --- a/misc/api-doc-test-cases/directives-with-inputs.ts +++ /dev/null @@ -1,30 +0,0 @@ -import {Directive, Input} from '@angular/core'; - -/** - * Foo doc - */ -@Directive({ - selector: '[foo]' -}) -export class Foo { - - /** - * Has default value - */ - @Input() foo = 5; - - /** - * Bar doc - */ - @Input() bar: string; - - @Input() baz: string | boolean; - - notAnInput; - - set notAnInputEither(val) { - } - - regularMethod() { - } -} diff --git a/misc/api-doc-test-cases/directives-with-methods.ts b/misc/api-doc-test-cases/directives-with-methods.ts deleted file mode 100644 index 363eca6..0000000 --- a/misc/api-doc-test-cases/directives-with-methods.ts +++ /dev/null @@ -1,30 +0,0 @@ -import {Directive, Input, OnInit} from '@angular/core'; - -/** - * Foo doc - */ -@Directive({ - selector: '[foo]', - exportAs: 'foo' -}) -export class Foo implements OnInit { - @Input() notMethod; - - constructor() { - } - - /** - * Use this one to produce foo! - */ - fooMethod(arg1: string, arg2, arg3 = 1) { - } - - ngOnInit() { - } - - private _dontSerialize() { - } - - noCommentDontExtract() { - } -} diff --git a/misc/api-doc-test-cases/directives-with-outputs.ts b/misc/api-doc-test-cases/directives-with-outputs.ts deleted file mode 100644 index 3a564bc..0000000 --- a/misc/api-doc-test-cases/directives-with-outputs.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { Directive, EventEmitter, Output } from '@angular/core'; - -/** - * Foo doc - */ -@Directive({ - selector: '[foo]' -}) -export class Foo { - - /** - * Desc - */ - @Output() myEvent = new EventEmitter(); - - @Output('myMappedEvent') _myMappedEvent = new EventEmitter(); -} diff --git a/misc/api-doc-test-cases/directives-with-tricky-inputs.ts b/misc/api-doc-test-cases/directives-with-tricky-inputs.ts deleted file mode 100644 index 069155e..0000000 --- a/misc/api-doc-test-cases/directives-with-tricky-inputs.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {Directive, Input} from '@angular/core'; - -/** - * Foo doc - */ -@Directive({ - selector: '[foo]' -}) -export class Foo { - @Input('foo') _foo; - @Input() set bar(newVal) { - } - - @Input('baz') set _baz(newVal) { - } -} diff --git a/misc/api-doc-test-cases/interface-with-methods.ts b/misc/api-doc-test-cases/interface-with-methods.ts deleted file mode 100644 index 5b3f701..0000000 --- a/misc/api-doc-test-cases/interface-with-methods.ts +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Some interface - */ -export interface SomeInterface { - /** - * does something - */ - foo(): void; -} diff --git a/misc/api-doc-test-cases/interface-with-properties.ts b/misc/api-doc-test-cases/interface-with-properties.ts deleted file mode 100644 index 41b6d00..0000000 --- a/misc/api-doc-test-cases/interface-with-properties.ts +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Represent options available when opening new modal windows. - */ -export interface NgbModalOptions { - /** - * Weather a backdrop element should be created for a given modal (true by default). - * Alternatively, specify 'static' for a backdrop which doesn't close the modal on click. - */ - backdrop?: boolean | 'static'; - - /** - * Weather to close the modal when escape key is pressed (true by default). - */ - keyboard?: boolean; - - /** - * Size of a new modal window. - */ - size?: 'sm' | 'lg' | 'xl'; -} diff --git a/misc/api-doc-test-cases/no-docs.ts b/misc/api-doc-test-cases/no-docs.ts deleted file mode 100644 index a3a2aa4..0000000 --- a/misc/api-doc-test-cases/no-docs.ts +++ /dev/null @@ -1,7 +0,0 @@ -//some ts classes but no docs to extract - -class Foo { -} - -class Bar { -} diff --git a/misc/api-doc-test-cases/release-deprecation.ts b/misc/api-doc-test-cases/release-deprecation.ts deleted file mode 100644 index 651ca8d..0000000 --- a/misc/api-doc-test-cases/release-deprecation.ts +++ /dev/null @@ -1,73 +0,0 @@ -import {Component, Directive, Injectable, Input, Output} from '@angular/core'; - -/** - * Description - * - * @deprecated 2.0.0 description - */ -@Directive({ - selector: '[ngbDirective]' -}) -export class NgbDirective { - /** - * Description - * - * @deprecated 2.0.0 description - */ - @Input() input; - - /** - * Description - * - * @deprecated 2.0.0 description - */ - @Output() output; - - /** - * Description - * - * @deprecated 2.0.0 description - */ - property; - - /** - * Description - * - * @deprecated 2.0.0 description - */ - method() {} -} - -/** - * Description - * - * @deprecated 2.0.0 description - */ -@Component({ - selector: 'ngb-component' -}) -export class NgbComponent {} - - -/** - * Description - * - * @deprecated 2.0.0 description - */ -@Injectable() -export class NgbService {} - -/** - * Description - * - * @deprecated 2.0.0 description - */ -export class NgbClass {} - -/** - * Description - * - * @deprecated 2.0.0 description - */ -export interface NgbInterface { -} diff --git a/misc/api-doc-test-cases/release-features.ts b/misc/api-doc-test-cases/release-features.ts deleted file mode 100644 index 5913fda..0000000 --- a/misc/api-doc-test-cases/release-features.ts +++ /dev/null @@ -1,72 +0,0 @@ -import {Component, Directive, Injectable, Input, Output} from '@angular/core'; - -/** - * Description - * - * @since 2.0.0 - */ -@Directive({ - selector: '[ngbDirective]' -}) -export class NgbDirective { - /** - * Description - * - * @since 2.0.0 - */ - @Input() input; - - /** - * Description - * - * @since 2.0.0 - */ - @Output() output; - - /** - * Description - * - * @since 2.0.0 - */ - property; - - /** - * Description - * - * @since 2.0.0 - */ - method() {} -} - -/** - * Description - * - * @since 2.0.0 - */ -@Component({ - selector: 'ngb-component' -}) -export class NgbComponent {} - - -/** - * Description - * - * @since 2.0.0 - */ -@Injectable() -export class NgbService {} - -/** - * Description - * - * @since 2.0.0 - */ -export class NgbClass {} - -/** - * Description - * - * @since 2.0.0 - */ -export interface NgbInterface {} diff --git a/misc/api-doc-test-cases/services-with-methods.ts b/misc/api-doc-test-cases/services-with-methods.ts deleted file mode 100644 index 924007a..0000000 --- a/misc/api-doc-test-cases/services-with-methods.ts +++ /dev/null @@ -1,22 +0,0 @@ -import {Injectable, TemplateRef} from '@angular/core'; - -/** - * A service to open modals - */ -@Injectable() -export class ModalService { - - /** - * A method to open a modal - */ - open(content: string | TemplateRef, options = {}): Promise { - return Promise.resolve(); - } - - /** - * Checks if a modal is open - */ - isOpen(): boolean { - return false; - } -} diff --git a/misc/api-doc-test-cases/services-with-properties.ts b/misc/api-doc-test-cases/services-with-properties.ts deleted file mode 100644 index 911f416..0000000 --- a/misc/api-doc-test-cases/services-with-properties.ts +++ /dev/null @@ -1,27 +0,0 @@ -import {Injectable} from '@angular/core'; - -/** - * Service defining default values for progress bars - */ -@Injectable() -export class ProgressbarConfig { - - /** - * Maximal value to be displayed in the progressbar. - */ - max = 100; - - /** - * Voluntarily left without a default value. - */ - foo: string; - - private _dontExtract; - - /** - * @internal - */ - notForDocumentation; - - noDescriptionButStillExtract = 'sth'; -} diff --git a/misc/api-doc-test-cases/type-parameters.ts b/misc/api-doc-test-cases/type-parameters.ts deleted file mode 100644 index 27f566e..0000000 --- a/misc/api-doc-test-cases/type-parameters.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Component, Injectable } from '@angular/core'; - -/** - * Component doc - */ -@Component({}) -export class NoParameterComponent {} - -/** - * Component doc - */ -@Component({}) -export class ParameterComponent {} - -/** - * Interface doc - */ -@Injectable() -export interface NoParameterInterface {} - -/** - * Interface doc - */ -@Injectable() -export interface ParameterInterface {} - -/** - * Service doc - */ -@Injectable() -export class NoParameterService {} - -/** - * Service doc - */ -@Injectable() -export class ParameterService {} diff --git a/misc/api-doc-test-cases/types.ts b/misc/api-doc-test-cases/types.ts deleted file mode 100644 index 82b25c0..0000000 --- a/misc/api-doc-test-cases/types.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { Component, Directive, Injectable } from '@angular/core'; - -/** - * Should be 'Directive' - */ -@Directive({ - selector: '[ngbDirective]' -}) -export class NgbDirective {} - -/** - * Should be 'Component' - */ -@Component({ - selector: 'ngb-component' -}) -export class NgbComponent {} - - -/** - * Should be 'Service' - */ -@Injectable() -export class NgbService {} - -/** - * Should be 'Class' - */ -export class NgbClass {} - -/** - * Should be 'Interface' - */ -export interface NgbInterface {} diff --git a/misc/generate-docs.ts b/misc/generate-docs.ts deleted file mode 100644 index 41452f5..0000000 --- a/misc/generate-docs.ts +++ /dev/null @@ -1,16 +0,0 @@ -import * as glob from 'glob'; -import {ensureFileSync, writeFileSync} from 'fs-extra'; -import {parseOutApiDocs} from './api-doc'; - -/** - * Extracts documentation from all ng-bootstrap sources to a single TS file - * used by the demo application - */ - -const file = 'demo/src/api-docs.ts'; -const fileNames = glob.sync('src/**/*.ts', {ignore: ['src/**/*.spec.ts', 'src/util/**']}); - -const json = JSON.stringify(parseOutApiDocs(fileNames), null, 2); - -ensureFileSync(file); -writeFileSync(file, `const API_DOCS = ${json};\n\nexport default API_DOCS;`); diff --git a/misc/generate-stackblitzes.ts b/misc/generate-stackblitzes.ts deleted file mode 100644 index 57db1ad..0000000 --- a/misc/generate-stackblitzes.ts +++ /dev/null @@ -1,114 +0,0 @@ -import * as ejs from 'ejs'; -import * as fs from 'fs-extra'; -import * as glob from 'glob'; -import * as path from 'path'; - -import {parseDemo} from './parse-demo'; - - -const stackblitzUrl = 'https://stackblitz.com/run'; -const packageJson = fs.readJsonSync('package.json'); - -const versions = { - ngBootstrap: fs.readJsonSync('src/package.json').version, - angular: getVersion('@angular/core'), - typescript: getVersion('typescript'), - rxjs: getVersion('rxjs'), - zoneJs: getVersion('zone.js'), - coreJs: getVersion('core-js'), - bootstrap: getVersion('bootstrap'), - prismjs: getVersion('prismjs') -}; - -function capitalize(string) { - return string.charAt(0).toUpperCase() + string.slice(1); -} - -function fileContent(...parts: string[]) { - return fs.readFileSync(path.join(...parts)).toString(); -} - -function getVersion(name) { - const value = packageJson.dependencies[name] || packageJson.devDependencies[name]; - if (!value) { - throw `couldn't find version for ${name} in package.json`; - } - return value; -} - -/** - * Generates StackBlitzes for all demos of all components and puts - * resulting html files to the public folder of the demo application - */ - -const indexFile = ejs.compile(fileContent('misc', 'stackblitzes-templates', 'index.html.ejs')); -const mainFile = ejs.compile(fileContent('misc', 'stackblitzes-templates', 'main.ts.ejs')); -const stackblitzFile = ejs.compile(fileContent('misc', 'stackblitzes-templates', 'stackblitz.html.ejs')); - -const base = path.join('demo', 'src', 'public', 'stackblitzes'); -const root = path.join('demo', 'src', 'app', 'components'); - -const initialData = { - stackblitzUrl, - versions, - dependencies: JSON.stringify({ - '@angular/core': versions.angular, - '@angular/common': versions.angular, - '@angular/compiler': versions.angular, - '@angular/platform-browser': versions.angular, - '@angular/platform-browser-dynamic': versions.angular, - '@angular/router': versions.angular, - '@angular/forms': versions.angular, - '@ng-bootstrap/ng-bootstrap': versions.ngBootstrap, - 'core-js': versions.coreJs, - 'rxjs': versions.rxjs, - 'zone.js': versions.zoneJs, - }), - tags: ['angular', 'bootstrap', 'ng-bootstrap'], - styles: fileContent('demo', 'src', 'style', 'demos.css'), - files: [{name: 'polyfills.ts', source: fileContent('misc', 'stackblitzes-templates', 'polyfills.ts')}] -}; - -// removing folder -fs.ensureDirSync(base); -fs.emptyDirSync(base); - -// Getting demo modules metadata -const modulesInfo = parseDemo(path.join(root, '**', 'demos', '*', '*.ts')); - -// re-creating all stackblitzes -for (const demoModule of modulesInfo.keys()) { - const demoFolder = path.normalize(path.dirname(demoModule)); - const demoFiles = glob.sync(path.join(demoFolder, '*'), {}); - const[, componentName, , demoName] = demoFolder.replace(root, '').split(path.sep); - const modulePath = path.basename(demoModule, '.ts'); - const moduleInfo = modulesInfo.get(demoModule); - - const destinationFolder = path.join(base, componentName, demoName); - - const stackblitzData = { - ...initialData, - componentName, - demoName, - ...moduleInfo, - modulePath: `./app/${modulePath}`, - title: `ng-bootstrap - ${capitalize(componentName)} - ${capitalize(demoName)}`, - tags: [...initialData.tags], - files: [...initialData.files], - openFile: `app/${moduleInfo.bootstrap.fileName}` - }; - - stackblitzData.tags.push(componentName); - - stackblitzData.files.push({name: 'index.html', source: indexFile(stackblitzData)}); - stackblitzData.files.push({name: 'main.ts', source: mainFile(stackblitzData)}); - for (const file of demoFiles) { - const destFile = path.basename(file); - stackblitzData.files.push({name: `app/${destFile}`, source: fs.readFileSync(file).toString()}); - } - - fs.ensureDirSync(destinationFolder); - fs.writeFileSync(path.join(destinationFolder, 'stackblitz.html'), stackblitzFile(stackblitzData)); -} - -console.log(`generated ${modulesInfo.size} stackblitze(s) from demo sources.`); diff --git a/misc/parse-demo-test-cases/multiple/one/test.component.ts b/misc/parse-demo-test-cases/multiple/one/test.component.ts deleted file mode 100644 index 1f2dc3f..0000000 --- a/misc/parse-demo-test-cases/multiple/one/test.component.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {Component} from '@angular/core'; - -@Component({ - selector: 'test-component1', - template: '' -}) -export class TestComponent1 { -} diff --git a/misc/parse-demo-test-cases/multiple/one/test.module.ts b/misc/parse-demo-test-cases/multiple/one/test.module.ts deleted file mode 100644 index b28453d..0000000 --- a/misc/parse-demo-test-cases/multiple/one/test.module.ts +++ /dev/null @@ -1,10 +0,0 @@ -import {NgModule} from '@angular/core'; - -import {TestComponent1} from './test.component'; - -@NgModule({ - declarations: [TestComponent1], - bootstrap: [TestComponent1] -}) -export class TestModule1 { -} diff --git a/misc/parse-demo-test-cases/multiple/two/test.component.ts b/misc/parse-demo-test-cases/multiple/two/test.component.ts deleted file mode 100644 index 0790196..0000000 --- a/misc/parse-demo-test-cases/multiple/two/test.component.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {Component} from '@angular/core'; - -@Component({ - selector: 'test-component2', - template: '' -}) -export class TestComponent2 { -} diff --git a/misc/parse-demo-test-cases/multiple/two/test.module.ts b/misc/parse-demo-test-cases/multiple/two/test.module.ts deleted file mode 100644 index 0d5e572..0000000 --- a/misc/parse-demo-test-cases/multiple/two/test.module.ts +++ /dev/null @@ -1,10 +0,0 @@ -import {NgModule} from '@angular/core'; - -import {TestComponent2} from './test.component'; - -@NgModule({ - declarations: [TestComponent2], - bootstrap: [TestComponent2] -}) -export class TestModule2 { -} diff --git a/misc/parse-demo-test-cases/no-bootstrap-component/test.component.ts b/misc/parse-demo-test-cases/no-bootstrap-component/test.component.ts deleted file mode 100644 index 13758bf..0000000 --- a/misc/parse-demo-test-cases/no-bootstrap-component/test.component.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {Component} from '@angular/core'; - -@Component({ - selector: 'test-component', - template: '' -}) -export class TestComponent { -} diff --git a/misc/parse-demo-test-cases/no-bootstrap-component/test.module.ts b/misc/parse-demo-test-cases/no-bootstrap-component/test.module.ts deleted file mode 100644 index 187e0e4..0000000 --- a/misc/parse-demo-test-cases/no-bootstrap-component/test.module.ts +++ /dev/null @@ -1,9 +0,0 @@ -import {NgModule} from '@angular/core'; - -import {TestComponent} from './test.component'; - -@NgModule({ - declarations: [TestComponent] -}) -export class TestModule { -} diff --git a/misc/parse-demo-test-cases/no-component-selector/test.component.ts b/misc/parse-demo-test-cases/no-component-selector/test.component.ts deleted file mode 100644 index 101b738..0000000 --- a/misc/parse-demo-test-cases/no-component-selector/test.component.ts +++ /dev/null @@ -1,7 +0,0 @@ -import {Component} from '@angular/core'; - -@Component({ - template: '' -}) -export class TestComponent { -} diff --git a/misc/parse-demo-test-cases/no-component-selector/test.module.ts b/misc/parse-demo-test-cases/no-component-selector/test.module.ts deleted file mode 100644 index 45c45d0..0000000 --- a/misc/parse-demo-test-cases/no-component-selector/test.module.ts +++ /dev/null @@ -1,10 +0,0 @@ -import {NgModule} from '@angular/core'; - -import {TestComponent} from './test.component'; - -@NgModule({ - declarations: [TestComponent], - bootstrap: [TestComponent] -}) -export class TestModule { -} diff --git a/misc/parse-demo-test-cases/no-module/test.component.ts b/misc/parse-demo-test-cases/no-module/test.component.ts deleted file mode 100644 index 13758bf..0000000 --- a/misc/parse-demo-test-cases/no-module/test.component.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {Component} from '@angular/core'; - -@Component({ - selector: 'test-component', - template: '' -}) -export class TestComponent { -} diff --git a/misc/parse-demo-test-cases/oneliner/test.component.ts b/misc/parse-demo-test-cases/oneliner/test.component.ts deleted file mode 100644 index bc580a9..0000000 --- a/misc/parse-demo-test-cases/oneliner/test.component.ts +++ /dev/null @@ -1,9 +0,0 @@ -import {Component} from '@angular/core'; - -@Component({ - selector: - 'test-component', - template: '' -}) -export class TestComponent { -} diff --git a/misc/parse-demo-test-cases/oneliner/test.module.ts b/misc/parse-demo-test-cases/oneliner/test.module.ts deleted file mode 100644 index 1aee50a..0000000 --- a/misc/parse-demo-test-cases/oneliner/test.module.ts +++ /dev/null @@ -1,9 +0,0 @@ -import {NgModule} from '@angular/core'; - -import {TestComponent} from './test.component'; - -@NgModule({ - declarations: [TestComponent], bootstrap:[TestComponent] -}) -export class TestModule { -} diff --git a/misc/parse-demo-test-cases/simple/test.component.ts b/misc/parse-demo-test-cases/simple/test.component.ts deleted file mode 100644 index 13758bf..0000000 --- a/misc/parse-demo-test-cases/simple/test.component.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {Component} from '@angular/core'; - -@Component({ - selector: 'test-component', - template: '' -}) -export class TestComponent { -} diff --git a/misc/parse-demo-test-cases/simple/test.module.ts b/misc/parse-demo-test-cases/simple/test.module.ts deleted file mode 100644 index 45c45d0..0000000 --- a/misc/parse-demo-test-cases/simple/test.module.ts +++ /dev/null @@ -1,10 +0,0 @@ -import {NgModule} from '@angular/core'; - -import {TestComponent} from './test.component'; - -@NgModule({ - declarations: [TestComponent], - bootstrap: [TestComponent] -}) -export class TestModule { -} diff --git a/misc/parse-demo-test-cases/syntax/test.component.ts b/misc/parse-demo-test-cases/syntax/test.component.ts deleted file mode 100644 index bc580a9..0000000 --- a/misc/parse-demo-test-cases/syntax/test.component.ts +++ /dev/null @@ -1,9 +0,0 @@ -import {Component} from '@angular/core'; - -@Component({ - selector: - 'test-component', - template: '' -}) -export class TestComponent { -} diff --git a/misc/parse-demo-test-cases/syntax/test.module.ts b/misc/parse-demo-test-cases/syntax/test.module.ts deleted file mode 100644 index 8ef4af5..0000000 --- a/misc/parse-demo-test-cases/syntax/test.module.ts +++ /dev/null @@ -1,13 +0,0 @@ -import {NgModule} from '@angular/core'; - -import {TestComponent} from './test.component'; - -@NgModule({ - declarations: [TestComponent], - bootstrap: - [ - TestComponent, - ] -}) -export class TestModule { -} diff --git a/misc/parse-demo.spec.ts b/misc/parse-demo.spec.ts deleted file mode 100644 index 4f23cba..0000000 --- a/misc/parse-demo.spec.ts +++ /dev/null @@ -1,56 +0,0 @@ -import {parseDemo} from './parse-demo'; - -describe(`Parse demo for StackBlitz`, () => { - - it('should extract a module name and a component selector', () => { - expect(parseDemo('./misc/parse-demo-test-cases/simple/**/*.ts')).toEqual(new Map([[ - 'misc/parse-demo-test-cases/simple/test.module.ts', - {bootstrap: {selector: 'test-component', fileName: 'test.component.ts'}, moduleClassName: 'TestModule'} - ]])); - }); - - it('should extract multiple module names and component selectors', () => { - expect(parseDemo('./misc/parse-demo-test-cases/multiple/**/*.ts')).toEqual(new Map([ - [ - 'misc/parse-demo-test-cases/multiple/one/test.module.ts', - {bootstrap: {selector: 'test-component1', fileName: 'test.component.ts'}, moduleClassName: 'TestModule1'} - ], - [ - 'misc/parse-demo-test-cases/multiple/two/test.module.ts', - {bootstrap: {selector: 'test-component2', fileName: 'test.component.ts'}, moduleClassName: 'TestModule2'} - ] - ])); - }); - - it('should extract module name and component selector (strange formatting)', () => { - expect(parseDemo('./misc/parse-demo-test-cases/syntax/**/*.ts')).toEqual(new Map([[ - 'misc/parse-demo-test-cases/syntax/test.module.ts', - {bootstrap: {selector: 'test-component', fileName: 'test.component.ts'}, moduleClassName: 'TestModule'} - ]])); - }); - - it('should extract module name and component selector (oneliner definition)', () => { - expect(parseDemo('./misc/parse-demo-test-cases/oneliner/**/*.ts')).toEqual(new Map([[ - 'misc/parse-demo-test-cases/oneliner/test.module.ts', - {bootstrap: {selector: 'test-component', fileName: 'test.component.ts'}, moduleClassName: 'TestModule'} - ]])); - }); - - it('should fail if there is no module', () => { - expect(() => { - parseDemo('./misc/parse-demo-test-cases/no-module/**/*.ts'); - }).toThrowError(`Couldn't find any NgModules in ./misc/parse-demo-test-cases/no-module/**/*.ts`); - }); - - it('should fail if there is no bootstrap component', () => { - expect(() => { parseDemo('./misc/parse-demo-test-cases/no-bootstrap-component/**/*.ts'); }) - .toThrowError( - `Couldn't find any bootstrap components in TestModule in misc/parse-demo-test-cases/no-bootstrap-component/test.module.ts`); - }); - - it('should fail if there is no bootstrap component selector', () => { - expect(() => { - parseDemo('./misc/parse-demo-test-cases/no-component-selector/**/*.ts'); - }).toThrowError(`Couldn't get bootstrap component metadata for component TestComponent`); - }); -}); diff --git a/misc/parse-demo.ts b/misc/parse-demo.ts deleted file mode 100644 index f6fdd01..0000000 --- a/misc/parse-demo.ts +++ /dev/null @@ -1,86 +0,0 @@ -import * as glob from 'glob'; -import * as path from 'path'; -import * as ts from 'typescript'; - -const BOOTSTRAP_REGEX = new RegExp(/bootstrap:[\s]*\[[\s]*(.*?)[\s,]*]/m); -const SELECTOR_REGEX = new RegExp(/selector:[\s]*['"`]([^'"`]*)['"`]/m); - -export interface ComponentMetadata { - className?: string; - fileName: string; - selector: string; -} - -export interface DemoMetadata { - bootstrap: ComponentMetadata; - moduleClassName: string; -} - -/** - * For a given glob path extracts a map with module filenames as keys and as values: - * - class name of the demo module - * - the component selector of the `MyComponent` in `bootstrap: [MyComponent]` - */ -export function parseDemo(globPath: string): Map { - const components = new Map(); - const modules = new Map(); - - function processFile(sourceFile: ts.SourceFile) { - parseNode(sourceFile); - - function parseNode(node: ts.Node) { - switch (node.kind) { - case ts.SyntaxKind.Decorator: - const decorator = node; - - if (decorator.parent && decorator.parent.kind === ts.SyntaxKind.ClassDeclaration) { - const className = (decorator.parent).name.getText(sourceFile); - const textDecorator = decorator.getText(sourceFile); - - if (textDecorator.startsWith('@NgModule')) { - const matches = BOOTSTRAP_REGEX.exec(textDecorator); - if (matches) { - modules.set( - sourceFile.fileName, - {moduleClassName: className, bootstrap: {selector: '', fileName: '', className: matches[1]}}); - } else { - throw new Error(`Couldn't find any bootstrap components in ${className} in ${sourceFile.fileName}`); - } - } - - if (textDecorator.startsWith('@Component')) { - const matches = SELECTOR_REGEX.exec(textDecorator); - if (matches) { - components.set(className, {selector: matches[1], fileName: path.basename(sourceFile.fileName)}); - } - } - } - } - - ts.forEachChild(node, parseNode); - } - } - - // start - const files = glob.sync(globPath); - const program = ts.createProgram(files, {}); - program.getTypeChecker(); - files.forEach(file => processFile(program.getSourceFile(file))); - - // checks - if (modules.size === 0) { - throw new Error(`Couldn't find any NgModules in ${globPath}`); - } - - // replacing temporary component types with their selectors - modules.forEach(metadata => { - const bootstrapComponent = metadata.bootstrap.className; - const bootstrapMetadata = components.get(bootstrapComponent); - if (!bootstrapMetadata) { - throw new Error(`Couldn't get bootstrap component metadata for component ${bootstrapComponent}`); - } - metadata.bootstrap = bootstrapMetadata; - }); - - return modules; -} diff --git a/misc/stackblitzes-templates/index.html.ejs b/misc/stackblitzes-templates/index.html.ejs deleted file mode 100644 index 707ea8b..0000000 --- a/misc/stackblitzes-templates/index.html.ejs +++ /dev/null @@ -1,30 +0,0 @@ - - - - - ng-bootstrap <%=componentName%> demo - <%=demoName%> - - - - - - -
- -
- -

- This is a demo example forked from the ng-bootstrap project: Angular powered Bootstrap. - Visit https://ng-bootstrap.github.io for more - widgets and demos. -

- -
- <<%=bootstrap.selector%>>> -
- - - diff --git a/misc/stackblitzes-templates/main.ts.ejs b/misc/stackblitzes-templates/main.ts.ejs deleted file mode 100644 index c83a23d..0000000 --- a/misc/stackblitzes-templates/main.ts.ejs +++ /dev/null @@ -1,18 +0,0 @@ -import './polyfills'; - -import {platformBrowserDynamic} from '@angular/platform-browser-dynamic'; - -import {<%=moduleClassName%>} from '<%=modulePath%>'; - -platformBrowserDynamic() - .bootstrapModule(<%=moduleClassName%>) - .then(ref => { - // Ensure Angular destroys itself on hot reloads. - if (window['ngRef']) { - window['ngRef'].destroy(); - } - window['ngRef'] = ref; - - // Otherwise, log the boot error - }) - .catch(err => console.error(err)); diff --git a/misc/stackblitzes-templates/polyfills.ts b/misc/stackblitzes-templates/polyfills.ts deleted file mode 100644 index 907b0c7..0000000 --- a/misc/stackblitzes-templates/polyfills.ts +++ /dev/null @@ -1,67 +0,0 @@ -/** - * This file includes polyfills needed by Angular and is loaded before the app. - * You can add your own extra polyfills to this file. - * - * This file is divided into 2 sections: - * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. - * 2. Application imports. Files imported after ZoneJS that should be loaded before your main - * file. - * - * The current setup is for so-called "evergreen" browsers; the last versions of browsers that - * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera), - * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile. - * - * Learn more in https://angular.io/docs/ts/latest/guide/browser-support.html - */ - -/*************************************************************************************************** - * BROWSER POLYFILLS - */ - -/** IE9, IE10 and IE11 requires all of the following polyfills. **/ -// import 'core-js/es6/symbol'; -// import 'core-js/es6/object'; -// import 'core-js/es6/function'; -// import 'core-js/es6/parse-int'; -// import 'core-js/es6/parse-float'; -// import 'core-js/es6/number'; -// import 'core-js/es6/math'; -// import 'core-js/es6/string'; -// import 'core-js/es6/date'; -// import 'core-js/es6/array'; -// import 'core-js/es6/regexp'; -// import 'core-js/es6/map'; -// import 'core-js/es6/set'; - -/** IE10 and IE11 requires the following for NgClass support on SVG elements */ -// import 'classlist.js'; // Run `npm install --save classlist.js`. - -/** IE10 and IE11 requires the following to support `@angular/animation`. */ -// import 'web-animations-js'; // Run `npm install --save web-animations-js`. - - -/** Evergreen browsers require these. **/ -import 'core-js/es6/reflect'; -import 'core-js/es7/reflect'; - - -/** ALL Firefox browsers require the following to support `@angular/animation`. **/ -// import 'web-animations-js'; // Run `npm install --save web-animations-js`. - - - -/*************************************************************************************************** - * Zone JS is required by Angular itself. - */ -import 'zone.js/dist/zone'; // Included with Angular CLI. - - -/*************************************************************************************************** - * APPLICATION IMPORTS - */ - -/** - * Date, currency, decimal and percent pipes. - * Needed for: All but Chrome, Firefox, Edge, IE11 and Safari 10 - */ -// import 'intl'; // Run `npm install --save intl`. \ No newline at end of file diff --git a/misc/stackblitzes-templates/stackblitz.html.ejs b/misc/stackblitzes-templates/stackblitz.html.ejs deleted file mode 100644 index 18f7dd6..0000000 --- a/misc/stackblitzes-templates/stackblitz.html.ejs +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - -
-
- - -
-

Loading « <%=componentName%> - <%=demoName%> » demo

-
-
- - - - - <% for (const tag of tags) { %> - - <% } %> - <% for (const file of files) { %> - - <% } %> -
- - - - diff --git a/misc/validate-commit.js b/misc/validate-commit.js deleted file mode 100644 index 4205c9a..0000000 --- a/misc/validate-commit.js +++ /dev/null @@ -1,106 +0,0 @@ -#!/usr/bin/env node - -/** - * Git COMMIT-MSG hook for validating commit message - * See https://docs.google.com/document/d/1rk04jEuGfk9kYzfqCuOlPTSJw3hEDZJTBN5E5f1SALo/edit - * - * Installation: - * >> cd - * >> ln -s validate-commit-msg.js .git/hooks/commit-msg - */ -var fs = require('fs'); -var util = require('util'); - - -var MAX_LENGTH = 70; -var PATTERN = /^(?:fixup!\s*)?(\w*)(\((\w+)\))?\: (.*)$/; -var IGNORED = /^WIP\:/; -var TYPES = { - chore: true, - demo: true, - docs: true, - feat: true, - fix: true, - refactor: true, - revert: true, - style: true, - test: true -}; - - -var error = function() { - // gitx does not display it - // http://gitx.lighthouseapp.com/projects/17830/tickets/294-feature-display-hook-error-message-when-hook-fails - // https://groups.google.com/group/gitx/browse_thread/thread/a03bcab60844b812 - console.error('INVALID COMMIT MSG: ' + util.format.apply(null, arguments)); -}; - - -var validateMessage = function(message) { - var isValid = true; - - if (IGNORED.test(message)) { - console.log('Commit message validation ignored.'); - return true; - } - - if (message.length > MAX_LENGTH) { - error('is longer than %d characters !', MAX_LENGTH); - isValid = false; - } - - var match = PATTERN.exec(message); - - if (!match) { - error('does not match "(): " ! was: "' + message + '"\nNote: must be only letters.'); - return false; - } - - var type = match[1]; - var scope = match[3]; - var subject = match[4]; - - if (!TYPES.hasOwnProperty(type)) { - error('"%s" is not allowed type !', type); - return false; - } - - // Some more ideas, do want anything like this ? - // - allow only specific scopes (eg. fix(docs) should not be allowed ? - // - auto correct the type to lower case ? - // - auto correct first letter of the subject to lower case ? - // - auto add empty line after subject ? - // - auto remove empty () ? - // - auto correct typos in type ? - // - store incorrect messages, so that we can learn - - return isValid; -}; - - -var firstLineFromBuffer = function(buffer) { - return buffer.toString().split('\n').shift(); -}; - - - -// publish for testing -exports.validateMessage = validateMessage; - -// hacky start if not run by jasmine :-D -if (process.argv.join('').indexOf('jasmine-node') === -1) { - var commitMsgFile = process.argv[2] || process.env.GIT_PARAMS; - var incorrectLogFile = commitMsgFile.replace('COMMIT_EDITMSG', 'logs/incorrect-commit-msgs'); - - fs.readFile(commitMsgFile, function(err, buffer) { - var msg = firstLineFromBuffer(buffer); - - if (!validateMessage(msg)) { - fs.appendFile(incorrectLogFile, msg + '\n', function() { - process.exit(1); - }); - } else { - process.exit(0); - } - }); -}