@angular/compiler 15.0.0-next.4 → 15.0.0-next.6

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.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v15.0.0-next.4
2
+ * @license Angular v15.0.0-next.6
3
3
  * (c) 2010-2022 Google LLC. https://angular.io/
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v15.0.0-next.4
2
+ * @license Angular v15.0.0-next.6
3
3
  * (c) 2010-2022 Google LLC. https://angular.io/
4
4
  * License: MIT
5
5
  */
@@ -7691,7 +7691,26 @@ class BuiltinFunctionCall extends Call {
7691
7691
  * found in the LICENSE file at https://angular.io/license
7692
7692
  */
7693
7693
  /**
7694
- * This file is a port of shadowCSS from webcomponents.js to TypeScript.
7694
+ * The following set contains all keywords that can be used in the animation css shorthand
7695
+ * property and is used during the scoping of keyframes to make sure such keywords
7696
+ * are not modified.
7697
+ */
7698
+ const animationKeywords = new Set([
7699
+ // global values
7700
+ 'inherit', 'initial', 'revert', 'unset',
7701
+ // animation-direction
7702
+ 'alternate', 'alternate-reverse', 'normal', 'reverse',
7703
+ // animation-fill-mode
7704
+ 'backwards', 'both', 'forwards', 'none',
7705
+ // animation-play-state
7706
+ 'paused', 'running',
7707
+ // animation-timing-function
7708
+ 'ease', 'ease-in', 'ease-in-out', 'ease-out', 'linear', 'step-start', 'step-end',
7709
+ // `steps()` function
7710
+ 'end', 'jump-both', 'jump-end', 'jump-none', 'jump-start', 'start'
7711
+ ]);
7712
+ /**
7713
+ * The following class is a port of shadowCSS from webcomponents.js to TypeScript.
7695
7714
  *
7696
7715
  * Please make sure to keep to edits in sync with the source file.
7697
7716
  *
@@ -7817,6 +7836,21 @@ class BuiltinFunctionCall extends Call {
7817
7836
  class ShadowCss {
7818
7837
  constructor() {
7819
7838
  this.strictStyling = true;
7839
+ /**
7840
+ * Regular expression used to extrapolate the possible keyframes from an
7841
+ * animation declaration (with possibly multiple animation definitions)
7842
+ *
7843
+ * The regular expression can be divided in three parts
7844
+ * - (^|\s+)
7845
+ * simply captures how many (if any) leading whitespaces are present
7846
+ * - (?:(?:(['"])((?:\\\\|\\\2|(?!\2).)+)\2)|(-?[A-Za-z][\w\-]*))
7847
+ * captures two different possible keyframes, ones which are quoted or ones which are valid css
7848
+ * idents (custom properties excluded)
7849
+ * - (?=[,\s;]|$)
7850
+ * simply matches the end of the possible keyframe, valid endings are: a comma, a space, a
7851
+ * semicolon or the end of the string
7852
+ */
7853
+ this._animationDeclarationKeyframesRe = /(^|\s+)(?:(?:(['"])((?:\\\\|\\\2|(?!\2).)+)\2)|(-?[A-Za-z][\w\-]*))(?=[,\s]|$)/g;
7820
7854
  }
7821
7855
  /*
7822
7856
  * Shim some cssText with the given selector. Returns cssText that can
@@ -7837,6 +7871,143 @@ class ShadowCss {
7837
7871
  cssText = this._insertPolyfillDirectivesInCssText(cssText);
7838
7872
  return this._insertPolyfillRulesInCssText(cssText);
7839
7873
  }
7874
+ /**
7875
+ * Process styles to add scope to keyframes.
7876
+ *
7877
+ * Modify both the names of the keyframes defined in the component styles and also the css
7878
+ * animation rules using them.
7879
+ *
7880
+ * Animation rules using keyframes defined elsewhere are not modified to allow for globally
7881
+ * defined keyframes.
7882
+ *
7883
+ * For example, we convert this css:
7884
+ *
7885
+ * ```
7886
+ * .box {
7887
+ * animation: box-animation 1s forwards;
7888
+ * }
7889
+ *
7890
+ * @keyframes box-animation {
7891
+ * to {
7892
+ * background-color: green;
7893
+ * }
7894
+ * }
7895
+ * ```
7896
+ *
7897
+ * to this:
7898
+ *
7899
+ * ```
7900
+ * .box {
7901
+ * animation: scopeName_box-animation 1s forwards;
7902
+ * }
7903
+ *
7904
+ * @keyframes scopeName_box-animation {
7905
+ * to {
7906
+ * background-color: green;
7907
+ * }
7908
+ * }
7909
+ * ```
7910
+ *
7911
+ * @param cssText the component's css text that needs to be scoped.
7912
+ * @param scopeSelector the component's scope selector.
7913
+ *
7914
+ * @returns the scoped css text.
7915
+ */
7916
+ _scopeKeyframesRelatedCss(cssText, scopeSelector) {
7917
+ const unscopedKeyframesSet = new Set();
7918
+ const scopedKeyframesCssText = processRules(cssText, rule => this._scopeLocalKeyframeDeclarations(rule, scopeSelector, unscopedKeyframesSet));
7919
+ return processRules(scopedKeyframesCssText, rule => this._scopeAnimationRule(rule, scopeSelector, unscopedKeyframesSet));
7920
+ }
7921
+ /**
7922
+ * Scopes local keyframes names, returning the updated css rule and it also
7923
+ * adds the original keyframe name to a provided set to collect all keyframes names
7924
+ * so that it can later be used to scope the animation rules.
7925
+ *
7926
+ * For example, it takes a rule such as:
7927
+ *
7928
+ * ```
7929
+ * @keyframes box-animation {
7930
+ * to {
7931
+ * background-color: green;
7932
+ * }
7933
+ * }
7934
+ * ```
7935
+ *
7936
+ * and returns:
7937
+ *
7938
+ * ```
7939
+ * @keyframes scopeName_box-animation {
7940
+ * to {
7941
+ * background-color: green;
7942
+ * }
7943
+ * }
7944
+ * ```
7945
+ * and as a side effect it adds "box-animation" to the `unscopedKeyframesSet` set
7946
+ *
7947
+ * @param cssRule the css rule to process.
7948
+ * @param scopeSelector the component's scope selector.
7949
+ * @param unscopedKeyframesSet the set of unscoped keyframes names (which can be
7950
+ * modified as a side effect)
7951
+ *
7952
+ * @returns the css rule modified with the scoped keyframes name.
7953
+ */
7954
+ _scopeLocalKeyframeDeclarations(rule, scopeSelector, unscopedKeyframesSet) {
7955
+ return {
7956
+ ...rule,
7957
+ selector: rule.selector.replace(/(^@(?:-webkit-)?keyframes(?:\s+))(['"]?)(.+)\2(\s*)$/, (_, start, quote, keyframeName, endSpaces) => {
7958
+ unscopedKeyframesSet.add(unescapeQuotes(keyframeName, quote));
7959
+ return `${start}${quote}${scopeSelector}_${keyframeName}${quote}${endSpaces}`;
7960
+ }),
7961
+ };
7962
+ }
7963
+ /**
7964
+ * Function used to scope a keyframes name (obtained from an animation declaration)
7965
+ * using an existing set of unscopedKeyframes names to discern if the scoping needs to be
7966
+ * performed (keyframes names of keyframes not defined in the component's css need not to be
7967
+ * scoped).
7968
+ *
7969
+ * @param keyframe the keyframes name to check.
7970
+ * @param scopeSelector the component's scope selector.
7971
+ * @param unscopedKeyframesSet the set of unscoped keyframes names.
7972
+ *
7973
+ * @returns the scoped name of the keyframe, or the original name is the name need not to be
7974
+ * scoped.
7975
+ */
7976
+ _scopeAnimationKeyframe(keyframe, scopeSelector, unscopedKeyframesSet) {
7977
+ return keyframe.replace(/^(\s*)(['"]?)(.+?)\2(\s*)$/, (_, spaces1, quote, name, spaces2) => {
7978
+ name = `${unscopedKeyframesSet.has(unescapeQuotes(name, quote)) ? scopeSelector + '_' : ''}${name}`;
7979
+ return `${spaces1}${quote}${name}${quote}${spaces2}`;
7980
+ });
7981
+ }
7982
+ /**
7983
+ * Scope an animation rule so that the keyframes mentioned in such rule
7984
+ * are scoped if defined in the component's css and left untouched otherwise.
7985
+ *
7986
+ * It can scope values of both the 'animation' and 'animation-name' properties.
7987
+ *
7988
+ * @param rule css rule to scope.
7989
+ * @param scopeSelector the component's scope selector.
7990
+ * @param unscopedKeyframesSet the set of unscoped keyframes names.
7991
+ *
7992
+ * @returns the updated css rule.
7993
+ **/
7994
+ _scopeAnimationRule(rule, scopeSelector, unscopedKeyframesSet) {
7995
+ let content = rule.content.replace(/((?:^|\s+|;)(?:-webkit-)?animation(?:\s*):(?:\s*))([^;]+)/g, (_, start, animationDeclarations) => start +
7996
+ animationDeclarations.replace(this._animationDeclarationKeyframesRe, (original, leadingSpaces, quote = '', quotedName, nonQuotedName) => {
7997
+ if (quotedName) {
7998
+ return `${leadingSpaces}${this._scopeAnimationKeyframe(`${quote}${quotedName}${quote}`, scopeSelector, unscopedKeyframesSet)}`;
7999
+ }
8000
+ else {
8001
+ return animationKeywords.has(nonQuotedName) ?
8002
+ original :
8003
+ `${leadingSpaces}${this._scopeAnimationKeyframe(nonQuotedName, scopeSelector, unscopedKeyframesSet)}`;
8004
+ }
8005
+ }));
8006
+ content = content.replace(/((?:^|\s+|;)(?:-webkit-)?animation-name(?:\s*):(?:\s*))([^;]+)/g, (_match, start, commaSeparatedKeyframes) => `${start}${commaSeparatedKeyframes.split(',')
8007
+ .map((keyframe) => this._scopeAnimationKeyframe(keyframe, scopeSelector, unscopedKeyframesSet))
8008
+ .join(',')}`);
8009
+ return { ...rule, content };
8010
+ }
7840
8011
  /*
7841
8012
  * Process styles to convert native ShadowDOM rules that will trip
7842
8013
  * up the css parser; we rely on decorating the stylesheet with inert rules.
@@ -7895,6 +8066,7 @@ class ShadowCss {
7895
8066
  cssText = this._convertColonHostContext(cssText);
7896
8067
  cssText = this._convertShadowDOMSelectors(cssText);
7897
8068
  if (scopeSelector) {
8069
+ cssText = this._scopeKeyframesRelatedCss(cssText, scopeSelector);
7898
8070
  cssText = this._scopeSelectors(cssText, scopeSelector, hostSelector);
7899
8071
  }
7900
8072
  cssText = cssText + '\n' + unscopedRules;
@@ -8266,11 +8438,14 @@ function extractCommentsWithHash(input) {
8266
8438
  return input.match(_commentWithHashRe) || [];
8267
8439
  }
8268
8440
  const BLOCK_PLACEHOLDER = '%BLOCK%';
8269
- const QUOTE_PLACEHOLDER = '%QUOTED%';
8270
8441
  const _ruleRe = /(\s*)([^;\{\}]+?)(\s*)((?:{%BLOCK%}?\s*;?)|(?:\s*;))/g;
8271
- const _quotedRe = /%QUOTED%/g;
8272
8442
  const CONTENT_PAIRS = new Map([['{', '}']]);
8273
- const QUOTE_PAIRS = new Map([[`"`, `"`], [`'`, `'`]]);
8443
+ const COMMA_IN_PLACEHOLDER = '%COMMA_IN_PLACEHOLDER%';
8444
+ const SEMI_IN_PLACEHOLDER = '%SEMI_IN_PLACEHOLDER%';
8445
+ const COLON_IN_PLACEHOLDER = '%COLON_IN_PLACEHOLDER%';
8446
+ const _cssCommaInPlaceholderReGlobal = new RegExp(COMMA_IN_PLACEHOLDER, 'g');
8447
+ const _cssSemiInPlaceholderReGlobal = new RegExp(SEMI_IN_PLACEHOLDER, 'g');
8448
+ const _cssColonInPlaceholderReGlobal = new RegExp(COLON_IN_PLACEHOLDER, 'g');
8274
8449
  class CssRule {
8275
8450
  constructor(selector, content) {
8276
8451
  this.selector = selector;
@@ -8278,12 +8453,10 @@ class CssRule {
8278
8453
  }
8279
8454
  }
8280
8455
  function processRules(input, ruleCallback) {
8281
- const inputWithEscapedQuotes = escapeBlocks(input, QUOTE_PAIRS, QUOTE_PLACEHOLDER);
8282
- const inputWithEscapedBlocks = escapeBlocks(inputWithEscapedQuotes.escapedString, CONTENT_PAIRS, BLOCK_PLACEHOLDER);
8456
+ const escaped = escapeInStrings(input);
8457
+ const inputWithEscapedBlocks = escapeBlocks(escaped, CONTENT_PAIRS, BLOCK_PLACEHOLDER);
8283
8458
  let nextBlockIndex = 0;
8284
- let nextQuoteIndex = 0;
8285
- return inputWithEscapedBlocks.escapedString
8286
- .replace(_ruleRe, (...m) => {
8459
+ const escapedResult = inputWithEscapedBlocks.escapedString.replace(_ruleRe, (...m) => {
8287
8460
  const selector = m[2];
8288
8461
  let content = '';
8289
8462
  let suffix = m[4];
@@ -8295,8 +8468,8 @@ function processRules(input, ruleCallback) {
8295
8468
  }
8296
8469
  const rule = ruleCallback(new CssRule(selector, content));
8297
8470
  return `${m[1]}${rule.selector}${m[3]}${contentPrefix}${rule.content}${suffix}`;
8298
- })
8299
- .replace(_quotedRe, () => inputWithEscapedQuotes.blocks[nextQuoteIndex++]);
8471
+ });
8472
+ return unescapeInStrings(escapedResult);
8300
8473
  }
8301
8474
  class StringWithEscapedBlocks {
8302
8475
  constructor(escapedString, blocks) {
@@ -8347,6 +8520,112 @@ function escapeBlocks(input, charPairs, placeholder) {
8347
8520
  }
8348
8521
  return new StringWithEscapedBlocks(resultParts.join(''), escapedBlocks);
8349
8522
  }
8523
+ /**
8524
+ * Object containing as keys characters that should be substituted by placeholders
8525
+ * when found in strings during the css text parsing, and as values the respective
8526
+ * placeholders
8527
+ */
8528
+ const ESCAPE_IN_STRING_MAP = {
8529
+ ';': SEMI_IN_PLACEHOLDER,
8530
+ ',': COMMA_IN_PLACEHOLDER,
8531
+ ':': COLON_IN_PLACEHOLDER
8532
+ };
8533
+ /**
8534
+ * Parse the provided css text and inside strings (meaning, inside pairs of unescaped single or
8535
+ * double quotes) replace specific characters with their respective placeholders as indicated
8536
+ * by the `ESCAPE_IN_STRING_MAP` map.
8537
+ *
8538
+ * For example convert the text
8539
+ * `animation: "my-anim:at\"ion" 1s;`
8540
+ * to
8541
+ * `animation: "my-anim%COLON_IN_PLACEHOLDER%at\"ion" 1s;`
8542
+ *
8543
+ * This is necessary in order to remove the meaning of some characters when found inside strings
8544
+ * (for example `;` indicates the end of a css declaration, `,` the sequence of values and `:` the
8545
+ * division between property and value during a declaration, none of these meanings apply when such
8546
+ * characters are within strings and so in order to prevent parsing issues they need to be replaced
8547
+ * with placeholder text for the duration of the css manipulation process).
8548
+ *
8549
+ * @param input the original css text.
8550
+ *
8551
+ * @returns the css text with specific characters in strings replaced by placeholders.
8552
+ **/
8553
+ function escapeInStrings(input) {
8554
+ let result = input;
8555
+ let currentQuoteChar = null;
8556
+ for (let i = 0; i < result.length; i++) {
8557
+ const char = result[i];
8558
+ if (char === '\\') {
8559
+ i++;
8560
+ }
8561
+ else {
8562
+ if (currentQuoteChar !== null) {
8563
+ // index i is inside a quoted sub-string
8564
+ if (char === currentQuoteChar) {
8565
+ currentQuoteChar = null;
8566
+ }
8567
+ else {
8568
+ const placeholder = ESCAPE_IN_STRING_MAP[char];
8569
+ if (placeholder) {
8570
+ result = `${result.substr(0, i)}${placeholder}${result.substr(i + 1)}`;
8571
+ i += placeholder.length - 1;
8572
+ }
8573
+ }
8574
+ }
8575
+ else if (char === '\'' || char === '"') {
8576
+ currentQuoteChar = char;
8577
+ }
8578
+ }
8579
+ }
8580
+ return result;
8581
+ }
8582
+ /**
8583
+ * Replace in a string all occurrences of keys in the `ESCAPE_IN_STRING_MAP` map with their
8584
+ * original representation, this is simply used to revert the changes applied by the
8585
+ * escapeInStrings function.
8586
+ *
8587
+ * For example it reverts the text:
8588
+ * `animation: "my-anim%COLON_IN_PLACEHOLDER%at\"ion" 1s;`
8589
+ * to it's original form of:
8590
+ * `animation: "my-anim:at\"ion" 1s;`
8591
+ *
8592
+ * Note: For the sake of simplicity this function does not check that the placeholders are
8593
+ * actually inside strings as it would anyway be extremely unlikely to find them outside of strings.
8594
+ *
8595
+ * @param input the css text containing the placeholders.
8596
+ *
8597
+ * @returns the css text without the placeholders.
8598
+ */
8599
+ function unescapeInStrings(input) {
8600
+ let result = input.replace(_cssCommaInPlaceholderReGlobal, ',');
8601
+ result = result.replace(_cssSemiInPlaceholderReGlobal, ';');
8602
+ result = result.replace(_cssColonInPlaceholderReGlobal, ':');
8603
+ return result;
8604
+ }
8605
+ /**
8606
+ * Unescape all quotes present in a string, but only if the string was actually already
8607
+ * quoted.
8608
+ *
8609
+ * This generates a "canonical" representation of strings which can be used to match strings
8610
+ * which would otherwise only differ because of differently escaped quotes.
8611
+ *
8612
+ * For example it converts the string (assumed to be quoted):
8613
+ * `this \\"is\\" a \\'\\\\'test`
8614
+ * to:
8615
+ * `this "is" a '\\\\'test`
8616
+ * (note that the latter backslashes are not removed as they are not actually escaping the single
8617
+ * quote)
8618
+ *
8619
+ *
8620
+ * @param input the string possibly containing escaped quotes.
8621
+ * @param isQuoted boolean indicating whether the string was quoted inside a bigger string (if not
8622
+ * then it means that it doesn't represent an inner string and thus no unescaping is required)
8623
+ *
8624
+ * @returns the string in the "canonical" representation without escaped quotes.
8625
+ */
8626
+ function unescapeQuotes(str, isQuoted) {
8627
+ return !isQuoted ? str : str.replace(/((?:^|[^\\])(?:\\\\)*)\\(?=['"])/g, '$1');
8628
+ }
8350
8629
  /**
8351
8630
  * Combine the `contextSelectors` with the `hostMarker` and the `otherSelectors`
8352
8631
  * to create a selector that matches the same as `:host-context()`.
@@ -14585,7 +14864,6 @@ class ElementSchemaRegistry {
14585
14864
  * Use of this source code is governed by an MIT-style license that can be
14586
14865
  * found in the LICENSE file at https://angular.io/license
14587
14866
  */
14588
- const EVENT = 'event';
14589
14867
  const BOOLEAN = 'boolean';
14590
14868
  const NUMBER = 'number';
14591
14869
  const STRING = 'string';
@@ -14645,13 +14923,13 @@ const OBJECT = 'object';
14645
14923
  //
14646
14924
  // =================================================================================================
14647
14925
  const SCHEMA = [
14648
- '[Element]|textContent,%classList,className,id,innerHTML,*beforecopy,*beforecut,*beforepaste,*copy,*cut,*paste,*search,*selectstart,*webkitfullscreenchange,*webkitfullscreenerror,*wheel,outerHTML,#scrollLeft,#scrollTop,slot' +
14926
+ '[Element]|textContent,%ariaAtomic,%ariaAutoComplete,%ariaBusy,%ariaChecked,%ariaColCount,%ariaColIndex,%ariaColSpan,%ariaCurrent,%ariaDescription,%ariaDisabled,%ariaExpanded,%ariaHasPopup,%ariaHidden,%ariaKeyShortcuts,%ariaLabel,%ariaLevel,%ariaLive,%ariaModal,%ariaMultiLine,%ariaMultiSelectable,%ariaOrientation,%ariaPlaceholder,%ariaPosInSet,%ariaPressed,%ariaReadOnly,%ariaRelevant,%ariaRequired,%ariaRoleDescription,%ariaRowCount,%ariaRowIndex,%ariaRowSpan,%ariaSelected,%ariaSetSize,%ariaSort,%ariaValueMax,%ariaValueMin,%ariaValueNow,%ariaValueText,%classList,className,elementTiming,id,innerHTML,*beforecopy,*beforecut,*beforepaste,*fullscreenchange,*fullscreenerror,*search,*webkitfullscreenchange,*webkitfullscreenerror,outerHTML,%part,#scrollLeft,#scrollTop,slot' +
14649
14927
  /* added manually to avoid breaking changes */
14650
14928
  ',*message,*mozfullscreenchange,*mozfullscreenerror,*mozpointerlockchange,*mozpointerlockerror,*webglcontextcreationerror,*webglcontextlost,*webglcontextrestored',
14651
- '[HTMLElement]^[Element]|accessKey,contentEditable,dir,!draggable,!hidden,innerText,lang,*abort,*auxclick,*blur,*cancel,*canplay,*canplaythrough,*change,*click,*close,*contextmenu,*cuechange,*dblclick,*drag,*dragend,*dragenter,*dragleave,*dragover,*dragstart,*drop,*durationchange,*emptied,*ended,*error,*focus,*gotpointercapture,*input,*invalid,*keydown,*keypress,*keyup,*load,*loadeddata,*loadedmetadata,*loadstart,*lostpointercapture,*mousedown,*mouseenter,*mouseleave,*mousemove,*mouseout,*mouseover,*mouseup,*mousewheel,*pause,*play,*playing,*pointercancel,*pointerdown,*pointerenter,*pointerleave,*pointermove,*pointerout,*pointerover,*pointerup,*progress,*ratechange,*reset,*resize,*scroll,*seeked,*seeking,*select,*show,*stalled,*submit,*suspend,*timeupdate,*toggle,*volumechange,*waiting,outerText,!spellcheck,%style,#tabIndex,title,!translate',
14652
- 'abbr,address,article,aside,b,bdi,bdo,cite,code,dd,dfn,dt,em,figcaption,figure,footer,header,i,kbd,main,mark,nav,noscript,rb,rp,rt,rtc,ruby,s,samp,section,small,strong,sub,sup,u,var,wbr^[HTMLElement]|accessKey,contentEditable,dir,!draggable,!hidden,innerText,lang,*abort,*auxclick,*blur,*cancel,*canplay,*canplaythrough,*change,*click,*close,*contextmenu,*cuechange,*dblclick,*drag,*dragend,*dragenter,*dragleave,*dragover,*dragstart,*drop,*durationchange,*emptied,*ended,*error,*focus,*gotpointercapture,*input,*invalid,*keydown,*keypress,*keyup,*load,*loadeddata,*loadedmetadata,*loadstart,*lostpointercapture,*mousedown,*mouseenter,*mouseleave,*mousemove,*mouseout,*mouseover,*mouseup,*mousewheel,*pause,*play,*playing,*pointercancel,*pointerdown,*pointerenter,*pointerleave,*pointermove,*pointerout,*pointerover,*pointerup,*progress,*ratechange,*reset,*resize,*scroll,*seeked,*seeking,*select,*show,*stalled,*submit,*suspend,*timeupdate,*toggle,*volumechange,*waiting,outerText,!spellcheck,%style,#tabIndex,title,!translate',
14653
- 'media^[HTMLElement]|!autoplay,!controls,%controlsList,%crossOrigin,#currentTime,!defaultMuted,#defaultPlaybackRate,!disableRemotePlayback,!loop,!muted,*encrypted,*waitingforkey,#playbackRate,preload,src,%srcObject,#volume',
14654
- ':svg:^[HTMLElement]|*abort,*auxclick,*blur,*cancel,*canplay,*canplaythrough,*change,*click,*close,*contextmenu,*cuechange,*dblclick,*drag,*dragend,*dragenter,*dragleave,*dragover,*dragstart,*drop,*durationchange,*emptied,*ended,*error,*focus,*gotpointercapture,*input,*invalid,*keydown,*keypress,*keyup,*load,*loadeddata,*loadedmetadata,*loadstart,*lostpointercapture,*mousedown,*mouseenter,*mouseleave,*mousemove,*mouseout,*mouseover,*mouseup,*mousewheel,*pause,*play,*playing,*pointercancel,*pointerdown,*pointerenter,*pointerleave,*pointermove,*pointerout,*pointerover,*pointerup,*progress,*ratechange,*reset,*resize,*scroll,*seeked,*seeking,*select,*show,*stalled,*submit,*suspend,*timeupdate,*toggle,*volumechange,*waiting,%style,#tabIndex',
14929
+ '[HTMLElement]^[Element]|accessKey,autocapitalize,!autofocus,contentEditable,dir,!draggable,enterKeyHint,!hidden,innerText,inputMode,lang,nonce,*abort,*animationend,*animationiteration,*animationstart,*auxclick,*beforexrselect,*blur,*cancel,*canplay,*canplaythrough,*change,*click,*close,*contextmenu,*copy,*cuechange,*cut,*dblclick,*drag,*dragend,*dragenter,*dragleave,*dragover,*dragstart,*drop,*durationchange,*emptied,*ended,*error,*focus,*formdata,*gotpointercapture,*input,*invalid,*keydown,*keypress,*keyup,*load,*loadeddata,*loadedmetadata,*loadstart,*lostpointercapture,*mousedown,*mouseenter,*mouseleave,*mousemove,*mouseout,*mouseover,*mouseup,*mousewheel,*paste,*pause,*play,*playing,*pointercancel,*pointerdown,*pointerenter,*pointerleave,*pointermove,*pointerout,*pointerover,*pointerrawupdate,*pointerup,*progress,*ratechange,*reset,*resize,*scroll,*securitypolicyviolation,*seeked,*seeking,*select,*selectionchange,*selectstart,*slotchange,*stalled,*submit,*suspend,*timeupdate,*toggle,*transitioncancel,*transitionend,*transitionrun,*transitionstart,*volumechange,*waiting,*webkitanimationend,*webkitanimationiteration,*webkitanimationstart,*webkittransitionend,*wheel,outerText,!spellcheck,%style,#tabIndex,title,!translate,virtualKeyboardPolicy',
14930
+ 'abbr,address,article,aside,b,bdi,bdo,cite,content,code,dd,dfn,dt,em,figcaption,figure,footer,header,hgroup,i,kbd,main,mark,nav,noscript,rb,rp,rt,rtc,ruby,s,samp,section,small,strong,sub,sup,u,var,wbr^[HTMLElement]|accessKey,autocapitalize,!autofocus,contentEditable,dir,!draggable,enterKeyHint,!hidden,innerText,inputMode,lang,nonce,*abort,*animationend,*animationiteration,*animationstart,*auxclick,*beforexrselect,*blur,*cancel,*canplay,*canplaythrough,*change,*click,*close,*contextmenu,*copy,*cuechange,*cut,*dblclick,*drag,*dragend,*dragenter,*dragleave,*dragover,*dragstart,*drop,*durationchange,*emptied,*ended,*error,*focus,*formdata,*gotpointercapture,*input,*invalid,*keydown,*keypress,*keyup,*load,*loadeddata,*loadedmetadata,*loadstart,*lostpointercapture,*mousedown,*mouseenter,*mouseleave,*mousemove,*mouseout,*mouseover,*mouseup,*mousewheel,*paste,*pause,*play,*playing,*pointercancel,*pointerdown,*pointerenter,*pointerleave,*pointermove,*pointerout,*pointerover,*pointerrawupdate,*pointerup,*progress,*ratechange,*reset,*resize,*scroll,*securitypolicyviolation,*seeked,*seeking,*select,*selectionchange,*selectstart,*slotchange,*stalled,*submit,*suspend,*timeupdate,*toggle,*transitioncancel,*transitionend,*transitionrun,*transitionstart,*volumechange,*waiting,*webkitanimationend,*webkitanimationiteration,*webkitanimationstart,*webkittransitionend,*wheel,outerText,!spellcheck,%style,#tabIndex,title,!translate,virtualKeyboardPolicy',
14931
+ 'media^[HTMLElement]|!autoplay,!controls,%controlsList,%crossOrigin,#currentTime,!defaultMuted,#defaultPlaybackRate,!disableRemotePlayback,!loop,!muted,*encrypted,*waitingforkey,#playbackRate,preload,!preservesPitch,src,%srcObject,#volume',
14932
+ ':svg:^[HTMLElement]|!autofocus,nonce,*abort,*animationend,*animationiteration,*animationstart,*auxclick,*beforexrselect,*blur,*cancel,*canplay,*canplaythrough,*change,*click,*close,*contextmenu,*copy,*cuechange,*cut,*dblclick,*drag,*dragend,*dragenter,*dragleave,*dragover,*dragstart,*drop,*durationchange,*emptied,*ended,*error,*focus,*formdata,*gotpointercapture,*input,*invalid,*keydown,*keypress,*keyup,*load,*loadeddata,*loadedmetadata,*loadstart,*lostpointercapture,*mousedown,*mouseenter,*mouseleave,*mousemove,*mouseout,*mouseover,*mouseup,*mousewheel,*paste,*pause,*play,*playing,*pointercancel,*pointerdown,*pointerenter,*pointerleave,*pointermove,*pointerout,*pointerover,*pointerrawupdate,*pointerup,*progress,*ratechange,*reset,*resize,*scroll,*securitypolicyviolation,*seeked,*seeking,*select,*selectionchange,*selectstart,*slotchange,*stalled,*submit,*suspend,*timeupdate,*toggle,*transitioncancel,*transitionend,*transitionrun,*transitionstart,*volumechange,*waiting,*webkitanimationend,*webkitanimationiteration,*webkitanimationstart,*webkittransitionend,*wheel,%style,#tabIndex',
14655
14933
  ':svg:graphics^:svg:|',
14656
14934
  ':svg:animation^:svg:|*begin,*end,*repeat',
14657
14935
  ':svg:geometry^:svg:|',
@@ -14659,16 +14937,17 @@ const SCHEMA = [
14659
14937
  ':svg:gradient^:svg:|',
14660
14938
  ':svg:textContent^:svg:graphics|',
14661
14939
  ':svg:textPositioning^:svg:textContent|',
14662
- 'a^[HTMLElement]|charset,coords,download,hash,host,hostname,href,hreflang,name,password,pathname,ping,port,protocol,referrerPolicy,rel,rev,search,shape,target,text,type,username',
14663
- 'area^[HTMLElement]|alt,coords,download,hash,host,hostname,href,!noHref,password,pathname,ping,port,protocol,referrerPolicy,rel,search,shape,target,username',
14940
+ 'a^[HTMLElement]|charset,coords,download,hash,host,hostname,href,hreflang,name,password,pathname,ping,port,protocol,referrerPolicy,rel,%relList,rev,search,shape,target,text,type,username',
14941
+ 'area^[HTMLElement]|alt,coords,download,hash,host,hostname,href,!noHref,password,pathname,ping,port,protocol,referrerPolicy,rel,%relList,search,shape,target,username',
14664
14942
  'audio^media|',
14665
14943
  'br^[HTMLElement]|clear',
14666
14944
  'base^[HTMLElement]|href,target',
14667
- 'body^[HTMLElement]|aLink,background,bgColor,link,*beforeunload,*blur,*error,*focus,*hashchange,*languagechange,*load,*message,*offline,*online,*pagehide,*pageshow,*popstate,*rejectionhandled,*resize,*scroll,*storage,*unhandledrejection,*unload,text,vLink',
14668
- 'button^[HTMLElement]|!autofocus,!disabled,formAction,formEnctype,formMethod,!formNoValidate,formTarget,name,type,value',
14945
+ 'body^[HTMLElement]|aLink,background,bgColor,link,*afterprint,*beforeprint,*beforeunload,*blur,*error,*focus,*hashchange,*languagechange,*load,*message,*messageerror,*offline,*online,*pagehide,*pageshow,*popstate,*rejectionhandled,*resize,*scroll,*storage,*unhandledrejection,*unload,text,vLink',
14946
+ 'button^[HTMLElement]|!disabled,formAction,formEnctype,formMethod,!formNoValidate,formTarget,name,type,value',
14669
14947
  'canvas^[HTMLElement]|#height,#width',
14670
14948
  'content^[HTMLElement]|select',
14671
14949
  'dl^[HTMLElement]|!compact',
14950
+ 'data^[HTMLElement]|value',
14672
14951
  'datalist^[HTMLElement]|',
14673
14952
  'details^[HTMLElement]|!open',
14674
14953
  'dialog^[HTMLElement]|!open,returnValue',
@@ -14679,22 +14958,22 @@ const SCHEMA = [
14679
14958
  'font^[HTMLElement]|color,face,size',
14680
14959
  'form^[HTMLElement]|acceptCharset,action,autocomplete,encoding,enctype,method,name,!noValidate,target',
14681
14960
  'frame^[HTMLElement]|frameBorder,longDesc,marginHeight,marginWidth,name,!noResize,scrolling,src',
14682
- 'frameset^[HTMLElement]|cols,*beforeunload,*blur,*error,*focus,*hashchange,*languagechange,*load,*message,*offline,*online,*pagehide,*pageshow,*popstate,*rejectionhandled,*resize,*scroll,*storage,*unhandledrejection,*unload,rows',
14961
+ 'frameset^[HTMLElement]|cols,*afterprint,*beforeprint,*beforeunload,*blur,*error,*focus,*hashchange,*languagechange,*load,*message,*messageerror,*offline,*online,*pagehide,*pageshow,*popstate,*rejectionhandled,*resize,*scroll,*storage,*unhandledrejection,*unload,rows',
14683
14962
  'hr^[HTMLElement]|align,color,!noShade,size,width',
14684
14963
  'head^[HTMLElement]|',
14685
14964
  'h1,h2,h3,h4,h5,h6^[HTMLElement]|align',
14686
14965
  'html^[HTMLElement]|version',
14687
- 'iframe^[HTMLElement]|align,!allowFullscreen,frameBorder,height,longDesc,marginHeight,marginWidth,name,referrerPolicy,%sandbox,scrolling,src,srcdoc,width',
14688
- 'img^[HTMLElement]|align,alt,border,%crossOrigin,#height,#hspace,!isMap,longDesc,lowsrc,name,referrerPolicy,sizes,src,srcset,useMap,#vspace,#width',
14689
- 'input^[HTMLElement]|accept,align,alt,autocapitalize,autocomplete,!autofocus,!checked,!defaultChecked,defaultValue,dirName,!disabled,%files,formAction,formEnctype,formMethod,!formNoValidate,formTarget,#height,!incremental,!indeterminate,max,#maxLength,min,#minLength,!multiple,name,pattern,placeholder,!readOnly,!required,selectionDirection,#selectionEnd,#selectionStart,#size,src,step,type,useMap,value,%valueAsDate,#valueAsNumber,#width',
14966
+ 'iframe^[HTMLElement]|align,allow,!allowFullscreen,!allowPaymentRequest,csp,frameBorder,height,loading,longDesc,marginHeight,marginWidth,name,referrerPolicy,%sandbox,scrolling,src,srcdoc,width',
14967
+ 'img^[HTMLElement]|align,alt,border,%crossOrigin,decoding,#height,#hspace,!isMap,loading,longDesc,lowsrc,name,referrerPolicy,sizes,src,srcset,useMap,#vspace,#width',
14968
+ 'input^[HTMLElement]|accept,align,alt,autocomplete,!checked,!defaultChecked,defaultValue,dirName,!disabled,%files,formAction,formEnctype,formMethod,!formNoValidate,formTarget,#height,!incremental,!indeterminate,max,#maxLength,min,#minLength,!multiple,name,pattern,placeholder,!readOnly,!required,selectionDirection,#selectionEnd,#selectionStart,#size,src,step,type,useMap,value,%valueAsDate,#valueAsNumber,#width',
14690
14969
  'li^[HTMLElement]|type,#value',
14691
14970
  'label^[HTMLElement]|htmlFor',
14692
14971
  'legend^[HTMLElement]|align',
14693
- 'link^[HTMLElement]|as,charset,%crossOrigin,!disabled,href,hreflang,integrity,media,referrerPolicy,rel,%relList,rev,%sizes,target,type',
14972
+ 'link^[HTMLElement]|as,charset,%crossOrigin,!disabled,href,hreflang,imageSizes,imageSrcset,integrity,media,referrerPolicy,rel,%relList,rev,%sizes,target,type',
14694
14973
  'map^[HTMLElement]|name',
14695
14974
  'marquee^[HTMLElement]|behavior,bgColor,direction,height,#hspace,#loop,#scrollAmount,#scrollDelay,!trueSpeed,#vspace,width',
14696
14975
  'menu^[HTMLElement]|!compact',
14697
- 'meta^[HTMLElement]|content,httpEquiv,name,scheme',
14976
+ 'meta^[HTMLElement]|content,httpEquiv,media,name,scheme',
14698
14977
  'meter^[HTMLElement]|#high,#low,#max,#min,#optimum,#value',
14699
14978
  'ins,del^[HTMLElement]|cite,dateTime',
14700
14979
  'ol^[HTMLElement]|!compact,!reversed,#start,type',
@@ -14708,11 +14987,10 @@ const SCHEMA = [
14708
14987
  'pre^[HTMLElement]|#width',
14709
14988
  'progress^[HTMLElement]|#max,#value',
14710
14989
  'q,blockquote,cite^[HTMLElement]|',
14711
- 'script^[HTMLElement]|!async,charset,%crossOrigin,!defer,event,htmlFor,integrity,src,text,type',
14712
- 'select^[HTMLElement]|autocomplete,!autofocus,!disabled,#length,!multiple,name,!required,#selectedIndex,#size,value',
14713
- 'shadow^[HTMLElement]|',
14990
+ 'script^[HTMLElement]|!async,charset,%crossOrigin,!defer,event,htmlFor,integrity,!noModule,%referrerPolicy,src,text,type',
14991
+ 'select^[HTMLElement]|autocomplete,!disabled,#length,!multiple,name,!required,#selectedIndex,#size,value',
14714
14992
  'slot^[HTMLElement]|name',
14715
- 'source^[HTMLElement]|media,sizes,src,srcset,type',
14993
+ 'source^[HTMLElement]|#height,media,sizes,src,srcset,type,#width',
14716
14994
  'span^[HTMLElement]|',
14717
14995
  'style^[HTMLElement]|!disabled,media,type',
14718
14996
  'caption^[HTMLElement]|align',
@@ -14722,12 +15000,13 @@ const SCHEMA = [
14722
15000
  'tr^[HTMLElement]|align,bgColor,ch,chOff,vAlign',
14723
15001
  'tfoot,thead,tbody^[HTMLElement]|align,ch,chOff,vAlign',
14724
15002
  'template^[HTMLElement]|',
14725
- 'textarea^[HTMLElement]|autocapitalize,autocomplete,!autofocus,#cols,defaultValue,dirName,!disabled,#maxLength,#minLength,name,placeholder,!readOnly,!required,#rows,selectionDirection,#selectionEnd,#selectionStart,value,wrap',
15003
+ 'textarea^[HTMLElement]|autocomplete,#cols,defaultValue,dirName,!disabled,#maxLength,#minLength,name,placeholder,!readOnly,!required,#rows,selectionDirection,#selectionEnd,#selectionStart,value,wrap',
15004
+ 'time^[HTMLElement]|dateTime',
14726
15005
  'title^[HTMLElement]|text',
14727
15006
  'track^[HTMLElement]|!default,kind,label,src,srclang',
14728
15007
  'ul^[HTMLElement]|!compact,type',
14729
15008
  'unknown^[HTMLElement]|',
14730
- 'video^media|#height,poster,#width',
15009
+ 'video^media|!disablePictureInPicture,#height,*enterpictureinpicture,*leavepictureinpicture,!playsInline,poster,#width',
14731
15010
  ':svg:a^:svg:graphics|',
14732
15011
  ':svg:animate^:svg:animation|',
14733
15012
  ':svg:animateMotion^:svg:animation|',
@@ -14766,7 +15045,7 @@ const SCHEMA = [
14766
15045
  ':svg:filter^:svg:|',
14767
15046
  ':svg:foreignObject^:svg:graphics|',
14768
15047
  ':svg:g^:svg:graphics|',
14769
- ':svg:image^:svg:graphics|',
15048
+ ':svg:image^:svg:graphics|decoding',
14770
15049
  ':svg:line^:svg:geometry|',
14771
15050
  ':svg:linearGradient^:svg:gradient|',
14772
15051
  ':svg:mpath^:svg:|',
@@ -20008,7 +20287,7 @@ function publishFacade(global) {
20008
20287
  * Use of this source code is governed by an MIT-style license that can be
20009
20288
  * found in the LICENSE file at https://angular.io/license
20010
20289
  */
20011
- const VERSION = new Version('15.0.0-next.4');
20290
+ const VERSION = new Version('15.0.0-next.6');
20012
20291
 
20013
20292
  /**
20014
20293
  * @license
@@ -22040,7 +22319,7 @@ const MINIMUM_PARTIAL_LINKER_VERSION$6 = '12.0.0';
22040
22319
  function compileDeclareClassMetadata(metadata) {
22041
22320
  const definitionMap = new DefinitionMap();
22042
22321
  definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_VERSION$6));
22043
- definitionMap.set('version', literal('15.0.0-next.4'));
22322
+ definitionMap.set('version', literal('15.0.0-next.6'));
22044
22323
  definitionMap.set('ngImport', importExpr(Identifiers.core));
22045
22324
  definitionMap.set('type', metadata.type);
22046
22325
  definitionMap.set('decorators', metadata.decorators);
@@ -22157,7 +22436,7 @@ function compileDeclareDirectiveFromMetadata(meta) {
22157
22436
  function createDirectiveDefinitionMap(meta) {
22158
22437
  const definitionMap = new DefinitionMap();
22159
22438
  definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_VERSION$5));
22160
- definitionMap.set('version', literal('15.0.0-next.4'));
22439
+ definitionMap.set('version', literal('15.0.0-next.6'));
22161
22440
  // e.g. `type: MyDirective`
22162
22441
  definitionMap.set('type', meta.internalType);
22163
22442
  if (meta.isStandalone) {
@@ -22396,7 +22675,7 @@ const MINIMUM_PARTIAL_LINKER_VERSION$4 = '12.0.0';
22396
22675
  function compileDeclareFactoryFunction(meta) {
22397
22676
  const definitionMap = new DefinitionMap();
22398
22677
  definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_VERSION$4));
22399
- definitionMap.set('version', literal('15.0.0-next.4'));
22678
+ definitionMap.set('version', literal('15.0.0-next.6'));
22400
22679
  definitionMap.set('ngImport', importExpr(Identifiers.core));
22401
22680
  definitionMap.set('type', meta.internalType);
22402
22681
  definitionMap.set('deps', compileDependencies(meta.deps));
@@ -22438,7 +22717,7 @@ function compileDeclareInjectableFromMetadata(meta) {
22438
22717
  function createInjectableDefinitionMap(meta) {
22439
22718
  const definitionMap = new DefinitionMap();
22440
22719
  definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_VERSION$3));
22441
- definitionMap.set('version', literal('15.0.0-next.4'));
22720
+ definitionMap.set('version', literal('15.0.0-next.6'));
22442
22721
  definitionMap.set('ngImport', importExpr(Identifiers.core));
22443
22722
  definitionMap.set('type', meta.internalType);
22444
22723
  // Only generate providedIn property if it has a non-null value
@@ -22496,7 +22775,7 @@ function compileDeclareInjectorFromMetadata(meta) {
22496
22775
  function createInjectorDefinitionMap(meta) {
22497
22776
  const definitionMap = new DefinitionMap();
22498
22777
  definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_VERSION$2));
22499
- definitionMap.set('version', literal('15.0.0-next.4'));
22778
+ definitionMap.set('version', literal('15.0.0-next.6'));
22500
22779
  definitionMap.set('ngImport', importExpr(Identifiers.core));
22501
22780
  definitionMap.set('type', meta.internalType);
22502
22781
  definitionMap.set('providers', meta.providers);
@@ -22533,7 +22812,7 @@ function compileDeclareNgModuleFromMetadata(meta) {
22533
22812
  function createNgModuleDefinitionMap(meta) {
22534
22813
  const definitionMap = new DefinitionMap();
22535
22814
  definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_VERSION$1));
22536
- definitionMap.set('version', literal('15.0.0-next.4'));
22815
+ definitionMap.set('version', literal('15.0.0-next.6'));
22537
22816
  definitionMap.set('ngImport', importExpr(Identifiers.core));
22538
22817
  definitionMap.set('type', meta.internalType);
22539
22818
  // We only generate the keys in the metadata if the arrays contain values.
@@ -22591,7 +22870,7 @@ function compileDeclarePipeFromMetadata(meta) {
22591
22870
  function createPipeDefinitionMap(meta) {
22592
22871
  const definitionMap = new DefinitionMap();
22593
22872
  definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_VERSION));
22594
- definitionMap.set('version', literal('15.0.0-next.4'));
22873
+ definitionMap.set('version', literal('15.0.0-next.6'));
22595
22874
  definitionMap.set('ngImport', importExpr(Identifiers.core));
22596
22875
  // e.g. `type: MyPipe`
22597
22876
  definitionMap.set('type', meta.internalType);