@angular/cdk 13.0.0-next.6 → 13.0.0-rc.1
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/a11y/a11y-module.d.ts +9 -7
- package/a11y/aria-describer/aria-describer.d.ts +3 -7
- package/a11y/focus-monitor/focus-monitor.d.ts +5 -0
- package/a11y/focus-trap/configurable-focus-trap-factory.d.ts +3 -7
- package/a11y/focus-trap/focus-trap-manager.d.ts +3 -7
- package/a11y/focus-trap/focus-trap.d.ts +5 -0
- package/a11y/high-contrast-mode/high-contrast-mode-detector.d.ts +3 -0
- package/a11y/index.d.ts +0 -1
- package/a11y/input-modality/input-modality-detector.d.ts +3 -7
- package/a11y/interactivity-checker/interactivity-checker.d.ts +3 -0
- package/a11y/live-announcer/live-announcer.d.ts +6 -1
- package/a11y/package.json +5 -5
- package/accordion/accordion-item.d.ts +3 -0
- package/accordion/accordion-module.d.ts +6 -7
- package/accordion/accordion.d.ts +3 -0
- package/accordion/index.d.ts +0 -1
- package/accordion/package.json +5 -5
- package/bidi/bidi-module.d.ts +5 -7
- package/bidi/dir.d.ts +3 -0
- package/bidi/directionality.d.ts +3 -0
- package/bidi/index.d.ts +0 -1
- package/bidi/package.json +5 -5
- package/clipboard/clipboard-module.d.ts +5 -7
- package/clipboard/clipboard.d.ts +3 -7
- package/clipboard/copy-to-clipboard.d.ts +3 -0
- package/clipboard/package.json +5 -5
- package/coercion/package.json +5 -5
- package/collections/package.json +5 -5
- package/collections/unique-selection-dispatcher.d.ts +3 -0
- package/drag-drop/client-rect.d.ts +8 -1
- package/drag-drop/directives/drag-handle.d.ts +3 -0
- package/drag-drop/directives/drag-placeholder.d.ts +3 -0
- package/drag-drop/directives/drag-preview.d.ts +3 -0
- package/drag-drop/directives/drag.d.ts +3 -0
- package/drag-drop/directives/drop-list-group.d.ts +3 -0
- package/drag-drop/directives/drop-list.d.ts +3 -0
- package/drag-drop/drag-drop-module.d.ts +11 -7
- package/drag-drop/drag-drop-registry.d.ts +3 -0
- package/drag-drop/drag-drop.d.ts +3 -0
- package/drag-drop/index.d.ts +0 -1
- package/drag-drop/package.json +5 -5
- package/esm2020/a11y/a11y-module.mjs +33 -0
- package/esm2020/a11y/aria-describer/aria-describer.mjs +208 -0
- package/{esm2015/a11y/aria-describer/aria-reference.js → esm2020/a11y/aria-describer/aria-reference.mjs} +1 -1
- package/esm2020/a11y/fake-event-detection.mjs +29 -0
- package/esm2020/a11y/focus-monitor/focus-monitor.mjs +400 -0
- package/{esm2015/a11y/focus-trap/configurable-focus-trap-config.js → esm2020/a11y/focus-trap/configurable-focus-trap-config.mjs} +0 -0
- package/esm2020/a11y/focus-trap/configurable-focus-trap-factory.mjs +53 -0
- package/esm2020/a11y/focus-trap/configurable-focus-trap.mjs +51 -0
- package/esm2020/a11y/focus-trap/event-listener-inert-strategy.mjs +61 -0
- package/esm2020/a11y/focus-trap/focus-trap-inert-strategy.mjs +11 -0
- package/esm2020/a11y/focus-trap/focus-trap-manager.mjs +53 -0
- package/esm2020/a11y/focus-trap/focus-trap.mjs +399 -0
- package/esm2020/a11y/high-contrast-mode/high-contrast-mode-detector.mjs +95 -0
- package/esm2020/a11y/index.mjs +5 -0
- package/esm2020/a11y/input-modality/input-modality-detector.mjs +176 -0
- package/esm2020/a11y/interactivity-checker/interactivity-checker.mjs +238 -0
- package/{esm2015/a11y/key-manager/activedescendant-key-manager.js → esm2020/a11y/key-manager/activedescendant-key-manager.mjs} +1 -1
- package/{esm2015/a11y/key-manager/focus-key-manager.js → esm2020/a11y/key-manager/focus-key-manager.mjs} +0 -0
- package/esm2020/a11y/key-manager/list-key-manager.mjs +321 -0
- package/esm2020/a11y/live-announcer/live-announcer-tokens.mjs +19 -0
- package/esm2020/a11y/live-announcer/live-announcer.mjs +170 -0
- package/{esm2015/a11y/public-api.js → esm2020/a11y/public-api.mjs} +0 -0
- package/esm2020/accordion/accordion-item.mjs +167 -0
- package/esm2020/accordion/accordion-module.mjs +24 -0
- package/esm2020/accordion/accordion.mjs +70 -0
- package/esm2020/accordion/index.mjs +5 -0
- package/{esm2015/accordion/public-api.js → esm2020/accordion/public-api.mjs} +0 -0
- package/esm2020/bidi/bidi-module.mjs +23 -0
- package/{esm2015/bidi/dir-document-token.js → esm2020/bidi/dir-document-token.mjs} +1 -1
- package/esm2020/bidi/dir.mjs +67 -0
- package/esm2020/bidi/directionality.mjs +47 -0
- package/esm2020/bidi/index.mjs +5 -0
- package/{esm2015/bidi/public-api.js → esm2020/bidi/public-api.mjs} +1 -1
- package/esm2020/clipboard/clipboard-module.mjs +23 -0
- package/esm2020/clipboard/clipboard.mjs +53 -0
- package/esm2020/clipboard/copy-to-clipboard.mjs +99 -0
- package/{esm2015/clipboard/index.js → esm2020/clipboard/index.mjs} +0 -0
- package/esm2020/clipboard/pending-copy.mjs +67 -0
- package/{esm2015/clipboard/public-api.js → esm2020/clipboard/public-api.mjs} +0 -0
- package/{esm2015/coercion/array.js → esm2020/coercion/array.mjs} +0 -0
- package/{esm2015/coercion/boolean-property.js → esm2020/coercion/boolean-property.mjs} +0 -0
- package/{esm2015/coercion/css-pixel-value.js → esm2020/coercion/css-pixel-value.mjs} +0 -0
- package/{esm2015/coercion/element.js → esm2020/coercion/element.mjs} +0 -0
- package/{esm2015/coercion/index.js → esm2020/coercion/index.mjs} +0 -0
- package/{esm2015/coercion/number-property.js → esm2020/coercion/number-property.mjs} +0 -0
- package/{esm2015/coercion/public-api.js → esm2020/coercion/public-api.mjs} +0 -0
- package/{esm2015/coercion/string-array.js → esm2020/coercion/string-array.mjs} +0 -0
- package/{esm2015/collections/array-data-source.js → esm2020/collections/array-data-source.mjs} +1 -1
- package/esm2020/collections/collection-viewer.mjs +9 -0
- package/{esm2015/collections/data-source.js → esm2020/collections/data-source.mjs} +0 -0
- package/esm2020/collections/dispose-view-repeater-strategy.mjs +47 -0
- package/{esm2015/collections/index.js → esm2020/collections/index.mjs} +0 -0
- package/{esm2015/collections/public-api.js → esm2020/collections/public-api.mjs} +0 -0
- package/esm2020/collections/recycle-view-repeater-strategy.mjs +128 -0
- package/{esm2015/collections/selection-model.js → esm2020/collections/selection-model.mjs} +2 -2
- package/esm2020/collections/tree-adapter.mjs +9 -0
- package/esm2020/collections/unique-selection-dispatcher.mjs +55 -0
- package/esm2020/collections/view-repeater.mjs +14 -0
- package/esm2020/drag-drop/client-rect.mjs +64 -0
- package/esm2020/drag-drop/clone-node.mjs +65 -0
- package/esm2020/drag-drop/directives/assertions.mjs +18 -0
- package/{esm2015/drag-drop/directives/config.js → esm2020/drag-drop/directives/config.mjs} +1 -1
- package/esm2020/drag-drop/directives/drag-handle.mjs +66 -0
- package/esm2020/drag-drop/directives/drag-placeholder.mjs +36 -0
- package/esm2020/drag-drop/directives/drag-preview.mjs +47 -0
- package/esm2020/drag-drop/directives/drag.mjs +483 -0
- package/esm2020/drag-drop/directives/drop-list-group.mjs +53 -0
- package/esm2020/drag-drop/directives/drop-list.mjs +344 -0
- package/esm2020/drag-drop/drag-drop-module.mjs +57 -0
- package/esm2020/drag-drop/drag-drop-registry.mjs +231 -0
- package/esm2020/drag-drop/drag-drop.mjs +57 -0
- package/esm2020/drag-drop/drag-events.mjs +9 -0
- package/{esm2015/drag-drop/drag-parent.js → esm2020/drag-drop/drag-parent.mjs} +0 -0
- package/esm2020/drag-drop/drag-ref.mjs +1108 -0
- package/esm2020/drag-drop/drag-styling.mjs +69 -0
- package/esm2020/drag-drop/drag-utils.mjs +60 -0
- package/esm2020/drag-drop/drop-list-ref.mjs +830 -0
- package/{esm2015/drag-drop/index.js → esm2020/drag-drop/index.mjs} +1 -1
- package/{esm2015/drag-drop/parent-position-tracker.js → esm2020/drag-drop/parent-position-tracker.mjs} +2 -2
- package/{esm2015/drag-drop/public-api.js → esm2020/drag-drop/public-api.mjs} +0 -0
- package/esm2020/drag-drop/transition-duration.mjs +36 -0
- package/{esm2015/index.js → esm2020/index.mjs} +0 -0
- package/{esm2015/keycodes/index.js → esm2020/keycodes/index.mjs} +0 -0
- package/{esm2015/keycodes/keycodes.js → esm2020/keycodes/keycodes.mjs} +1 -1
- package/{esm2015/keycodes/modifiers.js → esm2020/keycodes/modifiers.mjs} +0 -0
- package/{esm2015/keycodes/public-api.js → esm2020/keycodes/public-api.mjs} +0 -0
- package/esm2020/layout/breakpoints-observer.mjs +105 -0
- package/{esm2015/layout/breakpoints.js → esm2020/layout/breakpoints.mjs} +1 -1
- package/{esm2015/layout/index.js → esm2020/layout/index.mjs} +0 -0
- package/esm2020/layout/layout-module.mjs +19 -0
- package/esm2020/layout/media-matcher.mjs +85 -0
- package/{esm2015/layout/public-api.js → esm2020/layout/public-api.mjs} +0 -0
- package/{esm2015/observers/index.js → esm2020/observers/index.mjs} +0 -0
- package/esm2020/observers/observe-content.mjs +187 -0
- package/{esm2015/observers/public-api.js → esm2020/observers/public-api.mjs} +0 -0
- package/esm2020/overlay/dispatchers/base-overlay-dispatcher.mjs +52 -0
- package/{esm2015/overlay/dispatchers/index.js → esm2020/overlay/dispatchers/index.mjs} +0 -0
- package/esm2020/overlay/dispatchers/overlay-keyboard-dispatcher.mjs +63 -0
- package/esm2020/overlay/dispatchers/overlay-outside-click-dispatcher.mjs +116 -0
- package/esm2020/overlay/fullscreen-overlay-container.mjs +94 -0
- package/esm2020/overlay/index.mjs +5 -0
- package/esm2020/overlay/overlay-config.mjs +45 -0
- package/esm2020/overlay/overlay-container.mjs +81 -0
- package/esm2020/overlay/overlay-directives.mjs +427 -0
- package/esm2020/overlay/overlay-module.mjs +29 -0
- package/esm2020/overlay/overlay-ref.mjs +402 -0
- package/{esm2015/overlay/overlay-reference.js → esm2020/overlay/overlay-reference.mjs} +0 -0
- package/esm2020/overlay/overlay.mjs +119 -0
- package/esm2020/overlay/position/connected-position.mjs +97 -0
- package/esm2020/overlay/position/flexible-connected-position-strategy.mjs +959 -0
- package/esm2020/overlay/position/global-position-strategy.mjs +203 -0
- package/esm2020/overlay/position/overlay-position-builder.mjs +50 -0
- package/{esm2015/overlay/position/position-strategy.js → esm2020/overlay/position/position-strategy.mjs} +0 -0
- package/esm2020/overlay/position/scroll-clip.mjs +40 -0
- package/{esm2015/overlay/public-api.js → esm2020/overlay/public-api.mjs} +0 -0
- package/{esm2015/overlay/scroll/block-scroll-strategy.js → esm2020/overlay/scroll/block-scroll-strategy.mjs} +1 -1
- package/esm2020/overlay/scroll/close-scroll-strategy.mjs +61 -0
- package/{esm2015/overlay/scroll/index.js → esm2020/overlay/scroll/index.mjs} +2 -2
- package/{esm2015/overlay/scroll/noop-scroll-strategy.js → esm2020/overlay/scroll/noop-scroll-strategy.mjs} +1 -1
- package/{esm2015/overlay/scroll/reposition-scroll-strategy.js → esm2020/overlay/scroll/reposition-scroll-strategy.mjs} +1 -1
- package/esm2020/overlay/scroll/scroll-strategy-options.mjs +55 -0
- package/{esm2015/overlay/scroll/scroll-strategy.js → esm2020/overlay/scroll/scroll-strategy.mjs} +0 -0
- package/{esm2015/platform/features/input-types.js → esm2020/platform/features/input-types.mjs} +1 -1
- package/esm2020/platform/features/passive-listeners.mjs +36 -0
- package/esm2020/platform/features/scrolling.mjs +85 -0
- package/{esm2015/platform/features/shadow-dom.js → esm2020/platform/features/shadow-dom.mjs} +4 -3
- package/esm2020/platform/features/test-environment.mjs +27 -0
- package/{esm2015/platform/index.js → esm2020/platform/index.mjs} +0 -0
- package/esm2020/platform/platform-module.mjs +19 -0
- package/esm2020/platform/platform.mjs +85 -0
- package/{esm2015/platform/public-api.js → esm2020/platform/public-api.mjs} +0 -0
- package/esm2020/portal/dom-portal-outlet.mjs +134 -0
- package/{esm2015/portal/index.js → esm2020/portal/index.mjs} +0 -0
- package/esm2020/portal/portal-directives.mjs +244 -0
- package/{esm2015/portal/portal-errors.js → esm2020/portal/portal-errors.mjs} +1 -1
- package/esm2020/portal/portal-injector.mjs +28 -0
- package/esm2020/portal/portal.mjs +179 -0
- package/{esm2015/portal/public-api.js → esm2020/portal/public-api.mjs} +0 -0
- package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
- package/esm2020/scrolling/fixed-size-virtual-scroll.mjs +217 -0
- package/{esm2015/scrolling/index.js → esm2020/scrolling/index.mjs} +0 -0
- package/{esm2015/scrolling/public-api.js → esm2020/scrolling/public-api.mjs} +0 -0
- package/esm2020/scrolling/scroll-dispatcher.mjs +163 -0
- package/esm2020/scrolling/scrollable.mjs +176 -0
- package/esm2020/scrolling/scrolling-module.mjs +52 -0
- package/esm2020/scrolling/viewport-ruler.mjs +146 -0
- package/esm2020/scrolling/virtual-for-of.mjs +296 -0
- package/{esm2015/scrolling/virtual-scroll-repeater.js → esm2020/scrolling/virtual-scroll-repeater.mjs} +0 -0
- package/esm2020/scrolling/virtual-scroll-strategy.mjs +11 -0
- package/esm2020/scrolling/virtual-scroll-viewport.mjs +378 -0
- package/{esm2015/stepper/index.js → esm2020/stepper/index.mjs} +0 -0
- package/{esm2015/stepper/public-api.js → esm2020/stepper/public-api.mjs} +0 -0
- package/esm2020/stepper/step-header.mjs +30 -0
- package/esm2020/stepper/step-label.mjs +23 -0
- package/esm2020/stepper/stepper-button.mjs +76 -0
- package/esm2020/stepper/stepper-module.mjs +40 -0
- package/esm2020/stepper/stepper.mjs +471 -0
- package/esm2020/table/can-stick.mjs +44 -0
- package/esm2020/table/cell.mjs +222 -0
- package/esm2020/table/coalesced-style-scheduler.mjs +91 -0
- package/{esm2015/table/index.js → esm2020/table/index.mjs} +0 -0
- package/{esm2015/table/public-api.js → esm2020/table/public-api.mjs} +0 -0
- package/esm2020/table/row.mjs +254 -0
- package/esm2020/table/sticky-position-listener.mjs +11 -0
- package/esm2020/table/sticky-styler.mjs +345 -0
- package/{esm2015/table/table-errors.js → esm2020/table/table-errors.mjs} +1 -1
- package/esm2020/table/table-module.mjs +94 -0
- package/esm2020/table/table.mjs +1023 -0
- package/esm2020/table/text-column.mjs +153 -0
- package/{esm2015/table/tokens.js → esm2020/table/tokens.mjs} +1 -1
- package/esm2020/testing/change-detection.mjs +102 -0
- package/esm2020/testing/component-harness.mjs +322 -0
- package/{esm2015/testing/element-dimensions.js → esm2020/testing/element-dimensions.mjs} +1 -1
- package/esm2020/testing/harness-environment.mjs +202 -0
- package/{esm2015/testing/index.js → esm2020/testing/index.mjs} +0 -0
- package/{esm2015/testing/protractor/index.js → esm2020/testing/protractor/index.mjs} +0 -0
- package/esm2020/testing/protractor/protractor-element.mjs +234 -0
- package/esm2020/testing/protractor/protractor-harness-environment.mjs +72 -0
- package/{esm2015/testing/protractor/public-api.js → esm2020/testing/protractor/public-api.mjs} +0 -0
- package/{esm2015/testing/public-api.js → esm2020/testing/public-api.mjs} +0 -0
- package/{esm2015/testing/selenium-webdriver/index.js → esm2020/testing/selenium-webdriver/index.mjs} +0 -0
- package/{esm2015/testing/selenium-webdriver/public-api.js → esm2020/testing/selenium-webdriver/public-api.mjs} +0 -0
- package/esm2020/testing/selenium-webdriver/selenium-web-driver-element.mjs +199 -0
- package/esm2020/testing/selenium-webdriver/selenium-web-driver-harness-environment.mjs +87 -0
- package/{esm2015/testing/selenium-webdriver/selenium-webdriver-keys.js → esm2020/testing/selenium-webdriver/selenium-webdriver-keys.mjs} +2 -2
- package/esm2020/testing/test-element.mjs +48 -0
- package/esm2020/testing/testbed/fake-events/dispatch-events.mjs +53 -0
- package/esm2020/testing/testbed/fake-events/element-focus.mjs +39 -0
- package/esm2020/testing/testbed/fake-events/event-objects.mjs +113 -0
- package/{esm2015/testing/testbed/fake-events/index.js → esm2020/testing/testbed/fake-events/index.mjs} +0 -0
- package/esm2020/testing/testbed/fake-events/type-in-element.mjs +88 -0
- package/{esm2015/testing/testbed/index.js → esm2020/testing/testbed/index.mjs} +0 -0
- package/{esm2015/testing/testbed/public-api.js → esm2020/testing/testbed/public-api.mjs} +0 -0
- package/esm2020/testing/testbed/task-state-zone-interceptor.mjs +82 -0
- package/esm2020/testing/testbed/testbed-harness-environment.mjs +162 -0
- package/esm2020/testing/testbed/unit-test-element.mjs +224 -0
- package/esm2020/testing/text-filtering.mjs +21 -0
- package/esm2020/text-field/autofill.mjs +113 -0
- package/esm2020/text-field/autosize.mjs +310 -0
- package/{esm2015/text-field/index.js → esm2020/text-field/index.mjs} +0 -0
- package/{esm2015/text-field/public-api.js → esm2020/text-field/public-api.mjs} +0 -0
- package/esm2020/text-field/text-field-module.mjs +26 -0
- package/{esm2015/tree/control/base-tree-control.js → esm2020/tree/control/base-tree-control.mjs} +4 -4
- package/{esm2015/tree/control/flat-tree-control.js → esm2020/tree/control/flat-tree-control.mjs} +1 -1
- package/esm2020/tree/control/nested-tree-control.mjs +58 -0
- package/{esm2015/tree/control/tree-control.js → esm2020/tree/control/tree-control.mjs} +0 -0
- package/{esm2015/tree/index.js → esm2020/tree/index.mjs} +0 -0
- package/esm2020/tree/nested-node.mjs +117 -0
- package/esm2020/tree/node.mjs +35 -0
- package/esm2020/tree/outlet.mjs +39 -0
- package/esm2020/tree/padding.mjs +131 -0
- package/{esm2015/tree/public-api.js → esm2020/tree/public-api.mjs} +0 -0
- package/esm2020/tree/toggle.mjs +53 -0
- package/{esm2015/tree/tree-errors.js → esm2020/tree/tree-errors.mjs} +0 -0
- package/esm2020/tree/tree-module.mjs +49 -0
- package/esm2020/tree/tree.mjs +361 -0
- package/{esm2015/version.js → esm2020/version.mjs} +1 -1
- package/fesm2015/a11y.mjs +2356 -0
- package/fesm2015/a11y.mjs.map +1 -0
- package/fesm2015/accordion.mjs +267 -0
- package/fesm2015/accordion.mjs.map +1 -0
- package/fesm2015/bidi.mjs +179 -0
- package/fesm2015/bidi.mjs.map +1 -0
- package/fesm2015/{cdk.js → cdk.mjs} +2 -2
- package/fesm2015/cdk.mjs.map +1 -0
- package/fesm2015/clipboard.mjs +253 -0
- package/fesm2015/clipboard.mjs.map +1 -0
- package/fesm2015/{coercion.js → coercion.mjs} +1 -1
- package/fesm2015/coercion.mjs.map +1 -0
- package/fesm2015/{collections.js → collections.mjs} +15 -27
- package/fesm2015/collections.mjs.map +1 -0
- package/fesm2015/drag-drop.mjs +3667 -0
- package/fesm2015/drag-drop.mjs.map +1 -0
- package/fesm2015/{keycodes.js → keycodes.mjs} +1 -1
- package/fesm2015/keycodes.mjs.map +1 -0
- package/fesm2015/{layout.js → layout.mjs} +30 -28
- package/fesm2015/layout.mjs.map +1 -0
- package/fesm2015/{observers.js → observers.mjs} +50 -41
- package/fesm2015/observers.mjs.map +1 -0
- package/fesm2015/overlay.mjs +3004 -0
- package/fesm2015/overlay.mjs.map +1 -0
- package/fesm2015/platform.mjs +380 -0
- package/fesm2015/platform.mjs.map +1 -0
- package/fesm2015/portal.mjs +649 -0
- package/fesm2015/portal.mjs.map +1 -0
- package/fesm2015/scrolling.mjs +1394 -0
- package/fesm2015/scrolling.mjs.map +1 -0
- package/fesm2015/{stepper.js → stepper.mjs} +186 -133
- package/fesm2015/stepper.mjs.map +1 -0
- package/fesm2015/{table.js → table.mjs} +500 -359
- package/fesm2015/table.mjs.map +1 -0
- package/fesm2015/testing/{protractor.js → protractor.mjs} +12 -25
- package/fesm2015/testing/protractor.mjs.map +1 -0
- package/fesm2015/testing/{selenium-webdriver.js → selenium-webdriver.mjs} +14 -28
- package/fesm2015/testing/selenium-webdriver.mjs.map +1 -0
- package/fesm2015/testing/{testbed.js → testbed.mjs} +23 -29
- package/fesm2015/testing/testbed.mjs.map +1 -0
- package/fesm2015/{testing.js → testing.mjs} +19 -45
- package/fesm2015/testing.mjs.map +1 -0
- package/fesm2015/text-field.mjs +455 -0
- package/fesm2015/text-field.mjs.map +1 -0
- package/fesm2015/{tree.js → tree.mjs} +198 -152
- package/fesm2015/tree.mjs.map +1 -0
- package/{fesm2015/a11y.js → fesm2020/a11y.mjs} +272 -233
- package/fesm2020/a11y.mjs.map +1 -0
- package/{fesm2015/accordion.js → fesm2020/accordion.mjs} +87 -57
- package/fesm2020/accordion.mjs.map +1 -0
- package/{fesm2015/bidi.js → fesm2020/bidi.mjs} +47 -31
- package/fesm2020/bidi.mjs.map +1 -0
- package/fesm2020/cdk.mjs +30 -0
- package/fesm2020/cdk.mjs.map +1 -0
- package/{fesm2015/clipboard.js → fesm2020/clipboard.mjs} +51 -40
- package/fesm2020/clipboard.mjs.map +1 -0
- package/fesm2020/coercion.mjs +132 -0
- package/fesm2020/coercion.mjs.map +1 -0
- package/fesm2020/collections.mjs +472 -0
- package/fesm2020/collections.mjs.map +1 -0
- package/{fesm2015/drag-drop.js → fesm2020/drag-drop.mjs} +523 -366
- package/fesm2020/drag-drop.mjs.map +1 -0
- package/fesm2020/keycodes.mjs +159 -0
- package/fesm2020/keycodes.mjs.map +1 -0
- package/fesm2020/layout.mjs +246 -0
- package/fesm2020/layout.mjs.map +1 -0
- package/fesm2020/observers.mjs +202 -0
- package/fesm2020/observers.mjs.map +1 -0
- package/{fesm2015/overlay.js → fesm2020/overlay.mjs} +312 -228
- package/fesm2020/overlay.mjs.map +1 -0
- package/{fesm2015/platform.js → fesm2020/platform.mjs} +52 -28
- package/fesm2020/platform.mjs.map +1 -0
- package/{fesm2015/portal.js → fesm2020/portal.mjs} +85 -64
- package/fesm2020/portal.mjs.map +1 -0
- package/{fesm2015/scrolling.js → fesm2020/scrolling.mjs} +213 -170
- package/fesm2020/scrolling.mjs.map +1 -0
- package/fesm2020/stepper.mjs +638 -0
- package/fesm2020/stepper.mjs.map +1 -0
- package/fesm2020/table.mjs +2295 -0
- package/fesm2020/table.mjs.map +1 -0
- package/fesm2020/testing/protractor.mjs +322 -0
- package/fesm2020/testing/protractor.mjs.map +1 -0
- package/fesm2020/testing/selenium-webdriver.mjs +362 -0
- package/fesm2020/testing/selenium-webdriver.mjs.map +1 -0
- package/fesm2020/testing/testbed.mjs +780 -0
- package/fesm2020/testing/testbed.mjs.map +1 -0
- package/fesm2020/testing.mjs +719 -0
- package/fesm2020/testing.mjs.map +1 -0
- package/{fesm2015/text-field.js → fesm2020/text-field.mjs} +83 -68
- package/fesm2020/text-field.mjs.map +1 -0
- package/fesm2020/tree.mjs +967 -0
- package/fesm2020/tree.mjs.map +1 -0
- package/keycodes/package.json +5 -5
- package/layout/breakpoints-observer.d.ts +3 -7
- package/layout/layout-module.d.ts +4 -0
- package/layout/media-matcher.d.ts +3 -0
- package/layout/package.json +5 -5
- package/observers/observe-content.d.ts +10 -0
- package/observers/package.json +5 -5
- package/overlay/dispatchers/base-overlay-dispatcher.d.ts +3 -7
- package/overlay/dispatchers/overlay-keyboard-dispatcher.d.ts +3 -7
- package/overlay/dispatchers/overlay-outside-click-dispatcher.d.ts +6 -7
- package/overlay/fullscreen-overlay-container.d.ts +3 -0
- package/overlay/index.d.ts +0 -2
- package/overlay/overlay-container.d.ts +3 -7
- package/overlay/overlay-directives.d.ts +5 -0
- package/overlay/overlay-module.d.ts +8 -7
- package/overlay/overlay.d.ts +3 -0
- package/overlay/package.json +5 -5
- package/overlay/position/flexible-connected-position-strategy.d.ts +2 -2
- package/overlay/position/overlay-position-builder.d.ts +3 -0
- package/overlay/position/scroll-clip.d.ts +5 -2
- package/overlay/scroll/index.d.ts +1 -1
- package/overlay/scroll/scroll-strategy-options.d.ts +3 -0
- package/package.json +219 -7
- package/platform/package.json +5 -5
- package/platform/platform-module.d.ts +4 -7
- package/platform/platform.d.ts +3 -7
- package/portal/package.json +5 -5
- package/portal/portal-directives.d.ts +12 -0
- package/schematics/ng-add/index.js +3 -3
- package/schematics/ng-add/index.mjs +3 -3
- package/schematics/ng-add/package-config.js +4 -2
- package/schematics/ng-add/package-config.mjs +4 -2
- package/schematics/ng-add/schema.js +1 -1
- package/schematics/ng-add/schema.mjs +1 -1
- package/schematics/ng-generate/drag-drop/index.js +6 -6
- package/schematics/ng-generate/drag-drop/index.mjs +6 -6
- package/schematics/ng-update/data/attribute-selectors.js +7 -5
- package/schematics/ng-update/data/attribute-selectors.mjs +7 -5
- package/schematics/ng-update/data/class-names.js +13 -11
- package/schematics/ng-update/data/class-names.mjs +13 -11
- package/schematics/ng-update/data/constructor-checks.js +28 -20
- package/schematics/ng-update/data/constructor-checks.mjs +28 -20
- package/schematics/ng-update/data/css-selectors.js +2 -2
- package/schematics/ng-update/data/css-selectors.mjs +2 -2
- package/schematics/ng-update/data/element-selectors.js +2 -2
- package/schematics/ng-update/data/element-selectors.mjs +2 -2
- package/schematics/ng-update/data/input-names.js +40 -16
- package/schematics/ng-update/data/input-names.mjs +40 -16
- package/schematics/ng-update/data/method-call-checks.js +32 -18
- package/schematics/ng-update/data/method-call-checks.mjs +32 -18
- package/schematics/ng-update/data/output-names.js +8 -6
- package/schematics/ng-update/data/output-names.mjs +8 -6
- package/schematics/ng-update/data/property-names.js +40 -32
- package/schematics/ng-update/data/property-names.mjs +40 -32
- package/schematics/ng-update/devkit-file-system.js +2 -2
- package/schematics/ng-update/devkit-file-system.mjs +2 -2
- package/schematics/ng-update/devkit-migration-rule.js +8 -7
- package/schematics/ng-update/devkit-migration-rule.mjs +8 -7
- package/schematics/ng-update/devkit-migration.d.ts +1 -1
- package/schematics/ng-update/devkit-migration.js +1 -1
- package/schematics/ng-update/devkit-migration.mjs +1 -1
- package/schematics/ng-update/find-stylesheets.js +3 -3
- package/schematics/ng-update/find-stylesheets.mjs +3 -3
- package/schematics/ng-update/html-parsing/angular.js +7 -7
- package/schematics/ng-update/html-parsing/angular.mjs +7 -7
- package/schematics/ng-update/html-parsing/elements.js +2 -2
- package/schematics/ng-update/html-parsing/elements.mjs +2 -2
- package/schematics/ng-update/index.js +11 -9
- package/schematics/ng-update/index.mjs +11 -9
- package/schematics/ng-update/migrations/attribute-selectors.js +11 -7
- package/schematics/ng-update/migrations/attribute-selectors.mjs +11 -7
- package/schematics/ng-update/migrations/class-inheritance.js +3 -3
- package/schematics/ng-update/migrations/class-inheritance.mjs +3 -3
- package/schematics/ng-update/migrations/class-names.js +7 -6
- package/schematics/ng-update/migrations/class-names.mjs +7 -6
- package/schematics/ng-update/migrations/constructor-signature.js +16 -13
- package/schematics/ng-update/migrations/constructor-signature.mjs +16 -13
- package/schematics/ng-update/migrations/css-selectors.js +7 -6
- package/schematics/ng-update/migrations/css-selectors.mjs +7 -6
- package/schematics/ng-update/migrations/element-selectors.js +7 -6
- package/schematics/ng-update/migrations/element-selectors.mjs +7 -6
- package/schematics/ng-update/migrations/input-names.js +8 -9
- package/schematics/ng-update/migrations/input-names.mjs +8 -9
- package/schematics/ng-update/migrations/method-call-arguments.js +4 -3
- package/schematics/ng-update/migrations/method-call-arguments.mjs +4 -3
- package/schematics/ng-update/migrations/misc-template.js +3 -3
- package/schematics/ng-update/migrations/misc-template.mjs +3 -3
- package/schematics/ng-update/migrations/output-names.js +7 -8
- package/schematics/ng-update/migrations/output-names.mjs +7 -8
- package/schematics/ng-update/migrations/property-names.js +4 -3
- package/schematics/ng-update/migrations/property-names.mjs +4 -3
- package/schematics/ng-update/migrations/symbol-removal.js +2 -2
- package/schematics/ng-update/migrations/symbol-removal.mjs +2 -2
- package/schematics/ng-update/migrations/tilde-import-v13/tilde-import-migration.d.ts +14 -0
- package/schematics/ng-update/migrations/tilde-import-v13/tilde-import-migration.js +38 -0
- package/schematics/ng-update/migrations/tilde-import-v13/tilde-import-migration.mjs +38 -0
- package/schematics/ng-update/typescript/base-types.js +1 -1
- package/schematics/ng-update/typescript/base-types.mjs +1 -1
- package/schematics/ng-update/typescript/literal.d.ts +1 -1
- package/schematics/ng-update/typescript/literal.js +1 -1
- package/schematics/ng-update/typescript/literal.mjs +1 -1
- package/schematics/ng-update/typescript/module-specifiers.js +5 -5
- package/schematics/ng-update/typescript/module-specifiers.mjs +5 -5
- package/schematics/ng-update/upgrade-data.js +2 -2
- package/schematics/ng-update/upgrade-data.mjs +2 -2
- package/schematics/package.json +3 -0
- package/schematics/paths.js +3 -3
- package/schematics/paths.mjs +3 -3
- package/schematics/update-tool/component-resource-collector.js +10 -10
- package/schematics/update-tool/component-resource-collector.mjs +10 -10
- package/schematics/update-tool/file-system.js +1 -1
- package/schematics/update-tool/file-system.mjs +1 -1
- package/schematics/update-tool/index.d.ts +4 -1
- package/schematics/update-tool/index.js +9 -5
- package/schematics/update-tool/index.mjs +9 -5
- package/schematics/update-tool/migration.d.ts +1 -1
- package/schematics/update-tool/migration.js +1 -1
- package/schematics/update-tool/migration.mjs +1 -1
- package/schematics/update-tool/target-version.js +1 -1
- package/schematics/update-tool/target-version.mjs +1 -1
- package/schematics/update-tool/utils/decorators.js +8 -4
- package/schematics/update-tool/utils/decorators.mjs +8 -4
- package/schematics/update-tool/utils/functions.js +1 -1
- package/schematics/update-tool/utils/functions.mjs +1 -1
- package/schematics/update-tool/utils/imports.js +2 -2
- package/schematics/update-tool/utils/imports.mjs +2 -2
- package/schematics/update-tool/utils/line-mappings.js +1 -1
- package/schematics/update-tool/utils/line-mappings.mjs +1 -1
- package/schematics/update-tool/utils/parse-tsconfig.js +2 -2
- package/schematics/update-tool/utils/parse-tsconfig.mjs +2 -2
- package/schematics/update-tool/utils/property-name.js +1 -1
- package/schematics/update-tool/utils/property-name.mjs +1 -1
- package/schematics/update-tool/utils/virtual-host.d.ts +1 -1
- package/schematics/update-tool/utils/virtual-host.js +3 -3
- package/schematics/update-tool/utils/virtual-host.mjs +3 -3
- package/schematics/update-tool/version-changes.js +1 -1
- package/schematics/update-tool/version-changes.mjs +1 -1
- package/schematics/utils/ast/ng-module-imports.js +5 -3
- package/schematics/utils/ast/ng-module-imports.mjs +5 -3
- package/schematics/utils/ast.js +5 -5
- package/schematics/utils/ast.mjs +5 -5
- package/schematics/utils/build-component.js +32 -38
- package/schematics/utils/build-component.mjs +32 -38
- package/schematics/utils/get-project.js +1 -1
- package/schematics/utils/get-project.mjs +1 -1
- package/schematics/utils/html-manipulation.js +8 -7
- package/schematics/utils/html-manipulation.mjs +8 -7
- package/schematics/utils/parse5-element.js +9 -10
- package/schematics/utils/parse5-element.mjs +9 -10
- package/schematics/utils/project-index-file.js +2 -2
- package/schematics/utils/project-index-file.mjs +2 -2
- package/schematics/utils/project-main-file.js +2 -2
- package/schematics/utils/project-main-file.mjs +2 -2
- package/schematics/utils/project-style-file.js +7 -9
- package/schematics/utils/project-style-file.mjs +7 -9
- package/schematics/utils/project-targets.js +1 -1
- package/schematics/utils/project-targets.mjs +1 -1
- package/schematics/utils/project-tsconfig-paths.js +4 -4
- package/schematics/utils/project-tsconfig-paths.mjs +4 -4
- package/schematics/utils/schematic-options.js +7 -5
- package/schematics/utils/schematic-options.mjs +7 -5
- package/schematics/utils/vendored-ast-utils/index.js +17 -18
- package/schematics/utils/vendored-ast-utils/index.mjs +17 -18
- package/scrolling/fixed-size-virtual-scroll.d.ts +3 -0
- package/scrolling/package.json +5 -5
- package/scrolling/scroll-dispatcher.d.ts +3 -7
- package/scrolling/scrollable.d.ts +3 -0
- package/scrolling/scrolling-module.d.ts +13 -7
- package/scrolling/viewport-ruler.d.ts +11 -1
- package/scrolling/virtual-for-of.d.ts +3 -0
- package/scrolling/virtual-scroll-viewport.d.ts +3 -0
- package/stepper/package.json +5 -5
- package/stepper/step-header.d.ts +3 -0
- package/stepper/step-label.d.ts +3 -0
- package/stepper/stepper-button.d.ts +5 -7
- package/stepper/stepper-module.d.ts +9 -7
- package/stepper/stepper.d.ts +5 -7
- package/table/cell.d.ts +15 -0
- package/table/coalesced-style-scheduler.d.ts +3 -0
- package/table/package.json +5 -5
- package/table/row.d.ts +19 -0
- package/table/table-module.d.ts +9 -7
- package/table/table.d.ts +13 -0
- package/table/text-column.d.ts +3 -0
- package/testing/package.json +5 -5
- package/testing/protractor/package.json +5 -5
- package/testing/selenium-webdriver/package.json +5 -5
- package/testing/testbed/package.json +5 -5
- package/testing/testbed/proxy-zone-types.d.ts +1 -1
- package/testing/testbed/zone-types.d.ts +1 -1
- package/text-field/autofill.d.ts +5 -0
- package/text-field/autosize.d.ts +3 -0
- package/text-field/package.json +5 -5
- package/text-field/text-field-module.d.ts +7 -7
- package/tree/control/base-tree-control.d.ts +1 -1
- package/tree/control/nested-tree-control.d.ts +2 -2
- package/tree/nested-node.d.ts +3 -0
- package/tree/node.d.ts +3 -0
- package/tree/outlet.d.ts +3 -0
- package/tree/package.json +5 -5
- package/tree/padding.d.ts +3 -0
- package/tree/toggle.d.ts +3 -0
- package/tree/tree-module.d.ts +10 -7
- package/tree/tree.d.ts +5 -0
- package/a11y/index.metadata.json +0 -1
- package/accordion/index.metadata.json +0 -1
- package/bidi/index.metadata.json +0 -1
- package/bundles/cdk-a11y.umd.js +0 -2752
- package/bundles/cdk-a11y.umd.js.map +0 -1
- package/bundles/cdk-accordion.umd.js +0 -262
- package/bundles/cdk-accordion.umd.js.map +0 -1
- package/bundles/cdk-bidi.umd.js +0 -206
- package/bundles/cdk-bidi.umd.js.map +0 -1
- package/bundles/cdk-clipboard.umd.js +0 -278
- package/bundles/cdk-clipboard.umd.js.map +0 -1
- package/bundles/cdk-coercion.umd.js +0 -477
- package/bundles/cdk-coercion.umd.js.map +0 -1
- package/bundles/cdk-collections.umd.js +0 -846
- package/bundles/cdk-collections.umd.js.map +0 -1
- package/bundles/cdk-drag-drop.umd.js +0 -3915
- package/bundles/cdk-drag-drop.umd.js.map +0 -1
- package/bundles/cdk-keycodes.umd.js +0 -292
- package/bundles/cdk-keycodes.umd.js.map +0 -1
- package/bundles/cdk-layout.umd.js +0 -284
- package/bundles/cdk-layout.umd.js.map +0 -1
- package/bundles/cdk-observers.umd.js +0 -242
- package/bundles/cdk-observers.umd.js.map +0 -1
- package/bundles/cdk-overlay.umd.js +0 -3417
- package/bundles/cdk-overlay.umd.js.map +0 -1
- package/bundles/cdk-platform.umd.js +0 -397
- package/bundles/cdk-platform.umd.js.map +0 -1
- package/bundles/cdk-portal.umd.js +0 -1008
- package/bundles/cdk-portal.umd.js.map +0 -1
- package/bundles/cdk-scrolling.umd.js +0 -1787
- package/bundles/cdk-scrolling.umd.js.map +0 -1
- package/bundles/cdk-stepper.umd.js +0 -648
- package/bundles/cdk-stepper.umd.js.map +0 -1
- package/bundles/cdk-table.umd.js +0 -2730
- package/bundles/cdk-table.umd.js.map +0 -1
- package/bundles/cdk-testing-protractor.umd.js +0 -833
- package/bundles/cdk-testing-protractor.umd.js.map +0 -1
- package/bundles/cdk-testing-selenium-webdriver.umd.js +0 -1002
- package/bundles/cdk-testing-selenium-webdriver.umd.js.map +0 -1
- package/bundles/cdk-testing-testbed.umd.js +0 -1396
- package/bundles/cdk-testing-testbed.umd.js.map +0 -1
- package/bundles/cdk-testing.umd.js +0 -1285
- package/bundles/cdk-testing.umd.js.map +0 -1
- package/bundles/cdk-text-field.umd.js +0 -494
- package/bundles/cdk-text-field.umd.js.map +0 -1
- package/bundles/cdk-tree.umd.js +0 -1308
- package/bundles/cdk-tree.umd.js.map +0 -1
- package/bundles/cdk.umd.js +0 -38
- package/bundles/cdk.umd.js.map +0 -1
- package/clipboard/index.metadata.json +0 -1
- package/collections/index.metadata.json +0 -1
- package/drag-drop/index.metadata.json +0 -1
- package/esm2015/a11y/a11y-module.js +0 -30
- package/esm2015/a11y/a11y.externs.js +0 -6
- package/esm2015/a11y/aria-describer/aria-describer.js +0 -213
- package/esm2015/a11y/fake-event-detection.js +0 -28
- package/esm2015/a11y/focus-monitor/focus-monitor.js +0 -394
- package/esm2015/a11y/focus-trap/configurable-focus-trap-factory.js +0 -52
- package/esm2015/a11y/focus-trap/configurable-focus-trap.js +0 -49
- package/esm2015/a11y/focus-trap/event-listener-inert-strategy.js +0 -62
- package/esm2015/a11y/focus-trap/focus-trap-inert-strategy.js +0 -11
- package/esm2015/a11y/focus-trap/focus-trap-manager.js +0 -51
- package/esm2015/a11y/focus-trap/focus-trap.js +0 -391
- package/esm2015/a11y/high-contrast-mode/high-contrast-mode-detector.js +0 -92
- package/esm2015/a11y/index.js +0 -6
- package/esm2015/a11y/input-modality/input-modality-detector.js +0 -171
- package/esm2015/a11y/interactivity-checker/interactivity-checker.js +0 -237
- package/esm2015/a11y/key-manager/list-key-manager.js +0 -317
- package/esm2015/a11y/live-announcer/live-announcer-tokens.js +0 -19
- package/esm2015/a11y/live-announcer/live-announcer.js +0 -167
- package/esm2015/accordion/accordion-item.js +0 -146
- package/esm2015/accordion/accordion-module.js +0 -19
- package/esm2015/accordion/accordion.externs.js +0 -6
- package/esm2015/accordion/accordion.js +0 -63
- package/esm2015/accordion/index.js +0 -6
- package/esm2015/bidi/bidi-module.js +0 -18
- package/esm2015/bidi/bidi.externs.js +0 -6
- package/esm2015/bidi/dir.js +0 -58
- package/esm2015/bidi/directionality.js +0 -44
- package/esm2015/bidi/index.js +0 -6
- package/esm2015/cdk.externs.js +0 -0
- package/esm2015/clipboard/clipboard-module.js +0 -18
- package/esm2015/clipboard/clipboard.externs.js +0 -6
- package/esm2015/clipboard/clipboard.js +0 -52
- package/esm2015/clipboard/copy-to-clipboard.js +0 -90
- package/esm2015/clipboard/pending-copy.js +0 -68
- package/esm2015/coercion/coercion.externs.js +0 -0
- package/esm2015/collections/collection-viewer.js +0 -9
- package/esm2015/collections/collections.externs.js +0 -6
- package/esm2015/collections/dispose-view-repeater-strategy.js +0 -48
- package/esm2015/collections/recycle-view-repeater-strategy.js +0 -125
- package/esm2015/collections/tree-adapter.js +0 -9
- package/esm2015/collections/unique-selection-dispatcher.js +0 -53
- package/esm2015/collections/view-repeater.js +0 -14
- package/esm2015/drag-drop/client-rect.js +0 -60
- package/esm2015/drag-drop/clone-node.js +0 -65
- package/esm2015/drag-drop/directives/assertions.js +0 -19
- package/esm2015/drag-drop/directives/drag-handle.js +0 -57
- package/esm2015/drag-drop/directives/drag-placeholder.js +0 -36
- package/esm2015/drag-drop/directives/drag-preview.js +0 -42
- package/esm2015/drag-drop/directives/drag.js +0 -407
- package/esm2015/drag-drop/directives/drop-list-group.js +0 -47
- package/esm2015/drag-drop/directives/drop-list.js +0 -301
- package/esm2015/drag-drop/drag-drop-module.js +0 -43
- package/esm2015/drag-drop/drag-drop-registry.js +0 -231
- package/esm2015/drag-drop/drag-drop.externs.js +0 -6
- package/esm2015/drag-drop/drag-drop.js +0 -59
- package/esm2015/drag-drop/drag-events.js +0 -9
- package/esm2015/drag-drop/drag-ref.js +0 -1110
- package/esm2015/drag-drop/drag-styling.js +0 -69
- package/esm2015/drag-drop/drag-utils.js +0 -60
- package/esm2015/drag-drop/drop-list-ref.js +0 -813
- package/esm2015/drag-drop/transition-duration.js +0 -36
- package/esm2015/keycodes/keycodes.externs.js +0 -6
- package/esm2015/layout/breakpoints-observer.js +0 -106
- package/esm2015/layout/layout-module.js +0 -14
- package/esm2015/layout/layout.externs.js +0 -6
- package/esm2015/layout/media-matcher.js +0 -85
- package/esm2015/observers/observe-content.js +0 -179
- package/esm2015/observers/observers.externs.js +0 -6
- package/esm2015/overlay/dispatchers/base-overlay-dispatcher.js +0 -51
- package/esm2015/overlay/dispatchers/overlay-keyboard-dispatcher.js +0 -62
- package/esm2015/overlay/dispatchers/overlay-outside-click-dispatcher.js +0 -97
- package/esm2015/overlay/fullscreen-overlay-container.js +0 -94
- package/esm2015/overlay/index.js +0 -7
- package/esm2015/overlay/overlay-config.js +0 -45
- package/esm2015/overlay/overlay-container.js +0 -85
- package/esm2015/overlay/overlay-directives.js +0 -352
- package/esm2015/overlay/overlay-module.js +0 -27
- package/esm2015/overlay/overlay-ref.js +0 -409
- package/esm2015/overlay/overlay.externs.js +0 -6
- package/esm2015/overlay/overlay.js +0 -119
- package/esm2015/overlay/position/connected-position.js +0 -94
- package/esm2015/overlay/position/flexible-connected-position-strategy.js +0 -960
- package/esm2015/overlay/position/global-position-strategy.js +0 -197
- package/esm2015/overlay/position/overlay-position-builder.js +0 -52
- package/esm2015/overlay/position/scroll-clip.js +0 -42
- package/esm2015/overlay/scroll/close-scroll-strategy.js +0 -61
- package/esm2015/overlay/scroll/scroll-strategy-options.js +0 -57
- package/esm2015/platform/features/passive-listeners.js +0 -36
- package/esm2015/platform/features/scrolling.js +0 -85
- package/esm2015/platform/features/test-environment.js +0 -16
- package/esm2015/platform/platform-module.js +0 -14
- package/esm2015/platform/platform.externs.js +0 -6
- package/esm2015/platform/platform.js +0 -77
- package/esm2015/portal/dom-portal-outlet.js +0 -136
- package/esm2015/portal/portal-directives.js +0 -221
- package/esm2015/portal/portal-injector.js +0 -28
- package/esm2015/portal/portal.externs.js +0 -6
- package/esm2015/portal/portal.js +0 -179
- package/esm2015/scrolling/fixed-size-virtual-scroll.js +0 -188
- package/esm2015/scrolling/scroll-dispatcher.js +0 -163
- package/esm2015/scrolling/scrollable.js +0 -173
- package/esm2015/scrolling/scrolling-module.js +0 -49
- package/esm2015/scrolling/scrolling.externs.js +0 -6
- package/esm2015/scrolling/viewport-ruler.js +0 -139
- package/esm2015/scrolling/virtual-for-of.js +0 -293
- package/esm2015/scrolling/virtual-scroll-strategy.js +0 -11
- package/esm2015/scrolling/virtual-scroll-viewport.js +0 -371
- package/esm2015/stepper/step-header.js +0 -29
- package/esm2015/stepper/step-label.js +0 -22
- package/esm2015/stepper/stepper-button.js +0 -72
- package/esm2015/stepper/stepper-module.js +0 -37
- package/esm2015/stepper/stepper.externs.js +0 -6
- package/esm2015/stepper/stepper.js +0 -428
- package/esm2015/table/can-stick.js +0 -42
- package/esm2015/table/cell.js +0 -211
- package/esm2015/table/coalesced-style-scheduler.js +0 -89
- package/esm2015/table/row.js +0 -244
- package/esm2015/table/sticky-position-listener.js +0 -11
- package/esm2015/table/sticky-styler.js +0 -336
- package/esm2015/table/table-module.js +0 -47
- package/esm2015/table/table.externs.js +0 -6
- package/esm2015/table/table.js +0 -987
- package/esm2015/table/text-column.js +0 -127
- package/esm2015/testing/change-detection.js +0 -110
- package/esm2015/testing/component-harness.js +0 -344
- package/esm2015/testing/harness-environment.js +0 -219
- package/esm2015/testing/protractor/protractor-element.js +0 -274
- package/esm2015/testing/protractor/protractor-harness-environment.js +0 -79
- package/esm2015/testing/protractor/protractor.externs.js +0 -0
- package/esm2015/testing/selenium-webdriver/selenium-web-driver-element.js +0 -241
- package/esm2015/testing/selenium-webdriver/selenium-web-driver-harness-environment.js +0 -97
- package/esm2015/testing/selenium-webdriver/selenium-webdriver.externs.js +0 -0
- package/esm2015/testing/test-element.js +0 -48
- package/esm2015/testing/testbed/fake-events/dispatch-events.js +0 -53
- package/esm2015/testing/testbed/fake-events/element-focus.js +0 -39
- package/esm2015/testing/testbed/fake-events/event-objects.js +0 -107
- package/esm2015/testing/testbed/fake-events/type-in-element.js +0 -79
- package/esm2015/testing/testbed/task-state-zone-interceptor.js +0 -82
- package/esm2015/testing/testbed/testbed-harness-environment.js +0 -173
- package/esm2015/testing/testbed/testbed.externs.js +0 -0
- package/esm2015/testing/testbed/unit-test-element.js +0 -266
- package/esm2015/testing/testing.externs.js +0 -0
- package/esm2015/testing/text-filtering.js +0 -23
- package/esm2015/text-field/autofill.js +0 -117
- package/esm2015/text-field/autosize.js +0 -293
- package/esm2015/text-field/text-field-module.js +0 -21
- package/esm2015/text-field/text-field.externs.js +0 -6
- package/esm2015/tree/control/nested-tree-control.js +0 -59
- package/esm2015/tree/nested-node.js +0 -112
- package/esm2015/tree/node.js +0 -36
- package/esm2015/tree/outlet.js +0 -34
- package/esm2015/tree/padding.js +0 -119
- package/esm2015/tree/toggle.js +0 -46
- package/esm2015/tree/tree-module.js +0 -32
- package/esm2015/tree/tree.externs.js +0 -6
- package/esm2015/tree/tree.js +0 -345
- package/fesm2015/a11y.js.map +0 -1
- package/fesm2015/accordion.js.map +0 -1
- package/fesm2015/bidi.js.map +0 -1
- package/fesm2015/cdk.js.map +0 -1
- package/fesm2015/clipboard.js.map +0 -1
- package/fesm2015/coercion.js.map +0 -1
- package/fesm2015/collections.js.map +0 -1
- package/fesm2015/drag-drop.js.map +0 -1
- package/fesm2015/keycodes.js.map +0 -1
- package/fesm2015/layout.js.map +0 -1
- package/fesm2015/observers.js.map +0 -1
- package/fesm2015/overlay.js.map +0 -1
- package/fesm2015/platform.js.map +0 -1
- package/fesm2015/portal.js.map +0 -1
- package/fesm2015/scrolling.js.map +0 -1
- package/fesm2015/stepper.js.map +0 -1
- package/fesm2015/table.js.map +0 -1
- package/fesm2015/testing/protractor.js.map +0 -1
- package/fesm2015/testing/selenium-webdriver.js.map +0 -1
- package/fesm2015/testing/testbed.js.map +0 -1
- package/fesm2015/testing.js.map +0 -1
- package/fesm2015/text-field.js.map +0 -1
- package/fesm2015/tree.js.map +0 -1
- package/keycodes/index.metadata.json +0 -1
- package/layout/index.metadata.json +0 -1
- package/observers/index.metadata.json +0 -1
- package/overlay/index.metadata.json +0 -1
- package/platform/index.metadata.json +0 -1
- package/portal/index.metadata.json +0 -1
- package/scrolling/index.metadata.json +0 -1
- package/stepper/index.metadata.json +0 -1
- package/table/index.metadata.json +0 -1
- package/text-field/index.metadata.json +0 -1
- package/tree/index.metadata.json +0 -1
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright Google LLC All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
+
* found in the LICENSE file at https://angular.io/license
|
|
7
|
+
*/
|
|
8
|
+
import { _getTextWithExcludedElements, } from '@angular/cdk/testing';
|
|
9
|
+
import * as webdriver from 'selenium-webdriver';
|
|
10
|
+
import { getSeleniumWebDriverModifierKeys, seleniumWebDriverKeyMap } from './selenium-webdriver-keys';
|
|
11
|
+
/** A `TestElement` implementation for WebDriver. */
|
|
12
|
+
export class SeleniumWebDriverElement {
|
|
13
|
+
constructor(element, _stabilize) {
|
|
14
|
+
this.element = element;
|
|
15
|
+
this._stabilize = _stabilize;
|
|
16
|
+
}
|
|
17
|
+
/** Blur the element. */
|
|
18
|
+
async blur() {
|
|
19
|
+
await this._executeScript((element) => element.blur(), this.element());
|
|
20
|
+
await this._stabilize();
|
|
21
|
+
}
|
|
22
|
+
/** Clear the element's input (for input and textarea elements only). */
|
|
23
|
+
async clear() {
|
|
24
|
+
await this.element().clear();
|
|
25
|
+
await this._stabilize();
|
|
26
|
+
}
|
|
27
|
+
async click(...args) {
|
|
28
|
+
await this._dispatchClickEventSequence(args, webdriver.Button.LEFT);
|
|
29
|
+
await this._stabilize();
|
|
30
|
+
}
|
|
31
|
+
async rightClick(...args) {
|
|
32
|
+
await this._dispatchClickEventSequence(args, webdriver.Button.RIGHT);
|
|
33
|
+
await this._stabilize();
|
|
34
|
+
}
|
|
35
|
+
/** Focus the element. */
|
|
36
|
+
async focus() {
|
|
37
|
+
await this._executeScript((element) => element.focus(), this.element());
|
|
38
|
+
await this._stabilize();
|
|
39
|
+
}
|
|
40
|
+
/** Get the computed value of the given CSS property for the element. */
|
|
41
|
+
async getCssValue(property) {
|
|
42
|
+
await this._stabilize();
|
|
43
|
+
return this.element().getCssValue(property);
|
|
44
|
+
}
|
|
45
|
+
/** Hovers the mouse over the element. */
|
|
46
|
+
async hover() {
|
|
47
|
+
await this._actions().mouseMove(this.element()).perform();
|
|
48
|
+
await this._stabilize();
|
|
49
|
+
}
|
|
50
|
+
/** Moves the mouse away from the element. */
|
|
51
|
+
async mouseAway() {
|
|
52
|
+
await this._actions().mouseMove(this.element(), { x: -1, y: -1 }).perform();
|
|
53
|
+
await this._stabilize();
|
|
54
|
+
}
|
|
55
|
+
async sendKeys(...modifiersAndKeys) {
|
|
56
|
+
const first = modifiersAndKeys[0];
|
|
57
|
+
let modifiers;
|
|
58
|
+
let rest;
|
|
59
|
+
if (typeof first !== 'string' && typeof first !== 'number') {
|
|
60
|
+
modifiers = first;
|
|
61
|
+
rest = modifiersAndKeys.slice(1);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
modifiers = {};
|
|
65
|
+
rest = modifiersAndKeys;
|
|
66
|
+
}
|
|
67
|
+
const modifierKeys = getSeleniumWebDriverModifierKeys(modifiers);
|
|
68
|
+
const keys = rest
|
|
69
|
+
.map(k => (typeof k === 'string' ? k.split('') : [seleniumWebDriverKeyMap[k]]))
|
|
70
|
+
.reduce((arr, k) => arr.concat(k), [])
|
|
71
|
+
// webdriver.Key.chord doesn't work well with geckodriver (mozilla/geckodriver#1502),
|
|
72
|
+
// so avoid it if no modifier keys are required.
|
|
73
|
+
.map(k => (modifierKeys.length > 0 ? webdriver.Key.chord(...modifierKeys, k) : k));
|
|
74
|
+
await this.element().sendKeys(...keys);
|
|
75
|
+
await this._stabilize();
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Gets the text from the element.
|
|
79
|
+
* @param options Options that affect what text is included.
|
|
80
|
+
*/
|
|
81
|
+
async text(options) {
|
|
82
|
+
await this._stabilize();
|
|
83
|
+
if (options?.exclude) {
|
|
84
|
+
return this._executeScript(_getTextWithExcludedElements, this.element(), options.exclude);
|
|
85
|
+
}
|
|
86
|
+
// We don't go through the WebDriver `getText`, because it excludes text from hidden elements.
|
|
87
|
+
return this._executeScript((element) => (element.textContent || '').trim(), this.element());
|
|
88
|
+
}
|
|
89
|
+
/** Gets the value for the given attribute from the element. */
|
|
90
|
+
async getAttribute(name) {
|
|
91
|
+
await this._stabilize();
|
|
92
|
+
return this._executeScript((element, attribute) => element.getAttribute(attribute), this.element(), name);
|
|
93
|
+
}
|
|
94
|
+
/** Checks whether the element has the given class. */
|
|
95
|
+
async hasClass(name) {
|
|
96
|
+
await this._stabilize();
|
|
97
|
+
const classes = (await this.getAttribute('class')) || '';
|
|
98
|
+
return new Set(classes.split(/\s+/).filter(c => c)).has(name);
|
|
99
|
+
}
|
|
100
|
+
/** Gets the dimensions of the element. */
|
|
101
|
+
async getDimensions() {
|
|
102
|
+
await this._stabilize();
|
|
103
|
+
const { width, height } = await this.element().getSize();
|
|
104
|
+
const { x: left, y: top } = await this.element().getLocation();
|
|
105
|
+
return { width, height, left, top };
|
|
106
|
+
}
|
|
107
|
+
/** Gets the value of a property of an element. */
|
|
108
|
+
async getProperty(name) {
|
|
109
|
+
await this._stabilize();
|
|
110
|
+
return this._executeScript((element, property) => element[property], this.element(), name);
|
|
111
|
+
}
|
|
112
|
+
/** Sets the value of a property of an input. */
|
|
113
|
+
async setInputValue(newValue) {
|
|
114
|
+
await this._executeScript((element, value) => (element.value = value), this.element(), newValue);
|
|
115
|
+
await this._stabilize();
|
|
116
|
+
}
|
|
117
|
+
/** Selects the options at the specified indexes inside of a native `select` element. */
|
|
118
|
+
async selectOptions(...optionIndexes) {
|
|
119
|
+
await this._stabilize();
|
|
120
|
+
const options = await this.element().findElements(webdriver.By.css('option'));
|
|
121
|
+
const indexes = new Set(optionIndexes); // Convert to a set to remove duplicates.
|
|
122
|
+
if (options.length && indexes.size) {
|
|
123
|
+
// Reset the value so all the selected states are cleared. We can
|
|
124
|
+
// reuse the input-specific method since the logic is the same.
|
|
125
|
+
await this.setInputValue('');
|
|
126
|
+
for (let i = 0; i < options.length; i++) {
|
|
127
|
+
if (indexes.has(i)) {
|
|
128
|
+
// We have to hold the control key while clicking on options so that multiple can be
|
|
129
|
+
// selected in multi-selection mode. The key doesn't do anything for single selection.
|
|
130
|
+
await this._actions().keyDown(webdriver.Key.CONTROL).perform();
|
|
131
|
+
await options[i].click();
|
|
132
|
+
await this._actions().keyUp(webdriver.Key.CONTROL).perform();
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
await this._stabilize();
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/** Checks whether this element matches the given selector. */
|
|
139
|
+
async matchesSelector(selector) {
|
|
140
|
+
await this._stabilize();
|
|
141
|
+
return this._executeScript((element, s) => (Element.prototype.matches || Element.prototype.msMatchesSelector).call(element, s), this.element(), selector);
|
|
142
|
+
}
|
|
143
|
+
/** Checks whether the element is focused. */
|
|
144
|
+
async isFocused() {
|
|
145
|
+
await this._stabilize();
|
|
146
|
+
return webdriver.WebElement.equals(this.element(), this.element().getDriver().switchTo().activeElement());
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Dispatches an event with a particular name.
|
|
150
|
+
* @param name Name of the event to be dispatched.
|
|
151
|
+
*/
|
|
152
|
+
async dispatchEvent(name, data) {
|
|
153
|
+
await this._executeScript(dispatchEvent, name, this.element(), data);
|
|
154
|
+
await this._stabilize();
|
|
155
|
+
}
|
|
156
|
+
/** Gets the webdriver action sequence. */
|
|
157
|
+
_actions() {
|
|
158
|
+
return this.element().getDriver().actions();
|
|
159
|
+
}
|
|
160
|
+
/** Executes a function in the browser. */
|
|
161
|
+
async _executeScript(script, ...var_args) {
|
|
162
|
+
return this.element()
|
|
163
|
+
.getDriver()
|
|
164
|
+
.executeScript(script, ...var_args);
|
|
165
|
+
}
|
|
166
|
+
/** Dispatches all the events that are part of a click event sequence. */
|
|
167
|
+
async _dispatchClickEventSequence(args, button) {
|
|
168
|
+
let modifiers = {};
|
|
169
|
+
if (args.length && typeof args[args.length - 1] === 'object') {
|
|
170
|
+
modifiers = args.pop();
|
|
171
|
+
}
|
|
172
|
+
const modifierKeys = getSeleniumWebDriverModifierKeys(modifiers);
|
|
173
|
+
// Omitting the offset argument to mouseMove results in clicking the center.
|
|
174
|
+
// This is the default behavior we want, so we use an empty array of offsetArgs if
|
|
175
|
+
// no args remain after popping the modifiers from the args passed to this function.
|
|
176
|
+
const offsetArgs = (args.length === 2 ? [{ x: args[0], y: args[1] }] : []);
|
|
177
|
+
let actions = this._actions().mouseMove(this.element(), ...offsetArgs);
|
|
178
|
+
for (const modifierKey of modifierKeys) {
|
|
179
|
+
actions = actions.keyDown(modifierKey);
|
|
180
|
+
}
|
|
181
|
+
actions = actions.click(button);
|
|
182
|
+
for (const modifierKey of modifierKeys) {
|
|
183
|
+
actions = actions.keyUp(modifierKey);
|
|
184
|
+
}
|
|
185
|
+
await actions.perform();
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Dispatches an event with a particular name and data to an element. Note that this needs to be a
|
|
190
|
+
* pure function, because it gets stringified by WebDriver and is executed inside the browser.
|
|
191
|
+
*/
|
|
192
|
+
function dispatchEvent(name, element, data) {
|
|
193
|
+
const event = document.createEvent('Event');
|
|
194
|
+
event.initEvent(name);
|
|
195
|
+
// tslint:disable-next-line:ban Have to use `Object.assign` to preserve the original object.
|
|
196
|
+
Object.assign(event, data || {});
|
|
197
|
+
element.dispatchEvent(event);
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZW5pdW0td2ViLWRyaXZlci1lbGVtZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2Nkay90ZXN0aW5nL3NlbGVuaXVtLXdlYmRyaXZlci9zZWxlbml1bS13ZWItZHJpdmVyLWVsZW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUNMLDRCQUE0QixHQU83QixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sS0FBSyxTQUFTLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUFDLGdDQUFnQyxFQUFFLHVCQUF1QixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFFcEcsb0RBQW9EO0FBQ3BELE1BQU0sT0FBTyx3QkFBd0I7SUFDbkMsWUFDVyxPQUFtQyxFQUNwQyxVQUErQjtRQUQ5QixZQUFPLEdBQVAsT0FBTyxDQUE0QjtRQUNwQyxlQUFVLEdBQVYsVUFBVSxDQUFxQjtJQUN0QyxDQUFDO0lBRUosd0JBQXdCO0lBQ3hCLEtBQUssQ0FBQyxJQUFJO1FBQ1IsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsT0FBb0IsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3BGLE1BQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCx3RUFBd0U7SUFDeEUsS0FBSyxDQUFDLEtBQUs7UUFDVCxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM3QixNQUFNLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBaUJELEtBQUssQ0FBQyxLQUFLLENBQ1QsR0FBRyxJQUFtRjtRQUV0RixNQUFNLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJ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Q0FBQyxDQUFDO1NBQ3RDO1FBRUQsTUFBTSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDMUIsQ0FBQztDQUNGO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxhQUFhLENBQUMsSUFBWSxFQUFFLE9BQWdCLEVBQUUsSUFBZ0M7SUFDckYsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1QyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RCLDRGQUE0RjtJQUM1RixNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7SUFDakMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7XG4gIF9nZXRUZXh0V2l0aEV4Y2x1ZGVkRWxlbWVudHMsXG4gIEVsZW1lbnREaW1lbnNpb25zLFxuICBFdmVudERhdGEsXG4gIE1vZGlmaWVyS2V5cyxcbiAgVGVzdEVsZW1lbnQsXG4gIFRlc3RLZXksXG4gIFRleHRPcHRpb25zLFxufSBmcm9tICdAYW5ndWxhci9jZGsvdGVzdGluZyc7XG5pbXBvcnQgKiBhcyB3ZWJkcml2ZXIgZnJvbSAnc2VsZW5pdW0td2ViZHJpdmVyJztcbmltcG9ydCB7Z2V0U2VsZW5pdW1XZWJEcml2ZXJNb2RpZmllcktleXMsIHNlbGVuaXVtV2ViRHJpdmVyS2V5TWFwfSBmcm9tICcuL3NlbGVuaXVtLXdlYmRyaXZlci1rZXlzJztcblxuLyoqIEEgYFRlc3RFbGVtZW50YCBpbXBsZW1lbnRhdGlvbiBmb3IgV2ViRHJpdmVyLiAqL1xuZXhwb3J0IGNsYXNzIFNlbGVuaXVtV2ViRHJpdmVyRWxlbWVudCBpbXBsZW1lbnRzIFRlc3RFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcmVhZG9ubHkgZWxlbWVudDogKCkgPT4gd2ViZHJpdmVyLldlYkVsZW1lbnQsXG4gICAgcHJpdmF0ZSBfc3RhYmlsaXplOiAoKSA9PiBQcm9taXNlPHZvaWQ+LFxuICApIHt9XG5cbiAgLyoqIEJsdXIgdGhlIGVsZW1lbnQuICovXG4gIGFzeW5jIGJsdXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fZXhlY3V0ZVNjcmlwdCgoZWxlbWVudDogSFRNTEVsZW1lbnQpID0+IGVsZW1lbnQuYmx1cigpLCB0aGlzLmVsZW1lbnQoKSk7XG4gICAgYXdhaXQgdGhpcy5fc3RhYmlsaXplKCk7XG4gIH1cblxuICAvKiogQ2xlYXIgdGhlIGVsZW1lbnQncyBpbnB1dCAoZm9yIGlucHV0IGFuZCB0ZXh0YXJlYSBlbGVtZW50cyBvbmx5KS4gKi9cbiAgYXN5bmMgY2xlYXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5lbGVtZW50KCkuY2xlYXIoKTtcbiAgICBhd2FpdCB0aGlzLl9zdGFiaWxpemUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGljayB0aGUgZWxlbWVudCBhdCB0aGUgZGVmYXVsdCBsb2NhdGlvbiBmb3IgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuIElmIHlvdSBuZWVkIHRvIGd1YXJhbnRlZVxuICAgKiB0aGUgZWxlbWVudCBpcyBjbGlja2VkIGF0IGEgc3BlY2lmaWMgbG9jYXRpb24sIGNvbnNpZGVyIHVzaW5nIGBjbGljaygnY2VudGVyJylgIG9yXG4gICAqIGBjbGljayh4LCB5KWAgaW5zdGVhZC5cbiAgICovXG4gIGNsaWNrKG1vZGlmaWVycz86IE1vZGlmaWVyS2V5cyk6IFByb21pc2U8dm9pZD47XG4gIC8qKiBDbGljayB0aGUgZWxlbWVudCBhdCB0aGUgZWxlbWVudCdzIGNlbnRlci4gKi9cbiAgY2xpY2sobG9jYXRpb246ICdjZW50ZXInLCBtb2RpZmllcnM/OiBNb2RpZmllcktleXMpOiBQcm9taXNlPHZvaWQ+O1xuICAvKipcbiAgICogQ2xpY2sgdGhlIGVsZW1lbnQgYXQgdGhlIHNwZWNpZmllZCBjb29yZGluYXRlcyByZWxhdGl2ZSB0byB0aGUgdG9wLWxlZnQgb2YgdGhlIGVsZW1lbnQuXG4gICAqIEBwYXJhbSByZWxhdGl2ZVggQ29vcmRpbmF0ZSB3aXRoaW4gdGhlIGVsZW1lbnQsIGFsb25nIHRoZSBYLWF4aXMgYXQgd2hpY2ggdG8gY2xpY2suXG4gICAqIEBwYXJhbSByZWxhdGl2ZVkgQ29vcmRpbmF0ZSB3aXRoaW4gdGhlIGVsZW1lbnQsIGFsb25nIHRoZSBZLWF4aXMgYXQgd2hpY2ggdG8gY2xpY2suXG4gICAqIEBwYXJhbSBtb2RpZmllcnMgTW9kaWZpZXIga2V5cyBoZWxkIHdoaWxlIGNsaWNraW5nXG4gICAqL1xuICBjbGljayhyZWxhdGl2ZVg6IG51bWJlciwgcmVsYXRpdmVZOiBudW1iZXIsIG1vZGlmaWVycz86IE1vZGlmaWVyS2V5cyk6IFByb21pc2U8dm9pZD47XG4gIGFzeW5jIGNsaWNrKFxuICAgIC4uLmFyZ3M6IFtNb2RpZmllcktleXM/XSB8IFsnY2VudGVyJywgTW9kaWZpZXJLZXlzP10gfCBbbnVtYmVyLCBudW1iZXIsIE1vZGlmaWVyS2V5cz9dXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX2Rpc3BhdGNoQ2xpY2tFdmVudFNlcXVlbmNlKGFyZ3MsIHdlYmRyaXZlci5CdXR0b24uTEVGVCk7XG4gICAgYXdhaXQgdGhpcy5fc3RhYmlsaXplKCk7XG4gIH1cblxuICAvKipcbiAgICogUmlnaHQgY2xpY2tzIG9uIHRoZSBlbGVtZW50IGF0IHRoZSBzcGVjaWZpZWQgY29vcmRpbmF0ZXMgcmVsYXRpdmUgdG8gdGhlIHRvcC1sZWZ0IG9mIGl0LlxuICAgKiBAcGFyYW0gcmVsYXRpdmVYIENvb3JkaW5hdGUgd2l0aGluIHRoZSBlbGVtZW50LCBhbG9uZyB0aGUgWC1heGlzIGF0IHdoaWNoIHRvIGNsaWNrLlxuICAgKiBAcGFyYW0gcmVsYXRpdmVZIENvb3JkaW5hdGUgd2l0aGluIHRoZSBlbGVtZW50LCBhbG9uZyB0aGUgWS1heGlzIGF0IHdoaWNoIHRvIGNsaWNrLlxuICAgKiBAcGFyYW0gbW9kaWZpZXJzIE1vZGlmaWVyIGtleXMgaGVsZCB3aGlsZSBjbGlja2luZ1xuICAgKi9cbiAgcmlnaHRDbGljayhyZWxhdGl2ZVg6IG51bWJlciwgcmVsYXRpdmVZOiBudW1iZXIsIG1vZGlmaWVycz86IE1vZGlmaWVyS2V5cyk6IFByb21pc2U8dm9pZD47XG4gIGFzeW5jIHJpZ2h0Q2xpY2soXG4gICAgLi4uYXJnczogW01vZGlmaWVyS2V5cz9dIHwgWydjZW50ZXInLCBNb2RpZmllcktleXM/XSB8IFtudW1iZXIsIG51bWJlciwgTW9kaWZpZXJLZXlzP11cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fZGlzcGF0Y2hDbGlja0V2ZW50U2VxdWVuY2UoYXJncywgd2ViZHJpdmVyLkJ1dHRvbi5SSUdIVCk7XG4gICAgYXdhaXQgdGhpcy5fc3RhYmlsaXplKCk7XG4gIH1cblxuICAvKiogRm9jdXMgdGhlIGVsZW1lbnQuICovXG4gIGFzeW5jIGZvY3VzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX2V4ZWN1dGVTY3JpcHQoKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSA9PiBlbGVtZW50LmZvY3VzKCksIHRoaXMuZWxlbWVudCgpKTtcbiAgICBhd2FpdCB0aGlzLl9zdGFiaWxpemUoKTtcbiAgfVxuXG4gIC8qKiBHZXQgdGhlIGNvbXB1dGVkIHZhbHVlIG9mIHRoZSBnaXZlbiBDU1MgcHJvcGVydHkgZm9yIHRoZSBlbGVtZW50LiAqL1xuICBhc3luYyBnZXRDc3NWYWx1ZShwcm9wZXJ0eTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBhd2FpdCB0aGlzLl9zdGFiaWxpemUoKTtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50KCkuZ2V0Q3NzVmFsdWUocHJvcGVydHkpO1xuICB9XG5cbiAgLyoqIEhvdmVycyB0aGUgbW91c2Ugb3ZlciB0aGUgZWxlbWVudC4gKi9cbiAgYXN5bmMgaG92ZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fYWN0aW9ucygpLm1vdXNlTW92ZSh0aGlzLmVsZW1lbnQoKSkucGVyZm9ybSgpO1xuICAgIGF3YWl0IHRoaXMuX3N0YWJpbGl6ZSgpO1xuICB9XG5cbiAgLyoqIE1vdmVzIHRoZSBtb3VzZSBhd2F5IGZyb20gdGhlIGVsZW1lbnQuICovXG4gIGFzeW5jIG1vdXNlQXdheSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9hY3Rpb25zKCkubW91c2VNb3ZlKHRoaXMuZWxlbWVudCgpLCB7eDogLTEsIHk6IC0xfSkucGVyZm9ybSgpO1xuICAgIGF3YWl0IHRoaXMuX3N0YWJpbGl6ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIHRoZSBnaXZlbiBzdHJpbmcgdG8gdGhlIGlucHV0IGFzIGEgc2VyaWVzIG9mIGtleSBwcmVzc2VzLiBBbHNvIGZpcmVzIGlucHV0IGV2ZW50c1xuICAgKiBhbmQgYXR0ZW1wdHMgdG8gYWRkIHRoZSBzdHJpbmcgdG8gdGhlIEVsZW1lbnQncyB2YWx1ZS5cbiAgICovXG4gIGFzeW5jIHNlbmRLZXlzKC4uLmtleXM6IChzdHJpbmcgfCBUZXN0S2V5KVtdKTogUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIFNlbmRzIHRoZSBnaXZlbiBzdHJpbmcgdG8gdGhlIGlucHV0IGFzIGEgc2VyaWVzIG9mIGtleSBwcmVzc2VzLiBBbHNvIGZpcmVzIGlucHV0IGV2ZW50c1xuICAgKiBhbmQgYXR0ZW1wdHMgdG8gYWRkIHRoZSBzdHJpbmcgdG8gdGhlIEVsZW1lbnQncyB2YWx1ZS5cbiAgICovXG4gIGFzeW5jIHNlbmRLZXlzKG1vZGlmaWVyczogTW9kaWZpZXJLZXlzLCAuLi5rZXlzOiAoc3RyaW5nIHwgVGVzdEtleSlbXSk6IFByb21pc2U8dm9pZD47XG4gIGFzeW5jIHNlbmRLZXlzKC4uLm1vZGlmaWVyc0FuZEtleXM6IGFueVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZmlyc3QgPSBtb2RpZmllcnNBbmRLZXlzWzBdO1xuICAgIGxldCBtb2RpZmllcnM6IE1vZGlmaWVyS2V5cztcbiAgICBsZXQgcmVzdDogKHN0cmluZyB8IFRlc3RLZXkpW107XG4gICAgaWYgKHR5cGVvZiBmaXJzdCAhPT0gJ3N0cmluZycgJiYgdHlwZW9mIGZpcnN0ICE9PSAnbnVtYmVyJykge1xuICAgICAgbW9kaWZpZXJzID0gZmlyc3Q7XG4gICAgICByZXN0ID0gbW9kaWZpZXJzQW5kS2V5cy5zbGljZSgxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbW9kaWZpZXJzID0ge307XG4gICAgICByZXN0ID0gbW9kaWZpZXJzQW5kS2V5cztcbiAgICB9XG5cbiAgICBjb25zdCBtb2RpZmllcktleXMgPSBnZXRTZWxlbml1bVdlYkRyaXZlck1vZGlmaWVyS2V5cyhtb2RpZmllcnMpO1xuICAgIGNvbnN0IGtleXMgPSByZXN0XG4gICAgICAubWFwKGsgPT4gKHR5cGVvZiBrID09PSAnc3RyaW5nJyA/IGsuc3BsaXQoJycpIDogW3NlbGVuaXVtV2ViRHJpdmVyS2V5TWFwW2tdXSkpXG4gICAgICAucmVkdWNlKChhcnIsIGspID0+IGFyci5jb25jYXQoayksIFtdKVxuICAgICAgLy8gd2ViZHJpdmVyLktleS5jaG9yZCBkb2Vzbid0IHdvcmsgd2VsbCB3aXRoIGdlY2tvZHJpdmVyIChtb3ppbGxhL2dlY2tvZHJpdmVyIzE1MDIpLFxuICAgICAgLy8gc28gYXZvaWQgaXQgaWYgbm8gbW9kaWZpZXIga2V5cyBhcmUgcmVxdWlyZWQuXG4gICAgICAubWFwKGsgPT4gKG1vZGlmaWVyS2V5cy5sZW5ndGggPiAwID8gd2ViZHJpdmVyLktleS5jaG9yZCguLi5tb2RpZmllcktleXMsIGspIDogaykpO1xuXG4gICAgYXdhaXQgdGhpcy5lbGVtZW50KCkuc2VuZEtleXMoLi4ua2V5cyk7XG4gICAgYXdhaXQgdGhpcy5fc3RhYmlsaXplKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgdGV4dCBmcm9tIHRoZSBlbGVtZW50LlxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIHRoYXQgYWZmZWN0IHdoYXQgdGV4dCBpcyBpbmNsdWRlZC5cbiAgICovXG4gIGFzeW5jIHRleHQob3B0aW9ucz86IFRleHRPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBhd2FpdCB0aGlzLl9zdGFiaWxpemUoKTtcbiAgICBpZiAob3B0aW9ucz8uZXhjbHVkZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2V4ZWN1dGVTY3JpcHQoX2dldFRleHRXaXRoRXhjbHVkZWRFbGVtZW50cywgdGhpcy5lbGVtZW50KCksIG9wdGlvbnMuZXhjbHVkZSk7XG4gICAgfVxuICAgIC8vIFdlIGRvbid0IGdvIHRocm91Z2ggdGhlIFdlYkRyaXZlciBgZ2V0VGV4dGAsIGJlY2F1c2UgaXQgZXhjbHVkZXMgdGV4dCBmcm9tIGhpZGRlbiBlbGVtZW50cy5cbiAgICByZXR1cm4gdGhpcy5fZXhlY3V0ZVNjcmlwdChcbiAgICAgIChlbGVtZW50OiBFbGVtZW50KSA9PiAoZWxlbWVudC50ZXh0Q29udGVudCB8fCAnJykudHJpbSgpLFxuICAgICAgdGhpcy5lbGVtZW50KCksXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBHZXRzIHRoZSB2YWx1ZSBmb3IgdGhlIGdpdmVuIGF0dHJpYnV0ZSBmcm9tIHRoZSBlbGVtZW50LiAqL1xuICBhc3luYyBnZXRBdHRyaWJ1dGUobmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgYXdhaXQgdGhpcy5fc3RhYmlsaXplKCk7XG4gICAgcmV0dXJuIHRoaXMuX2V4ZWN1dGVTY3JpcHQoXG4gICAgICAoZWxlbWVudDogRWxlbWVudCwgYXR0cmlidXRlOiBzdHJpbmcpID0+IGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSksXG4gICAgICB0aGlzLmVsZW1lbnQoKSxcbiAgICAgIG5hbWUsXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBDaGVja3Mgd2hldGhlciB0aGUgZWxlbWVudCBoYXMgdGhlIGdpdmVuIGNsYXNzLiAqL1xuICBhc3luYyBoYXNDbGFzcyhuYW1lOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBhd2FpdCB0aGlzLl9zdGFiaWxpemUoKTtcbiAgICBjb25zdCBjbGFzc2VzID0gKGF3YWl0IHRoaXMuZ2V0QXR0cmlidXRlKCdjbGFzcycpKSB8fCAnJztcbiAgICByZXR1cm4gbmV3IFNldChjbGFzc2VzLnNwbGl0KC9cXHMrLykuZmlsdGVyKGMgPT4gYykpLmhhcyhuYW1lKTtcbiAgfVxuXG4gIC8qKiBHZXRzIHRoZSBkaW1lbnNpb25zIG9mIHRoZSBlbGVtZW50LiAqL1xuICBhc3luYyBnZXREaW1lbnNpb25zKCk6IFByb21pc2U8RWxlbWVudERpbWVuc2lvbnM+IHtcbiAgICBhd2FpdCB0aGlzLl9zdGFiaWxpemUoKTtcbiAgICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSBhd2FpdCB0aGlzLmVsZW1lbnQoKS5nZXRTaXplKCk7XG4gICAgY29uc3Qge3g6IGxlZnQsIHk6IHRvcH0gPSBhd2FpdCB0aGlzLmVsZW1lbnQoKS5nZXRMb2NhdGlvbigpO1xuICAgIHJldHVybiB7d2lkdGgsIGhlaWdodCwgbGVmdCwgdG9wfTtcbiAgfVxuXG4gIC8qKiBHZXRzIHRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5IG9mIGFuIGVsZW1lbnQuICovXG4gIGFzeW5jIGdldFByb3BlcnR5PFQgPSBhbnk+KG5hbWU6IHN0cmluZyk6IFByb21pc2U8VD4ge1xuICAgIGF3YWl0IHRoaXMuX3N0YWJpbGl6ZSgpO1xuICAgIHJldHVybiB0aGlzLl9leGVjdXRlU2NyaXB0KFxuICAgICAgKGVsZW1lbnQ6IEVsZW1lbnQsIHByb3BlcnR5OiBrZXlvZiBFbGVtZW50KSA9PiBlbGVtZW50W3Byb3BlcnR5XSxcbiAgICAgIHRoaXMuZWxlbWVudCgpLFxuICAgICAgbmFtZSxcbiAgICApO1xuICB9XG5cbiAgLyoqIFNldHMgdGhlIHZhbHVlIG9mIGEgcHJvcGVydHkgb2YgYW4gaW5wdXQuICovXG4gIGFzeW5jIHNldElucHV0VmFsdWUobmV3VmFsdWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX2V4ZWN1dGVTY3JpcHQoXG4gICAgICAoZWxlbWVudDogSFRNTElucHV0RWxlbWVudCwgdmFsdWU6IHN0cmluZykgPT4gKGVsZW1lbnQudmFsdWUgPSB2YWx1ZSksXG4gICAgICB0aGlzLmVsZW1lbnQoKSxcbiAgICAgIG5ld1ZhbHVlLFxuICAgICk7XG4gICAgYXdhaXQgdGhpcy5fc3RhYmlsaXplKCk7XG4gIH1cblxuICAvKiogU2VsZWN0cyB0aGUgb3B0aW9ucyBhdCB0aGUgc3BlY2lmaWVkIGluZGV4ZXMgaW5zaWRlIG9mIGEgbmF0aXZlIGBzZWxlY3RgIGVsZW1lbnQuICovXG4gIGFzeW5jIHNlbGVjdE9wdGlvbnMoLi4ub3B0aW9uSW5kZXhlczogbnVtYmVyW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9zdGFiaWxpemUoKTtcbiAgICBjb25zdCBvcHRpb25zID0gYXdhaXQgdGhpcy5lbGVtZW50KCkuZmluZEVsZW1lbnRzKHdlYmRyaXZlci5CeS5jc3MoJ29wdGlvbicpKTtcbiAgICBjb25zdCBpbmRleGVzID0gbmV3IFNldChvcHRpb25JbmRleGVzKTsgLy8gQ29udmVydCB0byBhIHNldCB0byByZW1vdmUgZHVwbGljYXRlcy5cblxuICAgIGlmIChvcHRpb25zLmxlbmd0aCAmJiBpbmRleGVzLnNpemUpIHtcbiAgICAgIC8vIFJlc2V0IHRoZSB2YWx1ZSBzbyBhbGwgdGhlIHNlbGVjdGVkIHN0YXRlcyBhcmUgY2xlYXJlZC4gV2UgY2FuXG4gICAgICAvLyByZXVzZSB0aGUgaW5wdXQtc3BlY2lmaWMgbWV0aG9kIHNpbmNlIHRoZSBsb2dpYyBpcyB0aGUgc2FtZS5cbiAgICAgIGF3YWl0IHRoaXMuc2V0SW5wdXRWYWx1ZSgnJyk7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaW5kZXhlcy5oYXMoaSkpIHtcbiAgICAgICAgICAvLyBXZSBoYXZlIHRvIGhvbGQgdGhlIGNvbnRyb2wga2V5IHdoaWxlIGNsaWNraW5nIG9uIG9wdGlvbnMgc28gdGhhdCBtdWx0aXBsZSBjYW4gYmVcbiAgICAgICAgICAvLyBzZWxlY3RlZCBpbiBtdWx0aS1zZWxlY3Rpb24gbW9kZS4gVGhlIGtleSBkb2Vzbid0IGRvIGFueXRoaW5nIGZvciBzaW5nbGUgc2VsZWN0aW9uLlxuICAgICAgICAgIGF3YWl0IHRoaXMuX2FjdGlvbnMoKS5rZXlEb3duKHdlYmRyaXZlci5LZXkuQ09OVFJPTCkucGVyZm9ybSgpO1xuICAgICAgICAgIGF3YWl0IG9wdGlvbnNbaV0uY2xpY2soKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLl9hY3Rpb25zKCkua2V5VXAod2ViZHJpdmVyLktleS5DT05UUk9MKS5wZXJmb3JtKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5fc3RhYmlsaXplKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIENoZWNrcyB3aGV0aGVyIHRoaXMgZWxlbWVudCBtYXRjaGVzIHRoZSBnaXZlbiBzZWxlY3Rvci4gKi9cbiAgYXN5bmMgbWF0Y2hlc1NlbGVjdG9yKHNlbGVjdG9yOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBhd2FpdCB0aGlzLl9zdGFiaWxpemUoKTtcbiAgICByZXR1cm4gdGhpcy5fZXhlY3V0ZVNjcmlwdChcbiAgICAgIChlbGVtZW50OiBFbGVtZW50LCBzOiBzdHJpbmcpID0+XG4gICAgICAgIChFbGVtZW50LnByb3RvdHlwZS5tYXRjaGVzIHx8IChFbGVtZW50LnByb3RvdHlwZSBhcyBhbnkpLm1zTWF0Y2hlc1NlbGVjdG9yKS5jYWxsKFxuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgcyxcbiAgICAgICAgKSxcbiAgICAgIHRoaXMuZWxlbWVudCgpLFxuICAgICAgc2VsZWN0b3IsXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBDaGVja3Mgd2hldGhlciB0aGUgZWxlbWVudCBpcyBmb2N1c2VkLiAqL1xuICBhc3luYyBpc0ZvY3VzZWQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgYXdhaXQgdGhpcy5fc3RhYmlsaXplKCk7XG4gICAgcmV0dXJuIHdlYmRyaXZlci5XZWJFbGVtZW50LmVxdWFscyhcbiAgICAgIHRoaXMuZWxlbWVudCgpLFxuICAgICAgdGhpcy5lbGVtZW50KCkuZ2V0RHJpdmVyKCkuc3dpdGNoVG8oKS5hY3RpdmVFbGVtZW50KCksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwYXRjaGVzIGFuIGV2ZW50IHdpdGggYSBwYXJ0aWN1bGFyIG5hbWUuXG4gICAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIGV2ZW50IHRvIGJlIGRpc3BhdGNoZWQuXG4gICAqL1xuICBhc3luYyBkaXNwYXRjaEV2ZW50KG5hbWU6IHN0cmluZywgZGF0YT86IFJlY29yZDxzdHJpbmcsIEV2ZW50RGF0YT4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9leGVjdXRlU2NyaXB0KGRpc3BhdGNoRXZlbnQsIG5hbWUsIHRoaXMuZWxlbWVudCgpLCBkYXRhKTtcbiAgICBhd2FpdCB0aGlzLl9zdGFiaWxpemUoKTtcbiAgfVxuXG4gIC8qKiBHZXRzIHRoZSB3ZWJkcml2ZXIgYWN0aW9uIHNlcXVlbmNlLiAqL1xuICBwcml2YXRlIF9hY3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnQoKS5nZXREcml2ZXIoKS5hY3Rpb25zKCk7XG4gIH1cblxuICAvKiogRXhlY3V0ZXMgYSBmdW5jdGlvbiBpbiB0aGUgYnJvd3Nlci4gKi9cbiAgcHJpdmF0ZSBhc3luYyBfZXhlY3V0ZVNjcmlwdDxUPihzY3JpcHQ6IEZ1bmN0aW9uLCAuLi52YXJfYXJnczogYW55W10pOiBQcm9taXNlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50KClcbiAgICAgIC5nZXREcml2ZXIoKVxuICAgICAgLmV4ZWN1dGVTY3JpcHQoc2NyaXB0LCAuLi52YXJfYXJncyk7XG4gIH1cblxuICAvKiogRGlzcGF0Y2hlcyBhbGwgdGhlIGV2ZW50cyB0aGF0IGFyZSBwYXJ0IG9mIGEgY2xpY2sgZXZlbnQgc2VxdWVuY2UuICovXG4gIHByaXZhdGUgYXN5bmMgX2Rpc3BhdGNoQ2xpY2tFdmVudFNlcXVlbmNlKFxuICAgIGFyZ3M6IFtNb2RpZmllcktleXM/XSB8IFsnY2VudGVyJywgTW9kaWZpZXJLZXlzP10gfCBbbnVtYmVyLCBudW1iZXIsIE1vZGlmaWVyS2V5cz9dLFxuICAgIGJ1dHRvbjogc3RyaW5nLFxuICApIHtcbiAgICBsZXQgbW9kaWZpZXJzOiBNb2RpZmllcktleXMgPSB7fTtcbiAgICBpZiAoYXJncy5sZW5ndGggJiYgdHlwZW9mIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIG1vZGlmaWVycyA9IGFyZ3MucG9wKCkgYXMgTW9kaWZpZXJLZXlzO1xuICAgIH1cbiAgICBjb25zdCBtb2RpZmllcktleXMgPSBnZXRTZWxlbml1bVdlYkRyaXZlck1vZGlmaWVyS2V5cyhtb2RpZmllcnMpO1xuXG4gICAgLy8gT21pdHRpbmcgdGhlIG9mZnNldCBhcmd1bWVudCB0byBtb3VzZU1vdmUgcmVzdWx0cyBpbiBjbGlja2luZyB0aGUgY2VudGVyLlxuICAgIC8vIFRoaXMgaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3Igd2Ugd2FudCwgc28gd2UgdXNlIGFuIGVtcHR5IGFycmF5IG9mIG9mZnNldEFyZ3MgaWZcbiAgICAvLyBubyBhcmdzIHJlbWFpbiBhZnRlciBwb3BwaW5nIHRoZSBtb2RpZmllcnMgZnJvbSB0aGUgYXJncyBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbi5cbiAgICBjb25zdCBvZmZzZXRBcmdzID0gKGFyZ3MubGVuZ3RoID09PSAyID8gW3t4OiBhcmdzWzBdLCB5OiBhcmdzWzFdfV0gOiBbXSkgYXMgW1xuICAgICAge3g6IG51bWJlcjsgeTogbnVtYmVyfSxcbiAgICBdO1xuXG4gICAgbGV0IGFjdGlvbnMgPSB0aGlzLl9hY3Rpb25zKCkubW91c2VNb3ZlKHRoaXMuZWxlbWVudCgpLCAuLi5vZmZzZXRBcmdzKTtcblxuICAgIGZvciAoY29uc3QgbW9kaWZpZXJLZXkgb2YgbW9kaWZpZXJLZXlzKSB7XG4gICAgICBhY3Rpb25zID0gYWN0aW9ucy5rZXlEb3duKG1vZGlmaWVyS2V5KTtcbiAgICB9XG4gICAgYWN0aW9ucyA9IGFjdGlvbnMuY2xpY2soYnV0dG9uKTtcbiAgICBmb3IgKGNvbnN0IG1vZGlmaWVyS2V5IG9mIG1vZGlmaWVyS2V5cykge1xuICAgICAgYWN0aW9ucyA9IGFjdGlvbnMua2V5VXAobW9kaWZpZXJLZXkpO1xuICAgIH1cblxuICAgIGF3YWl0IGFjdGlvbnMucGVyZm9ybSgpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGF0Y2hlcyBhbiBldmVudCB3aXRoIGEgcGFydGljdWxhciBuYW1lIGFuZCBkYXRhIHRvIGFuIGVsZW1lbnQuIE5vdGUgdGhhdCB0aGlzIG5lZWRzIHRvIGJlIGFcbiAqIHB1cmUgZnVuY3Rpb24sIGJlY2F1c2UgaXQgZ2V0cyBzdHJpbmdpZmllZCBieSBXZWJEcml2ZXIgYW5kIGlzIGV4ZWN1dGVkIGluc2lkZSB0aGUgYnJvd3Nlci5cbiAqL1xuZnVuY3Rpb24gZGlzcGF0Y2hFdmVudChuYW1lOiBzdHJpbmcsIGVsZW1lbnQ6IEVsZW1lbnQsIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBFdmVudERhdGE+KSB7XG4gIGNvbnN0IGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG4gIGV2ZW50LmluaXRFdmVudChuYW1lKTtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmJhbiBIYXZlIHRvIHVzZSBgT2JqZWN0LmFzc2lnbmAgdG8gcHJlc2VydmUgdGhlIG9yaWdpbmFsIG9iamVjdC5cbiAgT2JqZWN0LmFzc2lnbihldmVudCwgZGF0YSB8fCB7fSk7XG4gIGVsZW1lbnQuZGlzcGF0Y2hFdmVudChldmVudCk7XG59XG4iXX0=
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright Google LLC All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
+
* found in the LICENSE file at https://angular.io/license
|
|
7
|
+
*/
|
|
8
|
+
import { HarnessEnvironment } from '@angular/cdk/testing';
|
|
9
|
+
import * as webdriver from 'selenium-webdriver';
|
|
10
|
+
import { SeleniumWebDriverElement } from './selenium-web-driver-element';
|
|
11
|
+
/** The default environment options. */
|
|
12
|
+
const defaultEnvironmentOptions = {
|
|
13
|
+
queryFn: async (selector, root) => root().findElements(webdriver.By.css(selector)),
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* This function is meant to be executed in the browser. It taps into the hooks exposed by Angular
|
|
17
|
+
* and invokes the specified `callback` when the application is stable (no more pending tasks).
|
|
18
|
+
*/
|
|
19
|
+
function whenStable(callback) {
|
|
20
|
+
Promise.all(window.frameworkStabilizers.map(stabilizer => new Promise(stabilizer))).then(callback);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* This function is meant to be executed in the browser. It checks whether the Angular framework has
|
|
24
|
+
* bootstrapped yet.
|
|
25
|
+
*/
|
|
26
|
+
function isBootstrapped() {
|
|
27
|
+
return !!window.frameworkStabilizers;
|
|
28
|
+
}
|
|
29
|
+
/** Waits for angular to be ready after the page load. */
|
|
30
|
+
export async function waitForAngularReady(wd) {
|
|
31
|
+
await wd.wait(() => wd.executeScript(isBootstrapped));
|
|
32
|
+
await wd.executeAsyncScript(whenStable);
|
|
33
|
+
}
|
|
34
|
+
/** A `HarnessEnvironment` implementation for WebDriver. */
|
|
35
|
+
export class SeleniumWebDriverHarnessEnvironment extends HarnessEnvironment {
|
|
36
|
+
constructor(rawRootElement, options) {
|
|
37
|
+
super(rawRootElement);
|
|
38
|
+
this._options = { ...defaultEnvironmentOptions, ...options };
|
|
39
|
+
}
|
|
40
|
+
/** Gets the ElementFinder corresponding to the given TestElement. */
|
|
41
|
+
static getNativeElement(el) {
|
|
42
|
+
if (el instanceof SeleniumWebDriverElement) {
|
|
43
|
+
return el.element();
|
|
44
|
+
}
|
|
45
|
+
throw Error('This TestElement was not created by the WebDriverHarnessEnvironment');
|
|
46
|
+
}
|
|
47
|
+
/** Creates a `HarnessLoader` rooted at the document root. */
|
|
48
|
+
static loader(driver, options) {
|
|
49
|
+
return new SeleniumWebDriverHarnessEnvironment(() => driver.findElement(webdriver.By.css('body')), options);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Flushes change detection and async tasks captured in the Angular zone.
|
|
53
|
+
* In most cases it should not be necessary to call this manually. However, there may be some edge
|
|
54
|
+
* cases where it is needed to fully flush animation events.
|
|
55
|
+
*/
|
|
56
|
+
async forceStabilize() {
|
|
57
|
+
await this.rawRootElement().getDriver().executeAsyncScript(whenStable);
|
|
58
|
+
}
|
|
59
|
+
/** @docs-private */
|
|
60
|
+
async waitForTasksOutsideAngular() {
|
|
61
|
+
// TODO: figure out how we can do this for the webdriver environment.
|
|
62
|
+
// https://github.com/angular/components/issues/17412
|
|
63
|
+
}
|
|
64
|
+
/** Gets the root element for the document. */
|
|
65
|
+
getDocumentRoot() {
|
|
66
|
+
return () => this.rawRootElement().getDriver().findElement(webdriver.By.css('body'));
|
|
67
|
+
}
|
|
68
|
+
/** Creates a `TestElement` from a raw element. */
|
|
69
|
+
createTestElement(element) {
|
|
70
|
+
return new SeleniumWebDriverElement(element, () => this.forceStabilize());
|
|
71
|
+
}
|
|
72
|
+
/** Creates a `HarnessLoader` rooted at the given raw element. */
|
|
73
|
+
createEnvironment(element) {
|
|
74
|
+
return new SeleniumWebDriverHarnessEnvironment(element, this._options);
|
|
75
|
+
}
|
|
76
|
+
// Note: This seems to be working, though we may need to re-evaluate if we encounter issues with
|
|
77
|
+
// stale element references. `() => Promise<webdriver.WebElement[]>` seems like a more correct
|
|
78
|
+
// return type, though supporting it would require changes to the public harness API.
|
|
79
|
+
/**
|
|
80
|
+
* Gets a list of all elements matching the given selector under this environment's root element.
|
|
81
|
+
*/
|
|
82
|
+
async getAllRawElements(selector) {
|
|
83
|
+
const els = await this._options.queryFn(selector, this.rawRootElement);
|
|
84
|
+
return els.map((x) => () => x);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZW5pdW0td2ViLWRyaXZlci1oYXJuZXNzLWVudmlyb25tZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2Nkay90ZXN0aW5nL3NlbGVuaXVtLXdlYmRyaXZlci9zZWxlbml1bS13ZWItZHJpdmVyLWhhcm5lc3MtZW52aXJvbm1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFDLGtCQUFrQixFQUE2QixNQUFNLHNCQUFzQixDQUFDO0FBQ3BGLE9BQU8sS0FBSyxTQUFTLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sK0JBQStCLENBQUM7QUE2QnZFLHVDQUF1QztBQUN2QyxNQUFNLHlCQUF5QixHQUF1QztJQUNwRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQWdCLEVBQUUsSUFBZ0MsRUFBRSxFQUFFLENBQ3BFLElBQUksRUFBRSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztDQUNsRCxDQUFDO0FBRUY7OztHQUdHO0FBQ0gsU0FBUyxVQUFVLENBQUMsUUFBc0M7SUFDeEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDdEYsUUFBUSxDQUNULENBQUM7QUFDSixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxjQUFjO0lBQ3JCLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQztBQUN2QyxDQUFDO0FBRUQseURBQXlEO0FBQ3pELE1BQU0sQ0FBQyxLQUFLLFVBQVUsbUJBQW1CLENBQUMsRUFBdUI7SUFDL0QsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztJQUN0RCxNQUFNLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMxQyxDQUFDO0FBRUQsMkRBQTJEO0FBQzNELE1BQU0sT0FBTyxtQ0FBb0MsU0FBUSxrQkFFeEQ7SUFJQyxZQUNFLGNBQTBDLEVBQzFDLE9BQTRDO1FBRTVDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUMsR0FBRyx5QkFBeUIsRUFBRSxHQUFHLE9BQU8sRUFBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxxRUFBcUU7SUFDckUsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEVBQWU7UUFDckMsSUFBSSxFQUFFLFlBQVksd0JBQXdCLEVBQUU7WUFDMUMsT0FBTyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDckI7UUFDRCxNQUFNLEtBQUssQ0FBQyxxRUFBcUUsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFFRCw2REFBNkQ7SUFDN0QsTUFBTSxDQUFDLE1BQU0sQ0FDWCxNQUEyQixFQUMzQixPQUE0QztRQUU1QyxPQUFPLElBQUksbUNBQW1DLENBQzVDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsRUFDbEQsT0FBTyxDQUNSLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxjQUFjO1FBQ2xCLE1BQU0sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCxvQkFBb0I7SUFDcEIsS0FBSyxDQUFDLDBCQUEwQjtRQUM5QixxRUFBcUU7UUFDckUsc0RBQXNEO0lBQ3hELENBQUM7SUFFRCw4Q0FBOEM7SUFDcEMsZUFBZTtRQUN2QixPQUFPLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRUQsa0RBQWtEO0lBQ3hDLGlCQUFpQixDQUFDLE9BQW1DO1FBQzdELE9BQU8sSUFBSSx3QkFBd0IsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVELGlFQUFpRTtJQUN2RCxpQkFBaUIsQ0FDekIsT0FBbUM7UUFFbkMsT0FBTyxJQUFJLG1DQUFtQyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELGdHQUFnRztJQUNoRyw4RkFBOEY7SUFDOUYscUZBQXFGO0lBQ3JGOztPQUVHO0lBQ08sS0FBSyxDQUFDLGlCQUFpQixDQUFDLFFBQWdCO1FBQ2hELE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN2RSxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUF1QixFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtIYXJuZXNzRW52aXJvbm1lbnQsIEhhcm5lc3NMb2FkZXIsIFRlc3RFbGVtZW50fSBmcm9tICdAYW5ndWxhci9jZGsvdGVzdGluZyc7XG5pbXBvcnQgKiBhcyB3ZWJkcml2ZXIgZnJvbSAnc2VsZW5pdW0td2ViZHJpdmVyJztcbmltcG9ydCB7U2VsZW5pdW1XZWJEcml2ZXJFbGVtZW50fSBmcm9tICcuL3NlbGVuaXVtLXdlYi1kcml2ZXItZWxlbWVudCc7XG5cbi8qKlxuICogQW4gQW5ndWxhciBmcmFtZXdvcmsgc3RhYmlsaXplciBmdW5jdGlvbiB0aGF0IHRha2VzIGEgY2FsbGJhY2sgYW5kIGNhbGxzIGl0IHdoZW4gdGhlIGFwcGxpY2F0aW9uXG4gKiBpcyBzdGFibGUsIHBhc3NpbmcgYSBib29sZWFuIGluZGljYXRpbmcgaWYgYW55IHdvcmsgd2FzIGRvbmUuXG4gKi9cbmRlY2xhcmUgaW50ZXJmYWNlIEZyYW1ld29ya1N0YWJpbGl6ZXIge1xuICAoY2FsbGJhY2s6IChkaWRXb3JrOiBib29sZWFuKSA9PiB2b2lkKTogdm9pZDtcbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICAvKipcbiAgICAgKiBUaGVzZSBob29rcyBhcmUgZXhwb3NlZCBieSBBbmd1bGFyIHRvIHJlZ2lzdGVyIGEgY2FsbGJhY2sgZm9yIHdoZW4gdGhlIGFwcGxpY2F0aW9uIGlzIHN0YWJsZVxuICAgICAqIChubyBtb3JlIHBlbmRpbmcgdGFza3MpLlxuICAgICAqXG4gICAgICogRm9yIHRoZSBpbXBsZW1lbnRhdGlvbiwgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vXG4gICAgICogIGFuZ3VsYXIvYW5ndWxhci9ibG9iL21hc3Rlci9wYWNrYWdlcy9wbGF0Zm9ybS1icm93c2VyL3NyYy9icm93c2VyL3Rlc3RhYmlsaXR5LnRzI0wzMC1MNDlcbiAgICAgKi9cbiAgICBmcmFtZXdvcmtTdGFiaWxpemVyczogRnJhbWV3b3JrU3RhYmlsaXplcltdO1xuICB9XG59XG5cbi8qKiBPcHRpb25zIHRvIGNvbmZpZ3VyZSB0aGUgZW52aXJvbm1lbnQuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkRyaXZlckhhcm5lc3NFbnZpcm9ubWVudE9wdGlvbnMge1xuICAvKiogVGhlIHF1ZXJ5IGZ1bmN0aW9uIHVzZWQgdG8gZmluZCBET00gZWxlbWVudHMuICovXG4gIHF1ZXJ5Rm46IChzZWxlY3Rvcjogc3RyaW5nLCByb290OiAoKSA9PiB3ZWJkcml2ZXIuV2ViRWxlbWVudCkgPT4gUHJvbWlzZTx3ZWJkcml2ZXIuV2ViRWxlbWVudFtdPjtcbn1cblxuLyoqIFRoZSBkZWZhdWx0IGVudmlyb25tZW50IG9wdGlvbnMuICovXG5jb25zdCBkZWZhdWx0RW52aXJvbm1lbnRPcHRpb25zOiBXZWJEcml2ZXJIYXJuZXNzRW52aXJvbm1lbnRPcHRpb25zID0ge1xuICBxdWVyeUZuOiBhc3luYyAoc2VsZWN0b3I6IHN0cmluZywgcm9vdDogKCkgPT4gd2ViZHJpdmVyLldlYkVsZW1lbnQpID0+XG4gICAgcm9vdCgpLmZpbmRFbGVtZW50cyh3ZWJkcml2ZXIuQnkuY3NzKHNlbGVjdG9yKSksXG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgZXhlY3V0ZWQgaW4gdGhlIGJyb3dzZXIuIEl0IHRhcHMgaW50byB0aGUgaG9va3MgZXhwb3NlZCBieSBBbmd1bGFyXG4gKiBhbmQgaW52b2tlcyB0aGUgc3BlY2lmaWVkIGBjYWxsYmFja2Agd2hlbiB0aGUgYXBwbGljYXRpb24gaXMgc3RhYmxlIChubyBtb3JlIHBlbmRpbmcgdGFza3MpLlxuICovXG5mdW5jdGlvbiB3aGVuU3RhYmxlKGNhbGxiYWNrOiAoZGlkV29yazogYm9vbGVhbltdKSA9PiB2b2lkKTogdm9pZCB7XG4gIFByb21pc2UuYWxsKHdpbmRvdy5mcmFtZXdvcmtTdGFiaWxpemVycy5tYXAoc3RhYmlsaXplciA9PiBuZXcgUHJvbWlzZShzdGFiaWxpemVyKSkpLnRoZW4oXG4gICAgY2FsbGJhY2ssXG4gICk7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBleGVjdXRlZCBpbiB0aGUgYnJvd3Nlci4gSXQgY2hlY2tzIHdoZXRoZXIgdGhlIEFuZ3VsYXIgZnJhbWV3b3JrIGhhc1xuICogYm9vdHN0cmFwcGVkIHlldC5cbiAqL1xuZnVuY3Rpb24gaXNCb290c3RyYXBwZWQoKSB7XG4gIHJldHVybiAhIXdpbmRvdy5mcmFtZXdvcmtTdGFiaWxpemVycztcbn1cblxuLyoqIFdhaXRzIGZvciBhbmd1bGFyIHRvIGJlIHJlYWR5IGFmdGVyIHRoZSBwYWdlIGxvYWQuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2FpdEZvckFuZ3VsYXJSZWFkeSh3ZDogd2ViZHJpdmVyLldlYkRyaXZlcikge1xuICBhd2FpdCB3ZC53YWl0KCgpID0+IHdkLmV4ZWN1dGVTY3JpcHQoaXNCb290c3RyYXBwZWQpKTtcbiAgYXdhaXQgd2QuZXhlY3V0ZUFzeW5jU2NyaXB0KHdoZW5TdGFibGUpO1xufVxuXG4vKiogQSBgSGFybmVzc0Vudmlyb25tZW50YCBpbXBsZW1lbnRhdGlvbiBmb3IgV2ViRHJpdmVyLiAqL1xuZXhwb3J0IGNsYXNzIFNlbGVuaXVtV2ViRHJpdmVySGFybmVzc0Vudmlyb25tZW50IGV4dGVuZHMgSGFybmVzc0Vudmlyb25tZW50PFxuICAoKSA9PiB3ZWJkcml2ZXIuV2ViRWxlbWVudFxuPiB7XG4gIC8qKiBUaGUgb3B0aW9ucyBmb3IgdGhpcyBlbnZpcm9ubWVudC4gKi9cbiAgcHJpdmF0ZSBfb3B0aW9uczogV2ViRHJpdmVySGFybmVzc0Vudmlyb25tZW50T3B0aW9ucztcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgcmF3Um9vdEVsZW1lbnQ6ICgpID0+IHdlYmRyaXZlci5XZWJFbGVtZW50LFxuICAgIG9wdGlvbnM/OiBXZWJEcml2ZXJIYXJuZXNzRW52aXJvbm1lbnRPcHRpb25zLFxuICApIHtcbiAgICBzdXBlcihyYXdSb290RWxlbWVudCk7XG4gICAgdGhpcy5fb3B0aW9ucyA9IHsuLi5kZWZhdWx0RW52aXJvbm1lbnRPcHRpb25zLCAuLi5vcHRpb25zfTtcbiAgfVxuXG4gIC8qKiBHZXRzIHRoZSBFbGVtZW50RmluZGVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIFRlc3RFbGVtZW50LiAqL1xuICBzdGF0aWMgZ2V0TmF0aXZlRWxlbWVudChlbDogVGVzdEVsZW1lbnQpOiB3ZWJkcml2ZXIuV2ViRWxlbWVudCB7XG4gICAgaWYgKGVsIGluc3RhbmNlb2YgU2VsZW5pdW1XZWJEcml2ZXJFbGVtZW50KSB7XG4gICAgICByZXR1cm4gZWwuZWxlbWVudCgpO1xuICAgIH1cbiAgICB0aHJvdyBFcnJvcignVGhpcyBUZXN0RWxlbWVudCB3YXMgbm90IGNyZWF0ZWQgYnkgdGhlIFdlYkRyaXZlckhhcm5lc3NFbnZpcm9ubWVudCcpO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgYSBgSGFybmVzc0xvYWRlcmAgcm9vdGVkIGF0IHRoZSBkb2N1bWVudCByb290LiAqL1xuICBzdGF0aWMgbG9hZGVyKFxuICAgIGRyaXZlcjogd2ViZHJpdmVyLldlYkRyaXZlcixcbiAgICBvcHRpb25zPzogV2ViRHJpdmVySGFybmVzc0Vudmlyb25tZW50T3B0aW9ucyxcbiAgKTogSGFybmVzc0xvYWRlciB7XG4gICAgcmV0dXJuIG5ldyBTZWxlbml1bVdlYkRyaXZlckhhcm5lc3NFbnZpcm9ubWVudChcbiAgICAgICgpID0+IGRyaXZlci5maW5kRWxlbWVudCh3ZWJkcml2ZXIuQnkuY3NzKCdib2R5JykpLFxuICAgICAgb3B0aW9ucyxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZsdXNoZXMgY2hhbmdlIGRldGVjdGlvbiBhbmQgYXN5bmMgdGFza3MgY2FwdHVyZWQgaW4gdGhlIEFuZ3VsYXIgem9uZS5cbiAgICogSW4gbW9zdCBjYXNlcyBpdCBzaG91bGQgbm90IGJlIG5lY2Vzc2FyeSB0byBjYWxsIHRoaXMgbWFudWFsbHkuIEhvd2V2ZXIsIHRoZXJlIG1heSBiZSBzb21lIGVkZ2VcbiAgICogY2FzZXMgd2hlcmUgaXQgaXMgbmVlZGVkIHRvIGZ1bGx5IGZsdXNoIGFuaW1hdGlvbiBldmVudHMuXG4gICAqL1xuICBhc3luYyBmb3JjZVN0YWJpbGl6ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnJhd1Jvb3RFbGVtZW50KCkuZ2V0RHJpdmVyKCkuZXhlY3V0ZUFzeW5jU2NyaXB0KHdoZW5TdGFibGUpO1xuICB9XG5cbiAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgYXN5bmMgd2FpdEZvclRhc2tzT3V0c2lkZUFuZ3VsYXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gVE9ETzogZmlndXJlIG91dCBob3cgd2UgY2FuIGRvIHRoaXMgZm9yIHRoZSB3ZWJkcml2ZXIgZW52aXJvbm1lbnQuXG4gICAgLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2NvbXBvbmVudHMvaXNzdWVzLzE3NDEyXG4gIH1cblxuICAvKiogR2V0cyB0aGUgcm9vdCBlbGVtZW50IGZvciB0aGUgZG9jdW1lbnQuICovXG4gIHByb3RlY3RlZCBnZXREb2N1bWVudFJvb3QoKTogKCkgPT4gd2ViZHJpdmVyLldlYkVsZW1lbnQge1xuICAgIHJldHVybiAoKSA9PiB0aGlzLnJhd1Jvb3RFbGVtZW50KCkuZ2V0RHJpdmVyKCkuZmluZEVsZW1lbnQod2ViZHJpdmVyLkJ5LmNzcygnYm9keScpKTtcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIGEgYFRlc3RFbGVtZW50YCBmcm9tIGEgcmF3IGVsZW1lbnQuICovXG4gIHByb3RlY3RlZCBjcmVhdGVUZXN0RWxlbWVudChlbGVtZW50OiAoKSA9PiB3ZWJkcml2ZXIuV2ViRWxlbWVudCk6IFRlc3RFbGVtZW50IHtcbiAgICByZXR1cm4gbmV3IFNlbGVuaXVtV2ViRHJpdmVyRWxlbWVudChlbGVtZW50LCAoKSA9PiB0aGlzLmZvcmNlU3RhYmlsaXplKCkpO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgYSBgSGFybmVzc0xvYWRlcmAgcm9vdGVkIGF0IHRoZSBnaXZlbiByYXcgZWxlbWVudC4gKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZUVudmlyb25tZW50KFxuICAgIGVsZW1lbnQ6ICgpID0+IHdlYmRyaXZlci5XZWJFbGVtZW50LFxuICApOiBIYXJuZXNzRW52aXJvbm1lbnQ8KCkgPT4gd2ViZHJpdmVyLldlYkVsZW1lbnQ+IHtcbiAgICByZXR1cm4gbmV3IFNlbGVuaXVtV2ViRHJpdmVySGFybmVzc0Vudmlyb25tZW50KGVsZW1lbnQsIHRoaXMuX29wdGlvbnMpO1xuICB9XG5cbiAgLy8gTm90ZTogVGhpcyBzZWVtcyB0byBiZSB3b3JraW5nLCB0aG91Z2ggd2UgbWF5IG5lZWQgdG8gcmUtZXZhbHVhdGUgaWYgd2UgZW5jb3VudGVyIGlzc3VlcyB3aXRoXG4gIC8vIHN0YWxlIGVsZW1lbnQgcmVmZXJlbmNlcy4gYCgpID0+IFByb21pc2U8d2ViZHJpdmVyLldlYkVsZW1lbnRbXT5gIHNlZW1zIGxpa2UgYSBtb3JlIGNvcnJlY3RcbiAgLy8gcmV0dXJuIHR5cGUsIHRob3VnaCBzdXBwb3J0aW5nIGl0IHdvdWxkIHJlcXVpcmUgY2hhbmdlcyB0byB0aGUgcHVibGljIGhhcm5lc3MgQVBJLlxuICAvKipcbiAgICogR2V0cyBhIGxpc3Qgb2YgYWxsIGVsZW1lbnRzIG1hdGNoaW5nIHRoZSBnaXZlbiBzZWxlY3RvciB1bmRlciB0aGlzIGVudmlyb25tZW50J3Mgcm9vdCBlbGVtZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGdldEFsbFJhd0VsZW1lbnRzKHNlbGVjdG9yOiBzdHJpbmcpOiBQcm9taXNlPCgoKSA9PiB3ZWJkcml2ZXIuV2ViRWxlbWVudClbXT4ge1xuICAgIGNvbnN0IGVscyA9IGF3YWl0IHRoaXMuX29wdGlvbnMucXVlcnlGbihzZWxlY3RvciwgdGhpcy5yYXdSb290RWxlbWVudCk7XG4gICAgcmV0dXJuIGVscy5tYXAoKHg6IHdlYmRyaXZlci5XZWJFbGVtZW50KSA9PiAoKSA9PiB4KTtcbiAgfVxufVxuIl19
|
|
@@ -41,7 +41,7 @@ export const seleniumWebDriverKeyMap = {
|
|
|
41
41
|
[TestKey.F10]: webdriver.Key.F10,
|
|
42
42
|
[TestKey.F11]: webdriver.Key.F11,
|
|
43
43
|
[TestKey.F12]: webdriver.Key.F12,
|
|
44
|
-
[TestKey.META]: webdriver.Key.META
|
|
44
|
+
[TestKey.META]: webdriver.Key.META,
|
|
45
45
|
};
|
|
46
46
|
/** Gets a list of WebDriver `Key`s for the given `ModifierKeys`. */
|
|
47
47
|
export function getSeleniumWebDriverModifierKeys(modifiers) {
|
|
@@ -60,4 +60,4 @@ export function getSeleniumWebDriverModifierKeys(modifiers) {
|
|
|
60
60
|
}
|
|
61
61
|
return result;
|
|
62
62
|
}
|
|
63
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZW5pdW0td2ViZHJpdmVyLWtleXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2RrL3Rlc3Rpbmcvc2VsZW5pdW0td2ViZHJpdmVyL3NlbGVuaXVtLXdlYmRyaXZlci1rZXlzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBZSxPQUFPLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRCxPQUFPLEtBQUssU0FBUyxNQUFNLG9CQUFvQixDQUFDO0FBRWhEOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHO0lBQ3JDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsVUFBVTtJQUM3QyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUc7SUFDaEMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLO0lBQ3BDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSztJQUNwQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLE9BQU87SUFDeEMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHO0lBQ2hDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTTtJQUN0QyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLE9BQU87SUFDeEMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTO0lBQzVDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRztJQUNoQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUk7SUFDbEMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVO0lBQzlDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUTtJQUMxQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLFdBQVc7SUFDaEQsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVO0lBQzlDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTTtJQUN0QyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU07SUFDdEMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0lBQzlCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtJQUM5QixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7SUFDOUIsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0lBQzlCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtJQUM5QixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7SUFDOUIsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0lBQzlCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtJQUM5QixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7SUFDOUIsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHO0lBQ2hDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRztJQUNoQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUc7SUFDaEMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJO0NBQ25DLENBQUM7QUFFRixvRUFBb0U7QUFDcEUsTUFBTSxVQUFVLGdDQUFnQyxDQUFDLFNBQXVCO0lBQ3RFLE1BQU0sTUFBTSxHQUFhLEVBQUUsQ0FBQztJQUM1QixJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUU7UUFDckIsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQ3BDO0lBQ0QsSUFBSSxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ2pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNoQztJQUNELElBQUksU0FBUyxDQUFDLEtBQUssRUFBRTtRQUNuQixNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDbEM7SUFDRCxJQUFJLFNBQVMsQ0FBQyxJQUFJLEVBQUU7UUFDbEIsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ2pDO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge01vZGlmaWVyS2V5cywgVGVzdEtleX0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Rlc3RpbmcnO1xuaW1wb3J0ICogYXMgd2ViZHJpdmVyIGZyb20gJ3NlbGVuaXVtLXdlYmRyaXZlcic7XG5cbi8qKlxuICogTWFwcyB0aGUgYFRlc3RLZXlgIGNvbnN0YW50cyB0byBXZWJEcml2ZXIncyBgd2ViZHJpdmVyLktleWAgY29uc3RhbnRzLlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9TZWxlbml1bUhRL3NlbGVuaXVtL2Jsb2IvdHJ1bmsvamF2YXNjcmlwdC93ZWJkcml2ZXIva2V5LmpzI0wyOVxuICovXG5leHBvcnQgY29uc3Qgc2VsZW5pdW1XZWJEcml2ZXJLZXlNYXAgPSB7XG4gIFtUZXN0S2V5LkJBQ0tTUEFDRV06IHdlYmRyaXZlci5LZXkuQkFDS19TUEFDRSxcbiAgW1Rlc3RLZXkuVEFCXTogd2ViZHJpdmVyLktleS5UQUIsXG4gIFtUZXN0S2V5LkVOVEVSXTogd2ViZHJpdmVyLktleS5FTlRFUixcbiAgW1Rlc3RLZXkuU0hJRlRdOiB3ZWJkcml2ZXIuS2V5LlNISUZULFxuICBbVGVzdEtleS5DT05UUk9MXTogd2ViZHJpdmVyLktleS5DT05UUk9MLFxuICBbVGVzdEtleS5BTFRdOiB3ZWJkcml2ZXIuS2V5LkFMVCxcbiAgW1Rlc3RLZXkuRVNDQVBFXTogd2ViZHJpdmVyLktleS5FU0NBUEUsXG4gIFtUZXN0S2V5LlBBR0VfVVBdOiB3ZWJkcml2ZXIuS2V5LlBBR0VfVVAsXG4gIFtUZXN0S2V5LlBBR0VfRE9XTl06IHdlYmRyaXZlci5LZXkuUEFHRV9ET1dOLFxuICBbVGVzdEtleS5FTkRdOiB3ZWJkcml2ZXIuS2V5LkVORCxcbiAgW1Rlc3RLZXkuSE9NRV06IHdlYmRyaXZlci5LZXkuSE9NRSxcbiAgW1Rlc3RLZXkuTEVGVF9BUlJPV106IHdlYmRyaXZlci5LZXkuQVJST1dfTEVGVCxcbiAgW1Rlc3RLZXkuVVBfQVJST1ddOiB3ZWJkcml2ZXIuS2V5LkFSUk9XX1VQLFxuICBbVGVzdEtleS5SSUdIVF9BUlJPV106IHdlYmRyaXZlci5LZXkuQVJST1dfUklHSFQsXG4gIFtUZXN0S2V5LkRPV05fQVJST1ddOiB3ZWJkcml2ZXIuS2V5LkFSUk9XX0RPV04sXG4gIFtUZXN0S2V5LklOU0VSVF06IHdlYmRyaXZlci5LZXkuSU5TRVJULFxuICBbVGVzdEtleS5ERUxFVEVdOiB3ZWJkcml2ZXIuS2V5LkRFTEVURSxcbiAgW1Rlc3RLZXkuRjFdOiB3ZWJkcml2ZXIuS2V5LkYxLFxuICBbVGVzdEtleS5GMl06IHdlYmRyaXZlci5LZXkuRjIsXG4gIFtUZXN0S2V5LkYzXTogd2ViZHJpdmVyLktleS5GMyxcbiAgW1Rlc3RLZXkuRjRdOiB3ZWJkcml2ZXIuS2V5LkY0LFxuICBbVGVzdEtleS5GNV06IHdlYmRyaXZlci5LZXkuRjUsXG4gIFtUZXN0S2V5LkY2XTogd2ViZHJpdmVyLktleS5GNixcbiAgW1Rlc3RLZXkuRjddOiB3ZWJkcml2ZXIuS2V5LkY3LFxuICBbVGVzdEtleS5GOF06IHdlYmRyaXZlci5LZXkuRjgsXG4gIFtUZXN0S2V5LkY5XTogd2ViZHJpdmVyLktleS5GOSxcbiAgW1Rlc3RLZXkuRjEwXTogd2ViZHJpdmVyLktleS5GMTAsXG4gIFtUZXN0S2V5LkYxMV06IHdlYmRyaXZlci5LZXkuRjExLFxuICBbVGVzdEtleS5GMTJdOiB3ZWJkcml2ZXIuS2V5LkYxMixcbiAgW1Rlc3RLZXkuTUVUQV06IHdlYmRyaXZlci5LZXkuTUVUQSxcbn07XG5cbi8qKiBHZXRzIGEgbGlzdCBvZiBXZWJEcml2ZXIgYEtleWBzIGZvciB0aGUgZ2l2ZW4gYE1vZGlmaWVyS2V5c2AuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZW5pdW1XZWJEcml2ZXJNb2RpZmllcktleXMobW9kaWZpZXJzOiBNb2RpZmllcktleXMpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHJlc3VsdDogc3RyaW5nW10gPSBbXTtcbiAgaWYgKG1vZGlmaWVycy5jb250cm9sKSB7XG4gICAgcmVzdWx0LnB1c2god2ViZHJpdmVyLktleS5DT05UUk9MKTtcbiAgfVxuICBpZiAobW9kaWZpZXJzLmFsdCkge1xuICAgIHJlc3VsdC5wdXNoKHdlYmRyaXZlci5LZXkuQUxUKTtcbiAgfVxuICBpZiAobW9kaWZpZXJzLnNoaWZ0KSB7XG4gICAgcmVzdWx0LnB1c2god2ViZHJpdmVyLktleS5TSElGVCk7XG4gIH1cbiAgaWYgKG1vZGlmaWVycy5tZXRhKSB7XG4gICAgcmVzdWx0LnB1c2god2ViZHJpdmVyLktleS5NRVRBKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuIl19
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright Google LLC All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
+
* found in the LICENSE file at https://angular.io/license
|
|
7
|
+
*/
|
|
8
|
+
/** An enum of non-text keys that can be used with the `sendKeys` method. */
|
|
9
|
+
// NOTE: This is a separate enum from `@angular/cdk/keycodes` because we don't necessarily want to
|
|
10
|
+
// support every possible keyCode. We also can't rely on Protractor's `Key` because we don't want a
|
|
11
|
+
// dependency on any particular testing framework here. Instead we'll just maintain this supported
|
|
12
|
+
// list of keys and let individual concrete `HarnessEnvironment` classes map them to whatever key
|
|
13
|
+
// representation is used in its respective testing framework.
|
|
14
|
+
// tslint:disable-next-line:prefer-const-enum Seems like this causes some issues with System.js
|
|
15
|
+
export var TestKey;
|
|
16
|
+
(function (TestKey) {
|
|
17
|
+
TestKey[TestKey["BACKSPACE"] = 0] = "BACKSPACE";
|
|
18
|
+
TestKey[TestKey["TAB"] = 1] = "TAB";
|
|
19
|
+
TestKey[TestKey["ENTER"] = 2] = "ENTER";
|
|
20
|
+
TestKey[TestKey["SHIFT"] = 3] = "SHIFT";
|
|
21
|
+
TestKey[TestKey["CONTROL"] = 4] = "CONTROL";
|
|
22
|
+
TestKey[TestKey["ALT"] = 5] = "ALT";
|
|
23
|
+
TestKey[TestKey["ESCAPE"] = 6] = "ESCAPE";
|
|
24
|
+
TestKey[TestKey["PAGE_UP"] = 7] = "PAGE_UP";
|
|
25
|
+
TestKey[TestKey["PAGE_DOWN"] = 8] = "PAGE_DOWN";
|
|
26
|
+
TestKey[TestKey["END"] = 9] = "END";
|
|
27
|
+
TestKey[TestKey["HOME"] = 10] = "HOME";
|
|
28
|
+
TestKey[TestKey["LEFT_ARROW"] = 11] = "LEFT_ARROW";
|
|
29
|
+
TestKey[TestKey["UP_ARROW"] = 12] = "UP_ARROW";
|
|
30
|
+
TestKey[TestKey["RIGHT_ARROW"] = 13] = "RIGHT_ARROW";
|
|
31
|
+
TestKey[TestKey["DOWN_ARROW"] = 14] = "DOWN_ARROW";
|
|
32
|
+
TestKey[TestKey["INSERT"] = 15] = "INSERT";
|
|
33
|
+
TestKey[TestKey["DELETE"] = 16] = "DELETE";
|
|
34
|
+
TestKey[TestKey["F1"] = 17] = "F1";
|
|
35
|
+
TestKey[TestKey["F2"] = 18] = "F2";
|
|
36
|
+
TestKey[TestKey["F3"] = 19] = "F3";
|
|
37
|
+
TestKey[TestKey["F4"] = 20] = "F4";
|
|
38
|
+
TestKey[TestKey["F5"] = 21] = "F5";
|
|
39
|
+
TestKey[TestKey["F6"] = 22] = "F6";
|
|
40
|
+
TestKey[TestKey["F7"] = 23] = "F7";
|
|
41
|
+
TestKey[TestKey["F8"] = 24] = "F8";
|
|
42
|
+
TestKey[TestKey["F9"] = 25] = "F9";
|
|
43
|
+
TestKey[TestKey["F10"] = 26] = "F10";
|
|
44
|
+
TestKey[TestKey["F11"] = 27] = "F11";
|
|
45
|
+
TestKey[TestKey["F12"] = 28] = "F12";
|
|
46
|
+
TestKey[TestKey["META"] = 29] = "META";
|
|
47
|
+
})(TestKey || (TestKey = {}));
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1lbGVtZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2Nkay90ZXN0aW5nL3Rlc3QtZWxlbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFzQkgsNEVBQTRFO0FBQzVFLGtHQUFrRztBQUNsRyxtR0FBbUc7QUFDbkcsa0dBQWtHO0FBQ2xHLGlHQUFpRztBQUNqRyw4REFBOEQ7QUFDOUQsK0ZBQStGO0FBQy9GLE1BQU0sQ0FBTixJQUFZLE9BK0JYO0FBL0JELFdBQVksT0FBTztJQUNqQiwrQ0FBUyxDQUFBO0lBQ1QsbUNBQUcsQ0FBQTtJQUNILHVDQUFLLENBQUE7SUFDTCx1Q0FBSyxDQUFBO0lBQ0wsMkNBQU8sQ0FBQTtJQUNQLG1DQUFHLENBQUE7SUFDSCx5Q0FBTSxDQUFBO0lBQ04sMkNBQU8sQ0FBQTtJQUNQLCtDQUFTLENBQUE7SUFDVCxtQ0FBRyxDQUFBO0lBQ0gsc0NBQUksQ0FBQTtJQUNKLGtEQUFVLENBQUE7SUFDViw4Q0FBUSxDQUFBO0lBQ1Isb0RBQVcsQ0FBQTtJQUNYLGtEQUFVLENBQUE7SUFDViwwQ0FBTSxDQUFBO0lBQ04sMENBQU0sQ0FBQTtJQUNOLGtDQUFFLENBQUE7SUFDRixrQ0FBRSxDQUFBO0lBQ0Ysa0NBQUUsQ0FBQTtJQUNGLGtDQUFFLENBQUE7SUFDRixrQ0FBRSxDQUFBO0lBQ0Ysa0NBQUUsQ0FBQTtJQUNGLGtDQUFFLENBQUE7SUFDRixrQ0FBRSxDQUFBO0lBQ0Ysa0NBQUUsQ0FBQTtJQUNGLG9DQUFHLENBQUE7SUFDSCxvQ0FBRyxDQUFBO0lBQ0gsb0NBQUcsQ0FBQTtJQUNILHNDQUFJLENBQUE7QUFDTixDQUFDLEVBL0JXLE9BQU8sS0FBUCxPQUFPLFFBK0JsQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge0VsZW1lbnREaW1lbnNpb25zfSBmcm9tICcuL2VsZW1lbnQtZGltZW5zaW9ucyc7XG5cbi8qKiBNb2RpZmllciBrZXlzIHRoYXQgbWF5IGJlIGhlbGQgd2hpbGUgdHlwaW5nLiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb2RpZmllcktleXMge1xuICBjb250cm9sPzogYm9vbGVhbjtcbiAgYWx0PzogYm9vbGVhbjtcbiAgc2hpZnQ/OiBib29sZWFuO1xuICBtZXRhPzogYm9vbGVhbjtcbn1cblxuLyoqIERhdGEgdGhhdCBjYW4gYmUgYXR0YWNoZWQgdG8gYSBjdXN0b20gZXZlbnQgZGlzcGF0Y2hlZCBmcm9tIGEgYFRlc3RFbGVtZW50YC4gKi9cbmV4cG9ydCB0eXBlIEV2ZW50RGF0YSA9XG4gIHwgc3RyaW5nXG4gIHwgbnVtYmVyXG4gIHwgYm9vbGVhblxuICB8IHVuZGVmaW5lZFxuICB8IG51bGxcbiAgfCBFdmVudERhdGFbXVxuICB8IHtba2V5OiBzdHJpbmddOiBFdmVudERhdGF9O1xuXG4vKiogQW4gZW51bSBvZiBub24tdGV4dCBrZXlzIHRoYXQgY2FuIGJlIHVzZWQgd2l0aCB0aGUgYHNlbmRLZXlzYCBtZXRob2QuICovXG4vLyBOT1RFOiBUaGlzIGlzIGEgc2VwYXJhdGUgZW51bSBmcm9tIGBAYW5ndWxhci9jZGsva2V5Y29kZXNgIGJlY2F1c2Ugd2UgZG9uJ3QgbmVjZXNzYXJpbHkgd2FudCB0b1xuLy8gc3VwcG9ydCBldmVyeSBwb3NzaWJsZSBrZXlDb2RlLiBXZSBhbHNvIGNhbid0IHJlbHkgb24gUHJvdHJhY3RvcidzIGBLZXlgIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCBhXG4vLyBkZXBlbmRlbmN5IG9uIGFueSBwYXJ0aWN1bGFyIHRlc3RpbmcgZnJhbWV3b3JrIGhlcmUuIEluc3RlYWQgd2UnbGwganVzdCBtYWludGFpbiB0aGlzIHN1cHBvcnRlZFxuLy8gbGlzdCBvZiBrZXlzIGFuZCBsZXQgaW5kaXZpZHVhbCBjb25jcmV0ZSBgSGFybmVzc0Vudmlyb25tZW50YCBjbGFzc2VzIG1hcCB0aGVtIHRvIHdoYXRldmVyIGtleVxuLy8gcmVwcmVzZW50YXRpb24gaXMgdXNlZCBpbiBpdHMgcmVzcGVjdGl2ZSB0ZXN0aW5nIGZyYW1ld29yay5cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpwcmVmZXItY29uc3QtZW51bSBTZWVtcyBsaWtlIHRoaXMgY2F1c2VzIHNvbWUgaXNzdWVzIHdpdGggU3lzdGVtLmpzXG5leHBvcnQgZW51bSBUZXN0S2V5IHtcbiAgQkFDS1NQQUNFLFxuICBUQUIsXG4gIEVOVEVSLFxuICBTSElGVCxcbiAgQ09OVFJPTCxcbiAgQUxULFxuICBFU0NBUEUsXG4gIFBBR0VfVVAsXG4gIFBBR0VfRE9XTixcbiAgRU5ELFxuICBIT01FLFxuICBMRUZUX0FSUk9XLFxuICBVUF9BUlJPVyxcbiAgUklHSFRfQVJST1csXG4gIERPV05fQVJST1csXG4gIElOU0VSVCxcbiAgREVMRVRFLFxuICBGMSxcbiAgRjIsXG4gIEYzLFxuICBGNCxcbiAgRjUsXG4gIEY2LFxuICBGNyxcbiAgRjgsXG4gIEY5LFxuICBGMTAsXG4gIEYxMSxcbiAgRjEyLFxuICBNRVRBLFxufVxuXG4vKipcbiAqIFRoaXMgYWN0cyBhcyBhIGNvbW1vbiBpbnRlcmZhY2UgZm9yIERPTSBlbGVtZW50cyBhY3Jvc3MgYm90aCB1bml0IGFuZCBlMmUgdGVzdHMuIEl0IGlzIHRoZVxuICogaW50ZXJmYWNlIHRocm91Z2ggd2hpY2ggdGhlIENvbXBvbmVudEhhcm5lc3MgaW50ZXJhY3RzIHdpdGggdGhlIGNvbXBvbmVudCdzIERPTS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZXN0RWxlbWVudCB7XG4gIC8qKiBCbHVyIHRoZSBlbGVtZW50LiAqL1xuICBibHVyKCk6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqIENsZWFyIHRoZSBlbGVtZW50J3MgaW5wdXQgKGZvciBpbnB1dCBhbmQgdGV4dGFyZWEgZWxlbWVudHMgb25seSkuICovXG4gIGNsZWFyKCk6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIENsaWNrIHRoZSBlbGVtZW50IGF0IHRoZSBkZWZhdWx0IGxvY2F0aW9uIGZvciB0aGUgY3VycmVudCBlbnZpcm9ubWVudC4gSWYgeW91IG5lZWQgdG8gZ3VhcmFudGVlXG4gICAqIHRoZSBlbGVtZW50IGlzIGNsaWNrZWQgYXQgYSBzcGVjaWZpYyBsb2NhdGlvbiwgY29uc2lkZXIgdXNpbmcgYGNsaWNrKCdjZW50ZXInKWAgb3JcbiAgICogYGNsaWNrKHgsIHkpYCBpbnN0ZWFkLlxuICAgKi9cbiAgY2xpY2sobW9kaWZpZXJzPzogTW9kaWZpZXJLZXlzKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKiogQ2xpY2sgdGhlIGVsZW1lbnQgYXQgdGhlIGVsZW1lbnQncyBjZW50ZXIuICovXG4gIGNsaWNrKGxvY2F0aW9uOiAnY2VudGVyJywgbW9kaWZpZXJzPzogTW9kaWZpZXJLZXlzKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogQ2xpY2sgdGhlIGVsZW1lbnQgYXQgdGhlIHNwZWNpZmllZCBjb29yZGluYXRlcyByZWxhdGl2ZSB0byB0aGUgdG9wLWxlZnQgb2YgdGhlIGVsZW1lbnQuXG4gICAqIEBwYXJhbSByZWxhdGl2ZVggQ29vcmRpbmF0ZSB3aXRoaW4gdGhlIGVsZW1lbnQsIGFsb25nIHRoZSBYLWF4aXMgYXQgd2hpY2ggdG8gY2xpY2suXG4gICAqIEBwYXJhbSByZWxhdGl2ZVkgQ29vcmRpbmF0ZSB3aXRoaW4gdGhlIGVsZW1lbnQsIGFsb25nIHRoZSBZLWF4aXMgYXQgd2hpY2ggdG8gY2xpY2suXG4gICAqIEBwYXJhbSBtb2RpZmllcnMgTW9kaWZpZXIga2V5cyBoZWxkIHdoaWxlIGNsaWNraW5nXG4gICAqL1xuICBjbGljayhyZWxhdGl2ZVg6IG51bWJlciwgcmVsYXRpdmVZOiBudW1iZXIsIG1vZGlmaWVycz86IE1vZGlmaWVyS2V5cyk6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIFJpZ2h0IGNsaWNrcyBvbiB0aGUgZWxlbWVudCBhdCB0aGUgc3BlY2lmaWVkIGNvb3JkaW5hdGVzIHJlbGF0aXZlIHRvIHRoZSB0b3AtbGVmdCBvZiBpdC5cbiAgICogQHBhcmFtIHJlbGF0aXZlWCBDb29yZGluYXRlIHdpdGhpbiB0aGUgZWxlbWVudCwgYWxvbmcgdGhlIFgtYXhpcyBhdCB3aGljaCB0byBjbGljay5cbiAgICogQHBhcmFtIHJlbGF0aXZlWSBDb29yZGluYXRlIHdpdGhpbiB0aGUgZWxlbWVudCwgYWxvbmcgdGhlIFktYXhpcyBhdCB3aGljaCB0byBjbGljay5cbiAgICogQHBhcmFtIG1vZGlmaWVycyBNb2RpZmllciBrZXlzIGhlbGQgd2hpbGUgY2xpY2tpbmdcbiAgICovXG4gIHJpZ2h0Q2xpY2socmVsYXRpdmVYOiBudW1iZXIsIHJlbGF0aXZlWTogbnVtYmVyLCBtb2RpZmllcnM/OiBNb2RpZmllcktleXMpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKiBGb2N1cyB0aGUgZWxlbWVudC4gKi9cbiAgZm9jdXMoKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKiogR2V0IHRoZSBjb21wdXRlZCB2YWx1ZSBvZiB0aGUgZ2l2ZW4gQ1NTIHByb3BlcnR5IGZvciB0aGUgZWxlbWVudC4gKi9cbiAgZ2V0Q3NzVmFsdWUocHJvcGVydHk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPjtcblxuICAvKiogSG92ZXJzIHRoZSBtb3VzZSBvdmVyIHRoZSBlbGVtZW50LiAqL1xuICBob3ZlcigpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKiBNb3ZlcyB0aGUgbW91c2UgYXdheSBmcm9tIHRoZSBlbGVtZW50LiAqL1xuICBtb3VzZUF3YXkoKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogU2VuZHMgdGhlIGdpdmVuIHN0cmluZyB0byB0aGUgaW5wdXQgYXMgYSBzZXJpZXMgb2Yga2V5IHByZXNzZXMuIEFsc28gZmlyZXMgaW5wdXQgZXZlbnRzXG4gICAqIGFuZCBhdHRlbXB0cyB0byBhZGQgdGhlIHN0cmluZyB0byB0aGUgRWxlbWVudCdzIHZhbHVlLlxuICAgKi9cbiAgc2VuZEtleXMoLi4ua2V5czogKHN0cmluZyB8IFRlc3RLZXkpW10pOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBTZW5kcyB0aGUgZ2l2ZW4gc3RyaW5nIHRvIHRoZSBpbnB1dCBhcyBhIHNlcmllcyBvZiBrZXkgcHJlc3Nlcy4gQWxzbyBmaXJlcyBpbnB1dCBldmVudHNcbiAgICogYW5kIGF0dGVtcHRzIHRvIGFkZCB0aGUgc3RyaW5nIHRvIHRoZSBFbGVtZW50J3MgdmFsdWUuXG4gICAqL1xuICBzZW5kS2V5cyhtb2RpZmllcnM6IE1vZGlmaWVyS2V5cywgLi4ua2V5czogKHN0cmluZyB8IFRlc3RLZXkpW10pOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB0ZXh0IGZyb20gdGhlIGVsZW1lbnQuXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgdGhhdCBhZmZlY3Qgd2hhdCB0ZXh0IGlzIGluY2x1ZGVkLlxuICAgKi9cbiAgdGV4dChvcHRpb25zPzogVGV4dE9wdGlvbnMpOiBQcm9taXNlPHN0cmluZz47XG5cbiAgLyoqIEdldHMgdGhlIHZhbHVlIGZvciB0aGUgZ2l2ZW4gYXR0cmlidXRlIGZyb20gdGhlIGVsZW1lbnQuICovXG4gIGdldEF0dHJpYnV0ZShuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+O1xuXG4gIC8qKiBDaGVja3Mgd2hldGhlciB0aGUgZWxlbWVudCBoYXMgdGhlIGdpdmVuIGNsYXNzLiAqL1xuICBoYXNDbGFzcyhuYW1lOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+O1xuXG4gIC8qKiBHZXRzIHRoZSBkaW1lbnNpb25zIG9mIHRoZSBlbGVtZW50LiAqL1xuICBnZXREaW1lbnNpb25zKCk6IFByb21pc2U8RWxlbWVudERpbWVuc2lvbnM+O1xuXG4gIC8qKiBHZXRzIHRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5IG9mIGFuIGVsZW1lbnQuICovXG4gIGdldFByb3BlcnR5PFQgPSBhbnk+KG5hbWU6IHN0cmluZyk6IFByb21pc2U8VD47XG5cbiAgLyoqIENoZWNrcyB3aGV0aGVyIHRoaXMgZWxlbWVudCBtYXRjaGVzIHRoZSBnaXZlbiBzZWxlY3Rvci4gKi9cbiAgbWF0Y2hlc1NlbGVjdG9yKHNlbGVjdG9yOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+O1xuXG4gIC8qKiBDaGVja3Mgd2hldGhlciB0aGUgZWxlbWVudCBpcyBmb2N1c2VkLiAqL1xuICBpc0ZvY3VzZWQoKTogUHJvbWlzZTxib29sZWFuPjtcblxuICAvKiogU2V0cyB0aGUgdmFsdWUgb2YgYSBwcm9wZXJ0eSBvZiBhbiBpbnB1dC4gKi9cbiAgc2V0SW5wdXRWYWx1ZSh2YWx1ZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcblxuICAvLyBOb3RlIHRoYXQgaWRlYWxseSBoZXJlIHdlJ2QgYmUgc2VsZWN0aW5nIG9wdGlvbnMgYmFzZWQgb24gdGhlaXIgdmFsdWUsIHJhdGhlciB0aGFuIHRoZWlyXG4gIC8vIGluZGV4LCBidXQgd2UncmUgbGltaXRlZCBieSBgQGFuZ3VsYXIvZm9ybXNgIHdoaWNoIHdpbGwgbW9kaWZ5IHRoZSBvcHRpb24gdmFsdWUgaW4gc29tZSBjYXNlcy5cbiAgLy8gU2luY2UgdGhlIHZhbHVlIHdpbGwgYmUgdHJ1bmNhdGVkLCB3ZSBjYW4ndCByZWx5IG9uIGl0IHRvIGRvIHRoZSBsb29rdXAgaW4gdGhlIERPTS4gU2VlOlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2Jsb2IvbWFzdGVyL3BhY2thZ2VzL2Zvcm1zL3NyYy9kaXJlY3RpdmVzL3NlbGVjdF9jb250cm9sX3ZhbHVlX2FjY2Vzc29yLnRzI0wxOVxuICAvKiogU2VsZWN0cyB0aGUgb3B0aW9ucyBhdCB0aGUgc3BlY2lmaWVkIGluZGV4ZXMgaW5zaWRlIG9mIGEgbmF0aXZlIGBzZWxlY3RgIGVsZW1lbnQuICovXG4gIHNlbGVjdE9wdGlvbnMoLi4ub3B0aW9uSW5kZXhlczogbnVtYmVyW10pOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBEaXNwYXRjaGVzIGFuIGV2ZW50IHdpdGggYSBwYXJ0aWN1bGFyIG5hbWUuXG4gICAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIGV2ZW50IHRvIGJlIGRpc3BhdGNoZWQuXG4gICAqL1xuICBkaXNwYXRjaEV2ZW50KG5hbWU6IHN0cmluZywgZGF0YT86IFJlY29yZDxzdHJpbmcsIEV2ZW50RGF0YT4pOiBQcm9taXNlPHZvaWQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRleHRPcHRpb25zIHtcbiAgLyoqIE9wdGlvbmFsIHNlbGVjdG9yIGZvciBlbGVtZW50cyB0byBleGNsdWRlLiAqL1xuICBleGNsdWRlPzogc3RyaW5nO1xufVxuIl19
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright Google LLC All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
+
* found in the LICENSE file at https://angular.io/license
|
|
7
|
+
*/
|
|
8
|
+
import { createFakeEvent, createKeyboardEvent, createMouseEvent, createPointerEvent, createTouchEvent, } from './event-objects';
|
|
9
|
+
/**
|
|
10
|
+
* Utility to dispatch any event on a Node.
|
|
11
|
+
* @docs-private
|
|
12
|
+
*/
|
|
13
|
+
export function dispatchEvent(node, event) {
|
|
14
|
+
node.dispatchEvent(event);
|
|
15
|
+
return event;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Shorthand to dispatch a fake event on a specified node.
|
|
19
|
+
* @docs-private
|
|
20
|
+
*/
|
|
21
|
+
export function dispatchFakeEvent(node, type, bubbles) {
|
|
22
|
+
return dispatchEvent(node, createFakeEvent(type, bubbles));
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Shorthand to dispatch a keyboard event with a specified key code and
|
|
26
|
+
* optional modifiers.
|
|
27
|
+
* @docs-private
|
|
28
|
+
*/
|
|
29
|
+
export function dispatchKeyboardEvent(node, type, keyCode, key, modifiers) {
|
|
30
|
+
return dispatchEvent(node, createKeyboardEvent(type, keyCode, key, modifiers));
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Shorthand to dispatch a mouse event on the specified coordinates.
|
|
34
|
+
* @docs-private
|
|
35
|
+
*/
|
|
36
|
+
export function dispatchMouseEvent(node, type, clientX = 0, clientY = 0, button, modifiers) {
|
|
37
|
+
return dispatchEvent(node, createMouseEvent(type, clientX, clientY, button, modifiers));
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Shorthand to dispatch a pointer event on the specified coordinates.
|
|
41
|
+
* @docs-private
|
|
42
|
+
*/
|
|
43
|
+
export function dispatchPointerEvent(node, type, clientX = 0, clientY = 0, options) {
|
|
44
|
+
return dispatchEvent(node, createPointerEvent(type, clientX, clientY, options));
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Shorthand to dispatch a touch event on the specified coordinates.
|
|
48
|
+
* @docs-private
|
|
49
|
+
*/
|
|
50
|
+
export function dispatchTouchEvent(node, type, pageX = 0, pageY = 0, clientX = 0, clientY = 0) {
|
|
51
|
+
return dispatchEvent(node, createTouchEvent(type, pageX, pageY, clientX, clientY));
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzcGF0Y2gtZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2Nkay90ZXN0aW5nL3Rlc3RiZWQvZmFrZS1ldmVudHMvZGlzcGF0Y2gtZXZlbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUdILE9BQU8sRUFDTCxlQUFlLEVBQ2YsbUJBQW1CLEVBQ25CLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsZ0JBQWdCLEdBQ2pCLE1BQU0saUJBQWlCLENBQUM7QUFFekI7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBa0IsSUFBbUIsRUFBRSxLQUFRO0lBQzFFLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUIsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUFDLElBQW1CLEVBQUUsSUFBWSxFQUFFLE9BQWlCO0lBQ3BGLE9BQU8sYUFBYSxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDN0QsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQ25DLElBQVUsRUFDVixJQUFZLEVBQ1osT0FBZ0IsRUFDaEIsR0FBWSxFQUNaLFNBQXdCO0lBRXhCLE9BQU8sYUFBYSxDQUFDLElBQUksRUFBRSxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ2pGLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLElBQVUsRUFDVixJQUFZLEVBQ1osT0FBTyxHQUFHLENBQUMsRUFDWCxPQUFPLEdBQUcsQ0FBQyxFQUNYLE1BQWUsRUFDZixTQUF3QjtJQUV4QixPQUFPLGFBQWEsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDMUYsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FDbEMsSUFBVSxFQUNWLElBQVksRUFDWixPQUFPLEdBQUcsQ0FBQyxFQUNYLE9BQU8sR0FBRyxDQUFDLEVBQ1gsT0FBMEI7SUFFMUIsT0FBTyxhQUFhLENBQUMsSUFBSSxFQUFFLGtCQUFrQixDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFpQixDQUFDO0FBQ2xHLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLElBQVUsRUFDVixJQUFZLEVBQ1osS0FBSyxHQUFHLENBQUMsRUFDVCxLQUFLLEdBQUcsQ0FBQyxFQUNULE9BQU8sR0FBRyxDQUFDLEVBQ1gsT0FBTyxHQUFHLENBQUM7SUFFWCxPQUFPLGFBQWEsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDckYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge01vZGlmaWVyS2V5c30gZnJvbSAnQGFuZ3VsYXIvY2RrL3Rlc3RpbmcnO1xuaW1wb3J0IHtcbiAgY3JlYXRlRmFrZUV2ZW50LFxuICBjcmVhdGVLZXlib2FyZEV2ZW50LFxuICBjcmVhdGVNb3VzZUV2ZW50LFxuICBjcmVhdGVQb2ludGVyRXZlbnQsXG4gIGNyZWF0ZVRvdWNoRXZlbnQsXG59IGZyb20gJy4vZXZlbnQtb2JqZWN0cyc7XG5cbi8qKlxuICogVXRpbGl0eSB0byBkaXNwYXRjaCBhbnkgZXZlbnQgb24gYSBOb2RlLlxuICogQGRvY3MtcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlzcGF0Y2hFdmVudDxUIGV4dGVuZHMgRXZlbnQ+KG5vZGU6IE5vZGUgfCBXaW5kb3csIGV2ZW50OiBUKTogVCB7XG4gIG5vZGUuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gIHJldHVybiBldmVudDtcbn1cblxuLyoqXG4gKiBTaG9ydGhhbmQgdG8gZGlzcGF0Y2ggYSBmYWtlIGV2ZW50IG9uIGEgc3BlY2lmaWVkIG5vZGUuXG4gKiBAZG9jcy1wcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXNwYXRjaEZha2VFdmVudChub2RlOiBOb2RlIHwgV2luZG93LCB0eXBlOiBzdHJpbmcsIGJ1YmJsZXM/OiBib29sZWFuKTogRXZlbnQge1xuICByZXR1cm4gZGlzcGF0Y2hFdmVudChub2RlLCBjcmVhdGVGYWtlRXZlbnQodHlwZSwgYnViYmxlcykpO1xufVxuXG4vKipcbiAqIFNob3J0aGFuZCB0byBkaXNwYXRjaCBhIGtleWJvYXJkIGV2ZW50IHdpdGggYSBzcGVjaWZpZWQga2V5IGNvZGUgYW5kXG4gKiBvcHRpb25hbCBtb2RpZmllcnMuXG4gKiBAZG9jcy1wcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXNwYXRjaEtleWJvYXJkRXZlbnQoXG4gIG5vZGU6IE5vZGUsXG4gIHR5cGU6IHN0cmluZyxcbiAga2V5Q29kZT86IG51bWJlcixcbiAga2V5Pzogc3RyaW5nLFxuICBtb2RpZmllcnM/OiBNb2RpZmllcktleXMsXG4pOiBLZXlib2FyZEV2ZW50IHtcbiAgcmV0dXJuIGRpc3BhdGNoRXZlbnQobm9kZSwgY3JlYXRlS2V5Ym9hcmRFdmVudCh0eXBlLCBrZXlDb2RlLCBrZXksIG1vZGlmaWVycykpO1xufVxuXG4vKipcbiAqIFNob3J0aGFuZCB0byBkaXNwYXRjaCBhIG1vdXNlIGV2ZW50IG9uIHRoZSBzcGVjaWZpZWQgY29vcmRpbmF0ZXMuXG4gKiBAZG9jcy1wcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXNwYXRjaE1vdXNlRXZlbnQoXG4gIG5vZGU6IE5vZGUsXG4gIHR5cGU6IHN0cmluZyxcbiAgY2xpZW50WCA9IDAsXG4gIGNsaWVudFkgPSAwLFxuICBidXR0b24/OiBudW1iZXIsXG4gIG1vZGlmaWVycz86IE1vZGlmaWVyS2V5cyxcbik6IE1vdXNlRXZlbnQge1xuICByZXR1cm4gZGlzcGF0Y2hFdmVudChub2RlLCBjcmVhdGVNb3VzZUV2ZW50KHR5cGUsIGNsaWVudFgsIGNsaWVudFksIGJ1dHRvbiwgbW9kaWZpZXJzKSk7XG59XG5cbi8qKlxuICogU2hvcnRoYW5kIHRvIGRpc3BhdGNoIGEgcG9pbnRlciBldmVudCBvbiB0aGUgc3BlY2lmaWVkIGNvb3JkaW5hdGVzLlxuICogQGRvY3MtcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlzcGF0Y2hQb2ludGVyRXZlbnQoXG4gIG5vZGU6IE5vZGUsXG4gIHR5cGU6IHN0cmluZyxcbiAgY2xpZW50WCA9IDAsXG4gIGNsaWVudFkgPSAwLFxuICBvcHRpb25zPzogUG9pbnRlckV2ZW50SW5pdCxcbik6IFBvaW50ZXJFdmVudCB7XG4gIHJldHVybiBkaXNwYXRjaEV2ZW50KG5vZGUsIGNyZWF0ZVBvaW50ZXJFdmVudCh0eXBlLCBjbGllbnRYLCBjbGllbnRZLCBvcHRpb25zKSkgYXMgUG9pbnRlckV2ZW50O1xufVxuXG4vKipcbiAqIFNob3J0aGFuZCB0byBkaXNwYXRjaCBhIHRvdWNoIGV2ZW50IG9uIHRoZSBzcGVjaWZpZWQgY29vcmRpbmF0ZXMuXG4gKiBAZG9jcy1wcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXNwYXRjaFRvdWNoRXZlbnQoXG4gIG5vZGU6IE5vZGUsXG4gIHR5cGU6IHN0cmluZyxcbiAgcGFnZVggPSAwLFxuICBwYWdlWSA9IDAsXG4gIGNsaWVudFggPSAwLFxuICBjbGllbnRZID0gMCxcbikge1xuICByZXR1cm4gZGlzcGF0Y2hFdmVudChub2RlLCBjcmVhdGVUb3VjaEV2ZW50KHR5cGUsIHBhZ2VYLCBwYWdlWSwgY2xpZW50WCwgY2xpZW50WSkpO1xufVxuIl19
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright Google LLC All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
+
* found in the LICENSE file at https://angular.io/license
|
|
7
|
+
*/
|
|
8
|
+
import { dispatchFakeEvent } from './dispatch-events';
|
|
9
|
+
function triggerFocusChange(element, event) {
|
|
10
|
+
let eventFired = false;
|
|
11
|
+
const handler = () => (eventFired = true);
|
|
12
|
+
element.addEventListener(event, handler);
|
|
13
|
+
element[event]();
|
|
14
|
+
element.removeEventListener(event, handler);
|
|
15
|
+
if (!eventFired) {
|
|
16
|
+
dispatchFakeEvent(element, event);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Patches an elements focus and blur methods to emit events consistently and predictably.
|
|
21
|
+
* This is necessary, because some browsers can call the focus handlers asynchronously,
|
|
22
|
+
* while others won't fire them at all if the browser window is not focused.
|
|
23
|
+
* @docs-private
|
|
24
|
+
*/
|
|
25
|
+
// TODO: Check if this element focus patching is still needed for local testing,
|
|
26
|
+
// where browser is not necessarily focused.
|
|
27
|
+
export function patchElementFocus(element) {
|
|
28
|
+
element.focus = () => dispatchFakeEvent(element, 'focus');
|
|
29
|
+
element.blur = () => dispatchFakeEvent(element, 'blur');
|
|
30
|
+
}
|
|
31
|
+
/** @docs-private */
|
|
32
|
+
export function triggerFocus(element) {
|
|
33
|
+
triggerFocusChange(element, 'focus');
|
|
34
|
+
}
|
|
35
|
+
/** @docs-private */
|
|
36
|
+
export function triggerBlur(element) {
|
|
37
|
+
triggerFocusChange(element, 'blur');
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudC1mb2N1cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jZGsvdGVzdGluZy90ZXN0YmVkL2Zha2UtZXZlbnRzL2VsZW1lbnQtZm9jdXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFcEQsU0FBUyxrQkFBa0IsQ0FBQyxPQUFvQixFQUFFLEtBQXVCO0lBQ3ZFLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQztJQUN2QixNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUMxQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3pDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0lBQ2pCLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDNUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtRQUNmLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztLQUNuQztBQUNILENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILGdGQUFnRjtBQUNoRiw0Q0FBNEM7QUFDNUMsTUFBTSxVQUFVLGlCQUFpQixDQUFDLE9BQW9CO0lBQ3BELE9BQU8sQ0FBQyxLQUFLLEdBQUcsR0FBRyxFQUFFLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzFELE9BQU8sQ0FBQyxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzFELENBQUM7QUFFRCxvQkFBb0I7QUFDcEIsTUFBTSxVQUFVLFlBQVksQ0FBQyxPQUFvQjtJQUMvQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDdkMsQ0FBQztBQUVELG9CQUFvQjtBQUNwQixNQUFNLFVBQVUsV0FBVyxDQUFDLE9BQW9CO0lBQzlDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN0QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7ZGlzcGF0Y2hGYWtlRXZlbnR9IGZyb20gJy4vZGlzcGF0Y2gtZXZlbnRzJztcblxuZnVuY3Rpb24gdHJpZ2dlckZvY3VzQ2hhbmdlKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBldmVudDogJ2ZvY3VzJyB8ICdibHVyJykge1xuICBsZXQgZXZlbnRGaXJlZCA9IGZhbHNlO1xuICBjb25zdCBoYW5kbGVyID0gKCkgPT4gKGV2ZW50RmlyZWQgPSB0cnVlKTtcbiAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBoYW5kbGVyKTtcbiAgZWxlbWVudFtldmVudF0oKTtcbiAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBoYW5kbGVyKTtcbiAgaWYgKCFldmVudEZpcmVkKSB7XG4gICAgZGlzcGF0Y2hGYWtlRXZlbnQoZWxlbWVudCwgZXZlbnQpO1xuICB9XG59XG5cbi8qKlxuICogUGF0Y2hlcyBhbiBlbGVtZW50cyBmb2N1cyBhbmQgYmx1ciBtZXRob2RzIHRvIGVtaXQgZXZlbnRzIGNvbnNpc3RlbnRseSBhbmQgcHJlZGljdGFibHkuXG4gKiBUaGlzIGlzIG5lY2Vzc2FyeSwgYmVjYXVzZSBzb21lIGJyb3dzZXJzIGNhbiBjYWxsIHRoZSBmb2N1cyBoYW5kbGVycyBhc3luY2hyb25vdXNseSxcbiAqIHdoaWxlIG90aGVycyB3b24ndCBmaXJlIHRoZW0gYXQgYWxsIGlmIHRoZSBicm93c2VyIHdpbmRvdyBpcyBub3QgZm9jdXNlZC5cbiAqIEBkb2NzLXByaXZhdGVcbiAqL1xuLy8gVE9ETzogQ2hlY2sgaWYgdGhpcyBlbGVtZW50IGZvY3VzIHBhdGNoaW5nIGlzIHN0aWxsIG5lZWRlZCBmb3IgbG9jYWwgdGVzdGluZyxcbi8vIHdoZXJlIGJyb3dzZXIgaXMgbm90IG5lY2Vzc2FyaWx5IGZvY3VzZWQuXG5leHBvcnQgZnVuY3Rpb24gcGF0Y2hFbGVtZW50Rm9jdXMoZWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgZWxlbWVudC5mb2N1cyA9ICgpID0+IGRpc3BhdGNoRmFrZUV2ZW50KGVsZW1lbnQsICdmb2N1cycpO1xuICBlbGVtZW50LmJsdXIgPSAoKSA9PiBkaXNwYXRjaEZha2VFdmVudChlbGVtZW50LCAnYmx1cicpO1xufVxuXG4vKiogQGRvY3MtcHJpdmF0ZSAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyaWdnZXJGb2N1cyhlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICB0cmlnZ2VyRm9jdXNDaGFuZ2UoZWxlbWVudCwgJ2ZvY3VzJyk7XG59XG5cbi8qKiBAZG9jcy1wcml2YXRlICovXG5leHBvcnQgZnVuY3Rpb24gdHJpZ2dlckJsdXIoZWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgdHJpZ2dlckZvY3VzQ2hhbmdlKGVsZW1lbnQsICdibHVyJyk7XG59XG4iXX0=
|