@sbb-esta/lyne-elements 0.0.0 → 0.52.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +55 -0
- package/_index.scss +2 -0
- package/a11y.css +22 -0
- package/accordion/accordion.d.ts +41 -0
- package/accordion/accordion.d.ts.map +1 -0
- package/accordion.d.ts +2 -0
- package/accordion.d.ts.map +1 -0
- package/accordion.js +88 -0
- package/action-group/action-group.d.ts +45 -0
- package/action-group/action-group.d.ts.map +1 -0
- package/action-group.d.ts +2 -0
- package/action-group.d.ts.map +1 -0
- package/action-group.js +57 -0
- package/alert/alert/alert.d.ts +76 -0
- package/alert/alert/alert.d.ts.map +1 -0
- package/alert/alert-group/alert-group.d.ts +48 -0
- package/alert/alert-group/alert-group.d.ts.map +1 -0
- package/alert/alert-group.d.ts +2 -0
- package/alert/alert-group.d.ts.map +1 -0
- package/alert/alert-group.js +73 -0
- package/alert/alert.d.ts +2 -0
- package/alert/alert.d.ts.map +1 -0
- package/alert/alert.js +139 -0
- package/alert.d.ts +3 -0
- package/alert.d.ts.map +1 -0
- package/alert.js +2 -0
- package/animation.css +18 -0
- package/autocomplete/autocomplete.d.ts +108 -0
- package/autocomplete/autocomplete.d.ts.map +1 -0
- package/autocomplete.d.ts +2 -0
- package/autocomplete.d.ts.map +1 -0
- package/autocomplete.js +300 -0
- package/breadcrumb/breadcrumb/breadcrumb.d.ts +23 -0
- package/breadcrumb/breadcrumb/breadcrumb.d.ts.map +1 -0
- package/breadcrumb/breadcrumb-group/breadcrumb-group.d.ts +50 -0
- package/breadcrumb/breadcrumb-group/breadcrumb-group.d.ts.map +1 -0
- package/breadcrumb/breadcrumb-group.d.ts +2 -0
- package/breadcrumb/breadcrumb-group.d.ts.map +1 -0
- package/breadcrumb/breadcrumb-group.js +150 -0
- package/breadcrumb/breadcrumb.d.ts +2 -0
- package/breadcrumb/breadcrumb.d.ts.map +1 -0
- package/breadcrumb/breadcrumb.js +43 -0
- package/breadcrumb.d.ts +3 -0
- package/breadcrumb.d.ts.map +1 -0
- package/breadcrumb.js +2 -0
- package/button/button/button.d.ts +20 -0
- package/button/button/button.d.ts.map +1 -0
- package/button/button-link/button-link.d.ts +20 -0
- package/button/button-link/button-link.d.ts.map +1 -0
- package/button/button-link.d.ts +2 -0
- package/button/button-link.d.ts.map +1 -0
- package/button/button-link.js +20 -0
- package/button/button-static/button-static.d.ts +20 -0
- package/button/button-static/button-static.d.ts.map +1 -0
- package/button/button-static.d.ts +2 -0
- package/button/button-static.d.ts.map +1 -0
- package/button/button-static.js +20 -0
- package/button/button.d.ts +2 -0
- package/button/button.d.ts.map +1 -0
- package/button/button.js +20 -0
- package/button/common/button-common.d.ts +14 -0
- package/button/common/button-common.d.ts.map +1 -0
- package/button/common.d.ts +2 -0
- package/button/common.d.ts.map +1 -0
- package/button/common.js +42 -0
- package/button/mini-button/mini-button.d.ts +22 -0
- package/button/mini-button/mini-button.d.ts.map +1 -0
- package/button/mini-button.d.ts +2 -0
- package/button/mini-button.d.ts.map +1 -0
- package/button/mini-button.js +29 -0
- package/button/secondary-button/secondary-button.d.ts +20 -0
- package/button/secondary-button/secondary-button.d.ts.map +1 -0
- package/button/secondary-button-link/secondary-button-link.d.ts +20 -0
- package/button/secondary-button-link/secondary-button-link.d.ts.map +1 -0
- package/button/secondary-button-link.d.ts +2 -0
- package/button/secondary-button-link.d.ts.map +1 -0
- package/button/secondary-button-link.js +20 -0
- package/button/secondary-button-static/secondary-button-static.d.ts +20 -0
- package/button/secondary-button-static/secondary-button-static.d.ts.map +1 -0
- package/button/secondary-button-static.d.ts +2 -0
- package/button/secondary-button-static.d.ts.map +1 -0
- package/button/secondary-button-static.js +20 -0
- package/button/secondary-button.d.ts +2 -0
- package/button/secondary-button.d.ts.map +1 -0
- package/button/secondary-button.js +20 -0
- package/button/tertiary-button/tertiary-button.d.ts +20 -0
- package/button/tertiary-button/tertiary-button.d.ts.map +1 -0
- package/button/tertiary-button-link/tertiary-button-link.d.ts +20 -0
- package/button/tertiary-button-link/tertiary-button-link.d.ts.map +1 -0
- package/button/tertiary-button-link.d.ts +2 -0
- package/button/tertiary-button-link.d.ts.map +1 -0
- package/button/tertiary-button-link.js +20 -0
- package/button/tertiary-button-static/tertiary-button-static.d.ts +20 -0
- package/button/tertiary-button-static/tertiary-button-static.d.ts.map +1 -0
- package/button/tertiary-button-static.d.ts +2 -0
- package/button/tertiary-button-static.d.ts.map +1 -0
- package/button/tertiary-button-static.js +20 -0
- package/button/tertiary-button.d.ts +2 -0
- package/button/tertiary-button.d.ts.map +1 -0
- package/button/tertiary-button.js +20 -0
- package/button/transparent-button/transparent-button.d.ts +20 -0
- package/button/transparent-button/transparent-button.d.ts.map +1 -0
- package/button/transparent-button-link/transparent-button-link.d.ts +20 -0
- package/button/transparent-button-link/transparent-button-link.d.ts.map +1 -0
- package/button/transparent-button-link.d.ts +2 -0
- package/button/transparent-button-link.d.ts.map +1 -0
- package/button/transparent-button-link.js +20 -0
- package/button/transparent-button-static/transparent-button-static.d.ts +20 -0
- package/button/transparent-button-static/transparent-button-static.d.ts.map +1 -0
- package/button/transparent-button-static.d.ts +2 -0
- package/button/transparent-button-static.d.ts.map +1 -0
- package/button/transparent-button-static.js +20 -0
- package/button/transparent-button.d.ts +2 -0
- package/button/transparent-button.d.ts.map +1 -0
- package/button/transparent-button.js +20 -0
- package/button.d.ts +15 -0
- package/button.d.ts.map +1 -0
- package/button.js +14 -0
- package/calendar/calendar.d.ts +216 -0
- package/calendar/calendar.d.ts.map +1 -0
- package/calendar.d.ts +2 -0
- package/calendar.d.ts.map +1 -0
- package/calendar.js +826 -0
- package/card/card/card.d.ts +29 -0
- package/card/card/card.d.ts.map +1 -0
- package/card/card-badge/card-badge.d.ts +23 -0
- package/card/card-badge/card-badge.d.ts.map +1 -0
- package/card/card-badge.d.ts +2 -0
- package/card/card-badge.d.ts.map +1 -0
- package/card/card-badge.js +48 -0
- package/card/card-button/card-button.d.ts +19 -0
- package/card/card-button/card-button.d.ts.map +1 -0
- package/card/card-button.d.ts +2 -0
- package/card/card-button.d.ts.map +1 -0
- package/card/card-button.js +19 -0
- package/card/card-link/card-link.d.ts +19 -0
- package/card/card-link/card-link.d.ts.map +1 -0
- package/card/card-link.d.ts +2 -0
- package/card/card-link.d.ts.map +1 -0
- package/card/card-link.js +19 -0
- package/card/card.d.ts +2 -0
- package/card/card.d.ts.map +1 -0
- package/card/card.js +47 -0
- package/card/common/card-action-common.d.ts +9 -0
- package/card/common/card-action-common.d.ts.map +1 -0
- package/card/common.d.ts +2 -0
- package/card/common.d.ts.map +1 -0
- package/card/common.js +67 -0
- package/card.d.ts +6 -0
- package/card.d.ts.map +1 -0
- package/card.js +5 -0
- package/checkbox/checkbox/checkbox.d.ts +73 -0
- package/checkbox/checkbox/checkbox.d.ts.map +1 -0
- package/checkbox/checkbox-group/checkbox-group.d.ts +37 -0
- package/checkbox/checkbox-group/checkbox-group.d.ts.map +1 -0
- package/checkbox/checkbox-group.d.ts +2 -0
- package/checkbox/checkbox-group.d.ts.map +1 -0
- package/checkbox/checkbox-group.js +83 -0
- package/checkbox/checkbox.d.ts +2 -0
- package/checkbox/checkbox.d.ts.map +1 -0
- package/checkbox/checkbox.js +132 -0
- package/checkbox.d.ts +3 -0
- package/checkbox.d.ts.map +1 -0
- package/checkbox.js +2 -0
- package/chip/chip.d.ts +21 -0
- package/chip/chip.d.ts.map +1 -0
- package/chip.d.ts +2 -0
- package/chip.d.ts.map +1 -0
- package/chip.js +35 -0
- package/clock/clock.d.ts +62 -0
- package/clock/clock.d.ts.map +1 -0
- package/clock.d.ts +2 -0
- package/clock.d.ts.map +1 -0
- package/clock.js +156 -0
- package/container/container/container.d.ts +25 -0
- package/container/container/container.d.ts.map +1 -0
- package/container/container.d.ts +2 -0
- package/container/container.d.ts.map +1 -0
- package/container/container.js +41 -0
- package/container/sticky-bar/sticky-bar.d.ts +31 -0
- package/container/sticky-bar/sticky-bar.d.ts.map +1 -0
- package/container/sticky-bar.d.ts +2 -0
- package/container/sticky-bar.d.ts.map +1 -0
- package/container/sticky-bar.js +57 -0
- package/container.d.ts +3 -0
- package/container.d.ts.map +1 -0
- package/container.js +2 -0
- package/core/a11y/arrow-navigation.d.ts +32 -0
- package/core/a11y/arrow-navigation.d.ts.map +1 -0
- package/core/a11y/fake-event-detection.d.ts +5 -0
- package/core/a11y/fake-event-detection.d.ts.map +1 -0
- package/core/a11y/focus-visible-within-controller.d.ts +11 -0
- package/core/a11y/focus-visible-within-controller.d.ts.map +1 -0
- package/core/a11y/focus.d.ts +22 -0
- package/core/a11y/focus.d.ts.map +1 -0
- package/core/a11y/input-modality-detector.d.ts +58 -0
- package/core/a11y/input-modality-detector.d.ts.map +1 -0
- package/core/a11y/interactivity-checker.d.ts +17 -0
- package/core/a11y/interactivity-checker.d.ts.map +1 -0
- package/core/a11y.d.ts +7 -0
- package/core/a11y.d.ts.map +1 -0
- package/core/a11y.js +226 -0
- package/core/base-elements/action-base-element.d.ts +11 -0
- package/core/base-elements/action-base-element.d.ts.map +1 -0
- package/core/base-elements/button-base-element.d.ts +46 -0
- package/core/base-elements/button-base-element.d.ts.map +1 -0
- package/core/base-elements/link-base-element.d.ts +31 -0
- package/core/base-elements/link-base-element.d.ts.map +1 -0
- package/core/base-elements/open-close-base-element.d.ts +37 -0
- package/core/base-elements/open-close-base-element.d.ts.map +1 -0
- package/core/base-elements.d.ts +5 -0
- package/core/base-elements.d.ts.map +1 -0
- package/core/base-elements.js +234 -0
- package/core/config/config.d.ts +22 -0
- package/core/config/config.d.ts.map +1 -0
- package/core/config.d.ts +2 -0
- package/core/config.d.ts.map +1 -0
- package/core/config.js +11 -0
- package/core/controllers/connected-abort-controller.d.ts +11 -0
- package/core/controllers/connected-abort-controller.d.ts.map +1 -0
- package/core/controllers/language-controller.d.ts +33 -0
- package/core/controllers/language-controller.d.ts.map +1 -0
- package/core/controllers/slot-state-controller.d.ts +32 -0
- package/core/controllers/slot-state-controller.d.ts.map +1 -0
- package/core/controllers.d.ts +4 -0
- package/core/controllers.d.ts.map +1 -0
- package/core/controllers.js +88 -0
- package/core/datetime/date-adapter.d.ts +162 -0
- package/core/datetime/date-adapter.d.ts.map +1 -0
- package/core/datetime/native-date-adapter.d.ts +74 -0
- package/core/datetime/native-date-adapter.d.ts.map +1 -0
- package/core/datetime.d.ts +3 -0
- package/core/datetime.d.ts.map +1 -0
- package/core/datetime.js +256 -0
- package/core/decorators/host-attributes.d.ts +22 -0
- package/core/decorators/host-attributes.d.ts.map +1 -0
- package/core/decorators.d.ts +2 -0
- package/core/decorators.d.ts.map +1 -0
- package/core/decorators.js +18 -0
- package/core/dom/breakpoint.d.ts +14 -0
- package/core/dom/breakpoint.d.ts.map +1 -0
- package/core/dom/find-referenced-element.d.ts +7 -0
- package/core/dom/find-referenced-element.d.ts.map +1 -0
- package/core/dom/get-document-writing-mode.d.ts +2 -0
- package/core/dom/get-document-writing-mode.d.ts.map +1 -0
- package/core/dom/host-context.d.ts +11 -0
- package/core/dom/host-context.d.ts.map +1 -0
- package/core/dom/input-element.d.ts +10 -0
- package/core/dom/input-element.d.ts.map +1 -0
- package/core/dom/platform.d.ts +24 -0
- package/core/dom/platform.d.ts.map +1 -0
- package/core/dom/scroll.d.ts +13 -0
- package/core/dom/scroll.d.ts.map +1 -0
- package/core/dom/set-or-remove-attribute.d.ts +8 -0
- package/core/dom/set-or-remove-attribute.d.ts.map +1 -0
- package/core/dom/ssr.d.ts +12 -0
- package/core/dom/ssr.d.ts.map +1 -0
- package/core/dom.d.ts +10 -0
- package/core/dom.d.ts.map +1 -0
- package/core/dom.js +99 -0
- package/core/eventing/composed-path-has-attribute.d.ts +10 -0
- package/core/eventing/composed-path-has-attribute.d.ts.map +1 -0
- package/core/eventing/event-emitter.d.ts +23 -0
- package/core/eventing/event-emitter.d.ts.map +1 -0
- package/core/eventing/event-target.d.ts +3 -0
- package/core/eventing/event-target.d.ts.map +1 -0
- package/core/eventing/form-element-handlers.d.ts +14 -0
- package/core/eventing/form-element-handlers.d.ts.map +1 -0
- package/core/eventing/forward-event.d.ts +6 -0
- package/core/eventing/forward-event.d.ts.map +1 -0
- package/core/eventing/handler-repository.d.ts +28 -0
- package/core/eventing/handler-repository.d.ts.map +1 -0
- package/core/eventing/is-event-prevented.d.ts +3 -0
- package/core/eventing/is-event-prevented.d.ts.map +1 -0
- package/core/eventing/throttle.d.ts +2 -0
- package/core/eventing/throttle.d.ts.map +1 -0
- package/core/eventing.d.ts +9 -0
- package/core/eventing.d.ts.map +1 -0
- package/core/eventing.js +79 -0
- package/core/i18n/i18n.d.ts +74 -0
- package/core/i18n/i18n.d.ts.map +1 -0
- package/core/i18n.d.ts +2 -0
- package/core/i18n.d.ts.map +1 -0
- package/core/i18n.js +627 -0
- package/core/images.d.ts +3 -0
- package/core/images.d.ts.map +1 -0
- package/core/interfaces/overlay-close-details.d.ts +5 -0
- package/core/interfaces/overlay-close-details.d.ts.map +1 -0
- package/core/interfaces/types.d.ts +29 -0
- package/core/interfaces/types.d.ts.map +1 -0
- package/core/interfaces/validation-change.d.ts +4 -0
- package/core/interfaces/validation-change.d.ts.map +1 -0
- package/core/interfaces.d.ts +4 -0
- package/core/interfaces.d.ts.map +1 -0
- package/core/interfaces.js +1 -0
- package/core/mixins/constructor.d.ts +8 -0
- package/core/mixins/constructor.d.ts.map +1 -0
- package/core/mixins/disabled-mixin.d.ts +14 -0
- package/core/mixins/disabled-mixin.d.ts.map +1 -0
- package/core/mixins/form-associated-checkbox-mixin.d.ts +26 -0
- package/core/mixins/form-associated-checkbox-mixin.d.ts.map +1 -0
- package/core/mixins/form-associated-mixin.d.ts +39 -0
- package/core/mixins/form-associated-mixin.d.ts.map +1 -0
- package/core/mixins/hydration-mixin.d.ts +30 -0
- package/core/mixins/hydration-mixin.d.ts.map +1 -0
- package/core/mixins/named-slot-list-mixin.d.ts +31 -0
- package/core/mixins/named-slot-list-mixin.d.ts.map +1 -0
- package/core/mixins/negative-mixin.d.ts +11 -0
- package/core/mixins/negative-mixin.d.ts.map +1 -0
- package/core/mixins/required-mixin.d.ts +14 -0
- package/core/mixins/required-mixin.d.ts.map +1 -0
- package/core/mixins/update-scheduler-mixin.d.ts +14 -0
- package/core/mixins/update-scheduler-mixin.d.ts.map +1 -0
- package/core/mixins.d.ts +10 -0
- package/core/mixins.d.ts.map +1 -0
- package/core/mixins.js +425 -0
- package/core/observers/intersection-observer.d.ts +14 -0
- package/core/observers/intersection-observer.d.ts.map +1 -0
- package/core/observers/mutation-observer.d.ts +7 -0
- package/core/observers/mutation-observer.d.ts.map +1 -0
- package/core/observers/resize-observer.d.ts +10 -0
- package/core/observers/resize-observer.d.ts.map +1 -0
- package/core/observers.d.ts +4 -0
- package/core/observers.d.ts.map +1 -0
- package/core/observers.js +38 -0
- package/core/overlay/overlay-option-panel.d.ts +10 -0
- package/core/overlay/overlay-option-panel.d.ts.map +1 -0
- package/core/overlay/overlay-trigger-attributes.d.ts +18 -0
- package/core/overlay/overlay-trigger-attributes.d.ts.map +1 -0
- package/core/overlay/overlay.d.ts +21 -0
- package/core/overlay/overlay.d.ts.map +1 -0
- package/core/overlay/position.d.ts +41 -0
- package/core/overlay/position.d.ts.map +1 -0
- package/core/overlay.d.ts +5 -0
- package/core/overlay.d.ts.map +1 -0
- package/core/overlay.js +121 -0
- package/core/styles/_index.scss +24 -0
- package/core/styles/a11y.scss +15 -0
- package/core/styles/animation.scss +17 -0
- package/core/styles/core/functions.scss +6 -0
- package/core/styles/core/mediaqueries.scss +105 -0
- package/core/styles/core.scss +123 -0
- package/core/styles/font-characters-extension.scss +3 -0
- package/core/styles/layout.scss +16 -0
- package/core/styles/lists.scss +10 -0
- package/core/styles/mixins/a11y.scss +41 -0
- package/core/styles/mixins/animation.scss +13 -0
- package/core/styles/mixins/badge.scss +14 -0
- package/core/styles/mixins/buttons.scss +208 -0
- package/core/styles/mixins/card.scss +174 -0
- package/core/styles/mixins/chip.scss +95 -0
- package/core/styles/mixins/dev_and_debug.scss +8 -0
- package/core/styles/mixins/font-face.scss +57 -0
- package/core/styles/mixins/helpers.scss +67 -0
- package/core/styles/mixins/inputs.scss +11 -0
- package/core/styles/mixins/layout.scss +37 -0
- package/core/styles/mixins/link.scss +99 -0
- package/core/styles/mixins/lists.scss +186 -0
- package/core/styles/mixins/overlay.scss +154 -0
- package/core/styles/mixins/panel.scss +78 -0
- package/core/styles/mixins/pearl-chain-bullet.scss +129 -0
- package/core/styles/mixins/scrollbar.scss +108 -0
- package/core/styles/mixins/shadows.scss +223 -0
- package/core/styles/mixins/typo.scss +237 -0
- package/core/styles/node_modules_@sbb-esta_lyne-design-tokens_dist_scss_sbb-variables.scss +517 -0
- package/core/styles/node_modules_@sbb-esta_lyne-design-tokens_dist_scss_sbb-variables_css--mixin.scss +1104 -0
- package/core/styles/normalize.scss +216 -0
- package/core/styles/standard-theme.scss +9 -0
- package/core/styles/typography.scss +50 -0
- package/core/testing/event-spy.d.ts +19 -0
- package/core/testing/event-spy.d.ts.map +1 -0
- package/core/testing/mocha-extensions.d.ts +11 -0
- package/core/testing/mocha-extensions.d.ts.map +1 -0
- package/core/testing/private.d.ts +11 -0
- package/core/testing/private.d.ts.map +1 -0
- package/core/testing/scroll.d.ts +6 -0
- package/core/testing/scroll.d.ts.map +1 -0
- package/core/testing/test-setup-ssr.d.ts +2 -0
- package/core/testing/test-setup-ssr.d.ts.map +1 -0
- package/core/testing/test-setup.d.ts +2 -0
- package/core/testing/test-setup.d.ts.map +1 -0
- package/core/testing/wait-for-condition.d.ts +2 -0
- package/core/testing/wait-for-condition.d.ts.map +1 -0
- package/core/testing/wait-for-render.d.ts +18 -0
- package/core/testing/wait-for-render.d.ts.map +1 -0
- package/core/testing.d.ts +6 -0
- package/core/testing.d.ts.map +1 -0
- package/core/testing.js +62 -0
- package/core.css +1280 -0
- package/custom-elements.json +51423 -0
- package/datepicker/common/datepicker-button.d.ts +38 -0
- package/datepicker/common/datepicker-button.d.ts.map +1 -0
- package/datepicker/common.d.ts +2 -0
- package/datepicker/common.d.ts.map +1 -0
- package/datepicker/common.js +122 -0
- package/datepicker/datepicker/datepicker.d.ts +145 -0
- package/datepicker/datepicker/datepicker.d.ts.map +1 -0
- package/datepicker/datepicker-next-day/datepicker-next-day.d.ts +21 -0
- package/datepicker/datepicker-next-day/datepicker-next-day.d.ts.map +1 -0
- package/datepicker/datepicker-next-day.d.ts +2 -0
- package/datepicker/datepicker-next-day.d.ts.map +1 -0
- package/datepicker/datepicker-next-day.js +31 -0
- package/datepicker/datepicker-previous-day/datepicker-previous-day.d.ts +21 -0
- package/datepicker/datepicker-previous-day/datepicker-previous-day.d.ts.map +1 -0
- package/datepicker/datepicker-previous-day.d.ts +2 -0
- package/datepicker/datepicker-previous-day.d.ts.map +1 -0
- package/datepicker/datepicker-previous-day.js +31 -0
- package/datepicker/datepicker-toggle/datepicker-toggle.d.ts +44 -0
- package/datepicker/datepicker-toggle/datepicker-toggle.d.ts.map +1 -0
- package/datepicker/datepicker-toggle.d.ts +2 -0
- package/datepicker/datepicker-toggle.d.ts.map +1 -0
- package/datepicker/datepicker-toggle.js +147 -0
- package/datepicker/datepicker.d.ts +2 -0
- package/datepicker/datepicker.d.ts.map +1 -0
- package/datepicker/datepicker.js +261 -0
- package/datepicker.d.ts +6 -0
- package/datepicker.d.ts.map +1 -0
- package/datepicker.js +5 -0
- package/development/accordion/accordion.d.ts +41 -0
- package/development/accordion/accordion.d.ts.map +1 -0
- package/development/accordion.d.ts +2 -0
- package/development/accordion.d.ts.map +1 -0
- package/development/accordion.js +135 -0
- package/development/action-group/action-group.d.ts +45 -0
- package/development/action-group/action-group.d.ts.map +1 -0
- package/development/action-group.d.ts +2 -0
- package/development/action-group.d.ts.map +1 -0
- package/development/action-group.js +343 -0
- package/development/alert/alert/alert.d.ts +76 -0
- package/development/alert/alert/alert.d.ts.map +1 -0
- package/development/alert/alert-group/alert-group.d.ts +48 -0
- package/development/alert/alert-group/alert-group.d.ts.map +1 -0
- package/development/alert/alert-group.d.ts +2 -0
- package/development/alert/alert-group.d.ts.map +1 -0
- package/development/alert/alert-group.js +144 -0
- package/development/alert/alert.d.ts +2 -0
- package/development/alert/alert.d.ts.map +1 -0
- package/development/alert/alert.js +342 -0
- package/development/alert.d.ts +3 -0
- package/development/alert.d.ts.map +1 -0
- package/development/alert.js +3 -0
- package/development/autocomplete/autocomplete.d.ts +108 -0
- package/development/autocomplete/autocomplete.d.ts.map +1 -0
- package/development/autocomplete.d.ts +2 -0
- package/development/autocomplete.d.ts.map +1 -0
- package/development/autocomplete.js +720 -0
- package/development/breadcrumb/breadcrumb/breadcrumb.d.ts +23 -0
- package/development/breadcrumb/breadcrumb/breadcrumb.d.ts.map +1 -0
- package/development/breadcrumb/breadcrumb-group/breadcrumb-group.d.ts +50 -0
- package/development/breadcrumb/breadcrumb-group/breadcrumb-group.d.ts.map +1 -0
- package/development/breadcrumb/breadcrumb-group.d.ts +2 -0
- package/development/breadcrumb/breadcrumb-group.d.ts.map +1 -0
- package/development/breadcrumb/breadcrumb-group.js +298 -0
- package/development/breadcrumb/breadcrumb.d.ts +2 -0
- package/development/breadcrumb/breadcrumb.d.ts.map +1 -0
- package/development/breadcrumb/breadcrumb.js +129 -0
- package/development/breadcrumb.d.ts +3 -0
- package/development/breadcrumb.d.ts.map +1 -0
- package/development/breadcrumb.js +3 -0
- package/development/button/button/button.d.ts +20 -0
- package/development/button/button/button.d.ts.map +1 -0
- package/development/button/button-link/button-link.d.ts +20 -0
- package/development/button/button-link/button-link.d.ts.map +1 -0
- package/development/button/button-link.d.ts +2 -0
- package/development/button/button-link.d.ts.map +1 -0
- package/development/button/button-link.js +27 -0
- package/development/button/button-static/button-static.d.ts +20 -0
- package/development/button/button-static/button-static.d.ts.map +1 -0
- package/development/button/button-static.d.ts +2 -0
- package/development/button/button-static.d.ts.map +1 -0
- package/development/button/button-static.js +27 -0
- package/development/button/button.d.ts +2 -0
- package/development/button/button.d.ts.map +1 -0
- package/development/button/button.js +27 -0
- package/development/button/common/button-common.d.ts +14 -0
- package/development/button/common/button-common.d.ts.map +1 -0
- package/development/button/common.d.ts +2 -0
- package/development/button/common.d.ts.map +1 -0
- package/development/button/common.js +380 -0
- package/development/button/mini-button/mini-button.d.ts +22 -0
- package/development/button/mini-button/mini-button.d.ts.map +1 -0
- package/development/button/mini-button.d.ts +2 -0
- package/development/button/mini-button.d.ts.map +1 -0
- package/development/button/mini-button.js +194 -0
- package/development/button/secondary-button/secondary-button.d.ts +20 -0
- package/development/button/secondary-button/secondary-button.d.ts.map +1 -0
- package/development/button/secondary-button-link/secondary-button-link.d.ts +20 -0
- package/development/button/secondary-button-link/secondary-button-link.d.ts.map +1 -0
- package/development/button/secondary-button-link.d.ts +2 -0
- package/development/button/secondary-button-link.d.ts.map +1 -0
- package/development/button/secondary-button-link.js +27 -0
- package/development/button/secondary-button-static/secondary-button-static.d.ts +20 -0
- package/development/button/secondary-button-static/secondary-button-static.d.ts.map +1 -0
- package/development/button/secondary-button-static.d.ts +2 -0
- package/development/button/secondary-button-static.d.ts.map +1 -0
- package/development/button/secondary-button-static.js +27 -0
- package/development/button/secondary-button.d.ts +2 -0
- package/development/button/secondary-button.d.ts.map +1 -0
- package/development/button/secondary-button.js +27 -0
- package/development/button/tertiary-button/tertiary-button.d.ts +20 -0
- package/development/button/tertiary-button/tertiary-button.d.ts.map +1 -0
- package/development/button/tertiary-button-link/tertiary-button-link.d.ts +20 -0
- package/development/button/tertiary-button-link/tertiary-button-link.d.ts.map +1 -0
- package/development/button/tertiary-button-link.d.ts +2 -0
- package/development/button/tertiary-button-link.d.ts.map +1 -0
- package/development/button/tertiary-button-link.js +27 -0
- package/development/button/tertiary-button-static/tertiary-button-static.d.ts +20 -0
- package/development/button/tertiary-button-static/tertiary-button-static.d.ts.map +1 -0
- package/development/button/tertiary-button-static.d.ts +2 -0
- package/development/button/tertiary-button-static.d.ts.map +1 -0
- package/development/button/tertiary-button-static.js +27 -0
- package/development/button/tertiary-button.d.ts +2 -0
- package/development/button/tertiary-button.d.ts.map +1 -0
- package/development/button/tertiary-button.js +27 -0
- package/development/button/transparent-button/transparent-button.d.ts +20 -0
- package/development/button/transparent-button/transparent-button.d.ts.map +1 -0
- package/development/button/transparent-button-link/transparent-button-link.d.ts +20 -0
- package/development/button/transparent-button-link/transparent-button-link.d.ts.map +1 -0
- package/development/button/transparent-button-link.d.ts +2 -0
- package/development/button/transparent-button-link.d.ts.map +1 -0
- package/development/button/transparent-button-link.js +27 -0
- package/development/button/transparent-button-static/transparent-button-static.d.ts +20 -0
- package/development/button/transparent-button-static/transparent-button-static.d.ts.map +1 -0
- package/development/button/transparent-button-static.d.ts +2 -0
- package/development/button/transparent-button-static.d.ts.map +1 -0
- package/development/button/transparent-button-static.js +27 -0
- package/development/button/transparent-button.d.ts +2 -0
- package/development/button/transparent-button.d.ts.map +1 -0
- package/development/button/transparent-button.js +27 -0
- package/development/button.d.ts +15 -0
- package/development/button.d.ts.map +1 -0
- package/development/button.js +15 -0
- package/development/calendar/calendar.d.ts +216 -0
- package/development/calendar/calendar.d.ts.map +1 -0
- package/development/calendar.d.ts +2 -0
- package/development/calendar.d.ts.map +1 -0
- package/development/calendar.js +1319 -0
- package/development/card/card/card.d.ts +29 -0
- package/development/card/card/card.d.ts.map +1 -0
- package/development/card/card-badge/card-badge.d.ts +23 -0
- package/development/card/card-badge/card-badge.d.ts.map +1 -0
- package/development/card/card-badge.d.ts +2 -0
- package/development/card/card-badge.d.ts.map +1 -0
- package/development/card/card-badge.js +166 -0
- package/development/card/card-button/card-button.d.ts +19 -0
- package/development/card/card-button/card-button.d.ts.map +1 -0
- package/development/card/card-button.d.ts +2 -0
- package/development/card/card-button.d.ts.map +1 -0
- package/development/card/card-button.js +27 -0
- package/development/card/card-link/card-link.d.ts +19 -0
- package/development/card/card-link/card-link.d.ts.map +1 -0
- package/development/card/card-link.d.ts +2 -0
- package/development/card/card-link.d.ts.map +1 -0
- package/development/card/card-link.js +27 -0
- package/development/card/card.d.ts +2 -0
- package/development/card/card.d.ts.map +1 -0
- package/development/card/card.js +267 -0
- package/development/card/common/card-action-common.d.ts +9 -0
- package/development/card/common/card-action-common.d.ts.map +1 -0
- package/development/card/common.d.ts +2 -0
- package/development/card/common.d.ts.map +1 -0
- package/development/card/common.js +135 -0
- package/development/card.d.ts +6 -0
- package/development/card.d.ts.map +1 -0
- package/development/card.js +6 -0
- package/development/checkbox/checkbox/checkbox.d.ts +73 -0
- package/development/checkbox/checkbox/checkbox.d.ts.map +1 -0
- package/development/checkbox/checkbox-group/checkbox-group.d.ts +37 -0
- package/development/checkbox/checkbox-group/checkbox-group.d.ts.map +1 -0
- package/development/checkbox/checkbox-group.d.ts +2 -0
- package/development/checkbox/checkbox-group.d.ts.map +1 -0
- package/development/checkbox/checkbox-group.js +232 -0
- package/development/checkbox/checkbox.d.ts +2 -0
- package/development/checkbox/checkbox.d.ts.map +1 -0
- package/development/checkbox/checkbox.js +326 -0
- package/development/checkbox.d.ts +3 -0
- package/development/checkbox.d.ts.map +1 -0
- package/development/checkbox.js +3 -0
- package/development/chip/chip.d.ts +21 -0
- package/development/chip/chip.d.ts.map +1 -0
- package/development/chip.d.ts +2 -0
- package/development/chip.d.ts.map +1 -0
- package/development/chip.js +136 -0
- package/development/clock/clock.d.ts +62 -0
- package/development/clock/clock.d.ts.map +1 -0
- package/development/clock.d.ts +2 -0
- package/development/clock.d.ts.map +1 -0
- package/development/clock.js +378 -0
- package/development/container/container/container.d.ts +25 -0
- package/development/container/container/container.d.ts.map +1 -0
- package/development/container/container.d.ts +2 -0
- package/development/container/container.d.ts.map +1 -0
- package/development/container/container.js +115 -0
- package/development/container/sticky-bar/sticky-bar.d.ts +31 -0
- package/development/container/sticky-bar/sticky-bar.d.ts.map +1 -0
- package/development/container/sticky-bar.d.ts +2 -0
- package/development/container/sticky-bar.d.ts.map +1 -0
- package/development/container/sticky-bar.js +221 -0
- package/development/container.d.ts +3 -0
- package/development/container.d.ts.map +1 -0
- package/development/container.js +3 -0
- package/development/core/a11y/arrow-navigation.d.ts +32 -0
- package/development/core/a11y/arrow-navigation.d.ts.map +1 -0
- package/development/core/a11y/fake-event-detection.d.ts +5 -0
- package/development/core/a11y/fake-event-detection.d.ts.map +1 -0
- package/development/core/a11y/focus-visible-within-controller.d.ts +11 -0
- package/development/core/a11y/focus-visible-within-controller.d.ts.map +1 -0
- package/development/core/a11y/focus.d.ts +22 -0
- package/development/core/a11y/focus.d.ts.map +1 -0
- package/development/core/a11y/input-modality-detector.d.ts +58 -0
- package/development/core/a11y/input-modality-detector.d.ts.map +1 -0
- package/development/core/a11y/interactivity-checker.d.ts +17 -0
- package/development/core/a11y/interactivity-checker.d.ts.map +1 -0
- package/development/core/a11y.d.ts +7 -0
- package/development/core/a11y.d.ts.map +1 -0
- package/development/core/a11y.js +295 -0
- package/development/core/base-elements/action-base-element.d.ts +11 -0
- package/development/core/base-elements/action-base-element.d.ts.map +1 -0
- package/development/core/base-elements/button-base-element.d.ts +46 -0
- package/development/core/base-elements/button-base-element.d.ts.map +1 -0
- package/development/core/base-elements/link-base-element.d.ts +31 -0
- package/development/core/base-elements/link-base-element.d.ts.map +1 -0
- package/development/core/base-elements/open-close-base-element.d.ts +37 -0
- package/development/core/base-elements/open-close-base-element.d.ts.map +1 -0
- package/development/core/base-elements.d.ts +5 -0
- package/development/core/base-elements.d.ts.map +1 -0
- package/development/core/base-elements.js +292 -0
- package/development/core/config/config.d.ts +22 -0
- package/development/core/config/config.d.ts.map +1 -0
- package/development/core/config.d.ts +2 -0
- package/development/core/config.d.ts.map +1 -0
- package/development/core/config.js +15 -0
- package/development/core/controllers/connected-abort-controller.d.ts +11 -0
- package/development/core/controllers/connected-abort-controller.d.ts.map +1 -0
- package/development/core/controllers/language-controller.d.ts +33 -0
- package/development/core/controllers/language-controller.d.ts.map +1 -0
- package/development/core/controllers/slot-state-controller.d.ts +32 -0
- package/development/core/controllers/slot-state-controller.d.ts.map +1 -0
- package/development/core/controllers.d.ts +4 -0
- package/development/core/controllers.d.ts.map +1 -0
- package/development/core/controllers.js +134 -0
- package/development/core/datetime/date-adapter.d.ts +162 -0
- package/development/core/datetime/date-adapter.d.ts.map +1 -0
- package/development/core/datetime/native-date-adapter.d.ts +74 -0
- package/development/core/datetime/native-date-adapter.d.ts.map +1 -0
- package/development/core/datetime.d.ts +3 -0
- package/development/core/datetime.d.ts.map +1 -0
- package/development/core/datetime.js +291 -0
- package/development/core/decorators/host-attributes.d.ts +22 -0
- package/development/core/decorators/host-attributes.d.ts.map +1 -0
- package/development/core/decorators.d.ts +2 -0
- package/development/core/decorators.d.ts.map +1 -0
- package/development/core/decorators.js +30 -0
- package/development/core/dom/breakpoint.d.ts +14 -0
- package/development/core/dom/breakpoint.d.ts.map +1 -0
- package/development/core/dom/find-referenced-element.d.ts +7 -0
- package/development/core/dom/find-referenced-element.d.ts.map +1 -0
- package/development/core/dom/get-document-writing-mode.d.ts +2 -0
- package/development/core/dom/get-document-writing-mode.d.ts.map +1 -0
- package/development/core/dom/host-context.d.ts +11 -0
- package/development/core/dom/host-context.d.ts.map +1 -0
- package/development/core/dom/input-element.d.ts +10 -0
- package/development/core/dom/input-element.d.ts.map +1 -0
- package/development/core/dom/platform.d.ts +24 -0
- package/development/core/dom/platform.d.ts.map +1 -0
- package/development/core/dom/scroll.d.ts +13 -0
- package/development/core/dom/scroll.d.ts.map +1 -0
- package/development/core/dom/set-or-remove-attribute.d.ts +8 -0
- package/development/core/dom/set-or-remove-attribute.d.ts.map +1 -0
- package/development/core/dom/ssr.d.ts +12 -0
- package/development/core/dom/ssr.d.ts.map +1 -0
- package/development/core/dom.d.ts +10 -0
- package/development/core/dom.d.ts.map +1 -0
- package/development/core/dom.js +146 -0
- package/development/core/eventing/composed-path-has-attribute.d.ts +10 -0
- package/development/core/eventing/composed-path-has-attribute.d.ts.map +1 -0
- package/development/core/eventing/event-emitter.d.ts +23 -0
- package/development/core/eventing/event-emitter.d.ts.map +1 -0
- package/development/core/eventing/event-target.d.ts +3 -0
- package/development/core/eventing/event-target.d.ts.map +1 -0
- package/development/core/eventing/form-element-handlers.d.ts +14 -0
- package/development/core/eventing/form-element-handlers.d.ts.map +1 -0
- package/development/core/eventing/forward-event.d.ts +6 -0
- package/development/core/eventing/forward-event.d.ts.map +1 -0
- package/development/core/eventing/handler-repository.d.ts +28 -0
- package/development/core/eventing/handler-repository.d.ts.map +1 -0
- package/development/core/eventing/is-event-prevented.d.ts +3 -0
- package/development/core/eventing/is-event-prevented.d.ts.map +1 -0
- package/development/core/eventing/throttle.d.ts +2 -0
- package/development/core/eventing/throttle.d.ts.map +1 -0
- package/development/core/eventing.d.ts +9 -0
- package/development/core/eventing.d.ts.map +1 -0
- package/development/core/eventing.js +98 -0
- package/development/core/i18n/i18n.d.ts +74 -0
- package/development/core/i18n/i18n.d.ts.map +1 -0
- package/development/core/i18n.d.ts +2 -0
- package/development/core/i18n.d.ts.map +1 -0
- package/development/core/i18n.js +708 -0
- package/development/core/images.d.ts +3 -0
- package/development/core/images.d.ts.map +1 -0
- package/development/core/interfaces/overlay-close-details.d.ts +5 -0
- package/development/core/interfaces/overlay-close-details.d.ts.map +1 -0
- package/development/core/interfaces/types.d.ts +29 -0
- package/development/core/interfaces/types.d.ts.map +1 -0
- package/development/core/interfaces/validation-change.d.ts +4 -0
- package/development/core/interfaces/validation-change.d.ts.map +1 -0
- package/development/core/interfaces.d.ts +4 -0
- package/development/core/interfaces.d.ts.map +1 -0
- package/development/core/interfaces.js +2 -0
- package/development/core/mixins/constructor.d.ts +8 -0
- package/development/core/mixins/constructor.d.ts.map +1 -0
- package/development/core/mixins/disabled-mixin.d.ts +14 -0
- package/development/core/mixins/disabled-mixin.d.ts.map +1 -0
- package/development/core/mixins/form-associated-checkbox-mixin.d.ts +26 -0
- package/development/core/mixins/form-associated-checkbox-mixin.d.ts.map +1 -0
- package/development/core/mixins/form-associated-mixin.d.ts +39 -0
- package/development/core/mixins/form-associated-mixin.d.ts.map +1 -0
- package/development/core/mixins/hydration-mixin.d.ts +30 -0
- package/development/core/mixins/hydration-mixin.d.ts.map +1 -0
- package/development/core/mixins/named-slot-list-mixin.d.ts +31 -0
- package/development/core/mixins/named-slot-list-mixin.d.ts.map +1 -0
- package/development/core/mixins/negative-mixin.d.ts +11 -0
- package/development/core/mixins/negative-mixin.d.ts.map +1 -0
- package/development/core/mixins/required-mixin.d.ts +14 -0
- package/development/core/mixins/required-mixin.d.ts.map +1 -0
- package/development/core/mixins/update-scheduler-mixin.d.ts +14 -0
- package/development/core/mixins/update-scheduler-mixin.d.ts.map +1 -0
- package/development/core/mixins.d.ts +10 -0
- package/development/core/mixins.d.ts.map +1 -0
- package/development/core/mixins.js +573 -0
- package/development/core/observers/intersection-observer.d.ts +14 -0
- package/development/core/observers/intersection-observer.d.ts.map +1 -0
- package/development/core/observers/mutation-observer.d.ts +7 -0
- package/development/core/observers/mutation-observer.d.ts.map +1 -0
- package/development/core/observers/resize-observer.d.ts +10 -0
- package/development/core/observers/resize-observer.d.ts.map +1 -0
- package/development/core/observers.d.ts +4 -0
- package/development/core/observers.d.ts.map +1 -0
- package/development/core/observers.js +39 -0
- package/development/core/overlay/overlay-option-panel.d.ts +10 -0
- package/development/core/overlay/overlay-option-panel.d.ts.map +1 -0
- package/development/core/overlay/overlay-trigger-attributes.d.ts +18 -0
- package/development/core/overlay/overlay-trigger-attributes.d.ts.map +1 -0
- package/development/core/overlay/overlay.d.ts +21 -0
- package/development/core/overlay/overlay.d.ts.map +1 -0
- package/development/core/overlay/position.d.ts +41 -0
- package/development/core/overlay/position.d.ts.map +1 -0
- package/development/core/overlay.d.ts +5 -0
- package/development/core/overlay.d.ts.map +1 -0
- package/development/core/overlay.js +234 -0
- package/development/core/testing/event-spy.d.ts +19 -0
- package/development/core/testing/event-spy.d.ts.map +1 -0
- package/development/core/testing/mocha-extensions.d.ts +11 -0
- package/development/core/testing/mocha-extensions.d.ts.map +1 -0
- package/development/core/testing/private.d.ts +11 -0
- package/development/core/testing/private.d.ts.map +1 -0
- package/development/core/testing/scroll.d.ts +6 -0
- package/development/core/testing/scroll.d.ts.map +1 -0
- package/development/core/testing/test-setup-ssr.d.ts +2 -0
- package/development/core/testing/test-setup-ssr.d.ts.map +1 -0
- package/development/core/testing/test-setup.d.ts +2 -0
- package/development/core/testing/test-setup.d.ts.map +1 -0
- package/development/core/testing/wait-for-condition.d.ts +2 -0
- package/development/core/testing/wait-for-condition.d.ts.map +1 -0
- package/development/core/testing/wait-for-render.d.ts +18 -0
- package/development/core/testing/wait-for-render.d.ts.map +1 -0
- package/development/core/testing.d.ts +6 -0
- package/development/core/testing.d.ts.map +1 -0
- package/development/core/testing.js +84 -0
- package/development/datepicker/common/datepicker-button.d.ts +38 -0
- package/development/datepicker/common/datepicker-button.d.ts.map +1 -0
- package/development/datepicker/common.d.ts +2 -0
- package/development/datepicker/common.d.ts.map +1 -0
- package/development/datepicker/common.js +173 -0
- package/development/datepicker/datepicker/datepicker.d.ts +145 -0
- package/development/datepicker/datepicker/datepicker.d.ts.map +1 -0
- package/development/datepicker/datepicker-next-day/datepicker-next-day.d.ts +21 -0
- package/development/datepicker/datepicker-next-day/datepicker-next-day.d.ts.map +1 -0
- package/development/datepicker/datepicker-next-day.d.ts +2 -0
- package/development/datepicker/datepicker-next-day.d.ts.map +1 -0
- package/development/datepicker/datepicker-next-day.js +207 -0
- package/development/datepicker/datepicker-previous-day/datepicker-previous-day.d.ts +21 -0
- package/development/datepicker/datepicker-previous-day/datepicker-previous-day.d.ts.map +1 -0
- package/development/datepicker/datepicker-previous-day.d.ts +2 -0
- package/development/datepicker/datepicker-previous-day.d.ts.map +1 -0
- package/development/datepicker/datepicker-previous-day.js +207 -0
- package/development/datepicker/datepicker-toggle/datepicker-toggle.d.ts +44 -0
- package/development/datepicker/datepicker-toggle/datepicker-toggle.d.ts.map +1 -0
- package/development/datepicker/datepicker-toggle.d.ts +2 -0
- package/development/datepicker/datepicker-toggle.d.ts.map +1 -0
- package/development/datepicker/datepicker-toggle.js +234 -0
- package/development/datepicker/datepicker.d.ts +2 -0
- package/development/datepicker/datepicker.d.ts.map +1 -0
- package/development/datepicker/datepicker.js +381 -0
- package/development/datepicker.d.ts +6 -0
- package/development/datepicker.d.ts.map +1 -0
- package/development/datepicker.js +6 -0
- package/development/dialog/dialog/dialog.d.ts +54 -0
- package/development/dialog/dialog/dialog.d.ts.map +1 -0
- package/development/dialog/dialog-actions/dialog-actions.d.ts +18 -0
- package/development/dialog/dialog-actions/dialog-actions.d.ts.map +1 -0
- package/development/dialog/dialog-actions.d.ts +2 -0
- package/development/dialog/dialog-actions.d.ts.map +1 -0
- package/development/dialog/dialog-actions.js +66 -0
- package/development/dialog/dialog-content/dialog-content.d.ts +17 -0
- package/development/dialog/dialog-content/dialog-content.d.ts.map +1 -0
- package/development/dialog/dialog-content.d.ts +2 -0
- package/development/dialog/dialog-content.d.ts.map +1 -0
- package/development/dialog/dialog-content.js +91 -0
- package/development/dialog/dialog-title/dialog-title.d.ts +43 -0
- package/development/dialog/dialog-title/dialog-title.d.ts.map +1 -0
- package/development/dialog/dialog-title.d.ts +2 -0
- package/development/dialog/dialog-title.d.ts.map +1 -0
- package/development/dialog/dialog-title.js +168 -0
- package/development/dialog/dialog.d.ts +2 -0
- package/development/dialog/dialog.d.ts.map +1 -0
- package/development/dialog/dialog.js +437 -0
- package/development/dialog.d.ts +5 -0
- package/development/dialog.d.ts.map +1 -0
- package/development/dialog.js +5 -0
- package/development/divider/divider.d.ts +21 -0
- package/development/divider/divider.d.ts.map +1 -0
- package/development/divider.d.ts +2 -0
- package/development/divider.d.ts.map +1 -0
- package/development/divider.js +85 -0
- package/development/expansion-panel/expansion-panel/expansion-panel.d.ts +75 -0
- package/development/expansion-panel/expansion-panel/expansion-panel.d.ts.map +1 -0
- package/development/expansion-panel/expansion-panel-content/expansion-panel-content.d.ts +17 -0
- package/development/expansion-panel/expansion-panel-content/expansion-panel-content.d.ts.map +1 -0
- package/development/expansion-panel/expansion-panel-content.d.ts +2 -0
- package/development/expansion-panel/expansion-panel-content.d.ts.map +1 -0
- package/development/expansion-panel/expansion-panel-content.js +84 -0
- package/development/expansion-panel/expansion-panel-header/expansion-panel-header.d.ts +38 -0
- package/development/expansion-panel/expansion-panel-header/expansion-panel-header.d.ts.map +1 -0
- package/development/expansion-panel/expansion-panel-header.d.ts +2 -0
- package/development/expansion-panel/expansion-panel-header.d.ts.map +1 -0
- package/development/expansion-panel/expansion-panel-header.js +194 -0
- package/development/expansion-panel/expansion-panel.d.ts +2 -0
- package/development/expansion-panel/expansion-panel.d.ts.map +1 -0
- package/development/expansion-panel/expansion-panel.js +396 -0
- package/development/expansion-panel.d.ts +4 -0
- package/development/expansion-panel.d.ts.map +1 -0
- package/development/expansion-panel.js +4 -0
- package/development/file-selector/file-selector.d.ts +74 -0
- package/development/file-selector/file-selector.d.ts.map +1 -0
- package/development/file-selector.d.ts +2 -0
- package/development/file-selector.d.ts.map +1 -0
- package/development/file-selector.js +428 -0
- package/development/footer/footer.d.ts +35 -0
- package/development/footer/footer.d.ts.map +1 -0
- package/development/footer.d.ts +2 -0
- package/development/footer.d.ts.map +1 -0
- package/development/footer.js +229 -0
- package/development/form-error/form-error.d.ts +21 -0
- package/development/form-error/form-error.d.ts.map +1 -0
- package/development/form-error.d.ts +2 -0
- package/development/form-error.d.ts.map +1 -0
- package/development/form-error.js +121 -0
- package/development/form-field/form-field/form-field.d.ts +101 -0
- package/development/form-field/form-field/form-field.d.ts.map +1 -0
- package/development/form-field/form-field-clear/form-field-clear.d.ts +24 -0
- package/development/form-field/form-field-clear/form-field-clear.d.ts.map +1 -0
- package/development/form-field/form-field-clear.d.ts +2 -0
- package/development/form-field/form-field-clear.d.ts.map +1 -0
- package/development/form-field/form-field-clear.js +223 -0
- package/development/form-field/form-field.d.ts +2 -0
- package/development/form-field/form-field.d.ts.map +1 -0
- package/development/form-field/form-field.js +885 -0
- package/development/form-field.d.ts +3 -0
- package/development/form-field.d.ts.map +1 -0
- package/development/form-field.js +3 -0
- package/development/header/common/header-action-common.d.ts +11 -0
- package/development/header/common/header-action-common.d.ts.map +1 -0
- package/development/header/common.d.ts +2 -0
- package/development/header/common.d.ts.map +1 -0
- package/development/header/common.js +340 -0
- package/development/header/header/header.d.ts +59 -0
- package/development/header/header/header.d.ts.map +1 -0
- package/development/header/header-button/header-button.d.ts +18 -0
- package/development/header/header-button/header-button.d.ts.map +1 -0
- package/development/header/header-button.d.ts +2 -0
- package/development/header/header-button.d.ts.map +1 -0
- package/development/header/header-button.js +25 -0
- package/development/header/header-link/header-link.d.ts +18 -0
- package/development/header/header-link/header-link.d.ts.map +1 -0
- package/development/header/header-link.d.ts +2 -0
- package/development/header/header-link.d.ts.map +1 -0
- package/development/header/header-link.js +23 -0
- package/development/header/header.d.ts +2 -0
- package/development/header/header.d.ts.map +1 -0
- package/development/header/header.js +333 -0
- package/development/header.d.ts +5 -0
- package/development/header.d.ts.map +1 -0
- package/development/header.js +5 -0
- package/development/icon/icon-base.d.ts +28 -0
- package/development/icon/icon-base.d.ts.map +1 -0
- package/development/icon/icon-name-mixin.d.ts +12 -0
- package/development/icon/icon-name-mixin.d.ts.map +1 -0
- package/development/icon/icon-request.d.ts +3 -0
- package/development/icon/icon-request.d.ts.map +1 -0
- package/development/icon/icon-validate.d.ts +12 -0
- package/development/icon/icon-validate.d.ts.map +1 -0
- package/development/icon/icon.d.ts +24 -0
- package/development/icon/icon.d.ts.map +1 -0
- package/development/icon.d.ts +6 -0
- package/development/icon.d.ts.map +1 -0
- package/development/icon.js +307 -0
- package/development/image/image.d.ts +236 -0
- package/development/image/image.d.ts.map +1 -0
- package/development/image.d.ts +2 -0
- package/development/image.d.ts.map +1 -0
- package/development/image.js +525 -0
- package/development/journey-header/journey-header.d.ts +30 -0
- package/development/journey-header/journey-header.d.ts.map +1 -0
- package/development/journey-header.d.ts +2 -0
- package/development/journey-header.d.ts.map +1 -0
- package/development/journey-header.js +132 -0
- package/development/lead-container/lead-container.d.ts +20 -0
- package/development/lead-container/lead-container.d.ts.map +1 -0
- package/development/lead-container.d.ts +2 -0
- package/development/lead-container.d.ts.map +1 -0
- package/development/lead-container.js +168 -0
- package/development/link/block-link/block-link.d.ts +18 -0
- package/development/link/block-link/block-link.d.ts.map +1 -0
- package/development/link/block-link-button/block-link-button.d.ts +18 -0
- package/development/link/block-link-button/block-link-button.d.ts.map +1 -0
- package/development/link/block-link-button.d.ts +2 -0
- package/development/link/block-link-button.d.ts.map +1 -0
- package/development/link/block-link-button.js +26 -0
- package/development/link/block-link-static/block-link-static.d.ts +18 -0
- package/development/link/block-link-static/block-link-static.d.ts.map +1 -0
- package/development/link/block-link-static.d.ts +2 -0
- package/development/link/block-link-static.d.ts.map +1 -0
- package/development/link/block-link-static.js +26 -0
- package/development/link/block-link.d.ts +2 -0
- package/development/link/block-link.d.ts.map +1 -0
- package/development/link/block-link.js +26 -0
- package/development/link/common/block-link-common.d.ts +11 -0
- package/development/link/common/block-link-common.d.ts.map +1 -0
- package/development/link/common/inline-link-common.d.ts +8 -0
- package/development/link/common/inline-link-common.d.ts.map +1 -0
- package/development/link/common/link-common.d.ts +9 -0
- package/development/link/common/link-common.d.ts.map +1 -0
- package/development/link/common.d.ts +4 -0
- package/development/link/common.d.ts.map +1 -0
- package/development/link/common.js +271 -0
- package/development/link/link/link.d.ts +17 -0
- package/development/link/link/link.d.ts.map +1 -0
- package/development/link/link-button/link-button.d.ts +17 -0
- package/development/link/link-button/link-button.d.ts.map +1 -0
- package/development/link/link-button.d.ts +2 -0
- package/development/link/link-button.d.ts.map +1 -0
- package/development/link/link-button.js +26 -0
- package/development/link/link-static/link-static.d.ts +17 -0
- package/development/link/link-static/link-static.d.ts.map +1 -0
- package/development/link/link-static.d.ts +2 -0
- package/development/link/link-static.d.ts.map +1 -0
- package/development/link/link-static.js +26 -0
- package/development/link/link.d.ts +2 -0
- package/development/link/link.d.ts.map +1 -0
- package/development/link/link.js +26 -0
- package/development/link-list/link-list.d.ts +40 -0
- package/development/link-list/link-list.d.ts.map +1 -0
- package/development/link-list.d.ts +2 -0
- package/development/link-list.d.ts.map +1 -0
- package/development/link-list.js +255 -0
- package/development/link.d.ts +8 -0
- package/development/link.d.ts.map +1 -0
- package/development/link.js +8 -0
- package/development/loading-indicator/loading-indicator.d.ts +21 -0
- package/development/loading-indicator/loading-indicator.d.ts.map +1 -0
- package/development/loading-indicator.d.ts +2 -0
- package/development/loading-indicator.d.ts.map +1 -0
- package/development/loading-indicator.js +339 -0
- package/development/logo/logo.d.ts +24 -0
- package/development/logo/logo.d.ts.map +1 -0
- package/development/logo.d.ts +2 -0
- package/development/logo.d.ts.map +1 -0
- package/development/logo.js +142 -0
- package/development/map-container/map-container.d.ts +43 -0
- package/development/map-container/map-container.d.ts.map +1 -0
- package/development/map-container.d.ts +2 -0
- package/development/map-container.d.ts.map +1 -0
- package/development/map-container.js +268 -0
- package/development/menu/common/menu-action-common.d.ts +11 -0
- package/development/menu/common/menu-action-common.d.ts.map +1 -0
- package/development/menu/common.d.ts +2 -0
- package/development/menu/common.d.ts.map +1 -0
- package/development/menu/common.js +174 -0
- package/development/menu/menu/menu.d.ts +76 -0
- package/development/menu/menu/menu.d.ts.map +1 -0
- package/development/menu/menu-button/menu-button.d.ts +20 -0
- package/development/menu/menu-button/menu-button.d.ts.map +1 -0
- package/development/menu/menu-button.d.ts +2 -0
- package/development/menu/menu-button.d.ts.map +1 -0
- package/development/menu/menu-button.js +26 -0
- package/development/menu/menu-link/menu-link.d.ts +20 -0
- package/development/menu/menu-link/menu-link.d.ts.map +1 -0
- package/development/menu/menu-link.d.ts +2 -0
- package/development/menu/menu-link.d.ts.map +1 -0
- package/development/menu/menu-link.js +23 -0
- package/development/menu/menu.d.ts +2 -0
- package/development/menu/menu.d.ts.map +1 -0
- package/development/menu/menu.js +538 -0
- package/development/menu.d.ts +5 -0
- package/development/menu.d.ts.map +1 -0
- package/development/menu.js +5 -0
- package/development/message/message.d.ts +26 -0
- package/development/message/message.d.ts.map +1 -0
- package/development/message.d.ts +2 -0
- package/development/message.d.ts.map +1 -0
- package/development/message.js +118 -0
- package/development/navigation/common/navigation-action-common.d.ts +14 -0
- package/development/navigation/common/navigation-action-common.d.ts.map +1 -0
- package/development/navigation/common.d.ts +2 -0
- package/development/navigation/common.d.ts.map +1 -0
- package/development/navigation/common.js +179 -0
- package/development/navigation/navigation/navigation.d.ts +82 -0
- package/development/navigation/navigation/navigation.d.ts.map +1 -0
- package/development/navigation/navigation-button/navigation-button.d.ts +17 -0
- package/development/navigation/navigation-button/navigation-button.d.ts.map +1 -0
- package/development/navigation/navigation-button.d.ts +2 -0
- package/development/navigation/navigation-button.d.ts.map +1 -0
- package/development/navigation/navigation-button.js +25 -0
- package/development/navigation/navigation-link/navigation-link.d.ts +17 -0
- package/development/navigation/navigation-link/navigation-link.d.ts.map +1 -0
- package/development/navigation/navigation-link.d.ts +2 -0
- package/development/navigation/navigation-link.d.ts.map +1 -0
- package/development/navigation/navigation-link.js +25 -0
- package/development/navigation/navigation-list/navigation-list.d.ts +30 -0
- package/development/navigation/navigation-list/navigation-list.d.ts.map +1 -0
- package/development/navigation/navigation-list.d.ts +2 -0
- package/development/navigation/navigation-list.d.ts.map +1 -0
- package/development/navigation/navigation-list.js +104 -0
- package/development/navigation/navigation-marker/navigation-marker.d.ts +38 -0
- package/development/navigation/navigation-marker/navigation-marker.d.ts.map +1 -0
- package/development/navigation/navigation-marker.d.ts +2 -0
- package/development/navigation/navigation-marker.d.ts.map +1 -0
- package/development/navigation/navigation-marker.js +220 -0
- package/development/navigation/navigation-section/navigation-section.d.ts +76 -0
- package/development/navigation/navigation-section/navigation-section.d.ts.map +1 -0
- package/development/navigation/navigation-section.d.ts +2 -0
- package/development/navigation/navigation-section.d.ts.map +1 -0
- package/development/navigation/navigation-section.js +600 -0
- package/development/navigation/navigation.d.ts +2 -0
- package/development/navigation/navigation.d.ts.map +1 -0
- package/development/navigation/navigation.js +598 -0
- package/development/navigation.d.ts +8 -0
- package/development/navigation.d.ts.map +1 -0
- package/development/navigation.js +8 -0
- package/development/notification/notification.d.ts +82 -0
- package/development/notification/notification.d.ts.map +1 -0
- package/development/notification.d.ts +2 -0
- package/development/notification.d.ts.map +1 -0
- package/development/notification.js +472 -0
- package/development/option/optgroup/optgroup.d.ts +33 -0
- package/development/option/optgroup/optgroup.d.ts.map +1 -0
- package/development/option/optgroup.d.ts +2 -0
- package/development/option/optgroup.d.ts.map +1 -0
- package/development/option/optgroup.js +230 -0
- package/development/option/option/option.d.ts +91 -0
- package/development/option/option/option.d.ts.map +1 -0
- package/development/option/option.d.ts +2 -0
- package/development/option/option.d.ts.map +1 -0
- package/development/option/option.js +444 -0
- package/development/option.d.ts +3 -0
- package/development/option.d.ts.map +1 -0
- package/development/option.js +3 -0
- package/development/overlay/overlay-base-element.d.ts +43 -0
- package/development/overlay/overlay-base-element.d.ts.map +1 -0
- package/development/overlay/overlay.d.ts +52 -0
- package/development/overlay/overlay.d.ts.map +1 -0
- package/development/overlay.d.ts +3 -0
- package/development/overlay.d.ts.map +1 -0
- package/development/overlay.js +484 -0
- package/development/popover/popover/popover.d.ts +85 -0
- package/development/popover/popover/popover.d.ts.map +1 -0
- package/development/popover/popover-trigger/popover-trigger.d.ts +21 -0
- package/development/popover/popover-trigger/popover-trigger.d.ts.map +1 -0
- package/development/popover/popover-trigger.d.ts +2 -0
- package/development/popover/popover-trigger.d.ts.map +1 -0
- package/development/popover/popover-trigger.js +266 -0
- package/development/popover/popover.d.ts +2 -0
- package/development/popover/popover.d.ts.map +1 -0
- package/development/popover/popover.js +554 -0
- package/development/popover.d.ts +3 -0
- package/development/popover.d.ts.map +1 -0
- package/development/popover.js +3 -0
- package/development/radio-button/radio-button/radio-button.d.ts +102 -0
- package/development/radio-button/radio-button/radio-button.d.ts.map +1 -0
- package/development/radio-button/radio-button-group/radio-button-group.d.ts +91 -0
- package/development/radio-button/radio-button-group/radio-button-group.d.ts.map +1 -0
- package/development/radio-button/radio-button-group.d.ts +2 -0
- package/development/radio-button/radio-button-group.d.ts.map +1 -0
- package/development/radio-button/radio-button-group.js +338 -0
- package/development/radio-button/radio-button.d.ts +2 -0
- package/development/radio-button/radio-button.d.ts.map +1 -0
- package/development/radio-button/radio-button.js +398 -0
- package/development/radio-button.d.ts +3 -0
- package/development/radio-button.d.ts.map +1 -0
- package/development/radio-button.js +3 -0
- package/development/screen-reader-only/screen-reader-only.d.ts +17 -0
- package/development/screen-reader-only/screen-reader-only.d.ts.map +1 -0
- package/development/screen-reader-only.d.ts +2 -0
- package/development/screen-reader-only.d.ts.map +1 -0
- package/development/screen-reader-only.js +51 -0
- package/development/select/select.d.ts +140 -0
- package/development/select/select.d.ts.map +1 -0
- package/development/select.d.ts +2 -0
- package/development/select.d.ts.map +1 -0
- package/development/select.js +892 -0
- package/development/selection-panel/selection-panel.d.ts +63 -0
- package/development/selection-panel/selection-panel.d.ts.map +1 -0
- package/development/selection-panel.d.ts +2 -0
- package/development/selection-panel.d.ts.map +1 -0
- package/development/selection-panel.js +377 -0
- package/development/signet/signet.d.ts +20 -0
- package/development/signet/signet.d.ts.map +1 -0
- package/development/signet.d.ts +2 -0
- package/development/signet.d.ts.map +1 -0
- package/development/signet.js +116 -0
- package/development/skiplink-list/skiplink-list.d.ts +32 -0
- package/development/skiplink-list/skiplink-list.d.ts.map +1 -0
- package/development/skiplink-list.d.ts +2 -0
- package/development/skiplink-list.d.ts.map +1 -0
- package/development/skiplink-list.js +125 -0
- package/development/slider/slider.d.ts +70 -0
- package/development/slider/slider.d.ts.map +1 -0
- package/development/slider.d.ts +2 -0
- package/development/slider.d.ts.map +1 -0
- package/development/slider.js +352 -0
- package/development/status/status.d.ts +32 -0
- package/development/status/status.d.ts.map +1 -0
- package/development/status.d.ts +2 -0
- package/development/status.d.ts.map +1 -0
- package/development/status.js +156 -0
- package/development/stepper/step/step.d.ts +66 -0
- package/development/stepper/step/step.d.ts.map +1 -0
- package/development/stepper/step-label/step-label.d.ts +47 -0
- package/development/stepper/step-label/step-label.d.ts.map +1 -0
- package/development/stepper/step-label.d.ts +2 -0
- package/development/stepper/step-label.d.ts.map +1 -0
- package/development/stepper/step-label.js +280 -0
- package/development/stepper/step.d.ts +2 -0
- package/development/stepper/step.d.ts.map +1 -0
- package/development/stepper/step.js +233 -0
- package/development/stepper/stepper/stepper.d.ts +59 -0
- package/development/stepper/stepper/stepper.d.ts.map +1 -0
- package/development/stepper/stepper.d.ts +2 -0
- package/development/stepper/stepper.d.ts.map +1 -0
- package/development/stepper/stepper.js +364 -0
- package/development/stepper.d.ts +4 -0
- package/development/stepper.d.ts.map +1 -0
- package/development/stepper.js +4 -0
- package/development/tabs/tab-group/tab-group.d.ts +94 -0
- package/development/tabs/tab-group/tab-group.d.ts.map +1 -0
- package/development/tabs/tab-group.d.ts +2 -0
- package/development/tabs/tab-group.d.ts.map +1 -0
- package/development/tabs/tab-group.js +390 -0
- package/development/tabs/tab-title/tab-title.d.ts +32 -0
- package/development/tabs/tab-title/tab-title.d.ts.map +1 -0
- package/development/tabs/tab-title.d.ts +2 -0
- package/development/tabs/tab-title.d.ts.map +1 -0
- package/development/tabs/tab-title.js +288 -0
- package/development/tabs.d.ts +3 -0
- package/development/tabs.d.ts.map +1 -0
- package/development/tabs.js +3 -0
- package/development/tag/tag/tag.d.ts +53 -0
- package/development/tag/tag/tag.d.ts.map +1 -0
- package/development/tag/tag-group/tag-group.d.ts +46 -0
- package/development/tag/tag-group/tag-group.d.ts.map +1 -0
- package/development/tag/tag-group.d.ts +2 -0
- package/development/tag/tag-group.d.ts.map +1 -0
- package/development/tag/tag-group.js +143 -0
- package/development/tag/tag.d.ts +2 -0
- package/development/tag/tag.d.ts.map +1 -0
- package/development/tag/tag.js +298 -0
- package/development/tag.d.ts +3 -0
- package/development/tag.d.ts.map +1 -0
- package/development/tag.js +3 -0
- package/development/teaser/teaser.d.ts +31 -0
- package/development/teaser/teaser.d.ts.map +1 -0
- package/development/teaser-hero/teaser-hero.d.ts +26 -0
- package/development/teaser-hero/teaser-hero.d.ts.map +1 -0
- package/development/teaser-hero.d.ts +2 -0
- package/development/teaser-hero.d.ts.map +1 -0
- package/development/teaser-hero.js +182 -0
- package/development/teaser-paid/teaser-paid.d.ts +20 -0
- package/development/teaser-paid/teaser-paid.d.ts.map +1 -0
- package/development/teaser-paid.d.ts +2 -0
- package/development/teaser-paid.d.ts.map +1 -0
- package/development/teaser-paid.js +92 -0
- package/development/teaser.d.ts +2 -0
- package/development/teaser.d.ts.map +1 -0
- package/development/teaser.js +205 -0
- package/development/time-input/time-input.d.ts +68 -0
- package/development/time-input/time-input.d.ts.map +1 -0
- package/development/time-input.d.ts +2 -0
- package/development/time-input.d.ts.map +1 -0
- package/development/time-input.js +270 -0
- package/development/timetable-occupancy/timetable-occupancy.d.ts +23 -0
- package/development/timetable-occupancy/timetable-occupancy.d.ts.map +1 -0
- package/development/timetable-occupancy-icon/timetable-occupancy-icon.d.ts +27 -0
- package/development/timetable-occupancy-icon/timetable-occupancy-icon.d.ts.map +1 -0
- package/development/timetable-occupancy-icon.d.ts +2 -0
- package/development/timetable-occupancy-icon.d.ts.map +1 -0
- package/development/timetable-occupancy-icon.js +93 -0
- package/development/timetable-occupancy.d.ts +2 -0
- package/development/timetable-occupancy.d.ts.map +1 -0
- package/development/timetable-occupancy.js +134 -0
- package/development/title/title-base.d.ts +26 -0
- package/development/title/title-base.d.ts.map +1 -0
- package/development/title/title.d.ts +16 -0
- package/development/title/title.d.ts.map +1 -0
- package/development/title.d.ts +3 -0
- package/development/title.d.ts.map +1 -0
- package/development/title.js +260 -0
- package/development/toast/toast.d.ts +79 -0
- package/development/toast/toast.d.ts.map +1 -0
- package/development/toast.d.ts +2 -0
- package/development/toast.d.ts.map +1 -0
- package/development/toast.js +381 -0
- package/development/toggle/toggle/toggle.d.ts +63 -0
- package/development/toggle/toggle/toggle.d.ts.map +1 -0
- package/development/toggle/toggle-option/toggle-option.d.ts +37 -0
- package/development/toggle/toggle-option/toggle-option.d.ts.map +1 -0
- package/development/toggle/toggle-option.d.ts +2 -0
- package/development/toggle/toggle-option.d.ts.map +1 -0
- package/development/toggle/toggle-option.js +222 -0
- package/development/toggle/toggle.d.ts +2 -0
- package/development/toggle/toggle.d.ts.map +1 -0
- package/development/toggle/toggle.js +308 -0
- package/development/toggle-check/toggle-check.d.ts +34 -0
- package/development/toggle-check/toggle-check.d.ts.map +1 -0
- package/development/toggle-check.d.ts +2 -0
- package/development/toggle-check.d.ts.map +1 -0
- package/development/toggle-check.js +251 -0
- package/development/toggle.d.ts +3 -0
- package/development/toggle.d.ts.map +1 -0
- package/development/toggle.js +3 -0
- package/development/train/train/train.d.ts +48 -0
- package/development/train/train/train.d.ts.map +1 -0
- package/development/train/train-blocked-passage/train-blocked-passage.d.ts +15 -0
- package/development/train/train-blocked-passage/train-blocked-passage.d.ts.map +1 -0
- package/development/train/train-blocked-passage.d.ts +2 -0
- package/development/train/train-blocked-passage.d.ts.map +1 -0
- package/development/train/train-blocked-passage.js +101 -0
- package/development/train/train-formation/train-formation.d.ts +40 -0
- package/development/train/train-formation/train-formation.d.ts.map +1 -0
- package/development/train/train-formation.d.ts +2 -0
- package/development/train/train-formation.d.ts.map +1 -0
- package/development/train/train-formation.js +294 -0
- package/development/train/train-wagon/train-wagon.d.ts +49 -0
- package/development/train/train-wagon/train-wagon.d.ts.map +1 -0
- package/development/train/train-wagon.d.ts +2 -0
- package/development/train/train-wagon.d.ts.map +1 -0
- package/development/train/train-wagon.js +328 -0
- package/development/train/train.d.ts +2 -0
- package/development/train/train.d.ts.map +1 -0
- package/development/train/train.js +270 -0
- package/development/train.d.ts +5 -0
- package/development/train.d.ts.map +1 -0
- package/development/train.js +5 -0
- package/development/visual-checkbox/visual-checkbox.d.ts +21 -0
- package/development/visual-checkbox/visual-checkbox.d.ts.map +1 -0
- package/development/visual-checkbox.d.ts +2 -0
- package/development/visual-checkbox.d.ts.map +1 -0
- package/development/visual-checkbox.js +181 -0
- package/dialog/dialog/dialog.d.ts +54 -0
- package/dialog/dialog/dialog.d.ts.map +1 -0
- package/dialog/dialog-actions/dialog-actions.d.ts +18 -0
- package/dialog/dialog-actions/dialog-actions.d.ts.map +1 -0
- package/dialog/dialog-actions.d.ts +2 -0
- package/dialog/dialog-actions.d.ts.map +1 -0
- package/dialog/dialog-actions.js +21 -0
- package/dialog/dialog-content/dialog-content.d.ts +17 -0
- package/dialog/dialog-content/dialog-content.d.ts.map +1 -0
- package/dialog/dialog-content.d.ts +2 -0
- package/dialog/dialog-content.d.ts.map +1 -0
- package/dialog/dialog-content.js +24 -0
- package/dialog/dialog-title/dialog-title.d.ts +43 -0
- package/dialog/dialog-title/dialog-title.d.ts.map +1 -0
- package/dialog/dialog-title.d.ts +2 -0
- package/dialog/dialog-title.d.ts.map +1 -0
- package/dialog/dialog-title.js +86 -0
- package/dialog/dialog.d.ts +2 -0
- package/dialog/dialog.d.ts.map +1 -0
- package/dialog/dialog.js +135 -0
- package/dialog.d.ts +5 -0
- package/dialog.d.ts.map +1 -0
- package/dialog.js +4 -0
- package/divider/divider.d.ts +21 -0
- package/divider/divider.d.ts.map +1 -0
- package/divider.d.ts +2 -0
- package/divider.d.ts.map +1 -0
- package/divider.js +34 -0
- package/expansion-panel/expansion-panel/expansion-panel.d.ts +75 -0
- package/expansion-panel/expansion-panel/expansion-panel.d.ts.map +1 -0
- package/expansion-panel/expansion-panel-content/expansion-panel-content.d.ts +17 -0
- package/expansion-panel/expansion-panel-content/expansion-panel-content.d.ts.map +1 -0
- package/expansion-panel/expansion-panel-content.d.ts +2 -0
- package/expansion-panel/expansion-panel-content.d.ts.map +1 -0
- package/expansion-panel/expansion-panel-content.js +29 -0
- package/expansion-panel/expansion-panel-header/expansion-panel-header.d.ts +38 -0
- package/expansion-panel/expansion-panel-header/expansion-panel-header.d.ts.map +1 -0
- package/expansion-panel/expansion-panel-header.d.ts +2 -0
- package/expansion-panel/expansion-panel-header.d.ts.map +1 -0
- package/expansion-panel/expansion-panel-header.js +75 -0
- package/expansion-panel/expansion-panel.d.ts +2 -0
- package/expansion-panel/expansion-panel.d.ts.map +1 -0
- package/expansion-panel/expansion-panel.js +142 -0
- package/expansion-panel.d.ts +4 -0
- package/expansion-panel.d.ts.map +1 -0
- package/expansion-panel.js +3 -0
- package/file-selector/file-selector.d.ts +74 -0
- package/file-selector/file-selector.d.ts.map +1 -0
- package/file-selector.d.ts +2 -0
- package/file-selector.d.ts.map +1 -0
- package/file-selector.js +218 -0
- package/font-characters-extension.css +18 -0
- package/footer/footer.d.ts +35 -0
- package/footer/footer.d.ts.map +1 -0
- package/footer.d.ts +2 -0
- package/footer.d.ts.map +1 -0
- package/footer.js +46 -0
- package/form-error/form-error.d.ts +21 -0
- package/form-error/form-error.d.ts.map +1 -0
- package/form-error.d.ts +2 -0
- package/form-error.d.ts.map +1 -0
- package/form-error.js +48 -0
- package/form-field/form-field/form-field.d.ts +101 -0
- package/form-field/form-field/form-field.d.ts.map +1 -0
- package/form-field/form-field-clear/form-field-clear.d.ts +24 -0
- package/form-field/form-field-clear/form-field-clear.d.ts.map +1 -0
- package/form-field/form-field-clear.d.ts +2 -0
- package/form-field/form-field-clear.d.ts.map +1 -0
- package/form-field/form-field-clear.js +46 -0
- package/form-field/form-field.d.ts +2 -0
- package/form-field/form-field.d.ts.map +1 -0
- package/form-field/form-field.js +268 -0
- package/form-field.d.ts +3 -0
- package/form-field.d.ts.map +1 -0
- package/form-field.js +2 -0
- package/header/common/header-action-common.d.ts +11 -0
- package/header/common/header-action-common.d.ts.map +1 -0
- package/header/common.d.ts +2 -0
- package/header/common.d.ts.map +1 -0
- package/header/common.js +35 -0
- package/header/header/header.d.ts +59 -0
- package/header/header/header.d.ts.map +1 -0
- package/header/header-button/header-button.d.ts +18 -0
- package/header/header-button/header-button.d.ts.map +1 -0
- package/header/header-button.d.ts +2 -0
- package/header/header-button.d.ts.map +1 -0
- package/header/header-button.js +18 -0
- package/header/header-link/header-link.d.ts +18 -0
- package/header/header-link/header-link.d.ts.map +1 -0
- package/header/header-link.d.ts +2 -0
- package/header/header-link.d.ts.map +1 -0
- package/header/header-link.js +16 -0
- package/header/header.d.ts +2 -0
- package/header/header.d.ts.map +1 -0
- package/header/header.js +120 -0
- package/header.d.ts +5 -0
- package/header.d.ts.map +1 -0
- package/header.js +4 -0
- package/icon/icon-base.d.ts +28 -0
- package/icon/icon-base.d.ts.map +1 -0
- package/icon/icon-name-mixin.d.ts +12 -0
- package/icon/icon-name-mixin.d.ts.map +1 -0
- package/icon/icon-request.d.ts +3 -0
- package/icon/icon-request.d.ts.map +1 -0
- package/icon/icon-validate.d.ts +12 -0
- package/icon/icon-validate.d.ts.map +1 -0
- package/icon/icon.d.ts +24 -0
- package/icon/icon.d.ts.map +1 -0
- package/icon.d.ts +6 -0
- package/icon.d.ts.map +1 -0
- package/icon.js +174 -0
- package/image/image.d.ts +236 -0
- package/image/image.d.ts.map +1 -0
- package/image.d.ts +2 -0
- package/image.d.ts.map +1 -0
- package/image.js +279 -0
- package/index.d.ts +231 -0
- package/index.js +229 -0
- package/journey-header/journey-header.d.ts +30 -0
- package/journey-header/journey-header.d.ts.map +1 -0
- package/journey-header.d.ts +2 -0
- package/journey-header.d.ts.map +1 -0
- package/journey-header.js +76 -0
- package/layout.css +24 -0
- package/lead-container/lead-container.d.ts +20 -0
- package/lead-container/lead-container.d.ts.map +1 -0
- package/lead-container.d.ts +2 -0
- package/lead-container.d.ts.map +1 -0
- package/lead-container.js +32 -0
- package/link/block-link/block-link.d.ts +18 -0
- package/link/block-link/block-link.d.ts.map +1 -0
- package/link/block-link-button/block-link-button.d.ts +18 -0
- package/link/block-link-button/block-link-button.d.ts.map +1 -0
- package/link/block-link-button.d.ts +2 -0
- package/link/block-link-button.d.ts.map +1 -0
- package/link/block-link-button.js +19 -0
- package/link/block-link-static/block-link-static.d.ts +18 -0
- package/link/block-link-static/block-link-static.d.ts.map +1 -0
- package/link/block-link-static.d.ts +2 -0
- package/link/block-link-static.d.ts.map +1 -0
- package/link/block-link-static.js +19 -0
- package/link/block-link.d.ts +2 -0
- package/link/block-link.d.ts.map +1 -0
- package/link/block-link.js +19 -0
- package/link/common/block-link-common.d.ts +11 -0
- package/link/common/block-link-common.d.ts.map +1 -0
- package/link/common/inline-link-common.d.ts +8 -0
- package/link/common/inline-link-common.d.ts.map +1 -0
- package/link/common/link-common.d.ts +9 -0
- package/link/common/link-common.d.ts.map +1 -0
- package/link/common.d.ts +4 -0
- package/link/common.d.ts.map +1 -0
- package/link/common.js +62 -0
- package/link/link/link.d.ts +17 -0
- package/link/link/link.d.ts.map +1 -0
- package/link/link-button/link-button.d.ts +17 -0
- package/link/link-button/link-button.d.ts.map +1 -0
- package/link/link-button.d.ts +2 -0
- package/link/link-button.d.ts.map +1 -0
- package/link/link-button.js +19 -0
- package/link/link-static/link-static.d.ts +17 -0
- package/link/link-static/link-static.d.ts.map +1 -0
- package/link/link-static.d.ts +2 -0
- package/link/link-static.d.ts.map +1 -0
- package/link/link-static.js +19 -0
- package/link/link.d.ts +2 -0
- package/link/link.d.ts.map +1 -0
- package/link/link.js +19 -0
- package/link-list/link-list.d.ts +40 -0
- package/link-list/link-list.d.ts.map +1 -0
- package/link-list.d.ts +2 -0
- package/link-list.d.ts.map +1 -0
- package/link-list.js +65 -0
- package/link.d.ts +8 -0
- package/link.d.ts.map +1 -0
- package/link.js +7 -0
- package/lists.css +149 -0
- package/loading-indicator/loading-indicator.d.ts +21 -0
- package/loading-indicator/loading-indicator.d.ts.map +1 -0
- package/loading-indicator.d.ts +2 -0
- package/loading-indicator.d.ts.map +1 -0
- package/loading-indicator.js +51 -0
- package/logo/logo.d.ts +24 -0
- package/logo/logo.d.ts.map +1 -0
- package/logo.d.ts +2 -0
- package/logo.d.ts.map +1 -0
- package/logo.js +47 -0
- package/map-container/map-container.d.ts +43 -0
- package/map-container/map-container.d.ts.map +1 -0
- package/map-container.d.ts +2 -0
- package/map-container.d.ts.map +1 -0
- package/map-container.js +91 -0
- package/menu/common/menu-action-common.d.ts +11 -0
- package/menu/common/menu-action-common.d.ts.map +1 -0
- package/menu/common.d.ts +2 -0
- package/menu/common.d.ts.map +1 -0
- package/menu/common.js +34 -0
- package/menu/menu/menu.d.ts +76 -0
- package/menu/menu/menu.d.ts.map +1 -0
- package/menu/menu-button/menu-button.d.ts +20 -0
- package/menu/menu-button/menu-button.d.ts.map +1 -0
- package/menu/menu-button.d.ts +2 -0
- package/menu/menu-button.d.ts.map +1 -0
- package/menu/menu-button.js +19 -0
- package/menu/menu-link/menu-link.d.ts +20 -0
- package/menu/menu-link/menu-link.d.ts.map +1 -0
- package/menu/menu-link.d.ts +2 -0
- package/menu/menu-link.d.ts.map +1 -0
- package/menu/menu-link.js +16 -0
- package/menu/menu.d.ts +2 -0
- package/menu/menu.d.ts.map +1 -0
- package/menu/menu.js +194 -0
- package/menu.d.ts +5 -0
- package/menu.d.ts.map +1 -0
- package/menu.js +4 -0
- package/message/message.d.ts +26 -0
- package/message/message.d.ts.map +1 -0
- package/message.d.ts +2 -0
- package/message.d.ts.map +1 -0
- package/message.js +40 -0
- package/navigation/common/navigation-action-common.d.ts +14 -0
- package/navigation/common/navigation-action-common.d.ts.map +1 -0
- package/navigation/common.d.ts +2 -0
- package/navigation/common.d.ts.map +1 -0
- package/navigation/common.js +51 -0
- package/navigation/navigation/navigation.d.ts +82 -0
- package/navigation/navigation/navigation.d.ts.map +1 -0
- package/navigation/navigation-button/navigation-button.d.ts +17 -0
- package/navigation/navigation-button/navigation-button.d.ts.map +1 -0
- package/navigation/navigation-button.d.ts +2 -0
- package/navigation/navigation-button.d.ts.map +1 -0
- package/navigation/navigation-button.js +18 -0
- package/navigation/navigation-link/navigation-link.d.ts +17 -0
- package/navigation/navigation-link/navigation-link.d.ts.map +1 -0
- package/navigation/navigation-link.d.ts +2 -0
- package/navigation/navigation-link.d.ts.map +1 -0
- package/navigation/navigation-link.js +18 -0
- package/navigation/navigation-list/navigation-list.d.ts +30 -0
- package/navigation/navigation-list/navigation-list.d.ts.map +1 -0
- package/navigation/navigation-list.d.ts +2 -0
- package/navigation/navigation-list.d.ts.map +1 -0
- package/navigation/navigation-list.js +42 -0
- package/navigation/navigation-marker/navigation-marker.d.ts +38 -0
- package/navigation/navigation-marker/navigation-marker.d.ts.map +1 -0
- package/navigation/navigation-marker.d.ts +2 -0
- package/navigation/navigation-marker.d.ts.map +1 -0
- package/navigation/navigation-marker.js +77 -0
- package/navigation/navigation-section/navigation-section.d.ts +76 -0
- package/navigation/navigation-section/navigation-section.d.ts.map +1 -0
- package/navigation/navigation-section.d.ts +2 -0
- package/navigation/navigation-section.d.ts.map +1 -0
- package/navigation/navigation-section.js +205 -0
- package/navigation/navigation.d.ts +2 -0
- package/navigation/navigation.d.ts.map +1 -0
- package/navigation/navigation.js +210 -0
- package/navigation.d.ts +8 -0
- package/navigation.d.ts.map +1 -0
- package/navigation.js +7 -0
- package/normalize.css +189 -0
- package/notification/notification.d.ts +82 -0
- package/notification/notification.d.ts.map +1 -0
- package/notification.d.ts +2 -0
- package/notification.d.ts.map +1 -0
- package/notification.js +158 -0
- package/option/optgroup/optgroup.d.ts +33 -0
- package/option/optgroup/optgroup.d.ts.map +1 -0
- package/option/optgroup.d.ts +2 -0
- package/option/optgroup.d.ts.map +1 -0
- package/option/optgroup.js +103 -0
- package/option/option/option.d.ts +91 -0
- package/option/option/option.d.ts.map +1 -0
- package/option/option.d.ts +2 -0
- package/option/option.d.ts.map +1 -0
- package/option/option.js +230 -0
- package/option.d.ts +3 -0
- package/option.d.ts.map +1 -0
- package/option.js +2 -0
- package/overlay/overlay-base-element.d.ts +43 -0
- package/overlay/overlay-base-element.d.ts.map +1 -0
- package/overlay/overlay.d.ts +52 -0
- package/overlay/overlay.d.ts.map +1 -0
- package/overlay.d.ts +3 -0
- package/overlay.d.ts.map +1 -0
- package/overlay.js +210 -0
- package/package.json +852 -2
- package/popover/popover/popover.d.ts +85 -0
- package/popover/popover/popover.d.ts.map +1 -0
- package/popover/popover-trigger/popover-trigger.d.ts +21 -0
- package/popover/popover-trigger/popover-trigger.d.ts.map +1 -0
- package/popover/popover-trigger.d.ts +2 -0
- package/popover/popover-trigger.d.ts.map +1 -0
- package/popover/popover-trigger.js +35 -0
- package/popover/popover.d.ts +2 -0
- package/popover/popover.d.ts.map +1 -0
- package/popover/popover.js +241 -0
- package/popover.d.ts +3 -0
- package/popover.d.ts.map +1 -0
- package/popover.js +2 -0
- package/radio-button/radio-button/radio-button.d.ts +102 -0
- package/radio-button/radio-button/radio-button.d.ts.map +1 -0
- package/radio-button/radio-button-group/radio-button-group.d.ts +91 -0
- package/radio-button/radio-button-group/radio-button-group.d.ts.map +1 -0
- package/radio-button/radio-button-group.d.ts +2 -0
- package/radio-button/radio-button-group.d.ts.map +1 -0
- package/radio-button/radio-button-group.js +161 -0
- package/radio-button/radio-button.d.ts +2 -0
- package/radio-button/radio-button.d.ts.map +1 -0
- package/radio-button/radio-button.js +167 -0
- package/radio-button.d.ts +3 -0
- package/radio-button.d.ts.map +1 -0
- package/radio-button.js +2 -0
- package/screen-reader-only/screen-reader-only.d.ts +17 -0
- package/screen-reader-only/screen-reader-only.d.ts.map +1 -0
- package/screen-reader-only.d.ts +2 -0
- package/screen-reader-only.d.ts.map +1 -0
- package/screen-reader-only.js +20 -0
- package/select/select.d.ts +140 -0
- package/select/select.d.ts.map +1 -0
- package/select.d.ts +2 -0
- package/select.d.ts.map +1 -0
- package/select.js +402 -0
- package/selection-panel/selection-panel.d.ts +63 -0
- package/selection-panel/selection-panel.d.ts.map +1 -0
- package/selection-panel.d.ts +2 -0
- package/selection-panel.d.ts.map +1 -0
- package/selection-panel.js +138 -0
- package/signet/signet.d.ts +20 -0
- package/signet/signet.d.ts.map +1 -0
- package/signet.d.ts +2 -0
- package/signet.d.ts.map +1 -0
- package/signet.js +41 -0
- package/skiplink-list/skiplink-list.d.ts +32 -0
- package/skiplink-list/skiplink-list.d.ts.map +1 -0
- package/skiplink-list.d.ts +2 -0
- package/skiplink-list.d.ts.map +1 -0
- package/skiplink-list.js +51 -0
- package/slider/slider.d.ts +70 -0
- package/slider/slider.d.ts.map +1 -0
- package/slider.d.ts +2 -0
- package/slider.d.ts.map +1 -0
- package/slider.js +152 -0
- package/standard-theme.css +1741 -0
- package/status/status.d.ts +32 -0
- package/status/status.d.ts.map +1 -0
- package/status.d.ts +2 -0
- package/status.d.ts.map +1 -0
- package/status.js +59 -0
- package/stepper/step/step.d.ts +66 -0
- package/stepper/step/step.d.ts.map +1 -0
- package/stepper/step-label/step-label.d.ts +47 -0
- package/stepper/step-label/step-label.d.ts.map +1 -0
- package/stepper/step-label.d.ts +2 -0
- package/stepper/step-label.d.ts.map +1 -0
- package/stepper/step-label.js +83 -0
- package/stepper/step.d.ts +2 -0
- package/stepper/step.d.ts.map +1 -0
- package/stepper/step.js +117 -0
- package/stepper/stepper/stepper.d.ts +59 -0
- package/stepper/stepper/stepper.d.ts.map +1 -0
- package/stepper/stepper.d.ts +2 -0
- package/stepper/stepper.d.ts.map +1 -0
- package/stepper/stepper.js +191 -0
- package/stepper.d.ts +4 -0
- package/stepper.d.ts.map +1 -0
- package/stepper.js +3 -0
- package/tabs/tab-group/tab-group.d.ts +94 -0
- package/tabs/tab-group/tab-group.d.ts.map +1 -0
- package/tabs/tab-group.d.ts +2 -0
- package/tabs/tab-group.d.ts.map +1 -0
- package/tabs/tab-group.js +196 -0
- package/tabs/tab-title/tab-title.d.ts +32 -0
- package/tabs/tab-title/tab-title.d.ts.map +1 -0
- package/tabs/tab-title.d.ts +2 -0
- package/tabs/tab-title.d.ts.map +1 -0
- package/tabs/tab-title.js +51 -0
- package/tabs.d.ts +3 -0
- package/tabs.d.ts.map +1 -0
- package/tabs.js +2 -0
- package/tag/tag/tag.d.ts +53 -0
- package/tag/tag/tag.d.ts.map +1 -0
- package/tag/tag-group/tag-group.d.ts +46 -0
- package/tag/tag-group/tag-group.d.ts.map +1 -0
- package/tag/tag-group.d.ts +2 -0
- package/tag/tag-group.d.ts.map +1 -0
- package/tag/tag-group.js +82 -0
- package/tag/tag.d.ts +2 -0
- package/tag/tag.d.ts.map +1 -0
- package/tag/tag.js +82 -0
- package/tag.d.ts +3 -0
- package/tag.d.ts.map +1 -0
- package/tag.js +2 -0
- package/teaser/teaser.d.ts +31 -0
- package/teaser/teaser.d.ts.map +1 -0
- package/teaser-hero/teaser-hero.d.ts +26 -0
- package/teaser-hero/teaser-hero.d.ts.map +1 -0
- package/teaser-hero.d.ts +2 -0
- package/teaser-hero.d.ts.map +1 -0
- package/teaser-hero.js +51 -0
- package/teaser-paid/teaser-paid.d.ts +20 -0
- package/teaser-paid/teaser-paid.d.ts.map +1 -0
- package/teaser-paid.d.ts +2 -0
- package/teaser-paid.d.ts.map +1 -0
- package/teaser-paid.js +28 -0
- package/teaser.d.ts +2 -0
- package/teaser.d.ts.map +1 -0
- package/teaser.js +57 -0
- package/time-input/time-input.d.ts +68 -0
- package/time-input/time-input.d.ts.map +1 -0
- package/time-input.d.ts +2 -0
- package/time-input.d.ts.map +1 -0
- package/time-input.js +176 -0
- package/timetable-occupancy/timetable-occupancy.d.ts +23 -0
- package/timetable-occupancy/timetable-occupancy.d.ts.map +1 -0
- package/timetable-occupancy-icon/timetable-occupancy-icon.d.ts +27 -0
- package/timetable-occupancy-icon/timetable-occupancy-icon.d.ts.map +1 -0
- package/timetable-occupancy-icon.d.ts +2 -0
- package/timetable-occupancy-icon.d.ts.map +1 -0
- package/timetable-occupancy-icon.js +53 -0
- package/timetable-occupancy.d.ts +2 -0
- package/timetable-occupancy.d.ts.map +1 -0
- package/timetable-occupancy.js +58 -0
- package/title/title-base.d.ts +26 -0
- package/title/title-base.d.ts.map +1 -0
- package/title/title.d.ts +16 -0
- package/title/title.d.ts.map +1 -0
- package/title.d.ts +3 -0
- package/title.d.ts.map +1 -0
- package/title.js +58 -0
- package/toast/toast.d.ts +79 -0
- package/toast/toast.d.ts.map +1 -0
- package/toast.d.ts +2 -0
- package/toast.d.ts.map +1 -0
- package/toast.js +147 -0
- package/toggle/toggle/toggle.d.ts +63 -0
- package/toggle/toggle/toggle.d.ts.map +1 -0
- package/toggle/toggle-option/toggle-option.d.ts +37 -0
- package/toggle/toggle-option/toggle-option.d.ts.map +1 -0
- package/toggle/toggle-option.d.ts +2 -0
- package/toggle/toggle-option.d.ts.map +1 -0
- package/toggle/toggle-option.js +89 -0
- package/toggle/toggle.d.ts +2 -0
- package/toggle/toggle.d.ts.map +1 -0
- package/toggle/toggle.js +129 -0
- package/toggle-check/toggle-check.d.ts +34 -0
- package/toggle-check/toggle-check.d.ts.map +1 -0
- package/toggle-check.d.ts +2 -0
- package/toggle-check.d.ts.map +1 -0
- package/toggle-check.js +56 -0
- package/toggle.d.ts +3 -0
- package/toggle.d.ts.map +1 -0
- package/toggle.js +2 -0
- package/train/train/train.d.ts +48 -0
- package/train/train/train.d.ts.map +1 -0
- package/train/train-blocked-passage/train-blocked-passage.d.ts +15 -0
- package/train/train-blocked-passage/train-blocked-passage.d.ts.map +1 -0
- package/train/train-blocked-passage.d.ts +2 -0
- package/train/train-blocked-passage.d.ts.map +1 -0
- package/train/train-blocked-passage.js +26 -0
- package/train/train-formation/train-formation.d.ts +40 -0
- package/train/train-formation/train-formation.d.ts.map +1 -0
- package/train/train-formation.d.ts +2 -0
- package/train/train-formation.d.ts.map +1 -0
- package/train/train-formation.js +104 -0
- package/train/train-wagon/train-wagon.d.ts +49 -0
- package/train/train-wagon/train-wagon.d.ts.map +1 -0
- package/train/train-wagon.d.ts +2 -0
- package/train/train-wagon.d.ts.map +1 -0
- package/train/train-wagon.js +148 -0
- package/train/train.d.ts +2 -0
- package/train/train.d.ts.map +1 -0
- package/train/train.js +93 -0
- package/train.d.ts +5 -0
- package/train.d.ts.map +1 -0
- package/train.js +4 -0
- package/typography.css +79 -0
- package/visual-checkbox/visual-checkbox.d.ts +21 -0
- package/visual-checkbox/visual-checkbox.d.ts.map +1 -0
- package/visual-checkbox.d.ts +2 -0
- package/visual-checkbox.d.ts.map +1 -0
- package/visual-checkbox.js +49 -0
|
@@ -0,0 +1,1319 @@
|
|
|
1
|
+
import { css, LitElement, isServer, html, nothing } from "lit";
|
|
2
|
+
import { property, state, customElement } from "lit/decorators.js";
|
|
3
|
+
import { classMap } from "lit/directives/class-map.js";
|
|
4
|
+
import { sbbInputModalityDetector, isArrowKeyOrPageKeysPressed } from "./core/a11y.js";
|
|
5
|
+
import { SbbConnectedAbortController, SbbLanguageController } from "./core/controllers.js";
|
|
6
|
+
import { defaultDateAdapter, YEARS_PER_PAGE, DAYS_PER_ROW, MONTHS_PER_ROW, YEARS_PER_ROW } from "./core/datetime.js";
|
|
7
|
+
import { isBreakpoint } from "./core/dom.js";
|
|
8
|
+
import { EventEmitter } from "./core/eventing.js";
|
|
9
|
+
import { i18nPreviousMonth, i18nNextMonth, i18nYearMonthSelection, i18nPreviousYear, i18nNextYear, i18nCalendarDateSelection, i18nPreviousYearRange, i18nNextYearRange } from "./core/i18n.js";
|
|
10
|
+
import "./button/secondary-button.js";
|
|
11
|
+
import "./icon.js";
|
|
12
|
+
import "./screen-reader-only.js";
|
|
13
|
+
const style = css`/**
|
|
14
|
+
* Better font rendering (on OS X)
|
|
15
|
+
* http://maximilianhoffmann.com/posts/better-font-rendering-on-osx
|
|
16
|
+
*
|
|
17
|
+
* Usage:
|
|
18
|
+
*
|
|
19
|
+
* .var_dark_on_light {
|
|
20
|
+
* @include font-smoothing;
|
|
21
|
+
* }
|
|
22
|
+
* .var_light_on_dark {
|
|
23
|
+
* @include font-smoothing-reset;
|
|
24
|
+
* }
|
|
25
|
+
*/
|
|
26
|
+
/** This mixin can be used to avoid spacing problems by inserting an invisible space as pseudo element. */
|
|
27
|
+
*,
|
|
28
|
+
::before,
|
|
29
|
+
::after {
|
|
30
|
+
box-sizing: border-box;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
:host {
|
|
34
|
+
--sbb-calendar-cell-size: 2.5rem;
|
|
35
|
+
--sbb-calendar-hover-shift: 0.0625rem;
|
|
36
|
+
--sbb-calendar-wide-cell-size: 4.375rem;
|
|
37
|
+
--sbb-calendar-cell-disabled-color: var(--sbb-color-granite);
|
|
38
|
+
--sbb-calendar-header-color: var(--sbb-color-granite);
|
|
39
|
+
--sbb-calendar-cell-background-color: transparent;
|
|
40
|
+
--sbb-calendar-cell-padding: 0.125rem;
|
|
41
|
+
--sbb-calendar-cell-color: var(--sbb-color-charcoal);
|
|
42
|
+
--sbb-calendar-cell-selected-color: var(--sbb-color-white);
|
|
43
|
+
--sbb-calendar-cell-selected-background-color: var(--sbb-color-charcoal);
|
|
44
|
+
--sbb-calendar-cell-disabled-height: 0.09375rem;
|
|
45
|
+
--sbb-calendar-cell-disabled-width: 1.59375rem;
|
|
46
|
+
--sbb-calendar-cell-transition-duration: var(
|
|
47
|
+
--sbb-disable-animation-zero-time,
|
|
48
|
+
var(--sbb-animation-duration-2x)
|
|
49
|
+
);
|
|
50
|
+
--sbb-calendar-cell-transition-easing-function: var(--sbb-animation-easing);
|
|
51
|
+
--sbb-calendar-tables-gap: var(--sbb-spacing-fixed-10x);
|
|
52
|
+
--sbb-calendar-table-animation-shift: 0.00625rem;
|
|
53
|
+
--sbb-calendar-table-animation-duration: 0.1ms;
|
|
54
|
+
--sbb-calendar-table-column-spaces: 12;
|
|
55
|
+
--sbb-calendar-control-view-change-height: 2.75rem;
|
|
56
|
+
--sbb-calendar-control-view-change-color: var(--sbb-color-charcoal);
|
|
57
|
+
--sbb-calendar-control-view-change-background: var(--sbb-color-white);
|
|
58
|
+
display: block;
|
|
59
|
+
width: max-content;
|
|
60
|
+
}
|
|
61
|
+
@media (min-width: calc(22.5rem)) {
|
|
62
|
+
:host {
|
|
63
|
+
--sbb-calendar-cell-size: 2.75rem;
|
|
64
|
+
--sbb-calendar-wide-cell-size: 4.8125rem;
|
|
65
|
+
--sbb-calendar-control-view-change-height: 3rem;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.sbb-calendar__wrapper {
|
|
70
|
+
width: 100%;
|
|
71
|
+
display: block;
|
|
72
|
+
transition-duration: var(--sbb-calendar-cell-transition-duration);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.sbb-calendar__controls {
|
|
76
|
+
width: 100%;
|
|
77
|
+
display: inline-flex;
|
|
78
|
+
align-items: center;
|
|
79
|
+
gap: var(--sbb-spacing-fixed-2x);
|
|
80
|
+
margin-block-end: var(--sbb-spacing-fixed-4x);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.sbb-calendar__controls-month {
|
|
84
|
+
width: 100%;
|
|
85
|
+
display: flex;
|
|
86
|
+
gap: var(--sbb-calendar-tables-gap);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
#sbb-calendar__controls-previous,
|
|
90
|
+
#sbb-calendar__controls-next {
|
|
91
|
+
-webkit-tap-highlight-color: transparent;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.sbb-calendar__controls-change-date {
|
|
95
|
+
-webkit-appearance: none;
|
|
96
|
+
-moz-appearance: none;
|
|
97
|
+
box-sizing: border-box;
|
|
98
|
+
margin: 0;
|
|
99
|
+
outline: none;
|
|
100
|
+
border: none;
|
|
101
|
+
border-radius: 0;
|
|
102
|
+
padding: 0;
|
|
103
|
+
background: none;
|
|
104
|
+
-webkit-tap-highlight-color: transparent;
|
|
105
|
+
color: inherit;
|
|
106
|
+
--sbb-text-font-size: var(--sbb-font-size-text-s);
|
|
107
|
+
font-family: var(--sbb-typo-font-family);
|
|
108
|
+
font-weight: normal;
|
|
109
|
+
line-height: var(--sbb-typo-line-height-body-text);
|
|
110
|
+
letter-spacing: var(--sbb-typo-letter-spacing-body-text);
|
|
111
|
+
font-size: var(--sbb-text-font-size);
|
|
112
|
+
display: flex;
|
|
113
|
+
align-items: center;
|
|
114
|
+
margin: auto;
|
|
115
|
+
height: var(--sbb-calendar-control-view-change-height);
|
|
116
|
+
text-transform: capitalize;
|
|
117
|
+
cursor: pointer;
|
|
118
|
+
padding-inline: var(--sbb-spacing-fixed-5x) var(--sbb-spacing-fixed-2x);
|
|
119
|
+
border-radius: var(--sbb-border-radius-infinity);
|
|
120
|
+
background-color: var(--sbb-calendar-control-view-change-background);
|
|
121
|
+
color: var(--sbb-calendar-control-view-change-color);
|
|
122
|
+
transition-duration: var(--sbb-calendar-cell-transition-duration);
|
|
123
|
+
transition-timing-function: var(--sbb-calendar-cell-transition-easing-function);
|
|
124
|
+
transition-property: background-color, padding-block-end;
|
|
125
|
+
}
|
|
126
|
+
.sbb-calendar__controls-change-date:disabled {
|
|
127
|
+
--sbb-calendar-control-view-change-background: var(--sbb-color-milk);
|
|
128
|
+
--sbb-calendar-control-view-change-color: var(--sbb-calendar-cell-disabled-color);
|
|
129
|
+
cursor: unset;
|
|
130
|
+
}
|
|
131
|
+
.sbb-calendar__controls-change-date:focus-visible:not([data-focus-origin=mouse], [data-focus-origin=touch]) {
|
|
132
|
+
outline-offset: var(--sbb-focus-outline-offset);
|
|
133
|
+
outline: var(--sbb-focus-outline-color) solid var(--sbb-focus-outline-width);
|
|
134
|
+
outline-offset: var(--sbb-spacing-fixed-1x);
|
|
135
|
+
}
|
|
136
|
+
@media (any-hover: hover) {
|
|
137
|
+
.sbb-calendar__controls-change-date:not(:active, :disabled):hover {
|
|
138
|
+
padding-block-end: var(--sbb-calendar-hover-shift);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
.sbb-calendar__controls-change-date:not(:disabled):active {
|
|
142
|
+
--sbb-calendar-control-view-change-background: var(--sbb-color-milk);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
.sbb-calendar__table-month-view,
|
|
146
|
+
.sbb-calendar__table-year-view {
|
|
147
|
+
--sbb-calendar-table-column-spaces: 6;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
.sbb-calendar__table-container {
|
|
151
|
+
display: flex;
|
|
152
|
+
gap: var(--sbb-calendar-tables-gap);
|
|
153
|
+
--sbb-calendar-min-width: calc(7 * var(--sbb-calendar-cell-size));
|
|
154
|
+
--sbb-calendar-overflow: calc(100% - var(--sbb-calendar-min-width));
|
|
155
|
+
--sbb-calendar-start-offset: min(
|
|
156
|
+
0px,
|
|
157
|
+
-1 * (var(--sbb-calendar-overflow) / var(--sbb-calendar-table-column-spaces))
|
|
158
|
+
);
|
|
159
|
+
--sbb-calendar-margin: var(--sbb-calendar-start-offset);
|
|
160
|
+
margin-inline: var(--sbb-calendar-margin);
|
|
161
|
+
}
|
|
162
|
+
:host([data-wide]) .sbb-calendar__table-container {
|
|
163
|
+
--sbb-calendar-min-width: calc(
|
|
164
|
+
2 * 7 * var(--sbb-calendar-cell-size) + var(--sbb-calendar-tables-gap)
|
|
165
|
+
);
|
|
166
|
+
--sbb-calendar-margin: calc(0.5 * var(--sbb-calendar-start-offset));
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
.sbb-calendar__table {
|
|
170
|
+
width: 100%;
|
|
171
|
+
border-collapse: collapse;
|
|
172
|
+
height: max-content;
|
|
173
|
+
animation-name: show;
|
|
174
|
+
animation-duration: var(--sbb-calendar-table-animation-duration);
|
|
175
|
+
}
|
|
176
|
+
.sbb-calendar__table.sbb-calendar__table-hide {
|
|
177
|
+
--sbb-calendar-cell-transition-duration: 0ms;
|
|
178
|
+
animation-name: hide;
|
|
179
|
+
animation-duration: var(--sbb-calendar-table-animation-duration);
|
|
180
|
+
}
|
|
181
|
+
:host(:not([data-wide])) .sbb-calendar__table {
|
|
182
|
+
min-width: 100%;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
.sbb-calendar__table-header {
|
|
186
|
+
--sbb-text-font-size: var(--sbb-font-size-text-xs);
|
|
187
|
+
font-family: var(--sbb-typo-font-family);
|
|
188
|
+
font-weight: normal;
|
|
189
|
+
line-height: var(--sbb-typo-line-height-body-text);
|
|
190
|
+
letter-spacing: var(--sbb-typo-letter-spacing-body-text);
|
|
191
|
+
font-size: var(--sbb-text-font-size);
|
|
192
|
+
color: var(--sbb-calendar-header-color);
|
|
193
|
+
width: var(--sbb-calendar-cell-size);
|
|
194
|
+
padding: 0;
|
|
195
|
+
padding-block-end: var(--sbb-spacing-fixed-4x);
|
|
196
|
+
text-align: center;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
.sbb-calendar__table-data {
|
|
200
|
+
position: relative;
|
|
201
|
+
padding: 0;
|
|
202
|
+
text-align: center;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
.sbb-calendar__cell {
|
|
206
|
+
-webkit-appearance: none;
|
|
207
|
+
-moz-appearance: none;
|
|
208
|
+
box-sizing: border-box;
|
|
209
|
+
margin: 0;
|
|
210
|
+
outline: none;
|
|
211
|
+
border: none;
|
|
212
|
+
border-radius: 0;
|
|
213
|
+
padding: 0;
|
|
214
|
+
background: none;
|
|
215
|
+
-webkit-tap-highlight-color: transparent;
|
|
216
|
+
color: inherit;
|
|
217
|
+
--sbb-text-font-size: var(--sbb-font-size-text-s);
|
|
218
|
+
font-family: var(--sbb-typo-font-family);
|
|
219
|
+
font-weight: normal;
|
|
220
|
+
line-height: var(--sbb-typo-line-height-body-text);
|
|
221
|
+
letter-spacing: var(--sbb-typo-letter-spacing-body-text);
|
|
222
|
+
font-size: var(--sbb-text-font-size);
|
|
223
|
+
height: var(--sbb-calendar-cell-size);
|
|
224
|
+
color: var(--sbb-calendar-cell-color);
|
|
225
|
+
cursor: pointer;
|
|
226
|
+
position: relative;
|
|
227
|
+
z-index: 0;
|
|
228
|
+
}
|
|
229
|
+
.sbb-calendar__cell::before {
|
|
230
|
+
content: "";
|
|
231
|
+
position: absolute;
|
|
232
|
+
inset: var(--sbb-calendar-cell-padding);
|
|
233
|
+
background-color: var(--sbb-calendar-cell-background-color);
|
|
234
|
+
border-radius: 50%;
|
|
235
|
+
z-index: -1;
|
|
236
|
+
transition-duration: var(--sbb-calendar-cell-transition-duration);
|
|
237
|
+
transition-timing-function: var(--sbb-calendar-cell-transition-easing-function);
|
|
238
|
+
transition-property: background-color;
|
|
239
|
+
}
|
|
240
|
+
@media (any-hover: hover) {
|
|
241
|
+
.sbb-calendar__cell:not(.sbb-calendar__selected, :active, :disabled):hover {
|
|
242
|
+
--sbb-calendar-cell-background-color: var(--sbb-color-milk);
|
|
243
|
+
padding-block-end: var(--sbb-calendar-hover-shift);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
@media (any-hover: hover) and (forced-colors: active) {
|
|
247
|
+
.sbb-calendar__cell:not(.sbb-calendar__selected, :active, :disabled):hover::before {
|
|
248
|
+
outline-offset: var(--sbb-focus-outline-offset);
|
|
249
|
+
outline: var(--sbb-focus-outline-color) solid var(--sbb-focus-outline-width);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
.sbb-calendar__cell:disabled {
|
|
253
|
+
--sbb-calendar-cell-color: var(--sbb-calendar-cell-disabled-color);
|
|
254
|
+
cursor: unset;
|
|
255
|
+
}
|
|
256
|
+
.sbb-calendar__cell:focus-visible::before {
|
|
257
|
+
outline-offset: var(--sbb-focus-outline-offset);
|
|
258
|
+
outline: var(--sbb-focus-outline-color) solid var(--sbb-focus-outline-width);
|
|
259
|
+
}
|
|
260
|
+
.sbb-calendar__cell:not(.sbb-calendar__selected, :disabled):active {
|
|
261
|
+
--sbb-calendar-cell-background-color: var(--sbb-color-cloud);
|
|
262
|
+
}
|
|
263
|
+
@media (forced-colors: active) {
|
|
264
|
+
.sbb-calendar__cell:not(.sbb-calendar__selected, :disabled):active::before {
|
|
265
|
+
outline-offset: var(--sbb-focus-outline-offset);
|
|
266
|
+
outline: var(--sbb-focus-outline-color) solid var(--sbb-focus-outline-width);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
.sbb-calendar__day {
|
|
271
|
+
border-radius: 50%;
|
|
272
|
+
width: var(--sbb-calendar-cell-size);
|
|
273
|
+
}
|
|
274
|
+
.sbb-calendar__day::before {
|
|
275
|
+
border-radius: 50%;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
.sbb-calendar__pill {
|
|
279
|
+
width: var(--sbb-calendar-wide-cell-size);
|
|
280
|
+
border-radius: var(--sbb-border-radius-infinity);
|
|
281
|
+
}
|
|
282
|
+
.sbb-calendar__pill::before {
|
|
283
|
+
border-radius: var(--sbb-border-radius-infinity);
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
.sbb-calendar__crossed-out::after {
|
|
287
|
+
content: "";
|
|
288
|
+
height: var(--sbb-calendar-cell-disabled-height);
|
|
289
|
+
width: var(--sbb-calendar-cell-disabled-width);
|
|
290
|
+
position: absolute;
|
|
291
|
+
background-color: var(--sbb-calendar-cell-disabled-color);
|
|
292
|
+
top: 50%;
|
|
293
|
+
left: 50%;
|
|
294
|
+
transform: translate(-50%, -50%) rotate(-45deg);
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
.sbb-calendar__cell-current {
|
|
298
|
+
--sbb-text-font-size: var(--sbb-font-size-text-s);
|
|
299
|
+
font-family: var(--sbb-typo-font-family);
|
|
300
|
+
font-weight: normal;
|
|
301
|
+
line-height: var(--sbb-typo-line-height-body-text);
|
|
302
|
+
letter-spacing: var(--sbb-typo-letter-spacing-body-text);
|
|
303
|
+
font-size: var(--sbb-text-font-size);
|
|
304
|
+
font-weight: bold;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
.sbb-calendar__selected {
|
|
308
|
+
--sbb-calendar-cell-color: var(--sbb-calendar-cell-selected-color);
|
|
309
|
+
--sbb-calendar-cell-background-color: var(--sbb-calendar-cell-selected-background-color);
|
|
310
|
+
}
|
|
311
|
+
@media (forced-colors: active) {
|
|
312
|
+
.sbb-calendar__selected {
|
|
313
|
+
--sbb-calendar-cell-background-color: ButtonText !important;
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
@keyframes show {
|
|
318
|
+
from {
|
|
319
|
+
opacity: 0;
|
|
320
|
+
transform: translateY(var(--sbb-calendar-table-animation-shift));
|
|
321
|
+
}
|
|
322
|
+
to {
|
|
323
|
+
opacity: 1;
|
|
324
|
+
transform: translateY(0%);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
@keyframes hide {
|
|
328
|
+
from {
|
|
329
|
+
opacity: 1;
|
|
330
|
+
transform: translateY(0%);
|
|
331
|
+
}
|
|
332
|
+
to {
|
|
333
|
+
opacity: 0;
|
|
334
|
+
transform: translateY(var(--sbb-calendar-table-animation-shift));
|
|
335
|
+
}
|
|
336
|
+
}`;
|
|
337
|
+
var __defProp = Object.defineProperty;
|
|
338
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
339
|
+
var __decorateClass = (decorators, target, key, kind) => {
|
|
340
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
|
|
341
|
+
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
342
|
+
if (decorator = decorators[i])
|
|
343
|
+
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
344
|
+
if (kind && result)
|
|
345
|
+
__defProp(target, key, result);
|
|
346
|
+
return result;
|
|
347
|
+
};
|
|
348
|
+
let SbbCalendarElement = class extends LitElement {
|
|
349
|
+
constructor() {
|
|
350
|
+
super();
|
|
351
|
+
this.wide = false;
|
|
352
|
+
this._now = null;
|
|
353
|
+
this._dateAdapter = defaultDateAdapter;
|
|
354
|
+
this._dateSelected = new EventEmitter(
|
|
355
|
+
this,
|
|
356
|
+
SbbCalendarElement.events.dateSelected
|
|
357
|
+
);
|
|
358
|
+
this._activeDate = this.now;
|
|
359
|
+
this._calendarView = "day";
|
|
360
|
+
this._nextCalendarView = "day";
|
|
361
|
+
this._weeks = [];
|
|
362
|
+
this._monthNames = this._dateAdapter.getMonthNames("long");
|
|
363
|
+
this._resetFocus = false;
|
|
364
|
+
this._initialized = false;
|
|
365
|
+
this._abort = new SbbConnectedAbortController(this);
|
|
366
|
+
this._language = new SbbLanguageController(this).withHandler(() => {
|
|
367
|
+
this._monthNames = this._dateAdapter.getMonthNames("long");
|
|
368
|
+
this._createMonthRows();
|
|
369
|
+
});
|
|
370
|
+
this._createMonthRows();
|
|
371
|
+
this._setWeekdays();
|
|
372
|
+
}
|
|
373
|
+
set min(value) {
|
|
374
|
+
this._min = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
|
|
375
|
+
}
|
|
376
|
+
get min() {
|
|
377
|
+
return this._min ?? null;
|
|
378
|
+
}
|
|
379
|
+
set max(value) {
|
|
380
|
+
this._max = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
|
|
381
|
+
}
|
|
382
|
+
get max() {
|
|
383
|
+
return this._max ?? null;
|
|
384
|
+
}
|
|
385
|
+
set now(value) {
|
|
386
|
+
this._now = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
|
|
387
|
+
}
|
|
388
|
+
get now() {
|
|
389
|
+
return this._now ?? this._dateAdapter.today();
|
|
390
|
+
}
|
|
391
|
+
set selected(value) {
|
|
392
|
+
this._selectedDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
|
|
393
|
+
if (!!this._selectedDate && (!this._isDayInRange(this._dateAdapter.toIso8601(this._selectedDate)) || this._dateFilter(this._selectedDate))) {
|
|
394
|
+
this._selected = this._dateAdapter.toIso8601(this._selectedDate);
|
|
395
|
+
} else {
|
|
396
|
+
this._selected = void 0;
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
get selected() {
|
|
400
|
+
return this._selectedDate ?? null;
|
|
401
|
+
}
|
|
402
|
+
set _wide(wide) {
|
|
403
|
+
this.toggleAttribute("data-wide", wide);
|
|
404
|
+
}
|
|
405
|
+
get _wide() {
|
|
406
|
+
return this.hasAttribute("data-wide");
|
|
407
|
+
}
|
|
408
|
+
/** A list of buttons corresponding to days, months or years depending on the view. */
|
|
409
|
+
get _cells() {
|
|
410
|
+
return Array.from(
|
|
411
|
+
this.shadowRoot.querySelectorAll(".sbb-calendar__cell") ?? []
|
|
412
|
+
);
|
|
413
|
+
}
|
|
414
|
+
get _dateFilter() {
|
|
415
|
+
return this.dateFilter ?? (() => true);
|
|
416
|
+
}
|
|
417
|
+
/** Resets the active month according to the new state of the calendar. */
|
|
418
|
+
resetPosition() {
|
|
419
|
+
if (this._calendarView !== "day") {
|
|
420
|
+
this._resetToDayView();
|
|
421
|
+
}
|
|
422
|
+
this._activeDate = this.selected ?? this.now;
|
|
423
|
+
this._init();
|
|
424
|
+
}
|
|
425
|
+
connectedCallback() {
|
|
426
|
+
var _a;
|
|
427
|
+
super.connectedCallback();
|
|
428
|
+
this.resetPosition();
|
|
429
|
+
this.focus = () => {
|
|
430
|
+
this._resetFocus = true;
|
|
431
|
+
this._focusCell();
|
|
432
|
+
};
|
|
433
|
+
(_a = globalThis.window) == null ? void 0 : _a.addEventListener("resize", () => this._init(), {
|
|
434
|
+
passive: true,
|
|
435
|
+
signal: this._abort.signal
|
|
436
|
+
});
|
|
437
|
+
}
|
|
438
|
+
willUpdate(changedProperties) {
|
|
439
|
+
super.willUpdate(changedProperties);
|
|
440
|
+
if (!this._initialized) {
|
|
441
|
+
return;
|
|
442
|
+
}
|
|
443
|
+
if (changedProperties.has("wide")) {
|
|
444
|
+
this.resetPosition();
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
updated(changedProperties) {
|
|
448
|
+
super.updated(changedProperties);
|
|
449
|
+
this._setTabIndex();
|
|
450
|
+
if (sbbInputModalityDetector.mostRecentModality === "keyboard") {
|
|
451
|
+
this._focusCell();
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
/** Initializes the component. */
|
|
455
|
+
_init(activeDate) {
|
|
456
|
+
if (isServer) {
|
|
457
|
+
return;
|
|
458
|
+
}
|
|
459
|
+
if (activeDate) {
|
|
460
|
+
this._assignActiveDate(activeDate);
|
|
461
|
+
}
|
|
462
|
+
this._wide = isBreakpoint("medium") && this.wide;
|
|
463
|
+
this._weeks = this._createWeekRows(this._activeDate);
|
|
464
|
+
this._years = this._createYearRows();
|
|
465
|
+
this._nextMonthWeeks = [[]];
|
|
466
|
+
this._nextMonthYears = [[]];
|
|
467
|
+
if (this._wide) {
|
|
468
|
+
const nextMonthDate = this._dateAdapter.addCalendarMonths(this._activeDate, 1);
|
|
469
|
+
this._nextMonthWeeks = this._createWeekRows(nextMonthDate);
|
|
470
|
+
this._nextMonthYears = this._createYearRows(YEARS_PER_PAGE);
|
|
471
|
+
}
|
|
472
|
+
this._initialized = true;
|
|
473
|
+
}
|
|
474
|
+
/** Focuses on a day cell prioritizing the selected day, the current day, and lastly, the first selectable day. */
|
|
475
|
+
_focusCell() {
|
|
476
|
+
var _a;
|
|
477
|
+
if (this._resetFocus) {
|
|
478
|
+
(_a = this._getFirstFocusable()) == null ? void 0 : _a.focus();
|
|
479
|
+
this._resetFocus = false;
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
/** Creates the array of weekdays. */
|
|
483
|
+
_setWeekdays() {
|
|
484
|
+
const narrowWeekdays = this._dateAdapter.getDayOfWeekNames("narrow");
|
|
485
|
+
const longWeekdays = this._dateAdapter.getDayOfWeekNames("long");
|
|
486
|
+
const weekdays = longWeekdays.map((long, i) => ({
|
|
487
|
+
long,
|
|
488
|
+
narrow: narrowWeekdays[i]
|
|
489
|
+
}));
|
|
490
|
+
const firstDayOfWeek = this._dateAdapter.getFirstDayOfWeek();
|
|
491
|
+
this._weekdays = weekdays.slice(firstDayOfWeek).concat(weekdays.slice(0, firstDayOfWeek));
|
|
492
|
+
}
|
|
493
|
+
/** Creates the rows for each week. */
|
|
494
|
+
_createWeekRows(value) {
|
|
495
|
+
const daysInMonth = this._dateAdapter.getNumDaysInMonth(value);
|
|
496
|
+
const dateNames = this._dateAdapter.getDateNames();
|
|
497
|
+
const weeks = [[]];
|
|
498
|
+
const weekOffset = this._dateAdapter.getFirstWeekOffset(value);
|
|
499
|
+
for (let i = 0, cell = weekOffset; i < daysInMonth; i++, cell++) {
|
|
500
|
+
if (cell === DAYS_PER_ROW) {
|
|
501
|
+
weeks.push([]);
|
|
502
|
+
cell = 0;
|
|
503
|
+
}
|
|
504
|
+
const date = this._dateAdapter.createDate(
|
|
505
|
+
this._dateAdapter.getYear(value),
|
|
506
|
+
this._dateAdapter.getMonth(value),
|
|
507
|
+
i + 1
|
|
508
|
+
);
|
|
509
|
+
weeks[weeks.length - 1].push({
|
|
510
|
+
value: this._dateAdapter.toIso8601(date),
|
|
511
|
+
dayValue: dateNames[i],
|
|
512
|
+
monthValue: String(this._dateAdapter.getMonth(date)),
|
|
513
|
+
yearValue: String(this._dateAdapter.getYear(date))
|
|
514
|
+
});
|
|
515
|
+
}
|
|
516
|
+
return weeks;
|
|
517
|
+
}
|
|
518
|
+
/** Creates the rows for the month selection view. */
|
|
519
|
+
_createMonthRows() {
|
|
520
|
+
const shortNames = this._dateAdapter.getMonthNames("short");
|
|
521
|
+
const months = new Array(12).fill(null).map(
|
|
522
|
+
(_, i) => ({
|
|
523
|
+
value: shortNames[i],
|
|
524
|
+
longValue: this._monthNames[i],
|
|
525
|
+
monthValue: i + 1
|
|
526
|
+
})
|
|
527
|
+
);
|
|
528
|
+
const rows = 12 / MONTHS_PER_ROW;
|
|
529
|
+
const monthArray = [];
|
|
530
|
+
for (let i = 0; i < rows; i++) {
|
|
531
|
+
monthArray.push(months.slice(MONTHS_PER_ROW * i, MONTHS_PER_ROW * (i + 1)));
|
|
532
|
+
}
|
|
533
|
+
this._months = monthArray;
|
|
534
|
+
}
|
|
535
|
+
/** Creates the rows for the year selection view. */
|
|
536
|
+
_createYearRows(offset = 0) {
|
|
537
|
+
const startValueYearView = this._getStartValueYearView();
|
|
538
|
+
const allYears = new Array(YEARS_PER_PAGE).fill(0).map((_, i) => startValueYearView + offset + i);
|
|
539
|
+
const rows = YEARS_PER_PAGE / YEARS_PER_ROW;
|
|
540
|
+
const yearArray = [];
|
|
541
|
+
for (let i = 0; i < rows; i++) {
|
|
542
|
+
yearArray.push(allYears.slice(YEARS_PER_ROW * i, YEARS_PER_ROW * (i + 1)));
|
|
543
|
+
}
|
|
544
|
+
return yearArray;
|
|
545
|
+
}
|
|
546
|
+
/**
|
|
547
|
+
* Calculates the first year that will be shown in the year selection panel.
|
|
548
|
+
* If `minDate` and `maxDate` are both null, the starting year is calculated as
|
|
549
|
+
* the multiple of YEARS_PER_PAGE closest to and less than activeDate,
|
|
550
|
+
* e.g., with `YEARS_PER_PAGE` = 24 and `activeDate` = 2020, the function will return 2016 (24 * 83),
|
|
551
|
+
* while with `activeDate` = 2000, the function will return 1992 (24 * 82).
|
|
552
|
+
* If `minDate` is not null, it returns the corresponding year; if `maxDate` is not null,
|
|
553
|
+
* it returns the corresponding year minus `YEARS_PER_PAGE`, so that the `maxDate` is the last rendered year.
|
|
554
|
+
* If both are not null, `maxDate` has priority over `minDate`.
|
|
555
|
+
*/
|
|
556
|
+
_getStartValueYearView() {
|
|
557
|
+
let startingYear = 0;
|
|
558
|
+
if (this.max) {
|
|
559
|
+
startingYear = this._dateAdapter.getYear(this.max) - YEARS_PER_PAGE + 1;
|
|
560
|
+
} else if (this.min) {
|
|
561
|
+
startingYear = this._dateAdapter.getYear(this.min);
|
|
562
|
+
}
|
|
563
|
+
const activeYear = this._dateAdapter.getYear(this._activeDate);
|
|
564
|
+
return activeYear - ((activeYear - startingYear) % YEARS_PER_PAGE + YEARS_PER_PAGE) % YEARS_PER_PAGE;
|
|
565
|
+
}
|
|
566
|
+
/** Checks if date is within the min-max range. */
|
|
567
|
+
_isDayInRange(date) {
|
|
568
|
+
if (!this._min && !this._max) {
|
|
569
|
+
return true;
|
|
570
|
+
}
|
|
571
|
+
const isBeforeMin = this._dateAdapter.isValid(this._min) && this._dateAdapter.compareDate(this._min, this._dateAdapter.deserialize(date)) > 0;
|
|
572
|
+
const isAfterMax = this._dateAdapter.isValid(this._max) && this._dateAdapter.compareDate(this._max, this._dateAdapter.deserialize(date)) < 0;
|
|
573
|
+
return !(isBeforeMin || isAfterMax);
|
|
574
|
+
}
|
|
575
|
+
_isMonthInRange(month) {
|
|
576
|
+
if (!this._min && !this._max) {
|
|
577
|
+
return true;
|
|
578
|
+
}
|
|
579
|
+
const isBeforeMin = this._dateAdapter.isValid(this._min) && this._dateAdapter.getYear(this._min) >= this._chosenYear && this._dateAdapter.getMonth(this._min) > month;
|
|
580
|
+
const isAfterMax = this._dateAdapter.isValid(this._max) && this._dateAdapter.getYear(this._max) <= this._chosenYear && this._dateAdapter.getMonth(this._max) < month;
|
|
581
|
+
return !(isBeforeMin || isAfterMax);
|
|
582
|
+
}
|
|
583
|
+
_isYearInRange(year) {
|
|
584
|
+
if (!this._min && !this._max) {
|
|
585
|
+
return true;
|
|
586
|
+
}
|
|
587
|
+
const isBeforeMin = this._dateAdapter.isValid(this._min) && this._dateAdapter.getYear(this._min) > year;
|
|
588
|
+
const isAfterMax = this._dateAdapter.isValid(this._max) && this._dateAdapter.getYear(this._max) < year;
|
|
589
|
+
return !(isBeforeMin || isAfterMax);
|
|
590
|
+
}
|
|
591
|
+
// Implementation adapted from https://github.com/angular/components/blob/main/src/material/datepicker/year-view.ts#L366
|
|
592
|
+
_isMonthFilteredOut(month) {
|
|
593
|
+
if (!this.dateFilter) {
|
|
594
|
+
return true;
|
|
595
|
+
}
|
|
596
|
+
const firstOfMonth = this._dateAdapter.createDate(this._chosenYear, month, 1);
|
|
597
|
+
for (let date = firstOfMonth; this._dateAdapter.getMonth(date) == month; date = this._dateAdapter.addCalendarDays(date, 1)) {
|
|
598
|
+
if (this.dateFilter(date)) {
|
|
599
|
+
return true;
|
|
600
|
+
}
|
|
601
|
+
}
|
|
602
|
+
return false;
|
|
603
|
+
}
|
|
604
|
+
// Implementation adapted from https://github.com/angular/components/blob/main/src/material/datepicker/multi-year-view.ts#L351
|
|
605
|
+
_isYearFilteredOut(year) {
|
|
606
|
+
if (!this.dateFilter) {
|
|
607
|
+
return true;
|
|
608
|
+
}
|
|
609
|
+
const firstOfYear = this._dateAdapter.createDate(year, 1, 1);
|
|
610
|
+
for (let date = firstOfYear; this._dateAdapter.getYear(date) == year; date = this._dateAdapter.addCalendarDays(date, 1)) {
|
|
611
|
+
if (this.dateFilter(date)) {
|
|
612
|
+
return true;
|
|
613
|
+
}
|
|
614
|
+
}
|
|
615
|
+
return false;
|
|
616
|
+
}
|
|
617
|
+
/** Emits the selected date and sets it internally. */
|
|
618
|
+
_selectDate(day) {
|
|
619
|
+
this._chosenMonth = void 0;
|
|
620
|
+
this._chosenYear = void 0;
|
|
621
|
+
if (this._selected !== day) {
|
|
622
|
+
this._selected = day;
|
|
623
|
+
this._dateSelected.emit(this._dateAdapter.deserialize(day));
|
|
624
|
+
}
|
|
625
|
+
}
|
|
626
|
+
_assignActiveDate(date) {
|
|
627
|
+
if (this._min && this._dateAdapter.compareDate(this._min, date) > 0) {
|
|
628
|
+
this._activeDate = this._min;
|
|
629
|
+
return;
|
|
630
|
+
}
|
|
631
|
+
if (this._max && this._dateAdapter.compareDate(this._max, date) < 0) {
|
|
632
|
+
this._activeDate = this._max;
|
|
633
|
+
return;
|
|
634
|
+
}
|
|
635
|
+
this._activeDate = date;
|
|
636
|
+
}
|
|
637
|
+
/** Goes to the month identified by the shift. */
|
|
638
|
+
_goToDifferentMonth(months) {
|
|
639
|
+
this._init(this._dateAdapter.addCalendarMonths(this._activeDate, months));
|
|
640
|
+
}
|
|
641
|
+
_goToDifferentYear(years) {
|
|
642
|
+
this._chosenYear += years;
|
|
643
|
+
this._activeDate = this._dateAdapter.createDate(
|
|
644
|
+
this._chosenYear,
|
|
645
|
+
this._dateAdapter.getMonth(this._activeDate),
|
|
646
|
+
this._dateAdapter.getDate(this._activeDate)
|
|
647
|
+
);
|
|
648
|
+
this._init();
|
|
649
|
+
}
|
|
650
|
+
_goToDifferentYearRange(years) {
|
|
651
|
+
this._init(this._dateAdapter.addCalendarYears(this._activeDate, years));
|
|
652
|
+
}
|
|
653
|
+
_prevDisabled(prevDate) {
|
|
654
|
+
if (!this._min) {
|
|
655
|
+
return false;
|
|
656
|
+
}
|
|
657
|
+
return this._dateAdapter.compareDate(prevDate, this._min) < 0;
|
|
658
|
+
}
|
|
659
|
+
_nextDisabled(nextDate) {
|
|
660
|
+
if (!this._max) {
|
|
661
|
+
return false;
|
|
662
|
+
}
|
|
663
|
+
return this._dateAdapter.compareDate(nextDate, this._max) > 0;
|
|
664
|
+
}
|
|
665
|
+
/** Checks if the "previous month" button should be disabled. */
|
|
666
|
+
_previousMonthDisabled() {
|
|
667
|
+
const prevMonth = this._dateAdapter.addCalendarDays(
|
|
668
|
+
this._activeDate,
|
|
669
|
+
this._dateAdapter.getDate(this._activeDate) * -1
|
|
670
|
+
);
|
|
671
|
+
return this._prevDisabled(prevMonth);
|
|
672
|
+
}
|
|
673
|
+
/** Checks if the "next month" button should be disabled. */
|
|
674
|
+
_nextMonthDisabled() {
|
|
675
|
+
let nextMonth = this._dateAdapter.addCalendarMonths(this._activeDate, this._wide ? 2 : 1);
|
|
676
|
+
nextMonth = this._dateAdapter.createDate(
|
|
677
|
+
this._dateAdapter.getYear(nextMonth),
|
|
678
|
+
this._dateAdapter.getMonth(nextMonth),
|
|
679
|
+
1
|
|
680
|
+
);
|
|
681
|
+
return this._nextDisabled(nextMonth);
|
|
682
|
+
}
|
|
683
|
+
_previousYearDisabled() {
|
|
684
|
+
const prevYear = this._dateAdapter.createDate(
|
|
685
|
+
this._dateAdapter.getYear(this._activeDate) - 1,
|
|
686
|
+
12,
|
|
687
|
+
31
|
|
688
|
+
);
|
|
689
|
+
return this._prevDisabled(prevYear);
|
|
690
|
+
}
|
|
691
|
+
_nextYearDisabled() {
|
|
692
|
+
const nextYear = this._dateAdapter.createDate(
|
|
693
|
+
this._dateAdapter.getYear(this._activeDate) + 1,
|
|
694
|
+
1,
|
|
695
|
+
1
|
|
696
|
+
);
|
|
697
|
+
return this._nextDisabled(nextYear);
|
|
698
|
+
}
|
|
699
|
+
_previousYearRangeDisabled() {
|
|
700
|
+
const prevYear = this._dateAdapter.createDate(this._years[0][0] - 1, 12, 31);
|
|
701
|
+
return this._prevDisabled(prevYear);
|
|
702
|
+
}
|
|
703
|
+
_nextYearRangeDisabled() {
|
|
704
|
+
const years = isBreakpoint("medium") && this.wide ? this._nextMonthYears : this._years;
|
|
705
|
+
const lastYearRange = years[years.length - 1];
|
|
706
|
+
const lastYear = lastYearRange[lastYearRange.length - 1];
|
|
707
|
+
const nextYear = this._dateAdapter.createDate(lastYear + 1, 1, 1);
|
|
708
|
+
return this._nextDisabled(nextYear);
|
|
709
|
+
}
|
|
710
|
+
_handleTableBlur(eventTarget) {
|
|
711
|
+
if ((eventTarget == null ? void 0 : eventTarget.localName) !== "button") {
|
|
712
|
+
this._setTabIndex();
|
|
713
|
+
}
|
|
714
|
+
}
|
|
715
|
+
_setTabIndex() {
|
|
716
|
+
Array.from(
|
|
717
|
+
this.shadowRoot.querySelectorAll('.sbb-calendar__cell[tabindex="0"]') ?? []
|
|
718
|
+
).forEach((day) => day.tabIndex = -1);
|
|
719
|
+
const firstFocusable = this._getFirstFocusable();
|
|
720
|
+
if (firstFocusable) {
|
|
721
|
+
firstFocusable.tabIndex = 0;
|
|
722
|
+
}
|
|
723
|
+
}
|
|
724
|
+
_getFirstFocusable() {
|
|
725
|
+
const active = this._selected ? this._dateAdapter.deserialize(this._selected) : this.now;
|
|
726
|
+
let firstFocusable = this.shadowRoot.querySelector(".sbb-calendar__selected") ?? this.shadowRoot.querySelector(
|
|
727
|
+
`[data-day="${this._dateAdapter.getDate(active)} ${this._dateAdapter.getMonth(
|
|
728
|
+
active
|
|
729
|
+
)} ${this._dateAdapter.getYear(active)}"]`
|
|
730
|
+
) ?? this.shadowRoot.querySelector(`[data-month="${this._dateAdapter.getMonth(active)}"]`) ?? this.shadowRoot.querySelector(`[data-year="${this._dateAdapter.getYear(active)}"]`);
|
|
731
|
+
if (!firstFocusable || (firstFocusable == null ? void 0 : firstFocusable.disabled)) {
|
|
732
|
+
firstFocusable = this.shadowRoot.querySelector(".sbb-calendar__cell:not([disabled])");
|
|
733
|
+
}
|
|
734
|
+
return firstFocusable || null;
|
|
735
|
+
}
|
|
736
|
+
_handleKeyboardEvent(event, day) {
|
|
737
|
+
if (isArrowKeyOrPageKeysPressed(event)) {
|
|
738
|
+
event.preventDefault();
|
|
739
|
+
}
|
|
740
|
+
const cells = this._cells;
|
|
741
|
+
const index = cells.findIndex((e) => e === event.target);
|
|
742
|
+
const nextEl = this._navigateByKeyboard(event, index, cells, day);
|
|
743
|
+
const activeEl = this.shadowRoot.activeElement;
|
|
744
|
+
if (nextEl !== activeEl) {
|
|
745
|
+
nextEl.tabIndex = 0;
|
|
746
|
+
nextEl == null ? void 0 : nextEl.focus();
|
|
747
|
+
activeEl.tabIndex = -1;
|
|
748
|
+
}
|
|
749
|
+
}
|
|
750
|
+
/**
|
|
751
|
+
* Gets the index of the element to move to, based on a list of elements (which can be potentially disabled),
|
|
752
|
+
* the keyboard input and the position of the current element in the list.
|
|
753
|
+
* In the day view, the `day?: Day` parameter is mandatory for calculation,
|
|
754
|
+
* while in month and year view it's not due to the fixed amount of rendered cells.
|
|
755
|
+
*/
|
|
756
|
+
_navigateByKeyboard(evt, index, cells, day) {
|
|
757
|
+
const {
|
|
758
|
+
elementIndexForWideMode,
|
|
759
|
+
offsetForWideMode,
|
|
760
|
+
lastElementIndexForWideMode,
|
|
761
|
+
verticalOffset
|
|
762
|
+
} = this._calculateParametersForKeyboardNavigation(
|
|
763
|
+
cells,
|
|
764
|
+
index,
|
|
765
|
+
day
|
|
766
|
+
);
|
|
767
|
+
switch (evt.key) {
|
|
768
|
+
case "ArrowUp":
|
|
769
|
+
return this._findNext(cells, index, -verticalOffset);
|
|
770
|
+
case "ArrowDown":
|
|
771
|
+
return this._findNext(cells, index, verticalOffset);
|
|
772
|
+
case "ArrowLeft":
|
|
773
|
+
return this._findNext(cells, index, -1);
|
|
774
|
+
case "ArrowRight":
|
|
775
|
+
return this._findNext(cells, index, 1);
|
|
776
|
+
case "Home":
|
|
777
|
+
return this._findFirst(cells, offsetForWideMode);
|
|
778
|
+
case "PageUp":
|
|
779
|
+
return this._findFirstOnColumn(
|
|
780
|
+
cells,
|
|
781
|
+
elementIndexForWideMode,
|
|
782
|
+
offsetForWideMode,
|
|
783
|
+
verticalOffset
|
|
784
|
+
);
|
|
785
|
+
case "PageDown":
|
|
786
|
+
return this._findLastOnColumn(cells, index, lastElementIndexForWideMode, verticalOffset);
|
|
787
|
+
case "End":
|
|
788
|
+
return this._findLast(cells, lastElementIndexForWideMode - 1);
|
|
789
|
+
default:
|
|
790
|
+
return cells[index];
|
|
791
|
+
}
|
|
792
|
+
}
|
|
793
|
+
/**
|
|
794
|
+
* Calculates the parameter needed in keyboard navigation.
|
|
795
|
+
* Since three views are now available, the function creates and returns the correct parameters for each of them
|
|
796
|
+
* by considering the number of cells per each row and the correction for the wide mode.
|
|
797
|
+
* @param cells The array of rendered table cells; they are buttons that can represent days, months or years.
|
|
798
|
+
* @param index The starting element's index in the cell array.
|
|
799
|
+
* @param day (optional) Only in the day view, the day represented by the starting cell.
|
|
800
|
+
*/
|
|
801
|
+
_calculateParametersForKeyboardNavigation(cells, index, day) {
|
|
802
|
+
switch (this._calendarView) {
|
|
803
|
+
case "day": {
|
|
804
|
+
const indexInView = +day.dayValue - 1;
|
|
805
|
+
return {
|
|
806
|
+
verticalOffset: DAYS_PER_ROW,
|
|
807
|
+
elementIndexForWideMode: indexInView,
|
|
808
|
+
offsetForWideMode: index - indexInView,
|
|
809
|
+
lastElementIndexForWideMode: index === indexInView ? this._dateAdapter.getNumDaysInMonth(
|
|
810
|
+
this._dateAdapter.addCalendarMonths(
|
|
811
|
+
this._dateAdapter.deserialize(day.value),
|
|
812
|
+
-1
|
|
813
|
+
)
|
|
814
|
+
) : cells.length
|
|
815
|
+
};
|
|
816
|
+
}
|
|
817
|
+
case "month": {
|
|
818
|
+
return {
|
|
819
|
+
verticalOffset: MONTHS_PER_ROW,
|
|
820
|
+
elementIndexForWideMode: index,
|
|
821
|
+
offsetForWideMode: 0,
|
|
822
|
+
lastElementIndexForWideMode: 12
|
|
823
|
+
};
|
|
824
|
+
}
|
|
825
|
+
case "year": {
|
|
826
|
+
const offset = Math.trunc(index / YEARS_PER_PAGE) * YEARS_PER_PAGE;
|
|
827
|
+
const indexInView = offset === 0 ? index : index - YEARS_PER_PAGE;
|
|
828
|
+
return {
|
|
829
|
+
verticalOffset: YEARS_PER_ROW,
|
|
830
|
+
elementIndexForWideMode: indexInView,
|
|
831
|
+
offsetForWideMode: index - indexInView,
|
|
832
|
+
lastElementIndexForWideMode: offset === 0 ? YEARS_PER_PAGE : YEARS_PER_PAGE * 2
|
|
833
|
+
};
|
|
834
|
+
}
|
|
835
|
+
}
|
|
836
|
+
}
|
|
837
|
+
/**
|
|
838
|
+
* Gets the next element of the provided array starting from `index` by adding `delta`.
|
|
839
|
+
* If the found element is disabled, it continues adding `delta` until it finds an enabled one in the array bounds.
|
|
840
|
+
*/
|
|
841
|
+
_findNext(days, index, delta) {
|
|
842
|
+
var _a;
|
|
843
|
+
let nextIndex = index + delta;
|
|
844
|
+
while (nextIndex < days.length && ((_a = days[nextIndex]) == null ? void 0 : _a.disabled)) {
|
|
845
|
+
nextIndex += delta;
|
|
846
|
+
}
|
|
847
|
+
return days[nextIndex] ?? days[index];
|
|
848
|
+
}
|
|
849
|
+
/** Find the first enabled element in the provided array. */
|
|
850
|
+
_findFirst(days, firstOfCurrentMonth) {
|
|
851
|
+
return !days[firstOfCurrentMonth].disabled ? days[firstOfCurrentMonth] : this._findNext(days, firstOfCurrentMonth, 1);
|
|
852
|
+
}
|
|
853
|
+
/** Find the last enabled element in the provided array. */
|
|
854
|
+
_findLast(days, lastOfCurrentMonth) {
|
|
855
|
+
return !days[lastOfCurrentMonth].disabled ? days[lastOfCurrentMonth] : this._findNext(days, lastOfCurrentMonth, -1);
|
|
856
|
+
}
|
|
857
|
+
/** Find the first enabled element in the same column of the provided array. */
|
|
858
|
+
_findFirstOnColumn(days, index, offset, verticalOffset) {
|
|
859
|
+
const nextIndex = index % verticalOffset + offset;
|
|
860
|
+
return !days[nextIndex].disabled ? days[nextIndex] : this._findNext(days, nextIndex, verticalOffset);
|
|
861
|
+
}
|
|
862
|
+
/** Find the last enabled element in the same column of the provided array. */
|
|
863
|
+
_findLastOnColumn(days, index, offset, verticalOffset) {
|
|
864
|
+
const nextIndex = index + Math.trunc((offset - index - 1) / verticalOffset) * verticalOffset;
|
|
865
|
+
return !days[nextIndex].disabled ? days[nextIndex] : this._findNext(days, nextIndex, -verticalOffset);
|
|
866
|
+
}
|
|
867
|
+
_resetToDayView() {
|
|
868
|
+
this._resetFocus = true;
|
|
869
|
+
this._activeDate = this.selected ?? this.now;
|
|
870
|
+
this._chosenYear = void 0;
|
|
871
|
+
this._chosenMonth = void 0;
|
|
872
|
+
this._nextCalendarView = "day";
|
|
873
|
+
this._removeTable();
|
|
874
|
+
}
|
|
875
|
+
/** Render the view for the day selection. */
|
|
876
|
+
_renderDayView() {
|
|
877
|
+
const nextMonthActiveDate = this._wide ? this._dateAdapter.addCalendarMonths(this._activeDate, 1) : void 0;
|
|
878
|
+
return html`
|
|
879
|
+
<div class="sbb-calendar__controls">
|
|
880
|
+
${this._getArrow(
|
|
881
|
+
"left",
|
|
882
|
+
() => this._goToDifferentMonth(-1),
|
|
883
|
+
i18nPreviousMonth[this._language.current],
|
|
884
|
+
this._previousMonthDisabled()
|
|
885
|
+
)}
|
|
886
|
+
<div class="sbb-calendar__controls-month">
|
|
887
|
+
${this._createLabelForDayView(this._activeDate)}
|
|
888
|
+
${this._wide ? this._createLabelForDayView(nextMonthActiveDate) : nothing}
|
|
889
|
+
<sbb-screen-reader-only role="status">
|
|
890
|
+
${this._createAriaLabelForDayView(this._activeDate, nextMonthActiveDate)}
|
|
891
|
+
</sbb-screen-reader-only>
|
|
892
|
+
</div>
|
|
893
|
+
${this._getArrow(
|
|
894
|
+
"right",
|
|
895
|
+
() => this._goToDifferentMonth(1),
|
|
896
|
+
i18nNextMonth[this._language.current],
|
|
897
|
+
this._nextMonthDisabled()
|
|
898
|
+
)}
|
|
899
|
+
</div>
|
|
900
|
+
<div class="sbb-calendar__table-container sbb-calendar__table-day-view">
|
|
901
|
+
${this._createDayTable(this._weeks)}
|
|
902
|
+
${this._wide ? this._createDayTable(this._nextMonthWeeks) : nothing}
|
|
903
|
+
</div>
|
|
904
|
+
`;
|
|
905
|
+
}
|
|
906
|
+
/** Creates the label with the month for the daily view. */
|
|
907
|
+
_createLabelForDayView(d) {
|
|
908
|
+
const monthLabel = `${this._monthNames[this._dateAdapter.getMonth(d) - 1]} ${this._dateAdapter.getYear(d)}`;
|
|
909
|
+
return html`
|
|
910
|
+
<button
|
|
911
|
+
type="button"
|
|
912
|
+
id="sbb-calendar__date-selection"
|
|
913
|
+
class="sbb-calendar__controls-change-date"
|
|
914
|
+
aria-label="${i18nYearMonthSelection[this._language.current]} ${monthLabel}"
|
|
915
|
+
@click=${() => {
|
|
916
|
+
this._resetFocus = true;
|
|
917
|
+
this._nextCalendarView = "year";
|
|
918
|
+
this._removeTable();
|
|
919
|
+
}}
|
|
920
|
+
>
|
|
921
|
+
${monthLabel}
|
|
922
|
+
<sbb-icon name="chevron-small-down-small"></sbb-icon>
|
|
923
|
+
</button>
|
|
924
|
+
`;
|
|
925
|
+
}
|
|
926
|
+
/** Creates the aria-label for the daily view. */
|
|
927
|
+
_createAriaLabelForDayView(...dates) {
|
|
928
|
+
let monthLabel = "";
|
|
929
|
+
for (const d of dates) {
|
|
930
|
+
if (d) {
|
|
931
|
+
monthLabel += `${this._monthNames[this._dateAdapter.getMonth(d) - 1]} ${this._dateAdapter.getYear(d)} `;
|
|
932
|
+
}
|
|
933
|
+
}
|
|
934
|
+
return monthLabel;
|
|
935
|
+
}
|
|
936
|
+
/** Creates the calendar table for the daily view. */
|
|
937
|
+
_createDayTable(weeks) {
|
|
938
|
+
return html`
|
|
939
|
+
<table
|
|
940
|
+
class="sbb-calendar__table"
|
|
941
|
+
@focusout=${(event) => this._handleTableBlur(event.relatedTarget)}
|
|
942
|
+
@animationend=${(e) => this._tableAnimationEnd(e)}
|
|
943
|
+
>
|
|
944
|
+
<thead class="sbb-calendar__table-header">
|
|
945
|
+
<tr class="sbb-calendar__table-header-row">
|
|
946
|
+
${this._createDayTableHeader()}
|
|
947
|
+
</tr>
|
|
948
|
+
</thead>
|
|
949
|
+
<tbody class="sbb-calendar__table-body">
|
|
950
|
+
${this._createDayTableBody(weeks)}
|
|
951
|
+
</tbody>
|
|
952
|
+
</table>
|
|
953
|
+
`;
|
|
954
|
+
}
|
|
955
|
+
/** Creates the table header with the month header cells. */
|
|
956
|
+
_createDayTableHeader() {
|
|
957
|
+
return this._weekdays.map(
|
|
958
|
+
(day) => html`
|
|
959
|
+
<th class="sbb-calendar__table-header">
|
|
960
|
+
<sbb-screen-reader-only>${day.long}</sbb-screen-reader-only>
|
|
961
|
+
<span aria-hidden="true">${day.narrow}</span>
|
|
962
|
+
</th>
|
|
963
|
+
`
|
|
964
|
+
);
|
|
965
|
+
}
|
|
966
|
+
/** Creates the table body with the day cells. For the first row, it also considers the possible day's offset. */
|
|
967
|
+
_createDayTableBody(weeks) {
|
|
968
|
+
const today = this._dateAdapter.toIso8601(this.now);
|
|
969
|
+
return weeks.map((week, rowIndex) => {
|
|
970
|
+
const firstRowOffset = DAYS_PER_ROW - week.length;
|
|
971
|
+
if (rowIndex === 0 && firstRowOffset) {
|
|
972
|
+
return html`
|
|
973
|
+
<tr>
|
|
974
|
+
${[...Array(firstRowOffset).keys()].map(
|
|
975
|
+
() => html`<td
|
|
976
|
+
class="sbb-calendar__table-data"
|
|
977
|
+
data-day=${`0 ${week[0].monthValue} ${week[0].yearValue}`}
|
|
978
|
+
></td>`
|
|
979
|
+
)}
|
|
980
|
+
${this._createDayCells(week, today)}
|
|
981
|
+
</tr>
|
|
982
|
+
`;
|
|
983
|
+
}
|
|
984
|
+
return html`<tr>
|
|
985
|
+
${this._createDayCells(week, today)}
|
|
986
|
+
</tr>`;
|
|
987
|
+
});
|
|
988
|
+
}
|
|
989
|
+
/** Creates the cells for the daily view. */
|
|
990
|
+
_createDayCells(week, today) {
|
|
991
|
+
return week.map((day) => {
|
|
992
|
+
const isOutOfRange = !this._isDayInRange(day.value);
|
|
993
|
+
const isFilteredOut = !this._dateFilter(this._dateAdapter.deserialize(day.value));
|
|
994
|
+
const selected = !!this._selected && day.value === this._selected;
|
|
995
|
+
const dayValue = `${day.dayValue} ${day.monthValue} ${day.yearValue}`;
|
|
996
|
+
const isToday = day.value === today;
|
|
997
|
+
return html`
|
|
998
|
+
<td
|
|
999
|
+
class=${classMap({
|
|
1000
|
+
"sbb-calendar__table-data": true,
|
|
1001
|
+
"sbb-calendar__table-data-selected": selected
|
|
1002
|
+
})}
|
|
1003
|
+
>
|
|
1004
|
+
<button
|
|
1005
|
+
class=${classMap({
|
|
1006
|
+
"sbb-calendar__cell": true,
|
|
1007
|
+
"sbb-calendar__day": true,
|
|
1008
|
+
"sbb-calendar__cell-current": isToday,
|
|
1009
|
+
"sbb-calendar__selected": selected,
|
|
1010
|
+
"sbb-calendar__crossed-out": !isOutOfRange && isFilteredOut
|
|
1011
|
+
})}
|
|
1012
|
+
@click=${() => this._selectDate(day.value)}
|
|
1013
|
+
?disabled=${isOutOfRange || isFilteredOut}
|
|
1014
|
+
aria-label=${this._dateAdapter.getAccessibilityFormatDate(day.value)}
|
|
1015
|
+
aria-pressed=${selected}
|
|
1016
|
+
aria-disabled=${isOutOfRange || isFilteredOut}
|
|
1017
|
+
aria-current=${isToday ? "date" : nothing}
|
|
1018
|
+
data-day=${dayValue || nothing}
|
|
1019
|
+
tabindex="-1"
|
|
1020
|
+
@keydown=${(evt) => this._handleKeyboardEvent(evt, day)}
|
|
1021
|
+
sbb-popover-close
|
|
1022
|
+
>
|
|
1023
|
+
${day.dayValue}
|
|
1024
|
+
</button>
|
|
1025
|
+
</td>
|
|
1026
|
+
`;
|
|
1027
|
+
});
|
|
1028
|
+
}
|
|
1029
|
+
/** Render the view for the month selection. */
|
|
1030
|
+
_renderMonthView() {
|
|
1031
|
+
return html`
|
|
1032
|
+
<div class="sbb-calendar__controls">
|
|
1033
|
+
${this._getArrow(
|
|
1034
|
+
"left",
|
|
1035
|
+
() => this._goToDifferentYear(-1),
|
|
1036
|
+
i18nPreviousYear[this._language.current],
|
|
1037
|
+
this._previousYearDisabled()
|
|
1038
|
+
)}
|
|
1039
|
+
<div class="sbb-calendar__controls-month">${this._createLabelForMonthView()}</div>
|
|
1040
|
+
${this._getArrow(
|
|
1041
|
+
"right",
|
|
1042
|
+
() => this._goToDifferentYear(1),
|
|
1043
|
+
i18nNextYear[this._language.current],
|
|
1044
|
+
this._nextYearDisabled()
|
|
1045
|
+
)}
|
|
1046
|
+
</div>
|
|
1047
|
+
<div class="sbb-calendar__table-container sbb-calendar__table-month-view">
|
|
1048
|
+
${this._createMonthTable(this._months, this._chosenYear)}
|
|
1049
|
+
${this._wide ? this._createMonthTable(this._months, this._chosenYear + 1, true) : nothing}
|
|
1050
|
+
</div>
|
|
1051
|
+
`;
|
|
1052
|
+
}
|
|
1053
|
+
/** Creates the label with the year for the monthly view. */
|
|
1054
|
+
_createLabelForMonthView() {
|
|
1055
|
+
return html` <button
|
|
1056
|
+
type="button"
|
|
1057
|
+
id="sbb-calendar__month-selection"
|
|
1058
|
+
class="sbb-calendar__controls-change-date"
|
|
1059
|
+
aria-label=${`${i18nCalendarDateSelection[this._language.current]} ${this._chosenYear}`}
|
|
1060
|
+
@click=${() => this._resetToDayView()}
|
|
1061
|
+
>
|
|
1062
|
+
${this._chosenYear} ${this._wide ? ` - ${this._chosenYear + 1}` : nothing}
|
|
1063
|
+
<sbb-icon name="chevron-small-up-small"></sbb-icon>
|
|
1064
|
+
</button>
|
|
1065
|
+
<sbb-screen-reader-only role="status"> ${this._chosenYear} </sbb-screen-reader-only>`;
|
|
1066
|
+
}
|
|
1067
|
+
/** Creates the table for the month selection view. */
|
|
1068
|
+
_createMonthTable(months, year, shiftRight = false) {
|
|
1069
|
+
return html`
|
|
1070
|
+
<table
|
|
1071
|
+
class="sbb-calendar__table"
|
|
1072
|
+
@animationend=${(e) => this._tableAnimationEnd(e)}
|
|
1073
|
+
>
|
|
1074
|
+
${this._wide ? html`<thead class="sbb-calendar__table-header" aria-hidden="true">
|
|
1075
|
+
<tr class="sbb-calendar__table-header-row">
|
|
1076
|
+
<th class="sbb-calendar__table-header" colspan=${MONTHS_PER_ROW}>${year}</th>
|
|
1077
|
+
</tr>
|
|
1078
|
+
</thead>` : nothing}
|
|
1079
|
+
<tbody class="sbb-calendar__table-body">
|
|
1080
|
+
${months.map(
|
|
1081
|
+
(row) => html`
|
|
1082
|
+
<tr>
|
|
1083
|
+
${row.map((month) => {
|
|
1084
|
+
const isOutOfRange = !this._isMonthInRange(month.monthValue);
|
|
1085
|
+
const isFilteredOut = !this._isMonthFilteredOut(month.monthValue);
|
|
1086
|
+
const selectedMonth = this._selected ? this._dateAdapter.getMonth(this._dateAdapter.deserialize(this._selected)) : void 0;
|
|
1087
|
+
const selectedYear = this._selected ? this._dateAdapter.getYear(this._dateAdapter.deserialize(this._selected)) : void 0;
|
|
1088
|
+
const selected = !!this._selected && year === selectedYear && month.monthValue === selectedMonth;
|
|
1089
|
+
const isCurrentMonth = year === this._dateAdapter.getYear(this.now) && this._dateAdapter.getMonth(this.now) === month.monthValue;
|
|
1090
|
+
return html` <td
|
|
1091
|
+
class=${classMap({
|
|
1092
|
+
"sbb-calendar__table-data": true,
|
|
1093
|
+
"sbb-calendar__table-month": true
|
|
1094
|
+
})}
|
|
1095
|
+
>
|
|
1096
|
+
<button
|
|
1097
|
+
class=${classMap({
|
|
1098
|
+
"sbb-calendar__cell": true,
|
|
1099
|
+
"sbb-calendar__pill": true,
|
|
1100
|
+
"sbb-calendar__cell-current": isCurrentMonth,
|
|
1101
|
+
"sbb-calendar__crossed-out": !isOutOfRange && isFilteredOut,
|
|
1102
|
+
"sbb-calendar__selected": selected
|
|
1103
|
+
})}
|
|
1104
|
+
@click=${() => this._onMonthSelection(month.monthValue, year, shiftRight)}
|
|
1105
|
+
?disabled=${isOutOfRange || isFilteredOut}
|
|
1106
|
+
aria-label=${`${month.longValue} ${this._chosenYear}`}
|
|
1107
|
+
aria-pressed=${selected}
|
|
1108
|
+
aria-disabled=${String(isOutOfRange || isFilteredOut)}
|
|
1109
|
+
tabindex="-1"
|
|
1110
|
+
data-month=${month.monthValue || nothing}
|
|
1111
|
+
@keydown=${(evt) => this._handleKeyboardEvent(evt)}
|
|
1112
|
+
>
|
|
1113
|
+
${month.value}
|
|
1114
|
+
</button>
|
|
1115
|
+
</td>`;
|
|
1116
|
+
})}
|
|
1117
|
+
</tr>
|
|
1118
|
+
`
|
|
1119
|
+
)}
|
|
1120
|
+
</tbody>
|
|
1121
|
+
</table>
|
|
1122
|
+
`;
|
|
1123
|
+
}
|
|
1124
|
+
/** Select the month and change the view to day selection. */
|
|
1125
|
+
_onMonthSelection(month, year, shiftRight) {
|
|
1126
|
+
this._chosenMonth = shiftRight ? month + 1 : month;
|
|
1127
|
+
this._nextCalendarView = "day";
|
|
1128
|
+
this._init(
|
|
1129
|
+
this._dateAdapter.createDate(
|
|
1130
|
+
year,
|
|
1131
|
+
this._chosenMonth,
|
|
1132
|
+
this._dateAdapter.getDate(this._activeDate)
|
|
1133
|
+
)
|
|
1134
|
+
);
|
|
1135
|
+
this._removeTable();
|
|
1136
|
+
}
|
|
1137
|
+
/** Render the view for the year selection. */
|
|
1138
|
+
_renderYearView() {
|
|
1139
|
+
return html`
|
|
1140
|
+
<div class="sbb-calendar__controls">
|
|
1141
|
+
${this._getArrow(
|
|
1142
|
+
"left",
|
|
1143
|
+
() => this._goToDifferentYearRange(-YEARS_PER_PAGE),
|
|
1144
|
+
i18nPreviousYearRange(YEARS_PER_PAGE)[this._language.current],
|
|
1145
|
+
this._previousYearRangeDisabled()
|
|
1146
|
+
)}
|
|
1147
|
+
<div class="sbb-calendar__controls-month">${this._createLabelForYearView()}</div>
|
|
1148
|
+
${this._getArrow(
|
|
1149
|
+
"right",
|
|
1150
|
+
() => this._goToDifferentYearRange(YEARS_PER_PAGE),
|
|
1151
|
+
i18nNextYearRange(YEARS_PER_PAGE)[this._language.current],
|
|
1152
|
+
this._nextYearRangeDisabled()
|
|
1153
|
+
)}
|
|
1154
|
+
</div>
|
|
1155
|
+
<div class="sbb-calendar__table-container sbb-calendar__table-year-view">
|
|
1156
|
+
${this._createYearTable(this._years)}
|
|
1157
|
+
${this._wide ? this._createYearTable(this._nextMonthYears, true) : nothing}
|
|
1158
|
+
</div>
|
|
1159
|
+
`;
|
|
1160
|
+
}
|
|
1161
|
+
/** Creates the button arrow for all the views. */
|
|
1162
|
+
_getArrow(direction, click, ariaLabel, disabled) {
|
|
1163
|
+
return html`<sbb-secondary-button
|
|
1164
|
+
size="m"
|
|
1165
|
+
icon-name="chevron-small-${direction}-small"
|
|
1166
|
+
aria-label=${ariaLabel}
|
|
1167
|
+
@click=${click}
|
|
1168
|
+
?disabled=${disabled}
|
|
1169
|
+
id="sbb-calendar__controls-${direction === "left" ? "previous" : "next"}"
|
|
1170
|
+
></sbb-secondary-button>`;
|
|
1171
|
+
}
|
|
1172
|
+
/** Creates the label with the year range for the yearly view. */
|
|
1173
|
+
_createLabelForYearView() {
|
|
1174
|
+
const firstYear = this._years.flat()[0];
|
|
1175
|
+
const lastYearArray = (isBreakpoint("medium") && this.wide ? this._nextMonthYears : this._years).flat();
|
|
1176
|
+
const lastYear = lastYearArray[lastYearArray.length - 1];
|
|
1177
|
+
const yearLabel = `${firstYear} - ${lastYear}`;
|
|
1178
|
+
return html`
|
|
1179
|
+
<button
|
|
1180
|
+
type="button"
|
|
1181
|
+
id="sbb-calendar__year-selection"
|
|
1182
|
+
class="sbb-calendar__controls-change-date"
|
|
1183
|
+
aria-label="${i18nCalendarDateSelection[this._language.current]} ${yearLabel}"
|
|
1184
|
+
@click=${() => this._resetToDayView()}
|
|
1185
|
+
>
|
|
1186
|
+
${yearLabel}
|
|
1187
|
+
<sbb-icon name="chevron-small-up-small"></sbb-icon>
|
|
1188
|
+
</button>
|
|
1189
|
+
<sbb-screen-reader-only role="status"> ${yearLabel} </sbb-screen-reader-only>
|
|
1190
|
+
`;
|
|
1191
|
+
}
|
|
1192
|
+
/** Creates the table for the year selection view. */
|
|
1193
|
+
_createYearTable(years, shiftRight = false) {
|
|
1194
|
+
const now = this.now;
|
|
1195
|
+
return html` <table
|
|
1196
|
+
class="sbb-calendar__table"
|
|
1197
|
+
@animationend=${(e) => this._tableAnimationEnd(e)}
|
|
1198
|
+
>
|
|
1199
|
+
<tbody class="sbb-calendar__table-body">
|
|
1200
|
+
${years.map(
|
|
1201
|
+
(row) => html` <tr>
|
|
1202
|
+
${row.map((year) => {
|
|
1203
|
+
const isOutOfRange = !this._isYearInRange(year);
|
|
1204
|
+
const isFilteredOut = !this._isYearFilteredOut(year);
|
|
1205
|
+
const selectedYear = this._selected ? this._dateAdapter.getYear(this._dateAdapter.deserialize(this._selected)) : void 0;
|
|
1206
|
+
const selected = !!this._selected && year === selectedYear;
|
|
1207
|
+
const isCurrentYear = this._dateAdapter.getYear(now) === year;
|
|
1208
|
+
return html` <td class="sbb-calendar__table-data sbb-calendar__table-year">
|
|
1209
|
+
<button
|
|
1210
|
+
class=${classMap({
|
|
1211
|
+
"sbb-calendar__cell": true,
|
|
1212
|
+
"sbb-calendar__pill": true,
|
|
1213
|
+
"sbb-calendar__cell-current": isCurrentYear,
|
|
1214
|
+
"sbb-calendar__crossed-out": !isOutOfRange && isFilteredOut,
|
|
1215
|
+
"sbb-calendar__selected": selected
|
|
1216
|
+
})}
|
|
1217
|
+
@click=${() => this._onYearSelection(year, shiftRight)}
|
|
1218
|
+
?disabled=${isOutOfRange || isFilteredOut}
|
|
1219
|
+
aria-label=${year}
|
|
1220
|
+
aria-pressed=${selected}
|
|
1221
|
+
aria-disabled=${String(isOutOfRange || isFilteredOut)}
|
|
1222
|
+
tabindex="-1"
|
|
1223
|
+
data-year=${year || nothing}
|
|
1224
|
+
@keydown=${(evt) => this._handleKeyboardEvent(evt)}
|
|
1225
|
+
>
|
|
1226
|
+
${year}
|
|
1227
|
+
</button>
|
|
1228
|
+
</td>`;
|
|
1229
|
+
})}
|
|
1230
|
+
</tr>`
|
|
1231
|
+
)}
|
|
1232
|
+
</tbody>
|
|
1233
|
+
</table>`;
|
|
1234
|
+
}
|
|
1235
|
+
/** Select the year and change the view to month selection. */
|
|
1236
|
+
_onYearSelection(year, rightSide) {
|
|
1237
|
+
this._chosenYear = rightSide ? year - 1 : year;
|
|
1238
|
+
this._nextCalendarView = "month";
|
|
1239
|
+
this._assignActiveDate(
|
|
1240
|
+
this._dateAdapter.createDate(
|
|
1241
|
+
this._chosenYear,
|
|
1242
|
+
this._dateAdapter.getMonth(this._activeDate),
|
|
1243
|
+
this._dateAdapter.getDate(this._activeDate)
|
|
1244
|
+
)
|
|
1245
|
+
);
|
|
1246
|
+
this._removeTable();
|
|
1247
|
+
}
|
|
1248
|
+
get _getView() {
|
|
1249
|
+
switch (this._calendarView) {
|
|
1250
|
+
case "year":
|
|
1251
|
+
return this._renderYearView();
|
|
1252
|
+
case "month":
|
|
1253
|
+
return this._renderMonthView();
|
|
1254
|
+
case "day":
|
|
1255
|
+
default:
|
|
1256
|
+
return this._renderDayView();
|
|
1257
|
+
}
|
|
1258
|
+
}
|
|
1259
|
+
_tableAnimationEnd(event) {
|
|
1260
|
+
const table = event.target;
|
|
1261
|
+
if (event.animationName === "hide") {
|
|
1262
|
+
table.classList.remove("sbb-calendar__table-hide");
|
|
1263
|
+
this._resetFocus = true;
|
|
1264
|
+
this._calendarView = this._nextCalendarView;
|
|
1265
|
+
} else if (event.animationName === "show") {
|
|
1266
|
+
this.removeAttribute("data-transition");
|
|
1267
|
+
}
|
|
1268
|
+
}
|
|
1269
|
+
_removeTable() {
|
|
1270
|
+
this.toggleAttribute("data-transition", true);
|
|
1271
|
+
this.shadowRoot.querySelectorAll("table").forEach(
|
|
1272
|
+
(e) => e.classList.toggle("sbb-calendar__table-hide")
|
|
1273
|
+
);
|
|
1274
|
+
}
|
|
1275
|
+
render() {
|
|
1276
|
+
return html`<div class="sbb-calendar__wrapper">${this._getView}</div>`;
|
|
1277
|
+
}
|
|
1278
|
+
};
|
|
1279
|
+
SbbCalendarElement.styles = style;
|
|
1280
|
+
SbbCalendarElement.events = {
|
|
1281
|
+
dateSelected: "dateSelected"
|
|
1282
|
+
};
|
|
1283
|
+
__decorateClass([
|
|
1284
|
+
property({ type: Boolean })
|
|
1285
|
+
], SbbCalendarElement.prototype, "wide", 2);
|
|
1286
|
+
__decorateClass([
|
|
1287
|
+
property()
|
|
1288
|
+
], SbbCalendarElement.prototype, "min", 1);
|
|
1289
|
+
__decorateClass([
|
|
1290
|
+
property()
|
|
1291
|
+
], SbbCalendarElement.prototype, "max", 1);
|
|
1292
|
+
__decorateClass([
|
|
1293
|
+
property()
|
|
1294
|
+
], SbbCalendarElement.prototype, "now", 1);
|
|
1295
|
+
__decorateClass([
|
|
1296
|
+
property()
|
|
1297
|
+
], SbbCalendarElement.prototype, "selected", 1);
|
|
1298
|
+
__decorateClass([
|
|
1299
|
+
property({ attribute: "date-filter" })
|
|
1300
|
+
], SbbCalendarElement.prototype, "dateFilter", 2);
|
|
1301
|
+
__decorateClass([
|
|
1302
|
+
state()
|
|
1303
|
+
], SbbCalendarElement.prototype, "_activeDate", 2);
|
|
1304
|
+
__decorateClass([
|
|
1305
|
+
state()
|
|
1306
|
+
], SbbCalendarElement.prototype, "_selected", 2);
|
|
1307
|
+
__decorateClass([
|
|
1308
|
+
state()
|
|
1309
|
+
], SbbCalendarElement.prototype, "_wide", 1);
|
|
1310
|
+
__decorateClass([
|
|
1311
|
+
state()
|
|
1312
|
+
], SbbCalendarElement.prototype, "_calendarView", 2);
|
|
1313
|
+
SbbCalendarElement = __decorateClass([
|
|
1314
|
+
customElement("sbb-calendar")
|
|
1315
|
+
], SbbCalendarElement);
|
|
1316
|
+
export {
|
|
1317
|
+
SbbCalendarElement
|
|
1318
|
+
};
|
|
1319
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9jYWxlbmRhci9jYWxlbmRhci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICB0eXBlIENTU1Jlc3VsdEdyb3VwLFxuICBodG1sLFxuICBpc1NlcnZlcixcbiAgTGl0RWxlbWVudCxcbiAgbm90aGluZyxcbiAgdHlwZSBQcm9wZXJ0eVZhbHVlcyxcbiAgdHlwZSBUZW1wbGF0ZVJlc3VsdCxcbn0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IGNsYXNzTWFwIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvY2xhc3MtbWFwLmpzJztcblxuaW1wb3J0IHsgaXNBcnJvd0tleU9yUGFnZUtleXNQcmVzc2VkLCBzYmJJbnB1dE1vZGFsaXR5RGV0ZWN0b3IgfSBmcm9tICcuLi9jb3JlL2ExMXkuanMnO1xuaW1wb3J0IHsgU2JiQ29ubmVjdGVkQWJvcnRDb250cm9sbGVyLCBTYmJMYW5ndWFnZUNvbnRyb2xsZXIgfSBmcm9tICcuLi9jb3JlL2NvbnRyb2xsZXJzLmpzJztcbmltcG9ydCB0eXBlIHsgRGF0ZUFkYXB0ZXIgfSBmcm9tICcuLi9jb3JlL2RhdGV0aW1lLmpzJztcbmltcG9ydCB7XG4gIERBWVNfUEVSX1JPVyxcbiAgZGVmYXVsdERhdGVBZGFwdGVyLFxuICBNT05USFNfUEVSX1JPVyxcbiAgWUVBUlNfUEVSX1BBR0UsXG4gIFlFQVJTX1BFUl9ST1csXG59IGZyb20gJy4uL2NvcmUvZGF0ZXRpbWUuanMnO1xuaW1wb3J0IHsgaXNCcmVha3BvaW50IH0gZnJvbSAnLi4vY29yZS9kb20uanMnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnLi4vY29yZS9ldmVudGluZy5qcyc7XG5pbXBvcnQge1xuICBpMThuQ2FsZW5kYXJEYXRlU2VsZWN0aW9uLFxuICBpMThuTmV4dE1vbnRoLFxuICBpMThuTmV4dFllYXIsXG4gIGkxOG5OZXh0WWVhclJhbmdlLFxuICBpMThuUHJldmlvdXNNb250aCxcbiAgaTE4blByZXZpb3VzWWVhcixcbiAgaTE4blByZXZpb3VzWWVhclJhbmdlLFxuICBpMThuWWVhck1vbnRoU2VsZWN0aW9uLFxufSBmcm9tICcuLi9jb3JlL2kxOG4uanMnO1xuaW1wb3J0IHR5cGUgeyBTYmJEYXRlTGlrZSB9IGZyb20gJy4uL2NvcmUvaW50ZXJmYWNlcy5qcyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL2NhbGVuZGFyLnNjc3M/bGl0JmlubGluZSc7XG5cbmltcG9ydCAnLi4vYnV0dG9uL3NlY29uZGFyeS1idXR0b24uanMnO1xuaW1wb3J0ICcuLi9pY29uLmpzJztcbmltcG9ydCAnLi4vc2NyZWVuLXJlYWRlci1vbmx5LmpzJztcblxuLyoqXG4gKiBJbiBrZXlib2FyZCBuYXZpZ2F0aW9uLCB0aGUgY2VsbCdzIGluZGV4IGFuZCB0aGUgZWxlbWVudCdzIGluZGV4IGluIGl0cyBtb250aCAvIHllYXIgYmF0Y2ggbXVzdCBiZSBkaXN0aW5ndWlzaGVkO1xuICogdGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgbmF2aWdhdGlvbiBpbiB0aGUgdmVydGljYWwgZGlyZWN0aW9uIHVzaW5nIHNvbWUga2V5cyBpcyByZXN0cmljdGVkIHRvIGEgc2luZ2xlIG1vbnRoIGZvciBkYXlzLFxuICogYW5kIHRvIGEgc2luZ2xlIHJhbmdlIG9mIDI0IHllYXJzIGZvciB5ZWFycy4gV2hpbGUgdGhlIGxhdHRlciBpcyBlYXN5IHRvIHVuZGVyc3RhbmQsIHRoZSBjZWxsJ3MgaW5kZXggaXMgdGhlIGluZGV4XG4gKiBvZiB0aGUgZWxlbWVudCBpbiB0aGUgYXJyYXkgb2YgYWxsIHRoZSByZW5kZXJlZCBjZWxscy4gSW4gbm9uLXdpZGUgbW9kZSwgdGhlcmUncyBubyBpc3N1ZSBiZWNhdXNlIHRoZSBlbGVtZW50IGluZGV4XG4gKiBpcyBiYXNpY2FsbHkgdGhlIGNlbGwncyBpbmRleCBwbHVzIDEgKGVsZW1lbnQgd2l0aCBpbmRleCAwIGRpc3BsYXlzIHRoZSAxc3Qgb2YgbW9udGgsIGVsZW1lbnQgd2l0aCBpbmRleCAxIGRpc3BsYXlzIHRoZSAybmQgYW5kIHNvIG9uKS5cbiAqIEluIHdpZGUgbW9kZSwgdGhlIGNlbGwncyBpbmRleCBjYW4gZ28gZnJvbSAwIHRvIDQ3IGZvciB5ZWFycyAodHdvIGJhdGNoZXMgb2YgMjQgeWVhcnMpLCBhbmQgZnJvbSAwIHRvIGEgbWF4aW11bSBvZiA2MSBmb3IgZGF5c1xuICogKHR3byBjb25zZWN1dGl2ZSBtb250aHMgb2YgMzEgZGF5cywgYXMgSnVseS1BdWd1c3Qgb3IgRGVjZW1iZXItSmFudWFyeSksIGRlcGVuZGluZyBvbiB0aGUgbGVuZ3RocyBvZiB0aGUgcmVuZGVyZWQgbW9udGhzO1xuICogdGhlIGVsZW1lbnQgaW5kZXggaW5zdGVhZCBnb2VzIGZyb20gMCB0byBhIG1heCB2YWx1ZSBvZiAyNCBmb3IgeWVhcnMgYW5kIDMxIGZvciBkYXlzLlxuICogTW9yZW92ZXIsIGluIGRheSB2aWV3LCB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGRheSBvZiB0aGUgc2Vjb25kIHJlbmRlcmVkIG1vbnRoIGFuZCB0aGUgaW5kZXggb2YgdGhlIGxhc3QgcmVuZGVyZWQgZGF5XG4gKiBjYW4gYWxzbyB2YXJ5IGRlcGVuZGluZyBvbiB3aGljaCBtb250aHMgYXJlIHJlbmRlcmVkOyBmb3IgSnVseS1BdWd1c3QgdGhleSBhcmUgZXF1YWxzIHRvIDMxIGFuZCA2MSwgd2hpbGUgZm9yIEZlYnJ1YXJ5LU1hcmNoIHRoZXkgYXJlIDI4IGFuZCA1OC5cbiAqIFNvLCBzb21lIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBhcmUgbmVlZGVkLCBiZXNpZGUgdGhlIGNlbGwncyBpbmRleCwgdG8gY29ycmVjdGx5IGNhbGN1bGF0ZSB0aGUgZWxlbWVudCB0byBuYXZpZ2F0ZSB0by5cbiAqL1xuaW50ZXJmYWNlIENhbGVuZGFyS2V5Ym9hcmROYXZpZ2F0aW9uUGFyYW1ldGVycyB7XG4gIC8qKiBUaGUgZWxlbWVudCBpbmRleCB3aXRoaW4gaXRzIG1vbnRoIChvciB5ZWFyIHJhbmdlKS4gKi9cbiAgZWxlbWVudEluZGV4Rm9yV2lkZU1vZGU6IG51bWJlcjtcbiAgLyoqIEluIHdpZGUgbW9kZSwgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBzZWNvbmQgcGFuZWwsIG9yLCBhbHRlcm5hdGl2ZWx5LCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBmaXJzdCBwYW5lbC4gKi9cbiAgb2Zmc2V0Rm9yV2lkZU1vZGU6IG51bWJlcjtcbiAgLyoqIFRoZSBpbmRleCBvZiB0aGUgbGFzdCBlbGVtZW50IHdpdGhpbiB0aGUgZWxlbWVudCdzIG1vbnRoIChvciB5ZWFyIHJhbmdlKS4gKi9cbiAgbGFzdEVsZW1lbnRJbmRleEZvcldpZGVNb2RlOiBudW1iZXI7XG4gIC8qKiBUaGUgbnVtYmVyIG9mIGNlbGxzIGRpc3BsYXllZCBpbiBhIHNpbmdsZSByb3csIGRlcGVuZGluZyBvbiB0aGUgcmVuZGVyZWQgdmlldy4gKi9cbiAgdmVydGljYWxPZmZzZXQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXkge1xuICB2YWx1ZTogc3RyaW5nO1xuICBkYXlWYWx1ZTogc3RyaW5nO1xuICBtb250aFZhbHVlOiBzdHJpbmc7XG4gIHllYXJWYWx1ZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1vbnRoIHtcbiAgdmFsdWU6IHN0cmluZztcbiAgbG9uZ1ZhbHVlOiBzdHJpbmc7XG4gIG1vbnRoVmFsdWU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXZWVrZGF5IHtcbiAgbG9uZzogc3RyaW5nO1xuICBuYXJyb3c6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgQ2FsZW5kYXJWaWV3ID0gJ2RheScgfCAnbW9udGgnIHwgJ3llYXInO1xuXG4vKipcbiAqIEl0IGRpc3BsYXlzIGEgY2FsZW5kYXIgd2hpY2ggYWxsb3dzIHRvIGNob29zZSBhIGRhdGUuXG4gKlxuICogQGV2ZW50IHtDdXN0b21FdmVudDxUPn0gZGF0ZVNlbGVjdGVkIC0gRXZlbnQgZW1pdHRlZCBvbiBkYXRlIHNlbGVjdGlvbi5cbiAqL1xuQGN1c3RvbUVsZW1lbnQoJ3NiYi1jYWxlbmRhcicpXG5leHBvcnQgY2xhc3MgU2JiQ2FsZW5kYXJFbGVtZW50PFQgPSBEYXRlPiBleHRlbmRzIExpdEVsZW1lbnQge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBzdHlsZTtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBldmVudHMgPSB7XG4gICAgZGF0ZVNlbGVjdGVkOiAnZGF0ZVNlbGVjdGVkJyxcbiAgfSBhcyBjb25zdDtcblxuICAvKiogSWYgc2V0IHRvIHRydWUsIHR3byBtb250aHMgYXJlIGRpc3BsYXllZCAqL1xuICBAcHJvcGVydHkoeyB0eXBlOiBCb29sZWFuIH0pIHB1YmxpYyB3aWRlID0gZmFsc2U7XG5cbiAgLyoqIFRoZSBtaW5pbXVtIHZhbGlkIGRhdGUuIFRha2VzIFQgT2JqZWN0LCBJU09TdHJpbmcsIGFuZCBVbml4IFRpbWVzdGFtcCAobnVtYmVyIG9mIHNlY29uZHMgc2luY2UgSmFuIDEsIDE5NzApLiAqL1xuICBAcHJvcGVydHkoKVxuICBwdWJsaWMgc2V0IG1pbih2YWx1ZTogU2JiRGF0ZUxpa2U8VD4gfCBudWxsKSB7XG4gICAgdGhpcy5fbWluID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0VmFsaWREYXRlT3JOdWxsKHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKHZhbHVlKSk7XG4gIH1cbiAgcHVibGljIGdldCBtaW4oKTogVCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9taW4gPz8gbnVsbDtcbiAgfVxuICBwcml2YXRlIF9taW4/OiBUIHwgbnVsbDtcblxuICAvKiogVGhlIG1heGltdW0gdmFsaWQgZGF0ZS4gVGFrZXMgVCBPYmplY3QsIElTT1N0cmluZywgYW5kIFVuaXggVGltZXN0YW1wIChudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSBKYW4gMSwgMTk3MCkuICovXG4gIEBwcm9wZXJ0eSgpXG4gIHB1YmxpYyBzZXQgbWF4KHZhbHVlOiBTYmJEYXRlTGlrZTxUPiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX21heCA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldFZhbGlkRGF0ZU9yTnVsbCh0aGlzLl9kYXRlQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSkpO1xuICB9XG4gIHB1YmxpYyBnZXQgbWF4KCk6IFQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4ID8/IG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBfbWF4PzogVCB8IG51bGw7XG5cbiAgLyoqIEEgY29uZmlndXJlZCBkYXRlIHdoaWNoIGFjdHMgYXMgdGhlIGN1cnJlbnQgZGF0ZSBpbnN0ZWFkIG9mIHRoZSByZWFsIGN1cnJlbnQgZGF0ZS4gUmVjb21tZW5kZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMuICovXG4gIEBwcm9wZXJ0eSgpXG4gIHB1YmxpYyBzZXQgbm93KHZhbHVlOiBTYmJEYXRlTGlrZTxUPiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX25vdyA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldFZhbGlkRGF0ZU9yTnVsbCh0aGlzLl9kYXRlQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSkpO1xuICB9XG4gIHB1YmxpYyBnZXQgbm93KCk6IFQge1xuICAgIHJldHVybiB0aGlzLl9ub3cgPz8gdGhpcy5fZGF0ZUFkYXB0ZXIudG9kYXkoKTtcbiAgfVxuICBwcml2YXRlIF9ub3c6IFQgfCBudWxsID0gbnVsbDtcblxuICAvKiogVGhlIHNlbGVjdGVkIGRhdGUuIFRha2VzIFQgT2JqZWN0LCBJU09TdHJpbmcsIGFuZCBVbml4IFRpbWVzdGFtcCAobnVtYmVyIG9mIHNlY29uZHMgc2luY2UgSmFuIDEsIDE5NzApLiAqL1xuICBAcHJvcGVydHkoKVxuICBwdWJsaWMgc2V0IHNlbGVjdGVkKHZhbHVlOiBTYmJEYXRlTGlrZTxUPiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3NlbGVjdGVkRGF0ZSA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldFZhbGlkRGF0ZU9yTnVsbCh0aGlzLl9kYXRlQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSkpO1xuICAgIGlmIChcbiAgICAgICEhdGhpcy5fc2VsZWN0ZWREYXRlICYmXG4gICAgICAoIXRoaXMuX2lzRGF5SW5SYW5nZSh0aGlzLl9kYXRlQWRhcHRlci50b0lzbzg2MDEodGhpcy5fc2VsZWN0ZWREYXRlKSkgfHxcbiAgICAgICAgdGhpcy5fZGF0ZUZpbHRlcih0aGlzLl9zZWxlY3RlZERhdGUpKVxuICAgICkge1xuICAgICAgdGhpcy5fc2VsZWN0ZWQgPSB0aGlzLl9kYXRlQWRhcHRlci50b0lzbzg2MDEodGhpcy5fc2VsZWN0ZWREYXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc2VsZWN0ZWQgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWQoKTogVCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZERhdGUgPz8gbnVsbDtcbiAgfVxuICBwcml2YXRlIF9zZWxlY3RlZERhdGU/OiBUIHwgbnVsbDtcblxuICAvKiogQSBmdW5jdGlvbiB1c2VkIHRvIGZpbHRlciBvdXQgZGF0ZXMuICovXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2RhdGUtZmlsdGVyJyB9KSBwdWJsaWMgZGF0ZUZpbHRlcj86IChkYXRlOiBUIHwgbnVsbCkgPT4gYm9vbGVhbjtcblxuICBwcml2YXRlIF9kYXRlQWRhcHRlcjogRGF0ZUFkYXB0ZXI8VD4gPSBkZWZhdWx0RGF0ZUFkYXB0ZXIgYXMgdW5rbm93biBhcyBEYXRlQWRhcHRlcjxUPjtcblxuICAvKiogRXZlbnQgZW1pdHRlZCBvbiBkYXRlIHNlbGVjdGlvbi4gKi9cbiAgcHJpdmF0ZSBfZGF0ZVNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8VD4gPSBuZXcgRXZlbnRFbWl0dGVyKFxuICAgIHRoaXMsXG4gICAgU2JiQ2FsZW5kYXJFbGVtZW50LmV2ZW50cy5kYXRlU2VsZWN0ZWQsXG4gICk7XG5cbiAgLyoqIFRoZSBjdXJyZW50bHkgYWN0aXZlIGRhdGUuICovXG4gIEBzdGF0ZSgpIHByaXZhdGUgX2FjdGl2ZURhdGU6IFQgPSB0aGlzLm5vdztcblxuICAvKiogVGhlIHNlbGVjdGVkIGRhdGUgYXMgSVNPU3RyaW5nLiAqL1xuICBAc3RhdGUoKSBwcml2YXRlIF9zZWxlY3RlZD86IHN0cmluZztcblxuICAvKiogVGhlIGN1cnJlbnQgd2lkZSBwcm9wZXJ0eSBjb25zaWRlcmluZyBwcm9wZXJ0eSB2YWx1ZSBhbmQgYnJlYWtwb2ludHMuIEZyb20gemVybyB0byBzbWFsbCBgd2lkZWAgaGFzIGFsd2F5cyB0byBiZSBmYWxzZS4gKi9cbiAgQHN0YXRlKClcbiAgcHJpdmF0ZSBzZXQgX3dpZGUod2lkZTogYm9vbGVhbikge1xuICAgIHRoaXMudG9nZ2xlQXR0cmlidXRlKCdkYXRhLXdpZGUnLCB3aWRlKTtcbiAgfVxuICBwcml2YXRlIGdldCBfd2lkZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoJ2RhdGEtd2lkZScpO1xuICB9XG5cbiAgQHN0YXRlKCkgcHJpdmF0ZSBfY2FsZW5kYXJWaWV3OiBDYWxlbmRhclZpZXcgPSAnZGF5JztcblxuICBwcml2YXRlIF9uZXh0Q2FsZW5kYXJWaWV3OiBDYWxlbmRhclZpZXcgPSAnZGF5JztcblxuICAvKiogQSBsaXN0IG9mIGRheXMsIGluIHR3byBmb3JtYXRzIChsb25nIGFuZCBzaW5nbGUgY2hhcikuICovXG4gIHByaXZhdGUgX3dlZWtkYXlzITogV2Vla2RheVtdO1xuXG4gIC8qKiBHcmlkIG9mIGNhbGVuZGFyIGNlbGxzIHJlcHJlc2VudGluZyB0aGUgZGF0ZXMgb2YgdGhlIG1vbnRoLiAqL1xuICBwcml2YXRlIF93ZWVrczogRGF5W11bXSA9IFtdO1xuXG4gIC8qKiBHcmlkIG9mIGNhbGVuZGFyIGNlbGxzIHJlcHJlc2VudGluZyBtb250aHMuICovXG4gIHByaXZhdGUgX21vbnRocyE6IE1vbnRoW11bXTtcblxuICAvKiogR3JpZCBvZiBjYWxlbmRhciBjZWxscyByZXByZXNlbnRpbmcgeWVhcnMuICovXG4gIHByaXZhdGUgX3llYXJzITogbnVtYmVyW11bXTtcblxuICAvKiogR3JpZCBvZiBjYWxlbmRhciBjZWxscyByZXByZXNlbnRpbmcgeWVhcnMgZm9yIHRoZSB3aWRlIHZpZXcuICovXG4gIHByaXZhdGUgX25leHRNb250aFllYXJzITogbnVtYmVyW11bXTtcblxuICAvKiogR3JpZCBvZiBjYWxlbmRhciBjZWxscyByZXByZXNlbnRpbmcgdGhlIGRhdGVzIG9mIHRoZSBuZXh0IG1vbnRoLiAqL1xuICBwcml2YXRlIF9uZXh0TW9udGhXZWVrcyE6IERheVtdW107XG5cbiAgLyoqIEFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIHRoZSBtb250aCBuYW1lcyBpbiB0aGUgY3VycmVudCBsYW5ndWFnZS4gKi9cbiAgcHJpdmF0ZSBfbW9udGhOYW1lczogc3RyaW5nW10gPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRNb250aE5hbWVzKCdsb25nJyk7XG5cbiAgLyoqIEEgbGlzdCBvZiBidXR0b25zIGNvcnJlc3BvbmRpbmcgdG8gZGF5cywgbW9udGhzIG9yIHllYXJzIGRlcGVuZGluZyBvbiB0aGUgdmlldy4gKi9cbiAgcHJpdmF0ZSBnZXQgX2NlbGxzKCk6IEhUTUxCdXR0b25FbGVtZW50W10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKFxuICAgICAgdGhpcy5zaGFkb3dSb290IS5xdWVyeVNlbGVjdG9yQWxsKCcuc2JiLWNhbGVuZGFyX19jZWxsJykgPz8gW10sXG4gICAgKSBhcyBIVE1MQnV0dG9uRWxlbWVudFtdO1xuICB9XG5cbiAgLyoqIFRoZSBjaG9zZW4geWVhciBpbiB0aGUgeWVhciBzZWxlY3Rpb24gdmlldy4gKi9cbiAgcHJpdmF0ZSBfY2hvc2VuWWVhcj86IG51bWJlcjtcblxuICAvKiogVGhlIGNob3NlbiBtb250aCBpbiB0aGUgeWVhciBzZWxlY3Rpb24gdmlldy4gKi9cbiAgcHJpdmF0ZSBfY2hvc2VuTW9udGg/OiBudW1iZXI7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGZvY3VzIHNob3VsZCBiZSByZXNldCBvbiBmb2N1c0NlbGwuICovXG4gIHByaXZhdGUgX3Jlc2V0Rm9jdXMgPSBmYWxzZTtcblxuICBwcml2YXRlIF9pbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX2Fib3J0ID0gbmV3IFNiYkNvbm5lY3RlZEFib3J0Q29udHJvbGxlcih0aGlzKTtcbiAgcHJpdmF0ZSBfbGFuZ3VhZ2UgPSBuZXcgU2JiTGFuZ3VhZ2VDb250cm9sbGVyKHRoaXMpLndpdGhIYW5kbGVyKCgpID0+IHtcbiAgICB0aGlzLl9tb250aE5hbWVzID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TW9udGhOYW1lcygnbG9uZycpO1xuICAgIHRoaXMuX2NyZWF0ZU1vbnRoUm93cygpO1xuICB9KTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9jcmVhdGVNb250aFJvd3MoKTtcbiAgICB0aGlzLl9zZXRXZWVrZGF5cygpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgX2RhdGVGaWx0ZXIoKTogKGRhdGU6IFQpID0+IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRhdGVGaWx0ZXIgPz8gKCgpID0+IHRydWUpO1xuICB9XG5cbiAgLyoqIFJlc2V0cyB0aGUgYWN0aXZlIG1vbnRoIGFjY29yZGluZyB0byB0aGUgbmV3IHN0YXRlIG9mIHRoZSBjYWxlbmRhci4gKi9cbiAgcHVibGljIHJlc2V0UG9zaXRpb24oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2NhbGVuZGFyVmlldyAhPT0gJ2RheScpIHtcbiAgICAgIHRoaXMuX3Jlc2V0VG9EYXlWaWV3KCk7XG4gICAgfVxuICAgIHRoaXMuX2FjdGl2ZURhdGUgPSB0aGlzLnNlbGVjdGVkID8/IHRoaXMubm93O1xuICAgIHRoaXMuX2luaXQoKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMucmVzZXRQb3NpdGlvbigpO1xuICAgIHRoaXMuZm9jdXMgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9yZXNldEZvY3VzID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2ZvY3VzQ2VsbCgpO1xuICAgIH07XG4gICAgZ2xvYmFsVGhpcy53aW5kb3c/LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsICgpID0+IHRoaXMuX2luaXQoKSwge1xuICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICAgIHNpZ25hbDogdGhpcy5fYWJvcnQuc2lnbmFsLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHdpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgc3VwZXIud2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICBpZiAoIXRoaXMuX2luaXRpYWxpemVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnd2lkZScpKSB7XG4gICAgICB0aGlzLnJlc2V0UG9zaXRpb24oKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci51cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTtcbiAgICAvLyBUaGUgY2FsZW5kYXIgbmVlZHMgdG8gY2FsY3VsYXRlIHRhYi1pbmRleGVzIG9uIGZpcnN0IHJlbmRlcixcbiAgICAvLyBhbmQgZXZlcnkgdGltZSBhIGRhdGUgaXMgc2VsZWN0ZWQgb3IgdGhlIG1vbnRoIHZpZXcgY2hhbmdlcy5cbiAgICB0aGlzLl9zZXRUYWJJbmRleCgpO1xuICAgIC8vIFdoZW4gY2hhbmdpbmcgdmlldyB0byB5ZWFyL21vbnRoLCB0aGUgdGFiaW5kZXggaXMgY2hhbmdlZCwgYnV0IHRoZSBmb2N1c2VkIGVsZW1lbnQgaXMgbm90LFxuICAgIC8vIHNvIGlmIHRoZSBuYXZpZ2F0aW9uIGlzIGRvbmUgdmlhIGtleWJvYXJkLCB0aGVyZSdzIHRoZSBuZWVkXG4gICAgLy8gdG8gY2FsbCB0aGUgYF9mb2N1c0NlbGwoKWAgbWV0aG9kIGV4cGxpY2l0bHkgdG8gY29ycmVjdGx5IHNldCB0aGUgZm9jdXMuXG4gICAgaWYgKHNiYklucHV0TW9kYWxpdHlEZXRlY3Rvci5tb3N0UmVjZW50TW9kYWxpdHkgPT09ICdrZXlib2FyZCcpIHtcbiAgICAgIHRoaXMuX2ZvY3VzQ2VsbCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBJbml0aWFsaXplcyB0aGUgY29tcG9uZW50LiAqL1xuICBwcml2YXRlIF9pbml0KGFjdGl2ZURhdGU/OiBUKTogdm9pZCB7XG4gICAgLy9EdWUgdG8gaXRzIGNvbXBsZXhpdHksIHRoZSBjYWxlZGFyIGlzIG9ubHkgaW5pdGlhbGl6ZWQgb24gY2xpZW50IHNpZGVcbiAgICBpZiAoaXNTZXJ2ZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoYWN0aXZlRGF0ZSkge1xuICAgICAgdGhpcy5fYXNzaWduQWN0aXZlRGF0ZShhY3RpdmVEYXRlKTtcbiAgICB9XG4gICAgdGhpcy5fd2lkZSA9IGlzQnJlYWtwb2ludCgnbWVkaXVtJykgJiYgdGhpcy53aWRlO1xuICAgIHRoaXMuX3dlZWtzID0gdGhpcy5fY3JlYXRlV2Vla1Jvd3ModGhpcy5fYWN0aXZlRGF0ZSk7XG4gICAgdGhpcy5feWVhcnMgPSB0aGlzLl9jcmVhdGVZZWFyUm93cygpO1xuICAgIHRoaXMuX25leHRNb250aFdlZWtzID0gW1tdXTtcbiAgICB0aGlzLl9uZXh0TW9udGhZZWFycyA9IFtbXV07XG4gICAgaWYgKHRoaXMuX3dpZGUpIHtcbiAgICAgIGNvbnN0IG5leHRNb250aERhdGUgPSB0aGlzLl9kYXRlQWRhcHRlci5hZGRDYWxlbmRhck1vbnRocyh0aGlzLl9hY3RpdmVEYXRlLCAxKTtcbiAgICAgIHRoaXMuX25leHRNb250aFdlZWtzID0gdGhpcy5fY3JlYXRlV2Vla1Jvd3MobmV4dE1vbnRoRGF0ZSk7XG4gICAgICB0aGlzLl9uZXh0TW9udGhZZWFycyA9IHRoaXMuX2NyZWF0ZVllYXJSb3dzKFlFQVJTX1BFUl9QQUdFKTtcbiAgICB9XG4gICAgdGhpcy5faW5pdGlhbGl6ZWQgPSB0cnVlO1xuICB9XG5cbiAgLyoqIEZvY3VzZXMgb24gYSBkYXkgY2VsbCBwcmlvcml0aXppbmcgdGhlIHNlbGVjdGVkIGRheSwgdGhlIGN1cnJlbnQgZGF5LCBhbmQgbGFzdGx5LCB0aGUgZmlyc3Qgc2VsZWN0YWJsZSBkYXkuICovXG4gIHByaXZhdGUgX2ZvY3VzQ2VsbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcmVzZXRGb2N1cykge1xuICAgICAgdGhpcy5fZ2V0Rmlyc3RGb2N1c2FibGUoKT8uZm9jdXMoKTtcbiAgICAgIHRoaXMuX3Jlc2V0Rm9jdXMgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKiogQ3JlYXRlcyB0aGUgYXJyYXkgb2Ygd2Vla2RheXMuICovXG4gIHByaXZhdGUgX3NldFdlZWtkYXlzKCk6IHZvaWQge1xuICAgIGNvbnN0IG5hcnJvd1dlZWtkYXlzOiBzdHJpbmdbXSA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldERheU9mV2Vla05hbWVzKCduYXJyb3cnKTtcbiAgICBjb25zdCBsb25nV2Vla2RheXM6IHN0cmluZ1tdID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0RGF5T2ZXZWVrTmFtZXMoJ2xvbmcnKTtcbiAgICBjb25zdCB3ZWVrZGF5czogV2Vla2RheVtdID0gbG9uZ1dlZWtkYXlzLm1hcCgobG9uZzogc3RyaW5nLCBpOiBudW1iZXIpID0+ICh7XG4gICAgICBsb25nLFxuICAgICAgbmFycm93OiBuYXJyb3dXZWVrZGF5c1tpXSxcbiAgICB9KSk7XG5cbiAgICAvLyBSb3RhdGVzIHRoZSBsYWJlbHMgZm9yIGRheXMgb2YgdGhlIHdlZWsgYmFzZWQgb24gdGhlIGNvbmZpZ3VyZWQgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgIGNvbnN0IGZpcnN0RGF5T2ZXZWVrOiBudW1iZXIgPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRGaXJzdERheU9mV2VlaygpO1xuICAgIHRoaXMuX3dlZWtkYXlzID0gd2Vla2RheXMuc2xpY2UoZmlyc3REYXlPZldlZWspLmNvbmNhdCh3ZWVrZGF5cy5zbGljZSgwLCBmaXJzdERheU9mV2VlaykpO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgdGhlIHJvd3MgZm9yIGVhY2ggd2Vlay4gKi9cbiAgcHJpdmF0ZSBfY3JlYXRlV2Vla1Jvd3ModmFsdWU6IFQpOiBEYXlbXVtdIHtcbiAgICBjb25zdCBkYXlzSW5Nb250aDogbnVtYmVyID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TnVtRGF5c0luTW9udGgodmFsdWUpO1xuICAgIGNvbnN0IGRhdGVOYW1lczogc3RyaW5nW10gPSB0aGlzLl9kYXRlQWRhcHRlci5nZXREYXRlTmFtZXMoKTtcbiAgICBjb25zdCB3ZWVrczogRGF5W11bXSA9IFtbXV07XG4gICAgY29uc3Qgd2Vla09mZnNldCA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldEZpcnN0V2Vla09mZnNldCh2YWx1ZSk7XG4gICAgZm9yIChsZXQgaSA9IDAsIGNlbGwgPSB3ZWVrT2Zmc2V0OyBpIDwgZGF5c0luTW9udGg7IGkrKywgY2VsbCsrKSB7XG4gICAgICBpZiAoY2VsbCA9PT0gREFZU19QRVJfUk9XKSB7XG4gICAgICAgIHdlZWtzLnB1c2goW10pO1xuICAgICAgICBjZWxsID0gMDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKFxuICAgICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHZhbHVlKSxcbiAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TW9udGgodmFsdWUpLFxuICAgICAgICBpICsgMSxcbiAgICAgICkhO1xuICAgICAgd2Vla3Nbd2Vla3MubGVuZ3RoIC0gMV0ucHVzaCh7XG4gICAgICAgIHZhbHVlOiB0aGlzLl9kYXRlQWRhcHRlci50b0lzbzg2MDEoZGF0ZSksXG4gICAgICAgIGRheVZhbHVlOiBkYXRlTmFtZXNbaV0sXG4gICAgICAgIG1vbnRoVmFsdWU6IFN0cmluZyh0aGlzLl9kYXRlQWRhcHRlci5nZXRNb250aChkYXRlKSksXG4gICAgICAgIHllYXJWYWx1ZTogU3RyaW5nKHRoaXMuX2RhdGVBZGFwdGVyLmdldFllYXIoZGF0ZSkpLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB3ZWVrcztcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIHRoZSByb3dzIGZvciB0aGUgbW9udGggc2VsZWN0aW9uIHZpZXcuICovXG4gIHByaXZhdGUgX2NyZWF0ZU1vbnRoUm93cygpOiB2b2lkIHtcbiAgICBjb25zdCBzaG9ydE5hbWVzOiBzdHJpbmdbXSA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoTmFtZXMoJ3Nob3J0Jyk7XG4gICAgY29uc3QgbW9udGhzOiBNb250aFtdID0gbmV3IEFycmF5KDEyKS5maWxsKG51bGwpLm1hcChcbiAgICAgIChfLCBpOiBudW1iZXIpOiBNb250aCA9PiAoe1xuICAgICAgICB2YWx1ZTogc2hvcnROYW1lc1tpXSxcbiAgICAgICAgbG9uZ1ZhbHVlOiB0aGlzLl9tb250aE5hbWVzW2ldLFxuICAgICAgICBtb250aFZhbHVlOiBpICsgMSxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgY29uc3Qgcm93czogbnVtYmVyID0gMTIgLyBNT05USFNfUEVSX1JPVztcbiAgICBjb25zdCBtb250aEFycmF5OiBNb250aFtdW10gPSBbXTtcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICBtb250aEFycmF5LnB1c2gobW9udGhzLnNsaWNlKE1PTlRIU19QRVJfUk9XICogaSwgTU9OVEhTX1BFUl9ST1cgKiAoaSArIDEpKSk7XG4gICAgfVxuICAgIHRoaXMuX21vbnRocyA9IG1vbnRoQXJyYXk7XG4gIH1cblxuICAvKiogQ3JlYXRlcyB0aGUgcm93cyBmb3IgdGhlIHllYXIgc2VsZWN0aW9uIHZpZXcuICovXG4gIHByaXZhdGUgX2NyZWF0ZVllYXJSb3dzKG9mZnNldDogbnVtYmVyID0gMCk6IG51bWJlcltdW10ge1xuICAgIGNvbnN0IHN0YXJ0VmFsdWVZZWFyVmlldzogbnVtYmVyID0gdGhpcy5fZ2V0U3RhcnRWYWx1ZVllYXJWaWV3KCk7XG4gICAgY29uc3QgYWxsWWVhcnM6IG51bWJlcltdID0gbmV3IEFycmF5KFlFQVJTX1BFUl9QQUdFKVxuICAgICAgLmZpbGwoMClcbiAgICAgIC5tYXAoKF8sIGk6IG51bWJlcikgPT4gc3RhcnRWYWx1ZVllYXJWaWV3ICsgb2Zmc2V0ICsgaSk7XG4gICAgY29uc3Qgcm93czogbnVtYmVyID0gWUVBUlNfUEVSX1BBR0UgLyBZRUFSU19QRVJfUk9XO1xuICAgIGNvbnN0IHllYXJBcnJheTogbnVtYmVyW11bXSA9IFtdO1xuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgIHllYXJBcnJheS5wdXNoKGFsbFllYXJzLnNsaWNlKFlFQVJTX1BFUl9ST1cgKiBpLCBZRUFSU19QRVJfUk9XICogKGkgKyAxKSkpO1xuICAgIH1cbiAgICByZXR1cm4geWVhckFycmF5O1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIGZpcnN0IHllYXIgdGhhdCB3aWxsIGJlIHNob3duIGluIHRoZSB5ZWFyIHNlbGVjdGlvbiBwYW5lbC5cbiAgICogSWYgYG1pbkRhdGVgIGFuZCBgbWF4RGF0ZWAgYXJlIGJvdGggbnVsbCwgdGhlIHN0YXJ0aW5nIHllYXIgaXMgY2FsY3VsYXRlZCBhc1xuICAgKiB0aGUgbXVsdGlwbGUgb2YgWUVBUlNfUEVSX1BBR0UgY2xvc2VzdCB0byBhbmQgbGVzcyB0aGFuIGFjdGl2ZURhdGUsXG4gICAqIGUuZy4sIHdpdGggYFlFQVJTX1BFUl9QQUdFYCA9IDI0IGFuZCBgYWN0aXZlRGF0ZWAgPSAyMDIwLCB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gMjAxNiAoMjQgKiA4MyksXG4gICAqIHdoaWxlIHdpdGggYGFjdGl2ZURhdGVgID0gMjAwMCwgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIDE5OTIgKDI0ICogODIpLlxuICAgKiBJZiBgbWluRGF0ZWAgaXMgbm90IG51bGwsIGl0IHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgeWVhcjsgaWYgYG1heERhdGVgIGlzIG5vdCBudWxsLFxuICAgKiBpdCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHllYXIgbWludXMgYFlFQVJTX1BFUl9QQUdFYCwgc28gdGhhdCB0aGUgYG1heERhdGVgIGlzIHRoZSBsYXN0IHJlbmRlcmVkIHllYXIuXG4gICAqIElmIGJvdGggYXJlIG5vdCBudWxsLCBgbWF4RGF0ZWAgaGFzIHByaW9yaXR5IG92ZXIgYG1pbkRhdGVgLlxuICAgKi9cbiAgcHJpdmF0ZSBfZ2V0U3RhcnRWYWx1ZVllYXJWaWV3KCk6IG51bWJlciB7XG4gICAgbGV0IHN0YXJ0aW5nWWVhciA9IDA7XG4gICAgaWYgKHRoaXMubWF4KSB7XG4gICAgICBzdGFydGluZ1llYXIgPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHRoaXMubWF4KSAtIFlFQVJTX1BFUl9QQUdFICsgMTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubWluKSB7XG4gICAgICBzdGFydGluZ1llYXIgPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHRoaXMubWluKTtcbiAgICB9XG4gICAgY29uc3QgYWN0aXZlWWVhciA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldFllYXIodGhpcy5fYWN0aXZlRGF0ZSk7XG4gICAgcmV0dXJuIChcbiAgICAgIGFjdGl2ZVllYXIgLVxuICAgICAgKCgoKGFjdGl2ZVllYXIgLSBzdGFydGluZ1llYXIpICUgWUVBUlNfUEVSX1BBR0UpICsgWUVBUlNfUEVSX1BBR0UpICUgWUVBUlNfUEVSX1BBR0UpXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBDaGVja3MgaWYgZGF0ZSBpcyB3aXRoaW4gdGhlIG1pbi1tYXggcmFuZ2UuICovXG4gIHByaXZhdGUgX2lzRGF5SW5SYW5nZShkYXRlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuX21pbiAmJiAhdGhpcy5fbWF4KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgaXNCZWZvcmVNaW46IGJvb2xlYW4gPVxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuaXNWYWxpZCh0aGlzLl9taW4pICYmXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5jb21wYXJlRGF0ZSh0aGlzLl9taW4hLCB0aGlzLl9kYXRlQWRhcHRlci5kZXNlcmlhbGl6ZShkYXRlKSEpID4gMDtcbiAgICBjb25zdCBpc0FmdGVyTWF4OiBib29sZWFuID1cbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmlzVmFsaWQodGhpcy5fbWF4KSAmJlxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuY29tcGFyZURhdGUodGhpcy5fbWF4ISwgdGhpcy5fZGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUoZGF0ZSkhKSA8IDA7XG4gICAgcmV0dXJuICEoaXNCZWZvcmVNaW4gfHwgaXNBZnRlck1heCk7XG4gIH1cblxuICBwcml2YXRlIF9pc01vbnRoSW5SYW5nZShtb250aDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLl9taW4gJiYgIXRoaXMuX21heCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGlzQmVmb3JlTWluOiBib29sZWFuID1cbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmlzVmFsaWQodGhpcy5fbWluKSAmJlxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcih0aGlzLl9taW4hKSA+PSB0aGlzLl9jaG9zZW5ZZWFyISAmJlxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TW9udGgodGhpcy5fbWluISkgPiBtb250aDtcbiAgICBjb25zdCBpc0FmdGVyTWF4OiBib29sZWFuID1cbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmlzVmFsaWQodGhpcy5fbWF4KSAmJlxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcih0aGlzLl9tYXghKSA8PSB0aGlzLl9jaG9zZW5ZZWFyISAmJlxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TW9udGgodGhpcy5fbWF4ISkgPCBtb250aDtcbiAgICByZXR1cm4gIShpc0JlZm9yZU1pbiB8fCBpc0FmdGVyTWF4KTtcbiAgfVxuXG4gIHByaXZhdGUgX2lzWWVhckluUmFuZ2UoeWVhcjogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLl9taW4gJiYgIXRoaXMuX21heCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGlzQmVmb3JlTWluOiBib29sZWFuID1cbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmlzVmFsaWQodGhpcy5fbWluKSAmJiB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHRoaXMuX21pbiEpID4geWVhcjtcbiAgICBjb25zdCBpc0FmdGVyTWF4OiBib29sZWFuID1cbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmlzVmFsaWQodGhpcy5fbWF4KSAmJiB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHRoaXMuX21heCEpIDwgeWVhcjtcbiAgICByZXR1cm4gIShpc0JlZm9yZU1pbiB8fCBpc0FmdGVyTWF4KTtcbiAgfVxuXG4gIC8vIEltcGxlbWVudGF0aW9uIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9jb21wb25lbnRzL2Jsb2IvbWFpbi9zcmMvbWF0ZXJpYWwvZGF0ZXBpY2tlci95ZWFyLXZpZXcudHMjTDM2NlxuICBwcml2YXRlIF9pc01vbnRoRmlsdGVyZWRPdXQobW9udGg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5kYXRlRmlsdGVyKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBmaXJzdE9mTW9udGggPSB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKHRoaXMuX2Nob3NlblllYXIhLCBtb250aCwgMSkhO1xuICAgIGZvciAoXG4gICAgICBsZXQgZGF0ZTogVCA9IGZpcnN0T2ZNb250aDtcbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoKGRhdGUpID09IG1vbnRoO1xuICAgICAgZGF0ZSA9IHRoaXMuX2RhdGVBZGFwdGVyLmFkZENhbGVuZGFyRGF5cyhkYXRlLCAxKVxuICAgICkge1xuICAgICAgaWYgKHRoaXMuZGF0ZUZpbHRlcihkYXRlKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBJbXBsZW1lbnRhdGlvbiBhZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9ibG9iL21haW4vc3JjL21hdGVyaWFsL2RhdGVwaWNrZXIvbXVsdGkteWVhci12aWV3LnRzI0wzNTFcbiAgcHJpdmF0ZSBfaXNZZWFyRmlsdGVyZWRPdXQoeWVhcjogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmRhdGVGaWx0ZXIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGZpcnN0T2ZZZWFyID0gdGhpcy5fZGF0ZUFkYXB0ZXIuY3JlYXRlRGF0ZSh5ZWFyLCAxLCAxKSE7XG4gICAgZm9yIChcbiAgICAgIGxldCBkYXRlOiBUID0gZmlyc3RPZlllYXI7XG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKGRhdGUpID09IHllYXI7XG4gICAgICBkYXRlID0gdGhpcy5fZGF0ZUFkYXB0ZXIuYWRkQ2FsZW5kYXJEYXlzKGRhdGUsIDEpXG4gICAgKSB7XG4gICAgICBpZiAodGhpcy5kYXRlRmlsdGVyKGRhdGUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKiBFbWl0cyB0aGUgc2VsZWN0ZWQgZGF0ZSBhbmQgc2V0cyBpdCBpbnRlcm5hbGx5LiAqL1xuICBwcml2YXRlIF9zZWxlY3REYXRlKGRheTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fY2hvc2VuTW9udGggPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fY2hvc2VuWWVhciA9IHVuZGVmaW5lZDtcbiAgICBpZiAodGhpcy5fc2VsZWN0ZWQgIT09IGRheSkge1xuICAgICAgdGhpcy5fc2VsZWN0ZWQgPSBkYXk7XG4gICAgICB0aGlzLl9kYXRlU2VsZWN0ZWQuZW1pdCh0aGlzLl9kYXRlQWRhcHRlci5kZXNlcmlhbGl6ZShkYXkpISk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfYXNzaWduQWN0aXZlRGF0ZShkYXRlOiBUKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX21pbiAmJiB0aGlzLl9kYXRlQWRhcHRlci5jb21wYXJlRGF0ZSh0aGlzLl9taW4sIGRhdGUpID4gMCkge1xuICAgICAgdGhpcy5fYWN0aXZlRGF0ZSA9IHRoaXMuX21pbjtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX21heCAmJiB0aGlzLl9kYXRlQWRhcHRlci5jb21wYXJlRGF0ZSh0aGlzLl9tYXgsIGRhdGUpIDwgMCkge1xuICAgICAgdGhpcy5fYWN0aXZlRGF0ZSA9IHRoaXMuX21heDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fYWN0aXZlRGF0ZSA9IGRhdGU7XG4gIH1cblxuICAvKiogR29lcyB0byB0aGUgbW9udGggaWRlbnRpZmllZCBieSB0aGUgc2hpZnQuICovXG4gIHByaXZhdGUgX2dvVG9EaWZmZXJlbnRNb250aChtb250aHM6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2luaXQodGhpcy5fZGF0ZUFkYXB0ZXIuYWRkQ2FsZW5kYXJNb250aHModGhpcy5fYWN0aXZlRGF0ZSwgbW9udGhzKSk7XG4gIH1cblxuICBwcml2YXRlIF9nb1RvRGlmZmVyZW50WWVhcih5ZWFyczogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fY2hvc2VuWWVhciEgKz0geWVhcnM7XG4gICAgLy8gQ2FuJ3QgdXNlIGBfYXNzaWduQWN0aXZlRGF0ZSguLi4pYCBoZXJlLCBiZWNhdXNlIGl0IHdpbGwgc2V0IGl0IHRvIG1pbi9tYXggdmFsdWUgaWYgYXJndW1lbnQgaXMgb3V0IG9mIHJhbmdlXG4gICAgdGhpcy5fYWN0aXZlRGF0ZSA9IHRoaXMuX2RhdGVBZGFwdGVyLmNyZWF0ZURhdGUoXG4gICAgICB0aGlzLl9jaG9zZW5ZZWFyISxcbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoKHRoaXMuX2FjdGl2ZURhdGUpLFxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0RGF0ZSh0aGlzLl9hY3RpdmVEYXRlKSxcbiAgICApO1xuICAgIHRoaXMuX2luaXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dvVG9EaWZmZXJlbnRZZWFyUmFuZ2UoeWVhcnM6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2luaXQodGhpcy5fZGF0ZUFkYXB0ZXIuYWRkQ2FsZW5kYXJZZWFycyh0aGlzLl9hY3RpdmVEYXRlLCB5ZWFycykpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcHJldkRpc2FibGVkKHByZXZEYXRlOiBUKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLl9taW4pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2RhdGVBZGFwdGVyLmNvbXBhcmVEYXRlKHByZXZEYXRlLCB0aGlzLl9taW4pIDwgMDtcbiAgfVxuXG4gIHByaXZhdGUgX25leHREaXNhYmxlZChuZXh0RGF0ZTogVCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5fbWF4KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9kYXRlQWRhcHRlci5jb21wYXJlRGF0ZShuZXh0RGF0ZSwgdGhpcy5fbWF4KSA+IDA7XG4gIH1cblxuICAvKiogQ2hlY2tzIGlmIHRoZSBcInByZXZpb3VzIG1vbnRoXCIgYnV0dG9uIHNob3VsZCBiZSBkaXNhYmxlZC4gKi9cbiAgcHJpdmF0ZSBfcHJldmlvdXNNb250aERpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHByZXZNb250aCA9IHRoaXMuX2RhdGVBZGFwdGVyLmFkZENhbGVuZGFyRGF5cyhcbiAgICAgIHRoaXMuX2FjdGl2ZURhdGUsXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXREYXRlKHRoaXMuX2FjdGl2ZURhdGUpICogLTEsXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5fcHJldkRpc2FibGVkKHByZXZNb250aCk7XG4gIH1cblxuICAvKiogQ2hlY2tzIGlmIHRoZSBcIm5leHQgbW9udGhcIiBidXR0b24gc2hvdWxkIGJlIGRpc2FibGVkLiAqL1xuICBwcml2YXRlIF9uZXh0TW9udGhEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICBsZXQgbmV4dE1vbnRoID0gdGhpcy5fZGF0ZUFkYXB0ZXIuYWRkQ2FsZW5kYXJNb250aHModGhpcy5fYWN0aXZlRGF0ZSwgdGhpcy5fd2lkZSA/IDIgOiAxKTtcbiAgICBuZXh0TW9udGggPSB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKFxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcihuZXh0TW9udGgpLFxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TW9udGgobmV4dE1vbnRoKSxcbiAgICAgIDEsXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5fbmV4dERpc2FibGVkKG5leHRNb250aCk7XG4gIH1cblxuICBwcml2YXRlIF9wcmV2aW91c1llYXJEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBwcmV2WWVhciA9IHRoaXMuX2RhdGVBZGFwdGVyLmNyZWF0ZURhdGUoXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHRoaXMuX2FjdGl2ZURhdGUpIC0gMSxcbiAgICAgIDEyLFxuICAgICAgMzEsXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5fcHJldkRpc2FibGVkKHByZXZZZWFyKTtcbiAgfVxuXG4gIHByaXZhdGUgX25leHRZZWFyRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbmV4dFllYXIgPSB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKFxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcih0aGlzLl9hY3RpdmVEYXRlKSArIDEsXG4gICAgICAxLFxuICAgICAgMSxcbiAgICApO1xuICAgIHJldHVybiB0aGlzLl9uZXh0RGlzYWJsZWQobmV4dFllYXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcHJldmlvdXNZZWFyUmFuZ2VEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBwcmV2WWVhciA9IHRoaXMuX2RhdGVBZGFwdGVyLmNyZWF0ZURhdGUodGhpcy5feWVhcnNbMF1bMF0gLSAxLCAxMiwgMzEpO1xuICAgIHJldHVybiB0aGlzLl9wcmV2RGlzYWJsZWQocHJldlllYXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbmV4dFllYXJSYW5nZURpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHllYXJzID0gaXNCcmVha3BvaW50KCdtZWRpdW0nKSAmJiB0aGlzLndpZGUgPyB0aGlzLl9uZXh0TW9udGhZZWFycyA6IHRoaXMuX3llYXJzO1xuICAgIGNvbnN0IGxhc3RZZWFyUmFuZ2UgPSB5ZWFyc1t5ZWFycy5sZW5ndGggLSAxXTtcbiAgICBjb25zdCBsYXN0WWVhciA9IGxhc3RZZWFyUmFuZ2VbbGFzdFllYXJSYW5nZS5sZW5ndGggLSAxXTtcbiAgICBjb25zdCBuZXh0WWVhciA9IHRoaXMuX2RhdGVBZGFwdGVyLmNyZWF0ZURhdGUobGFzdFllYXIgKyAxLCAxLCAxKTtcbiAgICByZXR1cm4gdGhpcy5fbmV4dERpc2FibGVkKG5leHRZZWFyKTtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZVRhYmxlQmx1cihldmVudFRhcmdldDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnRUYXJnZXQ/LmxvY2FsTmFtZSAhPT0gJ2J1dHRvbicpIHtcbiAgICAgIHRoaXMuX3NldFRhYkluZGV4KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc2V0VGFiSW5kZXgoKTogdm9pZCB7XG4gICAgQXJyYXkuZnJvbShcbiAgICAgIHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvckFsbCgnLnNiYi1jYWxlbmRhcl9fY2VsbFt0YWJpbmRleD1cIjBcIl0nKSA/PyBbXSxcbiAgICApLmZvckVhY2goKGRheSkgPT4gKChkYXkgYXMgSFRNTEVsZW1lbnQpLnRhYkluZGV4ID0gLTEpKTtcbiAgICBjb25zdCBmaXJzdEZvY3VzYWJsZSA9IHRoaXMuX2dldEZpcnN0Rm9jdXNhYmxlKCk7XG4gICAgaWYgKGZpcnN0Rm9jdXNhYmxlKSB7XG4gICAgICBmaXJzdEZvY3VzYWJsZS50YWJJbmRleCA9IDA7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0Rmlyc3RGb2N1c2FibGUoKTogSFRNTEJ1dHRvbkVsZW1lbnQge1xuICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMuX3NlbGVjdGVkID8gdGhpcy5fZGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUodGhpcy5fc2VsZWN0ZWQpISA6IHRoaXMubm93O1xuICAgIGxldCBmaXJzdEZvY3VzYWJsZSA9XG4gICAgICB0aGlzLnNoYWRvd1Jvb3QhLnF1ZXJ5U2VsZWN0b3IoJy5zYmItY2FsZW5kYXJfX3NlbGVjdGVkJykgPz9cbiAgICAgIHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvcihcbiAgICAgICAgYFtkYXRhLWRheT1cIiR7dGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0RGF0ZShhY3RpdmUpfSAke3RoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoKFxuICAgICAgICAgIGFjdGl2ZSxcbiAgICAgICAgKX0gJHt0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKGFjdGl2ZSl9XCJdYCxcbiAgICAgICkgPz9cbiAgICAgIHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvcihgW2RhdGEtbW9udGg9XCIke3RoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoKGFjdGl2ZSl9XCJdYCkgPz9cbiAgICAgIHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvcihgW2RhdGEteWVhcj1cIiR7dGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcihhY3RpdmUpfVwiXWApO1xuICAgIGlmICghZmlyc3RGb2N1c2FibGUgfHwgKGZpcnN0Rm9jdXNhYmxlIGFzIEhUTUxCdXR0b25FbGVtZW50KT8uZGlzYWJsZWQpIHtcbiAgICAgIGZpcnN0Rm9jdXNhYmxlID0gdGhpcy5zaGFkb3dSb290IS5xdWVyeVNlbGVjdG9yKCcuc2JiLWNhbGVuZGFyX19jZWxsOm5vdChbZGlzYWJsZWRdKScpO1xuICAgIH1cbiAgICByZXR1cm4gKGZpcnN0Rm9jdXNhYmxlIGFzIEhUTUxCdXR0b25FbGVtZW50KSB8fCBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlS2V5Ym9hcmRFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCwgZGF5PzogRGF5KTogdm9pZCB7XG4gICAgaWYgKGlzQXJyb3dLZXlPclBhZ2VLZXlzUHJlc3NlZChldmVudCkpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIC8vIEdldHMgdGhlIGN1cnJlbnRseSByZW5kZXJlZCB0YWJsZSdzIGNlbGw7XG4gICAgLy8gdGhleSBjb3VsZCBiZSBkYXlzLCBtb250aHMgb3IgeWVhcnMgYmFzZWQgb24gdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHZpZXcuXG4gICAgLy8gSWYgYHdpZGVgIGlzIHRydWUsIHllYXJzIGFyZSBkb3VibGVkIGluIG51bWJlciBhbmQgZGF5cyBhcmUgKHJvdWdobHkpIGRvdWJsZWQgdG9vLCBhZmZlY3RpbmcgdGhlIGBpbmRleGAgY2FsY3VsYXRpb24uXG4gICAgY29uc3QgY2VsbHM6IEhUTUxCdXR0b25FbGVtZW50W10gPSB0aGlzLl9jZWxscztcbiAgICBjb25zdCBpbmRleDogbnVtYmVyID0gY2VsbHMuZmluZEluZGV4KChlOiBIVE1MQnV0dG9uRWxlbWVudCkgPT4gZSA9PT0gZXZlbnQudGFyZ2V0KTtcbiAgICBjb25zdCBuZXh0RWw6IEhUTUxCdXR0b25FbGVtZW50ID0gdGhpcy5fbmF2aWdhdGVCeUtleWJvYXJkKGV2ZW50LCBpbmRleCwgY2VsbHMsIGRheSk7XG4gICAgY29uc3QgYWN0aXZlRWw6IEhUTUxCdXR0b25FbGVtZW50ID0gdGhpcy5zaGFkb3dSb290IS5hY3RpdmVFbGVtZW50IGFzIEhUTUxCdXR0b25FbGVtZW50O1xuICAgIGlmIChuZXh0RWwgIT09IGFjdGl2ZUVsKSB7XG4gICAgICAobmV4dEVsIGFzIEhUTUxCdXR0b25FbGVtZW50KS50YWJJbmRleCA9IDA7XG4gICAgICBuZXh0RWw/LmZvY3VzKCk7XG4gICAgICAoYWN0aXZlRWwgYXMgSFRNTEJ1dHRvbkVsZW1lbnQpLnRhYkluZGV4ID0gLTE7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGluZGV4IG9mIHRoZSBlbGVtZW50IHRvIG1vdmUgdG8sIGJhc2VkIG9uIGEgbGlzdCBvZiBlbGVtZW50cyAod2hpY2ggY2FuIGJlIHBvdGVudGlhbGx5IGRpc2FibGVkKSxcbiAgICogdGhlIGtleWJvYXJkIGlucHV0IGFuZCB0aGUgcG9zaXRpb24gb2YgdGhlIGN1cnJlbnQgZWxlbWVudCBpbiB0aGUgbGlzdC5cbiAgICogSW4gdGhlIGRheSB2aWV3LCB0aGUgYGRheT86IERheWAgcGFyYW1ldGVyIGlzIG1hbmRhdG9yeSBmb3IgY2FsY3VsYXRpb24sXG4gICAqIHdoaWxlIGluIG1vbnRoIGFuZCB5ZWFyIHZpZXcgaXQncyBub3QgZHVlIHRvIHRoZSBmaXhlZCBhbW91bnQgb2YgcmVuZGVyZWQgY2VsbHMuXG4gICAqL1xuICBwcml2YXRlIF9uYXZpZ2F0ZUJ5S2V5Ym9hcmQoXG4gICAgZXZ0OiBLZXlib2FyZEV2ZW50LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgY2VsbHM6IEhUTUxCdXR0b25FbGVtZW50W10sXG4gICAgZGF5PzogRGF5LFxuICApOiBIVE1MQnV0dG9uRWxlbWVudCB7XG4gICAgY29uc3Qge1xuICAgICAgZWxlbWVudEluZGV4Rm9yV2lkZU1vZGUsXG4gICAgICBvZmZzZXRGb3JXaWRlTW9kZSxcbiAgICAgIGxhc3RFbGVtZW50SW5kZXhGb3JXaWRlTW9kZSxcbiAgICAgIHZlcnRpY2FsT2Zmc2V0LFxuICAgIH06IENhbGVuZGFyS2V5Ym9hcmROYXZpZ2F0aW9uUGFyYW1ldGVycyA9IHRoaXMuX2NhbGN1bGF0ZVBhcmFtZXRlcnNGb3JLZXlib2FyZE5hdmlnYXRpb24oXG4gICAgICBjZWxscyxcbiAgICAgIGluZGV4LFxuICAgICAgZGF5LFxuICAgICk7XG5cbiAgICBzd2l0Y2ggKGV2dC5rZXkpIHtcbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICByZXR1cm4gdGhpcy5fZmluZE5leHQoY2VsbHMsIGluZGV4LCAtdmVydGljYWxPZmZzZXQpO1xuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmROZXh0KGNlbGxzLCBpbmRleCwgdmVydGljYWxPZmZzZXQpO1xuICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmROZXh0KGNlbGxzLCBpbmRleCwgLTEpO1xuICAgICAgY2FzZSAnQXJyb3dSaWdodCc6XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kTmV4dChjZWxscywgaW5kZXgsIDEpO1xuICAgICAgY2FzZSAnSG9tZSc6XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kRmlyc3QoY2VsbHMsIG9mZnNldEZvcldpZGVNb2RlKTtcbiAgICAgIGNhc2UgJ1BhZ2VVcCc6XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kRmlyc3RPbkNvbHVtbihcbiAgICAgICAgICBjZWxscyxcbiAgICAgICAgICBlbGVtZW50SW5kZXhGb3JXaWRlTW9kZSxcbiAgICAgICAgICBvZmZzZXRGb3JXaWRlTW9kZSxcbiAgICAgICAgICB2ZXJ0aWNhbE9mZnNldCxcbiAgICAgICAgKTtcbiAgICAgIGNhc2UgJ1BhZ2VEb3duJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmRMYXN0T25Db2x1bW4oY2VsbHMsIGluZGV4LCBsYXN0RWxlbWVudEluZGV4Rm9yV2lkZU1vZGUsIHZlcnRpY2FsT2Zmc2V0KTtcbiAgICAgIGNhc2UgJ0VuZCc6XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kTGFzdChjZWxscywgbGFzdEVsZW1lbnRJbmRleEZvcldpZGVNb2RlIC0gMSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gY2VsbHNbaW5kZXhdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBwYXJhbWV0ZXIgbmVlZGVkIGluIGtleWJvYXJkIG5hdmlnYXRpb24uXG4gICAqIFNpbmNlIHRocmVlIHZpZXdzIGFyZSBub3cgYXZhaWxhYmxlLCB0aGUgZnVuY3Rpb24gY3JlYXRlcyBhbmQgcmV0dXJucyB0aGUgY29ycmVjdCBwYXJhbWV0ZXJzIGZvciBlYWNoIG9mIHRoZW1cbiAgICogYnkgY29uc2lkZXJpbmcgdGhlIG51bWJlciBvZiBjZWxscyBwZXIgZWFjaCByb3cgYW5kIHRoZSBjb3JyZWN0aW9uIGZvciB0aGUgd2lkZSBtb2RlLlxuICAgKiBAcGFyYW0gY2VsbHMgVGhlIGFycmF5IG9mIHJlbmRlcmVkIHRhYmxlIGNlbGxzOyB0aGV5IGFyZSBidXR0b25zIHRoYXQgY2FuIHJlcHJlc2VudCBkYXlzLCBtb250aHMgb3IgeWVhcnMuXG4gICAqIEBwYXJhbSBpbmRleCBUaGUgc3RhcnRpbmcgZWxlbWVudCdzIGluZGV4IGluIHRoZSBjZWxsIGFycmF5LlxuICAgKiBAcGFyYW0gZGF5IChvcHRpb25hbCkgT25seSBpbiB0aGUgZGF5IHZpZXcsIHRoZSBkYXkgcmVwcmVzZW50ZWQgYnkgdGhlIHN0YXJ0aW5nIGNlbGwuXG4gICAqL1xuICBwcml2YXRlIF9jYWxjdWxhdGVQYXJhbWV0ZXJzRm9yS2V5Ym9hcmROYXZpZ2F0aW9uKFxuICAgIGNlbGxzOiBIVE1MQnV0dG9uRWxlbWVudFtdLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgZGF5PzogRGF5LFxuICApOiBDYWxlbmRhcktleWJvYXJkTmF2aWdhdGlvblBhcmFtZXRlcnMge1xuICAgIHN3aXRjaCAodGhpcy5fY2FsZW5kYXJWaWV3KSB7XG4gICAgICBjYXNlICdkYXknOiB7XG4gICAgICAgIGNvbnN0IGluZGV4SW5WaWV3ID0gK2RheSEuZGF5VmFsdWUgLSAxO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHZlcnRpY2FsT2Zmc2V0OiBEQVlTX1BFUl9ST1csXG4gICAgICAgICAgZWxlbWVudEluZGV4Rm9yV2lkZU1vZGU6IGluZGV4SW5WaWV3LFxuICAgICAgICAgIG9mZnNldEZvcldpZGVNb2RlOiBpbmRleCAtIGluZGV4SW5WaWV3LFxuICAgICAgICAgIGxhc3RFbGVtZW50SW5kZXhGb3JXaWRlTW9kZTpcbiAgICAgICAgICAgIGluZGV4ID09PSBpbmRleEluVmlld1xuICAgICAgICAgICAgICA/IHRoaXMuX2RhdGVBZGFwdGVyLmdldE51bURheXNJbk1vbnRoKFxuICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuYWRkQ2FsZW5kYXJNb250aHMoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKGRheSEudmFsdWUpISxcbiAgICAgICAgICAgICAgICAgICAgLTEsXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBjZWxscy5sZW5ndGgsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICAvLyBNb250aCB2aWV3IGlzIG5vdCBkZXBlbmRlbnQgZnJvbSBgd2lkZWAgdmFsdWUsIHNvIHNvbWUgcGFyYW1ldGVycyBhcmUgZml4ZWQuXG4gICAgICBjYXNlICdtb250aCc6IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB2ZXJ0aWNhbE9mZnNldDogTU9OVEhTX1BFUl9ST1csXG4gICAgICAgICAgZWxlbWVudEluZGV4Rm9yV2lkZU1vZGU6IGluZGV4LFxuICAgICAgICAgIG9mZnNldEZvcldpZGVNb2RlOiAwLFxuICAgICAgICAgIGxhc3RFbGVtZW50SW5kZXhGb3JXaWRlTW9kZTogMTIsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjYXNlICd5ZWFyJzoge1xuICAgICAgICBjb25zdCBvZmZzZXQ6IG51bWJlciA9IE1hdGgudHJ1bmMoaW5kZXggLyBZRUFSU19QRVJfUEFHRSkgKiBZRUFSU19QRVJfUEFHRTtcbiAgICAgICAgY29uc3QgaW5kZXhJblZpZXc6IG51bWJlciA9IG9mZnNldCA9PT0gMCA/IGluZGV4IDogaW5kZXggLSBZRUFSU19QRVJfUEFHRTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB2ZXJ0aWNhbE9mZnNldDogWUVBUlNfUEVSX1JPVyxcbiAgICAgICAgICBlbGVtZW50SW5kZXhGb3JXaWRlTW9kZTogaW5kZXhJblZpZXcsXG4gICAgICAgICAgb2Zmc2V0Rm9yV2lkZU1vZGU6IGluZGV4IC0gaW5kZXhJblZpZXcsXG4gICAgICAgICAgbGFzdEVsZW1lbnRJbmRleEZvcldpZGVNb2RlOiBvZmZzZXQgPT09IDAgPyBZRUFSU19QRVJfUEFHRSA6IFlFQVJTX1BFUl9QQUdFICogMixcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgbmV4dCBlbGVtZW50IG9mIHRoZSBwcm92aWRlZCBhcnJheSBzdGFydGluZyBmcm9tIGBpbmRleGAgYnkgYWRkaW5nIGBkZWx0YWAuXG4gICAqIElmIHRoZSBmb3VuZCBlbGVtZW50IGlzIGRpc2FibGVkLCBpdCBjb250aW51ZXMgYWRkaW5nIGBkZWx0YWAgdW50aWwgaXQgZmluZHMgYW4gZW5hYmxlZCBvbmUgaW4gdGhlIGFycmF5IGJvdW5kcy5cbiAgICovXG4gIHByaXZhdGUgX2ZpbmROZXh0KGRheXM6IEhUTUxCdXR0b25FbGVtZW50W10sIGluZGV4OiBudW1iZXIsIGRlbHRhOiBudW1iZXIpOiBIVE1MQnV0dG9uRWxlbWVudCB7XG4gICAgbGV0IG5leHRJbmRleCA9IGluZGV4ICsgZGVsdGE7XG4gICAgd2hpbGUgKG5leHRJbmRleCA8IGRheXMubGVuZ3RoICYmIGRheXNbbmV4dEluZGV4XT8uZGlzYWJsZWQpIHtcbiAgICAgIG5leHRJbmRleCArPSBkZWx0YTtcbiAgICB9XG4gICAgcmV0dXJuIGRheXNbbmV4dEluZGV4XSA/PyBkYXlzW2luZGV4XTtcbiAgfVxuXG4gIC8qKiBGaW5kIHRoZSBmaXJzdCBlbmFibGVkIGVsZW1lbnQgaW4gdGhlIHByb3ZpZGVkIGFycmF5LiAqL1xuICBwcml2YXRlIF9maW5kRmlyc3QoZGF5czogSFRNTEJ1dHRvbkVsZW1lbnRbXSwgZmlyc3RPZkN1cnJlbnRNb250aDogbnVtYmVyKTogSFRNTEJ1dHRvbkVsZW1lbnQge1xuICAgIHJldHVybiAhZGF5c1tmaXJzdE9mQ3VycmVudE1vbnRoXS5kaXNhYmxlZFxuICAgICAgPyBkYXlzW2ZpcnN0T2ZDdXJyZW50TW9udGhdXG4gICAgICA6IHRoaXMuX2ZpbmROZXh0KGRheXMsIGZpcnN0T2ZDdXJyZW50TW9udGgsIDEpO1xuICB9XG5cbiAgLyoqIEZpbmQgdGhlIGxhc3QgZW5hYmxlZCBlbGVtZW50IGluIHRoZSBwcm92aWRlZCBhcnJheS4gKi9cbiAgcHJpdmF0ZSBfZmluZExhc3QoZGF5czogSFRNTEJ1dHRvbkVsZW1lbnRbXSwgbGFzdE9mQ3VycmVudE1vbnRoOiBudW1iZXIpOiBIVE1MQnV0dG9uRWxlbWVudCB7XG4gICAgcmV0dXJuICFkYXlzW2xhc3RPZkN1cnJlbnRNb250aF0uZGlzYWJsZWRcbiAgICAgID8gZGF5c1tsYXN0T2ZDdXJyZW50TW9udGhdXG4gICAgICA6IHRoaXMuX2ZpbmROZXh0KGRheXMsIGxhc3RPZkN1cnJlbnRNb250aCwgLTEpO1xuICB9XG5cbiAgLyoqIEZpbmQgdGhlIGZpcnN0IGVuYWJsZWQgZWxlbWVudCBpbiB0aGUgc2FtZSBjb2x1bW4gb2YgdGhlIHByb3ZpZGVkIGFycmF5LiAqL1xuICBwcml2YXRlIF9maW5kRmlyc3RPbkNvbHVtbihcbiAgICBkYXlzOiBIVE1MQnV0dG9uRWxlbWVudFtdLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgb2Zmc2V0OiBudW1iZXIsXG4gICAgdmVydGljYWxPZmZzZXQ6IG51bWJlcixcbiAgKTogSFRNTEJ1dHRvbkVsZW1lbnQge1xuICAgIGNvbnN0IG5leHRJbmRleCA9IChpbmRleCAlIHZlcnRpY2FsT2Zmc2V0KSArIG9mZnNldDtcbiAgICByZXR1cm4gIWRheXNbbmV4dEluZGV4XS5kaXNhYmxlZFxuICAgICAgPyBkYXlzW25leHRJbmRleF1cbiAgICAgIDogdGhpcy5fZmluZE5leHQoZGF5cywgbmV4dEluZGV4LCB2ZXJ0aWNhbE9mZnNldCk7XG4gIH1cblxuICAvKiogRmluZCB0aGUgbGFzdCBlbmFibGVkIGVsZW1lbnQgaW4gdGhlIHNhbWUgY29sdW1uIG9mIHRoZSBwcm92aWRlZCBhcnJheS4gKi9cbiAgcHJpdmF0ZSBfZmluZExhc3RPbkNvbHVtbihcbiAgICBkYXlzOiBIVE1MQnV0dG9uRWxlbWVudFtdLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgb2Zmc2V0OiBudW1iZXIsXG4gICAgdmVydGljYWxPZmZzZXQ6IG51bWJlcixcbiAgKTogSFRNTEJ1dHRvbkVsZW1lbnQge1xuICAgIGNvbnN0IG5leHRJbmRleCA9IGluZGV4ICsgTWF0aC50cnVuYygob2Zmc2V0IC0gaW5kZXggLSAxKSAvIHZlcnRpY2FsT2Zmc2V0KSAqIHZlcnRpY2FsT2Zmc2V0O1xuICAgIHJldHVybiAhZGF5c1tuZXh0SW5kZXhdLmRpc2FibGVkXG4gICAgICA/IGRheXNbbmV4dEluZGV4XVxuICAgICAgOiB0aGlzLl9maW5kTmV4dChkYXlzLCBuZXh0SW5kZXgsIC12ZXJ0aWNhbE9mZnNldCk7XG4gIH1cblxuICBwcml2YXRlIF9yZXNldFRvRGF5VmlldygpOiB2b2lkIHtcbiAgICB0aGlzLl9yZXNldEZvY3VzID0gdHJ1ZTtcbiAgICB0aGlzLl9hY3RpdmVEYXRlID0gdGhpcy5zZWxlY3RlZCA/PyB0aGlzLm5vdztcbiAgICB0aGlzLl9jaG9zZW5ZZWFyID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX2Nob3Nlbk1vbnRoID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX25leHRDYWxlbmRhclZpZXcgPSAnZGF5JztcbiAgICB0aGlzLl9yZW1vdmVUYWJsZSgpO1xuICB9XG5cbiAgLyoqIFJlbmRlciB0aGUgdmlldyBmb3IgdGhlIGRheSBzZWxlY3Rpb24uICovXG4gIHByaXZhdGUgX3JlbmRlckRheVZpZXcoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIGNvbnN0IG5leHRNb250aEFjdGl2ZURhdGUgPSB0aGlzLl93aWRlXG4gICAgICA/IHRoaXMuX2RhdGVBZGFwdGVyLmFkZENhbGVuZGFyTW9udGhzKHRoaXMuX2FjdGl2ZURhdGUsIDEpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItY2FsZW5kYXJfX2NvbnRyb2xzXCI+XG4gICAgICAgICR7dGhpcy5fZ2V0QXJyb3coXG4gICAgICAgICAgJ2xlZnQnLFxuICAgICAgICAgICgpID0+IHRoaXMuX2dvVG9EaWZmZXJlbnRNb250aCgtMSksXG4gICAgICAgICAgaTE4blByZXZpb3VzTW9udGhbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF0sXG4gICAgICAgICAgdGhpcy5fcHJldmlvdXNNb250aERpc2FibGVkKCksXG4gICAgICAgICl9XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzYmItY2FsZW5kYXJfX2NvbnRyb2xzLW1vbnRoXCI+XG4gICAgICAgICAgJHt0aGlzLl9jcmVhdGVMYWJlbEZvckRheVZpZXcodGhpcy5fYWN0aXZlRGF0ZSl9XG4gICAgICAgICAgJHt0aGlzLl93aWRlID8gdGhpcy5fY3JlYXRlTGFiZWxGb3JEYXlWaWV3KG5leHRNb250aEFjdGl2ZURhdGUhKSA6IG5vdGhpbmd9XG4gICAgICAgICAgPHNiYi1zY3JlZW4tcmVhZGVyLW9ubHkgcm9sZT1cInN0YXR1c1wiPlxuICAgICAgICAgICAgJHt0aGlzLl9jcmVhdGVBcmlhTGFiZWxGb3JEYXlWaWV3KHRoaXMuX2FjdGl2ZURhdGUsIG5leHRNb250aEFjdGl2ZURhdGUhKX1cbiAgICAgICAgICA8L3NiYi1zY3JlZW4tcmVhZGVyLW9ubHk+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICAke3RoaXMuX2dldEFycm93KFxuICAgICAgICAgICdyaWdodCcsXG4gICAgICAgICAgKCkgPT4gdGhpcy5fZ29Ub0RpZmZlcmVudE1vbnRoKDEpLFxuICAgICAgICAgIGkxOG5OZXh0TW9udGhbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF0sXG4gICAgICAgICAgdGhpcy5fbmV4dE1vbnRoRGlzYWJsZWQoKSxcbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtY29udGFpbmVyIHNiYi1jYWxlbmRhcl9fdGFibGUtZGF5LXZpZXdcIj5cbiAgICAgICAgJHt0aGlzLl9jcmVhdGVEYXlUYWJsZSh0aGlzLl93ZWVrcyl9XG4gICAgICAgICR7dGhpcy5fd2lkZSA/IHRoaXMuX2NyZWF0ZURheVRhYmxlKHRoaXMuX25leHRNb250aFdlZWtzKSA6IG5vdGhpbmd9XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgdGhlIGxhYmVsIHdpdGggdGhlIG1vbnRoIGZvciB0aGUgZGFpbHkgdmlldy4gKi9cbiAgcHJpdmF0ZSBfY3JlYXRlTGFiZWxGb3JEYXlWaWV3KGQ6IFQpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgY29uc3QgbW9udGhMYWJlbCA9IGAke1xuICAgICAgdGhpcy5fbW9udGhOYW1lc1t0aGlzLl9kYXRlQWRhcHRlci5nZXRNb250aChkKSAtIDFdXG4gICAgfSAke3RoaXMuX2RhdGVBZGFwdGVyLmdldFllYXIoZCl9YDtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGlkPVwic2JiLWNhbGVuZGFyX19kYXRlLXNlbGVjdGlvblwiXG4gICAgICAgIGNsYXNzPVwic2JiLWNhbGVuZGFyX19jb250cm9scy1jaGFuZ2UtZGF0ZVwiXG4gICAgICAgIGFyaWEtbGFiZWw9XCIke2kxOG5ZZWFyTW9udGhTZWxlY3Rpb25bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19ICR7bW9udGhMYWJlbH1cIlxuICAgICAgICBAY2xpY2s9JHsoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fcmVzZXRGb2N1cyA9IHRydWU7XG4gICAgICAgICAgdGhpcy5fbmV4dENhbGVuZGFyVmlldyA9ICd5ZWFyJztcbiAgICAgICAgICB0aGlzLl9yZW1vdmVUYWJsZSgpO1xuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICAke21vbnRoTGFiZWx9XG4gICAgICAgIDxzYmItaWNvbiBuYW1lPVwiY2hldnJvbi1zbWFsbC1kb3duLXNtYWxsXCI+PC9zYmItaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIGA7XG4gIH1cblxuICAvKiogQ3JlYXRlcyB0aGUgYXJpYS1sYWJlbCBmb3IgdGhlIGRhaWx5IHZpZXcuICovXG4gIHByaXZhdGUgX2NyZWF0ZUFyaWFMYWJlbEZvckRheVZpZXcoLi4uZGF0ZXM6IFRbXSk6IHN0cmluZyB7XG4gICAgbGV0IG1vbnRoTGFiZWwgPSAnJztcbiAgICBmb3IgKGNvbnN0IGQgb2YgZGF0ZXMpIHtcbiAgICAgIGlmIChkKSB7XG4gICAgICAgIG1vbnRoTGFiZWwgKz0gYCR7XG4gICAgICAgICAgdGhpcy5fbW9udGhOYW1lc1t0aGlzLl9kYXRlQWRhcHRlci5nZXRNb250aChkKSAtIDFdXG4gICAgICAgIH0gJHt0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKGQpfSBgO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbW9udGhMYWJlbDtcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIHRoZSBjYWxlbmRhciB0YWJsZSBmb3IgdGhlIGRhaWx5IHZpZXcuICovXG4gIHByaXZhdGUgX2NyZWF0ZURheVRhYmxlKHdlZWtzOiBEYXlbXVtdKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPHRhYmxlXG4gICAgICAgIGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZVwiXG4gICAgICAgIEBmb2N1c291dD0keyhldmVudDogRm9jdXNFdmVudCkgPT5cbiAgICAgICAgICB0aGlzLl9oYW5kbGVUYWJsZUJsdXIoZXZlbnQucmVsYXRlZFRhcmdldCBhcyBIVE1MRWxlbWVudCl9XG4gICAgICAgIEBhbmltYXRpb25lbmQ9JHsoZTogQW5pbWF0aW9uRXZlbnQpID0+IHRoaXMuX3RhYmxlQW5pbWF0aW9uRW5kKGUpfVxuICAgICAgPlxuICAgICAgICA8dGhlYWQgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLWhlYWRlclwiPlxuICAgICAgICAgIDx0ciBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtaGVhZGVyLXJvd1wiPlxuICAgICAgICAgICAgJHt0aGlzLl9jcmVhdGVEYXlUYWJsZUhlYWRlcigpfVxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGhlYWQ+XG4gICAgICAgIDx0Ym9keSBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtYm9keVwiPlxuICAgICAgICAgICR7dGhpcy5fY3JlYXRlRGF5VGFibGVCb2R5KHdlZWtzKX1cbiAgICAgICAgPC90Ym9keT5cbiAgICAgIDwvdGFibGU+XG4gICAgYDtcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIHRoZSB0YWJsZSBoZWFkZXIgd2l0aCB0aGUgbW9udGggaGVhZGVyIGNlbGxzLiAqL1xuICBwcml2YXRlIF9jcmVhdGVEYXlUYWJsZUhlYWRlcigpOiBUZW1wbGF0ZVJlc3VsdFtdIHtcbiAgICByZXR1cm4gdGhpcy5fd2Vla2RheXMubWFwKFxuICAgICAgKGRheTogV2Vla2RheSkgPT4gaHRtbGBcbiAgICAgICAgPHRoIGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS1oZWFkZXJcIj5cbiAgICAgICAgICA8c2JiLXNjcmVlbi1yZWFkZXItb25seT4ke2RheS5sb25nfTwvc2JiLXNjcmVlbi1yZWFkZXItb25seT5cbiAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4ke2RheS5uYXJyb3d9PC9zcGFuPlxuICAgICAgICA8L3RoPlxuICAgICAgYCxcbiAgICApO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgdGhlIHRhYmxlIGJvZHkgd2l0aCB0aGUgZGF5IGNlbGxzLiBGb3IgdGhlIGZpcnN0IHJvdywgaXQgYWxzbyBjb25zaWRlcnMgdGhlIHBvc3NpYmxlIGRheSdzIG9mZnNldC4gKi9cbiAgcHJpdmF0ZSBfY3JlYXRlRGF5VGFibGVCb2R5KHdlZWtzOiBEYXlbXVtdKTogVGVtcGxhdGVSZXN1bHRbXSB7XG4gICAgY29uc3QgdG9kYXk6IHN0cmluZyA9IHRoaXMuX2RhdGVBZGFwdGVyLnRvSXNvODYwMSh0aGlzLm5vdyk7XG4gICAgcmV0dXJuIHdlZWtzLm1hcCgod2VlazogRGF5W10sIHJvd0luZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IGZpcnN0Um93T2Zmc2V0OiBudW1iZXIgPSBEQVlTX1BFUl9ST1cgLSB3ZWVrLmxlbmd0aDtcbiAgICAgIGlmIChyb3dJbmRleCA9PT0gMCAmJiBmaXJzdFJvd09mZnNldCkge1xuICAgICAgICByZXR1cm4gaHRtbGBcbiAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAke1suLi5BcnJheShmaXJzdFJvd09mZnNldCkua2V5cygpXS5tYXAoXG4gICAgICAgICAgICAgICgpID0+XG4gICAgICAgICAgICAgICAgaHRtbGA8dGRcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS1kYXRhXCJcbiAgICAgICAgICAgICAgICAgIGRhdGEtZGF5PSR7YDAgJHt3ZWVrWzBdLm1vbnRoVmFsdWV9ICR7d2Vla1swXS55ZWFyVmFsdWV9YH1cbiAgICAgICAgICAgICAgICA+PC90ZD5gLFxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICR7dGhpcy5fY3JlYXRlRGF5Q2VsbHMod2VlaywgdG9kYXkpfVxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIGA7XG4gICAgICB9XG4gICAgICByZXR1cm4gaHRtbGA8dHI+XG4gICAgICAgICR7dGhpcy5fY3JlYXRlRGF5Q2VsbHMod2VlaywgdG9kYXkpfVxuICAgICAgPC90cj5gO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgdGhlIGNlbGxzIGZvciB0aGUgZGFpbHkgdmlldy4gKi9cbiAgcHJpdmF0ZSBfY3JlYXRlRGF5Q2VsbHMod2VlazogRGF5W10sIHRvZGF5OiBzdHJpbmcpOiBUZW1wbGF0ZVJlc3VsdFtdIHtcbiAgICByZXR1cm4gd2Vlay5tYXAoKGRheTogRGF5KSA9PiB7XG4gICAgICBjb25zdCBpc091dE9mUmFuZ2UgPSAhdGhpcy5faXNEYXlJblJhbmdlKGRheS52YWx1ZSk7XG4gICAgICBjb25zdCBpc0ZpbHRlcmVkT3V0ID0gIXRoaXMuX2RhdGVGaWx0ZXIodGhpcy5fZGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUoZGF5LnZhbHVlKSEpO1xuICAgICAgY29uc3Qgc2VsZWN0ZWQ6IGJvb2xlYW4gPSAhIXRoaXMuX3NlbGVjdGVkICYmIGRheS52YWx1ZSA9PT0gdGhpcy5fc2VsZWN0ZWQ7XG4gICAgICBjb25zdCBkYXlWYWx1ZSA9IGAke2RheS5kYXlWYWx1ZX0gJHtkYXkubW9udGhWYWx1ZX0gJHtkYXkueWVhclZhbHVlfWA7XG4gICAgICBjb25zdCBpc1RvZGF5ID0gZGF5LnZhbHVlID09PSB0b2RheTtcbiAgICAgIHJldHVybiBodG1sYFxuICAgICAgICA8dGRcbiAgICAgICAgICBjbGFzcz0ke2NsYXNzTWFwKHtcbiAgICAgICAgICAgICdzYmItY2FsZW5kYXJfX3RhYmxlLWRhdGEnOiB0cnVlLFxuICAgICAgICAgICAgJ3NiYi1jYWxlbmRhcl9fdGFibGUtZGF0YS1zZWxlY3RlZCc6IHNlbGVjdGVkLFxuICAgICAgICAgIH0pfVxuICAgICAgICA+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9JHtjbGFzc01hcCh7XG4gICAgICAgICAgICAgICdzYmItY2FsZW5kYXJfX2NlbGwnOiB0cnVlLFxuICAgICAgICAgICAgICAnc2JiLWNhbGVuZGFyX19kYXknOiB0cnVlLFxuICAgICAgICAgICAgICAnc2JiLWNhbGVuZGFyX19jZWxsLWN1cnJlbnQnOiBpc1RvZGF5LFxuICAgICAgICAgICAgICAnc2JiLWNhbGVuZGFyX19zZWxlY3RlZCc6IHNlbGVjdGVkLFxuICAgICAgICAgICAgICAnc2JiLWNhbGVuZGFyX19jcm9zc2VkLW91dCc6ICFpc091dE9mUmFuZ2UgJiYgaXNGaWx0ZXJlZE91dCxcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5fc2VsZWN0RGF0ZShkYXkudmFsdWUpfVxuICAgICAgICAgICAgP2Rpc2FibGVkPSR7aXNPdXRPZlJhbmdlIHx8IGlzRmlsdGVyZWRPdXR9XG4gICAgICAgICAgICBhcmlhLWxhYmVsPSR7dGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0QWNjZXNzaWJpbGl0eUZvcm1hdERhdGUoZGF5LnZhbHVlKX1cbiAgICAgICAgICAgIGFyaWEtcHJlc3NlZD0ke3NlbGVjdGVkfVxuICAgICAgICAgICAgYXJpYS1kaXNhYmxlZD0ke2lzT3V0T2ZSYW5nZSB8fCBpc0ZpbHRlcmVkT3V0fVxuICAgICAgICAgICAgYXJpYS1jdXJyZW50PSR7aXNUb2RheSA/ICdkYXRlJyA6IG5vdGhpbmd9XG4gICAgICAgICAgICBkYXRhLWRheT0ke2RheVZhbHVlIHx8IG5vdGhpbmd9XG4gICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgIEBrZXlkb3duPSR7KGV2dDogS2V5Ym9hcmRFdmVudCkgPT4gdGhpcy5faGFuZGxlS2V5Ym9hcmRFdmVudChldnQsIGRheSl9XG4gICAgICAgICAgICBzYmItcG9wb3Zlci1jbG9zZVxuICAgICAgICAgID5cbiAgICAgICAgICAgICR7ZGF5LmRheVZhbHVlfVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L3RkPlxuICAgICAgYDtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBSZW5kZXIgdGhlIHZpZXcgZm9yIHRoZSBtb250aCBzZWxlY3Rpb24uICovXG4gIHByaXZhdGUgX3JlbmRlck1vbnRoVmlldygpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8ZGl2IGNsYXNzPVwic2JiLWNhbGVuZGFyX19jb250cm9sc1wiPlxuICAgICAgICAke3RoaXMuX2dldEFycm93KFxuICAgICAgICAgICdsZWZ0JyxcbiAgICAgICAgICAoKSA9PiB0aGlzLl9nb1RvRGlmZmVyZW50WWVhcigtMSksXG4gICAgICAgICAgaTE4blByZXZpb3VzWWVhclt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XSxcbiAgICAgICAgICB0aGlzLl9wcmV2aW91c1llYXJEaXNhYmxlZCgpLFxuICAgICAgICApfVxuICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLWNhbGVuZGFyX19jb250cm9scy1tb250aFwiPiR7dGhpcy5fY3JlYXRlTGFiZWxGb3JNb250aFZpZXcoKX08L2Rpdj5cbiAgICAgICAgJHt0aGlzLl9nZXRBcnJvdyhcbiAgICAgICAgICAncmlnaHQnLFxuICAgICAgICAgICgpID0+IHRoaXMuX2dvVG9EaWZmZXJlbnRZZWFyKDEpLFxuICAgICAgICAgIGkxOG5OZXh0WWVhclt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XSxcbiAgICAgICAgICB0aGlzLl9uZXh0WWVhckRpc2FibGVkKCksXG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLWNvbnRhaW5lciBzYmItY2FsZW5kYXJfX3RhYmxlLW1vbnRoLXZpZXdcIj5cbiAgICAgICAgJHt0aGlzLl9jcmVhdGVNb250aFRhYmxlKHRoaXMuX21vbnRocywgdGhpcy5fY2hvc2VuWWVhciEpfVxuICAgICAgICAke3RoaXMuX3dpZGUgPyB0aGlzLl9jcmVhdGVNb250aFRhYmxlKHRoaXMuX21vbnRocywgdGhpcy5fY2hvc2VuWWVhciEgKyAxLCB0cnVlKSA6IG5vdGhpbmd9XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgdGhlIGxhYmVsIHdpdGggdGhlIHllYXIgZm9yIHRoZSBtb250aGx5IHZpZXcuICovXG4gIHByaXZhdGUgX2NyZWF0ZUxhYmVsRm9yTW9udGhWaWV3KCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgaWQ9XCJzYmItY2FsZW5kYXJfX21vbnRoLXNlbGVjdGlvblwiXG4gICAgICAgIGNsYXNzPVwic2JiLWNhbGVuZGFyX19jb250cm9scy1jaGFuZ2UtZGF0ZVwiXG4gICAgICAgIGFyaWEtbGFiZWw9JHtgJHtpMThuQ2FsZW5kYXJEYXRlU2VsZWN0aW9uW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfSAke3RoaXMuX2Nob3NlblllYXJ9YH1cbiAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5fcmVzZXRUb0RheVZpZXcoKX1cbiAgICAgID5cbiAgICAgICAgJHt0aGlzLl9jaG9zZW5ZZWFyfSAke3RoaXMuX3dpZGUgPyBgIC0gJHt0aGlzLl9jaG9zZW5ZZWFyISArIDF9YCA6IG5vdGhpbmd9XG4gICAgICAgIDxzYmItaWNvbiBuYW1lPVwiY2hldnJvbi1zbWFsbC11cC1zbWFsbFwiPjwvc2JiLWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxzYmItc2NyZWVuLXJlYWRlci1vbmx5IHJvbGU9XCJzdGF0dXNcIj4gJHt0aGlzLl9jaG9zZW5ZZWFyfSA8L3NiYi1zY3JlZW4tcmVhZGVyLW9ubHk+YDtcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIHRoZSB0YWJsZSBmb3IgdGhlIG1vbnRoIHNlbGVjdGlvbiB2aWV3LiAqL1xuICBwcml2YXRlIF9jcmVhdGVNb250aFRhYmxlKG1vbnRoczogTW9udGhbXVtdLCB5ZWFyOiBudW1iZXIsIHNoaWZ0UmlnaHQgPSBmYWxzZSk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDx0YWJsZVxuICAgICAgICBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGVcIlxuICAgICAgICBAYW5pbWF0aW9uZW5kPSR7KGU6IEFuaW1hdGlvbkV2ZW50KSA9PiB0aGlzLl90YWJsZUFuaW1hdGlvbkVuZChlKX1cbiAgICAgID5cbiAgICAgICAgJHt0aGlzLl93aWRlXG4gICAgICAgICAgPyBodG1sYDx0aGVhZCBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtaGVhZGVyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgIDx0ciBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtaGVhZGVyLXJvd1wiPlxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtaGVhZGVyXCIgY29sc3Bhbj0ke01PTlRIU19QRVJfUk9XfT4ke3llYXJ9PC90aD5cbiAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDwvdGhlYWQ+YFxuICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgPHRib2R5IGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS1ib2R5XCI+XG4gICAgICAgICAgJHttb250aHMubWFwKFxuICAgICAgICAgICAgKHJvdzogTW9udGhbXSkgPT4gaHRtbGBcbiAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICR7cm93Lm1hcCgobW9udGg6IE1vbnRoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBpc091dE9mUmFuZ2UgPSAhdGhpcy5faXNNb250aEluUmFuZ2UobW9udGgubW9udGhWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICBjb25zdCBpc0ZpbHRlcmVkT3V0ID0gIXRoaXMuX2lzTW9udGhGaWx0ZXJlZE91dChtb250aC5tb250aFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkTW9udGggPSB0aGlzLl9zZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoKHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKHRoaXMuX3NlbGVjdGVkKSEpXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRZZWFyID0gdGhpcy5fc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKHRoaXMuX3NlbGVjdGVkKSEpXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWQ6IGJvb2xlYW4gPVxuICAgICAgICAgICAgICAgICAgICAhIXRoaXMuX3NlbGVjdGVkICYmIHllYXIgPT09IHNlbGVjdGVkWWVhciAmJiBtb250aC5tb250aFZhbHVlID09PSBzZWxlY3RlZE1vbnRoO1xuXG4gICAgICAgICAgICAgICAgICBjb25zdCBpc0N1cnJlbnRNb250aCA9XG4gICAgICAgICAgICAgICAgICAgIHllYXIgPT09IHRoaXMuX2RhdGVBZGFwdGVyLmdldFllYXIodGhpcy5ub3cpICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoKHRoaXMubm93KSA9PT0gbW9udGgubW9udGhWYWx1ZTtcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0bWxgIDx0ZFxuICAgICAgICAgICAgICAgICAgICBjbGFzcz0ke2NsYXNzTWFwKHtcbiAgICAgICAgICAgICAgICAgICAgICAnc2JiLWNhbGVuZGFyX190YWJsZS1kYXRhJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAnc2JiLWNhbGVuZGFyX190YWJsZS1tb250aCc6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9JHtjbGFzc01hcCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAnc2JiLWNhbGVuZGFyX19jZWxsJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdzYmItY2FsZW5kYXJfX3BpbGwnOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3NiYi1jYWxlbmRhcl9fY2VsbC1jdXJyZW50JzogaXNDdXJyZW50TW9udGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAnc2JiLWNhbGVuZGFyX19jcm9zc2VkLW91dCc6ICFpc091dE9mUmFuZ2UgJiYgaXNGaWx0ZXJlZE91dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdzYmItY2FsZW5kYXJfX3NlbGVjdGVkJzogc2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5fb25Nb250aFNlbGVjdGlvbihtb250aC5tb250aFZhbHVlLCB5ZWFyLCBzaGlmdFJpZ2h0KX1cbiAgICAgICAgICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHtpc091dE9mUmFuZ2UgfHwgaXNGaWx0ZXJlZE91dH1cbiAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPSR7YCR7bW9udGgubG9uZ1ZhbHVlfSAke3RoaXMuX2Nob3NlblllYXJ9YH1cbiAgICAgICAgICAgICAgICAgICAgICBhcmlhLXByZXNzZWQ9JHtzZWxlY3RlZH1cbiAgICAgICAgICAgICAgICAgICAgICBhcmlhLWRpc2FibGVkPSR7U3RyaW5nKGlzT3V0T2ZSYW5nZSB8fCBpc0ZpbHRlcmVkT3V0KX1cbiAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnRoPSR7bW9udGgubW9udGhWYWx1ZSB8fCBub3RoaW5nfVxuICAgICAgICAgICAgICAgICAgICAgIEBrZXlkb3duPSR7KGV2dDogS2V5Ym9hcmRFdmVudCkgPT4gdGhpcy5faGFuZGxlS2V5Ym9hcmRFdmVudChldnQpfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgJHttb250aC52YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L3RkPmA7XG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICBgLFxuICAgICAgICAgICl9XG4gICAgICAgIDwvdGJvZHk+XG4gICAgICA8L3RhYmxlPlxuICAgIGA7XG4gIH1cblxuICAvKiogU2VsZWN0IHRoZSBtb250aCBhbmQgY2hhbmdlIHRoZSB2aWV3IHRvIGRheSBzZWxlY3Rpb24uICovXG4gIHByaXZhdGUgX29uTW9udGhTZWxlY3Rpb24obW9udGg6IG51bWJlciwgeWVhcjogbnVtYmVyLCBzaGlmdFJpZ2h0OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5fY2hvc2VuTW9udGggPSBzaGlmdFJpZ2h0ID8gbW9udGggKyAxIDogbW9udGg7XG4gICAgdGhpcy5fbmV4dENhbGVuZGFyVmlldyA9ICdkYXknO1xuICAgIHRoaXMuX2luaXQoXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKFxuICAgICAgICB5ZWFyLFxuICAgICAgICB0aGlzLl9jaG9zZW5Nb250aCxcbiAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0RGF0ZSh0aGlzLl9hY3RpdmVEYXRlKSxcbiAgICAgICksXG4gICAgKTtcbiAgICB0aGlzLl9yZW1vdmVUYWJsZSgpO1xuICB9XG5cbiAgLyoqIFJlbmRlciB0aGUgdmlldyBmb3IgdGhlIHllYXIgc2VsZWN0aW9uLiAqL1xuICBwcml2YXRlIF9yZW5kZXJZZWFyVmlldygpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8ZGl2IGNsYXNzPVwic2JiLWNhbGVuZGFyX19jb250cm9sc1wiPlxuICAgICAgICAke3RoaXMuX2dldEFycm93KFxuICAgICAgICAgICdsZWZ0JyxcbiAgICAgICAgICAoKSA9PiB0aGlzLl9nb1RvRGlmZmVyZW50WWVhclJhbmdlKC1ZRUFSU19QRVJfUEFHRSksXG4gICAgICAgICAgaTE4blByZXZpb3VzWWVhclJhbmdlKFlFQVJTX1BFUl9QQUdFKVt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XSxcbiAgICAgICAgICB0aGlzLl9wcmV2aW91c1llYXJSYW5nZURpc2FibGVkKCksXG4gICAgICAgICl9XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzYmItY2FsZW5kYXJfX2NvbnRyb2xzLW1vbnRoXCI+JHt0aGlzLl9jcmVhdGVMYWJlbEZvclllYXJWaWV3KCl9PC9kaXY+XG4gICAgICAgICR7dGhpcy5fZ2V0QXJyb3coXG4gICAgICAgICAgJ3JpZ2h0JyxcbiAgICAgICAgICAoKSA9PiB0aGlzLl9nb1RvRGlmZmVyZW50WWVhclJhbmdlKFlFQVJTX1BFUl9QQUdFKSxcbiAgICAgICAgICBpMThuTmV4dFllYXJSYW5nZShZRUFSU19QRVJfUEFHRSlbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF0sXG4gICAgICAgICAgdGhpcy5fbmV4dFllYXJSYW5nZURpc2FibGVkKCksXG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLWNvbnRhaW5lciBzYmItY2FsZW5kYXJfX3RhYmxlLXllYXItdmlld1wiPlxuICAgICAgICAke3RoaXMuX2NyZWF0ZVllYXJUYWJsZSh0aGlzLl95ZWFycyl9XG4gICAgICAgICR7dGhpcy5fd2lkZSA/IHRoaXMuX2NyZWF0ZVllYXJUYWJsZSh0aGlzLl9uZXh0TW9udGhZZWFycywgdHJ1ZSkgOiBub3RoaW5nfVxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIHRoZSBidXR0b24gYXJyb3cgZm9yIGFsbCB0aGUgdmlld3MuICovXG4gIHByaXZhdGUgX2dldEFycm93KFxuICAgIGRpcmVjdGlvbjogJ2xlZnQnIHwgJ3JpZ2h0JyxcbiAgICBjbGljazogKCkgPT4gdm9pZCxcbiAgICBhcmlhTGFiZWw6IHN0cmluZyxcbiAgICBkaXNhYmxlZDogYm9vbGVhbixcbiAgKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYDxzYmItc2Vjb25kYXJ5LWJ1dHRvblxuICAgICAgc2l6ZT1cIm1cIlxuICAgICAgaWNvbi1uYW1lPVwiY2hldnJvbi1zbWFsbC0ke2RpcmVjdGlvbn0tc21hbGxcIlxuICAgICAgYXJpYS1sYWJlbD0ke2FyaWFMYWJlbH1cbiAgICAgIEBjbGljaz0ke2NsaWNrfVxuICAgICAgP2Rpc2FibGVkPSR7ZGlzYWJsZWR9XG4gICAgICBpZD1cInNiYi1jYWxlbmRhcl9fY29udHJvbHMtJHtkaXJlY3Rpb24gPT09ICdsZWZ0JyA/ICdwcmV2aW91cycgOiAnbmV4dCd9XCJcbiAgICA+PC9zYmItc2Vjb25kYXJ5LWJ1dHRvbj5gO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgdGhlIGxhYmVsIHdpdGggdGhlIHllYXIgcmFuZ2UgZm9yIHRoZSB5ZWFybHkgdmlldy4gKi9cbiAgcHJpdmF0ZSBfY3JlYXRlTGFiZWxGb3JZZWFyVmlldygpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgY29uc3QgZmlyc3RZZWFyOiBudW1iZXIgPSB0aGlzLl95ZWFycy5mbGF0KClbMF07XG4gICAgY29uc3QgbGFzdFllYXJBcnJheTogbnVtYmVyW10gPSAoXG4gICAgICBpc0JyZWFrcG9pbnQoJ21lZGl1bScpICYmIHRoaXMud2lkZSA/IHRoaXMuX25leHRNb250aFllYXJzIDogdGhpcy5feWVhcnNcbiAgICApLmZsYXQoKTtcbiAgICBjb25zdCBsYXN0WWVhcjogbnVtYmVyID0gbGFzdFllYXJBcnJheVtsYXN0WWVhckFycmF5Lmxlbmd0aCAtIDFdO1xuICAgIGNvbnN0IHllYXJMYWJlbCA9IGAke2ZpcnN0WWVhcn0gLSAke2xhc3RZZWFyfWA7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBpZD1cInNiYi1jYWxlbmRhcl9feWVhci1zZWxlY3Rpb25cIlxuICAgICAgICBjbGFzcz1cInNiYi1jYWxlbmRhcl9fY29udHJvbHMtY2hhbmdlLWRhdGVcIlxuICAgICAgICBhcmlhLWxhYmVsPVwiJHtpMThuQ2FsZW5kYXJEYXRlU2VsZWN0aW9uW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfSAke3llYXJMYWJlbH1cIlxuICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLl9yZXNldFRvRGF5VmlldygpfVxuICAgICAgPlxuICAgICAgICAke3llYXJMYWJlbH1cbiAgICAgICAgPHNiYi1pY29uIG5hbWU9XCJjaGV2cm9uLXNtYWxsLXVwLXNtYWxsXCI+PC9zYmItaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPHNiYi1zY3JlZW4tcmVhZGVyLW9ubHkgcm9sZT1cInN0YXR1c1wiPiAke3llYXJMYWJlbH0gPC9zYmItc2NyZWVuLXJlYWRlci1vbmx5PlxuICAgIGA7XG4gIH1cblxuICAvKiogQ3JlYXRlcyB0aGUgdGFibGUgZm9yIHRoZSB5ZWFyIHNlbGVjdGlvbiB2aWV3LiAqL1xuICBwcml2YXRlIF9jcmVhdGVZZWFyVGFibGUoeWVhcnM6IG51bWJlcltdW10sIHNoaWZ0UmlnaHQgPSBmYWxzZSk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICBjb25zdCBub3cgPSB0aGlzLm5vdztcbiAgICByZXR1cm4gaHRtbGAgPHRhYmxlXG4gICAgICBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGVcIlxuICAgICAgQGFuaW1hdGlvbmVuZD0keyhlOiBBbmltYXRpb25FdmVudCkgPT4gdGhpcy5fdGFibGVBbmltYXRpb25FbmQoZSl9XG4gICAgPlxuICAgICAgPHRib2R5IGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS1ib2R5XCI+XG4gICAgICAgICR7eWVhcnMubWFwKFxuICAgICAgICAgIChyb3c6IG51bWJlcltdKSA9PlxuICAgICAgICAgICAgaHRtbGAgPHRyPlxuICAgICAgICAgICAgICAke3Jvdy5tYXAoKHllYXI6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzT3V0T2ZSYW5nZSA9ICF0aGlzLl9pc1llYXJJblJhbmdlKHllYXIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzRmlsdGVyZWRPdXQgPSAhdGhpcy5faXNZZWFyRmlsdGVyZWRPdXQoeWVhcik7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRZZWFyID0gdGhpcy5fc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgID8gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcih0aGlzLl9kYXRlQWRhcHRlci5kZXNlcmlhbGl6ZSh0aGlzLl9zZWxlY3RlZCkhKVxuICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWQ6IGJvb2xlYW4gPSAhIXRoaXMuX3NlbGVjdGVkICYmIHllYXIgPT09IHNlbGVjdGVkWWVhcjtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0N1cnJlbnRZZWFyID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcihub3cpID09PSB5ZWFyO1xuICAgICAgICAgICAgICAgIHJldHVybiBodG1sYCA8dGQgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLWRhdGEgc2JiLWNhbGVuZGFyX190YWJsZS15ZWFyXCI+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPSR7Y2xhc3NNYXAoe1xuICAgICAgICAgICAgICAgICAgICAgICdzYmItY2FsZW5kYXJfX2NlbGwnOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICdzYmItY2FsZW5kYXJfX3BpbGwnOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICdzYmItY2FsZW5kYXJfX2NlbGwtY3VycmVudCc6IGlzQ3VycmVudFllYXIsXG4gICAgICAgICAgICAgICAgICAgICAgJ3NiYi1jYWxlbmRhcl9fY3Jvc3NlZC1vdXQnOiAhaXNPdXRPZlJhbmdlICYmIGlzRmlsdGVyZWRPdXQsXG4gICAgICAgICAgICAgICAgICAgICAgJ3NiYi1jYWxlbmRhcl9fc2VsZWN0ZWQnOiBzZWxlY3RlZCxcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuX29uWWVhclNlbGVjdGlvbih5ZWFyLCBzaGlmdFJpZ2h0KX1cbiAgICAgICAgICAgICAgICAgICAgP2Rpc2FibGVkPSR7aXNPdXRPZlJhbmdlIHx8IGlzRmlsdGVyZWRPdXR9XG4gICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9JHt5ZWFyfVxuICAgICAgICAgICAgICAgICAgICBhcmlhLXByZXNzZWQ9JHtzZWxlY3RlZH1cbiAgICAgICAgICAgICAgICAgICAgYXJpYS1kaXNhYmxlZD0ke1N0cmluZyhpc091dE9mUmFuZ2UgfHwgaXNGaWx0ZXJlZE91dCl9XG4gICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLXllYXI9JHt5ZWFyIHx8IG5vdGhpbmd9XG4gICAgICAgICAgICAgICAgICAgIEBrZXlkb3duPSR7KGV2dDogS2V5Ym9hcmRFdmVudCkgPT4gdGhpcy5faGFuZGxlS2V5Ym9hcmRFdmVudChldnQpfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAke3llYXJ9XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L3RkPmA7XG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPC90cj5gLFxuICAgICAgICApfVxuICAgICAgPC90Ym9keT5cbiAgICA8L3RhYmxlPmA7XG4gIH1cblxuICAvKiogU2VsZWN0IHRoZSB5ZWFyIGFuZCBjaGFuZ2UgdGhlIHZpZXcgdG8gbW9udGggc2VsZWN0aW9uLiAqL1xuICBwcml2YXRlIF9vblllYXJTZWxlY3Rpb24oeWVhcjogbnVtYmVyLCByaWdodFNpZGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLl9jaG9zZW5ZZWFyID0gcmlnaHRTaWRlID8geWVhciAtIDEgOiB5ZWFyO1xuICAgIHRoaXMuX25leHRDYWxlbmRhclZpZXcgPSAnbW9udGgnO1xuICAgIHRoaXMuX2Fzc2lnbkFjdGl2ZURhdGUoXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKFxuICAgICAgICB0aGlzLl9jaG9zZW5ZZWFyLFxuICAgICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRNb250aCh0aGlzLl9hY3RpdmVEYXRlKSxcbiAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0RGF0ZSh0aGlzLl9hY3RpdmVEYXRlKSxcbiAgICAgICksXG4gICAgKTtcbiAgICB0aGlzLl9yZW1vdmVUYWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgX2dldFZpZXcoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHN3aXRjaCAodGhpcy5fY2FsZW5kYXJWaWV3KSB7XG4gICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlclllYXJWaWV3KCk7XG4gICAgICBjYXNlICdtb250aCc6XG4gICAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJNb250aFZpZXcoKTtcbiAgICAgIGNhc2UgJ2RheSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy5fcmVuZGVyRGF5VmlldygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3RhYmxlQW5pbWF0aW9uRW5kKGV2ZW50OiBBbmltYXRpb25FdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHRhYmxlID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGlmIChldmVudC5hbmltYXRpb25OYW1lID09PSAnaGlkZScpIHtcbiAgICAgIHRhYmxlLmNsYXNzTGlzdC5yZW1vdmUoJ3NiYi1jYWxlbmRhcl9fdGFibGUtaGlkZScpO1xuICAgICAgdGhpcy5fcmVzZXRGb2N1cyA9IHRydWU7XG4gICAgICB0aGlzLl9jYWxlbmRhclZpZXcgPSB0aGlzLl9uZXh0Q2FsZW5kYXJWaWV3O1xuICAgIH0gZWxzZSBpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSA9PT0gJ3Nob3cnKSB7XG4gICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS10cmFuc2l0aW9uJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcmVtb3ZlVGFibGUoKTogdm9pZCB7XG4gICAgdGhpcy50b2dnbGVBdHRyaWJ1dGUoJ2RhdGEtdHJhbnNpdGlvbicsIHRydWUpO1xuICAgIHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvckFsbCgndGFibGUnKS5mb3JFYWNoKChlKSA9PlxuICAgICAgZS5jbGFzc0xpc3QudG9nZ2xlKCdzYmItY2FsZW5kYXJfX3RhYmxlLWhpZGUnKSxcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlcigpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgPGRpdiBjbGFzcz1cInNiYi1jYWxlbmRhcl9fd3JhcHBlclwiPiR7dGhpcy5fZ2V0Vmlld308L2Rpdj5gO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICdzYmItY2FsZW5kYXInOiBTYmJDYWxlbmRhckVsZW1lbnQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTRGYSxJQUFBLHFCQUFOLGNBQTJDLFdBQVc7QUFBQSxFQXFJcEQsY0FBYztBQUNiO0FBL0hxQixTQUFPLE9BQU87QUE4QjNDLFNBQVEsT0FBaUI7QUF3QnpCLFNBQVEsZUFBK0I7QUFHdkMsU0FBUSxnQkFBaUMsSUFBSTtBQUFBLE1BQzNDO0FBQUEsTUFDQSxtQkFBbUIsT0FBTztBQUFBLElBQUE7QUFJbkIsU0FBUSxjQUFpQixLQUFLO0FBYzlCLFNBQVEsZ0JBQThCO0FBRS9DLFNBQVEsb0JBQWtDO0FBTTFDLFNBQVEsU0FBa0I7QUFlMUIsU0FBUSxjQUF3QixLQUFLLGFBQWEsY0FBYyxNQUFNO0FBZ0J0RSxTQUFRLGNBQWM7QUFFdEIsU0FBUSxlQUFlO0FBRWYsU0FBQSxTQUFTLElBQUksNEJBQTRCLElBQUk7QUFDckQsU0FBUSxZQUFZLElBQUksc0JBQXNCLElBQUksRUFBRSxZQUFZLE1BQU07QUFDcEUsV0FBSyxjQUFjLEtBQUssYUFBYSxjQUFjLE1BQU07QUFDekQsV0FBSyxpQkFBaUI7QUFBQSxJ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
|