@angular/cdk 21.0.0-next.9 → 21.0.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/_adev_assets/cdk_drag_drop.json +13 -12
  2. package/_adev_assets/cdk_testing.json +9 -9
  3. package/_adev_assets/cdk_testing_protractor.json +1 -1
  4. package/_adev_assets/cdk_testing_selenium_webdriver.json +1 -1
  5. package/_adev_assets/cdk_testing_testbed.json +1 -1
  6. package/fesm2022/_a11y-module-chunk.mjs +755 -869
  7. package/fesm2022/_a11y-module-chunk.mjs.map +1 -1
  8. package/fesm2022/_activedescendant-key-manager-chunk.mjs +8 -8
  9. package/fesm2022/_activedescendant-key-manager-chunk.mjs.map +1 -1
  10. package/fesm2022/_array-chunk.mjs +1 -1
  11. package/fesm2022/_array-chunk.mjs.map +1 -1
  12. package/fesm2022/_breakpoints-observer-chunk.mjs +149 -152
  13. package/fesm2022/_breakpoints-observer-chunk.mjs.map +1 -1
  14. package/fesm2022/_css-pixel-value-chunk.mjs +4 -5
  15. package/fesm2022/_css-pixel-value-chunk.mjs.map +1 -1
  16. package/fesm2022/_data-source-chunk.mjs +2 -8
  17. package/fesm2022/_data-source-chunk.mjs.map +1 -1
  18. package/fesm2022/_directionality-chunk.mjs +54 -54
  19. package/fesm2022/_directionality-chunk.mjs.map +1 -1
  20. package/fesm2022/_dispose-view-repeater-strategy-chunk.mjs +25 -36
  21. package/fesm2022/_dispose-view-repeater-strategy-chunk.mjs.map +1 -1
  22. package/fesm2022/_element-chunk.mjs +6 -17
  23. package/fesm2022/_element-chunk.mjs.map +1 -1
  24. package/fesm2022/_fake-event-detection-chunk.mjs +3 -17
  25. package/fesm2022/_fake-event-detection-chunk.mjs.map +1 -1
  26. package/fesm2022/_focus-key-manager-chunk.mjs +10 -14
  27. package/fesm2022/_focus-key-manager-chunk.mjs.map +1 -1
  28. package/fesm2022/_focus-monitor-chunk.mjs +376 -566
  29. package/fesm2022/_focus-monitor-chunk.mjs.map +1 -1
  30. package/fesm2022/_id-generator-chunk.mjs +36 -27
  31. package/fesm2022/_id-generator-chunk.mjs.map +1 -1
  32. package/fesm2022/_keycodes-chunk.mjs +9 -9
  33. package/fesm2022/_keycodes-chunk.mjs.map +1 -1
  34. package/fesm2022/_list-key-manager-chunk.mjs +248 -336
  35. package/fesm2022/_list-key-manager-chunk.mjs.map +1 -1
  36. package/fesm2022/_overlay-module-chunk.mjs +2534 -2948
  37. package/fesm2022/_overlay-module-chunk.mjs.map +1 -1
  38. package/fesm2022/_passive-listeners-chunk.mjs +10 -22
  39. package/fesm2022/_passive-listeners-chunk.mjs.map +1 -1
  40. package/fesm2022/_platform-chunk.mjs +42 -65
  41. package/fesm2022/_platform-chunk.mjs.map +1 -1
  42. package/fesm2022/_recycle-view-repeater-strategy-chunk.mjs +78 -134
  43. package/fesm2022/_recycle-view-repeater-strategy-chunk.mjs.map +1 -1
  44. package/fesm2022/_scrolling-chunk.mjs +44 -85
  45. package/fesm2022/_scrolling-chunk.mjs.map +1 -1
  46. package/fesm2022/_selection-model-chunk.mjs +138 -209
  47. package/fesm2022/_selection-model-chunk.mjs.map +1 -1
  48. package/fesm2022/_shadow-dom-chunk.mjs +21 -35
  49. package/fesm2022/_shadow-dom-chunk.mjs.map +1 -1
  50. package/fesm2022/_style-loader-chunk.mjs +50 -37
  51. package/fesm2022/_style-loader-chunk.mjs.map +1 -1
  52. package/fesm2022/_test-environment-chunk.mjs +2 -14
  53. package/fesm2022/_test-environment-chunk.mjs.map +1 -1
  54. package/fesm2022/_tree-key-manager-chunk.mjs +229 -308
  55. package/fesm2022/_tree-key-manager-chunk.mjs.map +1 -1
  56. package/fesm2022/_typeahead-chunk.mjs +52 -74
  57. package/fesm2022/_typeahead-chunk.mjs.map +1 -1
  58. package/fesm2022/_unique-selection-dispatcher-chunk.mjs +43 -40
  59. package/fesm2022/_unique-selection-dispatcher-chunk.mjs.map +1 -1
  60. package/fesm2022/a11y.mjs +351 -449
  61. package/fesm2022/a11y.mjs.map +1 -1
  62. package/fesm2022/accordion.mjs +254 -192
  63. package/fesm2022/accordion.mjs.map +1 -1
  64. package/fesm2022/bidi.mjs +121 -64
  65. package/fesm2022/bidi.mjs.map +1 -1
  66. package/fesm2022/cdk.mjs +1 -2
  67. package/fesm2022/cdk.mjs.map +1 -1
  68. package/fesm2022/clipboard.mjs +208 -186
  69. package/fesm2022/clipboard.mjs.map +1 -1
  70. package/fesm2022/coercion-private.mjs +4 -8
  71. package/fesm2022/coercion-private.mjs.map +1 -1
  72. package/fesm2022/coercion.mjs +11 -29
  73. package/fesm2022/coercion.mjs.map +1 -1
  74. package/fesm2022/dialog.mjs +660 -808
  75. package/fesm2022/dialog.mjs.map +1 -1
  76. package/fesm2022/drag-drop.mjs +3347 -4286
  77. package/fesm2022/drag-drop.mjs.map +1 -1
  78. package/fesm2022/keycodes.mjs +4 -8
  79. package/fesm2022/keycodes.mjs.map +1 -1
  80. package/fesm2022/layout.mjs +44 -26
  81. package/fesm2022/layout.mjs.map +1 -1
  82. package/fesm2022/listbox.mjs +841 -895
  83. package/fesm2022/listbox.mjs.map +1 -1
  84. package/fesm2022/menu.mjs +1942 -1858
  85. package/fesm2022/menu.mjs.map +1 -1
  86. package/fesm2022/observers-private.mjs +88 -106
  87. package/fesm2022/observers-private.mjs.map +1 -1
  88. package/fesm2022/observers.mjs +262 -184
  89. package/fesm2022/observers.mjs.map +1 -1
  90. package/fesm2022/overlay.mjs +72 -68
  91. package/fesm2022/overlay.mjs.map +1 -1
  92. package/fesm2022/platform.mjs +43 -54
  93. package/fesm2022/platform.mjs.map +1 -1
  94. package/fesm2022/portal.mjs +402 -560
  95. package/fesm2022/portal.mjs.map +1 -1
  96. package/fesm2022/private.mjs +38 -10
  97. package/fesm2022/private.mjs.map +1 -1
  98. package/fesm2022/scrolling.mjs +1323 -1400
  99. package/fesm2022/scrolling.mjs.map +1 -1
  100. package/fesm2022/stepper.mjs +758 -590
  101. package/fesm2022/stepper.mjs.map +1 -1
  102. package/fesm2022/table.mjs +2327 -2319
  103. package/fesm2022/table.mjs.map +1 -1
  104. package/fesm2022/testing-selenium-webdriver.mjs +252 -325
  105. package/fesm2022/testing-selenium-webdriver.mjs.map +1 -1
  106. package/fesm2022/testing-testbed.mjs +592 -709
  107. package/fesm2022/testing-testbed.mjs.map +1 -1
  108. package/fesm2022/testing.mjs +368 -889
  109. package/fesm2022/testing.mjs.map +1 -1
  110. package/fesm2022/text-field.mjs +459 -388
  111. package/fesm2022/text-field.mjs.map +1 -1
  112. package/fesm2022/tree.mjs +1483 -1731
  113. package/fesm2022/tree.mjs.map +1 -1
  114. package/overlay/_index.scss +28 -0
  115. package/overlay-prebuilt.css +1 -1
  116. package/package.json +1 -1
  117. package/schematics/ng-add/index.js +1 -1
  118. package/types/_overlay-module-chunk.d.ts +59 -7
  119. package/types/_portal-directives-chunk.d.ts +2 -18
  120. package/types/accordion.d.ts +3 -1
  121. package/types/dialog.d.ts +1 -1
  122. package/types/overlay.d.ts +6 -2
  123. package/types/portal.d.ts +1 -1
@@ -1,98 +1,57 @@
1
- /** The possible ways the browser may handle the horizontal scroll axis in RTL languages. */
2
1
  var RtlScrollAxisType;
3
2
  (function (RtlScrollAxisType) {
4
- /**
5
- * scrollLeft is 0 when scrolled all the way left and (scrollWidth - clientWidth) when scrolled
6
- * all the way right.
7
- */
8
- RtlScrollAxisType[RtlScrollAxisType["NORMAL"] = 0] = "NORMAL";
9
- /**
10
- * scrollLeft is -(scrollWidth - clientWidth) when scrolled all the way left and 0 when scrolled
11
- * all the way right.
12
- */
13
- RtlScrollAxisType[RtlScrollAxisType["NEGATED"] = 1] = "NEGATED";
14
- /**
15
- * scrollLeft is (scrollWidth - clientWidth) when scrolled all the way left and 0 when scrolled
16
- * all the way right.
17
- */
18
- RtlScrollAxisType[RtlScrollAxisType["INVERTED"] = 2] = "INVERTED";
3
+ RtlScrollAxisType[RtlScrollAxisType["NORMAL"] = 0] = "NORMAL";
4
+ RtlScrollAxisType[RtlScrollAxisType["NEGATED"] = 1] = "NEGATED";
5
+ RtlScrollAxisType[RtlScrollAxisType["INVERTED"] = 2] = "INVERTED";
19
6
  })(RtlScrollAxisType || (RtlScrollAxisType = {}));
20
- /** Cached result of the way the browser handles the horizontal scroll axis in RTL mode. */
21
7
  let rtlScrollAxisType;
22
- /** Cached result of the check that indicates whether the browser supports scroll behaviors. */
23
8
  let scrollBehaviorSupported;
24
- /** Check whether the browser supports scroll behaviors. */
25
9
  function supportsScrollBehavior() {
26
- if (scrollBehaviorSupported == null) {
27
- // If we're not in the browser, it can't be supported. Also check for `Element`, because
28
- // some projects stub out the global `document` during SSR which can throw us off.
29
- if (typeof document !== 'object' || !document || typeof Element !== 'function' || !Element) {
30
- scrollBehaviorSupported = false;
31
- return scrollBehaviorSupported;
32
- }
33
- // If the element can have a `scrollBehavior` style, we can be sure that it's supported.
34
- if (document.documentElement?.style && 'scrollBehavior' in document.documentElement.style) {
35
- scrollBehaviorSupported = true;
36
- }
37
- else {
38
- // At this point we have 3 possibilities: `scrollTo` isn't supported at all, it's
39
- // supported but it doesn't handle scroll behavior, or it has been polyfilled.
40
- const scrollToFunction = Element.prototype.scrollTo;
41
- if (scrollToFunction) {
42
- // We can detect if the function has been polyfilled by calling `toString` on it. Native
43
- // functions are obfuscated using `[native code]`, whereas if it was overwritten we'd get
44
- // the actual function source. Via https://davidwalsh.name/detect-native-function. Consider
45
- // polyfilled functions as supporting scroll behavior.
46
- scrollBehaviorSupported = !/\{\s*\[native code\]\s*\}/.test(scrollToFunction.toString());
47
- }
48
- else {
49
- scrollBehaviorSupported = false;
50
- }
51
- }
10
+ if (scrollBehaviorSupported == null) {
11
+ if (typeof document !== 'object' || !document || typeof Element !== 'function' || !Element) {
12
+ scrollBehaviorSupported = false;
13
+ return scrollBehaviorSupported;
52
14
  }
53
- return scrollBehaviorSupported;
15
+ if (document.documentElement?.style && 'scrollBehavior' in document.documentElement.style) {
16
+ scrollBehaviorSupported = true;
17
+ } else {
18
+ const scrollToFunction = Element.prototype.scrollTo;
19
+ if (scrollToFunction) {
20
+ scrollBehaviorSupported = !/\{\s*\[native code\]\s*\}/.test(scrollToFunction.toString());
21
+ } else {
22
+ scrollBehaviorSupported = false;
23
+ }
24
+ }
25
+ }
26
+ return scrollBehaviorSupported;
54
27
  }
55
- /**
56
- * Checks the type of RTL scroll axis used by this browser. As of time of writing, Chrome is NORMAL,
57
- * Firefox & Safari are NEGATED, and IE & Edge are INVERTED.
58
- */
59
28
  function getRtlScrollAxisType() {
60
- // We can't check unless we're on the browser. Just assume 'normal' if we're not.
61
- if (typeof document !== 'object' || !document) {
62
- return RtlScrollAxisType.NORMAL;
63
- }
64
- if (rtlScrollAxisType == null) {
65
- // Create a 1px wide scrolling container and a 2px wide content element.
66
- const scrollContainer = document.createElement('div');
67
- const containerStyle = scrollContainer.style;
68
- scrollContainer.dir = 'rtl';
69
- containerStyle.width = '1px';
70
- containerStyle.overflow = 'auto';
71
- containerStyle.visibility = 'hidden';
72
- containerStyle.pointerEvents = 'none';
73
- containerStyle.position = 'absolute';
74
- const content = document.createElement('div');
75
- const contentStyle = content.style;
76
- contentStyle.width = '2px';
77
- contentStyle.height = '1px';
78
- scrollContainer.appendChild(content);
79
- document.body.appendChild(scrollContainer);
80
- rtlScrollAxisType = RtlScrollAxisType.NORMAL;
81
- // The viewport starts scrolled all the way to the right in RTL mode. If we are in a NORMAL
82
- // browser this would mean that the scrollLeft should be 1. If it's zero instead we know we're
83
- // dealing with one of the other two types of browsers.
84
- if (scrollContainer.scrollLeft === 0) {
85
- // In a NEGATED browser the scrollLeft is always somewhere in [-maxScrollAmount, 0]. For an
86
- // INVERTED browser it is always somewhere in [0, maxScrollAmount]. We can determine which by
87
- // setting to the scrollLeft to 1. This is past the max for a NEGATED browser, so it will
88
- // return 0 when we read it again.
89
- scrollContainer.scrollLeft = 1;
90
- rtlScrollAxisType =
91
- scrollContainer.scrollLeft === 0 ? RtlScrollAxisType.NEGATED : RtlScrollAxisType.INVERTED;
92
- }
93
- scrollContainer.remove();
29
+ if (typeof document !== 'object' || !document) {
30
+ return RtlScrollAxisType.NORMAL;
31
+ }
32
+ if (rtlScrollAxisType == null) {
33
+ const scrollContainer = document.createElement('div');
34
+ const containerStyle = scrollContainer.style;
35
+ scrollContainer.dir = 'rtl';
36
+ containerStyle.width = '1px';
37
+ containerStyle.overflow = 'auto';
38
+ containerStyle.visibility = 'hidden';
39
+ containerStyle.pointerEvents = 'none';
40
+ containerStyle.position = 'absolute';
41
+ const content = document.createElement('div');
42
+ const contentStyle = content.style;
43
+ contentStyle.width = '2px';
44
+ contentStyle.height = '1px';
45
+ scrollContainer.appendChild(content);
46
+ document.body.appendChild(scrollContainer);
47
+ rtlScrollAxisType = RtlScrollAxisType.NORMAL;
48
+ if (scrollContainer.scrollLeft === 0) {
49
+ scrollContainer.scrollLeft = 1;
50
+ rtlScrollAxisType = scrollContainer.scrollLeft === 0 ? RtlScrollAxisType.NEGATED : RtlScrollAxisType.INVERTED;
94
51
  }
95
- return rtlScrollAxisType;
52
+ scrollContainer.remove();
53
+ }
54
+ return rtlScrollAxisType;
96
55
  }
97
56
 
98
57
  export { RtlScrollAxisType, getRtlScrollAxisType, supportsScrollBehavior };
@@ -1 +1 @@
1
- {"version":3,"file":"_scrolling-chunk.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-199a4f3c4e20/bin/src/cdk/platform/features/scrolling.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.dev/license\n */\n\n/** The possible ways the browser may handle the horizontal scroll axis in RTL languages. */\nexport enum RtlScrollAxisType {\n /**\n * scrollLeft is 0 when scrolled all the way left and (scrollWidth - clientWidth) when scrolled\n * all the way right.\n */\n NORMAL,\n /**\n * scrollLeft is -(scrollWidth - clientWidth) when scrolled all the way left and 0 when scrolled\n * all the way right.\n */\n NEGATED,\n /**\n * scrollLeft is (scrollWidth - clientWidth) when scrolled all the way left and 0 when scrolled\n * all the way right.\n */\n INVERTED,\n}\n\n/** Cached result of the way the browser handles the horizontal scroll axis in RTL mode. */\nlet rtlScrollAxisType: RtlScrollAxisType | undefined;\n\n/** Cached result of the check that indicates whether the browser supports scroll behaviors. */\nlet scrollBehaviorSupported: boolean | undefined;\n\n/** Check whether the browser supports scroll behaviors. */\nexport function supportsScrollBehavior(): boolean {\n if (scrollBehaviorSupported == null) {\n // If we're not in the browser, it can't be supported. Also check for `Element`, because\n // some projects stub out the global `document` during SSR which can throw us off.\n if (typeof document !== 'object' || !document || typeof Element !== 'function' || !Element) {\n scrollBehaviorSupported = false;\n return scrollBehaviorSupported;\n }\n\n // If the element can have a `scrollBehavior` style, we can be sure that it's supported.\n if (document.documentElement?.style && 'scrollBehavior' in document.documentElement!.style) {\n scrollBehaviorSupported = true;\n } else {\n // At this point we have 3 possibilities: `scrollTo` isn't supported at all, it's\n // supported but it doesn't handle scroll behavior, or it has been polyfilled.\n const scrollToFunction: Function | undefined = Element.prototype.scrollTo;\n\n if (scrollToFunction) {\n // We can detect if the function has been polyfilled by calling `toString` on it. Native\n // functions are obfuscated using `[native code]`, whereas if it was overwritten we'd get\n // the actual function source. Via https://davidwalsh.name/detect-native-function. Consider\n // polyfilled functions as supporting scroll behavior.\n scrollBehaviorSupported = !/\\{\\s*\\[native code\\]\\s*\\}/.test(scrollToFunction.toString());\n } else {\n scrollBehaviorSupported = false;\n }\n }\n }\n\n return scrollBehaviorSupported;\n}\n\n/**\n * Checks the type of RTL scroll axis used by this browser. As of time of writing, Chrome is NORMAL,\n * Firefox & Safari are NEGATED, and IE & Edge are INVERTED.\n */\nexport function getRtlScrollAxisType(): RtlScrollAxisType {\n // We can't check unless we're on the browser. Just assume 'normal' if we're not.\n if (typeof document !== 'object' || !document) {\n return RtlScrollAxisType.NORMAL;\n }\n\n if (rtlScrollAxisType == null) {\n // Create a 1px wide scrolling container and a 2px wide content element.\n const scrollContainer = document.createElement('div');\n const containerStyle = scrollContainer.style;\n scrollContainer.dir = 'rtl';\n containerStyle.width = '1px';\n containerStyle.overflow = 'auto';\n containerStyle.visibility = 'hidden';\n containerStyle.pointerEvents = 'none';\n containerStyle.position = 'absolute';\n\n const content = document.createElement('div');\n const contentStyle = content.style;\n contentStyle.width = '2px';\n contentStyle.height = '1px';\n\n scrollContainer.appendChild(content);\n document.body.appendChild(scrollContainer);\n\n rtlScrollAxisType = RtlScrollAxisType.NORMAL;\n\n // The viewport starts scrolled all the way to the right in RTL mode. If we are in a NORMAL\n // browser this would mean that the scrollLeft should be 1. If it's zero instead we know we're\n // dealing with one of the other two types of browsers.\n if (scrollContainer.scrollLeft === 0) {\n // In a NEGATED browser the scrollLeft is always somewhere in [-maxScrollAmount, 0]. For an\n // INVERTED browser it is always somewhere in [0, maxScrollAmount]. We can determine which by\n // setting to the scrollLeft to 1. This is past the max for a NEGATED browser, so it will\n // return 0 when we read it again.\n scrollContainer.scrollLeft = 1;\n rtlScrollAxisType =\n scrollContainer.scrollLeft === 0 ? RtlScrollAxisType.NEGATED : RtlScrollAxisType.INVERTED;\n }\n\n scrollContainer.remove();\n }\n return rtlScrollAxisType;\n}\n"],"names":[],"mappings":"AAQA;IACY;AAAZ,CAAA,UAAY,iBAAiB,EAAA;AAC3B;;;AAGG;AACH,IAAA,iBAAA,CAAA,iBAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM;AACN;;;AAGG;AACH,IAAA,iBAAA,CAAA,iBAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAO;AACP;;;AAGG;AACH,IAAA,iBAAA,CAAA,iBAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAQ;AACV,CAAC,EAhBW,iBAAiB,KAAjB,iBAAiB,GAgB5B,EAAA,CAAA,CAAA;AAED;AACA,IAAI,iBAAgD;AAEpD;AACA,IAAI,uBAA4C;AAEhD;SACgB,sBAAsB,GAAA;AACpC,IAAA,IAAI,uBAAuB,IAAI,IAAI,EAAE;;;AAGnC,QAAA,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,QAAQ,IAAI,OAAO,OAAO,KAAK,UAAU,IAAI,CAAC,OAAO,EAAE;YAC1F,uBAAuB,GAAG,KAAK;AAC/B,YAAA,OAAO,uBAAuB;;;AAIhC,QAAA,IAAI,QAAQ,CAAC,eAAe,EAAE,KAAK,IAAI,gBAAgB,IAAI,QAAQ,CAAC,eAAgB,CAAC,KAAK,EAAE;YAC1F,uBAAuB,GAAG,IAAI;;aACzB;;;AAGL,YAAA,MAAM,gBAAgB,GAAyB,OAAO,CAAC,SAAS,CAAC,QAAQ;YAEzE,IAAI,gBAAgB,EAAE;;;;;gBAKpB,uBAAuB,GAAG,CAAC,2BAA2B,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC;;iBACnF;gBACL,uBAAuB,GAAG,KAAK;;;;AAKrC,IAAA,OAAO,uBAAuB;AAChC;AAEA;;;AAGG;SACa,oBAAoB,GAAA;;IAElC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,QAAQ,EAAE;QAC7C,OAAO,iBAAiB,CAAC,MAAM;;AAGjC,IAAA,IAAI,iBAAiB,IAAI,IAAI,EAAE;;QAE7B,MAAM,eAAe,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACrD,QAAA,MAAM,cAAc,GAAG,eAAe,CAAC,KAAK;AAC5C,QAAA,eAAe,CAAC,GAAG,GAAG,KAAK;AAC3B,QAAA,cAAc,CAAC,KAAK,GAAG,KAAK;AAC5B,QAAA,cAAc,CAAC,QAAQ,GAAG,MAAM;AAChC,QAAA,cAAc,CAAC,UAAU,GAAG,QAAQ;AACpC,QAAA,cAAc,CAAC,aAAa,GAAG,MAAM;AACrC,QAAA,cAAc,CAAC,QAAQ,GAAG,UAAU;QAEpC,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC7C,QAAA,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK;AAClC,QAAA,YAAY,CAAC,KAAK,GAAG,KAAK;AAC1B,QAAA,YAAY,CAAC,MAAM,GAAG,KAAK;AAE3B,QAAA,eAAe,CAAC,WAAW,CAAC,OAAO,CAAC;AACpC,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC;AAE1C,QAAA,iBAAiB,GAAG,iBAAiB,CAAC,MAAM;;;;AAK5C,QAAA,IAAI,eAAe,CAAC,UAAU,KAAK,CAAC,EAAE;;;;;AAKpC,YAAA,eAAe,CAAC,UAAU,GAAG,CAAC;YAC9B,iBAAiB;AACf,gBAAA,eAAe,CAAC,UAAU,KAAK,CAAC,GAAG,iBAAiB,CAAC,OAAO,GAAG,iBAAiB,CAAC,QAAQ;;QAG7F,eAAe,CAAC,MAAM,EAAE;;AAE1B,IAAA,OAAO,iBAAiB;AAC1B;;;;"}
1
+ {"version":3,"file":"_scrolling-chunk.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-199a4f3c4e20/bin/src/cdk/platform/features/scrolling.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.dev/license\n */\n\n/** The possible ways the browser may handle the horizontal scroll axis in RTL languages. */\nexport enum RtlScrollAxisType {\n /**\n * scrollLeft is 0 when scrolled all the way left and (scrollWidth - clientWidth) when scrolled\n * all the way right.\n */\n NORMAL,\n /**\n * scrollLeft is -(scrollWidth - clientWidth) when scrolled all the way left and 0 when scrolled\n * all the way right.\n */\n NEGATED,\n /**\n * scrollLeft is (scrollWidth - clientWidth) when scrolled all the way left and 0 when scrolled\n * all the way right.\n */\n INVERTED,\n}\n\n/** Cached result of the way the browser handles the horizontal scroll axis in RTL mode. */\nlet rtlScrollAxisType: RtlScrollAxisType | undefined;\n\n/** Cached result of the check that indicates whether the browser supports scroll behaviors. */\nlet scrollBehaviorSupported: boolean | undefined;\n\n/** Check whether the browser supports scroll behaviors. */\nexport function supportsScrollBehavior(): boolean {\n if (scrollBehaviorSupported == null) {\n // If we're not in the browser, it can't be supported. Also check for `Element`, because\n // some projects stub out the global `document` during SSR which can throw us off.\n if (typeof document !== 'object' || !document || typeof Element !== 'function' || !Element) {\n scrollBehaviorSupported = false;\n return scrollBehaviorSupported;\n }\n\n // If the element can have a `scrollBehavior` style, we can be sure that it's supported.\n if (document.documentElement?.style && 'scrollBehavior' in document.documentElement!.style) {\n scrollBehaviorSupported = true;\n } else {\n // At this point we have 3 possibilities: `scrollTo` isn't supported at all, it's\n // supported but it doesn't handle scroll behavior, or it has been polyfilled.\n const scrollToFunction: Function | undefined = Element.prototype.scrollTo;\n\n if (scrollToFunction) {\n // We can detect if the function has been polyfilled by calling `toString` on it. Native\n // functions are obfuscated using `[native code]`, whereas if it was overwritten we'd get\n // the actual function source. Via https://davidwalsh.name/detect-native-function. Consider\n // polyfilled functions as supporting scroll behavior.\n scrollBehaviorSupported = !/\\{\\s*\\[native code\\]\\s*\\}/.test(scrollToFunction.toString());\n } else {\n scrollBehaviorSupported = false;\n }\n }\n }\n\n return scrollBehaviorSupported;\n}\n\n/**\n * Checks the type of RTL scroll axis used by this browser. As of time of writing, Chrome is NORMAL,\n * Firefox & Safari are NEGATED, and IE & Edge are INVERTED.\n */\nexport function getRtlScrollAxisType(): RtlScrollAxisType {\n // We can't check unless we're on the browser. Just assume 'normal' if we're not.\n if (typeof document !== 'object' || !document) {\n return RtlScrollAxisType.NORMAL;\n }\n\n if (rtlScrollAxisType == null) {\n // Create a 1px wide scrolling container and a 2px wide content element.\n const scrollContainer = document.createElement('div');\n const containerStyle = scrollContainer.style;\n scrollContainer.dir = 'rtl';\n containerStyle.width = '1px';\n containerStyle.overflow = 'auto';\n containerStyle.visibility = 'hidden';\n containerStyle.pointerEvents = 'none';\n containerStyle.position = 'absolute';\n\n const content = document.createElement('div');\n const contentStyle = content.style;\n contentStyle.width = '2px';\n contentStyle.height = '1px';\n\n scrollContainer.appendChild(content);\n document.body.appendChild(scrollContainer);\n\n rtlScrollAxisType = RtlScrollAxisType.NORMAL;\n\n // The viewport starts scrolled all the way to the right in RTL mode. If we are in a NORMAL\n // browser this would mean that the scrollLeft should be 1. If it's zero instead we know we're\n // dealing with one of the other two types of browsers.\n if (scrollContainer.scrollLeft === 0) {\n // In a NEGATED browser the scrollLeft is always somewhere in [-maxScrollAmount, 0]. For an\n // INVERTED browser it is always somewhere in [0, maxScrollAmount]. We can determine which by\n // setting to the scrollLeft to 1. This is past the max for a NEGATED browser, so it will\n // return 0 when we read it again.\n scrollContainer.scrollLeft = 1;\n rtlScrollAxisType =\n scrollContainer.scrollLeft === 0 ? RtlScrollAxisType.NEGATED : RtlScrollAxisType.INVERTED;\n }\n\n scrollContainer.remove();\n }\n return rtlScrollAxisType;\n}\n"],"names":["RtlScrollAxisType","rtlScrollAxisType","supportsScrollBehavior","document","Element","scrollBehaviorSupported","toString","NORMAL","scrollContainer","createElement","containerStyle","style","dir","width","overflow","visibility","pointerEvents","position","content","appendChild","scrollLeft"],"mappings":";;AAeEA,EAAAA,iBAAA,CAAAA,iBAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAA;;;AANU,CAAA,EAAA,iBAAA,KAAAA,iBAAA,GAAA,EAAA,CAAA,CAAA;IAmBZC,iBAAA;;AAMA,SAAAC,sBAAA,GAAA;;AAMM,IAAA,IAAA,OAAAC,QAAA,KAAAA,QAAAA,IAAAA,CAAAA,QAAA,IAAAC,OAAAA,OAAA,oBAAAA,OAA8B,EAAA;6BAChC,GAAA,KAAA;AAGA,MAAA,OAAAC,uBAAA;;6FAEO,EAAA;;KAGL,MAAA;;0BAMwD,EAAA;oFAGvB,CAAAC,QAAA,EAAA,CAAA;OAGrC,MAAA;QAEAD,uBAAA,GAAA,KAAA;;;;;;;;IAgBE,OAAAL,iBAAA,CAAAO,MAAA;;;AAIA,IAAA,MAAAC,eAAA,GAAAL,QAA4B,CAAAM,aAAA,CAAA,KAAA,CAAA;AAC5B,IAAA,MAAAC,cAAA,GAAAF,eAAA,CAAAG,KAAA;IACAH,eAAA,CAAAI,GAAA,GAAe,KAAA;kBAET,CAAAC,KAAA,GAAkB,KAAA;AACxBH,IAAAA,cAAA,CAAAI,QAAA,GAAA,MAAA;IAEAJ,cAAA,CAAAK,UAAsB,GAAA,QAAA;AAEtBL,IAAAA,cAAA,CAAAM,aAAA,GAAA,MAAA;IACAN,cAAA,CAAAO,qBAA0B;AAE1B,IAAA,MAAAC,OAAA,GAAAf,QAAoB,CAAAM,aAAA,CAAA,KAAkB,CAAA;sBAEqD,GAAAS,OAAA,CAAAP,KAAA;sBACG,GAAA,KAAA;uBACvC,GAAA,KAAA;AACvDH,IAAAA,2BAAoB,CAAAU,OAAA,CAAe;kBAC0DC,WAAA,CAAAX,eAAA,CAAA;qBACE,GAAAR,iBAAA,CAAAO,MAAA;IAK3F,IAAAC,eAAA,CAAAY,UAAgB,KAAA,CAAA,EAAA;;;;;;;;;;;"}
@@ -1,220 +1,149 @@
1
1
  import { Subject } from 'rxjs';
2
2
 
3
- /**
4
- * Class to be used to power selecting one or more options from a list.
5
- */
6
3
  class SelectionModel {
7
- _multiple;
8
- _emitChanges;
9
- compareWith;
10
- /** Currently-selected values. */
11
- _selection = new Set();
12
- /** Keeps track of the deselected options that haven't been emitted by the change event. */
13
- _deselectedToEmit = [];
14
- /** Keeps track of the selected options that haven't been emitted by the change event. */
15
- _selectedToEmit = [];
16
- /** Cache for the array value of the selected items. */
17
- _selected;
18
- /** Selected values. */
19
- get selected() {
20
- if (!this._selected) {
21
- this._selected = Array.from(this._selection.values());
22
- }
23
- return this._selected;
24
- }
25
- /** Event emitted when the value has changed. */
26
- changed = new Subject();
27
- constructor(_multiple = false, initiallySelectedValues, _emitChanges = true, compareWith) {
28
- this._multiple = _multiple;
29
- this._emitChanges = _emitChanges;
30
- this.compareWith = compareWith;
31
- if (initiallySelectedValues && initiallySelectedValues.length) {
32
- if (_multiple) {
33
- initiallySelectedValues.forEach(value => this._markSelected(value));
34
- }
35
- else {
36
- this._markSelected(initiallySelectedValues[0]);
37
- }
38
- // Clear the array in order to avoid firing the change event for preselected values.
39
- this._selectedToEmit.length = 0;
40
- }
41
- }
42
- /**
43
- * Selects a value or an array of values.
44
- * @param values The values to select
45
- * @return Whether the selection changed as a result of this call
46
- */
47
- select(...values) {
48
- this._verifyValueAssignment(values);
49
- values.forEach(value => this._markSelected(value));
50
- const changed = this._hasQueuedChanges();
51
- this._emitChangeEvent();
52
- return changed;
53
- }
54
- /**
55
- * Deselects a value or an array of values.
56
- * @param values The values to deselect
57
- * @return Whether the selection changed as a result of this call
58
- */
59
- deselect(...values) {
60
- this._verifyValueAssignment(values);
61
- values.forEach(value => this._unmarkSelected(value));
62
- const changed = this._hasQueuedChanges();
63
- this._emitChangeEvent();
64
- return changed;
65
- }
66
- /**
67
- * Sets the selected values
68
- * @param values The new selected values
69
- * @return Whether the selection changed as a result of this call
70
- */
71
- setSelection(...values) {
72
- this._verifyValueAssignment(values);
73
- const oldValues = this.selected;
74
- const newSelectedSet = new Set(values.map(value => this._getConcreteValue(value)));
75
- values.forEach(value => this._markSelected(value));
76
- oldValues
77
- .filter(value => !newSelectedSet.has(this._getConcreteValue(value, newSelectedSet)))
78
- .forEach(value => this._unmarkSelected(value));
79
- const changed = this._hasQueuedChanges();
80
- this._emitChangeEvent();
81
- return changed;
82
- }
83
- /**
84
- * Toggles a value between selected and deselected.
85
- * @param value The value to toggle
86
- * @return Whether the selection changed as a result of this call
87
- */
88
- toggle(value) {
89
- return this.isSelected(value) ? this.deselect(value) : this.select(value);
90
- }
91
- /**
92
- * Clears all of the selected values.
93
- * @param flushEvent Whether to flush the changes in an event.
94
- * If false, the changes to the selection will be flushed along with the next event.
95
- * @return Whether the selection changed as a result of this call
96
- */
97
- clear(flushEvent = true) {
4
+ _multiple;
5
+ _emitChanges;
6
+ compareWith;
7
+ _selection = new Set();
8
+ _deselectedToEmit = [];
9
+ _selectedToEmit = [];
10
+ _selected;
11
+ get selected() {
12
+ if (!this._selected) {
13
+ this._selected = Array.from(this._selection.values());
14
+ }
15
+ return this._selected;
16
+ }
17
+ changed = new Subject();
18
+ constructor(_multiple = false, initiallySelectedValues, _emitChanges = true, compareWith) {
19
+ this._multiple = _multiple;
20
+ this._emitChanges = _emitChanges;
21
+ this.compareWith = compareWith;
22
+ if (initiallySelectedValues && initiallySelectedValues.length) {
23
+ if (_multiple) {
24
+ initiallySelectedValues.forEach(value => this._markSelected(value));
25
+ } else {
26
+ this._markSelected(initiallySelectedValues[0]);
27
+ }
28
+ this._selectedToEmit.length = 0;
29
+ }
30
+ }
31
+ select(...values) {
32
+ this._verifyValueAssignment(values);
33
+ values.forEach(value => this._markSelected(value));
34
+ const changed = this._hasQueuedChanges();
35
+ this._emitChangeEvent();
36
+ return changed;
37
+ }
38
+ deselect(...values) {
39
+ this._verifyValueAssignment(values);
40
+ values.forEach(value => this._unmarkSelected(value));
41
+ const changed = this._hasQueuedChanges();
42
+ this._emitChangeEvent();
43
+ return changed;
44
+ }
45
+ setSelection(...values) {
46
+ this._verifyValueAssignment(values);
47
+ const oldValues = this.selected;
48
+ const newSelectedSet = new Set(values.map(value => this._getConcreteValue(value)));
49
+ values.forEach(value => this._markSelected(value));
50
+ oldValues.filter(value => !newSelectedSet.has(this._getConcreteValue(value, newSelectedSet))).forEach(value => this._unmarkSelected(value));
51
+ const changed = this._hasQueuedChanges();
52
+ this._emitChangeEvent();
53
+ return changed;
54
+ }
55
+ toggle(value) {
56
+ return this.isSelected(value) ? this.deselect(value) : this.select(value);
57
+ }
58
+ clear(flushEvent = true) {
59
+ this._unmarkAll();
60
+ const changed = this._hasQueuedChanges();
61
+ if (flushEvent) {
62
+ this._emitChangeEvent();
63
+ }
64
+ return changed;
65
+ }
66
+ isSelected(value) {
67
+ return this._selection.has(this._getConcreteValue(value));
68
+ }
69
+ isEmpty() {
70
+ return this._selection.size === 0;
71
+ }
72
+ hasValue() {
73
+ return !this.isEmpty();
74
+ }
75
+ sort(predicate) {
76
+ if (this._multiple && this.selected) {
77
+ this._selected.sort(predicate);
78
+ }
79
+ }
80
+ isMultipleSelection() {
81
+ return this._multiple;
82
+ }
83
+ _emitChangeEvent() {
84
+ this._selected = null;
85
+ if (this._selectedToEmit.length || this._deselectedToEmit.length) {
86
+ this.changed.next({
87
+ source: this,
88
+ added: this._selectedToEmit,
89
+ removed: this._deselectedToEmit
90
+ });
91
+ this._deselectedToEmit = [];
92
+ this._selectedToEmit = [];
93
+ }
94
+ }
95
+ _markSelected(value) {
96
+ value = this._getConcreteValue(value);
97
+ if (!this.isSelected(value)) {
98
+ if (!this._multiple) {
98
99
  this._unmarkAll();
99
- const changed = this._hasQueuedChanges();
100
- if (flushEvent) {
101
- this._emitChangeEvent();
102
- }
103
- return changed;
104
- }
105
- /**
106
- * Determines whether a value is selected.
107
- */
108
- isSelected(value) {
109
- return this._selection.has(this._getConcreteValue(value));
110
- }
111
- /**
112
- * Determines whether the model does not have a value.
113
- */
114
- isEmpty() {
115
- return this._selection.size === 0;
116
- }
117
- /**
118
- * Determines whether the model has a value.
119
- */
120
- hasValue() {
121
- return !this.isEmpty();
122
- }
123
- /**
124
- * Sorts the selected values based on a predicate function.
125
- */
126
- sort(predicate) {
127
- if (this._multiple && this.selected) {
128
- this._selected.sort(predicate);
129
- }
130
- }
131
- /**
132
- * Gets whether multiple values can be selected.
133
- */
134
- isMultipleSelection() {
135
- return this._multiple;
136
- }
137
- /** Emits a change event and clears the records of selected and deselected values. */
138
- _emitChangeEvent() {
139
- // Clear the selected values so they can be re-cached.
140
- this._selected = null;
141
- if (this._selectedToEmit.length || this._deselectedToEmit.length) {
142
- this.changed.next({
143
- source: this,
144
- added: this._selectedToEmit,
145
- removed: this._deselectedToEmit,
146
- });
147
- this._deselectedToEmit = [];
148
- this._selectedToEmit = [];
149
- }
150
- }
151
- /** Selects a value. */
152
- _markSelected(value) {
153
- value = this._getConcreteValue(value);
154
- if (!this.isSelected(value)) {
155
- if (!this._multiple) {
156
- this._unmarkAll();
157
- }
158
- if (!this.isSelected(value)) {
159
- this._selection.add(value);
160
- }
161
- if (this._emitChanges) {
162
- this._selectedToEmit.push(value);
163
- }
164
- }
165
- }
166
- /** Deselects a value. */
167
- _unmarkSelected(value) {
168
- value = this._getConcreteValue(value);
169
- if (this.isSelected(value)) {
170
- this._selection.delete(value);
171
- if (this._emitChanges) {
172
- this._deselectedToEmit.push(value);
173
- }
174
- }
175
- }
176
- /** Clears out the selected values. */
177
- _unmarkAll() {
178
- if (!this.isEmpty()) {
179
- this._selection.forEach(value => this._unmarkSelected(value));
180
- }
181
- }
182
- /**
183
- * Verifies the value assignment and throws an error if the specified value array is
184
- * including multiple values while the selection model is not supporting multiple values.
185
- */
186
- _verifyValueAssignment(values) {
187
- if (values.length > 1 && !this._multiple && (typeof ngDevMode === 'undefined' || ngDevMode)) {
188
- throw getMultipleValuesInSingleSelectionError();
189
- }
190
- }
191
- /** Whether there are queued up change to be emitted. */
192
- _hasQueuedChanges() {
193
- return !!(this._deselectedToEmit.length || this._selectedToEmit.length);
194
- }
195
- /** Returns a value that is comparable to inputValue by applying compareWith function, returns the same inputValue otherwise. */
196
- _getConcreteValue(inputValue, selection) {
197
- if (!this.compareWith) {
198
- return inputValue;
199
- }
200
- else {
201
- selection = selection ?? this._selection;
202
- for (let selectedValue of selection) {
203
- if (this.compareWith(inputValue, selectedValue)) {
204
- return selectedValue;
205
- }
206
- }
207
- return inputValue;
100
+ }
101
+ if (!this.isSelected(value)) {
102
+ this._selection.add(value);
103
+ }
104
+ if (this._emitChanges) {
105
+ this._selectedToEmit.push(value);
106
+ }
107
+ }
108
+ }
109
+ _unmarkSelected(value) {
110
+ value = this._getConcreteValue(value);
111
+ if (this.isSelected(value)) {
112
+ this._selection.delete(value);
113
+ if (this._emitChanges) {
114
+ this._deselectedToEmit.push(value);
115
+ }
116
+ }
117
+ }
118
+ _unmarkAll() {
119
+ if (!this.isEmpty()) {
120
+ this._selection.forEach(value => this._unmarkSelected(value));
121
+ }
122
+ }
123
+ _verifyValueAssignment(values) {
124
+ if (values.length > 1 && !this._multiple && (typeof ngDevMode === 'undefined' || ngDevMode)) {
125
+ throw getMultipleValuesInSingleSelectionError();
126
+ }
127
+ }
128
+ _hasQueuedChanges() {
129
+ return !!(this._deselectedToEmit.length || this._selectedToEmit.length);
130
+ }
131
+ _getConcreteValue(inputValue, selection) {
132
+ if (!this.compareWith) {
133
+ return inputValue;
134
+ } else {
135
+ selection = selection ?? this._selection;
136
+ for (let selectedValue of selection) {
137
+ if (this.compareWith(inputValue, selectedValue)) {
138
+ return selectedValue;
208
139
  }
140
+ }
141
+ return inputValue;
209
142
  }
143
+ }
210
144
  }
211
- /**
212
- * Returns an error that reports that multiple values are passed into a selection model
213
- * with a single value.
214
- * @docs-private
215
- */
216
145
  function getMultipleValuesInSingleSelectionError() {
217
- return Error('Cannot pass multiple values into SelectionModel with single-value mode.');
146
+ return Error('Cannot pass multiple values into SelectionModel with single-value mode.');
218
147
  }
219
148
 
220
149
  export { SelectionModel, getMultipleValuesInSingleSelectionError };
@@ -1 +1 @@
1
- {"version":3,"file":"_selection-model-chunk.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-199a4f3c4e20/bin/src/cdk/collections/selection-model.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.dev/license\n */\n\nimport {Subject} from 'rxjs';\n\n/**\n * Class to be used to power selecting one or more options from a list.\n */\nexport class SelectionModel<T> {\n /** Currently-selected values. */\n private _selection = new Set<T>();\n\n /** Keeps track of the deselected options that haven't been emitted by the change event. */\n private _deselectedToEmit: T[] = [];\n\n /** Keeps track of the selected options that haven't been emitted by the change event. */\n private _selectedToEmit: T[] = [];\n\n /** Cache for the array value of the selected items. */\n private _selected: T[] | null;\n\n /** Selected values. */\n get selected(): T[] {\n if (!this._selected) {\n this._selected = Array.from(this._selection.values());\n }\n\n return this._selected;\n }\n\n /** Event emitted when the value has changed. */\n readonly changed = new Subject<SelectionChange<T>>();\n\n constructor(\n private _multiple = false,\n initiallySelectedValues?: T[],\n private _emitChanges = true,\n public compareWith?: (o1: T, o2: T) => boolean,\n ) {\n if (initiallySelectedValues && initiallySelectedValues.length) {\n if (_multiple) {\n initiallySelectedValues.forEach(value => this._markSelected(value));\n } else {\n this._markSelected(initiallySelectedValues[0]);\n }\n\n // Clear the array in order to avoid firing the change event for preselected values.\n this._selectedToEmit.length = 0;\n }\n }\n\n /**\n * Selects a value or an array of values.\n * @param values The values to select\n * @return Whether the selection changed as a result of this call\n */\n select(...values: T[]): boolean {\n this._verifyValueAssignment(values);\n values.forEach(value => this._markSelected(value));\n const changed = this._hasQueuedChanges();\n this._emitChangeEvent();\n return changed;\n }\n\n /**\n * Deselects a value or an array of values.\n * @param values The values to deselect\n * @return Whether the selection changed as a result of this call\n */\n deselect(...values: T[]): boolean {\n this._verifyValueAssignment(values);\n values.forEach(value => this._unmarkSelected(value));\n const changed = this._hasQueuedChanges();\n this._emitChangeEvent();\n return changed;\n }\n\n /**\n * Sets the selected values\n * @param values The new selected values\n * @return Whether the selection changed as a result of this call\n */\n setSelection(...values: T[]): boolean {\n this._verifyValueAssignment(values);\n const oldValues = this.selected;\n const newSelectedSet = new Set(values.map(value => this._getConcreteValue(value)));\n values.forEach(value => this._markSelected(value));\n oldValues\n .filter(value => !newSelectedSet.has(this._getConcreteValue(value, newSelectedSet)))\n .forEach(value => this._unmarkSelected(value));\n const changed = this._hasQueuedChanges();\n this._emitChangeEvent();\n return changed;\n }\n\n /**\n * Toggles a value between selected and deselected.\n * @param value The value to toggle\n * @return Whether the selection changed as a result of this call\n */\n toggle(value: T): boolean {\n return this.isSelected(value) ? this.deselect(value) : this.select(value);\n }\n\n /**\n * Clears all of the selected values.\n * @param flushEvent Whether to flush the changes in an event.\n * If false, the changes to the selection will be flushed along with the next event.\n * @return Whether the selection changed as a result of this call\n */\n clear(flushEvent = true): boolean {\n this._unmarkAll();\n const changed = this._hasQueuedChanges();\n if (flushEvent) {\n this._emitChangeEvent();\n }\n return changed;\n }\n\n /**\n * Determines whether a value is selected.\n */\n isSelected(value: T): boolean {\n return this._selection.has(this._getConcreteValue(value));\n }\n\n /**\n * Determines whether the model does not have a value.\n */\n isEmpty(): boolean {\n return this._selection.size === 0;\n }\n\n /**\n * Determines whether the model has a value.\n */\n hasValue(): boolean {\n return !this.isEmpty();\n }\n\n /**\n * Sorts the selected values based on a predicate function.\n */\n sort(predicate?: (a: T, b: T) => number): void {\n if (this._multiple && this.selected) {\n this._selected!.sort(predicate);\n }\n }\n\n /**\n * Gets whether multiple values can be selected.\n */\n isMultipleSelection() {\n return this._multiple;\n }\n\n /** Emits a change event and clears the records of selected and deselected values. */\n private _emitChangeEvent() {\n // Clear the selected values so they can be re-cached.\n this._selected = null;\n\n if (this._selectedToEmit.length || this._deselectedToEmit.length) {\n this.changed.next({\n source: this,\n added: this._selectedToEmit,\n removed: this._deselectedToEmit,\n });\n\n this._deselectedToEmit = [];\n this._selectedToEmit = [];\n }\n }\n\n /** Selects a value. */\n private _markSelected(value: T) {\n value = this._getConcreteValue(value);\n if (!this.isSelected(value)) {\n if (!this._multiple) {\n this._unmarkAll();\n }\n\n if (!this.isSelected(value)) {\n this._selection.add(value);\n }\n\n if (this._emitChanges) {\n this._selectedToEmit.push(value);\n }\n }\n }\n\n /** Deselects a value. */\n private _unmarkSelected(value: T) {\n value = this._getConcreteValue(value);\n if (this.isSelected(value)) {\n this._selection.delete(value);\n\n if (this._emitChanges) {\n this._deselectedToEmit.push(value);\n }\n }\n }\n\n /** Clears out the selected values. */\n private _unmarkAll() {\n if (!this.isEmpty()) {\n this._selection.forEach(value => this._unmarkSelected(value));\n }\n }\n\n /**\n * Verifies the value assignment and throws an error if the specified value array is\n * including multiple values while the selection model is not supporting multiple values.\n */\n private _verifyValueAssignment(values: T[]) {\n if (values.length > 1 && !this._multiple && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getMultipleValuesInSingleSelectionError();\n }\n }\n\n /** Whether there are queued up change to be emitted. */\n private _hasQueuedChanges() {\n return !!(this._deselectedToEmit.length || this._selectedToEmit.length);\n }\n\n /** Returns a value that is comparable to inputValue by applying compareWith function, returns the same inputValue otherwise. */\n private _getConcreteValue(inputValue: T, selection?: Set<T>): T {\n if (!this.compareWith) {\n return inputValue;\n } else {\n selection = selection ?? this._selection;\n for (let selectedValue of selection) {\n if (this.compareWith!(inputValue, selectedValue)) {\n return selectedValue;\n }\n }\n return inputValue;\n }\n }\n}\n\n/**\n * Event emitted when the value of a MatSelectionModel has changed.\n * @docs-private\n */\nexport interface SelectionChange<T> {\n /** Model that dispatched the event. */\n source: SelectionModel<T>;\n /** Options that were added to the model. */\n added: T[];\n /** Options that were removed from the model. */\n removed: T[];\n}\n\n/**\n * Returns an error that reports that multiple values are passed into a selection model\n * with a single value.\n * @docs-private\n */\nexport function getMultipleValuesInSingleSelectionError() {\n return Error('Cannot pass multiple values into SelectionModel with single-value mode.');\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"_selection-model-chunk.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-199a4f3c4e20/bin/src/cdk/collections/selection-model.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.dev/license\n */\n\nimport {Subject} from 'rxjs';\n\n/**\n * Class to be used to power selecting one or more options from a list.\n */\nexport class SelectionModel<T> {\n /** Currently-selected values. */\n private _selection = new Set<T>();\n\n /** Keeps track of the deselected options that haven't been emitted by the change event. */\n private _deselectedToEmit: T[] = [];\n\n /** Keeps track of the selected options that haven't been emitted by the change event. */\n private _selectedToEmit: T[] = [];\n\n /** Cache for the array value of the selected items. */\n private _selected: T[] | null;\n\n /** Selected values. */\n get selected(): T[] {\n if (!this._selected) {\n this._selected = Array.from(this._selection.values());\n }\n\n return this._selected;\n }\n\n /** Event emitted when the value has changed. */\n readonly changed = new Subject<SelectionChange<T>>();\n\n constructor(\n private _multiple = false,\n initiallySelectedValues?: T[],\n private _emitChanges = true,\n public compareWith?: (o1: T, o2: T) => boolean,\n ) {\n if (initiallySelectedValues && initiallySelectedValues.length) {\n if (_multiple) {\n initiallySelectedValues.forEach(value => this._markSelected(value));\n } else {\n this._markSelected(initiallySelectedValues[0]);\n }\n\n // Clear the array in order to avoid firing the change event for preselected values.\n this._selectedToEmit.length = 0;\n }\n }\n\n /**\n * Selects a value or an array of values.\n * @param values The values to select\n * @return Whether the selection changed as a result of this call\n */\n select(...values: T[]): boolean {\n this._verifyValueAssignment(values);\n values.forEach(value => this._markSelected(value));\n const changed = this._hasQueuedChanges();\n this._emitChangeEvent();\n return changed;\n }\n\n /**\n * Deselects a value or an array of values.\n * @param values The values to deselect\n * @return Whether the selection changed as a result of this call\n */\n deselect(...values: T[]): boolean {\n this._verifyValueAssignment(values);\n values.forEach(value => this._unmarkSelected(value));\n const changed = this._hasQueuedChanges();\n this._emitChangeEvent();\n return changed;\n }\n\n /**\n * Sets the selected values\n * @param values The new selected values\n * @return Whether the selection changed as a result of this call\n */\n setSelection(...values: T[]): boolean {\n this._verifyValueAssignment(values);\n const oldValues = this.selected;\n const newSelectedSet = new Set(values.map(value => this._getConcreteValue(value)));\n values.forEach(value => this._markSelected(value));\n oldValues\n .filter(value => !newSelectedSet.has(this._getConcreteValue(value, newSelectedSet)))\n .forEach(value => this._unmarkSelected(value));\n const changed = this._hasQueuedChanges();\n this._emitChangeEvent();\n return changed;\n }\n\n /**\n * Toggles a value between selected and deselected.\n * @param value The value to toggle\n * @return Whether the selection changed as a result of this call\n */\n toggle(value: T): boolean {\n return this.isSelected(value) ? this.deselect(value) : this.select(value);\n }\n\n /**\n * Clears all of the selected values.\n * @param flushEvent Whether to flush the changes in an event.\n * If false, the changes to the selection will be flushed along with the next event.\n * @return Whether the selection changed as a result of this call\n */\n clear(flushEvent = true): boolean {\n this._unmarkAll();\n const changed = this._hasQueuedChanges();\n if (flushEvent) {\n this._emitChangeEvent();\n }\n return changed;\n }\n\n /**\n * Determines whether a value is selected.\n */\n isSelected(value: T): boolean {\n return this._selection.has(this._getConcreteValue(value));\n }\n\n /**\n * Determines whether the model does not have a value.\n */\n isEmpty(): boolean {\n return this._selection.size === 0;\n }\n\n /**\n * Determines whether the model has a value.\n */\n hasValue(): boolean {\n return !this.isEmpty();\n }\n\n /**\n * Sorts the selected values based on a predicate function.\n */\n sort(predicate?: (a: T, b: T) => number): void {\n if (this._multiple && this.selected) {\n this._selected!.sort(predicate);\n }\n }\n\n /**\n * Gets whether multiple values can be selected.\n */\n isMultipleSelection() {\n return this._multiple;\n }\n\n /** Emits a change event and clears the records of selected and deselected values. */\n private _emitChangeEvent() {\n // Clear the selected values so they can be re-cached.\n this._selected = null;\n\n if (this._selectedToEmit.length || this._deselectedToEmit.length) {\n this.changed.next({\n source: this,\n added: this._selectedToEmit,\n removed: this._deselectedToEmit,\n });\n\n this._deselectedToEmit = [];\n this._selectedToEmit = [];\n }\n }\n\n /** Selects a value. */\n private _markSelected(value: T) {\n value = this._getConcreteValue(value);\n if (!this.isSelected(value)) {\n if (!this._multiple) {\n this._unmarkAll();\n }\n\n if (!this.isSelected(value)) {\n this._selection.add(value);\n }\n\n if (this._emitChanges) {\n this._selectedToEmit.push(value);\n }\n }\n }\n\n /** Deselects a value. */\n private _unmarkSelected(value: T) {\n value = this._getConcreteValue(value);\n if (this.isSelected(value)) {\n this._selection.delete(value);\n\n if (this._emitChanges) {\n this._deselectedToEmit.push(value);\n }\n }\n }\n\n /** Clears out the selected values. */\n private _unmarkAll() {\n if (!this.isEmpty()) {\n this._selection.forEach(value => this._unmarkSelected(value));\n }\n }\n\n /**\n * Verifies the value assignment and throws an error if the specified value array is\n * including multiple values while the selection model is not supporting multiple values.\n */\n private _verifyValueAssignment(values: T[]) {\n if (values.length > 1 && !this._multiple && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getMultipleValuesInSingleSelectionError();\n }\n }\n\n /** Whether there are queued up change to be emitted. */\n private _hasQueuedChanges() {\n return !!(this._deselectedToEmit.length || this._selectedToEmit.length);\n }\n\n /** Returns a value that is comparable to inputValue by applying compareWith function, returns the same inputValue otherwise. */\n private _getConcreteValue(inputValue: T, selection?: Set<T>): T {\n if (!this.compareWith) {\n return inputValue;\n } else {\n selection = selection ?? this._selection;\n for (let selectedValue of selection) {\n if (this.compareWith!(inputValue, selectedValue)) {\n return selectedValue;\n }\n }\n return inputValue;\n }\n }\n}\n\n/**\n * Event emitted when the value of a MatSelectionModel has changed.\n * @docs-private\n */\nexport interface SelectionChange<T> {\n /** Model that dispatched the event. */\n source: SelectionModel<T>;\n /** Options that were added to the model. */\n added: T[];\n /** Options that were removed from the model. */\n removed: T[];\n}\n\n/**\n * Returns an error that reports that multiple values are passed into a selection model\n * with a single value.\n * @docs-private\n */\nexport function getMultipleValuesInSingleSelectionError() {\n return Error('Cannot pass multiple values into SelectionModel with single-value mode.');\n}\n"],"names":["_emitChanges","selected","_selected","Subject","constructor","_multiple","initiallySelectedValues","compareWith","forEach","value","_markSelected","_selectedToEmit","length","values","setSelection","filter","newSelectedSet","has","_getConcreteValue","_unmarkSelected","changed","_hasQueuedChanges","_emitChangeEvent","toggle","clear","flushEvent","_unmarkAll","isSelected","_selection","isEmpty","size","sort","predicate","isMultipleSelection","_deselectedToEmit","next","source","removed","add","delete","getMultipleValuesInSingleSelectionError"],"mappings":"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"}