@angular/material 13.0.0-next.7 → 13.0.0-next.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/autocomplete/autocomplete-module.d.ts +11 -7
- package/autocomplete/autocomplete-origin.d.ts +5 -0
- package/autocomplete/autocomplete-trigger.d.ts +5 -0
- package/autocomplete/autocomplete.d.ts +6 -1
- package/autocomplete/package.json +5 -5
- package/autocomplete/testing/package.json +5 -5
- package/badge/badge-module.d.ts +7 -7
- package/badge/badge.d.ts +4 -1
- package/badge/package.json +5 -5
- package/badge/testing/package.json +5 -5
- package/bottom-sheet/bottom-sheet-container.d.ts +3 -0
- package/bottom-sheet/bottom-sheet-module.d.ts +8 -7
- package/bottom-sheet/bottom-sheet.d.ts +3 -7
- package/bottom-sheet/package.json +5 -5
- package/bottom-sheet/testing/package.json +5 -5
- package/button/button-module.d.ts +6 -7
- package/button/button.d.ts +6 -1
- package/button/package.json +5 -5
- package/button/testing/package.json +5 -5
- package/button-toggle/button-toggle-module.d.ts +6 -7
- package/button-toggle/button-toggle.d.ts +6 -1
- package/button-toggle/package.json +5 -5
- package/button-toggle/testing/package.json +5 -5
- package/card/card-module.d.ts +6 -7
- package/card/card.d.ts +29 -7
- package/card/package.json +5 -5
- package/card/testing/package.json +5 -5
- package/checkbox/checkbox-module.d.ts +11 -7
- package/checkbox/checkbox-required-validator.d.ts +3 -0
- package/checkbox/checkbox.d.ts +4 -1
- package/checkbox/package.json +5 -5
- package/checkbox/testing/package.json +5 -5
- package/chips/chip-input.d.ts +3 -0
- package/chips/chip-list.d.ts +4 -1
- package/chips/chip.d.ts +10 -1
- package/chips/chips-module.d.ts +8 -7
- package/chips/package.json +5 -5
- package/chips/testing/package.json +5 -5
- package/core/common-behaviors/common-module.d.ts +5 -0
- package/core/common-behaviors/index.d.ts +1 -0
- package/core/datetime/index.d.ts +8 -7
- package/core/datetime/native-date-adapter.d.ts +3 -0
- package/core/error/error-options.d.ts +5 -7
- package/core/index.d.ts +0 -1
- package/core/line/line.d.ts +7 -0
- package/core/option/index.d.ts +10 -7
- package/core/option/optgroup.d.ts +6 -1
- package/core/option/option.d.ts +5 -0
- package/core/package.json +5 -5
- package/core/ripple/index.d.ts +7 -7
- package/core/ripple/ripple.d.ts +3 -0
- package/core/selection/index.d.ts +6 -7
- package/core/selection/pseudo-checkbox/pseudo-checkbox.d.ts +3 -7
- package/core/testing/package.json +5 -5
- package/datepicker/calendar-body.d.ts +3 -0
- package/datepicker/calendar.d.ts +5 -0
- package/datepicker/date-range-input-parts.d.ts +8 -1
- package/datepicker/date-range-input.d.ts +3 -0
- package/datepicker/date-range-picker.d.ts +3 -7
- package/datepicker/date-range-selection-strategy.d.ts +3 -0
- package/datepicker/date-selection-model.d.ts +7 -0
- package/datepicker/datepicker-actions.d.ts +7 -0
- package/datepicker/datepicker-base.d.ts +6 -1
- package/datepicker/datepicker-input-base.d.ts +3 -0
- package/datepicker/datepicker-input.d.ts +3 -0
- package/datepicker/datepicker-intl.d.ts +3 -7
- package/datepicker/datepicker-module.d.ts +24 -7
- package/datepicker/datepicker-toggle.d.ts +5 -0
- package/datepicker/datepicker.d.ts +3 -7
- package/datepicker/index.d.ts +0 -4
- package/datepicker/month-view.d.ts +3 -7
- package/datepicker/multi-year-view.d.ts +3 -7
- package/datepicker/package.json +5 -5
- package/datepicker/testing/package.json +5 -5
- package/datepicker/year-view.d.ts +3 -7
- package/dialog/dialog-container.d.ts +5 -0
- package/dialog/dialog-content-directives.d.ts +9 -0
- package/dialog/dialog-module.d.ts +9 -7
- package/dialog/dialog.d.ts +5 -7
- package/dialog/package.json +5 -5
- package/dialog/testing/dialog-harness.d.ts +14 -11
- package/dialog/testing/package.json +5 -5
- package/divider/divider-module.d.ts +6 -7
- package/divider/divider.d.ts +3 -7
- package/divider/package.json +5 -5
- package/divider/testing/package.json +5 -5
- package/esm2020/autocomplete/autocomplete-module.mjs +58 -0
- package/esm2020/autocomplete/autocomplete-origin.mjs +38 -0
- package/esm2020/autocomplete/autocomplete-trigger.mjs +651 -0
- package/esm2020/autocomplete/autocomplete.mjs +216 -0
- package/{esm2015/autocomplete/index.js → esm2020/autocomplete/index.mjs} +0 -0
- package/{esm2015/autocomplete/public-api.js → esm2020/autocomplete/public-api.mjs} +0 -0
- package/{esm2015/autocomplete/testing/autocomplete-harness-filters.js → esm2020/autocomplete/testing/autocomplete-harness-filters.mjs} +0 -0
- package/esm2020/autocomplete/testing/autocomplete-harness.mjs +101 -0
- package/{esm2015/autocomplete/testing/index.js → esm2020/autocomplete/testing/index.mjs} +0 -0
- package/{esm2015/autocomplete/testing/public-api.js → esm2020/autocomplete/testing/public-api.mjs} +0 -0
- package/esm2020/badge/badge-module.mjs +33 -0
- package/esm2020/badge/badge.mjs +228 -0
- package/{esm2015/badge/index.js → esm2020/badge/index.mjs} +0 -0
- package/{esm2015/badge/public-api.js → esm2020/badge/public-api.mjs} +0 -0
- package/{esm2015/badge/testing/badge-harness-filters.js → esm2020/badge/testing/badge-harness-filters.mjs} +0 -0
- package/esm2020/badge/testing/badge-harness.mjs +72 -0
- package/{esm2015/badge/testing/index.js → esm2020/badge/testing/index.mjs} +0 -0
- package/{esm2015/badge/testing/public-api.js → esm2020/badge/testing/public-api.mjs} +0 -0
- package/{esm2015/bottom-sheet/bottom-sheet-animations.js → esm2020/bottom-sheet/bottom-sheet-animations.mjs} +0 -0
- package/{esm2015/bottom-sheet/bottom-sheet-config.js → esm2020/bottom-sheet/bottom-sheet-config.mjs} +0 -0
- package/esm2020/bottom-sheet/bottom-sheet-container.mjs +230 -0
- package/esm2020/bottom-sheet/bottom-sheet-module.mjs +38 -0
- package/esm2020/bottom-sheet/bottom-sheet-ref.mjs +91 -0
- package/esm2020/bottom-sheet/bottom-sheet.mjs +172 -0
- package/{esm2015/bottom-sheet/index.js → esm2020/bottom-sheet/index.mjs} +0 -0
- package/{esm2015/bottom-sheet/public-api.js → esm2020/bottom-sheet/public-api.mjs} +0 -0
- package/{esm2015/bottom-sheet/testing/bottom-sheet-harness-filters.js → esm2020/bottom-sheet/testing/bottom-sheet-harness-filters.mjs} +0 -0
- package/esm2020/bottom-sheet/testing/bottom-sheet-harness.mjs +35 -0
- package/{esm2015/bottom-sheet/testing/index.js → esm2020/bottom-sheet/testing/index.mjs} +0 -0
- package/{esm2015/bottom-sheet/testing/public-api.js → esm2020/bottom-sheet/testing/public-api.mjs} +0 -0
- package/esm2020/button/button-module.mjs +42 -0
- package/esm2020/button/button.mjs +153 -0
- package/{esm2015/button/index.js → esm2020/button/index.mjs} +0 -0
- package/{esm2015/button/public-api.js → esm2020/button/public-api.mjs} +0 -0
- package/{esm2015/button/testing/button-harness-filters.js → esm2020/button/testing/button-harness-filters.mjs} +0 -0
- package/esm2020/button/testing/button-harness.mjs +51 -0
- package/{esm2015/button/testing/index.js → esm2020/button/testing/index.mjs} +0 -0
- package/{esm2015/button/testing/public-api.js → esm2020/button/testing/public-api.mjs} +0 -0
- package/esm2020/button-toggle/button-toggle-module.mjs +25 -0
- package/esm2020/button-toggle/button-toggle.mjs +470 -0
- package/{esm2015/button-toggle/index.js → esm2020/button-toggle/index.mjs} +0 -0
- package/{esm2015/button-toggle/public-api.js → esm2020/button-toggle/public-api.mjs} +0 -0
- package/{esm2015/button-toggle/testing/button-toggle-group-harness-filters.js → esm2020/button-toggle/testing/button-toggle-group-harness-filters.mjs} +0 -0
- package/esm2020/button-toggle/testing/button-toggle-group-harness.mjs +45 -0
- package/{esm2015/button-toggle/testing/button-toggle-harness-filters.js → esm2020/button-toggle/testing/button-toggle-harness-filters.mjs} +0 -0
- package/esm2020/button-toggle/testing/button-toggle-harness.mjs +98 -0
- package/{esm2015/button-toggle/testing/index.js → esm2020/button-toggle/testing/index.mjs} +0 -0
- package/{esm2015/button-toggle/testing/public-api.js → esm2020/button-toggle/testing/public-api.mjs} +0 -0
- package/esm2020/card/card-module.mjs +61 -0
- package/esm2020/card/card.mjs +247 -0
- package/{esm2015/card/index.js → esm2020/card/index.mjs} +0 -0
- package/{esm2015/card/public-api.js → esm2020/card/public-api.mjs} +0 -0
- package/{esm2015/card/testing/card-harness-filters.js → esm2020/card/testing/card-harness-filters.mjs} +0 -0
- package/esm2020/card/testing/card-harness.mjs +43 -0
- package/{esm2015/card/testing/index.js → esm2020/card/testing/index.mjs} +0 -0
- package/{esm2015/card/testing/public-api.js → esm2020/card/testing/public-api.mjs} +0 -0
- package/{esm2015/checkbox/checkbox-config.js → esm2020/checkbox/checkbox-config.mjs} +0 -0
- package/esm2020/checkbox/checkbox-module.mjs +46 -0
- package/esm2020/checkbox/checkbox-required-validator.mjs +33 -0
- package/esm2020/checkbox/checkbox.mjs +403 -0
- package/{esm2015/checkbox/index.js → esm2020/checkbox/index.mjs} +0 -0
- package/{esm2015/checkbox/public-api.js → esm2020/checkbox/public-api.mjs} +0 -0
- package/{esm2015/checkbox/testing/checkbox-harness-filters.js → esm2020/checkbox/testing/checkbox-harness-filters.mjs} +0 -0
- package/esm2020/checkbox/testing/checkbox-harness.mjs +123 -0
- package/{esm2015/checkbox/testing/index.js → esm2020/checkbox/testing/index.mjs} +0 -0
- package/{esm2015/checkbox/testing/public-api.js → esm2020/checkbox/testing/public-api.mjs} +0 -0
- package/{esm2015/chips/chip-default-options.js → esm2020/chips/chip-default-options.mjs} +0 -0
- package/esm2020/chips/chip-input.mjs +192 -0
- package/esm2020/chips/chip-list.mjs +673 -0
- package/{esm2015/chips/chip-text-control.js → esm2020/chips/chip-text-control.mjs} +0 -0
- package/esm2020/chips/chip.mjs +415 -0
- package/esm2020/chips/chips-module.mjs +64 -0
- package/{esm2015/chips/index.js → esm2020/chips/index.mjs} +0 -0
- package/{esm2015/chips/public-api.js → esm2020/chips/public-api.mjs} +0 -0
- package/{esm2015/chips/testing/chip-avatar-harness.js → esm2020/chips/testing/chip-avatar-harness.mjs} +0 -0
- package/{esm2015/chips/testing/chip-harness-filters.js → esm2020/chips/testing/chip-harness-filters.mjs} +0 -0
- package/esm2020/chips/testing/chip-harness.mjs +91 -0
- package/esm2020/chips/testing/chip-input-harness.mjs +82 -0
- package/esm2020/chips/testing/chip-list-harness.mjs +82 -0
- package/esm2020/chips/testing/chip-listbox-harness.mjs +44 -0
- package/esm2020/chips/testing/chip-option-harness.mjs +45 -0
- package/esm2020/chips/testing/chip-remove-harness.mjs +26 -0
- package/{esm2015/chips/testing/index.js → esm2020/chips/testing/index.mjs} +0 -0
- package/{esm2015/chips/testing/public-api.js → esm2020/chips/testing/public-api.mjs} +0 -0
- package/{esm2015/core/animation/animation.js → esm2020/core/animation/animation.mjs} +0 -0
- package/{esm2015/core/common-behaviors/color.js → esm2020/core/common-behaviors/color.mjs} +0 -0
- package/esm2020/core/common-behaviors/common-module.mjs +122 -0
- package/{esm2015/core/common-behaviors/constructor.js → esm2020/core/common-behaviors/constructor.mjs} +0 -0
- package/{esm2015/core/common-behaviors/disable-ripple.js → esm2020/core/common-behaviors/disable-ripple.mjs} +0 -0
- package/{esm2015/core/common-behaviors/disabled.js → esm2020/core/common-behaviors/disabled.mjs} +0 -0
- package/{esm2015/core/common-behaviors/error-state.js → esm2020/core/common-behaviors/error-state.mjs} +0 -0
- package/esm2020/core/common-behaviors/index.mjs +15 -0
- package/{esm2015/core/common-behaviors/initialized.js → esm2020/core/common-behaviors/initialized.mjs} +0 -0
- package/{esm2015/core/common-behaviors/tabindex.js → esm2020/core/common-behaviors/tabindex.mjs} +0 -0
- package/{esm2015/core/datetime/date-adapter.js → esm2020/core/datetime/date-adapter.mjs} +0 -0
- package/{esm2015/core/datetime/date-formats.js → esm2020/core/datetime/date-formats.mjs} +0 -0
- package/esm2020/core/datetime/index.mjs +47 -0
- package/esm2020/core/datetime/native-date-adapter.mjs +218 -0
- package/{esm2015/core/datetime/native-date-formats.js → esm2020/core/datetime/native-date-formats.mjs} +0 -0
- package/esm2020/core/error/error-options.mjs +33 -0
- package/esm2020/core/index.mjs +5 -0
- package/esm2020/core/line/line.mjs +64 -0
- package/esm2020/core/option/index.mjs +32 -0
- package/esm2020/core/option/optgroup.mjs +73 -0
- package/{esm2015/core/option/option-parent.js → esm2020/core/option/option-parent.mjs} +0 -0
- package/esm2020/core/option/option.mjs +276 -0
- package/{esm2015/core/public-api.js → esm2020/core/public-api.mjs} +0 -0
- package/esm2020/core/ripple/index.mjs +29 -0
- package/{esm2015/core/ripple/ripple-ref.js → esm2020/core/ripple/ripple-ref.mjs} +0 -0
- package/esm2020/core/ripple/ripple-renderer.mjs +261 -0
- package/esm2020/core/ripple/ripple.mjs +152 -0
- package/esm2020/core/selection/index.mjs +26 -0
- package/esm2020/core/selection/pseudo-checkbox/pseudo-checkbox.mjs +54 -0
- package/{esm2015/core/testing/index.js → esm2020/core/testing/index.mjs} +0 -0
- package/{esm2015/core/testing/optgroup-harness-filters.js → esm2020/core/testing/optgroup-harness-filters.mjs} +0 -0
- package/esm2020/core/testing/optgroup-harness.mjs +44 -0
- package/{esm2015/core/testing/option-harness-filters.js → esm2020/core/testing/option-harness-filters.mjs} +0 -0
- package/esm2020/core/testing/option-harness.mjs +54 -0
- package/{esm2015/core/testing/public-api.js → esm2020/core/testing/public-api.mjs} +0 -0
- package/esm2020/core/version.mjs +11 -0
- package/esm2020/datepicker/calendar-body.mjs +298 -0
- package/esm2020/datepicker/calendar.mjs +354 -0
- package/esm2020/datepicker/date-range-input-parts.mjs +342 -0
- package/esm2020/datepicker/date-range-input.mjs +331 -0
- package/esm2020/datepicker/date-range-picker.mjs +48 -0
- package/esm2020/datepicker/date-range-selection-strategy.mjs +59 -0
- package/esm2020/datepicker/date-selection-model.mjs +187 -0
- package/esm2020/datepicker/datepicker-actions.mjs +89 -0
- package/{esm2015/datepicker/datepicker-animations.js → esm2020/datepicker/datepicker-animations.mjs} +0 -0
- package/esm2020/datepicker/datepicker-base.mjs +549 -0
- package/{esm2015/datepicker/datepicker-errors.js → esm2020/datepicker/datepicker-errors.mjs} +0 -0
- package/esm2020/datepicker/datepicker-input-base.mjs +298 -0
- package/esm2020/datepicker/datepicker-input.mjs +183 -0
- package/esm2020/datepicker/datepicker-intl.mjs +53 -0
- package/esm2020/datepicker/datepicker-module.mjs +148 -0
- package/esm2020/datepicker/datepicker-toggle.mjs +113 -0
- package/esm2020/datepicker/datepicker.mjs +37 -0
- package/esm2020/datepicker/index.mjs +5 -0
- package/esm2020/datepicker/month-view.mjs +364 -0
- package/esm2020/datepicker/multi-year-view.mjs +289 -0
- package/{esm2015/datepicker/public-api.js → esm2020/datepicker/public-api.mjs} +0 -0
- package/esm2020/datepicker/testing/calendar-cell-harness.mjs +138 -0
- package/esm2020/datepicker/testing/calendar-harness.mjs +76 -0
- package/esm2020/datepicker/testing/date-range-input-harness.mjs +99 -0
- package/{esm2015/datepicker/testing/datepicker-harness-filters.js → esm2020/datepicker/testing/datepicker-harness-filters.mjs} +0 -0
- package/esm2020/datepicker/testing/datepicker-input-harness-base.mjs +81 -0
- package/esm2020/datepicker/testing/datepicker-input-harness.mjs +58 -0
- package/esm2020/datepicker/testing/datepicker-toggle-harness.mjs +41 -0
- package/esm2020/datepicker/testing/datepicker-trigger-harness-base.mjs +65 -0
- package/{esm2015/datepicker/testing/index.js → esm2020/datepicker/testing/index.mjs} +0 -0
- package/{esm2015/datepicker/testing/public-api.js → esm2020/datepicker/testing/public-api.mjs} +0 -0
- package/esm2020/datepicker/year-view.mjs +281 -0
- package/{esm2015/dialog/dialog-animations.js → esm2020/dialog/dialog-animations.mjs} +0 -0
- package/{esm2015/dialog/dialog-config.js → esm2020/dialog/dialog-config.mjs} +0 -0
- package/esm2020/dialog/dialog-container.mjs +282 -0
- package/esm2020/dialog/dialog-content-directives.mjs +172 -0
- package/esm2020/dialog/dialog-module.mjs +69 -0
- package/esm2020/dialog/dialog-ref.mjs +196 -0
- package/esm2020/dialog/dialog.mjs +358 -0
- package/{esm2015/dialog/index.js → esm2020/dialog/index.mjs} +0 -0
- package/{esm2015/dialog/public-api.js → esm2020/dialog/public-api.mjs} +0 -0
- package/{esm2015/dialog/testing/dialog-harness-filters.js → esm2020/dialog/testing/dialog-harness-filters.mjs} +0 -0
- package/esm2020/dialog/testing/dialog-harness.mjs +83 -0
- package/{esm2015/dialog/testing/index.js → esm2020/dialog/testing/index.mjs} +0 -0
- package/{esm2015/dialog/testing/public-api.js → esm2020/dialog/testing/public-api.mjs} +0 -0
- package/esm2020/divider/divider-module.mjs +25 -0
- package/esm2020/divider/divider.mjs +40 -0
- package/{esm2015/divider/index.js → esm2020/divider/index.mjs} +0 -0
- package/{esm2015/divider/public-api.js → esm2020/divider/public-api.mjs} +0 -0
- package/{esm2015/divider/testing/divider-harness-filters.js → esm2020/divider/testing/divider-harness-filters.mjs} +0 -0
- package/esm2020/divider/testing/divider-harness.mjs +22 -0
- package/{esm2015/divider/testing/index.js → esm2020/divider/testing/index.mjs} +0 -0
- package/{esm2015/divider/testing/public-api.js → esm2020/divider/testing/public-api.mjs} +0 -0
- package/{esm2015/expansion/accordion-base.js → esm2020/expansion/accordion-base.mjs} +0 -0
- package/esm2020/expansion/accordion.mjs +93 -0
- package/{esm2015/expansion/expansion-animations.js → esm2020/expansion/expansion-animations.mjs} +0 -0
- package/esm2020/expansion/expansion-module.mjs +59 -0
- package/esm2020/expansion/expansion-panel-content.mjs +27 -0
- package/esm2020/expansion/expansion-panel-header.mjs +226 -0
- package/esm2020/expansion/expansion-panel.mjs +195 -0
- package/{esm2015/expansion/index.js → esm2020/expansion/index.mjs} +0 -0
- package/{esm2015/expansion/public-api.js → esm2020/expansion/public-api.mjs} +0 -0
- package/esm2020/expansion/testing/accordion-harness.mjs +31 -0
- package/{esm2015/expansion/testing/expansion-harness-filters.js → esm2020/expansion/testing/expansion-harness-filters.mjs} +0 -0
- package/esm2020/expansion/testing/expansion-harness.mjs +120 -0
- package/{esm2015/expansion/testing/index.js → esm2020/expansion/testing/index.mjs} +0 -0
- package/{esm2015/expansion/testing/public-api.js → esm2020/expansion/testing/public-api.mjs} +0 -0
- package/esm2020/form-field/error.mjs +47 -0
- package/{esm2015/form-field/form-field-animations.js → esm2020/form-field/form-field-animations.mjs} +0 -0
- package/esm2020/form-field/form-field-control.mjs +11 -0
- package/{esm2015/form-field/form-field-errors.js → esm2020/form-field/form-field-errors.mjs} +0 -0
- package/esm2020/form-field/form-field-module.mjs +73 -0
- package/esm2020/form-field/form-field.mjs +510 -0
- package/esm2020/form-field/hint.mjs +49 -0
- package/{esm2015/form-field/index.js → esm2020/form-field/index.mjs} +0 -0
- package/esm2020/form-field/label.mjs +21 -0
- package/esm2020/form-field/placeholder.mjs +26 -0
- package/esm2020/form-field/prefix.mjs +28 -0
- package/{esm2015/form-field/public-api.js → esm2020/form-field/public-api.mjs} +0 -0
- package/esm2020/form-field/suffix.mjs +28 -0
- package/{esm2015/form-field/testing/control/form-field-control-harness.js → esm2020/form-field/testing/control/form-field-control-harness.mjs} +0 -0
- package/{esm2015/form-field/testing/control/index.js → esm2020/form-field/testing/control/index.mjs} +0 -0
- package/{esm2015/form-field/testing/form-field-harness-filters.js → esm2020/form-field/testing/form-field-harness-filters.mjs} +0 -0
- package/esm2020/form-field/testing/form-field-harness.mjs +181 -0
- package/{esm2015/form-field/testing/index.js → esm2020/form-field/testing/index.mjs} +0 -0
- package/{esm2015/form-field/testing/public-api.js → esm2020/form-field/testing/public-api.mjs} +0 -0
- package/{esm2015/grid-list/grid-list-base.js → esm2020/grid-list/grid-list-base.mjs} +0 -0
- package/esm2020/grid-list/grid-list-module.mjs +55 -0
- package/esm2020/grid-list/grid-list.mjs +135 -0
- package/esm2020/grid-list/grid-tile.mjs +117 -0
- package/esm2020/grid-list/index.mjs +5 -0
- package/{esm2015/grid-list/public-api.js → esm2020/grid-list/public-api.mjs} +0 -0
- package/{esm2015/grid-list/testing/grid-list-harness-filters.js → esm2020/grid-list/testing/grid-list-harness-filters.mjs} +0 -0
- package/esm2020/grid-list/testing/grid-list-harness.mjs +72 -0
- package/esm2020/grid-list/testing/grid-tile-harness.mjs +65 -0
- package/{esm2015/grid-list/testing/index.js → esm2020/grid-list/testing/index.mjs} +0 -0
- package/{esm2015/grid-list/testing/public-api.js → esm2020/grid-list/testing/public-api.mjs} +0 -0
- package/{esm2015/grid-list/tile-coordinator.js → esm2020/grid-list/tile-coordinator.mjs} +0 -0
- package/{esm2015/grid-list/tile-styler.js → esm2020/grid-list/tile-styler.mjs} +0 -0
- package/{esm2015/icon/fake-svgs.js → esm2020/icon/fake-svgs.mjs} +0 -0
- package/esm2020/icon/icon-module.mjs +25 -0
- package/esm2020/icon/icon-registry.mjs +582 -0
- package/esm2020/icon/icon.mjs +357 -0
- package/{esm2015/icon/index.js → esm2020/icon/index.mjs} +0 -0
- package/{esm2015/icon/public-api.js → esm2020/icon/public-api.mjs} +0 -0
- package/esm2020/icon/testing/fake-icon-registry.mjs +92 -0
- package/{esm2015/icon/testing/icon-harness-filters.js → esm2020/icon/testing/icon-harness-filters.mjs} +0 -0
- package/esm2020/icon/testing/icon-harness.mjs +54 -0
- package/{esm2015/icon/testing/index.js → esm2020/icon/testing/index.mjs} +0 -0
- package/{esm2015/icon/testing/public-api.js → esm2020/icon/testing/public-api.mjs} +0 -0
- package/esm2020/icon/trusted-types.mjs +43 -0
- package/{esm2015/index.js → esm2020/index.mjs} +0 -0
- package/{esm2015/input/index.js → esm2020/input/index.mjs} +0 -0
- package/{esm2015/input/input-errors.js → esm2020/input/input-errors.mjs} +0 -0
- package/esm2020/input/input-module.mjs +51 -0
- package/{esm2015/input/input-value-accessor.js → esm2020/input/input-value-accessor.mjs} +0 -0
- package/esm2020/input/input.mjs +428 -0
- package/{esm2015/input/public-api.js → esm2020/input/public-api.mjs} +0 -0
- package/{esm2015/input/testing/index.js → esm2020/input/testing/index.mjs} +0 -0
- package/{esm2015/input/testing/input-harness-filters.js → esm2020/input/testing/input-harness-filters.mjs} +0 -0
- package/esm2020/input/testing/input-harness.mjs +113 -0
- package/esm2020/input/testing/native-option-harness.mjs +42 -0
- package/{esm2015/input/testing/native-select-harness-filters.js → esm2020/input/testing/native-select-harness-filters.mjs} +0 -0
- package/esm2020/input/testing/native-select-harness.mjs +79 -0
- package/{esm2015/input/testing/public-api.js → esm2020/input/testing/public-api.mjs} +0 -0
- package/{esm2015/list/index.js → esm2020/list/index.mjs} +0 -0
- package/esm2020/list/list-module.mjs +71 -0
- package/esm2020/list/list.mjs +216 -0
- package/{esm2015/list/public-api.js → esm2020/list/public-api.mjs} +0 -0
- package/esm2020/list/selection-list.mjs +612 -0
- package/esm2020/list/testing/action-list-harness.mjs +59 -0
- package/{esm2015/list/testing/index.js → esm2020/list/testing/index.mjs} +0 -0
- package/esm2020/list/testing/list-harness-base.mjs +88 -0
- package/{esm2015/list/testing/list-harness-filters.js → esm2020/list/testing/list-harness-filters.mjs} +0 -0
- package/{esm2015/list/testing/list-harness.js → esm2020/list/testing/list-harness.mjs} +0 -0
- package/esm2020/list/testing/list-item-harness-base.mjs +72 -0
- package/esm2020/list/testing/nav-list-harness.mjs +64 -0
- package/{esm2015/list/testing/public-api.js → esm2020/list/testing/public-api.mjs} +0 -0
- package/esm2020/list/testing/selection-list-harness.mjs +125 -0
- package/esm2020/menu/index.mjs +5 -0
- package/{esm2015/menu/menu-animations.js → esm2020/menu/menu-animations.mjs} +0 -0
- package/esm2020/menu/menu-content.mjs +97 -0
- package/{esm2015/menu/menu-errors.js → esm2020/menu/menu-errors.mjs} +0 -0
- package/esm2020/menu/menu-item.mjs +164 -0
- package/esm2020/menu/menu-module.mjs +58 -0
- package/{esm2015/menu/menu-panel.js → esm2020/menu/menu-panel.mjs} +0 -0
- package/{esm2015/menu/menu-positions.js → esm2020/menu/menu-positions.mjs} +0 -0
- package/esm2020/menu/menu-trigger.mjs +540 -0
- package/esm2020/menu/menu.mjs +401 -0
- package/{esm2015/menu/public-api.js → esm2020/menu/public-api.mjs} +0 -0
- package/{esm2015/menu/testing/index.js → esm2020/menu/testing/index.mjs} +0 -0
- package/{esm2015/menu/testing/menu-harness-filters.js → esm2020/menu/testing/menu-harness-filters.mjs} +0 -0
- package/esm2020/menu/testing/menu-harness.mjs +183 -0
- package/{esm2015/menu/testing/public-api.js → esm2020/menu/testing/public-api.mjs} +0 -0
- package/{esm2015/paginator/index.js → esm2020/paginator/index.mjs} +0 -0
- package/esm2020/paginator/paginator-intl.mjs +64 -0
- package/esm2020/paginator/paginator-module.mjs +47 -0
- package/esm2020/paginator/paginator.mjs +268 -0
- package/{esm2015/paginator/public-api.js → esm2020/paginator/public-api.mjs} +0 -0
- package/{esm2015/paginator/testing/index.js → esm2020/paginator/testing/index.mjs} +0 -0
- package/{esm2015/paginator/testing/paginator-harness-filters.js → esm2020/paginator/testing/paginator-harness-filters.mjs} +0 -0
- package/esm2020/paginator/testing/paginator-harness.mjs +91 -0
- package/{esm2015/paginator/testing/public-api.js → esm2020/paginator/testing/public-api.mjs} +0 -0
- package/{esm2015/progress-bar/index.js → esm2020/progress-bar/index.mjs} +0 -0
- package/esm2020/progress-bar/progress-bar-module.mjs +26 -0
- package/esm2020/progress-bar/progress-bar.mjs +187 -0
- package/{esm2015/progress-bar/public-api.js → esm2020/progress-bar/public-api.mjs} +0 -0
- package/{esm2015/progress-bar/testing/index.js → esm2020/progress-bar/testing/index.mjs} +0 -0
- package/{esm2015/progress-bar/testing/progress-bar-harness-filters.js → esm2020/progress-bar/testing/progress-bar-harness-filters.mjs} +0 -0
- package/esm2020/progress-bar/testing/progress-bar-harness.mjs +34 -0
- package/{esm2015/progress-bar/testing/public-api.js → esm2020/progress-bar/testing/public-api.mjs} +0 -0
- package/{esm2015/progress-spinner/index.js → esm2020/progress-spinner/index.mjs} +0 -0
- package/esm2020/progress-spinner/progress-spinner-module.mjs +36 -0
- package/esm2020/progress-spinner/progress-spinner.mjs +280 -0
- package/{esm2015/progress-spinner/public-api.js → esm2020/progress-spinner/public-api.mjs} +0 -0
- package/{esm2015/progress-spinner/testing/index.js → esm2020/progress-spinner/testing/index.mjs} +0 -0
- package/{esm2015/progress-spinner/testing/progress-spinner-harness-filters.js → esm2020/progress-spinner/testing/progress-spinner-harness-filters.mjs} +0 -0
- package/esm2020/progress-spinner/testing/progress-spinner-harness.mjs +35 -0
- package/{esm2015/progress-spinner/testing/public-api.js → esm2020/progress-spinner/testing/public-api.mjs} +0 -0
- package/{esm2015/radio/index.js → esm2020/radio/index.mjs} +0 -0
- package/{esm2015/radio/public-api.js → esm2020/radio/public-api.mjs} +0 -0
- package/esm2020/radio/radio-module.mjs +25 -0
- package/esm2020/radio/radio.mjs +570 -0
- package/{esm2015/radio/testing/index.js → esm2020/radio/testing/index.mjs} +0 -0
- package/{esm2015/radio/testing/public-api.js → esm2020/radio/testing/public-api.mjs} +0 -0
- package/{esm2015/radio/testing/radio-harness-filters.js → esm2020/radio/testing/radio-harness-filters.mjs} +0 -0
- package/esm2020/radio/testing/radio-harness.mjs +231 -0
- package/{esm2015/select/index.js → esm2020/select/index.mjs} +0 -0
- package/{esm2015/select/public-api.js → esm2020/select/public-api.mjs} +0 -0
- package/{esm2015/select/select-animations.js → esm2020/select/select-animations.mjs} +0 -0
- package/{esm2015/select/select-errors.js → esm2020/select/select-errors.mjs} +0 -0
- package/esm2020/select/select-module.mjs +58 -0
- package/esm2020/select/select.mjs +1188 -0
- package/{esm2015/select/testing/index.js → esm2020/select/testing/index.mjs} +0 -0
- package/{esm2015/select/testing/public-api.js → esm2020/select/testing/public-api.mjs} +0 -0
- package/{esm2015/select/testing/select-harness-filters.js → esm2020/select/testing/select-harness-filters.mjs} +0 -0
- package/esm2020/select/testing/select-harness.mjs +130 -0
- package/{esm2015/sidenav/drawer-animations.js → esm2020/sidenav/drawer-animations.mjs} +0 -0
- package/esm2020/sidenav/drawer.mjs +788 -0
- package/esm2020/sidenav/index.mjs +5 -0
- package/{esm2015/sidenav/public-api.js → esm2020/sidenav/public-api.mjs} +0 -0
- package/esm2020/sidenav/sidenav-module.mjs +71 -0
- package/esm2020/sidenav/sidenav.mjs +115 -0
- package/esm2020/sidenav/testing/drawer-container-harness.mjs +36 -0
- package/{esm2015/sidenav/testing/drawer-content-harness.js → esm2020/sidenav/testing/drawer-content-harness.mjs} +0 -0
- package/{esm2015/sidenav/testing/drawer-harness-filters.js → esm2020/sidenav/testing/drawer-harness-filters.mjs} +0 -0
- package/esm2020/sidenav/testing/drawer-harness.mjs +50 -0
- package/{esm2015/sidenav/testing/index.js → esm2020/sidenav/testing/index.mjs} +0 -0
- package/{esm2015/sidenav/testing/public-api.js → esm2020/sidenav/testing/public-api.mjs} +0 -0
- package/esm2020/sidenav/testing/sidenav-container-harness.mjs +36 -0
- package/{esm2015/sidenav/testing/sidenav-content-harness.js → esm2020/sidenav/testing/sidenav-content-harness.mjs} +0 -0
- package/esm2020/sidenav/testing/sidenav-harness.mjs +29 -0
- package/{esm2015/slide-toggle/index.js → esm2020/slide-toggle/index.mjs} +0 -0
- package/{esm2015/slide-toggle/public-api.js → esm2020/slide-toggle/public-api.mjs} +0 -0
- package/{esm2015/slide-toggle/slide-toggle-config.js → esm2020/slide-toggle/slide-toggle-config.mjs} +0 -0
- package/esm2020/slide-toggle/slide-toggle-module.mjs +57 -0
- package/esm2020/slide-toggle/slide-toggle-required-validator.mjs +36 -0
- package/esm2020/slide-toggle/slide-toggle.mjs +253 -0
- package/{esm2015/slide-toggle/testing/index.js → esm2020/slide-toggle/testing/index.mjs} +0 -0
- package/{esm2015/slide-toggle/testing/public-api.js → esm2020/slide-toggle/testing/public-api.mjs} +0 -0
- package/{esm2015/slide-toggle/testing/slide-toggle-harness-filters.js → esm2020/slide-toggle/testing/slide-toggle-harness-filters.mjs} +0 -0
- package/esm2020/slide-toggle/testing/slide-toggle-harness.mjs +110 -0
- package/{esm2015/slider/index.js → esm2020/slider/index.mjs} +0 -0
- package/{esm2015/slider/public-api.js → esm2020/slider/public-api.mjs} +0 -0
- package/esm2020/slider/slider-module.mjs +26 -0
- package/esm2020/slider/slider.mjs +801 -0
- package/{esm2015/slider/testing/index.js → esm2020/slider/testing/index.mjs} +0 -0
- package/{esm2015/slider/testing/public-api.js → esm2020/slider/testing/public-api.mjs} +0 -0
- package/{esm2015/slider/testing/slider-harness-filters.js → esm2020/slider/testing/slider-harness-filters.mjs} +0 -0
- package/esm2020/slider/testing/slider-harness.mjs +114 -0
- package/{esm2015/snack-bar/index.js → esm2020/snack-bar/index.mjs} +0 -0
- package/{esm2015/snack-bar/public-api.js → esm2020/snack-bar/public-api.mjs} +0 -0
- package/esm2020/snack-bar/simple-snack-bar.mjs +44 -0
- package/{esm2015/snack-bar/snack-bar-animations.js → esm2020/snack-bar/snack-bar-animations.mjs} +0 -0
- package/{esm2015/snack-bar/snack-bar-config.js → esm2020/snack-bar/snack-bar-config.mjs} +0 -0
- package/esm2020/snack-bar/snack-bar-container.mjs +205 -0
- package/esm2020/snack-bar/snack-bar-module.mjs +47 -0
- package/esm2020/snack-bar/snack-bar-ref.mjs +90 -0
- package/esm2020/snack-bar/snack-bar.mjs +265 -0
- package/{esm2015/snack-bar/testing/index.js → esm2020/snack-bar/testing/index.mjs} +0 -0
- package/{esm2015/snack-bar/testing/public-api.js → esm2020/snack-bar/testing/public-api.mjs} +0 -0
- package/{esm2015/snack-bar/testing/snack-bar-harness-filters.js → esm2020/snack-bar/testing/snack-bar-harness-filters.mjs} +0 -0
- package/esm2020/snack-bar/testing/snack-bar-harness.mjs +118 -0
- package/{esm2015/sort/index.js → esm2020/sort/index.mjs} +0 -0
- package/{esm2015/sort/public-api.js → esm2020/sort/public-api.mjs} +0 -0
- package/{esm2015/sort/sort-animations.js → esm2020/sort/sort-animations.mjs} +0 -0
- package/{esm2015/sort/sort-direction.js → esm2020/sort/sort-direction.mjs} +0 -0
- package/{esm2015/sort/sort-errors.js → esm2020/sort/sort-errors.mjs} +0 -0
- package/esm2020/sort/sort-header-intl.mjs +43 -0
- package/esm2020/sort/sort-header.mjs +275 -0
- package/esm2020/sort/sort-module.mjs +29 -0
- package/esm2020/sort/sort.mjs +154 -0
- package/{esm2015/sort/testing/index.js → esm2020/sort/testing/index.mjs} +0 -0
- package/{esm2015/sort/testing/public-api.js → esm2020/sort/testing/public-api.mjs} +0 -0
- package/{esm2015/sort/testing/sort-harness-filters.js → esm2020/sort/testing/sort-harness-filters.mjs} +0 -0
- package/esm2020/sort/testing/sort-harness.mjs +36 -0
- package/esm2020/sort/testing/sort-header-harness.mjs +56 -0
- package/{esm2015/stepper/index.js → esm2020/stepper/index.mjs} +0 -0
- package/{esm2015/stepper/public-api.js → esm2020/stepper/public-api.mjs} +0 -0
- package/esm2020/stepper/step-content.mjs +26 -0
- package/esm2020/stepper/step-header.mjs +110 -0
- package/esm2020/stepper/step-label.mjs +21 -0
- package/{esm2015/stepper/stepper-animations.js → esm2020/stepper/stepper-animations.mjs} +0 -0
- package/esm2020/stepper/stepper-button.mjs +43 -0
- package/esm2020/stepper/stepper-icon.mjs +29 -0
- package/esm2020/stepper/stepper-intl.mjs +43 -0
- package/esm2020/stepper/stepper-module.mjs +97 -0
- package/esm2020/stepper/stepper.mjs +213 -0
- package/{esm2015/stepper/testing/index.js → esm2020/stepper/testing/index.mjs} +0 -0
- package/{esm2015/stepper/testing/public-api.js → esm2020/stepper/testing/public-api.mjs} +0 -0
- package/{esm2015/stepper/testing/step-harness-filters.js → esm2020/stepper/testing/step-harness-filters.mjs} +0 -0
- package/esm2020/stepper/testing/step-harness.mjs +90 -0
- package/esm2020/stepper/testing/stepper-button-harnesses.mjs +50 -0
- package/esm2020/stepper/testing/stepper-harness.mjs +50 -0
- package/esm2020/table/cell.mjs +139 -0
- package/{esm2015/table/index.js → esm2020/table/index.mjs} +0 -0
- package/{esm2015/table/public-api.js → esm2020/table/public-api.mjs} +0 -0
- package/esm2020/table/row.mjs +139 -0
- package/esm2020/table/table-data-source.mjs +310 -0
- package/esm2020/table/table-module.mjs +101 -0
- package/esm2020/table/table.mjs +71 -0
- package/esm2020/table/testing/cell-harness.mjs +72 -0
- package/{esm2015/table/testing/index.js → esm2020/table/testing/index.mjs} +0 -0
- package/{esm2015/table/testing/public-api.js → esm2020/table/testing/public-api.mjs} +0 -0
- package/esm2020/table/testing/row-harness.mjs +84 -0
- package/{esm2015/table/testing/table-harness-filters.js → esm2020/table/testing/table-harness-filters.mjs} +0 -0
- package/esm2020/table/testing/table-harness.mjs +88 -0
- package/esm2020/table/text-column.mjs +58 -0
- package/esm2020/tabs/index.mjs +5 -0
- package/esm2020/tabs/ink-bar.mjs +93 -0
- package/esm2020/tabs/paginated-tab-header.mjs +480 -0
- package/{esm2015/tabs/public-api.js → esm2020/tabs/public-api.mjs} +0 -0
- package/esm2020/tabs/tab-body.mjs +214 -0
- package/{esm2015/tabs/tab-config.js → esm2020/tabs/tab-config.mjs} +0 -0
- package/esm2020/tabs/tab-content.mjs +32 -0
- package/esm2020/tabs/tab-group.mjs +382 -0
- package/esm2020/tabs/tab-header.mjs +101 -0
- package/esm2020/tabs/tab-label-wrapper.mjs +41 -0
- package/esm2020/tabs/tab-label.mjs +43 -0
- package/{esm2015/tabs/tab-nav-bar/index.js → esm2020/tabs/tab-nav-bar/index.mjs} +0 -0
- package/esm2020/tabs/tab-nav-bar/tab-nav-bar.mjs +263 -0
- package/esm2020/tabs/tab.mjs +106 -0
- package/{esm2015/tabs/tabs-animations.js → esm2020/tabs/tabs-animations.mjs} +0 -0
- package/esm2020/tabs/tabs-module.mjs +93 -0
- package/{esm2015/tabs/testing/index.js → esm2020/tabs/testing/index.mjs} +0 -0
- package/{esm2015/tabs/testing/public-api.js → esm2020/tabs/testing/public-api.mjs} +0 -0
- package/esm2020/tabs/testing/tab-group-harness.mjs +58 -0
- package/{esm2015/tabs/testing/tab-harness-filters.js → esm2020/tabs/testing/tab-harness-filters.mjs} +0 -0
- package/esm2020/tabs/testing/tab-harness.mjs +66 -0
- package/esm2020/tabs/testing/tab-link-harness.mjs +42 -0
- package/esm2020/tabs/testing/tab-nav-bar-harness.mjs +54 -0
- package/{esm2015/toolbar/index.js → esm2020/toolbar/index.mjs} +0 -0
- package/{esm2015/toolbar/public-api.js → esm2020/toolbar/public-api.mjs} +0 -0
- package/{esm2015/toolbar/testing/index.js → esm2020/toolbar/testing/index.mjs} +0 -0
- package/{esm2015/toolbar/testing/public-api.js → esm2020/toolbar/testing/public-api.mjs} +0 -0
- package/{esm2015/toolbar/testing/toolbar-harness-filters.js → esm2020/toolbar/testing/toolbar-harness-filters.mjs} +0 -0
- package/esm2020/toolbar/testing/toolbar-harness.mjs +40 -0
- package/esm2020/toolbar/toolbar-module.mjs +25 -0
- package/esm2020/toolbar/toolbar.mjs +88 -0
- package/{esm2015/tooltip/index.js → esm2020/tooltip/index.mjs} +0 -0
- package/{esm2015/tooltip/public-api.js → esm2020/tooltip/public-api.mjs} +0 -0
- package/{esm2015/tooltip/testing/index.js → esm2020/tooltip/testing/index.mjs} +0 -0
- package/{esm2015/tooltip/testing/public-api.js → esm2020/tooltip/testing/public-api.mjs} +0 -0
- package/{esm2015/tooltip/testing/tooltip-harness-filters.js → esm2020/tooltip/testing/tooltip-harness-filters.mjs} +0 -0
- package/esm2020/tooltip/testing/tooltip-harness.mjs +57 -0
- package/{esm2015/tooltip/tooltip-animations.js → esm2020/tooltip/tooltip-animations.mjs} +0 -0
- package/esm2020/tooltip/tooltip-module.mjs +44 -0
- package/esm2020/tooltip/tooltip.mjs +739 -0
- package/{esm2015/tree/data-source/flat-data-source.js → esm2020/tree/data-source/flat-data-source.mjs} +0 -0
- package/{esm2015/tree/data-source/nested-data-source.js → esm2020/tree/data-source/nested-data-source.mjs} +0 -0
- package/{esm2015/tree/index.js → esm2020/tree/index.mjs} +0 -0
- package/esm2020/tree/node.mjs +143 -0
- package/esm2020/tree/outlet.mjs +41 -0
- package/esm2020/tree/padding.mjs +37 -0
- package/{esm2015/tree/public-api.js → esm2020/tree/public-api.mjs} +0 -0
- package/{esm2015/tree/testing/index.js → esm2020/tree/testing/index.mjs} +0 -0
- package/esm2020/tree/testing/node-harness.mjs +69 -0
- package/{esm2015/tree/testing/public-api.js → esm2020/tree/testing/public-api.mjs} +0 -0
- package/{esm2015/tree/testing/tree-harness-filters.js → esm2020/tree/testing/tree-harness-filters.mjs} +0 -0
- package/esm2020/tree/testing/tree-harness.mjs +123 -0
- package/esm2020/tree/toggle.mjs +36 -0
- package/esm2020/tree/tree-module.mjs +51 -0
- package/esm2020/tree/tree.mjs +37 -0
- package/expansion/accordion.d.ts +3 -0
- package/expansion/expansion-module.d.ts +12 -7
- package/expansion/expansion-panel-content.d.ts +3 -0
- package/expansion/expansion-panel-header.d.ts +8 -1
- package/expansion/expansion-panel.d.ts +5 -0
- package/expansion/package.json +5 -5
- package/expansion/testing/package.json +5 -5
- package/fesm2015/autocomplete/testing.mjs +132 -0
- package/fesm2015/autocomplete/testing.mjs.map +1 -0
- package/fesm2015/autocomplete.mjs +958 -0
- package/fesm2015/autocomplete.mjs.map +1 -0
- package/fesm2015/badge/testing.mjs +97 -0
- package/fesm2015/badge/testing.mjs.map +1 -0
- package/fesm2015/badge.mjs +266 -0
- package/fesm2015/badge.mjs.map +1 -0
- package/fesm2015/bottom-sheet/testing.mjs +52 -0
- package/fesm2015/bottom-sheet/testing.mjs.map +1 -0
- package/fesm2015/bottom-sheet.mjs +596 -0
- package/fesm2015/bottom-sheet.mjs.map +1 -0
- package/fesm2015/button/testing.mjs +76 -0
- package/fesm2015/button/testing.mjs.map +1 -0
- package/fesm2015/button-toggle/testing.mjs +181 -0
- package/fesm2015/button-toggle/testing.mjs.map +1 -0
- package/fesm2015/button-toggle.mjs +502 -0
- package/fesm2015/button-toggle.mjs.map +1 -0
- package/fesm2015/button.mjs +202 -0
- package/fesm2015/button.mjs.map +1 -0
- package/fesm2015/card/testing.mjs +64 -0
- package/fesm2015/card/testing.mjs.map +1 -0
- package/fesm2015/card.mjs +322 -0
- package/fesm2015/card.mjs.map +1 -0
- package/fesm2015/checkbox/testing.mjs +168 -0
- package/fesm2015/checkbox/testing.mjs.map +1 -0
- package/fesm2015/checkbox.mjs +503 -0
- package/fesm2015/checkbox.mjs.map +1 -0
- package/fesm2015/chips/testing.mjs +423 -0
- package/fesm2015/chips/testing.mjs.map +1 -0
- package/fesm2015/chips.mjs +1354 -0
- package/fesm2015/chips.mjs.map +1 -0
- package/fesm2015/core/testing.mjs +120 -0
- package/fesm2015/core/testing.mjs.map +1 -0
- package/fesm2015/core.mjs +1719 -0
- package/fesm2015/core.mjs.map +1 -0
- package/fesm2015/datepicker/testing.mjs +635 -0
- package/fesm2015/datepicker/testing.mjs.map +1 -0
- package/fesm2015/datepicker.mjs +3948 -0
- package/fesm2015/datepicker.mjs.map +1 -0
- package/fesm2015/dialog/testing.mjs +119 -0
- package/fesm2015/dialog/testing.mjs.map +1 -0
- package/fesm2015/dialog.mjs +1155 -0
- package/fesm2015/dialog.mjs.map +1 -0
- package/fesm2015/divider/testing.mjs +39 -0
- package/fesm2015/divider/testing.mjs.map +1 -0
- package/fesm2015/divider.mjs +77 -0
- package/fesm2015/divider.mjs.map +1 -0
- package/fesm2015/expansion/testing.mjs +187 -0
- package/fesm2015/expansion/testing.mjs.map +1 -0
- package/fesm2015/expansion.mjs +641 -0
- package/fesm2015/expansion.mjs.map +1 -0
- package/fesm2015/form-field/testing/control.mjs +26 -0
- package/fesm2015/form-field/testing/control.mjs.map +1 -0
- package/fesm2015/form-field/testing.mjs +231 -0
- package/fesm2015/form-field/testing.mjs.map +1 -0
- package/fesm2015/form-field.mjs +814 -0
- package/fesm2015/form-field.mjs.map +1 -0
- package/fesm2015/grid-list/testing.mjs +161 -0
- package/fesm2015/grid-list/testing.mjs.map +1 -0
- package/fesm2015/grid-list.mjs +700 -0
- package/fesm2015/grid-list.mjs.map +1 -0
- package/fesm2015/icon/testing.mjs +163 -0
- package/fesm2015/icon/testing.mjs.map +1 -0
- package/fesm2015/icon.mjs +1016 -0
- package/fesm2015/icon.mjs.map +1 -0
- package/fesm2015/input/testing.mjs +281 -0
- package/fesm2015/input/testing.mjs.map +1 -0
- package/fesm2015/input.mjs +515 -0
- package/fesm2015/input.mjs.map +1 -0
- package/fesm2015/list/testing.mjs +486 -0
- package/fesm2015/list/testing.mjs.map +1 -0
- package/fesm2015/list.mjs +908 -0
- package/fesm2015/list.mjs.map +1 -0
- package/fesm2015/material.mjs +16 -0
- package/fesm2015/material.mjs.map +1 -0
- package/fesm2015/menu/testing.mjs +235 -0
- package/fesm2015/menu/testing.mjs.map +1 -0
- package/fesm2015/menu.mjs +1363 -0
- package/fesm2015/menu.mjs.map +1 -0
- package/fesm2015/paginator/testing.mjs +118 -0
- package/fesm2015/paginator/testing.mjs.map +1 -0
- package/fesm2015/paginator.mjs +387 -0
- package/fesm2015/paginator.mjs.map +1 -0
- package/fesm2015/progress-bar/testing.mjs +51 -0
- package/fesm2015/progress-bar/testing.mjs.map +1 -0
- package/fesm2015/progress-bar.mjs +225 -0
- package/fesm2015/progress-bar.mjs.map +1 -0
- package/fesm2015/progress-spinner/testing.mjs +52 -0
- package/fesm2015/progress-spinner/testing.mjs.map +1 -0
- package/fesm2015/progress-spinner.mjs +330 -0
- package/fesm2015/progress-spinner.mjs.map +1 -0
- package/fesm2015/radio/testing.mjs +284 -0
- package/fesm2015/radio/testing.mjs.map +1 -0
- package/fesm2015/radio.mjs +599 -0
- package/fesm2015/radio.mjs.map +1 -0
- package/fesm2015/select/testing.mjs +169 -0
- package/fesm2015/select/testing.mjs.map +1 -0
- package/fesm2015/select.mjs +1346 -0
- package/fesm2015/select.mjs.map +1 -0
- package/fesm2015/sidenav/testing.mjs +195 -0
- package/fesm2015/sidenav/testing.mjs.map +1 -0
- package/fesm2015/sidenav.mjs +1013 -0
- package/fesm2015/sidenav.mjs.map +1 -0
- package/fesm2015/slide-toggle/testing.mjs +151 -0
- package/fesm2015/slide-toggle/testing.mjs.map +1 -0
- package/fesm2015/slide-toggle.mjs +359 -0
- package/fesm2015/slide-toggle.mjs.map +1 -0
- package/fesm2015/slider/testing.mjs +153 -0
- package/fesm2015/slider/testing.mjs.map +1 -0
- package/fesm2015/slider.mjs +830 -0
- package/fesm2015/slider.mjs.map +1 -0
- package/fesm2015/snack-bar/testing.mjs +153 -0
- package/fesm2015/snack-bar/testing.mjs.map +1 -0
- package/fesm2015/snack-bar.mjs +698 -0
- package/fesm2015/snack-bar.mjs.map +1 -0
- package/fesm2015/sort/testing.mjs +110 -0
- package/fesm2015/sort/testing.mjs.map +1 -0
- package/fesm2015/sort.mjs +605 -0
- package/fesm2015/sort.mjs.map +1 -0
- package/fesm2015/stepper/testing.mjs +216 -0
- package/fesm2015/stepper/testing.mjs.map +1 -0
- package/fesm2015/stepper.mjs +579 -0
- package/fesm2015/stepper.mjs.map +1 -0
- package/fesm2015/table/testing.mjs +259 -0
- package/fesm2015/table/testing.mjs.map +1 -0
- package/fesm2015/table.mjs +817 -0
- package/fesm2015/table.mjs.map +1 -0
- package/fesm2015/tabs/testing.mjs +245 -0
- package/fesm2015/tabs/testing.mjs.map +1 -0
- package/fesm2015/tabs.mjs +1846 -0
- package/fesm2015/tabs.mjs.map +1 -0
- package/fesm2015/toolbar/testing.mjs +59 -0
- package/fesm2015/toolbar/testing.mjs.map +1 -0
- package/fesm2015/toolbar.mjs +118 -0
- package/fesm2015/toolbar.mjs.map +1 -0
- package/fesm2015/tooltip/testing.mjs +80 -0
- package/fesm2015/tooltip/testing.mjs.map +1 -0
- package/fesm2015/tooltip.mjs +820 -0
- package/fesm2015/tooltip.mjs.map +1 -0
- package/fesm2015/tree/testing.mjs +215 -0
- package/fesm2015/tree/testing.mjs.map +1 -0
- package/fesm2015/tree.mjs +520 -0
- package/fesm2015/tree.mjs.map +1 -0
- package/fesm2020/autocomplete/testing.mjs +128 -0
- package/fesm2020/autocomplete/testing.mjs.map +1 -0
- package/fesm2020/autocomplete.mjs +958 -0
- package/fesm2020/autocomplete.mjs.map +1 -0
- package/fesm2020/badge/testing.mjs +99 -0
- package/fesm2020/badge/testing.mjs.map +1 -0
- package/fesm2020/badge.mjs +271 -0
- package/fesm2020/badge.mjs.map +1 -0
- package/fesm2020/bottom-sheet/testing.mjs +62 -0
- package/fesm2020/bottom-sheet/testing.mjs.map +1 -0
- package/fesm2020/bottom-sheet.mjs +592 -0
- package/fesm2020/bottom-sheet.mjs.map +1 -0
- package/fesm2020/button/testing.mjs +78 -0
- package/fesm2020/button/testing.mjs.map +1 -0
- package/fesm2020/button-toggle/testing.mjs +176 -0
- package/fesm2020/button-toggle/testing.mjs.map +1 -0
- package/fesm2020/button-toggle.mjs +505 -0
- package/fesm2020/button-toggle.mjs.map +1 -0
- package/fesm2020/button.mjs +205 -0
- package/fesm2020/button.mjs.map +1 -0
- package/fesm2020/card/testing.mjs +70 -0
- package/fesm2020/card/testing.mjs.map +1 -0
- package/fesm2020/card.mjs +320 -0
- package/fesm2020/card.mjs.map +1 -0
- package/fesm2020/checkbox/testing.mjs +150 -0
- package/fesm2020/checkbox/testing.mjs.map +1 -0
- package/fesm2020/checkbox.mjs +507 -0
- package/fesm2020/checkbox.mjs.map +1 -0
- package/fesm2020/chips/testing.mjs +398 -0
- package/fesm2020/chips/testing.mjs.map +1 -0
- package/fesm2020/chips.mjs +1346 -0
- package/fesm2020/chips.mjs.map +1 -0
- package/fesm2020/core/testing.mjs +131 -0
- package/fesm2020/core/testing.mjs.map +1 -0
- package/fesm2020/core.mjs +1731 -0
- package/fesm2020/core.mjs.map +1 -0
- package/fesm2020/datepicker/testing.mjs +572 -0
- package/fesm2020/datepicker/testing.mjs.map +1 -0
- package/fesm2020/datepicker.mjs +3921 -0
- package/fesm2020/datepicker.mjs.map +1 -0
- package/fesm2020/dialog/testing.mjs +110 -0
- package/fesm2020/dialog/testing.mjs.map +1 -0
- package/fesm2020/dialog.mjs +1147 -0
- package/fesm2020/dialog.mjs.map +1 -0
- package/fesm2020/divider/testing.mjs +49 -0
- package/fesm2020/divider/testing.mjs.map +1 -0
- package/fesm2020/divider.mjs +77 -0
- package/fesm2020/divider.mjs.map +1 -0
- package/fesm2020/expansion/testing.mjs +176 -0
- package/fesm2020/expansion/testing.mjs.map +1 -0
- package/fesm2020/expansion.mjs +644 -0
- package/fesm2020/expansion.mjs.map +1 -0
- package/fesm2020/form-field/testing/control.mjs +26 -0
- package/fesm2020/form-field/testing/control.mjs.map +1 -0
- package/fesm2020/form-field/testing.mjs +209 -0
- package/fesm2020/form-field/testing.mjs.map +1 -0
- package/fesm2020/form-field.mjs +817 -0
- package/fesm2020/form-field.mjs.map +1 -0
- package/fesm2020/grid-list/testing.mjs +162 -0
- package/fesm2020/grid-list/testing.mjs.map +1 -0
- package/fesm2020/grid-list.mjs +696 -0
- package/fesm2020/grid-list.mjs.map +1 -0
- package/fesm2020/icon/testing.mjs +169 -0
- package/fesm2020/icon/testing.mjs.map +1 -0
- package/fesm2020/icon.mjs +1010 -0
- package/fesm2020/icon.mjs.map +1 -0
- package/fesm2020/input/testing.mjs +265 -0
- package/fesm2020/input/testing.mjs.map +1 -0
- package/fesm2020/input.mjs +512 -0
- package/fesm2020/input.mjs.map +1 -0
- package/fesm2020/list/testing.mjs +464 -0
- package/fesm2020/list/testing.mjs.map +1 -0
- package/fesm2020/list.mjs +901 -0
- package/fesm2020/list.mjs.map +1 -0
- package/fesm2020/material.mjs +16 -0
- package/fesm2020/material.mjs.map +1 -0
- package/fesm2020/menu/testing.mjs +210 -0
- package/fesm2020/menu/testing.mjs.map +1 -0
- package/fesm2020/menu.mjs +1365 -0
- package/fesm2020/menu.mjs.map +1 -0
- package/fesm2020/paginator/testing.mjs +118 -0
- package/fesm2020/paginator/testing.mjs.map +1 -0
- package/fesm2020/paginator.mjs +385 -0
- package/fesm2020/paginator.mjs.map +1 -0
- package/fesm2020/progress-bar/testing.mjs +61 -0
- package/fesm2020/progress-bar/testing.mjs.map +1 -0
- package/fesm2020/progress-bar.mjs +223 -0
- package/fesm2020/progress-bar.mjs.map +1 -0
- package/fesm2020/progress-spinner/testing.mjs +62 -0
- package/fesm2020/progress-spinner/testing.mjs.map +1 -0
- package/fesm2020/progress-spinner.mjs +326 -0
- package/fesm2020/progress-spinner.mjs.map +1 -0
- package/fesm2020/radio/testing.mjs +258 -0
- package/fesm2020/radio/testing.mjs.map +1 -0
- package/fesm2020/radio.mjs +604 -0
- package/fesm2020/radio.mjs.map +1 -0
- package/fesm2020/select/testing.mjs +157 -0
- package/fesm2020/select/testing.mjs.map +1 -0
- package/fesm2020/select.mjs +1338 -0
- package/fesm2020/select.mjs.map +1 -0
- package/fesm2020/sidenav/testing.mjs +214 -0
- package/fesm2020/sidenav/testing.mjs.map +1 -0
- package/fesm2020/sidenav.mjs +1004 -0
- package/fesm2020/sidenav.mjs.map +1 -0
- package/fesm2020/slide-toggle/testing.mjs +137 -0
- package/fesm2020/slide-toggle/testing.mjs.map +1 -0
- package/fesm2020/slide-toggle.mjs +364 -0
- package/fesm2020/slide-toggle.mjs.map +1 -0
- package/fesm2020/slider/testing.mjs +133 -0
- package/fesm2020/slider/testing.mjs.map +1 -0
- package/fesm2020/slider.mjs +835 -0
- package/fesm2020/slider.mjs.map +1 -0
- package/fesm2020/snack-bar/testing.mjs +145 -0
- package/fesm2020/snack-bar/testing.mjs.map +1 -0
- package/fesm2020/snack-bar.mjs +701 -0
- package/fesm2020/snack-bar.mjs.map +1 -0
- package/fesm2020/sort/testing.mjs +109 -0
- package/fesm2020/sort/testing.mjs.map +1 -0
- package/fesm2020/sort.mjs +609 -0
- package/fesm2020/sort.mjs.map +1 -0
- package/fesm2020/stepper/testing.mjs +206 -0
- package/fesm2020/stepper/testing.mjs.map +1 -0
- package/fesm2020/stepper.mjs +589 -0
- package/fesm2020/stepper.mjs.map +1 -0
- package/fesm2020/table/testing.mjs +259 -0
- package/fesm2020/table/testing.mjs.map +1 -0
- package/fesm2020/table.mjs +814 -0
- package/fesm2020/table.mjs.map +1 -0
- package/fesm2020/tabs/testing.mjs +234 -0
- package/fesm2020/tabs/testing.mjs.map +1 -0
- package/fesm2020/tabs.mjs +1829 -0
- package/fesm2020/tabs.mjs.map +1 -0
- package/fesm2020/toolbar/testing.mjs +67 -0
- package/fesm2020/toolbar/testing.mjs.map +1 -0
- package/fesm2020/toolbar.mjs +123 -0
- package/fesm2020/toolbar.mjs.map +1 -0
- package/fesm2020/tooltip/testing.mjs +84 -0
- package/fesm2020/tooltip/testing.mjs.map +1 -0
- package/fesm2020/tooltip.mjs +815 -0
- package/fesm2020/tooltip.mjs.map +1 -0
- package/fesm2020/tree/testing.mjs +217 -0
- package/fesm2020/tree/testing.mjs.map +1 -0
- package/fesm2020/tree.mjs +514 -0
- package/fesm2020/tree.mjs.map +1 -0
- package/form-field/error.d.ts +3 -0
- package/form-field/form-field-control.d.ts +3 -0
- package/form-field/form-field-module.d.ts +14 -7
- package/form-field/form-field.d.ts +4 -1
- package/form-field/hint.d.ts +3 -0
- package/form-field/label.d.ts +3 -7
- package/form-field/package.json +5 -5
- package/form-field/placeholder.d.ts +3 -7
- package/form-field/prefix.d.ts +3 -0
- package/form-field/suffix.d.ts +3 -0
- package/form-field/testing/control/package.json +5 -5
- package/form-field/testing/package.json +5 -5
- package/grid-list/grid-list-module.d.ts +7 -7
- package/grid-list/grid-list.d.ts +3 -0
- package/grid-list/grid-tile.d.ts +11 -0
- package/grid-list/index.d.ts +0 -1
- package/grid-list/package.json +5 -5
- package/grid-list/testing/package.json +5 -5
- package/icon/icon-module.d.ts +6 -7
- package/icon/icon-registry.d.ts +3 -7
- package/icon/icon.d.ts +4 -1
- package/icon/package.json +5 -5
- package/icon/testing/fake-icon-registry.d.ts +6 -0
- package/icon/testing/package.json +5 -5
- package/input/input-module.d.ts +8 -7
- package/input/input.d.ts +4 -1
- package/input/package.json +5 -5
- package/input/testing/package.json +5 -5
- package/list/list-module.d.ts +9 -7
- package/list/list.d.ts +15 -2
- package/list/package.json +5 -5
- package/list/selection-list.d.ts +7 -2
- package/list/testing/package.json +5 -5
- package/menu/index.d.ts +0 -2
- package/menu/menu-content.d.ts +5 -7
- package/menu/menu-item.d.ts +4 -1
- package/menu/menu-module.d.ts +12 -7
- package/menu/menu-trigger.d.ts +5 -0
- package/menu/menu.d.ts +5 -0
- package/menu/package.json +5 -5
- package/menu/testing/package.json +5 -5
- package/package.json +612 -8
- package/paginator/package.json +5 -5
- package/paginator/paginator-intl.d.ts +3 -0
- package/paginator/paginator-module.d.ts +10 -7
- package/paginator/paginator.d.ts +6 -1
- package/paginator/testing/package.json +5 -5
- package/progress-bar/package.json +5 -5
- package/progress-bar/progress-bar-module.d.ts +7 -7
- package/progress-bar/progress-bar.d.ts +4 -1
- package/progress-bar/testing/package.json +5 -5
- package/progress-spinner/package.json +5 -5
- package/progress-spinner/progress-spinner-module.d.ts +7 -0
- package/progress-spinner/progress-spinner.d.ts +6 -1
- package/progress-spinner/testing/package.json +5 -5
- package/radio/package.json +5 -5
- package/radio/radio-module.d.ts +6 -7
- package/radio/radio.d.ts +10 -1
- package/radio/testing/package.json +5 -5
- package/schematics/ng-add/fonts/material-fonts.js +8 -17
- package/schematics/ng-add/fonts/material-fonts.mjs +8 -17
- package/schematics/ng-add/index.js +8 -8
- package/schematics/ng-add/index.mjs +8 -8
- package/schematics/ng-add/setup-project.js +23 -32
- package/schematics/ng-add/setup-project.mjs +23 -32
- package/schematics/ng-add/theming/create-custom-theme.js +2 -2
- package/schematics/ng-add/theming/create-custom-theme.mjs +2 -2
- package/schematics/ng-add/theming/theming.js +35 -46
- package/schematics/ng-add/theming/theming.mjs +35 -46
- package/schematics/ng-generate/address-form/index.js +13 -22
- package/schematics/ng-generate/address-form/index.mjs +13 -22
- package/schematics/ng-generate/dashboard/index.js +13 -22
- package/schematics/ng-generate/dashboard/index.mjs +13 -22
- package/schematics/ng-generate/navigation/index.js +13 -22
- package/schematics/ng-generate/navigation/index.mjs +13 -22
- package/schematics/ng-generate/table/index.js +10 -19
- package/schematics/ng-generate/table/index.mjs +10 -19
- package/schematics/ng-generate/tree/index.js +10 -19
- package/schematics/ng-generate/tree/index.mjs +10 -19
- package/schematics/ng-update/index.js +9 -9
- package/schematics/ng-update/index.mjs +9 -9
- package/schematics/ng-update/migrations/hammer-gestures-v9/hammer-gestures-migration.js +24 -24
- package/schematics/ng-update/migrations/hammer-gestures-v9/hammer-gestures-migration.mjs +24 -24
- package/schematics/ng-update/migrations/hammer-gestures-v9/import-manager.js +5 -5
- package/schematics/ng-update/migrations/hammer-gestures-v9/import-manager.mjs +5 -5
- package/schematics/ng-update/migrations/misc-checks/misc-class-inheritance.js +2 -2
- package/schematics/ng-update/migrations/misc-checks/misc-class-inheritance.mjs +2 -2
- package/schematics/ng-update/migrations/misc-checks/misc-imports.js +2 -2
- package/schematics/ng-update/migrations/misc-checks/misc-imports.mjs +2 -2
- package/schematics/ng-update/migrations/misc-checks/misc-template.js +4 -4
- package/schematics/ng-update/migrations/misc-checks/misc-template.mjs +4 -4
- package/schematics/ng-update/migrations/misc-ripples-v7/ripple-speed-factor-migration.js +7 -7
- package/schematics/ng-update/migrations/misc-ripples-v7/ripple-speed-factor-migration.mjs +7 -7
- package/schematics/ng-update/migrations/package-imports-v8/secondary-entry-points-migration.js +2 -3
- package/schematics/ng-update/migrations/package-imports-v8/secondary-entry-points-migration.mjs +2 -3
- package/schematics/ng-update/migrations/theming-api-v12/migration.d.ts +6 -6
- package/schematics/ng-update/migrations/theming-api-v12/migration.js +12 -12
- package/schematics/ng-update/migrations/theming-api-v12/migration.mjs +12 -12
- package/schematics/ng-update/migrations/theming-api-v12/theming-api-migration.js +3 -3
- package/schematics/ng-update/migrations/theming-api-v12/theming-api-migration.mjs +3 -3
- package/schematics/ng-update/typescript/module-specifiers.js +3 -3
- package/schematics/ng-update/typescript/module-specifiers.mjs +3 -3
- package/schematics/package.json +3 -0
- package/schematics/paths.js +3 -3
- package/schematics/paths.mjs +3 -3
- package/select/package.json +5 -5
- package/select/select-module.d.ts +10 -7
- package/select/select.d.ts +8 -1
- package/select/testing/package.json +5 -5
- package/sidenav/drawer.d.ts +7 -0
- package/sidenav/index.d.ts +0 -1
- package/sidenav/package.json +5 -5
- package/sidenav/sidenav-module.d.ts +10 -0
- package/sidenav/sidenav.d.ts +7 -0
- package/sidenav/testing/package.json +5 -5
- package/slide-toggle/package.json +5 -5
- package/slide-toggle/slide-toggle-module.d.ts +11 -7
- package/slide-toggle/slide-toggle-required-validator.d.ts +3 -0
- package/slide-toggle/slide-toggle.d.ts +4 -1
- package/slide-toggle/testing/package.json +5 -5
- package/slider/package.json +5 -5
- package/slider/slider-module.d.ts +7 -7
- package/slider/slider.d.ts +4 -1
- package/slider/testing/package.json +5 -5
- package/snack-bar/package.json +5 -5
- package/snack-bar/simple-snack-bar.d.ts +3 -7
- package/snack-bar/snack-bar-container.d.ts +3 -0
- package/snack-bar/snack-bar-module.d.ts +11 -7
- package/snack-bar/snack-bar.d.ts +3 -0
- package/snack-bar/testing/package.json +5 -5
- package/sort/package.json +5 -5
- package/sort/sort-header-intl.d.ts +3 -0
- package/sort/sort-header.d.ts +4 -1
- package/sort/sort-module.d.ts +8 -7
- package/sort/sort.d.ts +4 -1
- package/sort/testing/package.json +5 -5
- package/stepper/package.json +5 -5
- package/stepper/step-content.d.ts +3 -0
- package/stepper/step-header.d.ts +6 -1
- package/stepper/step-label.d.ts +3 -7
- package/stepper/stepper-button.d.ts +5 -0
- package/stepper/stepper-icon.d.ts +3 -0
- package/stepper/stepper-intl.d.ts +7 -0
- package/stepper/stepper-module.d.ts +16 -7
- package/stepper/stepper.d.ts +11 -0
- package/stepper/testing/package.json +5 -5
- package/table/cell.d.ts +15 -7
- package/table/package.json +5 -5
- package/table/row.d.ts +15 -0
- package/table/table-module.d.ts +10 -7
- package/table/table.d.ts +5 -0
- package/table/testing/package.json +5 -5
- package/table/text-column.d.ts +3 -0
- package/tabs/index.d.ts +0 -4
- package/tabs/ink-bar.d.ts +3 -0
- package/tabs/package.json +5 -5
- package/tabs/paginated-tab-header.d.ts +3 -0
- package/tabs/tab-body.d.ts +7 -0
- package/tabs/tab-content.d.ts +3 -0
- package/tabs/tab-group.d.ts +6 -1
- package/tabs/tab-header.d.ts +5 -0
- package/tabs/tab-label-wrapper.d.ts +4 -1
- package/tabs/tab-label.d.ts +3 -0
- package/tabs/tab-nav-bar/tab-nav-bar.d.ts +10 -1
- package/tabs/tab.d.ts +4 -1
- package/tabs/tabs-module.d.ts +18 -7
- package/tabs/testing/package.json +5 -5
- package/toolbar/package.json +5 -5
- package/toolbar/testing/package.json +5 -5
- package/toolbar/toolbar-module.d.ts +6 -7
- package/toolbar/toolbar.d.ts +6 -1
- package/tooltip/package.json +5 -5
- package/tooltip/testing/package.json +5 -5
- package/tooltip/tooltip-module.d.ts +10 -7
- package/tooltip/tooltip.d.ts +11 -2
- package/tree/node.d.ts +8 -1
- package/tree/outlet.d.ts +3 -0
- package/tree/package.json +5 -5
- package/tree/padding.d.ts +3 -0
- package/tree/testing/package.json +5 -5
- package/tree/toggle.d.ts +3 -7
- package/tree/tree-module.d.ts +11 -7
- package/tree/tree.d.ts +3 -0
- package/autocomplete/index.metadata.json +0 -1
- package/badge/index.metadata.json +0 -1
- package/bottom-sheet/index.metadata.json +0 -1
- package/bundles/material-autocomplete-testing.umd.js +0 -564
- package/bundles/material-autocomplete-testing.umd.js.map +0 -1
- package/bundles/material-autocomplete.umd.js +0 -1266
- package/bundles/material-autocomplete.umd.js.map +0 -1
- package/bundles/material-badge-testing.umd.js +0 -474
- package/bundles/material-badge-testing.umd.js.map +0 -1
- package/bundles/material-badge.umd.js +0 -604
- package/bundles/material-badge.umd.js.map +0 -1
- package/bundles/material-bottom-sheet-testing.umd.js +0 -396
- package/bundles/material-bottom-sheet-testing.umd.js.map +0 -1
- package/bundles/material-bottom-sheet.umd.js +0 -948
- package/bundles/material-bottom-sheet.umd.js.map +0 -1
- package/bundles/material-button-testing.umd.js +0 -444
- package/bundles/material-button-testing.umd.js.map +0 -1
- package/bundles/material-button-toggle-testing.umd.js +0 -628
- package/bundles/material-button-toggle-testing.umd.js.map +0 -1
- package/bundles/material-button-toggle.umd.js +0 -850
- package/bundles/material-button-toggle.umd.js.map +0 -1
- package/bundles/material-button.umd.js +0 -545
- package/bundles/material-button.umd.js.map +0 -1
- package/bundles/material-card-testing.umd.js +0 -408
- package/bundles/material-card-testing.umd.js.map +0 -1
- package/bundles/material-card.umd.js +0 -337
- package/bundles/material-card.umd.js.map +0 -1
- package/bundles/material-checkbox-testing.umd.js +0 -615
- package/bundles/material-checkbox-testing.umd.js.map +0 -1
- package/bundles/material-checkbox.umd.js +0 -829
- package/bundles/material-checkbox.umd.js.map +0 -1
- package/bundles/material-chips-testing.umd.js +0 -1023
- package/bundles/material-chips-testing.umd.js.map +0 -1
- package/bundles/material-chips.umd.js +0 -1753
- package/bundles/material-chips.umd.js.map +0 -1
- package/bundles/material-core-testing.umd.js +0 -518
- package/bundles/material-core-testing.umd.js.map +0 -1
- package/bundles/material-core.umd.js +0 -2175
- package/bundles/material-core.umd.js.map +0 -1
- package/bundles/material-datepicker-testing.umd.js +0 -1366
- package/bundles/material-datepicker-testing.umd.js.map +0 -1
- package/bundles/material-datepicker.umd.js +0 -4332
- package/bundles/material-datepicker.umd.js.map +0 -1
- package/bundles/material-dialog-testing.umd.js +0 -500
- package/bundles/material-dialog-testing.umd.js.map +0 -1
- package/bundles/material-dialog.umd.js +0 -1487
- package/bundles/material-dialog.umd.js.map +0 -1
- package/bundles/material-divider-testing.umd.js +0 -380
- package/bundles/material-divider-testing.umd.js.map +0 -1
- package/bundles/material-divider.umd.js +0 -95
- package/bundles/material-divider.umd.js.map +0 -1
- package/bundles/material-expansion-testing.umd.js +0 -627
- package/bundles/material-expansion-testing.umd.js.map +0 -1
- package/bundles/material-expansion.umd.js +0 -949
- package/bundles/material-expansion.umd.js.map +0 -1
- package/bundles/material-form-field-testing-control.umd.js +0 -350
- package/bundles/material-form-field-testing-control.umd.js.map +0 -1
- package/bundles/material-form-field-testing.umd.js +0 -708
- package/bundles/material-form-field-testing.umd.js.map +0 -1
- package/bundles/material-form-field.umd.js +0 -1131
- package/bundles/material-form-field.umd.js.map +0 -1
- package/bundles/material-grid-list-testing.umd.js +0 -566
- package/bundles/material-grid-list-testing.umd.js.map +0 -1
- package/bundles/material-grid-list.umd.js +0 -1070
- package/bundles/material-grid-list.umd.js.map +0 -1
- package/bundles/material-icon-testing.umd.js +0 -527
- package/bundles/material-icon-testing.umd.js.map +0 -1
- package/bundles/material-icon.umd.js +0 -1391
- package/bundles/material-icon.umd.js.map +0 -1
- package/bundles/material-input-testing.umd.js +0 -806
- package/bundles/material-input-testing.umd.js.map +0 -1
- package/bundles/material-input.umd.js +0 -817
- package/bundles/material-input.umd.js.map +0 -1
- package/bundles/material-list-testing.umd.js +0 -1092
- package/bundles/material-list-testing.umd.js.map +0 -1
- package/bundles/material-list.umd.js +0 -1284
- package/bundles/material-list.umd.js.map +0 -1
- package/bundles/material-menu-testing.umd.js +0 -722
- package/bundles/material-menu-testing.umd.js.map +0 -1
- package/bundles/material-menu.umd.js +0 -1677
- package/bundles/material-menu.umd.js.map +0 -1
- package/bundles/material-paginator-testing.umd.js +0 -504
- package/bundles/material-paginator-testing.umd.js.map +0 -1
- package/bundles/material-paginator.umd.js +0 -746
- package/bundles/material-paginator.umd.js.map +0 -1
- package/bundles/material-progress-bar-testing.umd.js +0 -395
- package/bundles/material-progress-bar-testing.umd.js.map +0 -1
- package/bundles/material-progress-bar.umd.js +0 -546
- package/bundles/material-progress-bar.umd.js.map +0 -1
- package/bundles/material-progress-spinner-testing.umd.js +0 -399
- package/bundles/material-progress-spinner-testing.umd.js.map +0 -1
- package/bundles/material-progress-spinner.umd.js +0 -631
- package/bundles/material-progress-spinner.umd.js.map +0 -1
- package/bundles/material-radio-testing.umd.js +0 -812
- package/bundles/material-radio-testing.umd.js.map +0 -1
- package/bundles/material-radio.umd.js +0 -971
- package/bundles/material-radio.umd.js.map +0 -1
- package/bundles/material-select-testing.umd.js +0 -620
- package/bundles/material-select-testing.umd.js.map +0 -1
- package/bundles/material-select.umd.js +0 -1667
- package/bundles/material-select.umd.js.map +0 -1
- package/bundles/material-sidenav-testing.umd.js +0 -603
- package/bundles/material-sidenav-testing.umd.js.map +0 -1
- package/bundles/material-sidenav.umd.js +0 -1368
- package/bundles/material-sidenav.umd.js.map +0 -1
- package/bundles/material-slide-toggle-testing.umd.js +0 -582
- package/bundles/material-slide-toggle-testing.umd.js.map +0 -1
- package/bundles/material-slide-toggle.umd.js +0 -670
- package/bundles/material-slide-toggle.umd.js.map +0 -1
- package/bundles/material-slider-testing.umd.js +0 -587
- package/bundles/material-slider-testing.umd.js.map +0 -1
- package/bundles/material-slider.umd.js +0 -1186
- package/bundles/material-slider.umd.js.map +0 -1
- package/bundles/material-snack-bar-testing.umd.js +0 -553
- package/bundles/material-snack-bar-testing.umd.js.map +0 -1
- package/bundles/material-snack-bar.umd.js +0 -1075
- package/bundles/material-snack-bar.umd.js.map +0 -1
- package/bundles/material-sort-testing.umd.js +0 -493
- package/bundles/material-sort-testing.umd.js.map +0 -1
- package/bundles/material-sort.umd.js +0 -943
- package/bundles/material-sort.umd.js.map +0 -1
- package/bundles/material-stepper-testing.umd.js +0 -703
- package/bundles/material-stepper-testing.umd.js.map +0 -1
- package/bundles/material-stepper.umd.js +0 -893
- package/bundles/material-stepper.umd.js.map +0 -1
- package/bundles/material-table-testing.umd.js +0 -700
- package/bundles/material-table-testing.umd.js.map +0 -1
- package/bundles/material-table.umd.js +0 -1121
- package/bundles/material-table.umd.js.map +0 -1
- package/bundles/material-tabs-testing.umd.js +0 -744
- package/bundles/material-tabs-testing.umd.js.map +0 -1
- package/bundles/material-tabs.umd.js +0 -2183
- package/bundles/material-tabs.umd.js.map +0 -1
- package/bundles/material-toolbar-testing.umd.js +0 -406
- package/bundles/material-toolbar-testing.umd.js.map +0 -1
- package/bundles/material-toolbar.umd.js +0 -454
- package/bundles/material-toolbar.umd.js.map +0 -1
- package/bundles/material-tooltip-testing.umd.js +0 -460
- package/bundles/material-tooltip-testing.umd.js.map +0 -1
- package/bundles/material-tooltip.umd.js +0 -1170
- package/bundles/material-tooltip.umd.js.map +0 -1
- package/bundles/material-tree-testing.umd.js +0 -636
- package/bundles/material-tree-testing.umd.js.map +0 -1
- package/bundles/material-tree.umd.js +0 -837
- package/bundles/material-tree.umd.js.map +0 -1
- package/bundles/material.umd.js +0 -26
- package/bundles/material.umd.js.map +0 -1
- package/button/index.metadata.json +0 -1
- package/button-toggle/index.metadata.json +0 -1
- package/card/index.metadata.json +0 -1
- package/checkbox/index.metadata.json +0 -1
- package/chips/index.metadata.json +0 -1
- package/core/index.metadata.json +0 -1
- package/datepicker/index.metadata.json +0 -1
- package/dialog/index.metadata.json +0 -1
- package/divider/index.metadata.json +0 -1
- package/esm2015/autocomplete/autocomplete-module.js +0 -38
- package/esm2015/autocomplete/autocomplete-origin.js +0 -35
- package/esm2015/autocomplete/autocomplete-trigger.js +0 -627
- package/esm2015/autocomplete/autocomplete.externs.js +0 -6
- package/esm2015/autocomplete/autocomplete.js +0 -202
- package/esm2015/autocomplete/testing/autocomplete-harness.js +0 -120
- package/esm2015/autocomplete/testing/testing.externs.js +0 -0
- package/esm2015/badge/badge-module.js +0 -24
- package/esm2015/badge/badge.externs.js +0 -6
- package/esm2015/badge/badge.js +0 -213
- package/esm2015/badge/testing/badge-harness.js +0 -85
- package/esm2015/badge/testing/testing.externs.js +0 -0
- package/esm2015/bottom-sheet/bottom-sheet-container.js +0 -246
- package/esm2015/bottom-sheet/bottom-sheet-module.js +0 -27
- package/esm2015/bottom-sheet/bottom-sheet-ref.js +0 -91
- package/esm2015/bottom-sheet/bottom-sheet.externs.js +0 -6
- package/esm2015/bottom-sheet/bottom-sheet.js +0 -167
- package/esm2015/bottom-sheet/testing/bottom-sheet-harness.js +0 -40
- package/esm2015/bottom-sheet/testing/testing.externs.js +0 -0
- package/esm2015/button/button-module.js +0 -30
- package/esm2015/button/button.externs.js +0 -6
- package/esm2015/button/button.js +0 -163
- package/esm2015/button/testing/button-harness.js +0 -64
- package/esm2015/button/testing/testing.externs.js +0 -0
- package/esm2015/button-toggle/button-toggle-module.js +0 -20
- package/esm2015/button-toggle/button-toggle.externs.js +0 -6
- package/esm2015/button-toggle/button-toggle.js +0 -441
- package/esm2015/button-toggle/testing/button-toggle-group-harness.js +0 -54
- package/esm2015/button-toggle/testing/button-toggle-harness.js +0 -125
- package/esm2015/button-toggle/testing/testing.externs.js +0 -0
- package/esm2015/card/card-module.js +0 -40
- package/esm2015/card/card.externs.js +0 -6
- package/esm2015/card/card.js +0 -223
- package/esm2015/card/testing/card-harness.js +0 -52
- package/esm2015/card/testing/testing.externs.js +0 -0
- package/esm2015/checkbox/checkbox-module.js +0 -34
- package/esm2015/checkbox/checkbox-required-validator.js +0 -29
- package/esm2015/checkbox/checkbox.externs.js +0 -6
- package/esm2015/checkbox/checkbox.js +0 -385
- package/esm2015/checkbox/testing/checkbox-harness.js +0 -156
- package/esm2015/checkbox/testing/testing.externs.js +0 -0
- package/esm2015/chips/chip-input.js +0 -180
- package/esm2015/chips/chip-list.js +0 -663
- package/esm2015/chips/chip.js +0 -394
- package/esm2015/chips/chips-module.js +0 -43
- package/esm2015/chips/chips.externs.js +0 -6
- package/esm2015/chips/testing/chip-harness.js +0 -110
- package/esm2015/chips/testing/chip-input-harness.js +0 -101
- package/esm2015/chips/testing/chip-list-harness.js +0 -99
- package/esm2015/chips/testing/chip-listbox-harness.js +0 -49
- package/esm2015/chips/testing/chip-option-harness.js +0 -54
- package/esm2015/chips/testing/chip-remove-harness.js +0 -29
- package/esm2015/chips/testing/testing.externs.js +0 -0
- package/esm2015/core/common-behaviors/common-module.js +0 -113
- package/esm2015/core/common-behaviors/index.js +0 -15
- package/esm2015/core/core.externs.js +0 -6
- package/esm2015/core/datetime/index.js +0 -38
- package/esm2015/core/datetime/native-date-adapter.js +0 -213
- package/esm2015/core/error/error-options.js +0 -29
- package/esm2015/core/index.js +0 -6
- package/esm2015/core/line/line.js +0 -56
- package/esm2015/core/option/index.js +0 -27
- package/esm2015/core/option/optgroup.js +0 -84
- package/esm2015/core/option/option.js +0 -274
- package/esm2015/core/ripple/index.js +0 -24
- package/esm2015/core/ripple/ripple-renderer.js +0 -261
- package/esm2015/core/ripple/ripple.js +0 -128
- package/esm2015/core/selection/index.js +0 -21
- package/esm2015/core/selection/pseudo-checkbox/pseudo-checkbox.js +0 -55
- package/esm2015/core/testing/optgroup-harness.js +0 -51
- package/esm2015/core/testing/option-harness.js +0 -67
- package/esm2015/core/testing/testing.externs.js +0 -0
- package/esm2015/core/version.js +0 -11
- package/esm2015/datepicker/calendar-body.js +0 -291
- package/esm2015/datepicker/calendar.js +0 -330
- package/esm2015/datepicker/date-range-input-parts.js +0 -315
- package/esm2015/datepicker/date-range-input.js +0 -316
- package/esm2015/datepicker/date-range-picker.js +0 -40
- package/esm2015/datepicker/date-range-selection-strategy.js +0 -58
- package/esm2015/datepicker/date-selection-model.js +0 -189
- package/esm2015/datepicker/datepicker-actions.js +0 -89
- package/esm2015/datepicker/datepicker-base.js +0 -529
- package/esm2015/datepicker/datepicker-input-base.js +0 -290
- package/esm2015/datepicker/datepicker-input.js +0 -164
- package/esm2015/datepicker/datepicker-intl.js +0 -51
- package/esm2015/datepicker/datepicker-module.js +0 -93
- package/esm2015/datepicker/datepicker-toggle.js +0 -104
- package/esm2015/datepicker/datepicker.externs.js +0 -6
- package/esm2015/datepicker/datepicker.js +0 -30
- package/esm2015/datepicker/index.js +0 -9
- package/esm2015/datepicker/month-view.js +0 -344
- package/esm2015/datepicker/multi-year-view.js +0 -280
- package/esm2015/datepicker/testing/calendar-cell-harness.js +0 -181
- package/esm2015/datepicker/testing/calendar-harness.js +0 -91
- package/esm2015/datepicker/testing/date-range-input-harness.js +0 -116
- package/esm2015/datepicker/testing/datepicker-input-harness-base.js +0 -102
- package/esm2015/datepicker/testing/datepicker-input-harness.js +0 -69
- package/esm2015/datepicker/testing/datepicker-toggle-harness.js +0 -48
- package/esm2015/datepicker/testing/datepicker-trigger-harness-base.js +0 -77
- package/esm2015/datepicker/testing/testing.externs.js +0 -0
- package/esm2015/datepicker/year-view.js +0 -268
- package/esm2015/dialog/dialog-container.js +0 -295
- package/esm2015/dialog/dialog-content-directives.js +0 -159
- package/esm2015/dialog/dialog-module.js +0 -46
- package/esm2015/dialog/dialog-ref.js +0 -196
- package/esm2015/dialog/dialog.externs.js +0 -6
- package/esm2015/dialog/dialog.js +0 -353
- package/esm2015/dialog/testing/dialog-harness.js +0 -103
- package/esm2015/dialog/testing/testing.externs.js +0 -0
- package/esm2015/divider/divider-module.js +0 -20
- package/esm2015/divider/divider.externs.js +0 -6
- package/esm2015/divider/divider.js +0 -43
- package/esm2015/divider/testing/divider-harness.js +0 -27
- package/esm2015/divider/testing/testing.externs.js +0 -0
- package/esm2015/expansion/accordion.js +0 -83
- package/esm2015/expansion/expansion-module.js +0 -42
- package/esm2015/expansion/expansion-panel-content.js +0 -26
- package/esm2015/expansion/expansion-panel-header.js +0 -214
- package/esm2015/expansion/expansion-panel.js +0 -186
- package/esm2015/expansion/expansion.externs.js +0 -6
- package/esm2015/expansion/testing/accordion-harness.js +0 -36
- package/esm2015/expansion/testing/expansion-harness.js +0 -149
- package/esm2015/expansion/testing/testing.externs.js +0 -0
- package/esm2015/form-field/error.js +0 -45
- package/esm2015/form-field/form-field-control.js +0 -15
- package/esm2015/form-field/form-field-module.js +0 -49
- package/esm2015/form-field/form-field.externs.js +0 -6
- package/esm2015/form-field/form-field.js +0 -482
- package/esm2015/form-field/hint.js +0 -45
- package/esm2015/form-field/label.js +0 -17
- package/esm2015/form-field/placeholder.js +0 -22
- package/esm2015/form-field/prefix.js +0 -24
- package/esm2015/form-field/suffix.js +0 -24
- package/esm2015/form-field/testing/control/control.externs.js +0 -0
- package/esm2015/form-field/testing/form-field-harness.js +0 -218
- package/esm2015/form-field/testing/testing.externs.js +0 -0
- package/esm2015/grid-list/grid-list-module.js +0 -37
- package/esm2015/grid-list/grid-list.externs.js +0 -6
- package/esm2015/grid-list/grid-list.js +0 -135
- package/esm2015/grid-list/grid-tile.js +0 -116
- package/esm2015/grid-list/index.js +0 -6
- package/esm2015/grid-list/testing/grid-list-harness.js +0 -79
- package/esm2015/grid-list/testing/grid-tile-harness.js +0 -80
- package/esm2015/grid-list/testing/testing.externs.js +0 -0
- package/esm2015/icon/icon-module.js +0 -20
- package/esm2015/icon/icon-registry.js +0 -581
- package/esm2015/icon/icon.externs.js +0 -6
- package/esm2015/icon/icon.js +0 -362
- package/esm2015/icon/testing/fake-icon-registry.js +0 -85
- package/esm2015/icon/testing/icon-harness.js +0 -63
- package/esm2015/icon/testing/testing.externs.js +0 -6
- package/esm2015/icon/trusted-types.js +0 -44
- package/esm2015/input/input-module.js +0 -33
- package/esm2015/input/input.externs.js +0 -6
- package/esm2015/input/input.js +0 -395
- package/esm2015/input/testing/input-harness.js +0 -138
- package/esm2015/input/testing/native-option-harness.js +0 -51
- package/esm2015/input/testing/native-select-harness.js +0 -100
- package/esm2015/input/testing/testing.externs.js +0 -0
- package/esm2015/list/list-module.js +0 -45
- package/esm2015/list/list.externs.js +0 -6
- package/esm2015/list/list.js +0 -218
- package/esm2015/list/selection-list.js +0 -608
- package/esm2015/list/testing/action-list-harness.js +0 -68
- package/esm2015/list/testing/list-harness-base.js +0 -97
- package/esm2015/list/testing/list-item-harness-base.js +0 -85
- package/esm2015/list/testing/nav-list-harness.js +0 -75
- package/esm2015/list/testing/selection-list-harness.js +0 -152
- package/esm2015/list/testing/testing.externs.js +0 -0
- package/esm2015/material.externs.js +0 -0
- package/esm2015/menu/index.js +0 -7
- package/esm2015/menu/menu-content.js +0 -97
- package/esm2015/menu/menu-item.js +0 -164
- package/esm2015/menu/menu-module.js +0 -39
- package/esm2015/menu/menu-trigger.js +0 -505
- package/esm2015/menu/menu.externs.js +0 -6
- package/esm2015/menu/menu.js +0 -381
- package/esm2015/menu/testing/menu-harness.js +0 -223
- package/esm2015/menu/testing/testing.externs.js +0 -0
- package/esm2015/paginator/paginator-intl.js +0 -62
- package/esm2015/paginator/paginator-module.js +0 -32
- package/esm2015/paginator/paginator.externs.js +0 -6
- package/esm2015/paginator/paginator.js +0 -263
- package/esm2015/paginator/testing/paginator-harness.js +0 -106
- package/esm2015/paginator/testing/testing.externs.js +0 -0
- package/esm2015/progress-bar/progress-bar-module.js +0 -21
- package/esm2015/progress-bar/progress-bar.externs.js +0 -6
- package/esm2015/progress-bar/progress-bar.js +0 -179
- package/esm2015/progress-bar/testing/progress-bar-harness.js +0 -39
- package/esm2015/progress-bar/testing/testing.externs.js +0 -0
- package/esm2015/progress-spinner/progress-spinner-module.js +0 -28
- package/esm2015/progress-spinner/progress-spinner.externs.js +0 -6
- package/esm2015/progress-spinner/progress-spinner.js +0 -274
- package/esm2015/progress-spinner/testing/progress-spinner-harness.js +0 -40
- package/esm2015/progress-spinner/testing/testing.externs.js +0 -0
- package/esm2015/radio/radio-module.js +0 -20
- package/esm2015/radio/radio.externs.js +0 -6
- package/esm2015/radio/radio.js +0 -546
- package/esm2015/radio/testing/radio-harness.js +0 -272
- package/esm2015/radio/testing/testing.externs.js +0 -0
- package/esm2015/select/select-module.js +0 -37
- package/esm2015/select/select.externs.js +0 -6
- package/esm2015/select/select.js +0 -1140
- package/esm2015/select/testing/select-harness.js +0 -157
- package/esm2015/select/testing/testing.externs.js +0 -0
- package/esm2015/sidenav/drawer.js +0 -766
- package/esm2015/sidenav/index.js +0 -6
- package/esm2015/sidenav/sidenav-module.js +0 -45
- package/esm2015/sidenav/sidenav.externs.js +0 -6
- package/esm2015/sidenav/sidenav.js +0 -118
- package/esm2015/sidenav/testing/drawer-container-harness.js +0 -41
- package/esm2015/sidenav/testing/drawer-harness.js +0 -57
- package/esm2015/sidenav/testing/sidenav-container-harness.js +0 -41
- package/esm2015/sidenav/testing/sidenav-harness.js +0 -32
- package/esm2015/sidenav/testing/testing.externs.js +0 -0
- package/esm2015/slide-toggle/slide-toggle-module.js +0 -40
- package/esm2015/slide-toggle/slide-toggle-required-validator.js +0 -32
- package/esm2015/slide-toggle/slide-toggle.externs.js +0 -6
- package/esm2015/slide-toggle/slide-toggle.js +0 -236
- package/esm2015/slide-toggle/testing/slide-toggle-harness.js +0 -139
- package/esm2015/slide-toggle/testing/testing.externs.js +0 -0
- package/esm2015/slider/slider-module.js +0 -21
- package/esm2015/slider/slider.externs.js +0 -6
- package/esm2015/slider/slider.js +0 -788
- package/esm2015/slider/testing/slider-harness.js +0 -141
- package/esm2015/slider/testing/testing.externs.js +0 -0
- package/esm2015/snack-bar/simple-snack-bar.js +0 -45
- package/esm2015/snack-bar/snack-bar-container.js +0 -224
- package/esm2015/snack-bar/snack-bar-module.js +0 -32
- package/esm2015/snack-bar/snack-bar-ref.js +0 -90
- package/esm2015/snack-bar/snack-bar.externs.js +0 -6
- package/esm2015/snack-bar/snack-bar.js +0 -264
- package/esm2015/snack-bar/testing/snack-bar-harness.js +0 -141
- package/esm2015/snack-bar/testing/testing.externs.js +0 -0
- package/esm2015/sort/sort-header-intl.js +0 -41
- package/esm2015/sort/sort-header.js +0 -268
- package/esm2015/sort/sort-module.js +0 -24
- package/esm2015/sort/sort.externs.js +0 -6
- package/esm2015/sort/sort.js +0 -140
- package/esm2015/sort/testing/sort-harness.js +0 -41
- package/esm2015/sort/testing/sort-header-harness.js +0 -67
- package/esm2015/sort/testing/testing.externs.js +0 -0
- package/esm2015/stepper/step-content.js +0 -25
- package/esm2015/stepper/step-header.js +0 -108
- package/esm2015/stepper/step-label.js +0 -17
- package/esm2015/stepper/stepper-button.js +0 -36
- package/esm2015/stepper/stepper-icon.js +0 -28
- package/esm2015/stepper/stepper-intl.js +0 -37
- package/esm2015/stepper/stepper-module.js +0 -61
- package/esm2015/stepper/stepper.externs.js +0 -6
- package/esm2015/stepper/stepper.js +0 -187
- package/esm2015/stepper/testing/step-harness.js +0 -111
- package/esm2015/stepper/testing/stepper-button-harnesses.js +0 -55
- package/esm2015/stepper/testing/stepper-harness.js +0 -57
- package/esm2015/stepper/testing/testing.externs.js +0 -0
- package/esm2015/table/cell.js +0 -114
- package/esm2015/table/row.js +0 -116
- package/esm2015/table/table-data-source.js +0 -312
- package/esm2015/table/table-module.js +0 -50
- package/esm2015/table/table.externs.js +0 -6
- package/esm2015/table/table.js +0 -63
- package/esm2015/table/testing/cell-harness.js +0 -77
- package/esm2015/table/testing/row-harness.js +0 -91
- package/esm2015/table/testing/table-harness.js +0 -99
- package/esm2015/table/testing/testing.externs.js +0 -0
- package/esm2015/table/text-column.js +0 -44
- package/esm2015/tabs/index.js +0 -9
- package/esm2015/tabs/ink-bar.js +0 -87
- package/esm2015/tabs/paginated-tab-header.js +0 -477
- package/esm2015/tabs/tab-body.js +0 -212
- package/esm2015/tabs/tab-content.js +0 -31
- package/esm2015/tabs/tab-group.js +0 -357
- package/esm2015/tabs/tab-header.js +0 -94
- package/esm2015/tabs/tab-label-wrapper.js +0 -47
- package/esm2015/tabs/tab-label.js +0 -39
- package/esm2015/tabs/tab-nav-bar/tab-nav-bar.js +0 -241
- package/esm2015/tabs/tab.js +0 -107
- package/esm2015/tabs/tabs-module.js +0 -60
- package/esm2015/tabs/tabs.externs.js +0 -6
- package/esm2015/tabs/testing/tab-group-harness.js +0 -65
- package/esm2015/tabs/testing/tab-harness.js +0 -85
- package/esm2015/tabs/testing/tab-link-harness.js +0 -51
- package/esm2015/tabs/testing/tab-nav-bar-harness.js +0 -61
- package/esm2015/tabs/testing/testing.externs.js +0 -0
- package/esm2015/toolbar/testing/testing.externs.js +0 -0
- package/esm2015/toolbar/testing/toolbar-harness.js +0 -47
- package/esm2015/toolbar/toolbar-module.js +0 -20
- package/esm2015/toolbar/toolbar.externs.js +0 -6
- package/esm2015/toolbar/toolbar.js +0 -91
- package/esm2015/tooltip/testing/testing.externs.js +0 -0
- package/esm2015/tooltip/testing/tooltip-harness.js +0 -68
- package/esm2015/tooltip/tooltip-module.js +0 -31
- package/esm2015/tooltip/tooltip.externs.js +0 -6
- package/esm2015/tooltip/tooltip.js +0 -737
- package/esm2015/tree/node.js +0 -131
- package/esm2015/tree/outlet.js +0 -33
- package/esm2015/tree/padding.js +0 -31
- package/esm2015/tree/testing/node-harness.js +0 -84
- package/esm2015/tree/testing/testing.externs.js +0 -0
- package/esm2015/tree/testing/tree-harness.js +0 -129
- package/esm2015/tree/toggle.js +0 -32
- package/esm2015/tree/tree-module.js +0 -34
- package/esm2015/tree/tree.externs.js +0 -6
- package/esm2015/tree/tree.js +0 -43
- package/expansion/index.metadata.json +0 -1
- package/fesm2015/autocomplete/testing.js +0 -147
- package/fesm2015/autocomplete/testing.js.map +0 -1
- package/fesm2015/autocomplete.js +0 -901
- package/fesm2015/autocomplete.js.map +0 -1
- package/fesm2015/badge/testing.js +0 -112
- package/fesm2015/badge/testing.js.map +0 -1
- package/fesm2015/badge.js +0 -248
- package/fesm2015/badge.js.map +0 -1
- package/fesm2015/bottom-sheet/testing.js +0 -67
- package/fesm2015/bottom-sheet/testing.js.map +0 -1
- package/fesm2015/bottom-sheet.js +0 -596
- package/fesm2015/bottom-sheet.js.map +0 -1
- package/fesm2015/button/testing.js +0 -91
- package/fesm2015/button/testing.js.map +0 -1
- package/fesm2015/button-toggle/testing.js +0 -211
- package/fesm2015/button-toggle/testing.js.map +0 -1
- package/fesm2015/button-toggle.js +0 -473
- package/fesm2015/button-toggle.js.map +0 -1
- package/fesm2015/button.js +0 -205
- package/fesm2015/button.js.map +0 -1
- package/fesm2015/card/testing.js +0 -79
- package/fesm2015/card/testing.js.map +0 -1
- package/fesm2015/card.js +0 -276
- package/fesm2015/card.js.map +0 -1
- package/fesm2015/checkbox/testing.js +0 -183
- package/fesm2015/checkbox/testing.js.map +0 -1
- package/fesm2015/checkbox.js +0 -476
- package/fesm2015/checkbox.js.map +0 -1
- package/fesm2015/chips/testing.js +0 -465
- package/fesm2015/chips/testing.js.map +0 -1
- package/fesm2015/chips.js +0 -1286
- package/fesm2015/chips.js.map +0 -1
- package/fesm2015/core/testing.js +0 -150
- package/fesm2015/core/testing.js.map +0 -1
- package/fesm2015/core.js +0 -1681
- package/fesm2015/core.js.map +0 -1
- package/fesm2015/datepicker/testing.js +0 -692
- package/fesm2015/datepicker/testing.js.map +0 -1
- package/fesm2015/datepicker.js +0 -3733
- package/fesm2015/datepicker.js.map +0 -1
- package/fesm2015/dialog/testing.js +0 -130
- package/fesm2015/dialog/testing.js.map +0 -1
- package/fesm2015/dialog.js +0 -1127
- package/fesm2015/dialog.js.map +0 -1
- package/fesm2015/divider/testing.js +0 -54
- package/fesm2015/divider/testing.js.map +0 -1
- package/fesm2015/divider.js +0 -76
- package/fesm2015/divider.js.map +0 -1
- package/fesm2015/expansion/testing.js +0 -209
- package/fesm2015/expansion/testing.js.map +0 -1
- package/fesm2015/expansion.js +0 -600
- package/fesm2015/expansion.js.map +0 -1
- package/fesm2015/form-field/testing/control.js +0 -26
- package/fesm2015/form-field/testing/control.js.map +0 -1
- package/fesm2015/form-field/testing.js +0 -246
- package/fesm2015/form-field/testing.js.map +0 -1
- package/fesm2015/form-field.js +0 -757
- package/fesm2015/form-field.js.map +0 -1
- package/fesm2015/grid-list/testing.js +0 -183
- package/fesm2015/grid-list/testing.js.map +0 -1
- package/fesm2015/grid-list.js +0 -680
- package/fesm2015/grid-list.js.map +0 -1
- package/fesm2015/icon/testing.js +0 -171
- package/fesm2015/icon/testing.js.map +0 -1
- package/fesm2015/icon.js +0 -1012
- package/fesm2015/icon.js.map +0 -1
- package/fesm2015/input/testing.js +0 -318
- package/fesm2015/input/testing.js.map +0 -1
- package/fesm2015/input.js +0 -463
- package/fesm2015/input.js.map +0 -1
- package/fesm2015/list/testing.js +0 -529
- package/fesm2015/list/testing.js.map +0 -1
- package/fesm2015/list.js +0 -876
- package/fesm2015/list.js.map +0 -1
- package/fesm2015/material.js +0 -16
- package/fesm2015/material.js.map +0 -1
- package/fesm2015/menu/testing.js +0 -250
- package/fesm2015/menu/testing.js.map +0 -1
- package/fesm2015/menu.js +0 -1299
- package/fesm2015/menu.js.map +0 -1
- package/fesm2015/paginator/testing.js +0 -133
- package/fesm2015/paginator/testing.js.map +0 -1
- package/fesm2015/paginator.js +0 -366
- package/fesm2015/paginator.js.map +0 -1
- package/fesm2015/progress-bar/testing.js +0 -66
- package/fesm2015/progress-bar/testing.js.map +0 -1
- package/fesm2015/progress-bar.js +0 -211
- package/fesm2015/progress-bar.js.map +0 -1
- package/fesm2015/progress-spinner/testing.js +0 -67
- package/fesm2015/progress-spinner/testing.js.map +0 -1
- package/fesm2015/progress-spinner.js +0 -313
- package/fesm2015/progress-spinner.js.map +0 -1
- package/fesm2015/radio/testing.js +0 -299
- package/fesm2015/radio/testing.js.map +0 -1
- package/fesm2015/radio.js +0 -578
- package/fesm2015/radio.js.map +0 -1
- package/fesm2015/select/testing.js +0 -184
- package/fesm2015/select/testing.js.map +0 -1
- package/fesm2015/select.js +0 -1271
- package/fesm2015/select.js.map +0 -1
- package/fesm2015/sidenav/testing.js +0 -231
- package/fesm2015/sidenav/testing.js.map +0 -1
- package/fesm2015/sidenav.js +0 -965
- package/fesm2015/sidenav.js.map +0 -1
- package/fesm2015/slide-toggle/testing.js +0 -166
- package/fesm2015/slide-toggle/testing.js.map +0 -1
- package/fesm2015/slide-toggle.js +0 -329
- package/fesm2015/slide-toggle.js.map +0 -1
- package/fesm2015/slider/testing.js +0 -160
- package/fesm2015/slider/testing.js.map +0 -1
- package/fesm2015/slider.js +0 -820
- package/fesm2015/slider.js.map +0 -1
- package/fesm2015/snack-bar/testing.js +0 -168
- package/fesm2015/snack-bar/testing.js.map +0 -1
- package/fesm2015/snack-bar.js +0 -712
- package/fesm2015/snack-bar.js.map +0 -1
- package/fesm2015/sort/testing.js +0 -124
- package/fesm2015/sort/testing.js.map +0 -1
- package/fesm2015/sort.js +0 -587
- package/fesm2015/sort.js.map +0 -1
- package/fesm2015/stepper/testing.js +0 -237
- package/fesm2015/stepper/testing.js.map +0 -1
- package/fesm2015/stepper.js +0 -519
- package/fesm2015/stepper.js.map +0 -1
- package/fesm2015/table/testing.js +0 -280
- package/fesm2015/table/testing.js.map +0 -1
- package/fesm2015/table.js +0 -701
- package/fesm2015/table.js.map +0 -1
- package/fesm2015/tabs/testing.js +0 -273
- package/fesm2015/tabs/testing.js.map +0 -1
- package/fesm2015/tabs.js +0 -1761
- package/fesm2015/tabs.js.map +0 -1
- package/fesm2015/toolbar/testing.js +0 -74
- package/fesm2015/toolbar/testing.js.map +0 -1
- package/fesm2015/toolbar.js +0 -123
- package/fesm2015/toolbar.js.map +0 -1
- package/fesm2015/tooltip/testing.js +0 -95
- package/fesm2015/tooltip/testing.js.map +0 -1
- package/fesm2015/tooltip.js +0 -802
- package/fesm2015/tooltip.js.map +0 -1
- package/fesm2015/tree/testing.js +0 -237
- package/fesm2015/tree/testing.js.map +0 -1
- package/fesm2015/tree.js +0 -479
- package/fesm2015/tree.js.map +0 -1
- package/form-field/index.metadata.json +0 -1
- package/grid-list/index.metadata.json +0 -1
- package/icon/index.metadata.json +0 -1
- package/icon/testing/index.metadata.json +0 -1
- package/input/index.metadata.json +0 -1
- package/list/index.metadata.json +0 -1
- package/menu/index.metadata.json +0 -1
- package/paginator/index.metadata.json +0 -1
- package/progress-bar/index.metadata.json +0 -1
- package/progress-spinner/index.metadata.json +0 -1
- package/radio/index.metadata.json +0 -1
- package/select/index.metadata.json +0 -1
- package/sidenav/index.metadata.json +0 -1
- package/slide-toggle/index.metadata.json +0 -1
- package/slider/index.metadata.json +0 -1
- package/snack-bar/index.metadata.json +0 -1
- package/sort/index.metadata.json +0 -1
- package/stepper/index.metadata.json +0 -1
- package/table/index.metadata.json +0 -1
- package/tabs/index.metadata.json +0 -1
- package/toolbar/index.metadata.json +0 -1
- package/tooltip/index.metadata.json +0 -1
- package/tree/index.metadata.json +0 -1
|
@@ -0,0 +1,739 @@
|
|
|
1
|
+
import { AriaDescriber, FocusMonitor } from '@angular/cdk/a11y';
|
|
2
|
+
import { Directionality } from '@angular/cdk/bidi';
|
|
3
|
+
import { coerceBooleanProperty } from '@angular/cdk/coercion';
|
|
4
|
+
import { ESCAPE, hasModifierKey } from '@angular/cdk/keycodes';
|
|
5
|
+
import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';
|
|
6
|
+
import { Overlay, } from '@angular/cdk/overlay';
|
|
7
|
+
import { Platform, normalizePassiveListenerOptions } from '@angular/cdk/platform';
|
|
8
|
+
import { ComponentPortal } from '@angular/cdk/portal';
|
|
9
|
+
import { ScrollDispatcher } from '@angular/cdk/scrolling';
|
|
10
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Directive, ElementRef, Inject, InjectionToken, Input, NgZone, Optional, ViewContainerRef, ViewEncapsulation, } from '@angular/core';
|
|
11
|
+
import { DOCUMENT } from '@angular/common';
|
|
12
|
+
import { Subject } from 'rxjs';
|
|
13
|
+
import { take, takeUntil } from 'rxjs/operators';
|
|
14
|
+
import { matTooltipAnimations } from './tooltip-animations';
|
|
15
|
+
import * as i0 from "@angular/core";
|
|
16
|
+
import * as i1 from "@angular/cdk/overlay";
|
|
17
|
+
import * as i2 from "@angular/cdk/scrolling";
|
|
18
|
+
import * as i3 from "@angular/cdk/platform";
|
|
19
|
+
import * as i4 from "@angular/cdk/a11y";
|
|
20
|
+
import * as i5 from "@angular/cdk/bidi";
|
|
21
|
+
import * as i6 from "@angular/cdk/layout";
|
|
22
|
+
import * as i7 from "@angular/common";
|
|
23
|
+
/** Time in ms to throttle repositioning after scroll events. */
|
|
24
|
+
export const SCROLL_THROTTLE_MS = 20;
|
|
25
|
+
/**
|
|
26
|
+
* CSS class that will be attached to the overlay panel.
|
|
27
|
+
* @deprecated
|
|
28
|
+
* @breaking-change 13.0.0 remove this variable
|
|
29
|
+
*/
|
|
30
|
+
export const TOOLTIP_PANEL_CLASS = 'mat-tooltip-panel';
|
|
31
|
+
const PANEL_CLASS = 'tooltip-panel';
|
|
32
|
+
/** Options used to bind passive event listeners. */
|
|
33
|
+
const passiveListenerOptions = normalizePassiveListenerOptions({ passive: true });
|
|
34
|
+
/**
|
|
35
|
+
* Time between the user putting the pointer on a tooltip
|
|
36
|
+
* trigger and the long press event being fired.
|
|
37
|
+
*/
|
|
38
|
+
const LONGPRESS_DELAY = 500;
|
|
39
|
+
/**
|
|
40
|
+
* Creates an error to be thrown if the user supplied an invalid tooltip position.
|
|
41
|
+
* @docs-private
|
|
42
|
+
*/
|
|
43
|
+
export function getMatTooltipInvalidPositionError(position) {
|
|
44
|
+
return Error(`Tooltip position "${position}" is invalid.`);
|
|
45
|
+
}
|
|
46
|
+
/** Injection token that determines the scroll handling while a tooltip is visible. */
|
|
47
|
+
export const MAT_TOOLTIP_SCROLL_STRATEGY = new InjectionToken('mat-tooltip-scroll-strategy');
|
|
48
|
+
/** @docs-private */
|
|
49
|
+
export function MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY(overlay) {
|
|
50
|
+
return () => overlay.scrollStrategies.reposition({ scrollThrottle: SCROLL_THROTTLE_MS });
|
|
51
|
+
}
|
|
52
|
+
/** @docs-private */
|
|
53
|
+
export const MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER = {
|
|
54
|
+
provide: MAT_TOOLTIP_SCROLL_STRATEGY,
|
|
55
|
+
deps: [Overlay],
|
|
56
|
+
useFactory: MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY,
|
|
57
|
+
};
|
|
58
|
+
/** Injection token to be used to override the default options for `matTooltip`. */
|
|
59
|
+
export const MAT_TOOLTIP_DEFAULT_OPTIONS = new InjectionToken('mat-tooltip-default-options', {
|
|
60
|
+
providedIn: 'root',
|
|
61
|
+
factory: MAT_TOOLTIP_DEFAULT_OPTIONS_FACTORY
|
|
62
|
+
});
|
|
63
|
+
/** @docs-private */
|
|
64
|
+
export function MAT_TOOLTIP_DEFAULT_OPTIONS_FACTORY() {
|
|
65
|
+
return {
|
|
66
|
+
showDelay: 0,
|
|
67
|
+
hideDelay: 0,
|
|
68
|
+
touchendHideDelay: 1500,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
export class _MatTooltipBase {
|
|
72
|
+
constructor(_overlay, _elementRef, _scrollDispatcher, _viewContainerRef, _ngZone, _platform, _ariaDescriber, _focusMonitor, scrollStrategy, _dir, _defaultOptions, _document) {
|
|
73
|
+
this._overlay = _overlay;
|
|
74
|
+
this._elementRef = _elementRef;
|
|
75
|
+
this._scrollDispatcher = _scrollDispatcher;
|
|
76
|
+
this._viewContainerRef = _viewContainerRef;
|
|
77
|
+
this._ngZone = _ngZone;
|
|
78
|
+
this._platform = _platform;
|
|
79
|
+
this._ariaDescriber = _ariaDescriber;
|
|
80
|
+
this._focusMonitor = _focusMonitor;
|
|
81
|
+
this._dir = _dir;
|
|
82
|
+
this._defaultOptions = _defaultOptions;
|
|
83
|
+
this._position = 'below';
|
|
84
|
+
this._disabled = false;
|
|
85
|
+
this._viewInitialized = false;
|
|
86
|
+
this._pointerExitEventsInitialized = false;
|
|
87
|
+
this._viewportMargin = 8;
|
|
88
|
+
this._cssClassPrefix = 'mat';
|
|
89
|
+
/** The default delay in ms before showing the tooltip after show is called */
|
|
90
|
+
this.showDelay = this._defaultOptions.showDelay;
|
|
91
|
+
/** The default delay in ms before hiding the tooltip after hide is called */
|
|
92
|
+
this.hideDelay = this._defaultOptions.hideDelay;
|
|
93
|
+
/**
|
|
94
|
+
* How touch gestures should be handled by the tooltip. On touch devices the tooltip directive
|
|
95
|
+
* uses a long press gesture to show and hide, however it can conflict with the native browser
|
|
96
|
+
* gestures. To work around the conflict, Angular Material disables native gestures on the
|
|
97
|
+
* trigger, but that might not be desirable on particular elements (e.g. inputs and draggable
|
|
98
|
+
* elements). The different values for this option configure the touch event handling as follows:
|
|
99
|
+
* - `auto` - Enables touch gestures for all elements, but tries to avoid conflicts with native
|
|
100
|
+
* browser gestures on particular elements. In particular, it allows text selection on inputs
|
|
101
|
+
* and textareas, and preserves the native browser dragging on elements marked as `draggable`.
|
|
102
|
+
* - `on` - Enables touch gestures for all elements and disables native
|
|
103
|
+
* browser gestures with no exceptions.
|
|
104
|
+
* - `off` - Disables touch gestures. Note that this will prevent the tooltip from
|
|
105
|
+
* showing on touch devices.
|
|
106
|
+
*/
|
|
107
|
+
this.touchGestures = 'auto';
|
|
108
|
+
this._message = '';
|
|
109
|
+
/** Manually-bound passive event listeners. */
|
|
110
|
+
this._passiveListeners = [];
|
|
111
|
+
/** Emits when the component is destroyed. */
|
|
112
|
+
this._destroyed = new Subject();
|
|
113
|
+
/**
|
|
114
|
+
* Handles the keydown events on the host element.
|
|
115
|
+
* Needs to be an arrow function so that we can use it in addEventListener.
|
|
116
|
+
*/
|
|
117
|
+
this._handleKeydown = (event) => {
|
|
118
|
+
if (this._isTooltipVisible() && event.keyCode === ESCAPE && !hasModifierKey(event)) {
|
|
119
|
+
event.preventDefault();
|
|
120
|
+
event.stopPropagation();
|
|
121
|
+
this._ngZone.run(() => this.hide(0));
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
this._scrollStrategy = scrollStrategy;
|
|
125
|
+
this._document = _document;
|
|
126
|
+
if (_defaultOptions) {
|
|
127
|
+
if (_defaultOptions.position) {
|
|
128
|
+
this.position = _defaultOptions.position;
|
|
129
|
+
}
|
|
130
|
+
if (_defaultOptions.touchGestures) {
|
|
131
|
+
this.touchGestures = _defaultOptions.touchGestures;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
_dir.change.pipe(takeUntil(this._destroyed)).subscribe(() => {
|
|
135
|
+
if (this._overlayRef) {
|
|
136
|
+
this._updatePosition(this._overlayRef);
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
_ngZone.runOutsideAngular(() => {
|
|
140
|
+
_elementRef.nativeElement.addEventListener('keydown', this._handleKeydown);
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
/** Allows the user to define the position of the tooltip relative to the parent element */
|
|
144
|
+
get position() { return this._position; }
|
|
145
|
+
set position(value) {
|
|
146
|
+
if (value !== this._position) {
|
|
147
|
+
this._position = value;
|
|
148
|
+
if (this._overlayRef) {
|
|
149
|
+
this._updatePosition(this._overlayRef);
|
|
150
|
+
this._tooltipInstance?.show(0);
|
|
151
|
+
this._overlayRef.updatePosition();
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/** Disables the display of the tooltip. */
|
|
156
|
+
get disabled() { return this._disabled; }
|
|
157
|
+
set disabled(value) {
|
|
158
|
+
this._disabled = coerceBooleanProperty(value);
|
|
159
|
+
// If tooltip is disabled, hide immediately.
|
|
160
|
+
if (this._disabled) {
|
|
161
|
+
this.hide(0);
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
this._setupPointerEnterEventsIfNeeded();
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
/** The message to be displayed in the tooltip */
|
|
168
|
+
get message() { return this._message; }
|
|
169
|
+
set message(value) {
|
|
170
|
+
this._ariaDescriber.removeDescription(this._elementRef.nativeElement, this._message, 'tooltip');
|
|
171
|
+
// If the message is not a string (e.g. number), convert it to a string and trim it.
|
|
172
|
+
// Must convert with `String(value)`, not `${value}`, otherwise Closure Compiler optimises
|
|
173
|
+
// away the string-conversion: https://github.com/angular/components/issues/20684
|
|
174
|
+
this._message = value != null ? String(value).trim() : '';
|
|
175
|
+
if (!this._message && this._isTooltipVisible()) {
|
|
176
|
+
this.hide(0);
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
this._setupPointerEnterEventsIfNeeded();
|
|
180
|
+
this._updateTooltipMessage();
|
|
181
|
+
this._ngZone.runOutsideAngular(() => {
|
|
182
|
+
// The `AriaDescriber` has some functionality that avoids adding a description if it's the
|
|
183
|
+
// same as the `aria-label` of an element, however we can't know whether the tooltip trigger
|
|
184
|
+
// has a data-bound `aria-label` or when it'll be set for the first time. We can avoid the
|
|
185
|
+
// issue by deferring the description by a tick so Angular has time to set the `aria-label`.
|
|
186
|
+
Promise.resolve().then(() => {
|
|
187
|
+
this._ariaDescriber.describe(this._elementRef.nativeElement, this.message, 'tooltip');
|
|
188
|
+
});
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
/** Classes to be passed to the tooltip. Supports the same syntax as `ngClass`. */
|
|
193
|
+
get tooltipClass() { return this._tooltipClass; }
|
|
194
|
+
set tooltipClass(value) {
|
|
195
|
+
this._tooltipClass = value;
|
|
196
|
+
if (this._tooltipInstance) {
|
|
197
|
+
this._setTooltipClass(this._tooltipClass);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
ngAfterViewInit() {
|
|
201
|
+
// This needs to happen after view init so the initial values for all inputs have been set.
|
|
202
|
+
this._viewInitialized = true;
|
|
203
|
+
this._setupPointerEnterEventsIfNeeded();
|
|
204
|
+
this._focusMonitor.monitor(this._elementRef)
|
|
205
|
+
.pipe(takeUntil(this._destroyed))
|
|
206
|
+
.subscribe(origin => {
|
|
207
|
+
// Note that the focus monitor runs outside the Angular zone.
|
|
208
|
+
if (!origin) {
|
|
209
|
+
this._ngZone.run(() => this.hide(0));
|
|
210
|
+
}
|
|
211
|
+
else if (origin === 'keyboard') {
|
|
212
|
+
this._ngZone.run(() => this.show());
|
|
213
|
+
}
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Dispose the tooltip when destroyed.
|
|
218
|
+
*/
|
|
219
|
+
ngOnDestroy() {
|
|
220
|
+
const nativeElement = this._elementRef.nativeElement;
|
|
221
|
+
clearTimeout(this._touchstartTimeout);
|
|
222
|
+
if (this._overlayRef) {
|
|
223
|
+
this._overlayRef.dispose();
|
|
224
|
+
this._tooltipInstance = null;
|
|
225
|
+
}
|
|
226
|
+
// Clean up the event listeners set in the constructor
|
|
227
|
+
nativeElement.removeEventListener('keydown', this._handleKeydown);
|
|
228
|
+
this._passiveListeners.forEach(([event, listener]) => {
|
|
229
|
+
nativeElement.removeEventListener(event, listener, passiveListenerOptions);
|
|
230
|
+
});
|
|
231
|
+
this._passiveListeners.length = 0;
|
|
232
|
+
this._destroyed.next();
|
|
233
|
+
this._destroyed.complete();
|
|
234
|
+
this._ariaDescriber.removeDescription(nativeElement, this.message, 'tooltip');
|
|
235
|
+
this._focusMonitor.stopMonitoring(nativeElement);
|
|
236
|
+
}
|
|
237
|
+
/** Shows the tooltip after the delay in ms, defaults to tooltip-delay-show or 0ms if no input */
|
|
238
|
+
show(delay = this.showDelay) {
|
|
239
|
+
if (this.disabled || !this.message || (this._isTooltipVisible() &&
|
|
240
|
+
!this._tooltipInstance._showTimeoutId && !this._tooltipInstance._hideTimeoutId)) {
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
const overlayRef = this._createOverlay();
|
|
244
|
+
this._detach();
|
|
245
|
+
this._portal = this._portal ||
|
|
246
|
+
new ComponentPortal(this._tooltipComponent, this._viewContainerRef);
|
|
247
|
+
this._tooltipInstance = overlayRef.attach(this._portal).instance;
|
|
248
|
+
this._tooltipInstance.afterHidden()
|
|
249
|
+
.pipe(takeUntil(this._destroyed))
|
|
250
|
+
.subscribe(() => this._detach());
|
|
251
|
+
this._setTooltipClass(this._tooltipClass);
|
|
252
|
+
this._updateTooltipMessage();
|
|
253
|
+
this._tooltipInstance.show(delay);
|
|
254
|
+
}
|
|
255
|
+
/** Hides the tooltip after the delay in ms, defaults to tooltip-delay-hide or 0ms if no input */
|
|
256
|
+
hide(delay = this.hideDelay) {
|
|
257
|
+
if (this._tooltipInstance) {
|
|
258
|
+
this._tooltipInstance.hide(delay);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
/** Shows/hides the tooltip */
|
|
262
|
+
toggle() {
|
|
263
|
+
this._isTooltipVisible() ? this.hide() : this.show();
|
|
264
|
+
}
|
|
265
|
+
/** Returns true if the tooltip is currently visible to the user */
|
|
266
|
+
_isTooltipVisible() {
|
|
267
|
+
return !!this._tooltipInstance && this._tooltipInstance.isVisible();
|
|
268
|
+
}
|
|
269
|
+
/** Create the overlay config and position strategy */
|
|
270
|
+
_createOverlay() {
|
|
271
|
+
if (this._overlayRef) {
|
|
272
|
+
return this._overlayRef;
|
|
273
|
+
}
|
|
274
|
+
const scrollableAncestors = this._scrollDispatcher.getAncestorScrollContainers(this._elementRef);
|
|
275
|
+
// Create connected position strategy that listens for scroll events to reposition.
|
|
276
|
+
const strategy = this._overlay.position()
|
|
277
|
+
.flexibleConnectedTo(this._elementRef)
|
|
278
|
+
.withTransformOriginOn(`.${this._cssClassPrefix}-tooltip`)
|
|
279
|
+
.withFlexibleDimensions(false)
|
|
280
|
+
.withViewportMargin(this._viewportMargin)
|
|
281
|
+
.withScrollableContainers(scrollableAncestors);
|
|
282
|
+
strategy.positionChanges.pipe(takeUntil(this._destroyed)).subscribe(change => {
|
|
283
|
+
this._updateCurrentPositionClass(change.connectionPair);
|
|
284
|
+
if (this._tooltipInstance) {
|
|
285
|
+
if (change.scrollableViewProperties.isOverlayClipped && this._tooltipInstance.isVisible()) {
|
|
286
|
+
// After position changes occur and the overlay is clipped by
|
|
287
|
+
// a parent scrollable then close the tooltip.
|
|
288
|
+
this._ngZone.run(() => this.hide(0));
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
});
|
|
292
|
+
this._overlayRef = this._overlay.create({
|
|
293
|
+
direction: this._dir,
|
|
294
|
+
positionStrategy: strategy,
|
|
295
|
+
panelClass: `${this._cssClassPrefix}-${PANEL_CLASS}`,
|
|
296
|
+
scrollStrategy: this._scrollStrategy()
|
|
297
|
+
});
|
|
298
|
+
this._updatePosition(this._overlayRef);
|
|
299
|
+
this._overlayRef.detachments()
|
|
300
|
+
.pipe(takeUntil(this._destroyed))
|
|
301
|
+
.subscribe(() => this._detach());
|
|
302
|
+
this._overlayRef.outsidePointerEvents()
|
|
303
|
+
.pipe(takeUntil(this._destroyed))
|
|
304
|
+
.subscribe(() => this._tooltipInstance?._handleBodyInteraction());
|
|
305
|
+
return this._overlayRef;
|
|
306
|
+
}
|
|
307
|
+
/** Detaches the currently-attached tooltip. */
|
|
308
|
+
_detach() {
|
|
309
|
+
if (this._overlayRef && this._overlayRef.hasAttached()) {
|
|
310
|
+
this._overlayRef.detach();
|
|
311
|
+
}
|
|
312
|
+
this._tooltipInstance = null;
|
|
313
|
+
}
|
|
314
|
+
/** Updates the position of the current tooltip. */
|
|
315
|
+
_updatePosition(overlayRef) {
|
|
316
|
+
const position = overlayRef.getConfig().positionStrategy;
|
|
317
|
+
const origin = this._getOrigin();
|
|
318
|
+
const overlay = this._getOverlayPosition();
|
|
319
|
+
position.withPositions([
|
|
320
|
+
this._addOffset({ ...origin.main, ...overlay.main }),
|
|
321
|
+
this._addOffset({ ...origin.fallback, ...overlay.fallback })
|
|
322
|
+
]);
|
|
323
|
+
}
|
|
324
|
+
/** Adds the configured offset to a position. Used as a hook for child classes. */
|
|
325
|
+
_addOffset(position) {
|
|
326
|
+
return position;
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Returns the origin position and a fallback position based on the user's position preference.
|
|
330
|
+
* The fallback position is the inverse of the origin (e.g. `'below' -> 'above'`).
|
|
331
|
+
*/
|
|
332
|
+
_getOrigin() {
|
|
333
|
+
const isLtr = !this._dir || this._dir.value == 'ltr';
|
|
334
|
+
const position = this.position;
|
|
335
|
+
let originPosition;
|
|
336
|
+
if (position == 'above' || position == 'below') {
|
|
337
|
+
originPosition = { originX: 'center', originY: position == 'above' ? 'top' : 'bottom' };
|
|
338
|
+
}
|
|
339
|
+
else if (position == 'before' ||
|
|
340
|
+
(position == 'left' && isLtr) ||
|
|
341
|
+
(position == 'right' && !isLtr)) {
|
|
342
|
+
originPosition = { originX: 'start', originY: 'center' };
|
|
343
|
+
}
|
|
344
|
+
else if (position == 'after' ||
|
|
345
|
+
(position == 'right' && isLtr) ||
|
|
346
|
+
(position == 'left' && !isLtr)) {
|
|
347
|
+
originPosition = { originX: 'end', originY: 'center' };
|
|
348
|
+
}
|
|
349
|
+
else if (typeof ngDevMode === 'undefined' || ngDevMode) {
|
|
350
|
+
throw getMatTooltipInvalidPositionError(position);
|
|
351
|
+
}
|
|
352
|
+
const { x, y } = this._invertPosition(originPosition.originX, originPosition.originY);
|
|
353
|
+
return {
|
|
354
|
+
main: originPosition,
|
|
355
|
+
fallback: { originX: x, originY: y }
|
|
356
|
+
};
|
|
357
|
+
}
|
|
358
|
+
/** Returns the overlay position and a fallback position based on the user's preference */
|
|
359
|
+
_getOverlayPosition() {
|
|
360
|
+
const isLtr = !this._dir || this._dir.value == 'ltr';
|
|
361
|
+
const position = this.position;
|
|
362
|
+
let overlayPosition;
|
|
363
|
+
if (position == 'above') {
|
|
364
|
+
overlayPosition = { overlayX: 'center', overlayY: 'bottom' };
|
|
365
|
+
}
|
|
366
|
+
else if (position == 'below') {
|
|
367
|
+
overlayPosition = { overlayX: 'center', overlayY: 'top' };
|
|
368
|
+
}
|
|
369
|
+
else if (position == 'before' ||
|
|
370
|
+
(position == 'left' && isLtr) ||
|
|
371
|
+
(position == 'right' && !isLtr)) {
|
|
372
|
+
overlayPosition = { overlayX: 'end', overlayY: 'center' };
|
|
373
|
+
}
|
|
374
|
+
else if (position == 'after' ||
|
|
375
|
+
(position == 'right' && isLtr) ||
|
|
376
|
+
(position == 'left' && !isLtr)) {
|
|
377
|
+
overlayPosition = { overlayX: 'start', overlayY: 'center' };
|
|
378
|
+
}
|
|
379
|
+
else if (typeof ngDevMode === 'undefined' || ngDevMode) {
|
|
380
|
+
throw getMatTooltipInvalidPositionError(position);
|
|
381
|
+
}
|
|
382
|
+
const { x, y } = this._invertPosition(overlayPosition.overlayX, overlayPosition.overlayY);
|
|
383
|
+
return {
|
|
384
|
+
main: overlayPosition,
|
|
385
|
+
fallback: { overlayX: x, overlayY: y }
|
|
386
|
+
};
|
|
387
|
+
}
|
|
388
|
+
/** Updates the tooltip message and repositions the overlay according to the new message length */
|
|
389
|
+
_updateTooltipMessage() {
|
|
390
|
+
// Must wait for the message to be painted to the tooltip so that the overlay can properly
|
|
391
|
+
// calculate the correct positioning based on the size of the text.
|
|
392
|
+
if (this._tooltipInstance) {
|
|
393
|
+
this._tooltipInstance.message = this.message;
|
|
394
|
+
this._tooltipInstance._markForCheck();
|
|
395
|
+
this._ngZone.onMicrotaskEmpty.pipe(take(1), takeUntil(this._destroyed)).subscribe(() => {
|
|
396
|
+
if (this._tooltipInstance) {
|
|
397
|
+
this._overlayRef.updatePosition();
|
|
398
|
+
}
|
|
399
|
+
});
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
/** Updates the tooltip class */
|
|
403
|
+
_setTooltipClass(tooltipClass) {
|
|
404
|
+
if (this._tooltipInstance) {
|
|
405
|
+
this._tooltipInstance.tooltipClass = tooltipClass;
|
|
406
|
+
this._tooltipInstance._markForCheck();
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
/** Inverts an overlay position. */
|
|
410
|
+
_invertPosition(x, y) {
|
|
411
|
+
if (this.position === 'above' || this.position === 'below') {
|
|
412
|
+
if (y === 'top') {
|
|
413
|
+
y = 'bottom';
|
|
414
|
+
}
|
|
415
|
+
else if (y === 'bottom') {
|
|
416
|
+
y = 'top';
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
else {
|
|
420
|
+
if (x === 'end') {
|
|
421
|
+
x = 'start';
|
|
422
|
+
}
|
|
423
|
+
else if (x === 'start') {
|
|
424
|
+
x = 'end';
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
return { x, y };
|
|
428
|
+
}
|
|
429
|
+
/** Updates the class on the overlay panel based on the current position of the tooltip. */
|
|
430
|
+
_updateCurrentPositionClass(connectionPair) {
|
|
431
|
+
const { overlayY, originX, originY } = connectionPair;
|
|
432
|
+
let newPosition;
|
|
433
|
+
// If the overlay is in the middle along the Y axis,
|
|
434
|
+
// it means that it's either before or after.
|
|
435
|
+
if (overlayY === 'center') {
|
|
436
|
+
// Note that since this information is used for styling, we want to
|
|
437
|
+
// resolve `start` and `end` to their real values, otherwise consumers
|
|
438
|
+
// would have to remember to do it themselves on each consumption.
|
|
439
|
+
if (this._dir && this._dir.value === 'rtl') {
|
|
440
|
+
newPosition = originX === 'end' ? 'left' : 'right';
|
|
441
|
+
}
|
|
442
|
+
else {
|
|
443
|
+
newPosition = originX === 'start' ? 'left' : 'right';
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
else {
|
|
447
|
+
newPosition = overlayY === 'bottom' && originY === 'top' ? 'above' : 'below';
|
|
448
|
+
}
|
|
449
|
+
if (newPosition !== this._currentPosition) {
|
|
450
|
+
const overlayRef = this._overlayRef;
|
|
451
|
+
if (overlayRef) {
|
|
452
|
+
const classPrefix = `${this._cssClassPrefix}-${PANEL_CLASS}-`;
|
|
453
|
+
overlayRef.removePanelClass(classPrefix + this._currentPosition);
|
|
454
|
+
overlayRef.addPanelClass(classPrefix + newPosition);
|
|
455
|
+
}
|
|
456
|
+
this._currentPosition = newPosition;
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
/** Binds the pointer events to the tooltip trigger. */
|
|
460
|
+
_setupPointerEnterEventsIfNeeded() {
|
|
461
|
+
// Optimization: Defer hooking up events if there's no message or the tooltip is disabled.
|
|
462
|
+
if (this._disabled || !this.message || !this._viewInitialized ||
|
|
463
|
+
this._passiveListeners.length) {
|
|
464
|
+
return;
|
|
465
|
+
}
|
|
466
|
+
// The mouse events shouldn't be bound on mobile devices, because they can prevent the
|
|
467
|
+
// first tap from firing its click event or can cause the tooltip to open for clicks.
|
|
468
|
+
if (this._platformSupportsMouseEvents()) {
|
|
469
|
+
this._passiveListeners
|
|
470
|
+
.push(['mouseenter', () => {
|
|
471
|
+
this._setupPointerExitEventsIfNeeded();
|
|
472
|
+
this.show();
|
|
473
|
+
}]);
|
|
474
|
+
}
|
|
475
|
+
else if (this.touchGestures !== 'off') {
|
|
476
|
+
this._disableNativeGesturesIfNecessary();
|
|
477
|
+
this._passiveListeners
|
|
478
|
+
.push(['touchstart', () => {
|
|
479
|
+
// Note that it's important that we don't `preventDefault` here,
|
|
480
|
+
// because it can prevent click events from firing on the element.
|
|
481
|
+
this._setupPointerExitEventsIfNeeded();
|
|
482
|
+
clearTimeout(this._touchstartTimeout);
|
|
483
|
+
this._touchstartTimeout = setTimeout(() => this.show(), LONGPRESS_DELAY);
|
|
484
|
+
}]);
|
|
485
|
+
}
|
|
486
|
+
this._addListeners(this._passiveListeners);
|
|
487
|
+
}
|
|
488
|
+
_setupPointerExitEventsIfNeeded() {
|
|
489
|
+
if (this._pointerExitEventsInitialized) {
|
|
490
|
+
return;
|
|
491
|
+
}
|
|
492
|
+
this._pointerExitEventsInitialized = true;
|
|
493
|
+
const exitListeners = [];
|
|
494
|
+
if (this._platformSupportsMouseEvents()) {
|
|
495
|
+
exitListeners.push(['mouseleave', () => this.hide()], ['wheel', event => this._wheelListener(event)]);
|
|
496
|
+
}
|
|
497
|
+
else if (this.touchGestures !== 'off') {
|
|
498
|
+
this._disableNativeGesturesIfNecessary();
|
|
499
|
+
const touchendListener = () => {
|
|
500
|
+
clearTimeout(this._touchstartTimeout);
|
|
501
|
+
this.hide(this._defaultOptions.touchendHideDelay);
|
|
502
|
+
};
|
|
503
|
+
exitListeners.push(['touchend', touchendListener], ['touchcancel', touchendListener]);
|
|
504
|
+
}
|
|
505
|
+
this._addListeners(exitListeners);
|
|
506
|
+
this._passiveListeners.push(...exitListeners);
|
|
507
|
+
}
|
|
508
|
+
_addListeners(listeners) {
|
|
509
|
+
listeners.forEach(([event, listener]) => {
|
|
510
|
+
this._elementRef.nativeElement.addEventListener(event, listener, passiveListenerOptions);
|
|
511
|
+
});
|
|
512
|
+
}
|
|
513
|
+
_platformSupportsMouseEvents() {
|
|
514
|
+
return !this._platform.IOS && !this._platform.ANDROID;
|
|
515
|
+
}
|
|
516
|
+
/** Listener for the `wheel` event on the element. */
|
|
517
|
+
_wheelListener(event) {
|
|
518
|
+
if (this._isTooltipVisible()) {
|
|
519
|
+
const elementUnderPointer = this._document.elementFromPoint(event.clientX, event.clientY);
|
|
520
|
+
const element = this._elementRef.nativeElement;
|
|
521
|
+
// On non-touch devices we depend on the `mouseleave` event to close the tooltip, but it
|
|
522
|
+
// won't fire if the user scrolls away using the wheel without moving their cursor. We
|
|
523
|
+
// work around it by finding the element under the user's cursor and closing the tooltip
|
|
524
|
+
// if it's not the trigger.
|
|
525
|
+
if (elementUnderPointer !== element && !element.contains(elementUnderPointer)) {
|
|
526
|
+
this.hide();
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
/** Disables the native browser gestures, based on how the tooltip has been configured. */
|
|
531
|
+
_disableNativeGesturesIfNecessary() {
|
|
532
|
+
const gestures = this.touchGestures;
|
|
533
|
+
if (gestures !== 'off') {
|
|
534
|
+
const element = this._elementRef.nativeElement;
|
|
535
|
+
const style = element.style;
|
|
536
|
+
// If gestures are set to `auto`, we don't disable text selection on inputs and
|
|
537
|
+
// textareas, because it prevents the user from typing into them on iOS Safari.
|
|
538
|
+
if (gestures === 'on' || (element.nodeName !== 'INPUT' && element.nodeName !== 'TEXTAREA')) {
|
|
539
|
+
style.userSelect = style.msUserSelect = style.webkitUserSelect =
|
|
540
|
+
style.MozUserSelect = 'none';
|
|
541
|
+
}
|
|
542
|
+
// If we have `auto` gestures and the element uses native HTML dragging,
|
|
543
|
+
// we don't set `-webkit-user-drag` because it prevents the native behavior.
|
|
544
|
+
if (gestures === 'on' || !element.draggable) {
|
|
545
|
+
style.webkitUserDrag = 'none';
|
|
546
|
+
}
|
|
547
|
+
style.touchAction = 'none';
|
|
548
|
+
style.webkitTapHighlightColor = 'transparent';
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
_MatTooltipBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0-next.15", ngImport: i0, type: _MatTooltipBase, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive });
|
|
553
|
+
_MatTooltipBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0-next.15", type: _MatTooltipBase, inputs: { position: ["matTooltipPosition", "position"], disabled: ["matTooltipDisabled", "disabled"], showDelay: ["matTooltipShowDelay", "showDelay"], hideDelay: ["matTooltipHideDelay", "hideDelay"], touchGestures: ["matTooltipTouchGestures", "touchGestures"], message: ["matTooltip", "message"], tooltipClass: ["matTooltipClass", "tooltipClass"] }, ngImport: i0 });
|
|
554
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0-next.15", ngImport: i0, type: _MatTooltipBase, decorators: [{
|
|
555
|
+
type: Directive
|
|
556
|
+
}], ctorParameters: function () { return [{ type: i1.Overlay }, { type: i0.ElementRef }, { type: i2.ScrollDispatcher }, { type: i0.ViewContainerRef }, { type: i0.NgZone }, { type: i3.Platform }, { type: i4.AriaDescriber }, { type: i4.FocusMonitor }, { type: undefined }, { type: i5.Directionality }, { type: undefined }, { type: undefined, decorators: [{
|
|
557
|
+
type: Inject,
|
|
558
|
+
args: [DOCUMENT]
|
|
559
|
+
}] }]; }, propDecorators: { position: [{
|
|
560
|
+
type: Input,
|
|
561
|
+
args: ['matTooltipPosition']
|
|
562
|
+
}], disabled: [{
|
|
563
|
+
type: Input,
|
|
564
|
+
args: ['matTooltipDisabled']
|
|
565
|
+
}], showDelay: [{
|
|
566
|
+
type: Input,
|
|
567
|
+
args: ['matTooltipShowDelay']
|
|
568
|
+
}], hideDelay: [{
|
|
569
|
+
type: Input,
|
|
570
|
+
args: ['matTooltipHideDelay']
|
|
571
|
+
}], touchGestures: [{
|
|
572
|
+
type: Input,
|
|
573
|
+
args: ['matTooltipTouchGestures']
|
|
574
|
+
}], message: [{
|
|
575
|
+
type: Input,
|
|
576
|
+
args: ['matTooltip']
|
|
577
|
+
}], tooltipClass: [{
|
|
578
|
+
type: Input,
|
|
579
|
+
args: ['matTooltipClass']
|
|
580
|
+
}] } });
|
|
581
|
+
/**
|
|
582
|
+
* Directive that attaches a material design tooltip to the host element. Animates the showing and
|
|
583
|
+
* hiding of a tooltip provided position (defaults to below the element).
|
|
584
|
+
*
|
|
585
|
+
* https://material.io/design/components/tooltips.html
|
|
586
|
+
*/
|
|
587
|
+
export class MatTooltip extends _MatTooltipBase {
|
|
588
|
+
constructor(overlay, elementRef, scrollDispatcher, viewContainerRef, ngZone, platform, ariaDescriber, focusMonitor, scrollStrategy, dir, defaultOptions, _document) {
|
|
589
|
+
super(overlay, elementRef, scrollDispatcher, viewContainerRef, ngZone, platform, ariaDescriber, focusMonitor, scrollStrategy, dir, defaultOptions, _document);
|
|
590
|
+
this._tooltipComponent = TooltipComponent;
|
|
591
|
+
}
|
|
592
|
+
}
|
|
593
|
+
MatTooltip.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0-next.15", ngImport: i0, type: MatTooltip, deps: [{ token: i1.Overlay }, { token: i0.ElementRef }, { token: i2.ScrollDispatcher }, { token: i0.ViewContainerRef }, { token: i0.NgZone }, { token: i3.Platform }, { token: i4.AriaDescriber }, { token: i4.FocusMonitor }, { token: MAT_TOOLTIP_SCROLL_STRATEGY }, { token: i5.Directionality, optional: true }, { token: MAT_TOOLTIP_DEFAULT_OPTIONS, optional: true }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Directive });
|
|
594
|
+
MatTooltip.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0-next.15", type: MatTooltip, selector: "[matTooltip]", host: { classAttribute: "mat-tooltip-trigger" }, exportAs: ["matTooltip"], usesInheritance: true, ngImport: i0 });
|
|
595
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0-next.15", ngImport: i0, type: MatTooltip, decorators: [{
|
|
596
|
+
type: Directive,
|
|
597
|
+
args: [{
|
|
598
|
+
selector: '[matTooltip]',
|
|
599
|
+
exportAs: 'matTooltip',
|
|
600
|
+
host: {
|
|
601
|
+
'class': 'mat-tooltip-trigger'
|
|
602
|
+
}
|
|
603
|
+
}]
|
|
604
|
+
}], ctorParameters: function () { return [{ type: i1.Overlay }, { type: i0.ElementRef }, { type: i2.ScrollDispatcher }, { type: i0.ViewContainerRef }, { type: i0.NgZone }, { type: i3.Platform }, { type: i4.AriaDescriber }, { type: i4.FocusMonitor }, { type: undefined, decorators: [{
|
|
605
|
+
type: Inject,
|
|
606
|
+
args: [MAT_TOOLTIP_SCROLL_STRATEGY]
|
|
607
|
+
}] }, { type: i5.Directionality, decorators: [{
|
|
608
|
+
type: Optional
|
|
609
|
+
}] }, { type: undefined, decorators: [{
|
|
610
|
+
type: Optional
|
|
611
|
+
}, {
|
|
612
|
+
type: Inject,
|
|
613
|
+
args: [MAT_TOOLTIP_DEFAULT_OPTIONS]
|
|
614
|
+
}] }, { type: undefined, decorators: [{
|
|
615
|
+
type: Inject,
|
|
616
|
+
args: [DOCUMENT]
|
|
617
|
+
}] }]; } });
|
|
618
|
+
export class _TooltipComponentBase {
|
|
619
|
+
constructor(_changeDetectorRef) {
|
|
620
|
+
this._changeDetectorRef = _changeDetectorRef;
|
|
621
|
+
/** Property watched by the animation framework to show or hide the tooltip */
|
|
622
|
+
this._visibility = 'initial';
|
|
623
|
+
/** Whether interactions on the page should close the tooltip */
|
|
624
|
+
this._closeOnInteraction = false;
|
|
625
|
+
/** Subject for notifying that the tooltip has been hidden from the view */
|
|
626
|
+
this._onHide = new Subject();
|
|
627
|
+
}
|
|
628
|
+
/**
|
|
629
|
+
* Shows the tooltip with an animation originating from the provided origin
|
|
630
|
+
* @param delay Amount of milliseconds to the delay showing the tooltip.
|
|
631
|
+
*/
|
|
632
|
+
show(delay) {
|
|
633
|
+
// Cancel the delayed hide if it is scheduled
|
|
634
|
+
clearTimeout(this._hideTimeoutId);
|
|
635
|
+
// Body interactions should cancel the tooltip if there is a delay in showing.
|
|
636
|
+
this._closeOnInteraction = true;
|
|
637
|
+
this._showTimeoutId = setTimeout(() => {
|
|
638
|
+
this._visibility = 'visible';
|
|
639
|
+
this._showTimeoutId = undefined;
|
|
640
|
+
this._onShow();
|
|
641
|
+
// Mark for check so if any parent component has set the
|
|
642
|
+
// ChangeDetectionStrategy to OnPush it will be checked anyways
|
|
643
|
+
this._markForCheck();
|
|
644
|
+
}, delay);
|
|
645
|
+
}
|
|
646
|
+
/**
|
|
647
|
+
* Begins the animation to hide the tooltip after the provided delay in ms.
|
|
648
|
+
* @param delay Amount of milliseconds to delay showing the tooltip.
|
|
649
|
+
*/
|
|
650
|
+
hide(delay) {
|
|
651
|
+
// Cancel the delayed show if it is scheduled
|
|
652
|
+
clearTimeout(this._showTimeoutId);
|
|
653
|
+
this._hideTimeoutId = setTimeout(() => {
|
|
654
|
+
this._visibility = 'hidden';
|
|
655
|
+
this._hideTimeoutId = undefined;
|
|
656
|
+
// Mark for check so if any parent component has set the
|
|
657
|
+
// ChangeDetectionStrategy to OnPush it will be checked anyways
|
|
658
|
+
this._markForCheck();
|
|
659
|
+
}, delay);
|
|
660
|
+
}
|
|
661
|
+
/** Returns an observable that notifies when the tooltip has been hidden from view. */
|
|
662
|
+
afterHidden() {
|
|
663
|
+
return this._onHide;
|
|
664
|
+
}
|
|
665
|
+
/** Whether the tooltip is being displayed. */
|
|
666
|
+
isVisible() {
|
|
667
|
+
return this._visibility === 'visible';
|
|
668
|
+
}
|
|
669
|
+
ngOnDestroy() {
|
|
670
|
+
clearTimeout(this._showTimeoutId);
|
|
671
|
+
clearTimeout(this._hideTimeoutId);
|
|
672
|
+
this._onHide.complete();
|
|
673
|
+
}
|
|
674
|
+
_animationStart() {
|
|
675
|
+
this._closeOnInteraction = false;
|
|
676
|
+
}
|
|
677
|
+
_animationDone(event) {
|
|
678
|
+
const toState = event.toState;
|
|
679
|
+
if (toState === 'hidden' && !this.isVisible()) {
|
|
680
|
+
this._onHide.next();
|
|
681
|
+
}
|
|
682
|
+
if (toState === 'visible' || toState === 'hidden') {
|
|
683
|
+
this._closeOnInteraction = true;
|
|
684
|
+
}
|
|
685
|
+
}
|
|
686
|
+
/**
|
|
687
|
+
* Interactions on the HTML body should close the tooltip immediately as defined in the
|
|
688
|
+
* material design spec.
|
|
689
|
+
* https://material.io/design/components/tooltips.html#behavior
|
|
690
|
+
*/
|
|
691
|
+
_handleBodyInteraction() {
|
|
692
|
+
if (this._closeOnInteraction) {
|
|
693
|
+
this.hide(0);
|
|
694
|
+
}
|
|
695
|
+
}
|
|
696
|
+
/**
|
|
697
|
+
* Marks that the tooltip needs to be checked in the next change detection run.
|
|
698
|
+
* Mainly used for rendering the initial text before positioning a tooltip, which
|
|
699
|
+
* can be problematic in components with OnPush change detection.
|
|
700
|
+
*/
|
|
701
|
+
_markForCheck() {
|
|
702
|
+
this._changeDetectorRef.markForCheck();
|
|
703
|
+
}
|
|
704
|
+
/**
|
|
705
|
+
* Callback for when the timeout in this.show() gets completed.
|
|
706
|
+
* This method is only needed by the mdc-tooltip, and so it is only implemented
|
|
707
|
+
* in the mdc-tooltip, not here.
|
|
708
|
+
*/
|
|
709
|
+
_onShow() { }
|
|
710
|
+
}
|
|
711
|
+
_TooltipComponentBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0-next.15", ngImport: i0, type: _TooltipComponentBase, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
712
|
+
_TooltipComponentBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0-next.15", type: _TooltipComponentBase, ngImport: i0 });
|
|
713
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0-next.15", ngImport: i0, type: _TooltipComponentBase, decorators: [{
|
|
714
|
+
type: Directive
|
|
715
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; } });
|
|
716
|
+
/**
|
|
717
|
+
* Internal component that wraps the tooltip's content.
|
|
718
|
+
* @docs-private
|
|
719
|
+
*/
|
|
720
|
+
export class TooltipComponent extends _TooltipComponentBase {
|
|
721
|
+
constructor(changeDetectorRef, _breakpointObserver) {
|
|
722
|
+
super(changeDetectorRef);
|
|
723
|
+
this._breakpointObserver = _breakpointObserver;
|
|
724
|
+
/** Stream that emits whether the user has a handset-sized display. */
|
|
725
|
+
this._isHandset = this._breakpointObserver.observe(Breakpoints.Handset);
|
|
726
|
+
}
|
|
727
|
+
}
|
|
728
|
+
TooltipComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0-next.15", ngImport: i0, type: TooltipComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i6.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component });
|
|
729
|
+
TooltipComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0-next.15", type: TooltipComponent, selector: "mat-tooltip-component", host: { attributes: { "aria-hidden": "true" }, properties: { "style.zoom": "_visibility === \"visible\" ? 1 : null" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"mat-tooltip\"\n [ngClass]=\"tooltipClass\"\n [class.mat-tooltip-handset]=\"(_isHandset | async)?.matches\"\n [@state]=\"_visibility\"\n (@state.start)=\"_animationStart()\"\n (@state.done)=\"_animationDone($event)\">{{message}}</div>\n", styles: [".mat-tooltip-panel{pointer-events:none !important}.mat-tooltip{color:#fff;border-radius:4px;margin:14px;max-width:250px;padding-left:8px;padding-right:8px;overflow:hidden;text-overflow:ellipsis}.cdk-high-contrast-active .mat-tooltip{outline:solid 1px}.mat-tooltip-handset{margin:24px;padding-left:16px;padding-right:16px}\n"], directives: [{ type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], pipes: { "async": i7.AsyncPipe }, animations: [matTooltipAnimations.tooltipState], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
730
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0-next.15", ngImport: i0, type: TooltipComponent, decorators: [{
|
|
731
|
+
type: Component,
|
|
732
|
+
args: [{ selector: 'mat-tooltip-component', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, animations: [matTooltipAnimations.tooltipState], host: {
|
|
733
|
+
// Forces the element to have a layout in IE and Edge. This fixes issues where the element
|
|
734
|
+
// won't be rendered if the animations are disabled or there is no web animations polyfill.
|
|
735
|
+
'[style.zoom]': '_visibility === "visible" ? 1 : null',
|
|
736
|
+
'aria-hidden': 'true',
|
|
737
|
+
}, template: "<div class=\"mat-tooltip\"\n [ngClass]=\"tooltipClass\"\n [class.mat-tooltip-handset]=\"(_isHandset | async)?.matches\"\n [@state]=\"_visibility\"\n (@state.start)=\"_animationStart()\"\n (@state.done)=\"_animationDone($event)\">{{message}}</div>\n", styles: [".mat-tooltip-panel{pointer-events:none !important}.mat-tooltip{color:#fff;border-radius:4px;margin:14px;max-width:250px;padding-left:8px;padding-right:8px;overflow:hidden;text-overflow:ellipsis}.cdk-high-contrast-active .mat-tooltip{outline:solid 1px}.mat-tooltip-handset{margin:24px;padding-left:16px;padding-right:16px}\n"] }]
|
|
738
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i6.BreakpointObserver }]; } });
|
|
739
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tYXRlcmlhbC90b29sdGlwL3Rvb2x0aXAudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbWF0ZXJpYWwvdG9vbHRpcC90b29sdGlwLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsT0FBTyxFQUFDLGFBQWEsRUFBRSxZQUFZLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFlLHFCQUFxQixFQUFjLE1BQU0sdUJBQXVCLENBQUM7QUFDdkYsT0FBTyxFQUFDLE1BQU0sRUFBRSxjQUFjLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUM3RCxPQUFPLEVBQUMsa0JBQWtCLEVBQUUsV0FBVyxFQUFrQixNQUFNLHFCQUFxQixDQUFDO0FBQ3JGLE9BQU8sRUFLTCxPQUFPLEdBTVIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUMsUUFBUSxFQUFFLCtCQUErQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDaEYsT0FBTyxFQUFDLGVBQWUsRUFBZ0IsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsU0FBUyxFQUNULFVBQVUsRUFDVixNQUFNLEVBQ04sY0FBYyxFQUNkLEtBQUssRUFDTCxNQUFNLEVBRU4sUUFBUSxFQUNSLGdCQUFnQixFQUNoQixpQkFBaUIsR0FFbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBYSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDekMsT0FBTyxFQUFDLElBQUksRUFBRSxT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QWE7UUFDWCxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVEOzs7O09BSUc7SUFDTyxPQUFPLEtBQVUsQ0FBQzs7MEhBeEhSLHFCQUFxQjs4R0FBckIscUJBQXFCO21HQUFyQixxQkFBcUI7a0JBRDFDLFNBQVM7O0FBNEhWOzs7R0FHRztBQWVILE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxxQkFBcUI7SUFJekQsWUFDRSxpQkFBb0MsRUFDNUIsbUJBQXVDO1FBQy9DLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRGpCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBb0I7UUFMakQsdUVBQXVFO1FBQ3ZFLGVBQVUsR0FBZ0MsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7SUFNaEcsQ0FBQzs7cUhBUlUsZ0JBQWdCO3lHQUFoQixnQkFBZ0IsNk1DcjRCN0IsOFFBTUEsMGREdTNCYyxDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQzttR0FRcEMsZ0JBQWdCO2tCQWQ1QixTQUFTOytCQUNFLHVCQUF1QixpQkFHbEIsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxRQUN6Qzt3QkFDSiwwRkFBMEY7d0JBQzFGLDJGQUEyRjt3QkFDM0YsY0FBYyxFQUFFLHNDQUFzQzt3QkFDdEQsYUFBYSxFQUFFLE1BQU07cUJBQ3RCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5pbXBvcnQge0FuaW1hdGlvbkV2ZW50fSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7QXJpYURlc2NyaWJlciwgRm9jdXNNb25pdG9yfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQge0RpcmVjdGlvbmFsaXR5fSBmcm9tICdAYW5ndWxhci9jZGsvYmlkaSc7XG5pbXBvcnQge0Jvb2xlYW5JbnB1dCwgY29lcmNlQm9vbGVhblByb3BlcnR5LCBOdW1iZXJJbnB1dH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7RVNDQVBFLCBoYXNNb2RpZmllcktleX0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7QnJlYWtwb2ludE9ic2VydmVyLCBCcmVha3BvaW50cywgQnJlYWtwb2ludFN0YXRlfSBmcm9tICdAYW5ndWxhci9jZGsvbGF5b3V0JztcbmltcG9ydCB7XG4gIENvbm5lY3RlZFBvc2l0aW9uLFxuICBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3ksXG4gIEhvcml6b250YWxDb25uZWN0aW9uUG9zLFxuICBPcmlnaW5Db25uZWN0aW9uUG9zaXRpb24sXG4gIE92ZXJsYXksXG4gIE92ZXJsYXlDb25uZWN0aW9uUG9zaXRpb24sXG4gIE92ZXJsYXlSZWYsXG4gIFNjcm9sbFN0cmF0ZWd5LFxuICBWZXJ0aWNhbENvbm5lY3Rpb25Qb3MsXG4gIENvbm5lY3Rpb25Qb3NpdGlvblBhaXIsXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7UGxhdGZvcm0sIG5vcm1hbGl6ZVBhc3NpdmVMaXN0ZW5lck9wdGlvbnN9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wbGF0Zm9ybSc7XG5pbXBvcnQge0NvbXBvbmVudFBvcnRhbCwgQ29tcG9uZW50VHlwZX0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQge1Njcm9sbERpc3BhdGNoZXJ9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgSW5qZWN0LFxuICBJbmplY3Rpb25Ub2tlbixcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBPcHRpb25hbCxcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIEFmdGVyVmlld0luaXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtET0NVTUVOVH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge3Rha2UsIHRha2VVbnRpbH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge21hdFRvb2x0aXBBbmltYXRpb25zfSBmcm9tICcuL3Rvb2x0aXAtYW5pbWF0aW9ucyc7XG5cblxuLyoqIFBvc3NpYmxlIHBvc2l0aW9ucyBmb3IgYSB0b29sdGlwLiAqL1xuZXhwb3J0IHR5cGUgVG9vbHRpcFBvc2l0aW9uID0gJ2xlZnQnIHwgJ3JpZ2h0JyB8ICdhYm92ZScgfCAnYmVsb3cnIHwgJ2JlZm9yZScgfCAnYWZ0ZXInO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGhvdyB0aGUgdG9vbHRpcCB0cmlnZ2VyIHNob3VsZCBoYW5kbGUgdG91Y2ggZ2VzdHVyZXMuXG4gKiBTZWUgYE1hdFRvb2x0aXAudG91Y2hHZXN0dXJlc2AgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKi9cbmV4cG9ydCB0eXBlIFRvb2x0aXBUb3VjaEdlc3R1cmVzID0gJ2F1dG8nIHwgJ29uJyB8ICdvZmYnO1xuXG4vKiogUG9zc2libGUgdmlzaWJpbGl0eSBzdGF0ZXMgb2YgYSB0b29sdGlwLiAqL1xuZXhwb3J0IHR5cGUgVG9vbHRpcFZpc2liaWxpdHkgPSAnaW5pdGlhbCcgfCAndmlzaWJsZScgfCAnaGlkZGVuJztcblxuLyoqIFRpbWUgaW4gbXMgdG8gdGhyb3R0bGUgcmVwb3NpdGlvbmluZyBhZnRlciBzY3JvbGwgZXZlbnRzLiAqL1xuZXhwb3J0IGNvbnN0IFNDUk9MTF9USFJPVFRMRV9NUyA9IDIwO1xuXG4vKipcbiAqIENTUyBjbGFzcyB0aGF0IHdpbGwgYmUgYXR0YWNoZWQgdG8gdGhlIG92ZXJsYXkgcGFuZWwuXG4gKiBAZGVwcmVjYXRlZFxuICogQGJyZWFraW5nLWNoYW5nZSAxMy4wLjAgcmVtb3ZlIHRoaXMgdmFyaWFibGVcbiAqL1xuZXhwb3J0IGNvbnN0IFRPT0xUSVBfUEFORUxfQ0xBU1MgPSAnbWF0LXRvb2x0aXAtcGFuZWwnO1xuXG5jb25zdCBQQU5FTF9DTEFTUyA9ICd0b29sdGlwLXBhbmVsJztcblxuLyoqIE9wdGlvbnMgdXNlZCB0byBiaW5kIHBhc3NpdmUgZXZlbnQgbGlzdGVuZXJzLiAqL1xuY29uc3QgcGFzc2l2ZUxpc3RlbmVyT3B0aW9ucyA9IG5vcm1hbGl6ZVBhc3NpdmVMaXN0ZW5lck9wdGlvbnMoe3Bhc3NpdmU6IHRydWV9KTtcblxuLyoqXG4gKiBUaW1lIGJldHdlZW4gdGhlIHVzZXIgcHV0dGluZyB0aGUgcG9pbnRlciBvbiBhIHRvb2x0aXBcbiAqIHRyaWdnZXIgYW5kIHRoZSBsb25nIHByZXNzIGV2ZW50IGJlaW5nIGZpcmVkLlxuICovXG5jb25zdCBMT05HUFJFU1NfREVMQVkgPSA1MDA7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBlcnJvciB0byBiZSB0aHJvd24gaWYgdGhlIHVzZXIgc3VwcGxpZWQgYW4gaW52YWxpZCB0b29sdGlwIHBvc2l0aW9uLlxuICogQGRvY3MtcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWF0VG9vbHRpcEludmFsaWRQb3NpdGlvbkVycm9yKHBvc2l0aW9uOiBzdHJpbmcpIHtcbiAgcmV0dXJuIEVycm9yKGBUb29sdGlwIHBvc2l0aW9uIFwiJHtwb3NpdGlvbn1cIiBpcyBpbnZhbGlkLmApO1xufVxuXG4vKiogSW5qZWN0aW9uIHRva2VuIHRoYXQgZGV0ZXJtaW5lcyB0aGUgc2Nyb2xsIGhhbmRsaW5nIHdoaWxlIGEgdG9vbHRpcCBpcyB2aXNpYmxlLiAqL1xuZXhwb3J0IGNvbnN0IE1BVF9UT09MVElQX1NDUk9MTF9TVFJBVEVHWSA9XG4gICAgbmV3IEluamVjdGlvblRva2VuPCgpID0+IFNjcm9sbFN0cmF0ZWd5PignbWF0LXRvb2x0aXAtc2Nyb2xsLXN0cmF0ZWd5Jyk7XG5cbi8qKiBAZG9jcy1wcml2YXRlICovXG5leHBvcnQgZnVuY3Rpb24gTUFUX1RPT0xUSVBfU0NST0xMX1NUUkFURUdZX0ZBQ1RPUlkob3ZlcmxheTogT3ZlcmxheSk6ICgpID0+IFNjcm9sbFN0cmF0ZWd5IHtcbiAgcmV0dXJuICgpID0+IG92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKHtzY3JvbGxUaHJvdHRsZTogU0NST0xMX1RIUk9UVExFX01TfSk7XG59XG5cbi8qKiBAZG9jcy1wcml2YXRlICovXG5leHBvcnQgY29uc3QgTUFUX1RPT0xUSVBfU0NST0xMX1NUUkFURUdZX0ZBQ1RPUllfUFJPVklERVIgPSB7XG4gIHByb3ZpZGU6IE1BVF9UT09MVElQX1NDUk9MTF9TVFJBVEVHWSxcbiAgZGVwczogW092ZXJsYXldLFxuICB1c2VGYWN0b3J5OiBNQVRfVE9PTFRJUF9TQ1JPTExfU1RSQVRFR1lfRkFDVE9SWSxcbn07XG5cbi8qKiBEZWZhdWx0IGBtYXRUb29sdGlwYCBvcHRpb25zIHRoYXQgY2FuIGJlIG92ZXJyaWRkZW4uICovXG5leHBvcnQgaW50ZXJmYWNlIE1hdFRvb2x0aXBEZWZhdWx0T3B0aW9ucyB7XG4gIHNob3dEZWxheTogbnVtYmVyO1xuICBoaWRlRGVsYXk6IG51bWJlcjtcbiAgdG91Y2hlbmRIaWRlRGVsYXk6IG51bWJlcjtcbiAgdG91Y2hHZXN0dXJlcz86IFRvb2x0aXBUb3VjaEdlc3R1cmVzO1xuICBwb3NpdGlvbj86IFRvb2x0aXBQb3NpdGlvbjtcbn1cblxuLyoqIEluamVjdGlvbiB0b2tlbiB0byBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IG9wdGlvbnMgZm9yIGBtYXRUb29sdGlwYC4gKi9cbmV4cG9ydCBjb25zdCBNQVRfVE9PTFRJUF9ERUZBVUxUX09QVElPTlMgPVxuICAgIG5ldyBJbmplY3Rpb25Ub2tlbjxNYXRUb29sdGlwRGVmYXVsdE9wdGlvbnM+KCdtYXQtdG9vbHRpcC1kZWZhdWx0LW9wdGlvbnMnLCB7XG4gICAgICBwcm92aWRlZEluOiAncm9vdCcsXG4gICAgICBmYWN0b3J5OiBNQVRfVE9PTFRJUF9ERUZBVUxUX09QVElPTlNfRkFDVE9SWVxuICAgIH0pO1xuXG4vKiogQGRvY3MtcHJpdmF0ZSAqL1xuZXhwb3J0IGZ1bmN0aW9uIE1BVF9UT09MVElQX0RFRkFVTFRfT1BUSU9OU19GQUNUT1JZKCk6IE1hdFRvb2x0aXBEZWZhdWx0T3B0aW9ucyB7XG4gIHJldHVybiB7XG4gICAgc2hvd0RlbGF5OiAwLFxuICAgIGhpZGVEZWxheTogMCxcbiAgICB0b3VjaGVuZEhpZGVEZWxheTogMTUwMCxcbiAgfTtcbn1cblxuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBfTWF0VG9vbHRpcEJhc2U8VCBleHRlbmRzIF9Ub29sdGlwQ29tcG9uZW50QmFzZT4gaW1wbGVtZW50cyBPbkRlc3Ryb3ksXG4gIEFmdGVyVmlld0luaXQge1xuICBfb3ZlcmxheVJlZjogT3ZlcmxheVJlZiB8IG51bGw7XG4gIF90b29sdGlwSW5zdGFuY2U6IFQgfCBudWxsO1xuXG4gIHByaXZhdGUgX3BvcnRhbDogQ29tcG9uZW50UG9ydGFsPFQ+O1xuICBwcml2YXRlIF9wb3NpdGlvbjogVG9vbHRpcFBvc2l0aW9uID0gJ2JlbG93JztcbiAgcHJpdmF0ZSBfZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfdG9vbHRpcENsYXNzOiBzdHJpbmd8c3RyaW5nW118U2V0PHN0cmluZz58e1trZXk6IHN0cmluZ106IGFueX07XG4gIHByaXZhdGUgX3Njcm9sbFN0cmF0ZWd5OiAoKSA9PiBTY3JvbGxTdHJhdGVneTtcbiAgcHJpdmF0ZSBfdmlld0luaXRpYWxpemVkID0gZmFsc2U7XG4gIHByaXZhdGUgX3BvaW50ZXJFeGl0RXZlbnRzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IHJlYWRvbmx5IF90b29sdGlwQ29tcG9uZW50OiBDb21wb25lbnRUeXBlPFQ+O1xuICBwcm90ZWN0ZWQgX3ZpZXdwb3J0TWFyZ2luID0gODtcbiAgcHJpdmF0ZSBfY3VycmVudFBvc2l0aW9uOiBUb29sdGlwUG9zaXRpb247XG4gIHByb3RlY3RlZCByZWFkb25seSBfY3NzQ2xhc3NQcmVmaXg6IHN0cmluZyA9ICdtYXQnO1xuXG4gIC8qKiBBbGxvd3MgdGhlIHVzZXIgdG8gZGVmaW5lIHRoZSBwb3NpdGlvbiBvZiB0aGUgdG9vbHRpcCByZWxhdGl2ZSB0byB0aGUgcGFyZW50IGVsZW1lbnQgKi9cbiAgQElucHV0KCdtYXRUb29sdGlwUG9zaXRpb24nKVxuICBnZXQgcG9zaXRpb24oKTogVG9vbHRpcFBvc2l0aW9uIHsgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uOyB9XG4gIHNldCBwb3NpdGlvbih2YWx1ZTogVG9vbHRpcFBvc2l0aW9uKSB7XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLl9wb3NpdGlvbikge1xuICAgICAgdGhpcy5fcG9zaXRpb24gPSB2YWx1ZTtcblxuICAgICAgaWYgKHRoaXMuX292ZXJsYXlSZWYpIHtcbiAgICAgICAgdGhpcy5fdXBkYXRlUG9zaXRpb24odGhpcy5fb3ZlcmxheVJlZik7XG4gICAgICAgIHRoaXMuX3Rvb2x0aXBJbnN0YW5jZT8uc2hvdygwKTtcbiAgICAgICAgdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBEaXNhYmxlcyB0aGUgZGlzcGxheSBvZiB0aGUgdG9vbHRpcC4gKi9cbiAgQElucHV0KCdtYXRUb29sdGlwRGlzYWJsZWQnKVxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9kaXNhYmxlZDsgfVxuICBzZXQgZGlzYWJsZWQodmFsdWUpIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG5cbiAgICAvLyBJZiB0b29sdGlwIGlzIGRpc2FibGVkLCBoaWRlIGltbWVkaWF0ZWx5LlxuICAgIGlmICh0aGlzLl9kaXNhYmxlZCkge1xuICAgICAgdGhpcy5oaWRlKDApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZXR1cFBvaW50ZXJFbnRlckV2ZW50c0lmTmVlZGVkKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFRoZSBkZWZhdWx0IGRlbGF5IGluIG1zIGJlZm9yZSBzaG93aW5nIHRoZSB0b29sdGlwIGFmdGVyIHNob3cgaXMgY2FsbGVkICovXG4gIEBJbnB1dCgnbWF0VG9vbHRpcFNob3dEZWxheScpIHNob3dEZWxheTogbnVtYmVyID0gdGhpcy5fZGVmYXVsdE9wdGlvbnMuc2hvd0RlbGF5O1xuXG4gIC8qKiBUaGUgZGVmYXVsdCBkZWxheSBpbiBtcyBiZWZvcmUgaGlkaW5nIHRoZSB0b29sdGlwIGFmdGVyIGhpZGUgaXMgY2FsbGVkICovXG4gIEBJbnB1dCgnbWF0VG9vbHRpcEhpZGVEZWxheScpIGhpZGVEZWxheTogbnVtYmVyID0gdGhpcy5fZGVmYXVsdE9wdGlvbnMuaGlkZURlbGF5O1xuXG4gIC8qKlxuICAgKiBIb3cgdG91Y2ggZ2VzdHVyZXMgc2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhlIHRvb2x0aXAuIE9uIHRvdWNoIGRldmljZXMgdGhlIHRvb2x0aXAgZGlyZWN0aXZlXG4gICAqIHVzZXMgYSBsb25nIHByZXNzIGdlc3R1cmUgdG8gc2hvdyBhbmQgaGlkZSwgaG93ZXZlciBpdCBjYW4gY29uZmxpY3Qgd2l0aCB0aGUgbmF0aXZlIGJyb3dzZXJcbiAgICogZ2VzdHVyZXMuIFRvIHdvcmsgYXJvdW5kIHRoZSBjb25mbGljdCwgQW5ndWxhciBNYXRlcmlhbCBkaXNhYmxlcyBuYXRpdmUgZ2VzdHVyZXMgb24gdGhlXG4gICAqIHRyaWdnZXIsIGJ1dCB0aGF0IG1pZ2h0IG5vdCBiZSBkZXNpcmFibGUgb24gcGFydGljdWxhciBlbGVtZW50cyAoZS5nLiBpbnB1dHMgYW5kIGRyYWdnYWJsZVxuICAgKiBlbGVtZW50cykuIFRoZSBkaWZmZXJlbnQgdmFsdWVzIGZvciB0aGlzIG9wdGlvbiBjb25maWd1cmUgdGhlIHRvdWNoIGV2ZW50IGhhbmRsaW5nIGFzIGZvbGxvd3M6XG4gICAqIC0gYGF1dG9gIC0gRW5hYmxlcyB0b3VjaCBnZXN0dXJlcyBmb3IgYWxsIGVsZW1lbnRzLCBidXQgdHJpZXMgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGggbmF0aXZlXG4gICAqICAgYnJvd3NlciBnZXN0dXJlcyBvbiBwYXJ0aWN1bGFyIGVsZW1lbnRzLiBJbiBwYXJ0aWN1bGFyLCBpdCBhbGxvd3MgdGV4dCBzZWxlY3Rpb24gb24gaW5wdXRzXG4gICAqICAgYW5kIHRleHRhcmVhcywgYW5kIHByZXNlcnZlcyB0aGUgbmF0aXZlIGJyb3dzZXIgZHJhZ2dpbmcgb24gZWxlbWVudHMgbWFya2VkIGFzIGBkcmFnZ2FibGVgLlxuICAgKiAtIGBvbmAgLSBFbmFibGVzIHRvdWNoIGdlc3R1cmVzIGZvciBhbGwgZWxlbWVudHMgYW5kIGRpc2FibGVzIG5hdGl2ZVxuICAgKiAgIGJyb3dzZXIgZ2VzdHVyZXMgd2l0aCBubyBleGNlcHRpb25zLlxuICAgKiAtIGBvZmZgIC0gRGlzYWJsZXMgdG91Y2ggZ2VzdHVyZXMuIE5vdGUgdGhhdCB0aGlzIHdpbGwgcHJldmVudCB0aGUgdG9vbHRpcCBmcm9tXG4gICAqICAgc2hvd2luZyBvbiB0b3VjaCBkZXZpY2VzLlxuICAgKi9cbiAgQElucHV0KCdtYXRUb29sdGlwVG91Y2hHZXN0dXJlcycpIHRvdWNoR2VzdHVyZXM6IFRvb2x0aXBUb3VjaEdlc3R1cmVzID0gJ2F1dG8nO1xuXG4gIC8qKiBUaGUgbWVzc2FnZSB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHRvb2x0aXAgKi9cbiAgQElucHV0KCdtYXRUb29sdGlwJylcbiAgZ2V0IG1lc3NhZ2UoKSB7IHJldHVybiB0aGlzLl9tZXNzYWdlOyB9XG4gIHNldCBtZXNzYWdlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9hcmlhRGVzY3JpYmVyLnJlbW92ZURlc2NyaXB0aW9uKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgdGhpcy5fbWVzc2FnZSwgJ3Rvb2x0aXAnKTtcblxuICAgIC8vIElmIHRoZSBtZXNzYWdlIGlzIG5vdCBhIHN0cmluZyAoZS5nLiBudW1iZXIpLCBjb252ZXJ0IGl0IHRvIGEgc3RyaW5nIGFuZCB0cmltIGl0LlxuICAgIC8vIE11c3QgY29udmVydCB3aXRoIGBTdHJpbmcodmFsdWUpYCwgbm90IGAke3ZhbHVlfWAsIG90aGVyd2lzZSBDbG9zdXJlIENvbXBpbGVyIG9wdGltaXNlc1xuICAgIC8vIGF3YXkgdGhlIHN0cmluZy1jb252ZXJzaW9uOiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9jb21wb25lbnRzL2lzc3Vlcy8yMDY4NFxuICAgIHRoaXMuX21lc3NhZ2UgPSB2YWx1ZSAhPSBudWxsID8gU3RyaW5nKHZhbHVlKS50cmltKCkgOiAnJztcblxuICAgIGlmICghdGhpcy5fbWVzc2FnZSAmJiB0aGlzLl9pc1Rvb2x0aXBWaXNpYmxlKCkpIHtcbiAgICAgIHRoaXMuaGlkZSgwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc2V0dXBQb2ludGVyRW50ZXJFdmVudHNJZk5lZWRlZCgpO1xuICAgICAgdGhpcy5fdXBkYXRlVG9vbHRpcE1lc3NhZ2UoKTtcbiAgICAgIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgIC8vIFRoZSBgQXJpYURlc2NyaWJlcmAgaGFzIHNvbWUgZnVuY3Rpb25hbGl0eSB0aGF0IGF2b2lkcyBhZGRpbmcgYSBkZXNjcmlwdGlvbiBpZiBpdCdzIHRoZVxuICAgICAgICAvLyBzYW1lIGFzIHRoZSBgYXJpYS1sYWJlbGAgb2YgYW4gZWxlbWVudCwgaG93ZXZlciB3ZSBjYW4ndCBrbm93IHdoZXRoZXIgdGhlIHRvb2x0aXAgdHJpZ2dlclxuICAgICAgICAvLyBoYXMgYSBkYXRhLWJvdW5kIGBhcmlhLWxhYmVsYCBvciB3aGVuIGl0J2xsIGJlIHNldCBmb3IgdGhlIGZpcnN0IHRpbWUuIFdlIGNhbiBhdm9pZCB0aGVcbiAgICAgICAgLy8gaXNzdWUgYnkgZGVmZXJyaW5nIHRoZSBkZXNjcmlwdGlvbiBieSBhIHRpY2sgc28gQW5ndWxhciBoYXMgdGltZSB0byBzZXQgdGhlIGBhcmlhLWxhYmVsYC5cbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fYXJpYURlc2NyaWJlci5kZXNjcmliZSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHRoaXMubWVzc2FnZSwgJ3Rvb2x0aXAnKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfbWVzc2FnZSA9ICcnO1xuXG4gIC8qKiBDbGFzc2VzIHRvIGJlIHBhc3NlZCB0byB0aGUgdG9vbHRpcC4gU3VwcG9ydHMgdGhlIHNhbWUgc3ludGF4IGFzIGBuZ0NsYXNzYC4gKi9cbiAgQElucHV0KCdtYXRUb29sdGlwQ2xhc3MnKVxuICBnZXQgdG9vbHRpcENsYXNzKCkgeyByZXR1cm4gdGhpcy5fdG9vbHRpcENsYXNzOyB9XG4gIHNldCB0b29sdGlwQ2xhc3ModmFsdWU6IHN0cmluZ3xzdHJpbmdbXXxTZXQ8c3RyaW5nPnx7W2tleTogc3RyaW5nXTogYW55fSkge1xuICAgIHRoaXMuX3Rvb2x0aXBDbGFzcyA9IHZhbHVlO1xuICAgIGlmICh0aGlzLl90b29sdGlwSW5zdGFuY2UpIHtcbiAgICAgIHRoaXMuX3NldFRvb2x0aXBDbGFzcyh0aGlzLl90b29sdGlwQ2xhc3MpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBNYW51YWxseS1ib3VuZCBwYXNzaXZlIGV2ZW50IGxpc3RlbmVycy4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfcGFzc2l2ZUxpc3RlbmVyczpcbiAgICAgIChyZWFkb25seSBbc3RyaW5nLCBFdmVudExpc3RlbmVyT3JFdmVudExpc3RlbmVyT2JqZWN0XSlbXSA9IFtdO1xuXG4gIC8qKiBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZG9jdW1lbnQuICovXG4gIHByaXZhdGUgX2RvY3VtZW50OiBEb2N1bWVudDtcblxuICAvKiogVGltZXIgc3RhcnRlZCBhdCB0aGUgbGFzdCBgdG91Y2hzdGFydGAgZXZlbnQuICovXG4gIHByaXZhdGUgX3RvdWNoc3RhcnRUaW1lb3V0OiBhbnk7XG5cbiAgLyoqIEVtaXRzIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBkZXN0cm95ZWQuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3llZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfb3ZlcmxheTogT3ZlcmxheSxcbiAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBwcml2YXRlIF9zY3JvbGxEaXNwYXRjaGVyOiBTY3JvbGxEaXNwYXRjaGVyLFxuICAgIHByaXZhdGUgX3ZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSBfbmdab25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSBfcGxhdGZvcm06IFBsYXRmb3JtLFxuICAgIHByaXZhdGUgX2FyaWFEZXNjcmliZXI6IEFyaWFEZXNjcmliZXIsXG4gICAgcHJpdmF0ZSBfZm9jdXNNb25pdG9yOiBGb2N1c01vbml0b3IsXG4gICAgc2Nyb2xsU3RyYXRlZ3k6IGFueSxcbiAgICBwcm90ZWN0ZWQgX2RpcjogRGlyZWN0aW9uYWxpdHksXG4gICAgcHJpdmF0ZSBfZGVmYXVsdE9wdGlvbnM6IE1hdFRvb2x0aXBEZWZhdWx0T3B0aW9ucyxcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBfZG9jdW1lbnQ6IGFueSkge1xuXG4gICAgdGhpcy5fc2Nyb2xsU3RyYXRlZ3kgPSBzY3JvbGxTdHJhdGVneTtcbiAgICB0aGlzLl9kb2N1bWVudCA9IF9kb2N1bWVudDtcblxuICAgIGlmIChfZGVmYXVsdE9wdGlvbnMpIHtcbiAgICAgIGlmIChfZGVmYXVsdE9wdGlvbnMucG9zaXRpb24pIHtcbiAgICAgICAgdGhpcy5wb3NpdGlvbiA9IF9kZWZhdWx0T3B0aW9ucy5wb3NpdGlvbjtcbiAgICAgIH1cblxuICAgICAgaWYgKF9kZWZhdWx0T3B0aW9ucy50b3VjaEdlc3R1cmVzKSB7XG4gICAgICAgIHRoaXMudG91Y2hHZXN0dXJlcyA9IF9kZWZhdWx0T3B0aW9ucy50b3VjaEdlc3R1cmVzO1xuICAgICAgfVxuICAgIH1cblxuICAgIF9kaXIuY2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fb3ZlcmxheVJlZikge1xuICAgICAgICB0aGlzLl91cGRhdGVQb3NpdGlvbih0aGlzLl9vdmVybGF5UmVmKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5faGFuZGxlS2V5ZG93bik7XG4gICAgfSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgLy8gVGhpcyBuZWVkcyB0byBoYXBwZW4gYWZ0ZXIgdmlldyBpbml0IHNvIHRoZSBpbml0aWFsIHZhbHVlcyBmb3IgYWxsIGlucHV0cyBoYXZlIGJlZW4gc2V0LlxuICAgIHRoaXMuX3ZpZXdJbml0aWFsaXplZCA9IHRydWU7XG4gICAgdGhpcy5fc2V0dXBQb2ludGVyRW50ZXJFdmVudHNJZk5lZWRlZCgpO1xuXG4gICAgdGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IodGhpcy5fZWxlbWVudFJlZilcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpKVxuICAgICAgLnN1YnNjcmliZShvcmlnaW4gPT4ge1xuICAgICAgICAvLyBOb3RlIHRoYXQgdGhlIGZvY3VzIG1vbml0b3IgcnVucyBvdXRzaWRlIHRoZSBBbmd1bGFyIHpvbmUuXG4gICAgICAgIGlmICghb3JpZ2luKSB7XG4gICAgICAgICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB0aGlzLmhpZGUoMCkpO1xuICAgICAgICB9IGVsc2UgaWYgKG9yaWdpbiA9PT0gJ2tleWJvYXJkJykge1xuICAgICAgICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4gdGhpcy5zaG93KCkpO1xuICAgICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGlzcG9zZSB0aGUgdG9vbHRpcCB3aGVuIGRlc3Ryb3llZC5cbiAgICovXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGNvbnN0IG5hdGl2ZUVsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICBjbGVhclRpbWVvdXQodGhpcy5fdG91Y2hzdGFydFRpbWVvdXQpO1xuXG4gICAgaWYgKHRoaXMuX292ZXJsYXlSZWYpIHtcbiAgICAgIHRoaXMuX292ZXJsYXlSZWYuZGlzcG9zZSgpO1xuICAgICAgdGhpcy5fdG9vbHRpcEluc3RhbmNlID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBDbGVhbiB1cCB0aGUgZXZlbnQgbGlzdGVuZXJzIHNldCBpbiB0aGUgY29uc3RydWN0b3JcbiAgICBuYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9oYW5kbGVLZXlkb3duKTtcbiAgICB0aGlzLl9wYXNzaXZlTGlzdGVuZXJzLmZvckVhY2goKFtldmVudCwgbGlzdGVuZXJdKSA9PiB7XG4gICAgICBuYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyLCBwYXNzaXZlTGlzdGVuZXJPcHRpb25zKTtcbiAgICB9KTtcbiAgICB0aGlzLl9wYXNzaXZlTGlzdGVuZXJzLmxlbmd0aCA9IDA7XG5cbiAgICB0aGlzLl9kZXN0cm95ZWQubmV4dCgpO1xuICAgIHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpO1xuXG4gICAgdGhpcy5fYXJpYURlc2NyaWJlci5yZW1vdmVEZXNjcmlwdGlvbihuYXRpdmVFbGVtZW50LCB0aGlzLm1lc3NhZ2UsICd0b29sdGlwJyk7XG4gICAgdGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKG5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgLyoqIFNob3dzIHRoZSB0b29sdGlwIGFmdGVyIHRoZSBkZWxheSBpbiBtcywgZGVmYXVsdHMgdG8gdG9vbHRpcC1kZWxheS1zaG93IG9yIDBtcyBpZiBubyBpbnB1dCAqL1xuICBzaG93KGRlbGF5OiBudW1iZXIgPSB0aGlzLnNob3dEZWxheSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8ICF0aGlzLm1lc3NhZ2UgfHwgKHRoaXMuX2lzVG9vbHRpcFZpc2libGUoKSAmJlxuICAgICAgIXRoaXMuX3Rvb2x0aXBJbnN0YW5jZSEuX3Nob3dUaW1lb3V0SWQgJiYgIXRoaXMuX3Rvb2x0aXBJbnN0YW5jZSEuX2hpZGVUaW1lb3V0SWQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBvdmVybGF5UmVmID0gdGhpcy5fY3JlYXRlT3ZlcmxheSgpO1xuICAgIHRoaXMuX2RldGFjaCgpO1xuICAgIHRoaXMuX3BvcnRhbCA9IHRoaXMuX3BvcnRhbCB8fFxuICAgICAgIG5ldyBDb21wb25lbnRQb3J0YWwodGhpcy5fdG9vbHRpcENvbXBvbmVudCwgdGhpcy5fdmlld0NvbnRhaW5lclJlZik7XG4gICAgdGhpcy5fdG9vbHRpcEluc3RhbmNlID0gb3ZlcmxheVJlZi5hdHRhY2godGhpcy5fcG9ydGFsKS5pbnN0YW5jZTtcbiAgICB0aGlzLl90b29sdGlwSW5zdGFuY2UuYWZ0ZXJIaWRkZW4oKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2RldGFjaCgpKTtcbiAgICB0aGlzLl9zZXRUb29sdGlwQ2xhc3ModGhpcy5fdG9vbHRpcENsYXNzKTtcbiAgICB0aGlzLl91cGRhdGVUb29sdGlwTWVzc2FnZSgpO1xuICAgIHRoaXMuX3Rvb2x0aXBJbnN0YW5jZSEuc2hvdyhkZWxheSk7XG4gIH1cblxuICAvKiogSGlkZXMgdGhlIHRvb2x0aXAgYWZ0ZXIgdGhlIGRlbGF5IGluIG1zLCBkZWZhdWx0cyB0byB0b29sdGlwLWRlbGF5LWhpZGUgb3IgMG1zIGlmIG5vIGlucHV0ICovXG4gIGhpZGUoZGVsYXk6IG51bWJlciA9IHRoaXMuaGlkZURlbGF5KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3Rvb2x0aXBJbnN0YW5jZSkge1xuICAgICAgdGhpcy5fdG9vbHRpcEluc3RhbmNlLmhpZGUoZGVsYXkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBTaG93cy9oaWRlcyB0aGUgdG9vbHRpcCAqL1xuICB0b2dnbGUoKTogdm9pZCB7XG4gICAgdGhpcy5faXNUb29sdGlwVmlzaWJsZSgpID8gdGhpcy5oaWRlKCkgOiB0aGlzLnNob3coKTtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIHRvb2x0aXAgaXMgY3VycmVudGx5IHZpc2libGUgdG8gdGhlIHVzZXIgKi9cbiAgX2lzVG9vbHRpcFZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5fdG9vbHRpcEluc3RhbmNlICYmIHRoaXMuX3Rvb2x0aXBJbnN0YW5jZS5pc1Zpc2libGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHRoZSBrZXlkb3duIGV2ZW50cyBvbiB0aGUgaG9zdCBlbGVtZW50LlxuICAgKiBOZWVkcyB0byBiZSBhbiBhcnJvdyBmdW5jdGlvbiBzbyB0aGF0IHdlIGNhbiB1c2UgaXQgaW4gYWRkRXZlbnRMaXN0ZW5lci5cbiAgICovXG4gIHByaXZhdGUgX2hhbmRsZUtleWRvd24gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICBpZiAodGhpcy5faXNUb29sdGlwVmlzaWJsZSgpICYmIGV2ZW50LmtleUNvZGUgPT09IEVTQ0FQRSAmJiAhaGFzTW9kaWZpZXJLZXkoZXZlbnQpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHRoaXMuaGlkZSgwKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIENyZWF0ZSB0aGUgb3ZlcmxheSBjb25maWcgYW5kIHBvc2l0aW9uIHN0cmF0ZWd5ICovXG4gIHByaXZhdGUgX2NyZWF0ZU92ZXJsYXkoKTogT3ZlcmxheVJlZiB7XG4gICAgaWYgKHRoaXMuX292ZXJsYXlSZWYpIHtcbiAgICAgIHJldHVybiB0aGlzLl9vdmVybGF5UmVmO1xuICAgIH1cblxuICAgIGNvbnN0IHNjcm9sbGFibGVBbmNlc3RvcnMgPVxuICAgICAgICB0aGlzLl9zY3JvbGxEaXNwYXRjaGVyLmdldEFuY2VzdG9yU2Nyb2xsQ29udGFpbmVycyh0aGlzLl9lbGVtZW50UmVmKTtcblxuICAgIC8vIENyZWF0ZSBjb25uZWN0ZWQgcG9zaXRpb24gc3RyYXRlZ3kgdGhhdCBsaXN0ZW5zIGZvciBzY3JvbGwgZXZlbnRzIHRvIHJlcG9zaXRpb24uXG4gICAgY29uc3Qgc3RyYXRlZ3kgPSB0aGlzLl9vdmVybGF5LnBvc2l0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAuZmxleGlibGVDb25uZWN0ZWRUbyh0aGlzLl9lbGVtZW50UmVmKVxuICAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoVHJhbnNmb3JtT3JpZ2luT24oYC4ke3RoaXMuX2Nzc0NsYXNzUHJlZml4fS10b29sdGlwYClcbiAgICAgICAgICAgICAgICAgICAgICAgICAud2l0aEZsZXhpYmxlRGltZW5zaW9ucyhmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAud2l0aFZpZXdwb3J0TWFyZ2luKHRoaXMuX3ZpZXdwb3J0TWFyZ2luKVxuICAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoU2Nyb2xsYWJsZUNvbnRhaW5lcnMoc2Nyb2xsYWJsZUFuY2VzdG9ycyk7XG5cbiAgICBzdHJhdGVneS5wb3NpdGlvbkNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKGNoYW5nZSA9PiB7XG4gICAgICB0aGlzLl91cGRhdGVDdXJyZW50UG9zaXRpb25DbGFzcyhjaGFuZ2UuY29ubmVjdGlvblBhaXIpO1xuXG4gICAgICBpZiAodGhpcy5fdG9vbHRpcEluc3RhbmNlKSB7XG4gICAgICAgIGlmIChjaGFuZ2Uuc2Nyb2xsYWJsZVZpZXdQcm9wZXJ0aWVzLmlzT3ZlcmxheUNsaXBwZWQgJiYgdGhpcy5fdG9vbHRpcEluc3RhbmNlLmlzVmlzaWJsZSgpKSB7XG4gICAgICAgICAgLy8gQWZ0ZXIgcG9zaXRpb24gY2hhbmdlcyBvY2N1ciBhbmQgdGhlIG92ZXJsYXkgaXMgY2xpcHBlZCBieVxuICAgICAgICAgIC8vIGEgcGFyZW50IHNjcm9sbGFibGUgdGhlbiBjbG9zZSB0aGUgdG9vbHRpcC5cbiAgICAgICAgICB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHRoaXMuaGlkZSgwKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuX292ZXJsYXlSZWYgPSB0aGlzLl9vdmVybGF5LmNyZWF0ZSh7XG4gICAgICBkaXJlY3Rpb246IHRoaXMuX2RpcixcbiAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IHN0cmF0ZWd5LFxuICAgICAgcGFuZWxDbGFzczogYCR7dGhpcy5fY3NzQ2xhc3NQcmVmaXh9LSR7UEFORUxfQ0xBU1N9YCxcbiAgICAgIHNjcm9sbFN0cmF0ZWd5OiB0aGlzLl9zY3JvbGxTdHJhdGVneSgpXG4gICAgfSk7XG5cbiAgICB0aGlzLl91cGRhdGVQb3NpdGlvbih0aGlzLl9vdmVybGF5UmVmKTtcblxuICAgIHRoaXMuX292ZXJsYXlSZWYuZGV0YWNobWVudHMoKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2RldGFjaCgpKTtcblxuICAgIHRoaXMuX292ZXJsYXlSZWYub3V0c2lkZVBvaW50ZXJFdmVudHMoKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuX3Rvb2x0aXBJbnN0YW5jZT8uX2hhbmRsZUJvZHlJbnRlcmFjdGlvbigpKTtcblxuICAgIHJldHVybiB0aGlzLl9vdmVybGF5UmVmO1xuICB9XG5cbiAgLyoqIERldGFjaGVzIHRoZSBjdXJyZW50bHktYXR0YWNoZWQgdG9vbHRpcC4gKi9cbiAgcHJpdmF0ZSBfZGV0YWNoKCkge1xuICAgIGlmICh0aGlzLl9vdmVybGF5UmVmICYmIHRoaXMuX292ZXJsYXlSZWYuaGFzQXR0YWNoZWQoKSkge1xuICAgICAgdGhpcy5fb3ZlcmxheVJlZi5kZXRhY2goKTtcbiAgICB9XG5cbiAgICB0aGlzLl90b29sdGlwSW5zdGFuY2UgPSBudWxsO1xuICB9XG5cbiAgLyoqIFVwZGF0ZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBjdXJyZW50IHRvb2x0aXAuICovXG4gIHByaXZhdGUgX3VwZGF0ZVBvc2l0aW9uKG92ZXJsYXlSZWY6IE92ZXJsYXlSZWYpIHtcbiAgICBjb25zdCBwb3NpdGlvbiA9IG92ZXJsYXlSZWYuZ2V0Q29uZmlnKCkucG9zaXRpb25TdHJhdGVneSBhcyBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3k7XG4gICAgY29uc3Qgb3JpZ2luID0gdGhpcy5fZ2V0T3JpZ2luKCk7XG4gICAgY29uc3Qgb3ZlcmxheSA9IHRoaXMuX2dldE92ZXJsYXlQb3NpdGlvbigpO1xuXG4gICAgcG9zaXRpb24ud2l0aFBvc2l0aW9ucyhbXG4gICAgICB0aGlzLl9hZGRPZmZzZXQoey4uLm9yaWdpbi5tYWluLCAuLi5vdmVybGF5Lm1haW59KSxcbiAgICAgIHRoaXMuX2FkZE9mZnNldCh7Li4ub3JpZ2luLmZhbGxiYWNrLCAuLi5vdmVybGF5LmZhbGxiYWNrfSlcbiAgICBdKTtcbiAgfVxuXG4gIC8qKiBBZGRzIHRoZSBjb25maWd1cmVkIG9mZnNldCB0byBhIHBvc2l0aW9uLiBVc2VkIGFzIGEgaG9vayBmb3IgY2hpbGQgY2xhc3Nlcy4gKi9cbiAgcHJvdGVjdGVkIF9hZGRPZmZzZXQocG9zaXRpb246IENvbm5lY3RlZFBvc2l0aW9uKTogQ29ubmVjdGVkUG9zaXRpb24ge1xuICAgIHJldHVybiBwb3NpdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBvcmlnaW4gcG9zaXRpb24gYW5kIGEgZmFsbGJhY2sgcG9zaXRpb24gYmFzZWQgb24gdGhlIHVzZXIncyBwb3NpdGlvbiBwcmVmZXJlbmNlLlxuICAgKiBUaGUgZmFsbGJhY2sgcG9zaXRpb24gaXMgdGhlIGludmVyc2Ugb2YgdGhlIG9yaWdpbiAoZS5nLiBgJ2JlbG93JyAtPiAnYWJvdmUnYCkuXG4gICAqL1xuICBfZ2V0T3JpZ2luKCk6IHttYWluOiBPcmlnaW5Db25uZWN0aW9uUG9zaXRpb24sIGZhbGxiYWNrOiBPcmlnaW5Db25uZWN0aW9uUG9zaXRpb259IHtcbiAgICBjb25zdCBpc0x0ciA9ICF0aGlzLl9kaXIgfHwgdGhpcy5fZGlyLnZhbHVlID09ICdsdHInO1xuICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5wb3NpdGlvbjtcbiAgICBsZXQgb3JpZ2luUG9zaXRpb246IE9yaWdpbkNvbm5lY3Rpb25Qb3NpdGlvbjtcblxuICAgIGlmIChwb3NpdGlvbiA9PSAnYWJvdmUnIHx8IHBvc2l0aW9uID09ICdiZWxvdycpIHtcbiAgICAgIG9yaWdpblBvc2l0aW9uID0ge29yaWdpblg6ICdjZW50ZXInLCBvcmlnaW5ZOiBwb3NpdGlvbiA9PSAnYWJvdmUnID8gJ3RvcCcgOiAnYm90dG9tJ307XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHBvc2l0aW9uID09ICdiZWZvcmUnIHx8XG4gICAgICAocG9zaXRpb24gPT0gJ2xlZnQnICYmIGlzTHRyKSB8fFxuICAgICAgKHBvc2l0aW9uID09ICdyaWdodCcgJiYgIWlzTHRyKSkge1xuICAgICAgb3JpZ2luUG9zaXRpb24gPSB7b3JpZ2luWDogJ3N0YXJ0Jywgb3JpZ2luWTogJ2NlbnRlcid9O1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBwb3NpdGlvbiA9PSAnYWZ0ZXInIHx8XG4gICAgICAocG9zaXRpb24gPT0gJ3JpZ2h0JyAmJiBpc0x0cikgfHxcbiAgICAgIChwb3NpdGlvbiA9PSAnbGVmdCcgJiYgIWlzTHRyKSkge1xuICAgICAgb3JpZ2luUG9zaXRpb24gPSB7b3JpZ2luWDogJ2VuZCcsIG9yaWdpblk6ICdjZW50ZXInfTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkge1xuICAgICAgdGhyb3cgZ2V0TWF0VG9vbHRpcEludmFsaWRQb3NpdGlvbkVycm9yKHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICBjb25zdCB7eCwgeX0gPSB0aGlzLl9pbnZlcnRQb3NpdGlvbihvcmlnaW5Qb3NpdGlvbiEub3JpZ2luWCwgb3JpZ2luUG9zaXRpb24hLm9yaWdpblkpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG1haW46IG9yaWdpblBvc2l0aW9uISxcbiAgICAgIGZhbGxiYWNrOiB7b3JpZ2luWDogeCwgb3JpZ2luWTogeX1cbiAgICB9O1xuICB9XG5cbiAgLyoqIFJldHVybnMgdGhlIG92ZXJsYXkgcG9zaXRpb24gYW5kIGEgZmFsbGJhY2sgcG9zaXRpb24gYmFzZWQgb24gdGhlIHVzZXIncyBwcmVmZXJlbmNlICovXG4gIF9nZXRPdmVybGF5UG9zaXRpb24oKToge21haW46IE92ZXJsYXlDb25uZWN0aW9uUG9zaXRpb24sIGZhbGxiYWNrOiBPdmVybGF5Q29ubmVjdGlvblBvc2l0aW9ufSB7XG4gICAgY29uc3QgaXNMdHIgPSAhdGhpcy5fZGlyIHx8IHRoaXMuX2Rpci52YWx1ZSA9PSAnbHRyJztcbiAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMucG9zaXRpb247XG4gICAgbGV0IG92ZXJsYXlQb3NpdGlvbjogT3ZlcmxheUNvbm5lY3Rpb25Qb3NpdGlvbjtcblxuICAgIGlmIChwb3NpdGlvbiA9PSAnYWJvdmUnKSB7XG4gICAgICBvdmVybGF5UG9zaXRpb24gPSB7b3ZlcmxheVg6ICdjZW50ZXInLCBvdmVybGF5WTogJ2JvdHRvbSd9O1xuICAgIH0gZWxzZSBpZiAocG9zaXRpb24gPT0gJ2JlbG93Jykge1xuICAgICAgb3ZlcmxheVBvc2l0aW9uID0ge292ZXJsYXlYOiAnY2VudGVyJywgb3ZlcmxheVk6ICd0b3AnfTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgcG9zaXRpb24gPT0gJ2JlZm9yZScgfHxcbiAgICAgIChwb3NpdGlvbiA9PSAnbGVmdCcgJiYgaXNMdHIpIHx8XG4gICAgICAocG9zaXRpb24gPT0gJ3JpZ2h0JyAmJiAhaXNMdHIpKSB7XG4gICAgICBvdmVybGF5UG9zaXRpb24gPSB7b3ZlcmxheVg6ICdlbmQnLCBvdmVybGF5WTogJ2NlbnRlcid9O1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBwb3NpdGlvbiA9PSAnYWZ0ZXInIHx8XG4gICAgICAocG9zaXRpb24gPT0gJ3JpZ2h0JyAmJiBpc0x0cikgfHxcbiAgICAgIChwb3NpdGlvbiA9PSAnbGVmdCcgJiYgIWlzTHRyKSkge1xuICAgICAgb3ZlcmxheVBvc2l0aW9uID0ge292ZXJsYXlYOiAnc3RhcnQnLCBvdmVybGF5WTogJ2NlbnRlcid9O1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSB7XG4gICAgICB0aHJvdyBnZXRNYXRUb29sdGlwSW52YWxpZFBvc2l0aW9uRXJyb3IocG9zaXRpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IHt4LCB5fSA9IHRoaXMuX2ludmVydFBvc2l0aW9uKG92ZXJsYXlQb3NpdGlvbiEub3ZlcmxheVgsIG92ZXJsYXlQb3NpdGlvbiEub3ZlcmxheVkpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG1haW46IG92ZXJsYXlQb3NpdGlvbiEsXG4gICAgICBmYWxsYmFjazoge292ZXJsYXlYOiB4LCBvdmVybGF5WTogeX1cbiAgICB9O1xuICB9XG5cbiAgLyoqIFVwZGF0ZXMgdGhlIHRvb2x0aXAgbWVzc2FnZSBhbmQgcmVwb3NpdGlvbnMgdGhlIG92ZXJsYXkgYWNjb3JkaW5nIHRvIHRoZSBuZXcgbWVzc2FnZSBsZW5ndGggKi9cbiAgcHJpdmF0ZSBfdXBkYXRlVG9vbHRpcE1lc3NhZ2UoKSB7XG4gICAgLy8gTXVzdCB3YWl0IGZvciB0aGUgbWVzc2FnZSB0byBiZSBwYWludGVkIHRvIHRoZSB0b29sdGlwIHNvIHRoYXQgdGhlIG92ZXJsYXkgY2FuIHByb3Blcmx5XG4gICAgLy8gY2FsY3VsYXRlIHRoZSBjb3JyZWN0IHBvc2l0aW9uaW5nIGJhc2VkIG9uIHRoZSBzaXplIG9mIHRoZSB0ZXh0LlxuICAgIGlmICh0aGlzLl90b29sdGlwSW5zdGFuY2UpIHtcbiAgICAgIHRoaXMuX3Rvb2x0aXBJbnN0YW5jZS5tZXNzYWdlID0gdGhpcy5tZXNzYWdlO1xuICAgICAgdGhpcy5fdG9vbHRpcEluc3RhbmNlLl9tYXJrRm9yQ2hlY2soKTtcblxuICAgICAgdGhpcy5fbmdab25lLm9uTWljcm90YXNrRW1wdHkucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZClcbiAgICAgICkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX3Rvb2x0aXBJbnN0YW5jZSkge1xuICAgICAgICAgIHRoaXMuX292ZXJsYXlSZWYhLnVwZGF0ZVBvc2l0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBVcGRhdGVzIHRoZSB0b29sdGlwIGNsYXNzICovXG4gIHByaXZhdGUgX3NldFRvb2x0aXBDbGFzcyh0b29sdGlwQ2xhc3M6IHN0cmluZ3xzdHJpbmdbXXxTZXQ8c3RyaW5nPnx7W2tleTogc3RyaW5nXTogYW55fSkge1xuICAgIGlmICh0aGlzLl90b29sdGlwSW5zdGFuY2UpIHtcbiAgICAgIHRoaXMuX3Rvb2x0aXBJbnN0YW5jZS50b29sdGlwQ2xhc3MgPSB0b29sdGlwQ2xhc3M7XG4gICAgICB0aGlzLl90b29sdGlwSW5zdGFuY2UuX21hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBJbnZlcnRzIGFuIG92ZXJsYXkgcG9zaXRpb24uICovXG4gIHByaXZhdGUgX2ludmVydFBvc2l0aW9uKHg6IEhvcml6b250YWxDb25uZWN0aW9uUG9zLCB5OiBWZXJ0aWNhbENvbm5lY3Rpb25Qb3MpIHtcbiAgICBpZiAodGhpcy5wb3NpdGlvbiA9PT0gJ2Fib3ZlJyB8fCB0aGlzLnBvc2l0aW9uID09PSAnYmVsb3cnKSB7XG4gICAgICBpZiAoeSA9PT0gJ3RvcCcpIHtcbiAgICAgICAgeSA9ICdib3R0b20nO1xuICAgICAgfSBlbHNlIGlmICh5ID09PSAnYm90dG9tJykge1xuICAgICAgICB5ID0gJ3RvcCc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh4ID09PSAnZW5kJykge1xuICAgICAgICB4ID0gJ3N0YXJ0JztcbiAgICAgIH0gZWxzZSBpZiAoeCA9PT0gJ3N0YXJ0Jykge1xuICAgICAgICB4ID0gJ2VuZCc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHt4LCB5fTtcbiAgfVxuXG4gIC8qKiBVcGRhdGVzIHRoZSBjbGFzcyBvbiB0aGUgb3ZlcmxheSBwYW5lbCBiYXNlZCBvbiB0aGUgY3VycmVudCBwb3NpdGlvbiBvZiB0aGUgdG9vbHRpcC4gKi9cbiAgcHJpdmF0ZSBfdXBkYXRlQ3VycmVudFBvc2l0aW9uQ2xhc3MoY29ubmVjdGlvblBhaXI6IENvbm5lY3Rpb25Qb3NpdGlvblBhaXIpOiB2b2lkIHtcbiAgICBjb25zdCB7b3ZlcmxheVksIG9yaWdpblgsIG9yaWdpbll9ID0gY29ubmVjdGlvblBhaXI7XG4gICAgbGV0IG5ld1Bvc2l0aW9uOiBUb29sdGlwUG9zaXRpb247XG5cbiAgICAvLyBJZiB0aGUgb3ZlcmxheSBpcyBpbiB0aGUgbWlkZGxlIGFsb25nIHRoZSBZIGF4aXMsXG4gICAgLy8gaXQgbWVhbnMgdGhhdCBpdCdzIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIuXG4gICAgaWYgKG92ZXJsYXlZID09PSAnY2VudGVyJykge1xuICAgICAgLy8gTm90ZSB0aGF0IHNpbmNlIHRoaXMgaW5mb3JtYXRpb24gaXMgdXNlZCBmb3Igc3R5bGluZywgd2Ugd2FudCB0b1xuICAgICAgLy8gcmVzb2x2ZSBgc3RhcnRgIGFuZCBgZW5kYCB0byB0aGVpciByZWFsIHZhbHVlcywgb3RoZXJ3aXNlIGNvbnN1bWVyc1xuICAgICAgLy8gd291bGQgaGF2ZSB0byByZW1lbWJlciB0byBkbyBpdCB0aGVtc2VsdmVzIG9uIGVhY2ggY29uc3VtcHRpb24uXG4gICAgICBpZiAodGhpcy5fZGlyICYmIHRoaXMuX2Rpci52YWx1ZSA9PT0gJ3J0bCcpIHtcbiAgICAgICAgbmV3UG9zaXRpb24gPSBvcmlnaW5YID09PSAnZW5kJyA/ICdsZWZ0JyA6ICdyaWdodCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdQb3NpdGlvbiA9IG9yaWdpblggPT09ICdzdGFydCcgPyAnbGVmdCcgOiAncmlnaHQnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXdQb3NpdGlvbiA9IG92ZXJsYXlZID09PSAnYm90dG9tJyAmJiBvcmlnaW5ZID09PSAndG9wJyA/ICdhYm92ZScgOiAnYmVsb3cnO1xuICAgIH1cblxuICAgIGlmIChuZXdQb3NpdGlvbiAhPT0gdGhpcy5fY3VycmVudFBvc2l0aW9uKSB7XG4gICAgICBjb25zdCBvdmVybGF5UmVmID0gdGhpcy5fb3ZlcmxheVJlZjtcblxuICAgICAgaWYgKG92ZXJsYXlSZWYpIHtcbiAgICAgICAgY29uc3QgY2xhc3NQcmVmaXggPSBgJHt0aGlzLl9jc3NDbGFzc1ByZWZpeH0tJHtQQU5FTF9DTEFTU30tYDtcbiAgICAgICAgb3ZlcmxheVJlZi5yZW1vdmVQYW5lbENsYXNzKGNsYXNzUHJlZml4ICsgdGhpcy5fY3VycmVudFBvc2l0aW9uKTtcbiAgICAgICAgb3ZlcmxheVJlZi5hZGRQYW5lbENsYXNzKGNsYXNzUHJlZml4ICsgbmV3UG9zaXRpb24pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9jdXJyZW50UG9zaXRpb24gPSBuZXdQb3NpdGlvbjtcbiAgICB9XG4gIH1cblxuICAvKiogQmluZHMgdGhlIHBvaW50ZXIgZXZlbnRzIHRvIHRoZSB0b29sdGlwIHRyaWdnZXIuICovXG4gIHByaXZhdGUgX3NldHVwUG9pbnRlckVudGVyRXZlbnRzSWZOZWVkZWQoKSB7XG4gICAgLy8gT3B0aW1pemF0aW9uOiBEZWZlciBob29raW5nIHVwIGV2ZW50cyBpZiB0aGVyZSdzIG5vIG1lc3NhZ2Ugb3IgdGhlIHRvb2x0aXAgaXMgZGlzYWJsZWQuXG4gICAgaWYgKHRoaXMuX2Rpc2FibGVkIHx8ICF0aGlzLm1lc3NhZ2UgfHwgIXRoaXMuX3ZpZXdJbml0aWFsaXplZCB8fFxuICAgICAgICB0aGlzLl9wYXNzaXZlTGlzdGVuZXJzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFRoZSBtb3VzZSBldmVudHMgc2hvdWxkbid0IGJlIGJvdW5kIG9uIG1vYmlsZSBkZXZpY2VzLCBiZWNhdXNlIHRoZXkgY2FuIHByZXZlbnQgdGhlXG4gICAgLy8gZmlyc3QgdGFwIGZyb20gZmlyaW5nIGl0cyBjbGljayBldmVudCBvciBjYW4gY2F1c2UgdGhlIHRvb2x0aXAgdG8gb3BlbiBmb3IgY2xpY2tzLlxuICAgIGlmICh0aGlzLl9wbGF0Zm9ybVN1cHBvcnRzTW91c2VFdmVudHMoKSkge1xuICAgICAgdGhpcy5fcGFzc2l2ZUxpc3RlbmVyc1xuICAgICAgICAgIC5wdXNoKFsnbW91c2VlbnRlcicsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3NldHVwUG9pbnRlckV4aXRFdmVudHNJZk5lZWRlZCgpO1xuICAgICAgICAgICAgdGhpcy5zaG93KCk7XG4gICAgICAgICAgfV0pO1xuICAgIH0gZWxzZSBpZiAodGhpcy50b3VjaEdlc3R1cmVzICE9PSAnb2ZmJykge1xuICAgICAgdGhpcy5fZGlzYWJsZU5hdGl2ZUdlc3R1cmVzSWZOZWNlc3NhcnkoKTtcblxuICAgICAgdGhpcy5fcGFzc2l2ZUxpc3RlbmVyc1xuICAgICAgICAgIC5wdXNoKFsndG91Y2hzdGFydCcsICgpID0+IHtcbiAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBpdCdzIGltcG9ydGFudCB0aGF0IHdlIGRvbid0IGBwcmV2ZW50RGVmYXVsdGAgaGVyZSxcbiAgICAgICAgICAgIC8vIGJlY2F1c2UgaXQgY2FuIHByZXZlbnQgY2xpY2sgZXZlbnRzIGZyb20gZmlyaW5nIG9uIHRoZSBlbGVtZW50LlxuICAgICAgICAgICAgdGhpcy5fc2V0dXBQb2ludGVyRXhpdEV2ZW50c0lmTmVlZGVkKCk7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdG91Y2hzdGFydFRpbWVvdXQpO1xuICAgICAgICAgICAgdGhpcy5fdG91Y2hzdGFydFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2hvdygpLCBMT05HUFJFU1NfREVMQVkpO1xuICAgICAgICAgIH1dKTtcbiAgICB9XG5cbiAgICB0aGlzLl9hZGRMaXN0ZW5lcnModGhpcy5fcGFzc2l2ZUxpc3RlbmVycyk7XG4gIH1cblxuICBwcml2YXRlIF9zZXR1cFBvaW50ZXJFeGl0RXZlbnRzSWZOZWVkZWQoKSB7XG4gICAgaWYgKHRoaXMuX3BvaW50ZXJFeGl0RXZlbnRzSW5pdGlhbGl6ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fcG9pbnRlckV4aXRFdmVudHNJbml0aWFsaXplZCA9IHRydWU7XG5cbiAgICBjb25zdCBleGl0TGlzdGVuZXJzOiAocmVhZG9ubHkgW3N0cmluZywgRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdF0pW10gPSBbXTtcbiAgICBpZiAodGhpcy5fcGxhdGZvcm1TdXBwb3J0c01vdXNlRXZlbnRzKCkpIHtcbiAgICAgIGV4aXRMaXN0ZW5lcnMucHVzaChcbiAgICAgICAgWydtb3VzZWxlYXZlJywgKCkgPT4gdGhpcy5oaWRlKCldLFxuICAgICAgICBbJ3doZWVsJywgZXZlbnQgPT4gdGhpcy5fd2hlZWxMaXN0ZW5lcihldmVudCBhcyBXaGVlbEV2ZW50KV1cbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnRvdWNoR2VzdHVyZXMgIT09ICdvZmYnKSB7XG4gICAgICB0aGlzLl9kaXNhYmxlTmF0aXZlR2VzdHVyZXNJZk5lY2Vzc2FyeSgpO1xuICAgICAgY29uc3QgdG91Y2hlbmRMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RvdWNoc3RhcnRUaW1lb3V0KTtcbiAgICAgICAgdGhpcy5oaWRlKHRoaXMuX2RlZmF1bHRPcHRpb25zLnRvdWNoZW5kSGlkZURlbGF5KTtcbiAgICAgIH07XG5cbiAgICAgIGV4aXRMaXN0ZW5lcnMucHVzaChcbiAgICAgICAgWyd0b3VjaGVuZCcsIHRvdWNoZW5kTGlzdGVuZXJdLFxuICAgICAgICBbJ3RvdWNoY2FuY2VsJywgdG91Y2hlbmRMaXN0ZW5lcl0sXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuX2FkZExpc3RlbmVycyhleGl0TGlzdGVuZXJzKTtcbiAgICB0aGlzLl9wYXNzaXZlTGlzdGVuZXJzLnB1c2goLi4uZXhpdExpc3RlbmVycyk7XG4gIH1cblxuICBwcml2YXRlIF9hZGRMaXN0ZW5lcnMoXG4gICAgICBsaXN0ZW5lcnM6IChyZWFkb25seSBbc3RyaW5nLCBFdmVudExpc3RlbmVyT3JFdmVudExpc3RlbmVyT2JqZWN0XSlbXSkge1xuICAgIGxpc3RlbmVycy5mb3JFYWNoKChbZXZlbnQsIGxpc3RlbmVyXSkgPT4ge1xuICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyLCBwYXNzaXZlTGlzdGVuZXJPcHRpb25zKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3BsYXRmb3JtU3VwcG9ydHNNb3VzZUV2ZW50cygpIHtcbiAgICByZXR1cm4gIXRoaXMuX3BsYXRmb3JtLklPUyAmJiAhdGhpcy5fcGxhdGZvcm0uQU5EUk9JRDtcbiAgfVxuXG4gIC8qKiBMaXN0ZW5lciBmb3IgdGhlIGB3aGVlbGAgZXZlbnQgb24gdGhlIGVsZW1lbnQuICovXG4gIHByaXZhdGUgX3doZWVsTGlzdGVuZXIoZXZlbnQ6IFdoZWVsRXZlbnQpIHtcbiAgICBpZiAodGhpcy5faXNUb29sdGlwVmlzaWJsZSgpKSB7XG4gICAgICBjb25zdCBlbGVtZW50VW5kZXJQb2ludGVyID0gdGhpcy5fZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgIC8vIE9uIG5vbi10b3VjaCBkZXZpY2VzIHdlIGRlcGVuZCBvbiB0aGUgYG1vdXNlbGVhdmVgIGV2ZW50IHRvIGNsb3NlIHRoZSB0b29sdGlwLCBidXQgaXRcbiAgICAgIC8vIHdvbid0IGZpcmUgaWYgdGhlIHVzZXIgc2Nyb2xscyBhd2F5IHVzaW5nIHRoZSB3aGVlbCB3aXRob3V0IG1vdmluZyB0aGVpciBjdXJzb3IuIFdlXG4gICAgICAvLyB3b3JrIGFyb3VuZCBpdCBieSBmaW5kaW5nIHRoZSBlbGVtZW50IHVuZGVyIHRoZSB1c2VyJ3MgY3Vyc29yIGFuZCBjbG9zaW5nIHRoZSB0b29sdGlwXG4gICAgICAvLyBpZiBpdCdzIG5vdCB0aGUgdHJpZ2dlci5cbiAgICAgIGlmIChlbGVtZW50VW5kZXJQb2ludGVyICE9PSBlbGVtZW50ICYmICFlbGVtZW50LmNvbnRhaW5zKGVsZW1lbnRVbmRlclBvaW50ZXIpKSB7XG4gICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBEaXNhYmxlcyB0aGUgbmF0aXZlIGJyb3dzZXIgZ2VzdHVyZXMsIGJhc2VkIG9uIGhvdyB0aGUgdG9vbHRpcCBoYXMgYmVlbiBjb25maWd1cmVkLiAqL1xuICBwcml2YXRlIF9kaXNhYmxlTmF0aXZlR2VzdHVyZXNJZk5lY2Vzc2FyeSgpIHtcbiAgICBjb25zdCBnZXN0dXJlcyA9IHRoaXMudG91Y2hHZXN0dXJlcztcblxuICAgIGlmIChnZXN0dXJlcyAhPT0gJ29mZicpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBjb25zdCBzdHlsZSA9IGVsZW1lbnQuc3R5bGU7XG5cbiAgICAgIC8vIElmIGdlc3R1cmVzIGFyZSBzZXQgdG8gYGF1dG9gLCB3ZSBkb24ndCBkaXNhYmxlIHRleHQgc2VsZWN0aW9uIG9uIGlucHV0cyBhbmRcbiAgICAgIC8vIHRleHRhcmVhcywgYmVjYXVzZSBpdCBwcmV2ZW50cyB0aGUgdXNlciBmcm9tIHR5cGluZyBpbnRvIHRoZW0gb24gaU9TIFNhZmFyaS5cbiAgICAgIGlmIChnZXN0dXJlcyA9PT0gJ29uJyB8fCAoZWxlbWVudC5ub2RlTmFtZSAhPT0gJ0lOUFVUJyAmJiBlbGVtZW50Lm5vZGVOYW1lICE9PSAnVEVYVEFSRUEnKSkge1xuICAgICAgICBzdHlsZS51c2VyU2VsZWN0ID0gKHN0eWxlIGFzIGFueSkubXNVc2VyU2VsZWN0ID0gc3R5bGUud2Via2l0VXNlclNlbGVjdCA9XG4gICAgICAgICAgICAoc3R5bGUgYXMgYW55KS5Nb3pVc2VyU2VsZWN0ID0gJ25vbmUnO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiB3ZSBoYXZlIGBhdXRvYCBnZXN0dXJlcyBhbmQgdGhlIGVsZW1lbnQgdXNlcyBuYXRpdmUgSFRNTCBkcmFnZ2luZyxcbiAgICAgIC8vIHdlIGRvbid0IHNldCBgLXdlYmtpdC11c2VyLWRyYWdgIGJlY2F1c2UgaXQgcHJldmVudHMgdGhlIG5hdGl2ZSBiZWhhdmlvci5cbiAgICAgIGlmIChnZXN0dXJlcyA9PT0gJ29uJyB8fCAhZWxlbWVudC5kcmFnZ2FibGUpIHtcbiAgICAgICAgKHN0eWxlIGFzIGFueSkud2Via2l0VXNlckRyYWcgPSAnbm9uZSc7XG4gICAgICB9XG5cbiAgICAgIHN0eWxlLnRvdWNoQWN0aW9uID0gJ25vbmUnO1xuICAgICAgKHN0eWxlIGFzIGFueSkud2Via2l0VGFwSGlnaGxpZ2h0Q29sb3IgPSAndHJhbnNwYXJlbnQnO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9kaXNhYmxlZDogQm9vbGVhbklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfaGlkZURlbGF5OiBOdW1iZXJJbnB1dDtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3Nob3dEZWxheTogTnVtYmVySW5wdXQ7XG59XG5cbi8qKlxuICogRGlyZWN0aXZlIHRoYXQgYXR0YWNoZXMgYSBtYXRlcmlhbCBkZXNpZ24gdG9vbHRpcCB0byB0aGUgaG9zdCBlbGVtZW50LiBBbmltYXRlcyB0aGUgc2hvd2luZyBhbmRcbiAqIGhpZGluZyBvZiBhIHRvb2x0aXAgcHJvdmlkZWQgcG9zaXRpb24gKGRlZmF1bHRzIHRvIGJlbG93IHRoZSBlbGVtZW50KS5cbiAqXG4gKiBodHRwczovL21hdGVyaWFsLmlvL2Rlc2lnbi9jb21wb25lbnRzL3Rvb2x0aXBzLmh0bWxcbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW21hdFRvb2x0aXBdJyxcbiAgZXhwb3J0QXM6ICdtYXRUb29sdGlwJyxcbiAgaG9zdDoge1xuICAgICdjbGFzcyc6ICdtYXQtdG9vbHRpcC10cmlnZ2VyJ1xuICB9XG59KVxuZXhwb3J0IGNsYXNzIE1hdFRvb2x0aXAgZXh0ZW5kcyBfTWF0VG9vbHRpcEJhc2U8VG9vbHRpcENvbXBvbmVudD4ge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3Rvb2x0aXBDb21wb25lbnQgPSBUb29sdGlwQ29tcG9uZW50O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIG92ZXJsYXk6IE92ZXJsYXksXG4gICAgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgc2Nyb2xsRGlzcGF0Y2hlcjogU2Nyb2xsRGlzcGF0Y2hlcixcbiAgICB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIG5nWm9uZTogTmdab25lLFxuICAgIHBsYXRmb3JtOiBQbGF0Zm9ybSxcbiAgICBhcmlhRGVzY3JpYmVyOiBBcmlhRGVzY3JpYmVyLFxuICAgIGZvY3VzTW9uaXRvcjogRm9jdXNNb25pdG9yLFxuICAgIEBJbmplY3QoTUFUX1RPT0xUSVBfU0NST0xMX1NUUkFURUdZKSBzY3JvbGxTdHJhdGVneTogYW55LFxuICAgIEBPcHRpb25hbCgpIGRpcjogRGlyZWN0aW9uYWxpdHksXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChNQVRfVE9PTFRJUF9ERUZBVUxUX09QVElPTlMpIGRlZmF1bHRPcHRpb25zOiBNYXRUb29sdGlwRGVmYXVsdE9wdGlvbnMsXG4gICAgQEluamVjdChET0NVTUVOVCkgX2RvY3VtZW50OiBhbnkpIHtcblxuICAgIHN1cGVyKG92ZXJsYXksIGVsZW1lbnRSZWYsIHNjcm9sbERpc3BhdGNoZXIsIHZpZXdDb250YWluZXJSZWYsIG5nWm9uZSwgcGxhdGZvcm0sIGFyaWFEZXNjcmliZXIsXG4gICAgICBmb2N1c01vbml0b3IsIHNjcm9sbFN0cmF0ZWd5LCBkaXIsIGRlZmF1bHRPcHRpb25zLCBfZG9jdW1lbnQpO1xuICB9XG59XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIF9Ub29sdGlwQ29tcG9uZW50QmFzZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIC8qKiBNZXNzYWdlIHRvIGRpc3BsYXkgaW4gdGhlIHRvb2x0aXAgKi9cbiAgbWVzc2FnZTogc3RyaW5nO1xuXG4gIC8qKiBDbGFzc2VzIHRvIGJlIGFkZGVkIHRvIHRoZSB0b29sdGlwLiBTdXBwb3J0cyB0aGUgc2FtZSBzeW50YXggYXMgYG5nQ2xhc3NgLiAqL1xuICB0b29sdGlwQ2xhc3M6IHN0cmluZ3xzdHJpbmdbXXxTZXQ8c3RyaW5nPnx7W2tleTogc3RyaW5nXTogYW55fTtcblxuICAvKiogVGhlIHRpbWVvdXQgSUQgb2YgYW55IGN1cnJlbnQgdGltZXIgc2V0IHRvIHNob3cgdGhlIHRvb2x0aXAgKi9cbiAgX3Nob3dUaW1lb3V0SWQ6IGFueTtcblxuICAvKiogVGhlIHRpbWVvdXQgSUQgb2YgYW55IGN1cnJlbnQgdGltZXIgc2V0IHRvIGhpZGUgdGhlIHRvb2x0aXAgKi9cbiAgX2hpZGVUaW1lb3V0SWQ6IGFueTtcblxuICAvKiogUHJvcGVydHkgd2F0Y2hlZCBieSB0aGUgYW5pbWF0aW9uIGZyYW1ld29yayB0byBzaG93IG9yIGhpZGUgdGhlIHRvb2x0aXAgKi9cbiAgX3Zpc2liaWxpdHk6IFRvb2x0aXBWaXNpYmlsaXR5ID0gJ2luaXRpYWwnO1xuXG4gIC8qKiBXaGV0aGVyIGludGVyYWN0aW9ucyBvbiB0aGUgcGFnZSBzaG91bGQgY2xvc2UgdGhlIHRvb2x0aXAgKi9cbiAgcHJpdmF0ZSBfY2xvc2VPbkludGVyYWN0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIFN1YmplY3QgZm9yIG5vdGlmeWluZyB0aGF0IHRoZSB0b29sdGlwIGhhcyBiZWVuIGhpZGRlbiBmcm9tIHRoZSB2aWV3ICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX29uSGlkZTogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIC8qKlxuICAgKiBTaG93cyB0aGUgdG9vbHRpcCB3aXRoIGFuIGFuaW1hdGlvbiBvcmlnaW5hdGluZyBmcm9tIHRoZSBwcm92aWRlZCBvcmlnaW5cbiAgICogQHBhcmFtIGRlbGF5IEFtb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gdGhlIGRlbGF5IHNob3dpbmcgdGhlIHRvb2x0aXAuXG4gICAqL1xuICBzaG93KGRlbGF5OiBudW1iZXIpOiB2b2lkIHtcbiAgICAvLyBDYW5jZWwgdGhlIGRlbGF5ZWQgaGlkZSBpZiBpdCBpcyBzY2hlZHVsZWRcbiAgICBjbGVhclRpbWVvdXQodGhpcy5faGlkZVRpbWVvdXRJZCk7XG5cbiAgICAvLyBCb2R5IGludGVyYWN0aW9ucyBzaG91bGQgY2FuY2VsIHRoZSB0b29sdGlwIGlmIHRoZXJlIGlzIGEgZGVsYXkgaW4gc2hvd2luZy5cbiAgICB0aGlzLl9jbG9zZU9uSW50ZXJhY3Rpb24gPSB0cnVlO1xuICAgIHRoaXMuX3Nob3dUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuX3Zpc2liaWxpdHkgPSAndmlzaWJsZSc7XG4gICAgICB0aGlzLl9zaG93VGltZW91dElkID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fb25TaG93KCk7XG5cbiAgICAgIC8vIE1hcmsgZm9yIGNoZWNrIHNvIGlmIGFueSBwYXJlbnQgY29tcG9uZW50IGhhcyBzZXQgdGhlXG4gICAgICAvLyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSB0byBPblB1c2ggaXQgd2lsbCBiZSBjaGVja2VkIGFueXdheXNcbiAgICAgIHRoaXMuX21hcmtGb3JDaGVjaygpO1xuICAgIH0sIGRlbGF5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCZWdpbnMgdGhlIGFuaW1hdGlvbiB0byBoaWRlIHRoZSB0b29sdGlwIGFmdGVyIHRoZSBwcm92aWRlZCBkZWxheSBpbiBtcy5cbiAgICogQHBhcmFtIGRlbGF5IEFtb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gZGVsYXkgc2hvd2luZyB0aGUgdG9vbHRpcC5cbiAgICovXG4gIGhpZGUoZGVsYXk6IG51bWJlcik6IHZvaWQge1xuICAgIC8vIENhbmNlbCB0aGUgZGVsYXllZCBzaG93IGlmIGl0IGlzIHNjaGVkdWxlZFxuICAgIGNsZWFyVGltZW91dCh0aGlzLl9zaG93VGltZW91dElkKTtcblxuICAgIHRoaXMuX2hpZGVUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuX3Zpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICAgIHRoaXMuX2hpZGVUaW1lb3V0SWQgPSB1bmRlZmluZWQ7XG5cbiAgICAgIC8vIE1hcmsgZm9yIGNoZWNrIHNvIGlmIGFueSBwYXJlbnQgY29tcG9uZW50IGhhcyBzZXQgdGhlXG4gICAgICAvLyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSB0byBPblB1c2ggaXQgd2lsbCBiZSBjaGVja2VkIGFueXdheXNcbiAgICAgIHRoaXMuX21hcmtGb3JDaGVjaygpO1xuICAgIH0sIGRlbGF5KTtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIGFuIG9ic2VydmFibGUgdGhhdCBub3RpZmllcyB3aGVuIHRoZSB0b29sdGlwIGhhcyBiZWVuIGhpZGRlbiBmcm9tIHZpZXcuICovXG4gIGFmdGVySGlkZGVuKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLl9vbkhpZGU7XG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgdG9vbHRpcCBpcyBiZWluZyBkaXNwbGF5ZWQuICovXG4gIGlzVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fdmlzaWJpbGl0eSA9PT0gJ3Zpc2libGUnO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3Nob3dUaW1lb3V0SWQpO1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl9oaWRlVGltZW91dElkKTtcbiAgICB0aGlzLl9vbkhpZGUuY29tcGxldGUoKTtcbiAgfVxuXG4gIF9hbmltYXRpb25TdGFydCgpIHtcbiAgICB0aGlzLl9jbG9zZU9uSW50ZXJhY3Rpb24gPSBmYWxzZTtcbiAgfVxuXG4gIF9hbmltYXRpb25Eb25lKGV2ZW50OiBBbmltYXRpb25FdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHRvU3RhdGUgPSBldmVudC50b1N0YXRlIGFzIFRvb2x0aXBWaXNpYmlsaXR5O1xuXG4gICAgaWYgKHRvU3RhdGUgPT09ICdoaWRkZW4nICYmICF0aGlzLmlzVmlzaWJsZSgpKSB7XG4gICAgICB0aGlzLl9vbkhpZGUubmV4dCgpO1xuICAgIH1cblxuICAgIGlmICh0b1N0YXRlID09PSAndmlzaWJsZScgfHwgdG9TdGF0ZSA9PT0gJ2hpZGRlbicpIHtcbiAgICAgIHRoaXMuX2Nsb3NlT25JbnRlcmFjdGlvbiA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEludGVyYWN0aW9ucyBvbiB0aGUgSFRNTCBib2R5IHNob3VsZCBjbG9zZSB0aGUgdG9vbHRpcCBpbW1lZGlhdGVseSBhcyBkZWZpbmVkIGluIHRoZVxuICAgKiBtYXRlcmlhbCBkZXNpZ24gc3BlYy5cbiAgICogaHR0cHM6Ly9tYXRlcmlhbC5pby9kZXNpZ24vY29tcG9uZW50cy90b29sdGlwcy5odG1sI2JlaGF2aW9yXG4gICAqL1xuICBfaGFuZGxlQm9keUludGVyYWN0aW9uKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jbG9zZU9uSW50ZXJhY3Rpb24pIHtcbiAgICAgIHRoaXMuaGlkZSgwKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTWFya3MgdGhhdCB0aGUgdG9vbHRpcCBuZWVkcyB0byBiZSBjaGVja2VkIGluIHRoZSBuZXh0IGNoYW5nZSBkZXRlY3Rpb24gcnVuLlxuICAgKiBNYWlubHkgdXNlZCBmb3IgcmVuZGVyaW5nIHRoZSBpbml0aWFsIHRleHQgYmVmb3JlIHBvc2l0aW9uaW5nIGEgdG9vbHRpcCwgd2hpY2hcbiAgICogY2FuIGJlIHByb2JsZW1hdGljIGluIGNvbXBvbmVudHMgd2l0aCBPblB1c2ggY2hhbmdlIGRldGVjdGlvbi5cbiAgICovXG4gIF9tYXJrRm9yQ2hlY2soKTogdm9pZCB7XG4gICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGJhY2sgZm9yIHdoZW4gdGhlIHRpbWVvdXQgaW4gdGhpcy5zaG93KCkgZ2V0cyBjb21wbGV0ZWQuXG4gICAqIFRoaXMgbWV0aG9kIGlzIG9ubHkgbmVlZGVkIGJ5IHRoZSBtZGMtdG9vbHRpcCwgYW5kIHNvIGl0IGlzIG9ubHkgaW1wbGVtZW50ZWRcbiAgICogaW4gdGhlIG1kYy10b29sdGlwLCBub3QgaGVyZS5cbiAgICovXG4gIHByb3RlY3RlZCBfb25TaG93KCk6IHZvaWQge31cbn1cblxuLyoqXG4gKiBJbnRlcm5hbCBjb21wb25lbnQgdGhhdCB3cmFwcyB0aGUgdG9vbHRpcCdzIGNvbnRlbnQuXG4gKiBAZG9jcy1wcml2YXRlXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21hdC10b29sdGlwLWNvbXBvbmVudCcsXG4gIHRlbXBsYXRlVXJsOiAndG9vbHRpcC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ3Rvb2x0aXAuY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBhbmltYXRpb25zOiBbbWF0VG9vbHRpcEFuaW1hdGlvbnMudG9vbHRpcFN0YXRlXSxcbiAgaG9zdDoge1xuICAgIC8vIEZvcmNlcyB0aGUgZWxlbWVudCB0byBoYXZlIGEgbGF5b3V0IGluIElFIGFuZCBFZGdlLiBUaGlzIGZpeGVzIGlzc3VlcyB3aGVyZSB0aGUgZWxlbWVudFxuICAgIC8vIHdvbid0IGJlIHJlbmRlcmVkIGlmIHRoZSBhbmltYXRpb25zIGFyZSBkaXNhYmxlZCBvciB0aGVyZSBpcyBubyB3ZWIgYW5pbWF0aW9ucyBwb2x5ZmlsbC5cbiAgICAnW3N0eWxlLnpvb21dJzogJ192aXNpYmlsaXR5ID09PSBcInZpc2libGVcIiA/IDEgOiBudWxsJyxcbiAgICAnYXJpYS1oaWRkZW4nOiAndHJ1ZScsXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgVG9vbHRpcENvbXBvbmVudCBleHRlbmRzIF9Ub29sdGlwQ29tcG9uZW50QmFzZSB7XG4gIC8qKiBTdHJlYW0gdGhhdCBlbWl0cyB3aGV0aGVyIHRoZSB1c2VyIGhhcyBhIGhhbmRzZXQtc2l6ZWQgZGlzcGxheS4gICovXG4gIF9pc0hhbmRzZXQ6IE9ic2VydmFibGU8QnJlYWtwb2ludFN0YXRlPiA9IHRoaXMuX2JyZWFrcG9pbnRPYnNlcnZlci5vYnNlcnZlKEJyZWFrcG9pbnRzLkhhbmRzZXQpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIF9icmVha3BvaW50T2JzZXJ2ZXI6IEJyZWFrcG9pbnRPYnNlcnZlcikge1xuICAgIHN1cGVyKGNoYW5nZURldGVjdG9yUmVmKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm1hdC10b29sdGlwXCJcbiAgICAgW25nQ2xhc3NdPVwidG9vbHRpcENsYXNzXCJcbiAgICAgW2NsYXNzLm1hdC10b29sdGlwLWhhbmRzZXRdPVwiKF9pc0hhbmRzZXQgfCBhc3luYyk/Lm1hdGNoZXNcIlxuICAgICBbQHN0YXRlXT1cIl92aXNpYmlsaXR5XCJcbiAgICAgKEBzdGF0ZS5zdGFydCk9XCJfYW5pbWF0aW9uU3RhcnQoKVwiXG4gICAgIChAc3RhdGUuZG9uZSk9XCJfYW5pbWF0aW9uRG9uZSgkZXZlbnQpXCI+e3ttZXNzYWdlfX08L2Rpdj5cbiJdfQ==
|