@angular/cdk 21.0.0-next.8 → 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.
- package/_adev_assets/cdk_drag_drop.json +13 -12
- package/_adev_assets/cdk_testing.json +15 -25
- package/_adev_assets/cdk_testing_protractor.json +1 -1
- package/_adev_assets/cdk_testing_selenium_webdriver.json +1 -1
- package/_adev_assets/cdk_testing_testbed.json +1 -1
- package/fesm2022/_a11y-module-chunk.mjs +755 -869
- package/fesm2022/_a11y-module-chunk.mjs.map +1 -1
- package/fesm2022/_activedescendant-key-manager-chunk.mjs +8 -8
- package/fesm2022/_activedescendant-key-manager-chunk.mjs.map +1 -1
- package/fesm2022/_array-chunk.mjs +1 -1
- package/fesm2022/_array-chunk.mjs.map +1 -1
- package/fesm2022/_breakpoints-observer-chunk.mjs +149 -152
- package/fesm2022/_breakpoints-observer-chunk.mjs.map +1 -1
- package/fesm2022/_css-pixel-value-chunk.mjs +4 -5
- package/fesm2022/_css-pixel-value-chunk.mjs.map +1 -1
- package/fesm2022/_data-source-chunk.mjs +2 -8
- package/fesm2022/_data-source-chunk.mjs.map +1 -1
- package/fesm2022/_directionality-chunk.mjs +54 -54
- package/fesm2022/_directionality-chunk.mjs.map +1 -1
- package/fesm2022/_dispose-view-repeater-strategy-chunk.mjs +25 -36
- package/fesm2022/_dispose-view-repeater-strategy-chunk.mjs.map +1 -1
- package/fesm2022/_element-chunk.mjs +6 -17
- package/fesm2022/_element-chunk.mjs.map +1 -1
- package/fesm2022/_fake-event-detection-chunk.mjs +3 -17
- package/fesm2022/_fake-event-detection-chunk.mjs.map +1 -1
- package/fesm2022/_focus-key-manager-chunk.mjs +10 -14
- package/fesm2022/_focus-key-manager-chunk.mjs.map +1 -1
- package/fesm2022/_focus-monitor-chunk.mjs +376 -566
- package/fesm2022/_focus-monitor-chunk.mjs.map +1 -1
- package/fesm2022/_id-generator-chunk.mjs +36 -27
- package/fesm2022/_id-generator-chunk.mjs.map +1 -1
- package/fesm2022/_keycodes-chunk.mjs +9 -9
- package/fesm2022/_keycodes-chunk.mjs.map +1 -1
- package/fesm2022/_list-key-manager-chunk.mjs +248 -336
- package/fesm2022/_list-key-manager-chunk.mjs.map +1 -1
- package/fesm2022/_overlay-module-chunk.mjs +2534 -2948
- package/fesm2022/_overlay-module-chunk.mjs.map +1 -1
- package/fesm2022/_passive-listeners-chunk.mjs +10 -22
- package/fesm2022/_passive-listeners-chunk.mjs.map +1 -1
- package/fesm2022/_platform-chunk.mjs +42 -65
- package/fesm2022/_platform-chunk.mjs.map +1 -1
- package/fesm2022/_recycle-view-repeater-strategy-chunk.mjs +78 -134
- package/fesm2022/_recycle-view-repeater-strategy-chunk.mjs.map +1 -1
- package/fesm2022/_scrolling-chunk.mjs +44 -85
- package/fesm2022/_scrolling-chunk.mjs.map +1 -1
- package/fesm2022/_selection-model-chunk.mjs +138 -209
- package/fesm2022/_selection-model-chunk.mjs.map +1 -1
- package/fesm2022/_shadow-dom-chunk.mjs +21 -35
- package/fesm2022/_shadow-dom-chunk.mjs.map +1 -1
- package/fesm2022/_style-loader-chunk.mjs +50 -37
- package/fesm2022/_style-loader-chunk.mjs.map +1 -1
- package/fesm2022/_test-environment-chunk.mjs +2 -14
- package/fesm2022/_test-environment-chunk.mjs.map +1 -1
- package/fesm2022/_tree-key-manager-chunk.mjs +229 -308
- package/fesm2022/_tree-key-manager-chunk.mjs.map +1 -1
- package/fesm2022/_typeahead-chunk.mjs +52 -74
- package/fesm2022/_typeahead-chunk.mjs.map +1 -1
- package/fesm2022/_unique-selection-dispatcher-chunk.mjs +43 -40
- package/fesm2022/_unique-selection-dispatcher-chunk.mjs.map +1 -1
- package/fesm2022/a11y.mjs +351 -449
- package/fesm2022/a11y.mjs.map +1 -1
- package/fesm2022/accordion.mjs +254 -192
- package/fesm2022/accordion.mjs.map +1 -1
- package/fesm2022/bidi.mjs +121 -64
- package/fesm2022/bidi.mjs.map +1 -1
- package/fesm2022/cdk.mjs +1 -2
- package/fesm2022/cdk.mjs.map +1 -1
- package/fesm2022/clipboard.mjs +208 -186
- package/fesm2022/clipboard.mjs.map +1 -1
- package/fesm2022/coercion-private.mjs +4 -8
- package/fesm2022/coercion-private.mjs.map +1 -1
- package/fesm2022/coercion.mjs +11 -29
- package/fesm2022/coercion.mjs.map +1 -1
- package/fesm2022/dialog.mjs +660 -808
- package/fesm2022/dialog.mjs.map +1 -1
- package/fesm2022/drag-drop.mjs +3347 -4286
- package/fesm2022/drag-drop.mjs.map +1 -1
- package/fesm2022/keycodes.mjs +4 -8
- package/fesm2022/keycodes.mjs.map +1 -1
- package/fesm2022/layout.mjs +44 -26
- package/fesm2022/layout.mjs.map +1 -1
- package/fesm2022/listbox.mjs +841 -895
- package/fesm2022/listbox.mjs.map +1 -1
- package/fesm2022/menu.mjs +1942 -1858
- package/fesm2022/menu.mjs.map +1 -1
- package/fesm2022/observers-private.mjs +88 -106
- package/fesm2022/observers-private.mjs.map +1 -1
- package/fesm2022/observers.mjs +262 -184
- package/fesm2022/observers.mjs.map +1 -1
- package/fesm2022/overlay.mjs +72 -68
- package/fesm2022/overlay.mjs.map +1 -1
- package/fesm2022/platform.mjs +43 -54
- package/fesm2022/platform.mjs.map +1 -1
- package/fesm2022/portal.mjs +402 -560
- package/fesm2022/portal.mjs.map +1 -1
- package/fesm2022/private.mjs +38 -10
- package/fesm2022/private.mjs.map +1 -1
- package/fesm2022/scrolling.mjs +1323 -1400
- package/fesm2022/scrolling.mjs.map +1 -1
- package/fesm2022/stepper.mjs +758 -590
- package/fesm2022/stepper.mjs.map +1 -1
- package/fesm2022/table.mjs +2327 -2319
- package/fesm2022/table.mjs.map +1 -1
- package/fesm2022/testing-selenium-webdriver.mjs +252 -325
- package/fesm2022/testing-selenium-webdriver.mjs.map +1 -1
- package/fesm2022/testing-testbed.mjs +592 -709
- package/fesm2022/testing-testbed.mjs.map +1 -1
- package/fesm2022/testing.mjs +368 -889
- package/fesm2022/testing.mjs.map +1 -1
- package/fesm2022/text-field.mjs +459 -388
- package/fesm2022/text-field.mjs.map +1 -1
- package/fesm2022/tree.mjs +1483 -1731
- package/fesm2022/tree.mjs.map +1 -1
- package/overlay/_index.scss +28 -0
- package/overlay-prebuilt.css +1 -1
- package/package.json +1 -1
- package/schematics/ng-add/index.js +1 -1
- package/types/_harness-environment-chunk.d.ts +1 -2
- package/types/_overlay-module-chunk.d.ts +59 -7
- package/types/_portal-directives-chunk.d.ts +2 -18
- package/types/accordion.d.ts +3 -1
- package/types/dialog.d.ts +1 -1
- package/types/overlay.d.ts +6 -2
- 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
|
-
|
|
6
|
-
|
|
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
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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
|
-
|
|
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
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
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
|
-
|
|
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":[
|
|
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
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
this.
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
deselect(
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
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
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
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
|
-
|
|
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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"}
|