@angular/cdk 11.2.8 → 11.2.12

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.
@@ -5,8 +5,11 @@
5
5
  * Use of this source code is governed by an MIT-style license that can be
6
6
  * found in the LICENSE file at https://angular.io/license
7
7
  */
8
+ import { PERIOD } from '@angular/cdk/keycodes';
8
9
  import { dispatchFakeEvent, dispatchKeyboardEvent } from './dispatch-events';
9
10
  import { triggerFocus } from './element-focus';
11
+ /** Input types for which the value can be entered incrementally. */
12
+ const incrementalInputTypes = new Set(['text', 'email', 'hidden', 'password', 'search', 'tel', 'url']);
10
13
  /**
11
14
  * Checks whether the given Element is a text input element.
12
15
  * @docs-private
@@ -27,20 +30,42 @@ export function typeInElement(element, ...modifiersAndKeys) {
27
30
  modifiers = {};
28
31
  rest = modifiersAndKeys;
29
32
  }
33
+ const isInput = isTextInput(element);
34
+ const inputType = element.getAttribute('type') || 'text';
30
35
  const keys = rest
31
36
  .map(k => typeof k === 'string' ?
32
37
  k.split('').map(c => ({ keyCode: c.toUpperCase().charCodeAt(0), key: c })) : [k])
33
38
  .reduce((arr, k) => arr.concat(k), []);
39
+ // We simulate the user typing in a value by incrementally assigning the value below. The problem
40
+ // is that for some input types, the browser won't allow for an invalid value to be set via the
41
+ // `value` property which will always be the case when going character-by-character. If we detect
42
+ // such an input, we have to set the value all at once or listeners to the `input` event (e.g.
43
+ // the `ReactiveFormsModule` uses such an approach) won't receive the correct value.
44
+ const enterValueIncrementally = inputType === 'number' && keys.length > 0 ?
45
+ // The value can be set character by character in number inputs if it doesn't have any decimals.
46
+ keys.every(key => key.key !== '.' && key.keyCode !== PERIOD) :
47
+ incrementalInputTypes.has(inputType);
34
48
  triggerFocus(element);
49
+ // When we aren't entering the value incrementally, assign it all at once ahead
50
+ // of time so that any listeners to the key events below will have access to it.
51
+ if (!enterValueIncrementally) {
52
+ element.value = keys.reduce((value, key) => value + (key.key || ''), '');
53
+ }
35
54
  for (const key of keys) {
36
55
  dispatchKeyboardEvent(element, 'keydown', key.keyCode, key.key, modifiers);
37
56
  dispatchKeyboardEvent(element, 'keypress', key.keyCode, key.key, modifiers);
38
- if (isTextInput(element) && key.key && key.key.length === 1) {
39
- element.value += key.key;
40
- dispatchFakeEvent(element, 'input');
57
+ if (isInput && key.key && key.key.length === 1) {
58
+ if (enterValueIncrementally) {
59
+ element.value += key.key;
60
+ dispatchFakeEvent(element, 'input');
61
+ }
41
62
  }
42
63
  dispatchKeyboardEvent(element, 'keyup', key.keyCode, key.key, modifiers);
43
64
  }
65
+ // Since we weren't dispatching `input` events while sending the keys, we have to do it now.
66
+ if (!enterValueIncrementally) {
67
+ dispatchFakeEvent(element, 'input');
68
+ }
44
69
  }
45
70
  /**
46
71
  * Clears the text in an input or textarea element.
@@ -51,4 +76,4 @@ export function clearElement(element) {
51
76
  element.value = '';
52
77
  dispatchFakeEvent(element, 'input');
53
78
  }
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZS1pbi1lbGVtZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2Nkay90ZXN0aW5nL3Rlc3RiZWQvZmFrZS1ldmVudHMvdHlwZS1pbi1lbGVtZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUdILE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxxQkFBcUIsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQzNFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUU3Qzs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFDLE9BQWdCO0lBQzFDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDaEQsT0FBTyxRQUFRLEtBQUssT0FBTyxJQUFJLFFBQVEsS0FBSyxVQUFVLENBQUU7QUFDMUQsQ0FBQztBQXVCRCxNQUFNLFVBQVUsYUFBYSxDQUFDLE9BQW9CLEVBQUUsR0FBRyxnQkFBcUI7SUFDMUUsTUFBTSxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEMsSUFBSSxTQUF1QixDQUFDO0lBQzVCLElBQUksSUFBbUQsQ0FBQztJQUN4RCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLFNBQVMsRUFBRTtRQUN2RixTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDbEM7U0FBTTtRQUNMLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDZixJQUFJLEdBQUcsZ0JBQWdCLENBQUM7S0FDekI7SUFDRCxNQUFNLElBQUksR0FBdUMsSUFBSTtTQUNoRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQztRQUM3QixDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2xGLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFM0MsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RCLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFO1FBQ3RCLHFCQUFxQixDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzNFLHFCQUFxQixDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzVFLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzNELE9BQU8sQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQztZQUN6QixpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDckM7UUFDRCxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztLQUMxRTtBQUNILENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLE9BQStDO0lBQzFFLFlBQVksQ0FBQyxPQUFzQixDQUFDLENBQUM7SUFDckMsT0FBTyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDbkIsaUJBQWlCLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3RDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtNb2RpZmllcktleXN9IGZyb20gJ0Bhbmd1bGFyL2Nkay90ZXN0aW5nJztcbmltcG9ydCB7ZGlzcGF0Y2hGYWtlRXZlbnQsIGRpc3BhdGNoS2V5Ym9hcmRFdmVudH0gZnJvbSAnLi9kaXNwYXRjaC1ldmVudHMnO1xuaW1wb3J0IHt0cmlnZ2VyRm9jdXN9IGZyb20gJy4vZWxlbWVudC1mb2N1cyc7XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIEVsZW1lbnQgaXMgYSB0ZXh0IGlucHV0IGVsZW1lbnQuXG4gKiBAZG9jcy1wcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1RleHRJbnB1dChlbGVtZW50OiBFbGVtZW50KTogZWxlbWVudCBpcyBIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudCB7XG4gIGNvbnN0IG5vZGVOYW1lID0gZWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gbm9kZU5hbWUgPT09ICdpbnB1dCcgfHwgbm9kZU5hbWUgPT09ICd0ZXh0YXJlYScgO1xufVxuXG4vKipcbiAqIEZvY3VzZXMgYW4gaW5wdXQsIHNldHMgaXRzIHZhbHVlIGFuZCBkaXNwYXRjaGVzXG4gKiB0aGUgYGlucHV0YCBldmVudCwgc2ltdWxhdGluZyB0aGUgdXNlciB0eXBpbmcuXG4gKiBAcGFyYW0gZWxlbWVudCBFbGVtZW50IG9udG8gd2hpY2ggdG8gc2V0IHRoZSB2YWx1ZS5cbiAqIEBwYXJhbSBrZXlzIFRoZSBrZXlzIHRvIHNlbmQgdG8gdGhlIGVsZW1lbnQuXG4gKiBAZG9jcy1wcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0eXBlSW5FbGVtZW50KFxuICAgIGVsZW1lbnQ6IEhUTUxFbGVtZW50LCAuLi5rZXlzOiAoc3RyaW5nIHwge2tleUNvZGU/OiBudW1iZXIsIGtleT86IHN0cmluZ30pW10pOiB2b2lkO1xuXG4vKipcbiAqIEZvY3VzZXMgYW4gaW5wdXQsIHNldHMgaXRzIHZhbHVlIGFuZCBkaXNwYXRjaGVzXG4gKiB0aGUgYGlucHV0YCBldmVudCwgc2ltdWxhdGluZyB0aGUgdXNlciB0eXBpbmcuXG4gKiBAcGFyYW0gZWxlbWVudCBFbGVtZW50IG9udG8gd2hpY2ggdG8gc2V0IHRoZSB2YWx1ZS5cbiAqIEBwYXJhbSBtb2RpZmllcnMgTW9kaWZpZXIga2V5cyB0aGF0IGFyZSBoZWxkIHdoaWxlIHR5cGluZy5cbiAqIEBwYXJhbSBrZXlzIFRoZSBrZXlzIHRvIHNlbmQgdG8gdGhlIGVsZW1lbnQuXG4gKiBAZG9jcy1wcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0eXBlSW5FbGVtZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBtb2RpZmllcnM6IE1vZGlmaWVyS2V5cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmtleXM6IChzdHJpbmcgfCB7a2V5Q29kZT86IG51bWJlciwga2V5Pzogc3RyaW5nfSlbXSk6IHZvaWQ7XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlSW5FbGVtZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50LCAuLi5tb2RpZmllcnNBbmRLZXlzOiBhbnkpIHtcbiAgY29uc3QgZmlyc3QgPSBtb2RpZmllcnNBbmRLZXlzWzBdO1xuICBsZXQgbW9kaWZpZXJzOiBNb2RpZmllcktleXM7XG4gIGxldCByZXN0OiAoc3RyaW5nIHwge2tleUNvZGU/OiBudW1iZXIsIGtleT86IHN0cmluZ30pW107XG4gIGlmICh0eXBlb2YgZmlyc3QgIT09ICdzdHJpbmcnICYmIGZpcnN0LmtleUNvZGUgPT09IHVuZGVmaW5lZCAmJiBmaXJzdC5rZXkgPT09IHVuZGVmaW5lZCkge1xuICAgIG1vZGlmaWVycyA9IGZpcnN0O1xuICAgIHJlc3QgPSBtb2RpZmllcnNBbmRLZXlzLnNsaWNlKDEpO1xuICB9IGVsc2Uge1xuICAgIG1vZGlmaWVycyA9IHt9O1xuICAgIHJlc3QgPSBtb2RpZmllcnNBbmRLZXlzO1xuICB9XG4gIGNvbnN0IGtleXM6IHtrZXlDb2RlPzogbnVtYmVyLCBrZXk/OiBzdHJpbmd9W10gPSByZXN0XG4gICAgICAubWFwKGsgPT4gdHlwZW9mIGsgPT09ICdzdHJpbmcnID9cbiAgICAgICAgICBrLnNwbGl0KCcnKS5tYXAoYyA9PiAoe2tleUNvZGU6IGMudG9VcHBlckNhc2UoKS5jaGFyQ29kZUF0KDApLCBrZXk6IGN9KSkgOiBba10pXG4gICAgICAucmVkdWNlKChhcnIsIGspID0+IGFyci5jb25jYXQoayksIFtdKTtcblxuICB0cmlnZ2VyRm9jdXMoZWxlbWVudCk7XG4gIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICBkaXNwYXRjaEtleWJvYXJkRXZlbnQoZWxlbWVudCwgJ2tleWRvd24nLCBrZXkua2V5Q29kZSwga2V5LmtleSwgbW9kaWZpZXJzKTtcbiAgICBkaXNwYXRjaEtleWJvYXJkRXZlbnQoZWxlbWVudCwgJ2tleXByZXNzJywga2V5LmtleUNvZGUsIGtleS5rZXksIG1vZGlmaWVycyk7XG4gICAgaWYgKGlzVGV4dElucHV0KGVsZW1lbnQpICYmIGtleS5rZXkgJiYga2V5LmtleS5sZW5ndGggPT09IDEpIHtcbiAgICAgIGVsZW1lbnQudmFsdWUgKz0ga2V5LmtleTtcbiAgICAgIGRpc3BhdGNoRmFrZUV2ZW50KGVsZW1lbnQsICdpbnB1dCcpO1xuICAgIH1cbiAgICBkaXNwYXRjaEtleWJvYXJkRXZlbnQoZWxlbWVudCwgJ2tleXVwJywga2V5LmtleUNvZGUsIGtleS5rZXksIG1vZGlmaWVycyk7XG4gIH1cbn1cblxuLyoqXG4gKiBDbGVhcnMgdGhlIHRleHQgaW4gYW4gaW5wdXQgb3IgdGV4dGFyZWEgZWxlbWVudC5cbiAqIEBkb2NzLXByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyRWxlbWVudChlbGVtZW50OiBIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudCkge1xuICB0cmlnZ2VyRm9jdXMoZWxlbWVudCBhcyBIVE1MRWxlbWVudCk7XG4gIGVsZW1lbnQudmFsdWUgPSAnJztcbiAgZGlzcGF0Y2hGYWtlRXZlbnQoZWxlbWVudCwgJ2lucHV0Jyk7XG59XG4iXX0=
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZS1pbi1lbGVtZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2Nkay90ZXN0aW5nL3Rlc3RiZWQvZmFrZS1ldmVudHMvdHlwZS1pbi1lbGVtZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUdILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUM3QyxPQUFPLEVBQUMsaUJBQWlCLEVBQUUscUJBQXFCLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUMzRSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFN0Msb0VBQW9FO0FBQ3BFLE1BQU0scUJBQXFCLEdBQ3pCLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUUzRTs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFDLE9BQWdCO0lBQzFDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDaEQsT0FBTyxRQUFRLEtBQUssT0FBTyxJQUFJLFFBQVEsS0FBSyxVQUFVLENBQUM7QUFDekQsQ0FBQztBQXVCRCxNQUFNLFVBQVUsYUFBYSxDQUFDLE9BQW9CLEVBQUUsR0FBRyxnQkFBcUI7SUFDMUUsTUFBTSxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEMsSUFBSSxTQUF1QixDQUFDO0lBQzVCLElBQUksSUFBbUQsQ0FBQztJQUN4RCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLFNBQVMsRUFBRTtRQUN2RixTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLElB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QUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLE9BQStDO0lBQzFFLFlBQVksQ0FBQyxPQUFzQixDQUFDLENBQUM7SUFDckMsT0FBTyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDbkIsaUJBQWlCLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3RDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtNb2RpZmllcktleXN9IGZyb20gJ0Bhbmd1bGFyL2Nkay90ZXN0aW5nJztcbmltcG9ydCB7UEVSSU9EfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHtkaXNwYXRjaEZha2VFdmVudCwgZGlzcGF0Y2hLZXlib2FyZEV2ZW50fSBmcm9tICcuL2Rpc3BhdGNoLWV2ZW50cyc7XG5pbXBvcnQge3RyaWdnZXJGb2N1c30gZnJvbSAnLi9lbGVtZW50LWZvY3VzJztcblxuLyoqIElucHV0IHR5cGVzIGZvciB3aGljaCB0aGUgdmFsdWUgY2FuIGJlIGVudGVyZWQgaW5jcmVtZW50YWxseS4gKi9cbmNvbnN0IGluY3JlbWVudGFsSW5wdXRUeXBlcyA9XG4gIG5ldyBTZXQoWyd0ZXh0JywgJ2VtYWlsJywgJ2hpZGRlbicsICdwYXNzd29yZCcsICdzZWFyY2gnLCAndGVsJywgJ3VybCddKTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gRWxlbWVudCBpcyBhIHRleHQgaW5wdXQgZWxlbWVudC5cbiAqIEBkb2NzLXByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVGV4dElucHV0KGVsZW1lbnQ6IEVsZW1lbnQpOiBlbGVtZW50IGlzIEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50IHtcbiAgY29uc3Qgbm9kZU5hbWUgPSBlbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBub2RlTmFtZSA9PT0gJ2lucHV0JyB8fCBub2RlTmFtZSA9PT0gJ3RleHRhcmVhJztcbn1cblxuLyoqXG4gKiBGb2N1c2VzIGFuIGlucHV0LCBzZXRzIGl0cyB2YWx1ZSBhbmQgZGlzcGF0Y2hlc1xuICogdGhlIGBpbnB1dGAgZXZlbnQsIHNpbXVsYXRpbmcgdGhlIHVzZXIgdHlwaW5nLlxuICogQHBhcmFtIGVsZW1lbnQgRWxlbWVudCBvbnRvIHdoaWNoIHRvIHNldCB0aGUgdmFsdWUuXG4gKiBAcGFyYW0ga2V5cyBUaGUga2V5cyB0byBzZW5kIHRvIHRoZSBlbGVtZW50LlxuICogQGRvY3MtcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdHlwZUluRWxlbWVudChcbiAgICBlbGVtZW50OiBIVE1MRWxlbWVudCwgLi4ua2V5czogKHN0cmluZyB8IHtrZXlDb2RlPzogbnVtYmVyLCBrZXk/OiBzdHJpbmd9KVtdKTogdm9pZDtcblxuLyoqXG4gKiBGb2N1c2VzIGFuIGlucHV0LCBzZXRzIGl0cyB2YWx1ZSBhbmQgZGlzcGF0Y2hlc1xuICogdGhlIGBpbnB1dGAgZXZlbnQsIHNpbXVsYXRpbmcgdGhlIHVzZXIgdHlwaW5nLlxuICogQHBhcmFtIGVsZW1lbnQgRWxlbWVudCBvbnRvIHdoaWNoIHRvIHNldCB0aGUgdmFsdWUuXG4gKiBAcGFyYW0gbW9kaWZpZXJzIE1vZGlmaWVyIGtleXMgdGhhdCBhcmUgaGVsZCB3aGlsZSB0eXBpbmcuXG4gKiBAcGFyYW0ga2V5cyBUaGUga2V5cyB0byBzZW5kIHRvIHRoZSBlbGVtZW50LlxuICogQGRvY3MtcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdHlwZUluRWxlbWVudChlbGVtZW50OiBIVE1MRWxlbWVudCwgbW9kaWZpZXJzOiBNb2RpZmllcktleXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5rZXlzOiAoc3RyaW5nIHwge2tleUNvZGU/OiBudW1iZXIsIGtleT86IHN0cmluZ30pW10pOiB2b2lkO1xuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUluRWxlbWVudChlbGVtZW50OiBIVE1MRWxlbWVudCwgLi4ubW9kaWZpZXJzQW5kS2V5czogYW55KSB7XG4gIGNvbnN0IGZpcnN0ID0gbW9kaWZpZXJzQW5kS2V5c1swXTtcbiAgbGV0IG1vZGlmaWVyczogTW9kaWZpZXJLZXlzO1xuICBsZXQgcmVzdDogKHN0cmluZyB8IHtrZXlDb2RlPzogbnVtYmVyLCBrZXk/OiBzdHJpbmd9KVtdO1xuICBpZiAodHlwZW9mIGZpcnN0ICE9PSAnc3RyaW5nJyAmJiBmaXJzdC5rZXlDb2RlID09PSB1bmRlZmluZWQgJiYgZmlyc3Qua2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICBtb2RpZmllcnMgPSBmaXJzdDtcbiAgICByZXN0ID0gbW9kaWZpZXJzQW5kS2V5cy5zbGljZSgxKTtcbiAgfSBlbHNlIHtcbiAgICBtb2RpZmllcnMgPSB7fTtcbiAgICByZXN0ID0gbW9kaWZpZXJzQW5kS2V5cztcbiAgfVxuICBjb25zdCBpc0lucHV0ID0gaXNUZXh0SW5wdXQoZWxlbWVudCk7XG4gIGNvbnN0IGlucHV0VHlwZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCd0eXBlJykgfHwgJ3RleHQnO1xuICBjb25zdCBrZXlzOiB7a2V5Q29kZT86IG51bWJlciwga2V5Pzogc3RyaW5nfVtdID0gcmVzdFxuICAgICAgLm1hcChrID0+IHR5cGVvZiBrID09PSAnc3RyaW5nJyA/XG4gICAgICAgICAgay5zcGxpdCgnJykubWFwKGMgPT4gKHtrZXlDb2RlOiBjLnRvVXBwZXJDYXNlKCkuY2hhckNvZGVBdCgwKSwga2V5OiBjfSkpIDogW2tdKVxuICAgICAgLnJlZHVjZSgoYXJyLCBrKSA9PiBhcnIuY29uY2F0KGspLCBbXSk7XG5cbiAgLy8gV2Ugc2ltdWxhdGUgdGhlIHVzZXIgdHlwaW5nIGluIGEgdmFsdWUgYnkgaW5jcmVtZW50YWxseSBhc3NpZ25pbmcgdGhlIHZhbHVlIGJlbG93LiBUaGUgcHJvYmxlbVxuICAvLyBpcyB0aGF0IGZvciBzb21lIGlucHV0IHR5cGVzLCB0aGUgYnJvd3NlciB3b24ndCBhbGxvdyBmb3IgYW4gaW52YWxpZCB2YWx1ZSB0byBiZSBzZXQgdmlhIHRoZVxuICAvLyBgdmFsdWVgIHByb3BlcnR5IHdoaWNoIHdpbGwgYWx3YXlzIGJlIHRoZSBjYXNlIHdoZW4gZ29pbmcgY2hhcmFjdGVyLWJ5LWNoYXJhY3Rlci4gSWYgd2UgZGV0ZWN0XG4gIC8vIHN1Y2ggYW4gaW5wdXQsIHdlIGhhdmUgdG8gc2V0IHRoZSB2YWx1ZSBhbGwgYXQgb25jZSBvciBsaXN0ZW5lcnMgdG8gdGhlIGBpbnB1dGAgZXZlbnQgKGUuZy5cbiAgLy8gdGhlIGBSZWFjdGl2ZUZvcm1zTW9kdWxlYCB1c2VzIHN1Y2ggYW4gYXBwcm9hY2gpIHdvbid0IHJlY2VpdmUgdGhlIGNvcnJlY3QgdmFsdWUuXG4gIGNvbnN0IGVudGVyVmFsdWVJbmNyZW1lbnRhbGx5ID0gaW5wdXRUeXBlID09PSAnbnVtYmVyJyAmJiBrZXlzLmxlbmd0aCA+IDAgP1xuICAgIC8vIFRoZSB2YWx1ZSBjYW4gYmUgc2V0IGNoYXJhY3RlciBieSBjaGFyYWN0ZXIgaW4gbnVtYmVyIGlucHV0cyBpZiBpdCBkb2Vzbid0IGhhdmUgYW55IGRlY2ltYWxzLlxuICAgIGtleXMuZXZlcnkoa2V5ID0+IGtleS5rZXkgIT09ICcuJyAmJiBrZXkua2V5Q29kZSAhPT0gUEVSSU9EKSA6XG4gICAgaW5jcmVtZW50YWxJbnB1dFR5cGVzLmhhcyhpbnB1dFR5cGUpO1xuXG4gIHRyaWdnZXJGb2N1cyhlbGVtZW50KTtcblxuICAvLyBXaGVuIHdlIGFyZW4ndCBlbnRlcmluZyB0aGUgdmFsdWUgaW5jcmVtZW50YWxseSwgYXNzaWduIGl0IGFsbCBhdCBvbmNlIGFoZWFkXG4gIC8vIG9mIHRpbWUgc28gdGhhdCBhbnkgbGlzdGVuZXJzIHRvIHRoZSBrZXkgZXZlbnRzIGJlbG93IHdpbGwgaGF2ZSBhY2Nlc3MgdG8gaXQuXG4gIGlmICghZW50ZXJWYWx1ZUluY3JlbWVudGFsbHkpIHtcbiAgICAoZWxlbWVudCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSA9IGtleXMucmVkdWNlKCh2YWx1ZSwga2V5KSA9PiB2YWx1ZSArIChrZXkua2V5IHx8ICcnKSwgJycpO1xuICB9XG5cbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgIGRpc3BhdGNoS2V5Ym9hcmRFdmVudChlbGVtZW50LCAna2V5ZG93bicsIGtleS5rZXlDb2RlLCBrZXkua2V5LCBtb2RpZmllcnMpO1xuICAgIGRpc3BhdGNoS2V5Ym9hcmRFdmVudChlbGVtZW50LCAna2V5cHJlc3MnLCBrZXkua2V5Q29kZSwga2V5LmtleSwgbW9kaWZpZXJzKTtcbiAgICBpZiAoaXNJbnB1dCAmJiBrZXkua2V5ICYmIGtleS5rZXkubGVuZ3RoID09PSAxKSB7XG4gICAgICBpZiAoZW50ZXJWYWx1ZUluY3JlbWVudGFsbHkpIHtcbiAgICAgICAgKGVsZW1lbnQgYXMgSFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQpLnZhbHVlICs9IGtleS5rZXk7XG4gICAgICAgIGRpc3BhdGNoRmFrZUV2ZW50KGVsZW1lbnQsICdpbnB1dCcpO1xuICAgICAgfVxuICAgIH1cbiAgICBkaXNwYXRjaEtleWJvYXJkRXZlbnQoZWxlbWVudCwgJ2tleXVwJywga2V5LmtleUNvZGUsIGtleS5rZXksIG1vZGlmaWVycyk7XG4gIH1cblxuICAvLyBTaW5jZSB3ZSB3ZXJlbid0IGRpc3BhdGNoaW5nIGBpbnB1dGAgZXZlbnRzIHdoaWxlIHNlbmRpbmcgdGhlIGtleXMsIHdlIGhhdmUgdG8gZG8gaXQgbm93LlxuICBpZiAoIWVudGVyVmFsdWVJbmNyZW1lbnRhbGx5KSB7XG4gICAgZGlzcGF0Y2hGYWtlRXZlbnQoZWxlbWVudCwgJ2lucHV0Jyk7XG4gIH1cbn1cblxuLyoqXG4gKiBDbGVhcnMgdGhlIHRleHQgaW4gYW4gaW5wdXQgb3IgdGV4dGFyZWEgZWxlbWVudC5cbiAqIEBkb2NzLXByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyRWxlbWVudChlbGVtZW50OiBIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudCkge1xuICB0cmlnZ2VyRm9jdXMoZWxlbWVudCBhcyBIVE1MRWxlbWVudCk7XG4gIGVsZW1lbnQudmFsdWUgPSAnJztcbiAgZGlzcGF0Y2hGYWtlRXZlbnQoZWxlbWVudCwgJ2lucHV0Jyk7XG59XG4iXX0=
@@ -7,5 +7,5 @@
7
7
  */
8
8
  import { Version } from '@angular/core';
9
9
  /** Current version of the Angular Component Development Kit. */
10
- export const VERSION = new Version('11.2.8');
10
+ export const VERSION = new Version('11.2.12');
11
11
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jZGsvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXRDLGdFQUFnRTtBQUNoRSxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge1ZlcnNpb259IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKiogQ3VycmVudCB2ZXJzaW9uIG9mIHRoZSBBbmd1bGFyIENvbXBvbmVudCBEZXZlbG9wbWVudCBLaXQuICovXG5leHBvcnQgY29uc3QgVkVSU0lPTiA9IG5ldyBWZXJzaW9uKCcwLjAuMC1QTEFDRUhPTERFUicpO1xuIl19
package/fesm2015/cdk.js CHANGED
@@ -8,7 +8,7 @@ import { Version } from '@angular/core';
8
8
  * found in the LICENSE file at https://angular.io/license
9
9
  */
10
10
  /** Current version of the Angular Component Development Kit. */
11
- const VERSION = new Version('11.2.8');
11
+ const VERSION = new Version('11.2.12');
12
12
 
13
13
  /**
14
14
  * @license
@@ -1 +1 @@
1
- {"version":3,"file":"cdk.js","sources":["../../../../../../src/cdk/version.ts","../../../../../../src/cdk/public-api.ts","../../../../../../src/cdk/index.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Version} from '@angular/core';\n\n/** Current version of the Angular Component Development Kit. */\nexport const VERSION = new Version('11.2.8');\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './version';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;AAAA;;;;;;;AAQA,AAEA;AACA,MAAa,OAAO,GAAG,IAAI,OAAO,CAAC,mBAAmB,CAAC;;ACXvD;;;;;;GAMG;;ACNH;;;;;;GAMG;;;;"}
1
+ {"version":3,"file":"cdk.js","sources":["../../../../../../src/cdk/version.ts","../../../../../../src/cdk/public-api.ts","../../../../../../src/cdk/index.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Version} from '@angular/core';\n\n/** Current version of the Angular Component Development Kit. */\nexport const VERSION = new Version('11.2.12');\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './version';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;AAAA;;;;;;;AAQA,AAEA;AACA,MAAa,OAAO,GAAG,IAAI,OAAO,CAAC,mBAAmB,CAAC;;ACXvD;;;;;;GAMG;;ACNH;;;;;;GAMG;;;;"}
@@ -115,6 +115,7 @@ const SEMICOLON = 186; // Firefox (Gecko) fires 59 for SEMICOLON
115
115
  const EQUALS = 187; // Firefox (Gecko) fires 61 for EQUALS
116
116
  const COMMA = 188;
117
117
  const DASH = 189; // Firefox (Gecko) fires 173 for DASH/MINUS
118
+ const PERIOD = 190;
118
119
  const SLASH = 191;
119
120
  const APOSTROPHE = 192;
120
121
  const TILDE = 192;
@@ -154,5 +155,5 @@ function hasModifierKey(event, ...modifiers) {
154
155
  * Generated bundle index. Do not edit.
155
156
  */
156
157
 
157
- export { A, ALT, APOSTROPHE, AT_SIGN, B, BACKSLASH, BACKSPACE, C, CAPS_LOCK, CLOSE_SQUARE_BRACKET, COMMA, CONTEXT_MENU, CONTROL, D, DASH, DELETE, DOWN_ARROW, E, EIGHT, END, ENTER, EQUALS, ESCAPE, F, F1, F10, F11, F12, F2, F3, F4, F5, F6, F7, F8, F9, FF_EQUALS, FF_MINUS, FF_MUTE, FF_SEMICOLON, FF_VOLUME_DOWN, FF_VOLUME_UP, FIRST_MEDIA, FIVE, FOUR, G, H, HOME, I, INSERT, J, K, L, LAST_MEDIA, LEFT_ARROW, M, MAC_ENTER, MAC_META, MAC_WK_CMD_LEFT, MAC_WK_CMD_RIGHT, META, MUTE, N, NINE, NUMPAD_DIVIDE, NUMPAD_EIGHT, NUMPAD_FIVE, NUMPAD_FOUR, NUMPAD_MINUS, NUMPAD_MULTIPLY, NUMPAD_NINE, NUMPAD_ONE, NUMPAD_PERIOD, NUMPAD_PLUS, NUMPAD_SEVEN, NUMPAD_SIX, NUMPAD_THREE, NUMPAD_TWO, NUMPAD_ZERO, NUM_CENTER, NUM_LOCK, O, ONE, OPEN_SQUARE_BRACKET, P, PAGE_DOWN, PAGE_UP, PAUSE, PLUS_SIGN, PRINT_SCREEN, Q, QUESTION_MARK, R, RIGHT_ARROW, S, SCROLL_LOCK, SEMICOLON, SEVEN, SHIFT, SINGLE_QUOTE, SIX, SLASH, SPACE, T, TAB, THREE, TILDE, TWO, U, UP_ARROW, V, VOLUME_DOWN, VOLUME_UP, W, X, Y, Z, ZERO, hasModifierKey };
158
+ export { A, ALT, APOSTROPHE, AT_SIGN, B, BACKSLASH, BACKSPACE, C, CAPS_LOCK, CLOSE_SQUARE_BRACKET, COMMA, CONTEXT_MENU, CONTROL, D, DASH, DELETE, DOWN_ARROW, E, EIGHT, END, ENTER, EQUALS, ESCAPE, F, F1, F10, F11, F12, F2, F3, F4, F5, F6, F7, F8, F9, FF_EQUALS, FF_MINUS, FF_MUTE, FF_SEMICOLON, FF_VOLUME_DOWN, FF_VOLUME_UP, FIRST_MEDIA, FIVE, FOUR, G, H, HOME, I, INSERT, J, K, L, LAST_MEDIA, LEFT_ARROW, M, MAC_ENTER, MAC_META, MAC_WK_CMD_LEFT, MAC_WK_CMD_RIGHT, META, MUTE, N, NINE, NUMPAD_DIVIDE, NUMPAD_EIGHT, NUMPAD_FIVE, NUMPAD_FOUR, NUMPAD_MINUS, NUMPAD_MULTIPLY, NUMPAD_NINE, NUMPAD_ONE, NUMPAD_PERIOD, NUMPAD_PLUS, NUMPAD_SEVEN, NUMPAD_SIX, NUMPAD_THREE, NUMPAD_TWO, NUMPAD_ZERO, NUM_CENTER, NUM_LOCK, O, ONE, OPEN_SQUARE_BRACKET, P, PAGE_DOWN, PAGE_UP, PAUSE, PERIOD, PLUS_SIGN, PRINT_SCREEN, Q, QUESTION_MARK, R, RIGHT_ARROW, S, SCROLL_LOCK, SEMICOLON, SEVEN, SHIFT, SINGLE_QUOTE, SIX, SLASH, SPACE, T, TAB, THREE, TILDE, TWO, U, UP_ARROW, V, VOLUME_DOWN, VOLUME_UP, W, X, Y, Z, ZERO, hasModifierKey };
158
159
  //# sourceMappingURL=keycodes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"keycodes.js","sources":["../../../../../../src/cdk/keycodes/keycodes.ts","../../../../../../src/cdk/keycodes/modifiers.ts","../../../../../../src/cdk/keycodes/public-api.ts","../../../../../../src/cdk/keycodes/index.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport const MAC_ENTER = 3;\nexport const BACKSPACE = 8;\nexport const TAB = 9;\nexport const NUM_CENTER = 12;\nexport const ENTER = 13;\nexport const SHIFT = 16;\nexport const CONTROL = 17;\nexport const ALT = 18;\nexport const PAUSE = 19;\nexport const CAPS_LOCK = 20;\nexport const ESCAPE = 27;\nexport const SPACE = 32;\nexport const PAGE_UP = 33;\nexport const PAGE_DOWN = 34;\nexport const END = 35;\nexport const HOME = 36;\nexport const LEFT_ARROW = 37;\nexport const UP_ARROW = 38;\nexport const RIGHT_ARROW = 39;\nexport const DOWN_ARROW = 40;\nexport const PLUS_SIGN = 43;\nexport const PRINT_SCREEN = 44;\nexport const INSERT = 45;\nexport const DELETE = 46;\nexport const ZERO = 48;\nexport const ONE = 49;\nexport const TWO = 50;\nexport const THREE = 51;\nexport const FOUR = 52;\nexport const FIVE = 53;\nexport const SIX = 54;\nexport const SEVEN = 55;\nexport const EIGHT = 56;\nexport const NINE = 57;\nexport const FF_SEMICOLON = 59; // Firefox (Gecko) fires this for semicolon instead of 186\nexport const FF_EQUALS = 61; // Firefox (Gecko) fires this for equals instead of 187\nexport const QUESTION_MARK = 63;\nexport const AT_SIGN = 64;\nexport const A = 65;\nexport const B = 66;\nexport const C = 67;\nexport const D = 68;\nexport const E = 69;\nexport const F = 70;\nexport const G = 71;\nexport const H = 72;\nexport const I = 73;\nexport const J = 74;\nexport const K = 75;\nexport const L = 76;\nexport const M = 77;\nexport const N = 78;\nexport const O = 79;\nexport const P = 80;\nexport const Q = 81;\nexport const R = 82;\nexport const S = 83;\nexport const T = 84;\nexport const U = 85;\nexport const V = 86;\nexport const W = 87;\nexport const X = 88;\nexport const Y = 89;\nexport const Z = 90;\nexport const META = 91; // WIN_KEY_LEFT\nexport const MAC_WK_CMD_LEFT = 91;\nexport const MAC_WK_CMD_RIGHT = 93;\nexport const CONTEXT_MENU = 93;\nexport const NUMPAD_ZERO = 96;\nexport const NUMPAD_ONE = 97;\nexport const NUMPAD_TWO = 98;\nexport const NUMPAD_THREE = 99;\nexport const NUMPAD_FOUR = 100;\nexport const NUMPAD_FIVE = 101;\nexport const NUMPAD_SIX = 102;\nexport const NUMPAD_SEVEN = 103;\nexport const NUMPAD_EIGHT = 104;\nexport const NUMPAD_NINE = 105;\nexport const NUMPAD_MULTIPLY = 106;\nexport const NUMPAD_PLUS = 107;\nexport const NUMPAD_MINUS = 109;\nexport const NUMPAD_PERIOD = 110;\nexport const NUMPAD_DIVIDE = 111;\nexport const F1 = 112;\nexport const F2 = 113;\nexport const F3 = 114;\nexport const F4 = 115;\nexport const F5 = 116;\nexport const F6 = 117;\nexport const F7 = 118;\nexport const F8 = 119;\nexport const F9 = 120;\nexport const F10 = 121;\nexport const F11 = 122;\nexport const F12 = 123;\nexport const NUM_LOCK = 144;\nexport const SCROLL_LOCK = 145;\nexport const FIRST_MEDIA = 166;\nexport const FF_MINUS = 173;\nexport const MUTE = 173; // Firefox (Gecko) fires 181 for MUTE\nexport const VOLUME_DOWN = 174; // Firefox (Gecko) fires 182 for VOLUME_DOWN\nexport const VOLUME_UP = 175; // Firefox (Gecko) fires 183 for VOLUME_UP\nexport const FF_MUTE = 181;\nexport const FF_VOLUME_DOWN = 182;\nexport const LAST_MEDIA = 183;\nexport const FF_VOLUME_UP = 183;\nexport const SEMICOLON = 186; // Firefox (Gecko) fires 59 for SEMICOLON\nexport const EQUALS = 187; // Firefox (Gecko) fires 61 for EQUALS\nexport const COMMA = 188;\nexport const DASH = 189; // Firefox (Gecko) fires 173 for DASH/MINUS\nexport const SLASH = 191;\nexport const APOSTROPHE = 192;\nexport const TILDE = 192;\nexport const OPEN_SQUARE_BRACKET = 219;\nexport const BACKSLASH = 220;\nexport const CLOSE_SQUARE_BRACKET = 221;\nexport const SINGLE_QUOTE = 222;\nexport const MAC_META = 224;\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\ntype ModifierKey = 'altKey' | 'shiftKey' | 'ctrlKey' | 'metaKey';\n\n/**\n * Checks whether a modifier key is pressed.\n * @param event Event to be checked.\n */\nexport function hasModifierKey(event: KeyboardEvent, ...modifiers: ModifierKey[]): boolean {\n if (modifiers.length) {\n return modifiers.some(modifier => event[modifier]);\n }\n\n return event.altKey || event.shiftKey || event.ctrlKey || event.metaKey;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './keycodes';\nexport * from './modifiers';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"keycodes.js","sources":["../../../../../../src/cdk/keycodes/keycodes.ts","../../../../../../src/cdk/keycodes/modifiers.ts","../../../../../../src/cdk/keycodes/public-api.ts","../../../../../../src/cdk/keycodes/index.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport const MAC_ENTER = 3;\nexport const BACKSPACE = 8;\nexport const TAB = 9;\nexport const NUM_CENTER = 12;\nexport const ENTER = 13;\nexport const SHIFT = 16;\nexport const CONTROL = 17;\nexport const ALT = 18;\nexport const PAUSE = 19;\nexport const CAPS_LOCK = 20;\nexport const ESCAPE = 27;\nexport const SPACE = 32;\nexport const PAGE_UP = 33;\nexport const PAGE_DOWN = 34;\nexport const END = 35;\nexport const HOME = 36;\nexport const LEFT_ARROW = 37;\nexport const UP_ARROW = 38;\nexport const RIGHT_ARROW = 39;\nexport const DOWN_ARROW = 40;\nexport const PLUS_SIGN = 43;\nexport const PRINT_SCREEN = 44;\nexport const INSERT = 45;\nexport const DELETE = 46;\nexport const ZERO = 48;\nexport const ONE = 49;\nexport const TWO = 50;\nexport const THREE = 51;\nexport const FOUR = 52;\nexport const FIVE = 53;\nexport const SIX = 54;\nexport const SEVEN = 55;\nexport const EIGHT = 56;\nexport const NINE = 57;\nexport const FF_SEMICOLON = 59; // Firefox (Gecko) fires this for semicolon instead of 186\nexport const FF_EQUALS = 61; // Firefox (Gecko) fires this for equals instead of 187\nexport const QUESTION_MARK = 63;\nexport const AT_SIGN = 64;\nexport const A = 65;\nexport const B = 66;\nexport const C = 67;\nexport const D = 68;\nexport const E = 69;\nexport const F = 70;\nexport const G = 71;\nexport const H = 72;\nexport const I = 73;\nexport const J = 74;\nexport const K = 75;\nexport const L = 76;\nexport const M = 77;\nexport const N = 78;\nexport const O = 79;\nexport const P = 80;\nexport const Q = 81;\nexport const R = 82;\nexport const S = 83;\nexport const T = 84;\nexport const U = 85;\nexport const V = 86;\nexport const W = 87;\nexport const X = 88;\nexport const Y = 89;\nexport const Z = 90;\nexport const META = 91; // WIN_KEY_LEFT\nexport const MAC_WK_CMD_LEFT = 91;\nexport const MAC_WK_CMD_RIGHT = 93;\nexport const CONTEXT_MENU = 93;\nexport const NUMPAD_ZERO = 96;\nexport const NUMPAD_ONE = 97;\nexport const NUMPAD_TWO = 98;\nexport const NUMPAD_THREE = 99;\nexport const NUMPAD_FOUR = 100;\nexport const NUMPAD_FIVE = 101;\nexport const NUMPAD_SIX = 102;\nexport const NUMPAD_SEVEN = 103;\nexport const NUMPAD_EIGHT = 104;\nexport const NUMPAD_NINE = 105;\nexport const NUMPAD_MULTIPLY = 106;\nexport const NUMPAD_PLUS = 107;\nexport const NUMPAD_MINUS = 109;\nexport const NUMPAD_PERIOD = 110;\nexport const NUMPAD_DIVIDE = 111;\nexport const F1 = 112;\nexport const F2 = 113;\nexport const F3 = 114;\nexport const F4 = 115;\nexport const F5 = 116;\nexport const F6 = 117;\nexport const F7 = 118;\nexport const F8 = 119;\nexport const F9 = 120;\nexport const F10 = 121;\nexport const F11 = 122;\nexport const F12 = 123;\nexport const NUM_LOCK = 144;\nexport const SCROLL_LOCK = 145;\nexport const FIRST_MEDIA = 166;\nexport const FF_MINUS = 173;\nexport const MUTE = 173; // Firefox (Gecko) fires 181 for MUTE\nexport const VOLUME_DOWN = 174; // Firefox (Gecko) fires 182 for VOLUME_DOWN\nexport const VOLUME_UP = 175; // Firefox (Gecko) fires 183 for VOLUME_UP\nexport const FF_MUTE = 181;\nexport const FF_VOLUME_DOWN = 182;\nexport const LAST_MEDIA = 183;\nexport const FF_VOLUME_UP = 183;\nexport const SEMICOLON = 186; // Firefox (Gecko) fires 59 for SEMICOLON\nexport const EQUALS = 187; // Firefox (Gecko) fires 61 for EQUALS\nexport const COMMA = 188;\nexport const DASH = 189; // Firefox (Gecko) fires 173 for DASH/MINUS\nexport const PERIOD = 190;\nexport const SLASH = 191;\nexport const APOSTROPHE = 192;\nexport const TILDE = 192;\nexport const OPEN_SQUARE_BRACKET = 219;\nexport const BACKSLASH = 220;\nexport const CLOSE_SQUARE_BRACKET = 221;\nexport const SINGLE_QUOTE = 222;\nexport const MAC_META = 224;\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\ntype ModifierKey = 'altKey' | 'shiftKey' | 'ctrlKey' | 'metaKey';\n\n/**\n * Checks whether a modifier key is pressed.\n * @param event Event to be checked.\n */\nexport function hasModifierKey(event: KeyboardEvent, ...modifiers: ModifierKey[]): boolean {\n if (modifiers.length) {\n return modifiers.some(modifier => event[modifier]);\n }\n\n return event.altKey || event.shiftKey || event.ctrlKey || event.metaKey;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './keycodes';\nexport * from './modifiers';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ import { TestKey, _getTextWithExcludedElements, handleAutoChangeDetectionStatus,
3
3
  import { flush } from '@angular/core/testing';
4
4
  import { takeWhile } from 'rxjs/operators';
5
5
  import { BehaviorSubject } from 'rxjs';
6
- import { BACKSPACE, TAB, ENTER, SHIFT, CONTROL, ALT, ESCAPE, PAGE_UP, PAGE_DOWN, END, HOME, LEFT_ARROW, UP_ARROW, RIGHT_ARROW, DOWN_ARROW, INSERT, DELETE, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, META } from '@angular/cdk/keycodes';
6
+ import { PERIOD, BACKSPACE, TAB, ENTER, SHIFT, CONTROL, ALT, ESCAPE, PAGE_UP, PAGE_DOWN, END, HOME, LEFT_ARROW, UP_ARROW, RIGHT_ARROW, DOWN_ARROW, INSERT, DELETE, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, META } from '@angular/cdk/keycodes';
7
7
 
8
8
  /**
9
9
  * @license
@@ -323,6 +323,8 @@ function triggerBlur(element) {
323
323
  * Use of this source code is governed by an MIT-style license that can be
324
324
  * found in the LICENSE file at https://angular.io/license
325
325
  */
326
+ /** Input types for which the value can be entered incrementally. */
327
+ const incrementalInputTypes = new Set(['text', 'email', 'hidden', 'password', 'search', 'tel', 'url']);
326
328
  /**
327
329
  * Checks whether the given Element is a text input element.
328
330
  * @docs-private
@@ -343,20 +345,42 @@ function typeInElement(element, ...modifiersAndKeys) {
343
345
  modifiers = {};
344
346
  rest = modifiersAndKeys;
345
347
  }
348
+ const isInput = isTextInput(element);
349
+ const inputType = element.getAttribute('type') || 'text';
346
350
  const keys = rest
347
351
  .map(k => typeof k === 'string' ?
348
352
  k.split('').map(c => ({ keyCode: c.toUpperCase().charCodeAt(0), key: c })) : [k])
349
353
  .reduce((arr, k) => arr.concat(k), []);
354
+ // We simulate the user typing in a value by incrementally assigning the value below. The problem
355
+ // is that for some input types, the browser won't allow for an invalid value to be set via the
356
+ // `value` property which will always be the case when going character-by-character. If we detect
357
+ // such an input, we have to set the value all at once or listeners to the `input` event (e.g.
358
+ // the `ReactiveFormsModule` uses such an approach) won't receive the correct value.
359
+ const enterValueIncrementally = inputType === 'number' && keys.length > 0 ?
360
+ // The value can be set character by character in number inputs if it doesn't have any decimals.
361
+ keys.every(key => key.key !== '.' && key.keyCode !== PERIOD) :
362
+ incrementalInputTypes.has(inputType);
350
363
  triggerFocus(element);
364
+ // When we aren't entering the value incrementally, assign it all at once ahead
365
+ // of time so that any listeners to the key events below will have access to it.
366
+ if (!enterValueIncrementally) {
367
+ element.value = keys.reduce((value, key) => value + (key.key || ''), '');
368
+ }
351
369
  for (const key of keys) {
352
370
  dispatchKeyboardEvent(element, 'keydown', key.keyCode, key.key, modifiers);
353
371
  dispatchKeyboardEvent(element, 'keypress', key.keyCode, key.key, modifiers);
354
- if (isTextInput(element) && key.key && key.key.length === 1) {
355
- element.value += key.key;
356
- dispatchFakeEvent(element, 'input');
372
+ if (isInput && key.key && key.key.length === 1) {
373
+ if (enterValueIncrementally) {
374
+ element.value += key.key;
375
+ dispatchFakeEvent(element, 'input');
376
+ }
357
377
  }
358
378
  dispatchKeyboardEvent(element, 'keyup', key.keyCode, key.key, modifiers);
359
379
  }
380
+ // Since we weren't dispatching `input` events while sending the keys, we have to do it now.
381
+ if (!enterValueIncrementally) {
382
+ dispatchFakeEvent(element, 'input');
383
+ }
360
384
  }
361
385
  /**
362
386
  * Clears the text in an input or textarea element.
@@ -1 +1 @@
1
- {"version":3,"file":"testing__testbed.js","sources":["../../../../../../src/cdk/testing/testbed/task-state-zone-interceptor.ts","../../../../../../src/cdk/testing/testbed/fake-events/event-objects.ts","../../../../../../src/cdk/testing/testbed/fake-events/dispatch-events.ts","../../../../../../src/cdk/testing/testbed/fake-events/element-focus.ts","../../../../../../src/cdk/testing/testbed/fake-events/type-in-element.ts","../../../../../../src/cdk/testing/testbed/fake-events/index.ts","../../../../../../src/cdk/testing/testbed/unit-test-element.ts","../../../../../../src/cdk/testing/testbed/testbed-harness-environment.ts","../../../../../../src/cdk/testing/testbed/public-api.ts","../../../../../../src/cdk/testing/testbed/index.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {BehaviorSubject, Observable} from 'rxjs';\nimport {ProxyZone, ProxyZoneStatic} from './proxy-zone-types';\n\n/** Current state of the intercepted zone. */\nexport interface TaskState {\n /** Whether the zone is stable (i.e. no microtasks and macrotasks). */\n stable: boolean;\n}\n\n/** Unique symbol that is used to patch a property to a proxy zone. */\nconst stateObservableSymbol = Symbol('ProxyZone_PATCHED#stateObservable');\n\n/** Type that describes a potentially patched proxy zone instance. */\ntype PatchedProxyZone = ProxyZone & {\n [stateObservableSymbol]: undefined|Observable<TaskState>;\n};\n\n/**\n * Interceptor that can be set up in a `ProxyZone` instance. The interceptor\n * will keep track of the task state and emit whenever the state changes.\n *\n * This serves as a workaround for https://github.com/angular/angular/issues/32896.\n */\nexport class TaskStateZoneInterceptor {\n /** Subject that can be used to emit a new state change. */\n private _stateSubject: BehaviorSubject<TaskState> = new BehaviorSubject<TaskState>(\n this._lastState ? this._getTaskStateFromInternalZoneState(this._lastState) : {stable: true});\n\n /** Public observable that emits whenever the task state changes. */\n readonly state: Observable<TaskState> = this._stateSubject;\n\n constructor(private _lastState: HasTaskState|null) {}\n\n /** This will be called whenever the task state changes in the intercepted zone. */\n onHasTask(delegate: ZoneDelegate, current: Zone, target: Zone, hasTaskState: HasTaskState) {\n if (current === target) {\n this._stateSubject.next(this._getTaskStateFromInternalZoneState(hasTaskState));\n }\n }\n\n /** Gets the task state from the internal ZoneJS task state. */\n private _getTaskStateFromInternalZoneState(state: HasTaskState): TaskState {\n return {stable: !state.macroTask && !state.microTask};\n }\n\n /**\n * Sets up the custom task state Zone interceptor in the `ProxyZone`. Throws if\n * no `ProxyZone` could be found.\n * @returns an observable that emits whenever the task state changes.\n */\n static setup(): Observable<TaskState> {\n if (Zone === undefined) {\n throw Error('Could not find ZoneJS. For test harnesses running in TestBed, ' +\n 'ZoneJS needs to be installed.');\n }\n\n // tslint:disable-next-line:variable-name\n const ProxyZoneSpec = (Zone as any)['ProxyZoneSpec'] as ProxyZoneStatic|undefined;\n\n // If there is no \"ProxyZoneSpec\" installed, we throw an error and recommend\n // setting up the proxy zone by pulling in the testing bundle.\n if (!ProxyZoneSpec) {\n throw Error(\n 'ProxyZoneSpec is needed for the test harnesses but could not be found. ' +\n 'Please make sure that your environment includes zone.js/dist/zone-testing.js');\n }\n\n // Ensure that there is a proxy zone instance set up, and get\n // a reference to the instance if present.\n const zoneSpec = ProxyZoneSpec.assertPresent() as PatchedProxyZone;\n\n // If there already is a delegate registered in the proxy zone, and it\n // is type of the custom task state interceptor, we just use that state\n // observable. This allows us to only intercept Zone once per test\n // (similar to how `fakeAsync` or `async` work).\n if (zoneSpec[stateObservableSymbol]) {\n return zoneSpec[stateObservableSymbol]!;\n }\n\n // Since we intercept on environment creation and the fixture has been\n // created before, we might have missed tasks scheduled before. Fortunately\n // the proxy zone keeps track of the previous task state, so we can just pass\n // this as initial state to the task zone interceptor.\n const interceptor = new TaskStateZoneInterceptor(zoneSpec.lastTaskState);\n const zoneSpecOnHasTask = zoneSpec.onHasTask.bind(zoneSpec);\n\n // We setup the task state interceptor in the `ProxyZone`. Note that we cannot register\n // the interceptor as a new proxy zone delegate because it would mean that other zone\n // delegates (e.g. `FakeAsyncTestZone` or `AsyncTestZone`) can accidentally overwrite/disable\n // our interceptor. Since we just intend to monitor the task state of the proxy zone, it is\n // sufficient to just patch the proxy zone. This also avoids that we interfere with the task\n // queue scheduling logic.\n zoneSpec.onHasTask = function(...args: [ZoneDelegate, Zone, Zone, HasTaskState]) {\n zoneSpecOnHasTask(...args);\n interceptor.onHasTask(...args);\n };\n\n return zoneSpec[stateObservableSymbol] = interceptor.state;\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {ModifierKeys} from '@angular/cdk/testing';\n\n/**\n * Creates a browser MouseEvent with the specified options.\n * @docs-private\n */\nexport function createMouseEvent(\n type: string, clientX = 0, clientY = 0, button = 0, modifiers: ModifierKeys = {}) {\n const event = document.createEvent('MouseEvent');\n const originalPreventDefault = event.preventDefault.bind(event);\n\n // Note: We cannot determine the position of the mouse event based on the screen\n // because the dimensions and position of the browser window are not available\n // To provide reasonable `screenX` and `screenY` coordinates, we simply use the\n // client coordinates as if the browser is opened in fullscreen.\n const screenX = clientX;\n const screenY = clientY;\n\n event.initMouseEvent(type,\n /* canBubble */ true,\n /* cancelable */ true,\n /* view */ window,\n /* detail */ 0,\n /* screenX */ screenX,\n /* screenY */ screenY,\n /* clientX */ clientX,\n /* clientY */ clientY,\n /* ctrlKey */ !!modifiers.control,\n /* altKey */ !!modifiers.alt,\n /* shiftKey */ !!modifiers.shift,\n /* metaKey */ !!modifiers.meta,\n /* button */ button,\n /* relatedTarget */ null);\n\n // `initMouseEvent` doesn't allow us to pass the `buttons` and\n // defaults it to 0 which looks like a fake event.\n defineReadonlyEventProperty(event, 'buttons', 1);\n\n // IE won't set `defaultPrevented` on synthetic events so we need to do it manually.\n event.preventDefault = function() {\n defineReadonlyEventProperty(event, 'defaultPrevented', true);\n return originalPreventDefault();\n };\n\n return event;\n}\n\n/**\n * Creates a browser `PointerEvent` with the specified options. Pointer events\n * by default will appear as if they are the primary pointer of their type.\n * https://www.w3.org/TR/pointerevents2/#dom-pointerevent-isprimary.\n *\n * For example, if pointer events for a multi-touch interaction are created, the non-primary\n * pointer touches would need to be represented by non-primary pointer events.\n *\n * @docs-private\n */\nexport function createPointerEvent(type: string, clientX = 0, clientY = 0,\n options: PointerEventInit = {isPrimary: true}) {\n return new PointerEvent(type, {\n bubbles: true,\n cancelable: true,\n view: window,\n clientX,\n clientY,\n ...options,\n });\n}\n\n/**\n * Creates a browser TouchEvent with the specified pointer coordinates.\n * @docs-private\n */\nexport function createTouchEvent(type: string, pageX = 0, pageY = 0) {\n // In favor of creating events that work for most of the browsers, the event is created\n // as a basic UI Event. The necessary details for the event will be set manually.\n const event = document.createEvent('UIEvent');\n const touchDetails = {pageX, pageY};\n\n // TS3.6 removes the initUIEvent method and suggests porting to \"new UIEvent()\".\n (event as any).initUIEvent(type, true, true, window, 0);\n\n // Most of the browsers don't have a \"initTouchEvent\" method that can be used to define\n // the touch details.\n defineReadonlyEventProperty(event, 'touches', [touchDetails]);\n defineReadonlyEventProperty(event, 'targetTouches', [touchDetails]);\n defineReadonlyEventProperty(event, 'changedTouches', [touchDetails]);\n\n return event;\n}\n\n/**\n * Creates a keyboard event with the specified key and modifiers.\n * @docs-private\n */\nexport function createKeyboardEvent(type: string, keyCode: number = 0, key: string = '',\n modifiers: ModifierKeys = {}) {\n const event = document.createEvent('KeyboardEvent');\n const originalPreventDefault = event.preventDefault.bind(event);\n\n // Firefox does not support `initKeyboardEvent`, but supports `initKeyEvent`.\n // https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/initKeyEvent.\n if ((event as any).initKeyEvent !== undefined) {\n (event as any).initKeyEvent(type, true, true, window, modifiers.control, modifiers.alt,\n modifiers.shift, modifiers.meta, keyCode);\n } else {\n // `initKeyboardEvent` expects to receive modifiers as a whitespace-delimited string\n // See https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/initKeyboardEvent\n let modifiersList = '';\n\n if (modifiers.control) {\n modifiersList += 'Control ';\n }\n\n if (modifiers.alt) {\n modifiersList += 'Alt ';\n }\n\n if (modifiers.shift) {\n modifiersList += 'Shift ';\n }\n\n if (modifiers.meta) {\n modifiersList += 'Meta ';\n }\n\n // TS3.6 removed the `initKeyboardEvent` method and suggested porting to\n // `new KeyboardEvent()` constructor. We cannot use that as we support IE11.\n // https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/initKeyboardEvent.\n (event as any).initKeyboardEvent(type,\n true, /* canBubble */\n true, /* cancelable */\n window, /* view */\n 0, /* char */\n key, /* key */\n 0, /* location */\n modifiersList.trim(), /* modifiersList */\n false /* repeat */);\n }\n\n // Webkit Browsers don't set the keyCode when calling the init function.\n // See related bug https://bugs.webkit.org/show_bug.cgi?id=16735\n defineReadonlyEventProperty(event, 'keyCode', keyCode);\n defineReadonlyEventProperty(event, 'key', key);\n defineReadonlyEventProperty(event, 'ctrlKey', !!modifiers.control);\n defineReadonlyEventProperty(event, 'altKey', !!modifiers.alt);\n defineReadonlyEventProperty(event, 'shiftKey', !!modifiers.shift);\n defineReadonlyEventProperty(event, 'metaKey', !!modifiers.meta);\n\n // IE won't set `defaultPrevented` on synthetic events so we need to do it manually.\n event.preventDefault = function() {\n defineReadonlyEventProperty(event, 'defaultPrevented', true);\n return originalPreventDefault();\n };\n\n return event;\n}\n\n/**\n * Creates a fake event object with any desired event type.\n * @docs-private\n */\nexport function createFakeEvent(type: string, canBubble = false, cancelable = true) {\n const event = document.createEvent('Event');\n event.initEvent(type, canBubble, cancelable);\n return event;\n}\n\n/**\n * Defines a readonly property on the given event object. Readonly properties on an event object\n * are always set as configurable as that matches default readonly properties for DOM event objects.\n */\nfunction defineReadonlyEventProperty(event: Event, propertyName: string, value: any) {\n Object.defineProperty(event, propertyName, {get: () => value, configurable: true});\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {ModifierKeys} from '@angular/cdk/testing';\nimport {\n createFakeEvent,\n createKeyboardEvent,\n createMouseEvent,\n createPointerEvent,\n createTouchEvent,\n} from './event-objects';\n\n/**\n * Utility to dispatch any event on a Node.\n * @docs-private\n */\nexport function dispatchEvent<T extends Event>(node: Node | Window, event: T): T {\n node.dispatchEvent(event);\n return event;\n}\n\n/**\n * Shorthand to dispatch a fake event on a specified node.\n * @docs-private\n */\nexport function dispatchFakeEvent(node: Node | Window, type: string, canBubble?: boolean): Event {\n return dispatchEvent(node, createFakeEvent(type, canBubble));\n}\n\n/**\n * Shorthand to dispatch a keyboard event with a specified key code and\n * optional modifiers.\n * @docs-private\n */\nexport function dispatchKeyboardEvent(node: Node, type: string, keyCode?: number, key?: string,\n modifiers?: ModifierKeys): KeyboardEvent {\n return dispatchEvent(node,\n createKeyboardEvent(type, keyCode, key, modifiers));\n}\n\n/**\n * Shorthand to dispatch a mouse event on the specified coordinates.\n * @docs-private\n */\nexport function dispatchMouseEvent( node: Node, type: string, clientX = 0, clientY = 0,\n button?: number, modifiers?: ModifierKeys): MouseEvent {\n return dispatchEvent(node, createMouseEvent(type, clientX, clientY, button, modifiers));\n}\n\n/**\n * Shorthand to dispatch a pointer event on the specified coordinates.\n * @docs-private\n */\nexport function dispatchPointerEvent(node: Node, type: string, clientX = 0, clientY = 0,\n options?: PointerEventInit): PointerEvent {\n return dispatchEvent(node, createPointerEvent(type, clientX, clientY, options)) as PointerEvent;\n}\n\n/**\n * Shorthand to dispatch a touch event on the specified coordinates.\n * @docs-private\n */\nexport function dispatchTouchEvent(node: Node, type: string, x = 0, y = 0) {\n return dispatchEvent(node, createTouchEvent(type, x, y));\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {dispatchFakeEvent} from './dispatch-events';\n\nfunction triggerFocusChange(element: HTMLElement, event: 'focus' | 'blur') {\n let eventFired = false;\n const handler = () => eventFired = true;\n element.addEventListener(event, handler);\n element[event]();\n element.removeEventListener(event, handler);\n if (!eventFired) {\n dispatchFakeEvent(element, event);\n }\n}\n\n/**\n * Patches an elements focus and blur methods to emit events consistently and predictably.\n * This is necessary, because some browsers, like IE11, will call the focus handlers asynchronously,\n * while others won't fire them at all if the browser window is not focused.\n * @docs-private\n */\nexport function patchElementFocus(element: HTMLElement) {\n element.focus = () => dispatchFakeEvent(element, 'focus');\n element.blur = () => dispatchFakeEvent(element, 'blur');\n}\n\n/** @docs-private */\nexport function triggerFocus(element: HTMLElement) {\n triggerFocusChange(element, 'focus');\n}\n\n/** @docs-private */\nexport function triggerBlur(element: HTMLElement) {\n triggerFocusChange(element, 'blur');\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {ModifierKeys} from '@angular/cdk/testing';\nimport {dispatchFakeEvent, dispatchKeyboardEvent} from './dispatch-events';\nimport {triggerFocus} from './element-focus';\n\n/**\n * Checks whether the given Element is a text input element.\n * @docs-private\n */\nexport function isTextInput(element: Element): element is HTMLInputElement | HTMLTextAreaElement {\n const nodeName = element.nodeName.toLowerCase();\n return nodeName === 'input' || nodeName === 'textarea' ;\n}\n\n/**\n * Focuses an input, sets its value and dispatches\n * the `input` event, simulating the user typing.\n * @param element Element onto which to set the value.\n * @param keys The keys to send to the element.\n * @docs-private\n */\nexport function typeInElement(\n element: HTMLElement, ...keys: (string | {keyCode?: number, key?: string})[]): void;\n\n/**\n * Focuses an input, sets its value and dispatches\n * the `input` event, simulating the user typing.\n * @param element Element onto which to set the value.\n * @param modifiers Modifier keys that are held while typing.\n * @param keys The keys to send to the element.\n * @docs-private\n */\nexport function typeInElement(element: HTMLElement, modifiers: ModifierKeys,\n ...keys: (string | {keyCode?: number, key?: string})[]): void;\n\nexport function typeInElement(element: HTMLElement, ...modifiersAndKeys: any) {\n const first = modifiersAndKeys[0];\n let modifiers: ModifierKeys;\n let rest: (string | {keyCode?: number, key?: string})[];\n if (typeof first !== 'string' && first.keyCode === undefined && first.key === undefined) {\n modifiers = first;\n rest = modifiersAndKeys.slice(1);\n } else {\n modifiers = {};\n rest = modifiersAndKeys;\n }\n const keys: {keyCode?: number, key?: string}[] = rest\n .map(k => typeof k === 'string' ?\n k.split('').map(c => ({keyCode: c.toUpperCase().charCodeAt(0), key: c})) : [k])\n .reduce((arr, k) => arr.concat(k), []);\n\n triggerFocus(element);\n for (const key of keys) {\n dispatchKeyboardEvent(element, 'keydown', key.keyCode, key.key, modifiers);\n dispatchKeyboardEvent(element, 'keypress', key.keyCode, key.key, modifiers);\n if (isTextInput(element) && key.key && key.key.length === 1) {\n element.value += key.key;\n dispatchFakeEvent(element, 'input');\n }\n dispatchKeyboardEvent(element, 'keyup', key.keyCode, key.key, modifiers);\n }\n}\n\n/**\n * Clears the text in an input or textarea element.\n * @docs-private\n */\nexport function clearElement(element: HTMLInputElement | HTMLTextAreaElement) {\n triggerFocus(element as HTMLElement);\n element.value = '';\n dispatchFakeEvent(element, 'input');\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n// These are private APIs that are used both by the public APIs inside of this package, as well\n// as in unit tests of other entry-points, hence why we need to re-export them through here.\nexport * from './dispatch-events';\nexport * from './event-objects';\nexport * from './element-focus';\nexport * from './type-in-element';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport * as keyCodes from '@angular/cdk/keycodes';\nimport {\n _getTextWithExcludedElements,\n ElementDimensions,\n ModifierKeys,\n TestElement,\n TestKey,\n TextOptions,\n EventData,\n} from '@angular/cdk/testing';\nimport {\n clearElement,\n createFakeEvent,\n dispatchFakeEvent,\n dispatchMouseEvent,\n dispatchPointerEvent,\n isTextInput,\n triggerBlur,\n triggerFocus,\n typeInElement,\n dispatchEvent,\n} from './fake-events';\n\n/** Maps `TestKey` constants to the `keyCode` and `key` values used by native browser events. */\nconst keyMap = {\n [TestKey.BACKSPACE]: {keyCode: keyCodes.BACKSPACE, key: 'Backspace'},\n [TestKey.TAB]: {keyCode: keyCodes.TAB, key: 'Tab'},\n [TestKey.ENTER]: {keyCode: keyCodes.ENTER, key: 'Enter'},\n [TestKey.SHIFT]: {keyCode: keyCodes.SHIFT, key: 'Shift'},\n [TestKey.CONTROL]: {keyCode: keyCodes.CONTROL, key: 'Control'},\n [TestKey.ALT]: {keyCode: keyCodes.ALT, key: 'Alt'},\n [TestKey.ESCAPE]: {keyCode: keyCodes.ESCAPE, key: 'Escape'},\n [TestKey.PAGE_UP]: {keyCode: keyCodes.PAGE_UP, key: 'PageUp'},\n [TestKey.PAGE_DOWN]: {keyCode: keyCodes.PAGE_DOWN, key: 'PageDown'},\n [TestKey.END]: {keyCode: keyCodes.END, key: 'End'},\n [TestKey.HOME]: {keyCode: keyCodes.HOME, key: 'Home'},\n [TestKey.LEFT_ARROW]: {keyCode: keyCodes.LEFT_ARROW, key: 'ArrowLeft'},\n [TestKey.UP_ARROW]: {keyCode: keyCodes.UP_ARROW, key: 'ArrowUp'},\n [TestKey.RIGHT_ARROW]: {keyCode: keyCodes.RIGHT_ARROW, key: 'ArrowRight'},\n [TestKey.DOWN_ARROW]: {keyCode: keyCodes.DOWN_ARROW, key: 'ArrowDown'},\n [TestKey.INSERT]: {keyCode: keyCodes.INSERT, key: 'Insert'},\n [TestKey.DELETE]: {keyCode: keyCodes.DELETE, key: 'Delete'},\n [TestKey.F1]: {keyCode: keyCodes.F1, key: 'F1'},\n [TestKey.F2]: {keyCode: keyCodes.F2, key: 'F2'},\n [TestKey.F3]: {keyCode: keyCodes.F3, key: 'F3'},\n [TestKey.F4]: {keyCode: keyCodes.F4, key: 'F4'},\n [TestKey.F5]: {keyCode: keyCodes.F5, key: 'F5'},\n [TestKey.F6]: {keyCode: keyCodes.F6, key: 'F6'},\n [TestKey.F7]: {keyCode: keyCodes.F7, key: 'F7'},\n [TestKey.F8]: {keyCode: keyCodes.F8, key: 'F8'},\n [TestKey.F9]: {keyCode: keyCodes.F9, key: 'F9'},\n [TestKey.F10]: {keyCode: keyCodes.F10, key: 'F10'},\n [TestKey.F11]: {keyCode: keyCodes.F11, key: 'F11'},\n [TestKey.F12]: {keyCode: keyCodes.F12, key: 'F12'},\n [TestKey.META]: {keyCode: keyCodes.META, key: 'Meta'}\n};\n\n/** A `TestElement` implementation for unit tests. */\nexport class UnitTestElement implements TestElement {\n constructor(readonly element: Element, private _stabilize: () => Promise<void>) {}\n\n async blur(): Promise<void> {\n triggerBlur(this.element as HTMLElement);\n await this._stabilize();\n }\n\n async clear(): Promise<void> {\n if (!isTextInput(this.element)) {\n throw Error('Attempting to clear an invalid element');\n }\n clearElement(this.element);\n await this._stabilize();\n }\n\n async click(...args: [ModifierKeys?] | ['center', ModifierKeys?] |\n [number, number, ModifierKeys?]): Promise<void> {\n await this._dispatchMouseEventSequence('click', args, 0);\n await this._stabilize();\n }\n\n async rightClick(...args: [ModifierKeys?] | ['center', ModifierKeys?] |\n [number, number, ModifierKeys?]): Promise<void> {\n await this._dispatchMouseEventSequence('contextmenu', args, 2);\n await this._stabilize();\n }\n\n async focus(): Promise<void> {\n triggerFocus(this.element as HTMLElement);\n await this._stabilize();\n }\n\n async getCssValue(property: string): Promise<string> {\n await this._stabilize();\n // TODO(mmalerba): Consider adding value normalization if we run into common cases where its\n // needed.\n return getComputedStyle(this.element).getPropertyValue(property);\n }\n\n async hover(): Promise<void> {\n this._dispatchPointerEventIfSupported('pointerenter');\n dispatchMouseEvent(this.element, 'mouseenter');\n await this._stabilize();\n }\n\n async mouseAway(): Promise<void> {\n this._dispatchPointerEventIfSupported('pointerleave');\n dispatchMouseEvent(this.element, 'mouseleave');\n await this._stabilize();\n }\n\n async sendKeys(...keys: (string | TestKey)[]): Promise<void>;\n async sendKeys(modifiers: ModifierKeys, ...keys: (string | TestKey)[]): Promise<void>;\n async sendKeys(...modifiersAndKeys: any[]): Promise<void> {\n const args = modifiersAndKeys.map(k => typeof k === 'number' ? keyMap[k as TestKey] : k);\n typeInElement(this.element as HTMLElement, ...args);\n await this._stabilize();\n }\n\n async text(options?: TextOptions): Promise<string> {\n await this._stabilize();\n if (options?.exclude) {\n return _getTextWithExcludedElements(this.element, options.exclude);\n }\n return (this.element.textContent || '').trim();\n }\n\n async getAttribute(name: string): Promise<string|null> {\n await this._stabilize();\n return this.element.getAttribute(name);\n }\n\n async hasClass(name: string): Promise<boolean> {\n await this._stabilize();\n return this.element.classList.contains(name);\n }\n\n async getDimensions(): Promise<ElementDimensions> {\n await this._stabilize();\n return this.element.getBoundingClientRect();\n }\n\n async getProperty(name: string): Promise<any> {\n await this._stabilize();\n return (this.element as any)[name];\n }\n\n async setInputValue(value: string): Promise<void> {\n (this.element as any).value = value;\n await this._stabilize();\n }\n\n async selectOptions(...optionIndexes: number[]): Promise<void> {\n let hasChanged = false;\n const options = this.element.querySelectorAll('option');\n const indexes = new Set(optionIndexes); // Convert to a set to remove duplicates.\n\n for (let i = 0; i < options.length; i++) {\n const option = options[i];\n const wasSelected = option.selected;\n\n // We have to go through `option.selected`, because `HTMLSelectElement.value` doesn't\n // allow for multiple options to be selected, even in `multiple` mode.\n option.selected = indexes.has(i);\n\n if (option.selected !== wasSelected) {\n hasChanged = true;\n dispatchFakeEvent(this.element, 'change');\n }\n }\n\n if (hasChanged) {\n await this._stabilize();\n }\n }\n\n async matchesSelector(selector: string): Promise<boolean> {\n await this._stabilize();\n const elementPrototype = Element.prototype as any;\n return (elementPrototype['matches'] || elementPrototype['msMatchesSelector'])\n .call(this.element, selector);\n }\n\n async isFocused(): Promise<boolean> {\n await this._stabilize();\n return document.activeElement === this.element;\n }\n\n async dispatchEvent(name: string, data?: Record<string, EventData>): Promise<void> {\n const event = createFakeEvent(name);\n\n if (data) {\n // tslint:disable-next-line:ban Have to use `Object.assign` to preserve the original object.\n Object.assign(event, data);\n }\n\n dispatchEvent(this.element, event);\n await this._stabilize();\n }\n\n /**\n * Dispatches a pointer event on the current element if the browser supports it.\n * @param name Name of the pointer event to be dispatched.\n * @param clientX Coordinate of the user's pointer along the X axis.\n * @param clientY Coordinate of the user's pointer along the Y axis.\n * @param button Mouse button that should be pressed when dispatching the event.\n */\n private _dispatchPointerEventIfSupported(\n name: string, clientX?: number, clientY?: number, button?: number) {\n // The latest versions of all browsers we support have the new `PointerEvent` API.\n // Though since we capture the two most recent versions of these browsers, we also\n // need to support Safari 12 at time of writing. Safari 12 does not have support for this,\n // so we need to conditionally create and dispatch these events based on feature detection.\n if (typeof PointerEvent !== 'undefined' && PointerEvent) {\n dispatchPointerEvent(this.element, name, clientX, clientY, {isPrimary: true, button});\n }\n }\n\n /** Dispatches all the events that are part of a mouse event sequence. */\n private async _dispatchMouseEventSequence(\n name: string,\n args: [ModifierKeys?] | ['center', ModifierKeys?] | [number, number, ModifierKeys?],\n button?: number) {\n let clientX: number | undefined = undefined;\n let clientY: number | undefined = undefined;\n let modifiers: ModifierKeys = {};\n\n if (args.length && typeof args[args.length - 1] === 'object') {\n modifiers = args.pop() as ModifierKeys;\n }\n\n if (args.length) {\n const {left, top, width, height} = await this.getDimensions();\n const relativeX = args[0] === 'center' ? width / 2 : args[0] as number;\n const relativeY = args[0] === 'center' ? height / 2 : args[1] as number;\n\n // Round the computed click position as decimal pixels are not\n // supported by mouse events and could lead to unexpected results.\n clientX = Math.round(left + relativeX);\n clientY = Math.round(top + relativeY);\n }\n\n this._dispatchPointerEventIfSupported('pointerdown', clientX, clientY, button);\n dispatchMouseEvent(this.element, 'mousedown', clientX, clientY, button, modifiers);\n this._dispatchPointerEventIfSupported('pointerup', clientX, clientY, button);\n dispatchMouseEvent(this.element, 'mouseup', clientX, clientY, button, modifiers);\n dispatchMouseEvent(this.element, name, clientX, clientY, button, modifiers);\n\n // This call to _stabilize should not be needed since the callers will already do that them-\n // selves. Nevertheless it breaks some tests in g3 without it. It needs to be investigated\n // why removing breaks those tests.\n await this._stabilize();\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {\n ComponentHarness,\n ComponentHarnessConstructor,\n handleAutoChangeDetectionStatus,\n HarnessEnvironment,\n HarnessLoader,\n stopHandlingAutoChangeDetectionStatus,\n TestElement\n} from '@angular/cdk/testing';\nimport {ComponentFixture, flush} from '@angular/core/testing';\nimport {Observable} from 'rxjs';\nimport {takeWhile} from 'rxjs/operators';\nimport {TaskState, TaskStateZoneInterceptor} from './task-state-zone-interceptor';\nimport {UnitTestElement} from './unit-test-element';\n\n/** Options to configure the environment. */\nexport interface TestbedHarnessEnvironmentOptions {\n /** The query function used to find DOM elements. */\n queryFn: (selector: string, root: Element) => Iterable<Element> | ArrayLike<Element>;\n}\n\n/** The default environment options. */\nconst defaultEnvironmentOptions: TestbedHarnessEnvironmentOptions = {\n queryFn: (selector: string, root: Element) => root.querySelectorAll(selector)\n};\n\n/** Whether auto change detection is currently disabled. */\nlet disableAutoChangeDetection = false;\n\n/**\n * The set of non-destroyed fixtures currently being used by `TestbedHarnessEnvironment` instances.\n */\nconst activeFixtures = new Set<ComponentFixture<unknown>>();\n\n/**\n * Installs a handler for change detection batching status changes for a specific fixture.\n * @param fixture The fixture to handle change detection batching for.\n */\nfunction installAutoChangeDetectionStatusHandler(fixture: ComponentFixture<unknown>) {\n if (!activeFixtures.size) {\n handleAutoChangeDetectionStatus(({isDisabled, onDetectChangesNow}) => {\n disableAutoChangeDetection = isDisabled;\n if (onDetectChangesNow) {\n Promise.all(Array.from(activeFixtures).map(detectChanges)).then(onDetectChangesNow);\n }\n });\n }\n activeFixtures.add(fixture);\n}\n\n/**\n * Uninstalls a handler for change detection batching status changes for a specific fixture.\n * @param fixture The fixture to stop handling change detection batching for.\n */\nfunction uninstallAutoChangeDetectionStatusHandler(fixture: ComponentFixture<unknown>) {\n activeFixtures.delete(fixture);\n if (!activeFixtures.size) {\n stopHandlingAutoChangeDetectionStatus();\n }\n}\n\n/** Whether we are currently in the fake async zone. */\nfunction isInFakeAsyncZone() {\n return Zone!.current.get('FakeAsyncTestZoneSpec') != null;\n}\n\n/**\n * Triggers change detection for a specific fixture.\n * @param fixture The fixture to trigger change detection for.\n */\nasync function detectChanges(fixture: ComponentFixture<unknown>) {\n fixture.detectChanges();\n if (isInFakeAsyncZone()) {\n flush();\n } else {\n await fixture.whenStable();\n }\n}\n\n/** A `HarnessEnvironment` implementation for Angular's Testbed. */\nexport class TestbedHarnessEnvironment extends HarnessEnvironment<Element> {\n /** Whether the environment has been destroyed. */\n private _destroyed = false;\n\n /** Observable that emits whenever the test task state changes. */\n private _taskState: Observable<TaskState>;\n\n /** The options for this environment. */\n private _options: TestbedHarnessEnvironmentOptions;\n\n protected constructor(rawRootElement: Element, private _fixture: ComponentFixture<unknown>,\n options?: TestbedHarnessEnvironmentOptions) {\n super(rawRootElement);\n this._options = {...defaultEnvironmentOptions, ...options};\n this._taskState = TaskStateZoneInterceptor.setup();\n installAutoChangeDetectionStatusHandler(_fixture);\n _fixture.componentRef.onDestroy(() => {\n uninstallAutoChangeDetectionStatusHandler(_fixture);\n this._destroyed = true;\n });\n }\n\n /** Creates a `HarnessLoader` rooted at the given fixture's root element. */\n static loader(fixture: ComponentFixture<unknown>, options?: TestbedHarnessEnvironmentOptions):\n HarnessLoader {\n return new TestbedHarnessEnvironment(fixture.nativeElement, fixture, options);\n }\n\n /**\n * Creates a `HarnessLoader` at the document root. This can be used if harnesses are\n * located outside of a fixture (e.g. overlays appended to the document body).\n */\n static documentRootLoader(fixture: ComponentFixture<unknown>,\n options?: TestbedHarnessEnvironmentOptions): HarnessLoader {\n return new TestbedHarnessEnvironment(document.body, fixture, options);\n }\n\n /** Gets the native DOM element corresponding to the given TestElement. */\n static getNativeElement(el: TestElement): Element {\n if (el instanceof UnitTestElement) {\n return el.element;\n }\n throw Error('This TestElement was not created by the TestbedHarnessEnvironment');\n }\n\n /**\n * Creates an instance of the given harness type, using the fixture's root element as the\n * harness's host element. This method should be used when creating a harness for the root element\n * of a fixture, as components do not have the correct selector when they are created as the root\n * of the fixture.\n */\n static async harnessForFixture<T extends ComponentHarness>(\n fixture: ComponentFixture<unknown>, harnessType: ComponentHarnessConstructor<T>,\n options?: TestbedHarnessEnvironmentOptions): Promise<T> {\n const environment = new TestbedHarnessEnvironment(fixture.nativeElement, fixture, options);\n await environment.forceStabilize();\n return environment.createComponentHarness(harnessType, fixture.nativeElement);\n }\n\n async forceStabilize(): Promise<void> {\n if (!disableAutoChangeDetection) {\n if (this._destroyed) {\n throw Error('Harness is attempting to use a fixture that has already been destroyed.');\n }\n\n await detectChanges(this._fixture);\n }\n }\n\n async waitForTasksOutsideAngular(): Promise<void> {\n // If we run in the fake async zone, we run \"flush\" to run any scheduled tasks. This\n // ensures that the harnesses behave inside of the FakeAsyncTestZone similar to the\n // \"AsyncTestZone\" and the root zone (i.e. neither fakeAsync or async). Note that we\n // cannot just rely on the task state observable to become stable because the state will\n // never change. This is because the task queue will be only drained if the fake async\n // zone is being flushed.\n if (isInFakeAsyncZone()) {\n flush();\n }\n\n // Wait until the task queue has been drained and the zone is stable. Note that\n // we cannot rely on \"fixture.whenStable\" since it does not catch tasks scheduled\n // outside of the Angular zone. For test harnesses, we want to ensure that the\n // app is fully stabilized and therefore need to use our own zone interceptor.\n await this._taskState.pipe(takeWhile(state => !state.stable)).toPromise();\n }\n\n protected getDocumentRoot(): Element {\n return document.body;\n }\n\n protected createTestElement(element: Element): TestElement {\n return new UnitTestElement(element, () => this.forceStabilize());\n }\n\n protected createEnvironment(element: Element): HarnessEnvironment<Element> {\n return new TestbedHarnessEnvironment(element, this._fixture, this._options);\n }\n\n protected async getAllRawElements(selector: string): Promise<Element[]> {\n await this.forceStabilize();\n return Array.from(this._options.queryFn(selector, this.rawRootElement));\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './testbed-harness-environment';\nexport * from './unit-test-element';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './public-api';\n"],"names":["keyCodes.BACKSPACE","keyCodes.TAB","keyCodes.ENTER","keyCodes.SHIFT","keyCodes.CONTROL","keyCodes.ALT","keyCodes.ESCAPE","keyCodes.PAGE_UP","keyCodes.PAGE_DOWN","keyCodes.END","keyCodes.HOME","keyCodes.LEFT_ARROW","keyCodes.UP_ARROW","keyCodes.RIGHT_ARROW","keyCodes.DOWN_ARROW","keyCodes.INSERT","keyCodes.DELETE","keyCodes.F1","keyCodes.F2","keyCodes.F3","keyCodes.F4","keyCodes.F5","keyCodes.F6","keyCodes.F7","keyCodes.F8","keyCodes.F9","keyCodes.F10","keyCodes.F11","keyCodes.F12","keyCodes.META"],"mappings":"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"}
1
+ {"version":3,"file":"testing__testbed.js","sources":["../../../../../../src/cdk/testing/testbed/task-state-zone-interceptor.ts","../../../../../../src/cdk/testing/testbed/fake-events/event-objects.ts","../../../../../../src/cdk/testing/testbed/fake-events/dispatch-events.ts","../../../../../../src/cdk/testing/testbed/fake-events/element-focus.ts","../../../../../../src/cdk/testing/testbed/fake-events/type-in-element.ts","../../../../../../src/cdk/testing/testbed/fake-events/index.ts","../../../../../../src/cdk/testing/testbed/unit-test-element.ts","../../../../../../src/cdk/testing/testbed/testbed-harness-environment.ts","../../../../../../src/cdk/testing/testbed/public-api.ts","../../../../../../src/cdk/testing/testbed/index.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {BehaviorSubject, Observable} from 'rxjs';\nimport {ProxyZone, ProxyZoneStatic} from './proxy-zone-types';\n\n/** Current state of the intercepted zone. */\nexport interface TaskState {\n /** Whether the zone is stable (i.e. no microtasks and macrotasks). */\n stable: boolean;\n}\n\n/** Unique symbol that is used to patch a property to a proxy zone. */\nconst stateObservableSymbol = Symbol('ProxyZone_PATCHED#stateObservable');\n\n/** Type that describes a potentially patched proxy zone instance. */\ntype PatchedProxyZone = ProxyZone & {\n [stateObservableSymbol]: undefined|Observable<TaskState>;\n};\n\n/**\n * Interceptor that can be set up in a `ProxyZone` instance. The interceptor\n * will keep track of the task state and emit whenever the state changes.\n *\n * This serves as a workaround for https://github.com/angular/angular/issues/32896.\n */\nexport class TaskStateZoneInterceptor {\n /** Subject that can be used to emit a new state change. */\n private _stateSubject: BehaviorSubject<TaskState> = new BehaviorSubject<TaskState>(\n this._lastState ? this._getTaskStateFromInternalZoneState(this._lastState) : {stable: true});\n\n /** Public observable that emits whenever the task state changes. */\n readonly state: Observable<TaskState> = this._stateSubject;\n\n constructor(private _lastState: HasTaskState|null) {}\n\n /** This will be called whenever the task state changes in the intercepted zone. */\n onHasTask(delegate: ZoneDelegate, current: Zone, target: Zone, hasTaskState: HasTaskState) {\n if (current === target) {\n this._stateSubject.next(this._getTaskStateFromInternalZoneState(hasTaskState));\n }\n }\n\n /** Gets the task state from the internal ZoneJS task state. */\n private _getTaskStateFromInternalZoneState(state: HasTaskState): TaskState {\n return {stable: !state.macroTask && !state.microTask};\n }\n\n /**\n * Sets up the custom task state Zone interceptor in the `ProxyZone`. Throws if\n * no `ProxyZone` could be found.\n * @returns an observable that emits whenever the task state changes.\n */\n static setup(): Observable<TaskState> {\n if (Zone === undefined) {\n throw Error('Could not find ZoneJS. For test harnesses running in TestBed, ' +\n 'ZoneJS needs to be installed.');\n }\n\n // tslint:disable-next-line:variable-name\n const ProxyZoneSpec = (Zone as any)['ProxyZoneSpec'] as ProxyZoneStatic|undefined;\n\n // If there is no \"ProxyZoneSpec\" installed, we throw an error and recommend\n // setting up the proxy zone by pulling in the testing bundle.\n if (!ProxyZoneSpec) {\n throw Error(\n 'ProxyZoneSpec is needed for the test harnesses but could not be found. ' +\n 'Please make sure that your environment includes zone.js/dist/zone-testing.js');\n }\n\n // Ensure that there is a proxy zone instance set up, and get\n // a reference to the instance if present.\n const zoneSpec = ProxyZoneSpec.assertPresent() as PatchedProxyZone;\n\n // If there already is a delegate registered in the proxy zone, and it\n // is type of the custom task state interceptor, we just use that state\n // observable. This allows us to only intercept Zone once per test\n // (similar to how `fakeAsync` or `async` work).\n if (zoneSpec[stateObservableSymbol]) {\n return zoneSpec[stateObservableSymbol]!;\n }\n\n // Since we intercept on environment creation and the fixture has been\n // created before, we might have missed tasks scheduled before. Fortunately\n // the proxy zone keeps track of the previous task state, so we can just pass\n // this as initial state to the task zone interceptor.\n const interceptor = new TaskStateZoneInterceptor(zoneSpec.lastTaskState);\n const zoneSpecOnHasTask = zoneSpec.onHasTask.bind(zoneSpec);\n\n // We setup the task state interceptor in the `ProxyZone`. Note that we cannot register\n // the interceptor as a new proxy zone delegate because it would mean that other zone\n // delegates (e.g. `FakeAsyncTestZone` or `AsyncTestZone`) can accidentally overwrite/disable\n // our interceptor. Since we just intend to monitor the task state of the proxy zone, it is\n // sufficient to just patch the proxy zone. This also avoids that we interfere with the task\n // queue scheduling logic.\n zoneSpec.onHasTask = function(...args: [ZoneDelegate, Zone, Zone, HasTaskState]) {\n zoneSpecOnHasTask(...args);\n interceptor.onHasTask(...args);\n };\n\n return zoneSpec[stateObservableSymbol] = interceptor.state;\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {ModifierKeys} from '@angular/cdk/testing';\n\n/**\n * Creates a browser MouseEvent with the specified options.\n * @docs-private\n */\nexport function createMouseEvent(\n type: string, clientX = 0, clientY = 0, button = 0, modifiers: ModifierKeys = {}) {\n const event = document.createEvent('MouseEvent');\n const originalPreventDefault = event.preventDefault.bind(event);\n\n // Note: We cannot determine the position of the mouse event based on the screen\n // because the dimensions and position of the browser window are not available\n // To provide reasonable `screenX` and `screenY` coordinates, we simply use the\n // client coordinates as if the browser is opened in fullscreen.\n const screenX = clientX;\n const screenY = clientY;\n\n event.initMouseEvent(type,\n /* canBubble */ true,\n /* cancelable */ true,\n /* view */ window,\n /* detail */ 0,\n /* screenX */ screenX,\n /* screenY */ screenY,\n /* clientX */ clientX,\n /* clientY */ clientY,\n /* ctrlKey */ !!modifiers.control,\n /* altKey */ !!modifiers.alt,\n /* shiftKey */ !!modifiers.shift,\n /* metaKey */ !!modifiers.meta,\n /* button */ button,\n /* relatedTarget */ null);\n\n // `initMouseEvent` doesn't allow us to pass the `buttons` and\n // defaults it to 0 which looks like a fake event.\n defineReadonlyEventProperty(event, 'buttons', 1);\n\n // IE won't set `defaultPrevented` on synthetic events so we need to do it manually.\n event.preventDefault = function() {\n defineReadonlyEventProperty(event, 'defaultPrevented', true);\n return originalPreventDefault();\n };\n\n return event;\n}\n\n/**\n * Creates a browser `PointerEvent` with the specified options. Pointer events\n * by default will appear as if they are the primary pointer of their type.\n * https://www.w3.org/TR/pointerevents2/#dom-pointerevent-isprimary.\n *\n * For example, if pointer events for a multi-touch interaction are created, the non-primary\n * pointer touches would need to be represented by non-primary pointer events.\n *\n * @docs-private\n */\nexport function createPointerEvent(type: string, clientX = 0, clientY = 0,\n options: PointerEventInit = {isPrimary: true}) {\n return new PointerEvent(type, {\n bubbles: true,\n cancelable: true,\n view: window,\n clientX,\n clientY,\n ...options,\n });\n}\n\n/**\n * Creates a browser TouchEvent with the specified pointer coordinates.\n * @docs-private\n */\nexport function createTouchEvent(type: string, pageX = 0, pageY = 0) {\n // In favor of creating events that work for most of the browsers, the event is created\n // as a basic UI Event. The necessary details for the event will be set manually.\n const event = document.createEvent('UIEvent');\n const touchDetails = {pageX, pageY};\n\n // TS3.6 removes the initUIEvent method and suggests porting to \"new UIEvent()\".\n (event as any).initUIEvent(type, true, true, window, 0);\n\n // Most of the browsers don't have a \"initTouchEvent\" method that can be used to define\n // the touch details.\n defineReadonlyEventProperty(event, 'touches', [touchDetails]);\n defineReadonlyEventProperty(event, 'targetTouches', [touchDetails]);\n defineReadonlyEventProperty(event, 'changedTouches', [touchDetails]);\n\n return event;\n}\n\n/**\n * Creates a keyboard event with the specified key and modifiers.\n * @docs-private\n */\nexport function createKeyboardEvent(type: string, keyCode: number = 0, key: string = '',\n modifiers: ModifierKeys = {}) {\n const event = document.createEvent('KeyboardEvent');\n const originalPreventDefault = event.preventDefault.bind(event);\n\n // Firefox does not support `initKeyboardEvent`, but supports `initKeyEvent`.\n // https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/initKeyEvent.\n if ((event as any).initKeyEvent !== undefined) {\n (event as any).initKeyEvent(type, true, true, window, modifiers.control, modifiers.alt,\n modifiers.shift, modifiers.meta, keyCode);\n } else {\n // `initKeyboardEvent` expects to receive modifiers as a whitespace-delimited string\n // See https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/initKeyboardEvent\n let modifiersList = '';\n\n if (modifiers.control) {\n modifiersList += 'Control ';\n }\n\n if (modifiers.alt) {\n modifiersList += 'Alt ';\n }\n\n if (modifiers.shift) {\n modifiersList += 'Shift ';\n }\n\n if (modifiers.meta) {\n modifiersList += 'Meta ';\n }\n\n // TS3.6 removed the `initKeyboardEvent` method and suggested porting to\n // `new KeyboardEvent()` constructor. We cannot use that as we support IE11.\n // https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/initKeyboardEvent.\n (event as any).initKeyboardEvent(type,\n true, /* canBubble */\n true, /* cancelable */\n window, /* view */\n 0, /* char */\n key, /* key */\n 0, /* location */\n modifiersList.trim(), /* modifiersList */\n false /* repeat */);\n }\n\n // Webkit Browsers don't set the keyCode when calling the init function.\n // See related bug https://bugs.webkit.org/show_bug.cgi?id=16735\n defineReadonlyEventProperty(event, 'keyCode', keyCode);\n defineReadonlyEventProperty(event, 'key', key);\n defineReadonlyEventProperty(event, 'ctrlKey', !!modifiers.control);\n defineReadonlyEventProperty(event, 'altKey', !!modifiers.alt);\n defineReadonlyEventProperty(event, 'shiftKey', !!modifiers.shift);\n defineReadonlyEventProperty(event, 'metaKey', !!modifiers.meta);\n\n // IE won't set `defaultPrevented` on synthetic events so we need to do it manually.\n event.preventDefault = function() {\n defineReadonlyEventProperty(event, 'defaultPrevented', true);\n return originalPreventDefault();\n };\n\n return event;\n}\n\n/**\n * Creates a fake event object with any desired event type.\n * @docs-private\n */\nexport function createFakeEvent(type: string, canBubble = false, cancelable = true) {\n const event = document.createEvent('Event');\n event.initEvent(type, canBubble, cancelable);\n return event;\n}\n\n/**\n * Defines a readonly property on the given event object. Readonly properties on an event object\n * are always set as configurable as that matches default readonly properties for DOM event objects.\n */\nfunction defineReadonlyEventProperty(event: Event, propertyName: string, value: any) {\n Object.defineProperty(event, propertyName, {get: () => value, configurable: true});\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {ModifierKeys} from '@angular/cdk/testing';\nimport {\n createFakeEvent,\n createKeyboardEvent,\n createMouseEvent,\n createPointerEvent,\n createTouchEvent,\n} from './event-objects';\n\n/**\n * Utility to dispatch any event on a Node.\n * @docs-private\n */\nexport function dispatchEvent<T extends Event>(node: Node | Window, event: T): T {\n node.dispatchEvent(event);\n return event;\n}\n\n/**\n * Shorthand to dispatch a fake event on a specified node.\n * @docs-private\n */\nexport function dispatchFakeEvent(node: Node | Window, type: string, canBubble?: boolean): Event {\n return dispatchEvent(node, createFakeEvent(type, canBubble));\n}\n\n/**\n * Shorthand to dispatch a keyboard event with a specified key code and\n * optional modifiers.\n * @docs-private\n */\nexport function dispatchKeyboardEvent(node: Node, type: string, keyCode?: number, key?: string,\n modifiers?: ModifierKeys): KeyboardEvent {\n return dispatchEvent(node,\n createKeyboardEvent(type, keyCode, key, modifiers));\n}\n\n/**\n * Shorthand to dispatch a mouse event on the specified coordinates.\n * @docs-private\n */\nexport function dispatchMouseEvent( node: Node, type: string, clientX = 0, clientY = 0,\n button?: number, modifiers?: ModifierKeys): MouseEvent {\n return dispatchEvent(node, createMouseEvent(type, clientX, clientY, button, modifiers));\n}\n\n/**\n * Shorthand to dispatch a pointer event on the specified coordinates.\n * @docs-private\n */\nexport function dispatchPointerEvent(node: Node, type: string, clientX = 0, clientY = 0,\n options?: PointerEventInit): PointerEvent {\n return dispatchEvent(node, createPointerEvent(type, clientX, clientY, options)) as PointerEvent;\n}\n\n/**\n * Shorthand to dispatch a touch event on the specified coordinates.\n * @docs-private\n */\nexport function dispatchTouchEvent(node: Node, type: string, x = 0, y = 0) {\n return dispatchEvent(node, createTouchEvent(type, x, y));\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {dispatchFakeEvent} from './dispatch-events';\n\nfunction triggerFocusChange(element: HTMLElement, event: 'focus' | 'blur') {\n let eventFired = false;\n const handler = () => eventFired = true;\n element.addEventListener(event, handler);\n element[event]();\n element.removeEventListener(event, handler);\n if (!eventFired) {\n dispatchFakeEvent(element, event);\n }\n}\n\n/**\n * Patches an elements focus and blur methods to emit events consistently and predictably.\n * This is necessary, because some browsers, like IE11, will call the focus handlers asynchronously,\n * while others won't fire them at all if the browser window is not focused.\n * @docs-private\n */\nexport function patchElementFocus(element: HTMLElement) {\n element.focus = () => dispatchFakeEvent(element, 'focus');\n element.blur = () => dispatchFakeEvent(element, 'blur');\n}\n\n/** @docs-private */\nexport function triggerFocus(element: HTMLElement) {\n triggerFocusChange(element, 'focus');\n}\n\n/** @docs-private */\nexport function triggerBlur(element: HTMLElement) {\n triggerFocusChange(element, 'blur');\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {ModifierKeys} from '@angular/cdk/testing';\nimport {PERIOD} from '@angular/cdk/keycodes';\nimport {dispatchFakeEvent, dispatchKeyboardEvent} from './dispatch-events';\nimport {triggerFocus} from './element-focus';\n\n/** Input types for which the value can be entered incrementally. */\nconst incrementalInputTypes =\n new Set(['text', 'email', 'hidden', 'password', 'search', 'tel', 'url']);\n\n/**\n * Checks whether the given Element is a text input element.\n * @docs-private\n */\nexport function isTextInput(element: Element): element is HTMLInputElement | HTMLTextAreaElement {\n const nodeName = element.nodeName.toLowerCase();\n return nodeName === 'input' || nodeName === 'textarea';\n}\n\n/**\n * Focuses an input, sets its value and dispatches\n * the `input` event, simulating the user typing.\n * @param element Element onto which to set the value.\n * @param keys The keys to send to the element.\n * @docs-private\n */\nexport function typeInElement(\n element: HTMLElement, ...keys: (string | {keyCode?: number, key?: string})[]): void;\n\n/**\n * Focuses an input, sets its value and dispatches\n * the `input` event, simulating the user typing.\n * @param element Element onto which to set the value.\n * @param modifiers Modifier keys that are held while typing.\n * @param keys The keys to send to the element.\n * @docs-private\n */\nexport function typeInElement(element: HTMLElement, modifiers: ModifierKeys,\n ...keys: (string | {keyCode?: number, key?: string})[]): void;\n\nexport function typeInElement(element: HTMLElement, ...modifiersAndKeys: any) {\n const first = modifiersAndKeys[0];\n let modifiers: ModifierKeys;\n let rest: (string | {keyCode?: number, key?: string})[];\n if (typeof first !== 'string' && first.keyCode === undefined && first.key === undefined) {\n modifiers = first;\n rest = modifiersAndKeys.slice(1);\n } else {\n modifiers = {};\n rest = modifiersAndKeys;\n }\n const isInput = isTextInput(element);\n const inputType = element.getAttribute('type') || 'text';\n const keys: {keyCode?: number, key?: string}[] = rest\n .map(k => typeof k === 'string' ?\n k.split('').map(c => ({keyCode: c.toUpperCase().charCodeAt(0), key: c})) : [k])\n .reduce((arr, k) => arr.concat(k), []);\n\n // We simulate the user typing in a value by incrementally assigning the value below. The problem\n // is that for some input types, the browser won't allow for an invalid value to be set via the\n // `value` property which will always be the case when going character-by-character. If we detect\n // such an input, we have to set the value all at once or listeners to the `input` event (e.g.\n // the `ReactiveFormsModule` uses such an approach) won't receive the correct value.\n const enterValueIncrementally = inputType === 'number' && keys.length > 0 ?\n // The value can be set character by character in number inputs if it doesn't have any decimals.\n keys.every(key => key.key !== '.' && key.keyCode !== PERIOD) :\n incrementalInputTypes.has(inputType);\n\n triggerFocus(element);\n\n // When we aren't entering the value incrementally, assign it all at once ahead\n // of time so that any listeners to the key events below will have access to it.\n if (!enterValueIncrementally) {\n (element as HTMLInputElement).value = keys.reduce((value, key) => value + (key.key || ''), '');\n }\n\n for (const key of keys) {\n dispatchKeyboardEvent(element, 'keydown', key.keyCode, key.key, modifiers);\n dispatchKeyboardEvent(element, 'keypress', key.keyCode, key.key, modifiers);\n if (isInput && key.key && key.key.length === 1) {\n if (enterValueIncrementally) {\n (element as HTMLInputElement | HTMLTextAreaElement).value += key.key;\n dispatchFakeEvent(element, 'input');\n }\n }\n dispatchKeyboardEvent(element, 'keyup', key.keyCode, key.key, modifiers);\n }\n\n // Since we weren't dispatching `input` events while sending the keys, we have to do it now.\n if (!enterValueIncrementally) {\n dispatchFakeEvent(element, 'input');\n }\n}\n\n/**\n * Clears the text in an input or textarea element.\n * @docs-private\n */\nexport function clearElement(element: HTMLInputElement | HTMLTextAreaElement) {\n triggerFocus(element as HTMLElement);\n element.value = '';\n dispatchFakeEvent(element, 'input');\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n// These are private APIs that are used both by the public APIs inside of this package, as well\n// as in unit tests of other entry-points, hence why we need to re-export them through here.\nexport * from './dispatch-events';\nexport * from './event-objects';\nexport * from './element-focus';\nexport * from './type-in-element';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport * as keyCodes from '@angular/cdk/keycodes';\nimport {\n _getTextWithExcludedElements,\n ElementDimensions,\n ModifierKeys,\n TestElement,\n TestKey,\n TextOptions,\n EventData,\n} from '@angular/cdk/testing';\nimport {\n clearElement,\n createFakeEvent,\n dispatchFakeEvent,\n dispatchMouseEvent,\n dispatchPointerEvent,\n isTextInput,\n triggerBlur,\n triggerFocus,\n typeInElement,\n dispatchEvent,\n} from './fake-events';\n\n/** Maps `TestKey` constants to the `keyCode` and `key` values used by native browser events. */\nconst keyMap = {\n [TestKey.BACKSPACE]: {keyCode: keyCodes.BACKSPACE, key: 'Backspace'},\n [TestKey.TAB]: {keyCode: keyCodes.TAB, key: 'Tab'},\n [TestKey.ENTER]: {keyCode: keyCodes.ENTER, key: 'Enter'},\n [TestKey.SHIFT]: {keyCode: keyCodes.SHIFT, key: 'Shift'},\n [TestKey.CONTROL]: {keyCode: keyCodes.CONTROL, key: 'Control'},\n [TestKey.ALT]: {keyCode: keyCodes.ALT, key: 'Alt'},\n [TestKey.ESCAPE]: {keyCode: keyCodes.ESCAPE, key: 'Escape'},\n [TestKey.PAGE_UP]: {keyCode: keyCodes.PAGE_UP, key: 'PageUp'},\n [TestKey.PAGE_DOWN]: {keyCode: keyCodes.PAGE_DOWN, key: 'PageDown'},\n [TestKey.END]: {keyCode: keyCodes.END, key: 'End'},\n [TestKey.HOME]: {keyCode: keyCodes.HOME, key: 'Home'},\n [TestKey.LEFT_ARROW]: {keyCode: keyCodes.LEFT_ARROW, key: 'ArrowLeft'},\n [TestKey.UP_ARROW]: {keyCode: keyCodes.UP_ARROW, key: 'ArrowUp'},\n [TestKey.RIGHT_ARROW]: {keyCode: keyCodes.RIGHT_ARROW, key: 'ArrowRight'},\n [TestKey.DOWN_ARROW]: {keyCode: keyCodes.DOWN_ARROW, key: 'ArrowDown'},\n [TestKey.INSERT]: {keyCode: keyCodes.INSERT, key: 'Insert'},\n [TestKey.DELETE]: {keyCode: keyCodes.DELETE, key: 'Delete'},\n [TestKey.F1]: {keyCode: keyCodes.F1, key: 'F1'},\n [TestKey.F2]: {keyCode: keyCodes.F2, key: 'F2'},\n [TestKey.F3]: {keyCode: keyCodes.F3, key: 'F3'},\n [TestKey.F4]: {keyCode: keyCodes.F4, key: 'F4'},\n [TestKey.F5]: {keyCode: keyCodes.F5, key: 'F5'},\n [TestKey.F6]: {keyCode: keyCodes.F6, key: 'F6'},\n [TestKey.F7]: {keyCode: keyCodes.F7, key: 'F7'},\n [TestKey.F8]: {keyCode: keyCodes.F8, key: 'F8'},\n [TestKey.F9]: {keyCode: keyCodes.F9, key: 'F9'},\n [TestKey.F10]: {keyCode: keyCodes.F10, key: 'F10'},\n [TestKey.F11]: {keyCode: keyCodes.F11, key: 'F11'},\n [TestKey.F12]: {keyCode: keyCodes.F12, key: 'F12'},\n [TestKey.META]: {keyCode: keyCodes.META, key: 'Meta'}\n};\n\n/** A `TestElement` implementation for unit tests. */\nexport class UnitTestElement implements TestElement {\n constructor(readonly element: Element, private _stabilize: () => Promise<void>) {}\n\n async blur(): Promise<void> {\n triggerBlur(this.element as HTMLElement);\n await this._stabilize();\n }\n\n async clear(): Promise<void> {\n if (!isTextInput(this.element)) {\n throw Error('Attempting to clear an invalid element');\n }\n clearElement(this.element);\n await this._stabilize();\n }\n\n async click(...args: [ModifierKeys?] | ['center', ModifierKeys?] |\n [number, number, ModifierKeys?]): Promise<void> {\n await this._dispatchMouseEventSequence('click', args, 0);\n await this._stabilize();\n }\n\n async rightClick(...args: [ModifierKeys?] | ['center', ModifierKeys?] |\n [number, number, ModifierKeys?]): Promise<void> {\n await this._dispatchMouseEventSequence('contextmenu', args, 2);\n await this._stabilize();\n }\n\n async focus(): Promise<void> {\n triggerFocus(this.element as HTMLElement);\n await this._stabilize();\n }\n\n async getCssValue(property: string): Promise<string> {\n await this._stabilize();\n // TODO(mmalerba): Consider adding value normalization if we run into common cases where its\n // needed.\n return getComputedStyle(this.element).getPropertyValue(property);\n }\n\n async hover(): Promise<void> {\n this._dispatchPointerEventIfSupported('pointerenter');\n dispatchMouseEvent(this.element, 'mouseenter');\n await this._stabilize();\n }\n\n async mouseAway(): Promise<void> {\n this._dispatchPointerEventIfSupported('pointerleave');\n dispatchMouseEvent(this.element, 'mouseleave');\n await this._stabilize();\n }\n\n async sendKeys(...keys: (string | TestKey)[]): Promise<void>;\n async sendKeys(modifiers: ModifierKeys, ...keys: (string | TestKey)[]): Promise<void>;\n async sendKeys(...modifiersAndKeys: any[]): Promise<void> {\n const args = modifiersAndKeys.map(k => typeof k === 'number' ? keyMap[k as TestKey] : k);\n typeInElement(this.element as HTMLElement, ...args);\n await this._stabilize();\n }\n\n async text(options?: TextOptions): Promise<string> {\n await this._stabilize();\n if (options?.exclude) {\n return _getTextWithExcludedElements(this.element, options.exclude);\n }\n return (this.element.textContent || '').trim();\n }\n\n async getAttribute(name: string): Promise<string|null> {\n await this._stabilize();\n return this.element.getAttribute(name);\n }\n\n async hasClass(name: string): Promise<boolean> {\n await this._stabilize();\n return this.element.classList.contains(name);\n }\n\n async getDimensions(): Promise<ElementDimensions> {\n await this._stabilize();\n return this.element.getBoundingClientRect();\n }\n\n async getProperty(name: string): Promise<any> {\n await this._stabilize();\n return (this.element as any)[name];\n }\n\n async setInputValue(value: string): Promise<void> {\n (this.element as any).value = value;\n await this._stabilize();\n }\n\n async selectOptions(...optionIndexes: number[]): Promise<void> {\n let hasChanged = false;\n const options = this.element.querySelectorAll('option');\n const indexes = new Set(optionIndexes); // Convert to a set to remove duplicates.\n\n for (let i = 0; i < options.length; i++) {\n const option = options[i];\n const wasSelected = option.selected;\n\n // We have to go through `option.selected`, because `HTMLSelectElement.value` doesn't\n // allow for multiple options to be selected, even in `multiple` mode.\n option.selected = indexes.has(i);\n\n if (option.selected !== wasSelected) {\n hasChanged = true;\n dispatchFakeEvent(this.element, 'change');\n }\n }\n\n if (hasChanged) {\n await this._stabilize();\n }\n }\n\n async matchesSelector(selector: string): Promise<boolean> {\n await this._stabilize();\n const elementPrototype = Element.prototype as any;\n return (elementPrototype['matches'] || elementPrototype['msMatchesSelector'])\n .call(this.element, selector);\n }\n\n async isFocused(): Promise<boolean> {\n await this._stabilize();\n return document.activeElement === this.element;\n }\n\n async dispatchEvent(name: string, data?: Record<string, EventData>): Promise<void> {\n const event = createFakeEvent(name);\n\n if (data) {\n // tslint:disable-next-line:ban Have to use `Object.assign` to preserve the original object.\n Object.assign(event, data);\n }\n\n dispatchEvent(this.element, event);\n await this._stabilize();\n }\n\n /**\n * Dispatches a pointer event on the current element if the browser supports it.\n * @param name Name of the pointer event to be dispatched.\n * @param clientX Coordinate of the user's pointer along the X axis.\n * @param clientY Coordinate of the user's pointer along the Y axis.\n * @param button Mouse button that should be pressed when dispatching the event.\n */\n private _dispatchPointerEventIfSupported(\n name: string, clientX?: number, clientY?: number, button?: number) {\n // The latest versions of all browsers we support have the new `PointerEvent` API.\n // Though since we capture the two most recent versions of these browsers, we also\n // need to support Safari 12 at time of writing. Safari 12 does not have support for this,\n // so we need to conditionally create and dispatch these events based on feature detection.\n if (typeof PointerEvent !== 'undefined' && PointerEvent) {\n dispatchPointerEvent(this.element, name, clientX, clientY, {isPrimary: true, button});\n }\n }\n\n /** Dispatches all the events that are part of a mouse event sequence. */\n private async _dispatchMouseEventSequence(\n name: string,\n args: [ModifierKeys?] | ['center', ModifierKeys?] | [number, number, ModifierKeys?],\n button?: number) {\n let clientX: number | undefined = undefined;\n let clientY: number | undefined = undefined;\n let modifiers: ModifierKeys = {};\n\n if (args.length && typeof args[args.length - 1] === 'object') {\n modifiers = args.pop() as ModifierKeys;\n }\n\n if (args.length) {\n const {left, top, width, height} = await this.getDimensions();\n const relativeX = args[0] === 'center' ? width / 2 : args[0] as number;\n const relativeY = args[0] === 'center' ? height / 2 : args[1] as number;\n\n // Round the computed click position as decimal pixels are not\n // supported by mouse events and could lead to unexpected results.\n clientX = Math.round(left + relativeX);\n clientY = Math.round(top + relativeY);\n }\n\n this._dispatchPointerEventIfSupported('pointerdown', clientX, clientY, button);\n dispatchMouseEvent(this.element, 'mousedown', clientX, clientY, button, modifiers);\n this._dispatchPointerEventIfSupported('pointerup', clientX, clientY, button);\n dispatchMouseEvent(this.element, 'mouseup', clientX, clientY, button, modifiers);\n dispatchMouseEvent(this.element, name, clientX, clientY, button, modifiers);\n\n // This call to _stabilize should not be needed since the callers will already do that them-\n // selves. Nevertheless it breaks some tests in g3 without it. It needs to be investigated\n // why removing breaks those tests.\n await this._stabilize();\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {\n ComponentHarness,\n ComponentHarnessConstructor,\n handleAutoChangeDetectionStatus,\n HarnessEnvironment,\n HarnessLoader,\n stopHandlingAutoChangeDetectionStatus,\n TestElement\n} from '@angular/cdk/testing';\nimport {ComponentFixture, flush} from '@angular/core/testing';\nimport {Observable} from 'rxjs';\nimport {takeWhile} from 'rxjs/operators';\nimport {TaskState, TaskStateZoneInterceptor} from './task-state-zone-interceptor';\nimport {UnitTestElement} from './unit-test-element';\n\n/** Options to configure the environment. */\nexport interface TestbedHarnessEnvironmentOptions {\n /** The query function used to find DOM elements. */\n queryFn: (selector: string, root: Element) => Iterable<Element> | ArrayLike<Element>;\n}\n\n/** The default environment options. */\nconst defaultEnvironmentOptions: TestbedHarnessEnvironmentOptions = {\n queryFn: (selector: string, root: Element) => root.querySelectorAll(selector)\n};\n\n/** Whether auto change detection is currently disabled. */\nlet disableAutoChangeDetection = false;\n\n/**\n * The set of non-destroyed fixtures currently being used by `TestbedHarnessEnvironment` instances.\n */\nconst activeFixtures = new Set<ComponentFixture<unknown>>();\n\n/**\n * Installs a handler for change detection batching status changes for a specific fixture.\n * @param fixture The fixture to handle change detection batching for.\n */\nfunction installAutoChangeDetectionStatusHandler(fixture: ComponentFixture<unknown>) {\n if (!activeFixtures.size) {\n handleAutoChangeDetectionStatus(({isDisabled, onDetectChangesNow}) => {\n disableAutoChangeDetection = isDisabled;\n if (onDetectChangesNow) {\n Promise.all(Array.from(activeFixtures).map(detectChanges)).then(onDetectChangesNow);\n }\n });\n }\n activeFixtures.add(fixture);\n}\n\n/**\n * Uninstalls a handler for change detection batching status changes for a specific fixture.\n * @param fixture The fixture to stop handling change detection batching for.\n */\nfunction uninstallAutoChangeDetectionStatusHandler(fixture: ComponentFixture<unknown>) {\n activeFixtures.delete(fixture);\n if (!activeFixtures.size) {\n stopHandlingAutoChangeDetectionStatus();\n }\n}\n\n/** Whether we are currently in the fake async zone. */\nfunction isInFakeAsyncZone() {\n return Zone!.current.get('FakeAsyncTestZoneSpec') != null;\n}\n\n/**\n * Triggers change detection for a specific fixture.\n * @param fixture The fixture to trigger change detection for.\n */\nasync function detectChanges(fixture: ComponentFixture<unknown>) {\n fixture.detectChanges();\n if (isInFakeAsyncZone()) {\n flush();\n } else {\n await fixture.whenStable();\n }\n}\n\n/** A `HarnessEnvironment` implementation for Angular's Testbed. */\nexport class TestbedHarnessEnvironment extends HarnessEnvironment<Element> {\n /** Whether the environment has been destroyed. */\n private _destroyed = false;\n\n /** Observable that emits whenever the test task state changes. */\n private _taskState: Observable<TaskState>;\n\n /** The options for this environment. */\n private _options: TestbedHarnessEnvironmentOptions;\n\n protected constructor(rawRootElement: Element, private _fixture: ComponentFixture<unknown>,\n options?: TestbedHarnessEnvironmentOptions) {\n super(rawRootElement);\n this._options = {...defaultEnvironmentOptions, ...options};\n this._taskState = TaskStateZoneInterceptor.setup();\n installAutoChangeDetectionStatusHandler(_fixture);\n _fixture.componentRef.onDestroy(() => {\n uninstallAutoChangeDetectionStatusHandler(_fixture);\n this._destroyed = true;\n });\n }\n\n /** Creates a `HarnessLoader` rooted at the given fixture's root element. */\n static loader(fixture: ComponentFixture<unknown>, options?: TestbedHarnessEnvironmentOptions):\n HarnessLoader {\n return new TestbedHarnessEnvironment(fixture.nativeElement, fixture, options);\n }\n\n /**\n * Creates a `HarnessLoader` at the document root. This can be used if harnesses are\n * located outside of a fixture (e.g. overlays appended to the document body).\n */\n static documentRootLoader(fixture: ComponentFixture<unknown>,\n options?: TestbedHarnessEnvironmentOptions): HarnessLoader {\n return new TestbedHarnessEnvironment(document.body, fixture, options);\n }\n\n /** Gets the native DOM element corresponding to the given TestElement. */\n static getNativeElement(el: TestElement): Element {\n if (el instanceof UnitTestElement) {\n return el.element;\n }\n throw Error('This TestElement was not created by the TestbedHarnessEnvironment');\n }\n\n /**\n * Creates an instance of the given harness type, using the fixture's root element as the\n * harness's host element. This method should be used when creating a harness for the root element\n * of a fixture, as components do not have the correct selector when they are created as the root\n * of the fixture.\n */\n static async harnessForFixture<T extends ComponentHarness>(\n fixture: ComponentFixture<unknown>, harnessType: ComponentHarnessConstructor<T>,\n options?: TestbedHarnessEnvironmentOptions): Promise<T> {\n const environment = new TestbedHarnessEnvironment(fixture.nativeElement, fixture, options);\n await environment.forceStabilize();\n return environment.createComponentHarness(harnessType, fixture.nativeElement);\n }\n\n async forceStabilize(): Promise<void> {\n if (!disableAutoChangeDetection) {\n if (this._destroyed) {\n throw Error('Harness is attempting to use a fixture that has already been destroyed.');\n }\n\n await detectChanges(this._fixture);\n }\n }\n\n async waitForTasksOutsideAngular(): Promise<void> {\n // If we run in the fake async zone, we run \"flush\" to run any scheduled tasks. This\n // ensures that the harnesses behave inside of the FakeAsyncTestZone similar to the\n // \"AsyncTestZone\" and the root zone (i.e. neither fakeAsync or async). Note that we\n // cannot just rely on the task state observable to become stable because the state will\n // never change. This is because the task queue will be only drained if the fake async\n // zone is being flushed.\n if (isInFakeAsyncZone()) {\n flush();\n }\n\n // Wait until the task queue has been drained and the zone is stable. Note that\n // we cannot rely on \"fixture.whenStable\" since it does not catch tasks scheduled\n // outside of the Angular zone. For test harnesses, we want to ensure that the\n // app is fully stabilized and therefore need to use our own zone interceptor.\n await this._taskState.pipe(takeWhile(state => !state.stable)).toPromise();\n }\n\n protected getDocumentRoot(): Element {\n return document.body;\n }\n\n protected createTestElement(element: Element): TestElement {\n return new UnitTestElement(element, () => this.forceStabilize());\n }\n\n protected createEnvironment(element: Element): HarnessEnvironment<Element> {\n return new TestbedHarnessEnvironment(element, this._fixture, this._options);\n }\n\n protected async getAllRawElements(selector: string): Promise<Element[]> {\n await this.forceStabilize();\n return Array.from(this._options.queryFn(selector, this.rawRootElement));\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './testbed-harness-environment';\nexport * from './unit-test-element';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './public-api';\n"],"names":["keyCodes.BACKSPACE","keyCodes.TAB","keyCodes.ENTER","keyCodes.SHIFT","keyCodes.CONTROL","keyCodes.ALT","keyCodes.ESCAPE","keyCodes.PAGE_UP","keyCodes.PAGE_DOWN","keyCodes.END","keyCodes.HOME","keyCodes.LEFT_ARROW","keyCodes.UP_ARROW","keyCodes.RIGHT_ARROW","keyCodes.DOWN_ARROW","keyCodes.INSERT","keyCodes.DELETE","keyCodes.F1","keyCodes.F2","keyCodes.F3","keyCodes.F4","keyCodes.F5","keyCodes.F6","keyCodes.F7","keyCodes.F8","keyCodes.F9","keyCodes.F10","keyCodes.F11","keyCodes.F12","keyCodes.META"],"mappings":"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"}
@@ -52,7 +52,7 @@ function batchChangeDetection(fn, triggerBeforeAndAfter) {
52
52
  }
53
53
  // If nothing is handling change detection batching, install the default handler.
54
54
  if (!autoChangeDetectionSubscription) {
55
- autoChangeDetectionSubject.subscribe(defaultAutoChangeDetectionHandler);
55
+ handleAutoChangeDetectionStatus(defaultAutoChangeDetectionHandler);
56
56
  }
57
57
  if (triggerBeforeAndAfter) {
58
58
  yield new Promise(resolve => autoChangeDetectionSubject.next({