@skyux/core 8.7.0 → 9.0.0-alpha.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/{esm2020 → esm2022}/lib/modules/adapter-service/adapter.module.mjs +5 -5
- package/esm2022/lib/modules/adapter-service/adapter.service.mjs +225 -0
- package/esm2022/lib/modules/affix/affix.directive.mjs +116 -0
- package/{esm2020 → esm2022}/lib/modules/affix/affix.module.mjs +5 -5
- package/esm2022/lib/modules/affix/affix.service.mjs +25 -0
- package/esm2022/lib/modules/affix/affixer.mjs +398 -0
- package/esm2022/lib/modules/default-input-provider/default-input-provider.mjs +26 -0
- package/esm2022/lib/modules/dock/dock-dom-adapter.service.mjs +81 -0
- package/esm2022/lib/modules/dock/dock-item.mjs +31 -0
- package/esm2022/lib/modules/dock/dock.component.mjs +108 -0
- package/{esm2020 → esm2022}/lib/modules/dock/dock.module.mjs +5 -5
- package/esm2022/lib/modules/dock/dock.service.mjs +96 -0
- package/{esm2020 → esm2022}/lib/modules/dynamic-component/dynamic-component.module.mjs +5 -5
- package/esm2022/lib/modules/dynamic-component/dynamic-component.service.mjs +106 -0
- package/{esm2020 → esm2022}/lib/modules/format/app-format.mjs +4 -4
- package/esm2022/lib/modules/id/id.directive.mjs +31 -0
- package/{esm2020 → esm2022}/lib/modules/id/id.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/modules/id/id.service.mjs +4 -4
- package/esm2022/lib/modules/layout-host/layout-host.service.mjs +22 -0
- package/esm2022/lib/modules/live-announcer/live-announcer.service.mjs +79 -0
- package/{esm2020 → esm2022}/lib/modules/log/log.module.mjs +5 -5
- package/esm2022/lib/modules/log/log.service.mjs +148 -0
- package/{esm2020 → esm2022}/lib/modules/media-query/media-query.module.mjs +5 -5
- package/esm2022/lib/modules/media-query/media-query.service.mjs +123 -0
- package/{esm2020 → esm2022}/lib/modules/mutation/mutation-observer-service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/modules/numeric/numeric.module.mjs +5 -5
- package/esm2022/lib/modules/numeric/numeric.pipe.mjs +81 -0
- package/esm2022/lib/modules/numeric/numeric.service.mjs +205 -0
- package/esm2022/lib/modules/overlay/overlay-adapter.service.mjs +44 -0
- package/esm2022/lib/modules/overlay/overlay-instance.mjs +62 -0
- package/esm2022/lib/modules/overlay/overlay.component.mjs +193 -0
- package/{esm2020 → esm2022}/lib/modules/overlay/overlay.module.mjs +5 -5
- package/esm2022/lib/modules/overlay/overlay.service.mjs +124 -0
- package/{esm2020 → esm2022}/lib/modules/percent-pipe/percent-pipe.module.mjs +5 -5
- package/esm2022/lib/modules/percent-pipe/percent.pipe.mjs +56 -0
- package/esm2022/lib/modules/resize-observer/resize-observer-media-query.service.mjs +120 -0
- package/esm2022/lib/modules/resize-observer/resize-observer.service.mjs +77 -0
- package/esm2022/lib/modules/scrollable-host/scrollable-host.service.mjs +223 -0
- package/esm2022/lib/modules/shared/number-format/number-format-utility.mjs +72 -0
- package/esm2022/lib/modules/shared/sky-core-resources.module.mjs +50 -0
- package/esm2022/lib/modules/title/title.service.mjs +31 -0
- package/esm2022/lib/modules/trim/trim.directive.mjs +64 -0
- package/{esm2020 → esm2022}/lib/modules/trim/trim.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/modules/ui-config/ui-config.service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/modules/viewkeeper/viewkeeper-host-options.mjs +4 -4
- package/esm2022/lib/modules/viewkeeper/viewkeeper.directive.mjs +131 -0
- package/esm2022/lib/modules/viewkeeper/viewkeeper.mjs +283 -0
- package/{esm2020 → esm2022}/lib/modules/viewkeeper/viewkeeper.module.mjs +5 -5
- package/esm2022/lib/modules/viewkeeper/viewkeeper.service.mjs +39 -0
- package/{esm2020 → esm2022}/lib/modules/window/window-ref.mjs +4 -4
- package/esm2022/testing/core-testing.module.mjs +32 -0
- package/esm2022/testing/mock-media-query.service.mjs +46 -0
- package/{esm2020 → esm2022}/testing/mock-ui-config.service.mjs +4 -4
- package/esm2022/testing/overlay/overlay-harness.mjs +43 -0
- package/esm2022/testing/shared/component-harness.mjs +13 -0
- package/{fesm2020 → fesm2022}/skyux-core-testing.mjs +28 -34
- package/{fesm2020 → fesm2022}/skyux-core-testing.mjs.map +1 -1
- package/fesm2022/skyux-core.mjs +3858 -0
- package/fesm2022/skyux-core.mjs.map +1 -0
- package/lib/modules/affix/affix.directive.d.ts +1 -1
- package/lib/modules/viewkeeper/viewkeeper.directive.d.ts +1 -1
- package/package.json +14 -22
- package/esm2020/lib/modules/adapter-service/adapter.service.mjs +0 -227
- package/esm2020/lib/modules/affix/affix.directive.mjs +0 -118
- package/esm2020/lib/modules/affix/affix.service.mjs +0 -28
- package/esm2020/lib/modules/affix/affixer.mjs +0 -377
- package/esm2020/lib/modules/default-input-provider/default-input-provider.mjs +0 -31
- package/esm2020/lib/modules/dock/dock-dom-adapter.service.mjs +0 -83
- package/esm2020/lib/modules/dock/dock-item.mjs +0 -34
- package/esm2020/lib/modules/dock/dock.component.mjs +0 -110
- package/esm2020/lib/modules/dock/dock.service.mjs +0 -98
- package/esm2020/lib/modules/dynamic-component/dynamic-component.service.mjs +0 -109
- package/esm2020/lib/modules/id/id.directive.mjs +0 -34
- package/esm2020/lib/modules/layout-host/layout-host.service.mjs +0 -27
- package/esm2020/lib/modules/live-announcer/live-announcer.service.mjs +0 -80
- package/esm2020/lib/modules/log/log.service.mjs +0 -147
- package/esm2020/lib/modules/media-query/media-query.service.mjs +0 -124
- package/esm2020/lib/modules/numeric/numeric.pipe.mjs +0 -84
- package/esm2020/lib/modules/numeric/numeric.service.mjs +0 -179
- package/esm2020/lib/modules/overlay/overlay-adapter.service.mjs +0 -47
- package/esm2020/lib/modules/overlay/overlay-instance.mjs +0 -65
- package/esm2020/lib/modules/overlay/overlay.component.mjs +0 -192
- package/esm2020/lib/modules/overlay/overlay.service.mjs +0 -125
- package/esm2020/lib/modules/percent-pipe/percent.pipe.mjs +0 -59
- package/esm2020/lib/modules/resize-observer/resize-observer-media-query.service.mjs +0 -121
- package/esm2020/lib/modules/resize-observer/resize-observer.service.mjs +0 -79
- package/esm2020/lib/modules/scrollable-host/scrollable-host.service.mjs +0 -218
- package/esm2020/lib/modules/shared/number-format/number-format-utility.mjs +0 -72
- package/esm2020/lib/modules/shared/sky-core-resources.module.mjs +0 -50
- package/esm2020/lib/modules/title/title.service.mjs +0 -34
- package/esm2020/lib/modules/trim/trim.directive.mjs +0 -65
- package/esm2020/lib/modules/viewkeeper/viewkeeper.directive.mjs +0 -131
- package/esm2020/lib/modules/viewkeeper/viewkeeper.mjs +0 -276
- package/esm2020/lib/modules/viewkeeper/viewkeeper.service.mjs +0 -42
- package/esm2020/testing/core-testing.module.mjs +0 -32
- package/esm2020/testing/mock-media-query.service.mjs +0 -46
- package/esm2020/testing/overlay/overlay-harness.mjs +0 -43
- package/esm2020/testing/shared/component-harness.mjs +0 -19
- package/fesm2015/skyux-core-testing.mjs +0 -209
- package/fesm2015/skyux-core-testing.mjs.map +0 -1
- package/fesm2015/skyux-core.mjs +0 -3835
- package/fesm2015/skyux-core.mjs.map +0 -1
- package/fesm2020/skyux-core.mjs +0 -3825
- package/fesm2020/skyux-core.mjs.map +0 -1
- /package/{esm2020 → esm2022}/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/adapter-service/focusable-children-options.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/affix/affix-auto-fit-context.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/affix/affix-config.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/affix/affix-horizontal-alignment.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/affix/affix-offset-change.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/affix/affix-offset.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/affix/affix-placement-change.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/affix/affix-placement.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/affix/affix-position.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/affix/affix-rect.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/affix/affix-utils.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/affix/affix-vertical-alignment.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/affix/dom-utils.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/dock/dock-insert-component-config.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/dock/dock-item-config.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/dock/dock-item-reference.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/dock/dock-location.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/dock/dock-options.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/dock/sort-by-stack-order.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/dynamic-component/dynamic-component-location.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/dynamic-component/dynamic-component-options.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/layout-host/layout-host-for-child-args.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/live-announcer/types/live-announcer-args.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/live-announcer/types/live-announcer-politeness.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/log/types/log-deprecation-args.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/log/types/log-level-token.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/log/types/log-level.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/media-query/media-breakpoints.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/media-query/media-query-listener.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/numeric/numeric-symbol.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/numeric/numeric.options.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/overlay/overlay-config.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/overlay/overlay-context.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/overlay/overlay-position.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/stacking-context/stacking-context-token.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/stacking-context/stacking-context.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/title/set-title-args.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/viewkeeper/viewkeeper-boundary-info.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/viewkeeper/viewkeeper-fixed-styles.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/viewkeeper/viewkeeper-offset.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/viewkeeper/viewkeeper-options.mjs +0 -0
- /package/{esm2020 → esm2022}/skyux-core.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/overlay/overlay-harness-filters.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/shared/harness-filters.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/skyux-core-testing.mjs +0 -0
@@ -1,147 +0,0 @@
|
|
1
|
-
var _SkyLogService_instances, _SkyLogService_applicationLogLevel, _SkyLogService_formatter, _SkyLogService_convertStringToCode, _SkyLogService_canLog, _SkyLogService_logBasedOnLevel, _SkyLogService_logWithParams, _SkyLogService_buildMessageKey;
|
2
|
-
import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
|
3
|
-
import { Inject, Injectable, Optional } from '@angular/core';
|
4
|
-
import { SKY_LOG_LEVEL } from './types/log-level-token';
|
5
|
-
import * as i0 from "@angular/core";
|
6
|
-
import * as i1 from "../format/app-format";
|
7
|
-
const previousWarnings = new Set();
|
8
|
-
/**
|
9
|
-
* Logs information to the console based on the application's log level as
|
10
|
-
* provided by the `SKY_LOG_LEVEL` injection token. If no token is provided,
|
11
|
-
* only `error` logs will be shown.
|
12
|
-
* @internal
|
13
|
-
*/
|
14
|
-
export class SkyLogService {
|
15
|
-
constructor(formatter, applicationLogLevel) {
|
16
|
-
_SkyLogService_instances.add(this);
|
17
|
-
_SkyLogService_applicationLogLevel.set(this, void 0);
|
18
|
-
_SkyLogService_formatter.set(this, void 0);
|
19
|
-
__classPrivateFieldSet(this, _SkyLogService_formatter, formatter, "f");
|
20
|
-
__classPrivateFieldSet(this, _SkyLogService_applicationLogLevel, applicationLogLevel ?? 3 /* SkyLogLevel.Error */, "f");
|
21
|
-
}
|
22
|
-
/**
|
23
|
-
* Clears previously-logged messages. Primarily used for unit
|
24
|
-
* testing this service.
|
25
|
-
*/
|
26
|
-
static clearPreviousLogs() {
|
27
|
-
previousWarnings.clear();
|
28
|
-
}
|
29
|
-
/**
|
30
|
-
* Logs a deprecation warning for a class, property, function, etc. This will
|
31
|
-
* be logged as a console warning unless a different log level is given in the
|
32
|
-
* `args` parameter.
|
33
|
-
* @param name The name of the deprecated class, property, function, etc.
|
34
|
-
* @param args Information about the deprecation and replacement recommendations.
|
35
|
-
* @returns
|
36
|
-
*/
|
37
|
-
async deprecated(name, args) {
|
38
|
-
const logLevel = args?.logLevel ?? 2 /* SkyLogLevel.Warn */;
|
39
|
-
name = __classPrivateFieldGet(this, _SkyLogService_instances, "m", _SkyLogService_convertStringToCode).call(this, name);
|
40
|
-
if (__classPrivateFieldGet(this, _SkyLogService_instances, "m", _SkyLogService_canLog).call(this, logLevel)) {
|
41
|
-
const messageParts = [];
|
42
|
-
if (args?.deprecationMajorVersion) {
|
43
|
-
messageParts.push(__classPrivateFieldGet(this, _SkyLogService_formatter, "f").formatText('{0} is deprecated starting in SKY UX {1}.', name, args.deprecationMajorVersion.toLocaleString()));
|
44
|
-
}
|
45
|
-
else {
|
46
|
-
messageParts.push(__classPrivateFieldGet(this, _SkyLogService_formatter, "f").formatText('{0} is deprecated.', name));
|
47
|
-
}
|
48
|
-
if (args?.removalMajorVersion) {
|
49
|
-
messageParts.push(__classPrivateFieldGet(this, _SkyLogService_formatter, "f").formatText('We will remove it in version {0}.', args.removalMajorVersion.toLocaleString()));
|
50
|
-
}
|
51
|
-
else {
|
52
|
-
messageParts.push('We will remove it in a future major version.');
|
53
|
-
}
|
54
|
-
if (args?.replacementRecommendation) {
|
55
|
-
messageParts.push(args.replacementRecommendation);
|
56
|
-
}
|
57
|
-
if (args?.moreInfoUrl) {
|
58
|
-
messageParts.push(__classPrivateFieldGet(this, _SkyLogService_formatter, "f").formatText('For more information, see {0}.', args.moreInfoUrl));
|
59
|
-
}
|
60
|
-
__classPrivateFieldGet(this, _SkyLogService_instances, "m", _SkyLogService_logBasedOnLevel).call(this, logLevel, messageParts.join(' '));
|
61
|
-
}
|
62
|
-
return Promise.resolve();
|
63
|
-
}
|
64
|
-
/**
|
65
|
-
* Logs a console error if the application's log level is `SkyLogLevel.Error`.
|
66
|
-
* @param message The error message
|
67
|
-
* @param params Optional parameters for the error message.
|
68
|
-
*/
|
69
|
-
error(message, params) {
|
70
|
-
if (__classPrivateFieldGet(this, _SkyLogService_instances, "m", _SkyLogService_canLog).call(this, 3 /* SkyLogLevel.Error */)) {
|
71
|
-
__classPrivateFieldGet(this, _SkyLogService_instances, "m", _SkyLogService_logWithParams).call(this, 'error', message, params);
|
72
|
-
}
|
73
|
-
}
|
74
|
-
/**
|
75
|
-
* Logs console information if the application's log level is `SkyLogLevel.Info` or above.
|
76
|
-
* @param message The informational message
|
77
|
-
* @param params Optional parameters for the informational message.
|
78
|
-
*/
|
79
|
-
info(message, params) {
|
80
|
-
if (__classPrivateFieldGet(this, _SkyLogService_instances, "m", _SkyLogService_canLog).call(this, 1 /* SkyLogLevel.Info */)) {
|
81
|
-
__classPrivateFieldGet(this, _SkyLogService_instances, "m", _SkyLogService_logWithParams).call(this, 'log', message, params);
|
82
|
-
}
|
83
|
-
}
|
84
|
-
/**
|
85
|
-
* Logs a console warning if the application's log level is `SkyLogLevel.Warn` or above.
|
86
|
-
* @param message The warning message
|
87
|
-
* @param params Optional parameters for the warning message.
|
88
|
-
*/
|
89
|
-
warn(message, params) {
|
90
|
-
if (__classPrivateFieldGet(this, _SkyLogService_instances, "m", _SkyLogService_canLog).call(this, 2 /* SkyLogLevel.Warn */)) {
|
91
|
-
const messageKey = __classPrivateFieldGet(this, _SkyLogService_instances, "m", _SkyLogService_buildMessageKey).call(this, message, params);
|
92
|
-
// Only log each warning once per application instance to avoid drowning out other
|
93
|
-
// important messages in the console.
|
94
|
-
if (!previousWarnings.has(message)) {
|
95
|
-
__classPrivateFieldGet(this, _SkyLogService_instances, "m", _SkyLogService_logWithParams).call(this, 'warn', message, params);
|
96
|
-
previousWarnings.add(messageKey);
|
97
|
-
}
|
98
|
-
}
|
99
|
-
}
|
100
|
-
}
|
101
|
-
_SkyLogService_applicationLogLevel = new WeakMap(), _SkyLogService_formatter = new WeakMap(), _SkyLogService_instances = new WeakSet(), _SkyLogService_convertStringToCode = function _SkyLogService_convertStringToCode(typeString) {
|
102
|
-
if (typeString.charAt(0) !== '`' && typeString.charAt(-1) !== '`') {
|
103
|
-
typeString = '`' + typeString + '`';
|
104
|
-
}
|
105
|
-
return typeString;
|
106
|
-
}, _SkyLogService_canLog = function _SkyLogService_canLog(intendedLogLevel) {
|
107
|
-
return intendedLogLevel >= __classPrivateFieldGet(this, _SkyLogService_applicationLogLevel, "f");
|
108
|
-
}, _SkyLogService_logBasedOnLevel = function _SkyLogService_logBasedOnLevel(logLevel, message, params) {
|
109
|
-
switch (logLevel) {
|
110
|
-
case 1 /* SkyLogLevel.Info */:
|
111
|
-
this.info(message, params);
|
112
|
-
break;
|
113
|
-
case 2 /* SkyLogLevel.Warn */:
|
114
|
-
this.warn(message, params);
|
115
|
-
break;
|
116
|
-
case 3 /* SkyLogLevel.Error */:
|
117
|
-
this.error(message, params);
|
118
|
-
break;
|
119
|
-
}
|
120
|
-
}, _SkyLogService_logWithParams = function _SkyLogService_logWithParams(logMethod, message, params) {
|
121
|
-
if (params) {
|
122
|
-
console[logMethod](message, ...params);
|
123
|
-
}
|
124
|
-
else {
|
125
|
-
console[logMethod](message);
|
126
|
-
}
|
127
|
-
}, _SkyLogService_buildMessageKey = function _SkyLogService_buildMessageKey(message, params) {
|
128
|
-
let key = message;
|
129
|
-
if (params?.length) {
|
130
|
-
key = `${key} ${params.join(' ')}`;
|
131
|
-
}
|
132
|
-
return key;
|
133
|
-
};
|
134
|
-
SkyLogService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyLogService, deps: [{ token: i1.SkyAppFormat }, { token: SKY_LOG_LEVEL, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
135
|
-
SkyLogService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyLogService, providedIn: 'root' });
|
136
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyLogService, decorators: [{
|
137
|
-
type: Injectable,
|
138
|
-
args: [{
|
139
|
-
providedIn: 'root',
|
140
|
-
}]
|
141
|
-
}], ctorParameters: function () { return [{ type: i1.SkyAppFormat }, { type: undefined, decorators: [{
|
142
|
-
type: Optional
|
143
|
-
}, {
|
144
|
-
type: Inject,
|
145
|
-
args: [SKY_LOG_LEVEL]
|
146
|
-
}] }]; } });
|
147
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvY29yZS9zcmMvbGliL21vZHVsZXMvbG9nL2xvZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTTdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7O0FBRXhELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztBQUUzQzs7Ozs7R0FLRztBQUlILE1BQU0sT0FBTyxhQUFhO0lBS3hCLFlBQ0UsU0FBdUIsRUFHdkIsbUJBQWlDOztRQVJuQyxxREFBa0M7UUFFbEMsMkNBQXlCO1FBUXZCLHVCQUFBLElBQUksNEJBQWMsU0FBUyxNQUFBLENBQUM7UUFDNUIsdUJBQUEsSUFBSSxzQ0FBd0IsbUJBQW1CLDZCQUFxQixNQUFBLENBQUM7SUFDdkUsQ0FBQztJQUVEOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxpQkFBaUI7UUFDN0IsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxLQUFLLENBQUMsVUFBVSxDQUNyQixJQUFZLEVBQ1osSUFBMkI7UUFFM0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxFQUFFLFFBQVEsNEJBQW9CLENBQUM7UUFDcEQsSUFBSSxHQUFHLHVCQUFBLElBQUksb0VBQXFCLE1BQXpCLElBQUksRUFBc0IsSUFBSSxDQUFDLENBQUM7UUFFdkMsSUFBSSx1QkFBQSxJQUFJLHVEQUFRLE1BQVosSUFBSSxFQUFTLFFBQVEsQ0FBQyxFQUFFO1lBQzFCLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztZQUV4QixJQUFJLElBQUksRUFBRSx1QkFBdUIsRUFBRTtnQkFDakMsWUFBWSxDQUFDLElB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QWdCLElBQUksdUJBQUEsSUFBSSwwQ0FBcUIsQ0FBQztBQUN2RCxDQUFDLDJFQUdDLFFBQXFCLEVBQ3JCLE9BQWUsRUFDZixNQUFrQjtJQUVsQixRQUFRLFFBQVEsRUFBRTtRQUNoQjtZQUNFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzNCLE1BQU07UUFDUjtZQUNFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzNCLE1BQU07UUFDUjtZQUNFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzVCLE1BQU07S0FDVDtBQUNILENBQUMsdUVBR0MsU0FBbUMsRUFDbkMsT0FBZSxFQUNmLE1BQTZCO0lBRTdCLElBQUksTUFBTSxFQUFFO1FBQ1YsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDO0tBQ3hDO1NBQU07UUFDTCxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDN0I7QUFDSCxDQUFDLDJFQUVnQixPQUFlLEVBQUUsTUFBa0I7SUFDbEQsSUFBSSxHQUFHLEdBQUcsT0FBTyxDQUFDO0lBRWxCLElBQUksTUFBTSxFQUFFLE1BQU0sRUFBRTtRQUNsQixHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0tBQ3BDO0lBRUQsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDOzBHQTdLVSxhQUFhLDhDQVFkLGFBQWE7OEdBUlosYUFBYSxjQUZaLE1BQU07MkZBRVAsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQVFJLFFBQVE7OzBCQUNSLE1BQU07MkJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgU2t5QXBwRm9ybWF0IH0gZnJvbSAnLi4vZm9ybWF0L2FwcC1mb3JtYXQnO1xuXG5pbXBvcnQgeyBTa3lMb2dEZXByZWNhdGVkQXJncyB9IGZyb20gJy4vdHlwZXMvbG9nLWRlcHJlY2F0aW9uLWFyZ3MnO1xuaW1wb3J0IHsgU2t5TG9nTGV2ZWwgfSBmcm9tICcuL3R5cGVzL2xvZy1sZXZlbCc7XG5pbXBvcnQgeyBTS1lfTE9HX0xFVkVMIH0gZnJvbSAnLi90eXBlcy9sb2ctbGV2ZWwtdG9rZW4nO1xuXG5jb25zdCBwcmV2aW91c1dhcm5pbmdzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbi8qKlxuICogTG9ncyBpbmZvcm1hdGlvbiB0byB0aGUgY29uc29sZSBiYXNlZCBvbiB0aGUgYXBwbGljYXRpb24ncyBsb2cgbGV2ZWwgYXNcbiAqIHByb3ZpZGVkIGJ5IHRoZSBgU0tZX0xPR19MRVZFTGAgaW5qZWN0aW9uIHRva2VuLiBJZiBubyB0b2tlbiBpcyBwcm92aWRlZCxcbiAqIG9ubHkgYGVycm9yYCBsb2dzIHdpbGwgYmUgc2hvd24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFNreUxvZ1NlcnZpY2Uge1xuICAjYXBwbGljYXRpb25Mb2dMZXZlbDogU2t5TG9nTGV2ZWw7XG5cbiAgI2Zvcm1hdHRlcjogU2t5QXBwRm9ybWF0O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGZvcm1hdHRlcjogU2t5QXBwRm9ybWF0LFxuICAgIEBPcHRpb25hbCgpXG4gICAgQEluamVjdChTS1lfTE9HX0xFVkVMKVxuICAgIGFwcGxpY2F0aW9uTG9nTGV2ZWw/OiBTa3lMb2dMZXZlbFxuICApIHtcbiAgICB0aGlzLiNmb3JtYXR0ZXIgPSBmb3JtYXR0ZXI7XG4gICAgdGhpcy4jYXBwbGljYXRpb25Mb2dMZXZlbCA9IGFwcGxpY2F0aW9uTG9nTGV2ZWwgPz8gU2t5TG9nTGV2ZWwuRXJyb3I7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIHByZXZpb3VzbHktbG9nZ2VkIG1lc3NhZ2VzLiBQcmltYXJpbHkgdXNlZCBmb3IgdW5pdFxuICAgKiB0ZXN0aW5nIHRoaXMgc2VydmljZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY2xlYXJQcmV2aW91c0xvZ3MoKTogdm9pZCB7XG4gICAgcHJldmlvdXNXYXJuaW5ncy5jbGVhcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvZ3MgYSBkZXByZWNhdGlvbiB3YXJuaW5nIGZvciBhIGNsYXNzLCBwcm9wZXJ0eSwgZnVuY3Rpb24sIGV0Yy4gVGhpcyB3aWxsXG4gICAqIGJlIGxvZ2dlZCBhcyBhIGNvbnNvbGUgd2FybmluZyB1bmxlc3MgYSBkaWZmZXJlbnQgbG9nIGxldmVsIGlzIGdpdmVuIGluIHRoZVxuICAgKiBgYXJnc2AgcGFyYW1ldGVyLlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgZGVwcmVjYXRlZCBjbGFzcywgcHJvcGVydHksIGZ1bmN0aW9uLCBldGMuXG4gICAqIEBwYXJhbSBhcmdzIEluZm9ybWF0aW9uIGFib3V0IHRoZSBkZXByZWNhdGlvbiBhbmQgcmVwbGFjZW1lbnQgcmVjb21tZW5kYXRpb25zLlxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIGRlcHJlY2F0ZWQoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGFyZ3M/OiBTa3lMb2dEZXByZWNhdGVkQXJnc1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBsb2dMZXZlbCA9IGFyZ3M/LmxvZ0xldmVsID8/IFNreUxvZ0xldmVsLldhcm47XG4gICAgbmFtZSA9IHRoaXMuI2NvbnZlcnRTdHJpbmdUb0NvZGUobmFtZSk7XG5cbiAgICBpZiAodGhpcy4jY2FuTG9nKGxvZ0xldmVsKSkge1xuICAgICAgY29uc3QgbWVzc2FnZVBhcnRzID0gW107XG5cbiAgICAgIGlmIChhcmdzPy5kZXByZWNhdGlvbk1ham9yVmVyc2lvbikge1xuICAgICAgICBtZXNzYWdlUGFydHMucHVzaChcbiAgICAgICAgICB0aGlzLiNmb3JtYXR0ZXIuZm9ybWF0VGV4dChcbiAgICAgICAgICAgICd7MH0gaXMgZGVwcmVjYXRlZCBzdGFydGluZyBpbiBTS1kgVVggezF9LicsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgYXJncy5kZXByZWNhdGlvbk1ham9yVmVyc2lvbi50b0xvY2FsZVN0cmluZygpXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWVzc2FnZVBhcnRzLnB1c2goXG4gICAgICAgICAgdGhpcy4jZm9ybWF0dGVyLmZvcm1hdFRleHQoJ3swfSBpcyBkZXByZWNhdGVkLicsIG5hbWUpXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmIChhcmdzPy5yZW1vdmFsTWFqb3JWZXJzaW9uKSB7XG4gICAgICAgIG1lc3NhZ2VQYXJ0cy5wdXNoKFxuICAgICAgICAgIHRoaXMuI2Zvcm1hdHRlci5mb3JtYXRUZXh0KFxuICAgICAgICAgICAgJ1dlIHdpbGwgcmVtb3ZlIGl0IGluIHZlcnNpb24gezB9LicsXG4gICAgICAgICAgICBhcmdzLnJlbW92YWxNYWpvclZlcnNpb24udG9Mb2NhbGVTdHJpbmcoKVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1lc3NhZ2VQYXJ0cy5wdXNoKCdXZSB3aWxsIHJlbW92ZSBpdCBpbiBhIGZ1dHVyZSBtYWpvciB2ZXJzaW9uLicpO1xuICAgICAgfVxuXG4gICAgICBpZiAoYXJncz8ucmVwbGFjZW1lbnRSZWNvbW1lbmRhdGlvbikge1xuICAgICAgICBtZXNzYWdlUGFydHMucHVzaChhcmdzLnJlcGxhY2VtZW50UmVjb21tZW5kYXRpb24pO1xuICAgICAgfVxuXG4gICAgICBpZiAoYXJncz8ubW9yZUluZm9VcmwpIHtcbiAgICAgICAgbWVzc2FnZVBhcnRzLnB1c2goXG4gICAgICAgICAgdGhpcy4jZm9ybWF0dGVyLmZvcm1hdFRleHQoXG4gICAgICAgICAgICAnRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB7MH0uJyxcbiAgICAgICAgICAgIGFyZ3MubW9yZUluZm9VcmxcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuI2xvZ0Jhc2VkT25MZXZlbChsb2dMZXZlbCwgbWVzc2FnZVBhcnRzLmpvaW4oJyAnKSk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2dzIGEgY29uc29sZSBlcnJvciBpZiB0aGUgYXBwbGljYXRpb24ncyBsb2cgbGV2ZWwgaXMgYFNreUxvZ0xldmVsLkVycm9yYC5cbiAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2VcbiAgICogQHBhcmFtIHBhcmFtcyBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciB0aGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIHB1YmxpYyBlcnJvcihtZXNzYWdlOiBzdHJpbmcsIHBhcmFtcz86IHVua25vd25bXSk6IHZvaWQge1xuICAgIGlmICh0aGlzLiNjYW5Mb2coU2t5TG9nTGV2ZWwuRXJyb3IpKSB7XG4gICAgICB0aGlzLiNsb2dXaXRoUGFyYW1zKCdlcnJvcicsIG1lc3NhZ2UsIHBhcmFtcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvZ3MgY29uc29sZSBpbmZvcm1hdGlvbiBpZiB0aGUgYXBwbGljYXRpb24ncyBsb2cgbGV2ZWwgaXMgYFNreUxvZ0xldmVsLkluZm9gIG9yIGFib3ZlLlxuICAgKiBAcGFyYW0gbWVzc2FnZSBUaGUgaW5mb3JtYXRpb25hbCBtZXNzYWdlXG4gICAqIEBwYXJhbSBwYXJhbXMgT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgdGhlIGluZm9ybWF0aW9uYWwgbWVzc2FnZS5cbiAgICovXG4gIHB1YmxpYyBpbmZvKG1lc3NhZ2U6IHN0cmluZywgcGFyYW1zPzogdW5rbm93bltdKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuI2NhbkxvZyhTa3lMb2dMZXZlbC5JbmZvKSkge1xuICAgICAgdGhpcy4jbG9nV2l0aFBhcmFtcygnbG9nJywgbWVzc2FnZSwgcGFyYW1zKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9ncyBhIGNvbnNvbGUgd2FybmluZyBpZiB0aGUgYXBwbGljYXRpb24ncyBsb2cgbGV2ZWwgaXMgYFNreUxvZ0xldmVsLldhcm5gIG9yIGFib3ZlLlxuICAgKiBAcGFyYW0gbWVzc2FnZSBUaGUgd2FybmluZyBtZXNzYWdlXG4gICAqIEBwYXJhbSBwYXJhbXMgT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgdGhlIHdhcm5pbmcgbWVzc2FnZS5cbiAgICovXG4gIHB1YmxpYyB3YXJuKG1lc3NhZ2U6IHN0cmluZywgcGFyYW1zPzogdW5rbm93bltdKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuI2NhbkxvZyhTa3lMb2dMZXZlbC5XYXJuKSkge1xuICAgICAgY29uc3QgbWVzc2FnZUtleSA9IHRoaXMuI2J1aWxkTWVzc2FnZUtleShtZXNzYWdlLCBwYXJhbXMpO1xuXG4gICAgICAvLyBPbmx5IGxvZyBlYWNoIHdhcm5pbmcgb25jZSBwZXIgYXBwbGljYXRpb24gaW5zdGFuY2UgdG8gYXZvaWQgZHJvd25pbmcgb3V0IG90aGVyXG4gICAgICAvLyBpbXBvcnRhbnQgbWVzc2FnZXMgaW4gdGhlIGNvbnNvbGUuXG4gICAgICBpZiAoIXByZXZpb3VzV2FybmluZ3MuaGFzKG1lc3NhZ2UpKSB7XG4gICAgICAgIHRoaXMuI2xvZ1dpdGhQYXJhbXMoJ3dhcm4nLCBtZXNzYWdlLCBwYXJhbXMpO1xuICAgICAgICBwcmV2aW91c1dhcm5pbmdzLmFkZChtZXNzYWdlS2V5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAjY29udmVydFN0cmluZ1RvQ29kZSh0eXBlU3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICh0eXBlU3RyaW5nLmNoYXJBdCgwKSAhPT0gJ2AnICYmIHR5cGVTdHJpbmcuY2hhckF0KC0xKSAhPT0gJ2AnKSB7XG4gICAgICB0eXBlU3RyaW5nID0gJ2AnICsgdHlwZVN0cmluZyArICdgJztcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVTdHJpbmc7XG4gIH1cblxuICAjY2FuTG9nKGludGVuZGVkTG9nTGV2ZWw6IFNreUxvZ0xldmVsKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGludGVuZGVkTG9nTGV2ZWwgPj0gdGhpcy4jYXBwbGljYXRpb25Mb2dMZXZlbDtcbiAgfVxuXG4gICNsb2dCYXNlZE9uTGV2ZWwoXG4gICAgbG9nTGV2ZWw6IFNreUxvZ0xldmVsLFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICBwYXJhbXM/OiB1bmtub3duW11cbiAgKTogdm9pZCB7XG4gICAgc3dpdGNoIChsb2dMZXZlbCkge1xuICAgICAgY2FzZSBTa3lMb2dMZXZlbC5JbmZvOlxuICAgICAgICB0aGlzLmluZm8obWVzc2FnZSwgcGFyYW1zKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFNreUxvZ0xldmVsLldhcm46XG4gICAgICAgIHRoaXMud2FybihtZXNzYWdlLCBwYXJhbXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU2t5TG9nTGV2ZWwuRXJyb3I6XG4gICAgICAgIHRoaXMuZXJyb3IobWVzc2FnZSwgcGFyYW1zKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgI2xvZ1dpdGhQYXJhbXMoXG4gICAgbG9nTWV0aG9kOiAnbG9nJyB8ICd3YXJuJyB8ICdlcnJvcicsXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIHBhcmFtczogdW5rbm93bltdIHwgdW5kZWZpbmVkXG4gICk6IHZvaWQge1xuICAgIGlmIChwYXJhbXMpIHtcbiAgICAgIGNvbnNvbGVbbG9nTWV0aG9kXShtZXNzYWdlLCAuLi5wYXJhbXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlW2xvZ01ldGhvZF0obWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgI2J1aWxkTWVzc2FnZUtleShtZXNzYWdlOiBzdHJpbmcsIHBhcmFtcz86IHVua25vd25bXSk6IHN0cmluZyB7XG4gICAgbGV0IGtleSA9IG1lc3NhZ2U7XG5cbiAgICBpZiAocGFyYW1zPy5sZW5ndGgpIHtcbiAgICAgIGtleSA9IGAke2tleX0gJHtwYXJhbXMuam9pbignICcpfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGtleTtcbiAgfVxufVxuIl19
|
@@ -1,124 +0,0 @@
|
|
1
|
-
var _SkyMediaQueryService_instances, _SkyMediaQueryService_currentSubject, _SkyMediaQueryService_currentBreakpoint, _SkyMediaQueryService_breakpoints, _SkyMediaQueryService_mediaQueries, _SkyMediaQueryService_zone, _SkyMediaQueryService_addListeners, _SkyMediaQueryService_removeListeners, _SkyMediaQueryService_notifyBreakpointChange;
|
2
|
-
import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
|
3
|
-
import { Injectable } from '@angular/core';
|
4
|
-
import { BehaviorSubject } from 'rxjs';
|
5
|
-
import { SkyMediaBreakpoints } from './media-breakpoints';
|
6
|
-
import * as i0 from "@angular/core";
|
7
|
-
const DEFAULT_BREAKPOINT = SkyMediaBreakpoints.md;
|
8
|
-
export class SkyMediaQueryService {
|
9
|
-
/**
|
10
|
-
* Returns the current breakpoint.
|
11
|
-
*/
|
12
|
-
get current() {
|
13
|
-
return __classPrivateFieldGet(this, _SkyMediaQueryService_currentBreakpoint, "f");
|
14
|
-
}
|
15
|
-
constructor(zone) {
|
16
|
-
_SkyMediaQueryService_instances.add(this);
|
17
|
-
_SkyMediaQueryService_currentSubject.set(this, new BehaviorSubject(DEFAULT_BREAKPOINT));
|
18
|
-
_SkyMediaQueryService_currentBreakpoint.set(this, DEFAULT_BREAKPOINT);
|
19
|
-
_SkyMediaQueryService_breakpoints.set(this, [
|
20
|
-
{
|
21
|
-
mediaQueryString: SkyMediaQueryService.xs,
|
22
|
-
name: SkyMediaBreakpoints.xs,
|
23
|
-
},
|
24
|
-
{
|
25
|
-
mediaQueryString: SkyMediaQueryService.sm,
|
26
|
-
name: SkyMediaBreakpoints.sm,
|
27
|
-
},
|
28
|
-
{
|
29
|
-
mediaQueryString: SkyMediaQueryService.md,
|
30
|
-
name: SkyMediaBreakpoints.md,
|
31
|
-
},
|
32
|
-
{
|
33
|
-
mediaQueryString: SkyMediaQueryService.lg,
|
34
|
-
name: SkyMediaBreakpoints.lg,
|
35
|
-
},
|
36
|
-
]);
|
37
|
-
_SkyMediaQueryService_mediaQueries.set(this, []);
|
38
|
-
_SkyMediaQueryService_zone.set(this, void 0);
|
39
|
-
__classPrivateFieldSet(this, _SkyMediaQueryService_zone, zone, "f");
|
40
|
-
__classPrivateFieldGet(this, _SkyMediaQueryService_instances, "m", _SkyMediaQueryService_addListeners).call(this);
|
41
|
-
}
|
42
|
-
ngOnDestroy() {
|
43
|
-
__classPrivateFieldGet(this, _SkyMediaQueryService_instances, "m", _SkyMediaQueryService_removeListeners).call(this);
|
44
|
-
__classPrivateFieldGet(this, _SkyMediaQueryService_currentSubject, "f").complete();
|
45
|
-
}
|
46
|
-
/**
|
47
|
-
* Subscribes to screen size changes.
|
48
|
-
* @param listener Specifies a function that is called when breakpoints change.
|
49
|
-
*/
|
50
|
-
subscribe(listener) {
|
51
|
-
return __classPrivateFieldGet(this, _SkyMediaQueryService_currentSubject, "f").subscribe({
|
52
|
-
next: (breakpoints) => {
|
53
|
-
listener(breakpoints);
|
54
|
-
},
|
55
|
-
});
|
56
|
-
}
|
57
|
-
/**
|
58
|
-
* @internal
|
59
|
-
*/
|
60
|
-
destroy() {
|
61
|
-
__classPrivateFieldGet(this, _SkyMediaQueryService_instances, "m", _SkyMediaQueryService_removeListeners).call(this);
|
62
|
-
__classPrivateFieldGet(this, _SkyMediaQueryService_currentSubject, "f").complete();
|
63
|
-
}
|
64
|
-
}
|
65
|
-
_SkyMediaQueryService_currentSubject = new WeakMap(), _SkyMediaQueryService_currentBreakpoint = new WeakMap(), _SkyMediaQueryService_breakpoints = new WeakMap(), _SkyMediaQueryService_mediaQueries = new WeakMap(), _SkyMediaQueryService_zone = new WeakMap(), _SkyMediaQueryService_instances = new WeakSet(), _SkyMediaQueryService_addListeners = function _SkyMediaQueryService_addListeners() {
|
66
|
-
__classPrivateFieldSet(this, _SkyMediaQueryService_mediaQueries, __classPrivateFieldGet(this, _SkyMediaQueryService_breakpoints, "f").map((breakpoint) => {
|
67
|
-
const mq = matchMedia(breakpoint.mediaQueryString);
|
68
|
-
const listener = (event) => {
|
69
|
-
// Run the check outside of Angular's change detection since Angular
|
70
|
-
// does not wrap matchMedia listeners in NgZone.
|
71
|
-
// See: https://blog.assaf.co/angular-2-change-detection-zones-and-an-example/
|
72
|
-
__classPrivateFieldGet(this, _SkyMediaQueryService_zone, "f").run(() => {
|
73
|
-
if (event.matches) {
|
74
|
-
__classPrivateFieldGet(this, _SkyMediaQueryService_instances, "m", _SkyMediaQueryService_notifyBreakpointChange).call(this, breakpoint.name);
|
75
|
-
}
|
76
|
-
});
|
77
|
-
};
|
78
|
-
mq.addListener(listener);
|
79
|
-
if (mq.matches) {
|
80
|
-
__classPrivateFieldGet(this, _SkyMediaQueryService_instances, "m", _SkyMediaQueryService_notifyBreakpointChange).call(this, breakpoint.name);
|
81
|
-
}
|
82
|
-
return {
|
83
|
-
mediaQueryList: mq,
|
84
|
-
listener,
|
85
|
-
};
|
86
|
-
}), "f");
|
87
|
-
}, _SkyMediaQueryService_removeListeners = function _SkyMediaQueryService_removeListeners() {
|
88
|
-
__classPrivateFieldGet(this, _SkyMediaQueryService_mediaQueries, "f").forEach((mediaQuery) => {
|
89
|
-
mediaQuery.mediaQueryList.removeListener(mediaQuery.listener);
|
90
|
-
});
|
91
|
-
__classPrivateFieldSet(this, _SkyMediaQueryService_mediaQueries, [], "f");
|
92
|
-
}, _SkyMediaQueryService_notifyBreakpointChange = function _SkyMediaQueryService_notifyBreakpointChange(breakpoint) {
|
93
|
-
__classPrivateFieldSet(this, _SkyMediaQueryService_currentBreakpoint, breakpoint, "f");
|
94
|
-
__classPrivateFieldGet(this, _SkyMediaQueryService_currentSubject, "f").next(breakpoint);
|
95
|
-
};
|
96
|
-
/**
|
97
|
-
* The size for the `xs` breakpoint.
|
98
|
-
* @default "(max-width: 767px)"
|
99
|
-
*/
|
100
|
-
SkyMediaQueryService.xs = '(max-width: 767px)';
|
101
|
-
/**
|
102
|
-
* The size for the `sm` breakpoint.
|
103
|
-
* @default "(min-width: 768px) and (max-width: 991px)"
|
104
|
-
*/
|
105
|
-
SkyMediaQueryService.sm = '(min-width: 768px) and (max-width: 991px)';
|
106
|
-
/**
|
107
|
-
* The size for the `md` breakpoint.
|
108
|
-
* @default "(min-width: 992px) and (max-width: 1199px)"
|
109
|
-
*/
|
110
|
-
SkyMediaQueryService.md = '(min-width: 992px) and (max-width: 1199px)';
|
111
|
-
/**
|
112
|
-
* The size for the `lg` breakpoint.
|
113
|
-
* @default "(min-width: 1200px)"
|
114
|
-
*/
|
115
|
-
SkyMediaQueryService.lg = '(min-width: 1200px)';
|
116
|
-
SkyMediaQueryService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyMediaQueryService, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
|
117
|
-
SkyMediaQueryService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyMediaQueryService, providedIn: 'root' });
|
118
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyMediaQueryService, decorators: [{
|
119
|
-
type: Injectable,
|
120
|
-
args: [{
|
121
|
-
providedIn: 'root',
|
122
|
-
}]
|
123
|
-
}], ctorParameters: function () { return [{ type: i0.NgZone }]; } });
|
124
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaWEtcXVlcnkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9jb3JlL3NyYy9saWIvbW9kdWxlcy9tZWRpYS1xdWVyeS9tZWRpYS1xdWVyeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFFOUQsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFFckQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUJBQXFCLENBQUM7O0FBRzFELE1BQU0sa0JBQWtCLEdBQUcsbUJBQW1CLENBQUMsRUFBRSxDQUFDO0FBS2xELE1BQU0sT0FBTyxvQkFBb0I7SUF5Qi9COztPQUVHO0lBQ0gsSUFBVyxPQUFPO1FBQ2hCLE9BQU8sdUJBQUEsSUFBSSwrQ0FBbUIsQ0FBQztJQUNqQyxDQUFDO0lBcUNELFlBQVksSUFBWTs7UUFuQ3hCLCtDQUFrQixJQUFJLGVBQWUsQ0FDbkMsa0JBQWtCLENBQ25CLEVBQUM7UUFFRixrREFBcUIsa0JBQWtCLEVBQUM7UUFFeEMsNENBR007WUFDSjtnQkFDRSxnQkFBZ0IsRUFBRSxvQkFBb0IsQ0FBQyxFQUFFO2dCQUN6QyxJQUFJLEVBQUUsbUJBQW1CLENBQUMsRUFBRTthQUM3QjtZQUNEO2dCQUNFLGdCQUFnQixFQUFFLG9CQUFvQixDQUFDLEVBQUU7Z0JBQ3pDLElBQUksRUFBRSxtQkFBbUIsQ0FBQyxFQUFFO2FBQzdCO1lBQ0Q7Z0JBQ0UsZ0JBQWdCLEVBQUUsb0JBQW9CLENBQUMsRUFBRTtnQkFDekMsSUFBSSxFQUFFLG1CQUFtQixDQUFDLEVBQUU7YUFDN0I7WUFDRDtnQkFDRSxnQkFBZ0IsRUFBRSxvQkFBb0IsQ0FBQyxFQUFFO2dCQUN6QyxJQUFJLEVBQUUsbUJBQW1CLENBQUMsRUFBRTthQUM3QjtTQUNGLEVBQUM7UUFF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b20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBTa3lNZWRpYUJyZWFrcG9pbnRzIH0gZnJvbSAnLi9tZWRpYS1icmVha3BvaW50cyc7XG5pbXBvcnQgeyBTa3lNZWRpYVF1ZXJ5TGlzdGVuZXIgfSBmcm9tICcuL21lZGlhLXF1ZXJ5LWxpc3RlbmVyJztcblxuY29uc3QgREVGQVVMVF9CUkVBS1BPSU5UID0gU2t5TWVkaWFCcmVha3BvaW50cy5tZDtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFNreU1lZGlhUXVlcnlTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqIFRoZSBzaXplIGZvciB0aGUgYHhzYCBicmVha3BvaW50LlxuICAgKiBAZGVmYXVsdCBcIihtYXgtd2lkdGg6IDc2N3B4KVwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHhzID0gJyhtYXgtd2lkdGg6IDc2N3B4KSc7XG5cbiAgLyoqXG4gICAqIFRoZSBzaXplIGZvciB0aGUgYHNtYCBicmVha3BvaW50LlxuICAgKiBAZGVmYXVsdCBcIihtaW4td2lkdGg6IDc2OHB4KSBhbmQgKG1heC13aWR0aDogOTkxcHgpXCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgc20gPSAnKG1pbi13aWR0aDogNzY4cHgpIGFuZCAobWF4LXdpZHRoOiA5OTFweCknO1xuXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBmb3IgdGhlIGBtZGAgYnJlYWtwb2ludC5cbiAgICogQGRlZmF1bHQgXCIobWluLXdpZHRoOiA5OTJweCkgYW5kIChtYXgtd2lkdGg6IDExOTlweClcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtZCA9ICcobWluLXdpZHRoOiA5OTJweCkgYW5kIChtYXgtd2lkdGg6IDExOTlweCknO1xuXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBmb3IgdGhlIGBsZ2AgYnJlYWtwb2ludC5cbiAgICogQGRlZmF1bHQgXCIobWluLXdpZHRoOiAxMjAwcHgpXCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbGcgPSAnKG1pbi13aWR0aDogMTIwMHB4KSc7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgYnJlYWtwb2ludC5cbiAgICovXG4gIHB1YmxpYyBnZXQgY3VycmVudCgpOiBTa3lNZWRpYUJyZWFrcG9pbnRzIHtcbiAgICByZXR1cm4gdGhpcy4jY3VycmVudEJyZWFrcG9pbnQ7XG4gIH1cblxuICAjY3VycmVudFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNreU1lZGlhQnJlYWtwb2ludHM+KFxuICAgIERFRkFVTFRfQlJFQUtQT0lOVFxuICApO1xuXG4gICNjdXJyZW50QnJlYWtwb2ludCA9IERFRkFVTFRfQlJFQUtQT0lOVDtcblxuICAjYnJlYWtwb2ludHM6IHtcbiAgICBtZWRpYVF1ZXJ5U3RyaW5nOiBzdHJpbmc7XG4gICAgbmFtZTogU2t5TWVkaWFCcmVha3BvaW50cztcbiAgfVtdID0gW1xuICAgIHtcbiAgICAgIG1lZGlhUXVlcnlTdHJpbmc6IFNreU1lZGlhUXVlcnlTZXJ2aWNlLnhzLFxuICAgICAgbmFtZTogU2t5TWVkaWFCcmVha3BvaW50cy54cyxcbiAgICB9LFxuICAgIHtcbiAgICAgIG1lZGlhUXVlcnlTdHJpbmc6IFNreU1lZGlhUXVlcnlTZXJ2aWNlLnNtLFxuICAgICAgbmFtZTogU2t5TWVkaWFCcmVha3BvaW50cy5zbSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG1lZGlhUXVlcnlTdHJpbmc6IFNreU1lZGlhUXVlcnlTZXJ2aWNlLm1kLFxuICAgICAgbmFtZTogU2t5TWVkaWFCcmVha3BvaW50cy5tZCxcbiAgICB9LFxuICAgIHtcbiAgICAgIG1lZGlhUXVlcnlTdHJpbmc6IFNreU1lZGlhUXVlcnlTZXJ2aWNlLmxnLFxuICAgICAgbmFtZTogU2t5TWVkaWFCcmVha3BvaW50cy5sZyxcbiAgICB9LFxuICBdO1xuXG4gICNtZWRpYVF1ZXJpZXM6IHtcbiAgICBtZWRpYVF1ZXJ5TGlzdDogTWVkaWFRdWVyeUxpc3Q7XG4gICAgbGlzdGVuZXI6IChldmVudDogYW55KSA9PiB2b2lkO1xuICB9W10gPSBbXTtcblxuICAjem9uZTogTmdab25lO1xuXG4gIGNvbnN0cnVjdG9yKHpvbmU6IE5nWm9uZSkge1xuICAgIHRoaXMuI3pvbmUgPSB6b25lO1xuICAgIHRoaXMuI2FkZExpc3RlbmVycygpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuI3JlbW92ZUxpc3RlbmVycygpO1xuICAgIHRoaXMuI2N1cnJlbnRTdWJqZWN0LmNvbXBsZXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlcyB0byBzY3JlZW4gc2l6ZSBjaGFuZ2VzLlxuICAgKiBAcGFyYW0gbGlzdGVuZXIgU3BlY2lmaWVzIGEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiBicmVha3BvaW50cyBjaGFuZ2UuXG4gICAqL1xuICBwdWJsaWMgc3Vic2NyaWJlKGxpc3RlbmVyOiBTa3lNZWRpYVF1ZXJ5TGlzdGVuZXIpOiBTdWJzY3JpcHRpb24ge1xuICAgIHJldHVybiB0aGlzLiNjdXJyZW50U3ViamVjdC5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKGJyZWFrcG9pbnRzOiBTa3lNZWRpYUJyZWFrcG9pbnRzKSA9PiB7XG4gICAgICAgIGxpc3RlbmVyKGJyZWFrcG9pbnRzKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgZGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLiNyZW1vdmVMaXN0ZW5lcnMoKTtcbiAgICB0aGlzLiNjdXJyZW50U3ViamVjdC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgI2FkZExpc3RlbmVycygpOiB2b2lkIHtcbiAgICB0aGlzLiNtZWRpYVF1ZXJpZXMgPSB0aGlzLiNicmVha3BvaW50cy5tYXAoKGJyZWFrcG9pbnQpID0+IHtcbiAgICAgIGNvbnN0IG1xID0gbWF0Y2hNZWRpYShicmVha3BvaW50Lm1lZGlhUXVlcnlTdHJpbmcpO1xuXG4gICAgICBjb25zdCBsaXN0ZW5lciA9IChldmVudDogTWVkaWFRdWVyeUxpc3RFdmVudCkgPT4ge1xuICAgICAgICAvLyBSdW4gdGhlIGNoZWNrIG91dHNpZGUgb2YgQW5ndWxhcidzIGNoYW5nZSBkZXRlY3Rpb24gc2luY2UgQW5ndWxhclxuICAgICAgICAvLyBkb2VzIG5vdCB3cmFwIG1hdGNoTWVkaWEgbGlzdGVuZXJzIGluIE5nWm9uZS5cbiAgICAgICAgLy8gU2VlOiBodHRwczovL2Jsb2cuYXNzYWYuY28vYW5ndWxhci0yLWNoYW5nZS1kZXRlY3Rpb24tem9uZXMtYW5kLWFuLWV4YW1wbGUvXG4gICAgICAgIHRoaXMuI3pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnQubWF0Y2hlcykge1xuICAgICAgICAgICAgdGhpcy4jbm90aWZ5QnJlYWtwb2ludENoYW5nZShicmVha3BvaW50Lm5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICBtcS5hZGRMaXN0ZW5lcihsaXN0ZW5lcik7XG5cbiAgICAgIGlmIChtcS5tYXRjaGVzKSB7XG4gICAgICAgIHRoaXMuI25vdGlmeUJyZWFrcG9pbnRDaGFuZ2UoYnJlYWtwb2ludC5uYW1lKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbWVkaWFRdWVyeUxpc3Q6IG1xLFxuICAgICAgICBsaXN0ZW5lcixcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICAjcmVtb3ZlTGlzdGVuZXJzKCk6IHZvaWQge1xuICAgIHRoaXMuI21lZGlhUXVlcmllcy5mb3JFYWNoKChtZWRpYVF1ZXJ5KSA9PiB7XG4gICAgICBtZWRpYVF1ZXJ5Lm1lZGlhUXVlcnlMaXN0LnJlbW92ZUxpc3RlbmVyKG1lZGlhUXVlcnkubGlzdGVuZXIpO1xuICAgIH0pO1xuICAgIHRoaXMuI21lZGlhUXVlcmllcyA9IFtdO1xuICB9XG5cbiAgI25vdGlmeUJyZWFrcG9pbnRDaGFuZ2UoYnJlYWtwb2ludDogU2t5TWVkaWFCcmVha3BvaW50cyk6IHZvaWQge1xuICAgIHRoaXMuI2N1cnJlbnRCcmVha3BvaW50ID0gYnJlYWtwb2ludDtcbiAgICB0aGlzLiNjdXJyZW50U3ViamVjdC5uZXh0KGJyZWFrcG9pbnQpO1xuICB9XG59XG4iXX0=
|
@@ -1,84 +0,0 @@
|
|
1
|
-
var _SkyNumericPipe_cacheKey, _SkyNumericPipe_changeDetector, _SkyNumericPipe_formattedValue, _SkyNumericPipe_ngUnsubscribe, _SkyNumericPipe_numericSvc, _SkyNumericPipe_providerLocale;
|
2
|
-
import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
|
3
|
-
import { Pipe, } from '@angular/core';
|
4
|
-
import { Subject } from 'rxjs';
|
5
|
-
import { takeUntil } from 'rxjs/operators';
|
6
|
-
import { NumericOptions } from './numeric.options';
|
7
|
-
import * as i0 from "@angular/core";
|
8
|
-
import * as i1 from "@skyux/i18n";
|
9
|
-
import * as i2 from "./numeric.service";
|
10
|
-
/**
|
11
|
-
* Shortens numbers to rounded numbers and abbreviation characters such as K for thousands,
|
12
|
-
* M for millions, B for billions, and T for trillions. The pipe also formats for currency.
|
13
|
-
* Be sure you have a space after the two curly brackets opening the pipe and
|
14
|
-
* a space before the two curly brackets closing the pipe or it will not work.
|
15
|
-
*/
|
16
|
-
export class SkyNumericPipe {
|
17
|
-
constructor(localeProvider, numericSvc, changeDetector) {
|
18
|
-
_SkyNumericPipe_cacheKey.set(this, void 0);
|
19
|
-
_SkyNumericPipe_changeDetector.set(this, void 0);
|
20
|
-
_SkyNumericPipe_formattedValue.set(this, void 0);
|
21
|
-
_SkyNumericPipe_ngUnsubscribe.set(this, new Subject());
|
22
|
-
_SkyNumericPipe_numericSvc.set(this, void 0);
|
23
|
-
_SkyNumericPipe_providerLocale.set(this, void 0);
|
24
|
-
__classPrivateFieldSet(this, _SkyNumericPipe_numericSvc, numericSvc, "f");
|
25
|
-
__classPrivateFieldSet(this, _SkyNumericPipe_changeDetector, changeDetector, "f");
|
26
|
-
localeProvider
|
27
|
-
.getLocaleInfo()
|
28
|
-
.pipe(takeUntil(__classPrivateFieldGet(this, _SkyNumericPipe_ngUnsubscribe, "f")))
|
29
|
-
.subscribe((localeInfo) => {
|
30
|
-
__classPrivateFieldSet(this, _SkyNumericPipe_providerLocale, localeInfo.locale, "f");
|
31
|
-
numericSvc.currentLocale = __classPrivateFieldGet(this, _SkyNumericPipe_providerLocale, "f");
|
32
|
-
__classPrivateFieldGet(this, _SkyNumericPipe_changeDetector, "f").markForCheck();
|
33
|
-
});
|
34
|
-
}
|
35
|
-
ngOnDestroy() {
|
36
|
-
__classPrivateFieldGet(this, _SkyNumericPipe_ngUnsubscribe, "f").next();
|
37
|
-
__classPrivateFieldGet(this, _SkyNumericPipe_ngUnsubscribe, "f").complete();
|
38
|
-
}
|
39
|
-
/**
|
40
|
-
* Formats a number based on the provided options.
|
41
|
-
*/
|
42
|
-
transform(value, config) {
|
43
|
-
const newCacheKey = (config ? JSON.stringify(config, Object.keys(config).sort()) : '') +
|
44
|
-
`${value}_${config?.locale || __classPrivateFieldGet(this, _SkyNumericPipe_providerLocale, "f")}`;
|
45
|
-
/* If the value and locale are the same as the last transform then return the previous value
|
46
|
-
instead of reformatting. */
|
47
|
-
if (__classPrivateFieldGet(this, _SkyNumericPipe_formattedValue, "f") && __classPrivateFieldGet(this, _SkyNumericPipe_cacheKey, "f") === newCacheKey) {
|
48
|
-
return __classPrivateFieldGet(this, _SkyNumericPipe_formattedValue, "f");
|
49
|
-
}
|
50
|
-
const options = new NumericOptions();
|
51
|
-
// The default number of digits is `1`. When truncate is disabled, set digits
|
52
|
-
// to `0` to avoid the unnecessary addition of `.0` at the end of the formatted number.
|
53
|
-
if (config && config.truncate === false && config.digits === undefined) {
|
54
|
-
options.digits = 0;
|
55
|
-
}
|
56
|
-
// If the minimum digits is less than the set maximum digits then throw an error
|
57
|
-
if (config &&
|
58
|
-
config.minDigits &&
|
59
|
-
config.digits &&
|
60
|
-
config.minDigits > config.digits) {
|
61
|
-
throw new Error('The `digits` property must be greater than or equal to the `minDigits` property');
|
62
|
-
// If there is a minimum digits given but not a maximum then default the maximum to the minimum
|
63
|
-
}
|
64
|
-
else if (config && config.minDigits && !config.digits) {
|
65
|
-
options.digits = config.minDigits;
|
66
|
-
}
|
67
|
-
Object.assign(options, config);
|
68
|
-
// Assign properties for proper result caching.
|
69
|
-
__classPrivateFieldSet(this, _SkyNumericPipe_cacheKey, newCacheKey, "f");
|
70
|
-
__classPrivateFieldSet(this, _SkyNumericPipe_formattedValue, __classPrivateFieldGet(this, _SkyNumericPipe_numericSvc, "f").formatNumber(value, options), "f");
|
71
|
-
return __classPrivateFieldGet(this, _SkyNumericPipe_formattedValue, "f");
|
72
|
-
}
|
73
|
-
}
|
74
|
-
_SkyNumericPipe_cacheKey = new WeakMap(), _SkyNumericPipe_changeDetector = new WeakMap(), _SkyNumericPipe_formattedValue = new WeakMap(), _SkyNumericPipe_ngUnsubscribe = new WeakMap(), _SkyNumericPipe_numericSvc = new WeakMap(), _SkyNumericPipe_providerLocale = new WeakMap();
|
75
|
-
SkyNumericPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyNumericPipe, deps: [{ token: i1.SkyAppLocaleProvider }, { token: i2.SkyNumericService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Pipe });
|
76
|
-
SkyNumericPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: SkyNumericPipe, name: "skyNumeric", pure: false });
|
77
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyNumericPipe, decorators: [{
|
78
|
-
type: Pipe,
|
79
|
-
args: [{
|
80
|
-
name: 'skyNumeric',
|
81
|
-
pure: false,
|
82
|
-
}]
|
83
|
-
}], ctorParameters: function () { return [{ type: i1.SkyAppLocaleProvider }, { type: i2.SkyNumericService }, { type: i0.ChangeDetectorRef }]; } });
|
84
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtZXJpYy5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2NvcmUvc3JjL2xpYi9tb2R1bGVzL251bWVyaWMvbnVtZXJpYy5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUdMLElBQUksR0FFTCxNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsY0FBYyxFQUFxQixNQUFNLG1CQUFtQixDQUFDOzs7O0FBR3RFOzs7OztHQUtHO0FBS0gsTUFBTSxPQUFPLGNBQWM7SUFhekIsWUFDRSxjQUFvQyxFQUNwQyxVQUE2QixFQUM3QixjQUFpQztRQWZuQywyQ0FBOEI7UUFFOUIsaURBQW1DO1FBRW5DLGlEQUFvQztRQUVwQyx3Q0FBaUIsSUFBSSxPQUFPLEVBQVEsRUFBQztRQUVyQyw2Q0FBK0I7UUFFL0IsaURBQW9DO1FBT2xDLHVCQUFBLElBQUksOEJBQWUsVUFBVSxNQUFBLENBQUM7UUFDOUIsdUJBQUEsSUFBSSxrQ0FBbUIsY0FBYyxNQUFBLENBQUM7UUFFdEMsY0FBYzthQUNYLGFBQWEsRUFBRTthQUNmLElBQUksQ0FBQyxTQUFTLENBQUMsdUJBQUEsSUFBSSxxQ0FBZSxDQUFDLENBQUM7YUFDcEMsU0FBUyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDeEIsdUJBQUEsSUFBSSxrQ0FBbUIsVUFBVSxDQUFDLE1BQU0sTUFBQSxDQUFDO1lBQ3pDLFVBQVUsQ0FBQyxhQUFhLEdBQUcsdUJBQUEsSUFBSSxzQ0FBZ0IsQ0FBQztZQUNoRCx1QkFBQSxJQUFJLHNDQUFnQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLFdBQVc7UUFDaEIsdUJBQUEsSUFBSSxxQ0FBZSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzNCLHVCQUFBLElBQUkscUNBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxTQUFTLENBQUMsS0FBYSxFQUFFLE1BQTBCO1FBQ3hELE1BQU0sV0FBVyxHQUNmLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNsRSxHQUFHLEtBQUssSUFBSSxNQUFNLEVBQUUsTUFBTSxJQUFJLHVCQUFBLElBQUksc0NBQWdCLEVBQUUsQ0FBQztRQUV2RDttQ0FDMkI7UUFDM0IsSUFBSSx1QkFBQSxJQUFJLHNDQUFnQixJQUFJLHVCQUFBLElBQUksZ0NBQVUsS0FBSyxXQUFXLEVBQUU7WUFDMUQsT0FBTyx1QkFBQSxJQUFJLHNDQUFnQixDQUFDO1NBQzdCO1FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUVyQyw2RUFBNkU7UUFDN0UsdUZBQXVGO1FBQ3ZGLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxRQUFRLEtBQUssS0FBSyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFO1lBQ3RFLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1NBQ3BCO1FBRUQsZ0ZBQWdGO1FBQ2hGLElBQ0UsTUFBTTtZQUNOLE1BQU0sQ0FBQyxTQUFTO1lBQ2hCLE1BQU0sQ0FBQyxNQUFNO1lBQ2IsTUFBTSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUNoQztZQUNBLE1BQU0sSUFBSSxLQUFLLENBQ2IsaUZBQWlGLENBQ2xGLENBQUM7WUFFRiwrRkFBK0Y7U0FDaEc7YUFBTSxJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsU0FBUyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTtZQUN2RCxPQUFPLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUM7U0FDbkM7UUFFRCxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUUvQiwrQ0FBK0M7UUFDL0MsdUJBQUEsSUFBSSw0QkFBYSxXQUFXLE1BQUEsQ0FBQztRQUU3Qix1QkFBQSxJQUFJLGtDQUFtQix1QkFBQSxJQUFJLGtDQUFZLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsTUFBQSxDQUFDO1FBQ3JFLE9BQU8sdUJBQUEsSUFBSSxzQ0FBZ0IsQ0FBQztJQUM5QixDQUFDOzs7MkdBakZVLGNBQWM7eUdBQWQsY0FBYzsyRkFBZCxjQUFjO2tCQUoxQixJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSxZQUFZO29CQUNsQixJQUFJLEVBQUUsS0FBSztpQkFDWiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBPbkRlc3Ryb3ksXG4gIFBpcGUsXG4gIFBpcGVUcmFuc2Zvcm0sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2t5QXBwTG9jYWxlUHJvdmlkZXIgfSBmcm9tICdAc2t5dXgvaTE4bic7XG5cbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgTnVtZXJpY09wdGlvbnMsIFNreU51bWVyaWNPcHRpb25zIH0gZnJvbSAnLi9udW1lcmljLm9wdGlvbnMnO1xuaW1wb3J0IHsgU2t5TnVtZXJpY1NlcnZpY2UgfSBmcm9tICcuL251bWVyaWMuc2VydmljZSc7XG5cbi8qKlxuICogU2hvcnRlbnMgbnVtYmVycyB0byByb3VuZGVkIG51bWJlcnMgYW5kIGFiYnJldmlhdGlvbiBjaGFyYWN0ZXJzIHN1Y2ggYXMgSyBmb3IgdGhvdXNhbmRzLFxuICogTSBmb3IgbWlsbGlvbnMsIEIgZm9yIGJpbGxpb25zLCBhbmQgVCBmb3IgdHJpbGxpb25zLiBUaGUgcGlwZSBhbHNvIGZvcm1hdHMgZm9yIGN1cnJlbmN5LlxuICogQmUgc3VyZSB5b3UgaGF2ZSBhIHNwYWNlIGFmdGVyIHRoZSB0d28gY3VybHkgYnJhY2tldHMgb3BlbmluZyB0aGUgcGlwZSBhbmRcbiAqIGEgc3BhY2UgYmVmb3JlIHRoZSB0d28gY3VybHkgYnJhY2tldHMgY2xvc2luZyB0aGUgcGlwZSBvciBpdCB3aWxsIG5vdCB3b3JrLlxuICovXG5AUGlwZSh7XG4gIG5hbWU6ICdza3lOdW1lcmljJyxcbiAgcHVyZTogZmFsc2UsXG59KVxuZXhwb3J0IGNsYXNzIFNreU51bWVyaWNQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSwgT25EZXN0cm95IHtcbiAgI2NhY2hlS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgI2NoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZjtcblxuICAjZm9ybWF0dGVkVmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAjbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgI251bWVyaWNTdmM6IFNreU51bWVyaWNTZXJ2aWNlO1xuXG4gICNwcm92aWRlckxvY2FsZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGxvY2FsZVByb3ZpZGVyOiBTa3lBcHBMb2NhbGVQcm92aWRlcixcbiAgICBudW1lcmljU3ZjOiBTa3lOdW1lcmljU2VydmljZSxcbiAgICBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgdGhpcy4jbnVtZXJpY1N2YyA9IG51bWVyaWNTdmM7XG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IgPSBjaGFuZ2VEZXRlY3RvcjtcblxuICAgIGxvY2FsZVByb3ZpZGVyXG4gICAgICAuZ2V0TG9jYWxlSW5mbygpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChsb2NhbGVJbmZvKSA9PiB7XG4gICAgICAgIHRoaXMuI3Byb3ZpZGVyTG9jYWxlID0gbG9jYWxlSW5mby5sb2NhbGU7XG4gICAgICAgIG51bWVyaWNTdmMuY3VycmVudExvY2FsZSA9IHRoaXMuI3Byb3ZpZGVyTG9jYWxlO1xuICAgICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXRzIGEgbnVtYmVyIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBvcHRpb25zLlxuICAgKi9cbiAgcHVibGljIHRyYW5zZm9ybSh2YWx1ZTogbnVtYmVyLCBjb25maWc/OiBTa3lOdW1lcmljT3B0aW9ucyk6IHN0cmluZyB7XG4gICAgY29uc3QgbmV3Q2FjaGVLZXkgPVxuICAgICAgKGNvbmZpZyA/IEpTT04uc3RyaW5naWZ5KGNvbmZpZywgT2JqZWN0LmtleXMoY29uZmlnKS5zb3J0KCkpIDogJycpICtcbiAgICAgIGAke3ZhbHVlfV8ke2NvbmZpZz8ubG9jYWxlIHx8IHRoaXMuI3Byb3ZpZGVyTG9jYWxlfWA7XG5cbiAgICAvKiBJZiB0aGUgdmFsdWUgYW5kIGxvY2FsZSBhcmUgdGhlIHNhbWUgYXMgdGhlIGxhc3QgdHJhbnNmb3JtIHRoZW4gcmV0dXJuIHRoZSBwcmV2aW91cyB2YWx1ZVxuICAgIGluc3RlYWQgb2YgcmVmb3JtYXR0aW5nLiAqL1xuICAgIGlmICh0aGlzLiNmb3JtYXR0ZWRWYWx1ZSAmJiB0aGlzLiNjYWNoZUtleSA9PT0gbmV3Q2FjaGVLZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLiNmb3JtYXR0ZWRWYWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBvcHRpb25zID0gbmV3IE51bWVyaWNPcHRpb25zKCk7XG5cbiAgICAvLyBUaGUgZGVmYXVsdCBudW1iZXIgb2YgZGlnaXRzIGlzIGAxYC4gV2hlbiB0cnVuY2F0ZSBpcyBkaXNhYmxlZCwgc2V0IGRpZ2l0c1xuICAgIC8vIHRvIGAwYCB0byBhdm9pZCB0aGUgdW5uZWNlc3NhcnkgYWRkaXRpb24gb2YgYC4wYCBhdCB0aGUgZW5kIG9mIHRoZSBmb3JtYXR0ZWQgbnVtYmVyLlxuICAgIGlmIChjb25maWcgJiYgY29uZmlnLnRydW5jYXRlID09PSBmYWxzZSAmJiBjb25maWcuZGlnaXRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG9wdGlvbnMuZGlnaXRzID0gMDtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgbWluaW11bSBkaWdpdHMgaXMgbGVzcyB0aGFuIHRoZSBzZXQgbWF4aW11bSBkaWdpdHMgdGhlbiB0aHJvdyBhbiBlcnJvclxuICAgIGlmIChcbiAgICAgIGNvbmZpZyAmJlxuICAgICAgY29uZmlnLm1pbkRpZ2l0cyAmJlxuICAgICAgY29uZmlnLmRpZ2l0cyAmJlxuICAgICAgY29uZmlnLm1pbkRpZ2l0cyA+IGNvbmZpZy5kaWdpdHNcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1RoZSBgZGlnaXRzYCBwcm9wZXJ0eSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgYG1pbkRpZ2l0c2AgcHJvcGVydHknXG4gICAgICApO1xuXG4gICAgICAvLyBJZiB0aGVyZSBpcyBhIG1pbmltdW0gZGlnaXRzIGdpdmVuIGJ1dCBub3QgYSBtYXhpbXVtIHRoZW4gZGVmYXVsdCB0aGUgbWF4aW11bSB0byB0aGUgbWluaW11bVxuICAgIH0gZWxzZSBpZiAoY29uZmlnICYmIGNvbmZpZy5taW5EaWdpdHMgJiYgIWNvbmZpZy5kaWdpdHMpIHtcbiAgICAgIG9wdGlvbnMuZGlnaXRzID0gY29uZmlnLm1pbkRpZ2l0cztcbiAgICB9XG5cbiAgICBPYmplY3QuYXNzaWduKG9wdGlvbnMsIGNvbmZpZyk7XG5cbiAgICAvLyBBc3NpZ24gcHJvcGVydGllcyBmb3IgcHJvcGVyIHJlc3VsdCBjYWNoaW5nLlxuICAgIHRoaXMuI2NhY2hlS2V5ID0gbmV3Q2FjaGVLZXk7XG5cbiAgICB0aGlzLiNmb3JtYXR0ZWRWYWx1ZSA9IHRoaXMuI251bWVyaWNTdmMuZm9ybWF0TnVtYmVyKHZhbHVlLCBvcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcy4jZm9ybWF0dGVkVmFsdWU7XG4gIH1cbn1cbiJdfQ==
|
@@ -1,179 +0,0 @@
|
|
1
|
-
var _SkyNumericService_instances, _SkyNumericService_resourcesSvc, _SkyNumericService_symbolIndex, _SkyNumericService_roundNumber, _SkyNumericService_scaleNumberByPowerOfTen, _SkyNumericService_storeShortenSymbol, _SkyNumericService_replaceShortenSymbol, _SkyNumericService_getSymbol;
|
2
|
-
import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
|
3
|
-
import { Injectable } from '@angular/core';
|
4
|
-
import { SkyIntlNumberFormatStyle } from '@skyux/i18n';
|
5
|
-
import { SkyNumberFormatUtility } from '../shared/number-format/number-format-utility';
|
6
|
-
import * as i0 from "@angular/core";
|
7
|
-
import * as i1 from "@skyux/i18n";
|
8
|
-
export class SkyNumericService {
|
9
|
-
constructor(resourcesSvc) {
|
10
|
-
_SkyNumericService_instances.add(this);
|
11
|
-
/**
|
12
|
-
* The browser's current locale.
|
13
|
-
* @internal
|
14
|
-
*/
|
15
|
-
this.currentLocale = 'en-US';
|
16
|
-
/**
|
17
|
-
* @internal
|
18
|
-
*/
|
19
|
-
this.shortSymbol = '';
|
20
|
-
_SkyNumericService_resourcesSvc.set(this, void 0);
|
21
|
-
_SkyNumericService_symbolIndex.set(this, void 0);
|
22
|
-
__classPrivateFieldSet(this, _SkyNumericService_resourcesSvc, resourcesSvc, "f");
|
23
|
-
__classPrivateFieldSet(this, _SkyNumericService_symbolIndex, [
|
24
|
-
{ value: 1e12, label: __classPrivateFieldGet(this, _SkyNumericService_instances, "m", _SkyNumericService_getSymbol).call(this, 'skyux_numeric_trillions_symbol') },
|
25
|
-
{ value: 1e9, label: __classPrivateFieldGet(this, _SkyNumericService_instances, "m", _SkyNumericService_getSymbol).call(this, 'skyux_numeric_billions_symbol') },
|
26
|
-
{ value: 1e6, label: __classPrivateFieldGet(this, _SkyNumericService_instances, "m", _SkyNumericService_getSymbol).call(this, 'skyux_numeric_millions_symbol') },
|
27
|
-
{ value: 1e3, label: __classPrivateFieldGet(this, _SkyNumericService_instances, "m", _SkyNumericService_getSymbol).call(this, 'skyux_numeric_thousands_symbol') },
|
28
|
-
], "f");
|
29
|
-
}
|
30
|
-
/**
|
31
|
-
* Formats a number based on the provided options.
|
32
|
-
* @param value The number to format.
|
33
|
-
* @param options Format options.
|
34
|
-
*/
|
35
|
-
formatNumber(value, options) {
|
36
|
-
if (isNaN(value) || value === null) {
|
37
|
-
return '';
|
38
|
-
}
|
39
|
-
const numericOptions = {
|
40
|
-
digits: 0,
|
41
|
-
format: 'number',
|
42
|
-
currencySign: 'standard',
|
43
|
-
iso: 'USD',
|
44
|
-
truncateAfter: 1000,
|
45
|
-
...options,
|
46
|
-
};
|
47
|
-
const decimalPlaceRegExp = /\.0+$|(\.[0-9]*[1-9])0+$/;
|
48
|
-
const locale = numericOptions.locale || this.currentLocale;
|
49
|
-
const digits = numericOptions.digits || 0;
|
50
|
-
// Get the symbol for the number after rounding, since rounding could push the number
|
51
|
-
// into a different symbol range.
|
52
|
-
let roundedNumber = __classPrivateFieldGet(this, _SkyNumericService_instances, "m", _SkyNumericService_roundNumber).call(this, value, digits);
|
53
|
-
const roundedNumberAbs = Math.abs(roundedNumber);
|
54
|
-
let suffix = '';
|
55
|
-
for (let i = 0; i < __classPrivateFieldGet(this, _SkyNumericService_symbolIndex, "f").length; i++) {
|
56
|
-
let symbol = __classPrivateFieldGet(this, _SkyNumericService_symbolIndex, "f")[i];
|
57
|
-
if (numericOptions.truncate &&
|
58
|
-
numericOptions.truncateAfter !== undefined &&
|
59
|
-
roundedNumberAbs >= numericOptions.truncateAfter &&
|
60
|
-
roundedNumberAbs >= symbol.value) {
|
61
|
-
roundedNumber = __classPrivateFieldGet(this, _SkyNumericService_instances, "m", _SkyNumericService_roundNumber).call(this, value / symbol.value, digits);
|
62
|
-
if (Math.abs(roundedNumber) === 1000 && i > 0) {
|
63
|
-
// Rounding caused the number to cross into the range of the next symbol.
|
64
|
-
symbol = __classPrivateFieldGet(this, _SkyNumericService_symbolIndex, "f")[i - 1];
|
65
|
-
roundedNumber /= 1000;
|
66
|
-
}
|
67
|
-
suffix = symbol.label;
|
68
|
-
break;
|
69
|
-
}
|
70
|
-
}
|
71
|
-
let output = roundedNumber.toString().replace(decimalPlaceRegExp, '$1') + suffix;
|
72
|
-
__classPrivateFieldGet(this, _SkyNumericService_instances, "m", _SkyNumericService_storeShortenSymbol).call(this, output);
|
73
|
-
let digitsFormatted;
|
74
|
-
let isDecimal = false;
|
75
|
-
// Checks the string entered for format. Using toLowerCase to ignore case.
|
76
|
-
switch (numericOptions.format?.toLowerCase()) {
|
77
|
-
// In a case where a decimal value was not shortened and
|
78
|
-
// the digit input is 2 or higher, it forces 2 digits.
|
79
|
-
// For example, this prevents a value like $15.50 from displaying as $15.5.
|
80
|
-
// Note: This will need to be reviewed if we support currencies with
|
81
|
-
// three decimal digits.
|
82
|
-
case 'currency':
|
83
|
-
isDecimal = value % 1 !== 0;
|
84
|
-
if (numericOptions.minDigits) {
|
85
|
-
digitsFormatted = `1.${numericOptions.minDigits}-${digits}`;
|
86
|
-
}
|
87
|
-
else if (isDecimal && digits >= 2) {
|
88
|
-
digitsFormatted = `1.2-${digits}`;
|
89
|
-
}
|
90
|
-
else {
|
91
|
-
digitsFormatted = `1.0-${digits}`;
|
92
|
-
}
|
93
|
-
output = SkyNumberFormatUtility.formatNumber(locale, parseFloat(output), SkyIntlNumberFormatStyle.Currency, digitsFormatted, numericOptions.iso,
|
94
|
-
// Angular 5+ needs a string for this parameter, but Angular 4 needs a boolean.
|
95
|
-
// To support both versions we can supply 'symbol' which will evaluate truthy for Angular 4
|
96
|
-
// and the appropriate string value for Angular 5+.
|
97
|
-
// See: https://angular.io/api/common/CurrencyPipe#parameters
|
98
|
-
'symbol', numericOptions.currencySign);
|
99
|
-
// ^^^^^^ Result can't be null since the sanitized input is always a number.
|
100
|
-
break;
|
101
|
-
// The following is a catch-all to ensure that if
|
102
|
-
// anything but currency (or a future option) are entered,
|
103
|
-
// it will be treated like a number.
|
104
|
-
default:
|
105
|
-
// Ensures localization of the number to ensure comma and
|
106
|
-
// decimal separator
|
107
|
-
if (numericOptions.minDigits) {
|
108
|
-
digitsFormatted = `1.${numericOptions.minDigits}-${digits}`;
|
109
|
-
}
|
110
|
-
else if (numericOptions.truncate) {
|
111
|
-
digitsFormatted = `1.0-${digits}`;
|
112
|
-
}
|
113
|
-
else {
|
114
|
-
digitsFormatted = `1.${digits}-${digits}`;
|
115
|
-
}
|
116
|
-
output = SkyNumberFormatUtility.formatNumber(locale, parseFloat(output), SkyIntlNumberFormatStyle.Decimal, digitsFormatted);
|
117
|
-
// ^^^^^^ Result can't be null since the sanitized input is always a number.
|
118
|
-
break;
|
119
|
-
}
|
120
|
-
if (numericOptions.truncate) {
|
121
|
-
output = __classPrivateFieldGet(this, _SkyNumericService_instances, "m", _SkyNumericService_replaceShortenSymbol).call(this, output);
|
122
|
-
}
|
123
|
-
return output;
|
124
|
-
}
|
125
|
-
}
|
126
|
-
_SkyNumericService_resourcesSvc = new WeakMap(), _SkyNumericService_symbolIndex = new WeakMap(), _SkyNumericService_instances = new WeakSet(), _SkyNumericService_roundNumber = function _SkyNumericService_roundNumber(value, precision) {
|
127
|
-
if (precision < 0) {
|
128
|
-
throw new Error('SkyInvalidArgument: precision must be >= 0');
|
129
|
-
}
|
130
|
-
/* Sanity check - ignoring coverage but should not ignore if we make this method public */
|
131
|
-
/* istanbul ignore next */
|
132
|
-
if (isNaN(value) || value === null) {
|
133
|
-
return 0;
|
134
|
-
}
|
135
|
-
const scaledValue = __classPrivateFieldGet(this, _SkyNumericService_instances, "m", _SkyNumericService_scaleNumberByPowerOfTen).call(this, value, precision, true);
|
136
|
-
const scaledRoundedValue = Math.round(scaledValue);
|
137
|
-
const unscaledRoundedValue = __classPrivateFieldGet(this, _SkyNumericService_instances, "m", _SkyNumericService_scaleNumberByPowerOfTen).call(this, scaledRoundedValue, precision, false);
|
138
|
-
return unscaledRoundedValue;
|
139
|
-
}, _SkyNumericService_scaleNumberByPowerOfTen = function _SkyNumericService_scaleNumberByPowerOfTen(value, scalar, scaleUp) {
|
140
|
-
const valueStr = value.toString().toLowerCase();
|
141
|
-
const isExponentFormat = valueStr.includes('e');
|
142
|
-
if (isExponentFormat) {
|
143
|
-
const [base, exp] = valueStr.split('e');
|
144
|
-
const newExp = scaleUp ? Number(exp) + scalar : Number(exp) - scalar;
|
145
|
-
return Number(`${base}e${newExp}`);
|
146
|
-
}
|
147
|
-
else {
|
148
|
-
const e = scaleUp ? 'e' : 'e-';
|
149
|
-
return Number(`${value}${e}${scalar}`);
|
150
|
-
}
|
151
|
-
}, _SkyNumericService_storeShortenSymbol = function _SkyNumericService_storeShortenSymbol(value) {
|
152
|
-
const symbols = __classPrivateFieldGet(this, _SkyNumericService_symbolIndex, "f").map((s) => s.label);
|
153
|
-
const regexp = new RegExp(symbols.join('|'), 'ig');
|
154
|
-
const match = value.match(regexp);
|
155
|
-
this.shortSymbol = match ? match.toString() : '';
|
156
|
-
}, _SkyNumericService_replaceShortenSymbol = function _SkyNumericService_replaceShortenSymbol(value) {
|
157
|
-
const result = /(\d)(?!.*\d)/g.exec(value);
|
158
|
-
/*istanbul ignore else*/
|
159
|
-
if (result) {
|
160
|
-
const pos = result.index + result.length;
|
161
|
-
const output = value.substring(0, pos) + this.shortSymbol + value.substring(pos);
|
162
|
-
return output;
|
163
|
-
}
|
164
|
-
else {
|
165
|
-
return value;
|
166
|
-
}
|
167
|
-
}, _SkyNumericService_getSymbol = function _SkyNumericService_getSymbol(key) {
|
168
|
-
// TODO: Need to implement the async `getString` method in a breaking change.
|
169
|
-
return __classPrivateFieldGet(this, _SkyNumericService_resourcesSvc, "f").getStringForLocale({ locale: 'en_US' }, key);
|
170
|
-
};
|
171
|
-
SkyNumericService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyNumericService, deps: [{ token: i1.SkyLibResourcesService }], target: i0.ɵɵFactoryTarget.Injectable });
|
172
|
-
SkyNumericService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyNumericService, providedIn: 'any' });
|
173
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyNumericService, decorators: [{
|
174
|
-
type: Injectable,
|
175
|
-
args: [{
|
176
|
-
providedIn: 'any',
|
177
|
-
}]
|
178
|
-
}], ctorParameters: function () { return [{ type: i1.SkyLibResourcesService }]; } });
|
179
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtZXJpYy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2NvcmUvc3JjL2xpYi9tb2R1bGVzL251bWVyaWMvbnVtZXJpYy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsd0JBQXdCLEVBQTBCLE1BQU0sYUFBYSxDQUFDO0FBRS9FLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDOzs7QUFRdkYsTUFBTSxPQUFPLGlCQUFpQjtJQWdCNUIsWUFBWSxZQUFvQzs7UUFmaEQ7OztXQUdHO1FBQ0ksa0JBQWEsR0FBRyxPQUFPLENBQUM7UUFFL0I7O1dBRUc7UUFDSSxnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUV4QixrREFBc0M7UUFFdEMsaURBQWlDO1FBRy9CLHVCQUFBLElBQUksbUNBQWlCLFlBQVksTUFBQSxDQUFDO1FBRWxDLHVCQUFBLElBQUksa0NBQWdCO1lBQ2xCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsdUJBQUEsSUFBSSxrRUFBVyxNQUFmLElBQUksRUFBWSxnQ0FBZ0MsQ0FBQyxFQUFFO1lBQ3pFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsdUJBQUEsSUFBSSxrRUFBVyxNQUFmLElBQUksRUFBWSwrQkFBK0IsQ0FBQyxFQUFFO1lBQ3ZFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsdUJBQUEsSUFBSSxrRUFBVyxNQUFmLElBQUksRUFBWSwrQkFBK0IsQ0FBQyxFQUFFO1lBQ3ZFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsdUJBQUEsSUFBSSxrRUFBVyxNQUFmLElBQUksRUFBWSxnQ0FBZ0MsQ0FBQyxFQUFFO1NBQ3pFLE1BQUEsQ0FBQztJ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QzdFLE9BQU8sdUJBQUEsSUFBSSx1Q0FBYyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pFLENBQUM7OEdBdFBVLGlCQUFpQjtrSEFBakIsaUJBQWlCLGNBRmhCLEtBQUs7MkZBRU4saUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxLQUFLO2lCQUNsQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNreUludGxOdW1iZXJGb3JtYXRTdHlsZSwgU2t5TGliUmVzb3VyY2VzU2VydmljZSB9IGZyb20gJ0Bza3l1eC9pMThuJztcblxuaW1wb3J0IHsgU2t5TnVtYmVyRm9ybWF0VXRpbGl0eSB9IGZyb20gJy4uL3NoYXJlZC9udW1iZXItZm9ybWF0L251bWJlci1mb3JtYXQtdXRpbGl0eSc7XG5cbmltcG9ydCB7IFNreU51bWVyaWNTeW1ib2wgfSBmcm9tICcuL251bWVyaWMtc3ltYm9sJztcbmltcG9ydCB7IFNreU51bWVyaWNPcHRpb25zIH0gZnJvbSAnLi9udW1lcmljLm9wdGlvbnMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdhbnknLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lOdW1lcmljU2VydmljZSB7XG4gIC8qKlxuICAgKiBUaGUgYnJvd3NlcidzIGN1cnJlbnQgbG9jYWxlLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBjdXJyZW50TG9jYWxlID0gJ2VuLVVTJztcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgc2hvcnRTeW1ib2wgPSAnJztcblxuICAjcmVzb3VyY2VzU3ZjOiBTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlO1xuXG4gICNzeW1ib2xJbmRleDogU2t5TnVtZXJpY1N5bWJvbFtdO1xuXG4gIGNvbnN0cnVjdG9yKHJlc291cmNlc1N2YzogU2t5TGliUmVzb3VyY2VzU2VydmljZSkge1xuICAgIHRoaXMuI3Jlc291cmNlc1N2YyA9IHJlc291cmNlc1N2YztcblxuICAgIHRoaXMuI3N5bWJvbEluZGV4ID0gW1xuICAgICAgeyB2YWx1ZTogMWUxMiwgbGFiZWw6IHRoaXMuI2dldFN5bWJvbCgnc2t5dXhfbnVtZXJpY190cmlsbGlvbnNfc3ltYm9sJykgfSxcbiAgICAgIHsgdmFsdWU6IDFlOSwgbGFiZWw6IHRoaXMuI2dldFN5bWJvbCgnc2t5dXhfbnVtZXJpY19iaWxsaW9uc19zeW1ib2wnKSB9LFxuICAgICAgeyB2YWx1ZTogMWU2LCBsYWJlbDogdGhpcy4jZ2V0U3ltYm9sKCdza3l1eF9udW1lcmljX21pbGxpb25zX3N5bWJvbCcpIH0sXG4gICAgICB7IHZhbHVlOiAxZTMsIGxhYmVsOiB0aGlzLiNnZXRTeW1ib2woJ3NreXV4X251bWVyaWNfdGhvdXNhbmRzX3N5bWJvbCcpIH0sXG4gICAgXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXRzIGEgbnVtYmVyIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBvcHRpb25zLlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIG51bWJlciB0byBmb3JtYXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIEZvcm1hdCBvcHRpb25zLlxuICAgKi9cbiAgcHVibGljIGZvcm1hdE51bWJlcih2YWx1ZTogbnVtYmVyLCBvcHRpb25zOiBTa3lOdW1lcmljT3B0aW9ucyk6IHN0cmluZyB7XG4gICAgaWYgKGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IG51bWVyaWNPcHRpb25zOiBTa3lOdW1lcmljT3B0aW9ucyA9IHtcbiAgICAgIGRpZ2l0czogMCxcbiAgICAgIGZvcm1hdDogJ251bWJlcicsXG4gICAgICBjdXJyZW5jeVNpZ246ICdzdGFuZGFyZCcsXG4gICAgICBpc286ICdVU0QnLFxuICAgICAgdHJ1bmNhdGVBZnRlcjogMTAwMCxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfTtcblxuICAgIGNvbnN0IGRlY2ltYWxQbGFjZVJlZ0V4cCA9IC9cXC4wKyR8KFxcLlswLTldKlsxLTldKTArJC87XG4gICAgY29uc3QgbG9jYWxlID0gbnVtZXJpY09wdGlvbnMubG9jYWxlIHx8IHRoaXMuY3VycmVudExvY2FsZTtcbiAgICBjb25zdCBkaWdpdHMgPSBudW1lcmljT3B0aW9ucy5kaWdpdHMgfHwgMDtcblxuICAgIC8vIEdldCB0aGUgc3ltYm9sIGZvciB0aGUgbnVtYmVyIGFmdGVyIHJvdW5kaW5nLCBzaW5jZSByb3VuZGluZyBjb3VsZCBwdXNoIHRoZSBudW1iZXJcbiAgICAvLyBpbnRvIGEgZGlmZmVyZW50IHN5bWJvbCByYW5nZS5cbiAgICBsZXQgcm91bmRlZE51bWJlciA9IHRoaXMuI3JvdW5kTnVtYmVyKHZhbHVlLCBkaWdpdHMpO1xuICAgIGNvbnN0IHJvdW5kZWROdW1iZXJBYnMgPSBNYXRoLmFicyhyb3VuZGVkTnVtYmVyKTtcblxuICAgIGxldCBzdWZmaXggPSAnJztcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy4jc3ltYm9sSW5kZXgubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBzeW1ib2wgPSB0aGlzLiNzeW1ib2xJbmRleFtpXTtcblxuICAgICAgaWYgKFxuICAgICAgICBudW1lcmljT3B0aW9ucy50cnVuY2F0ZSAmJlxuICAgICAgICBudW1lcmljT3B0aW9ucy50cnVuY2F0ZUFmdGVyICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgcm91bmRlZE51bWJlckFicyA+PSBudW1lcmljT3B0aW9ucy50cnVuY2F0ZUFmdGVyICYmXG4gICAgICAgIHJvdW5kZWROdW1iZXJBYnMgPj0gc3ltYm9sLnZhbHVlXG4gICAgICApIHtcbiAgICAgICAgcm91bmRlZE51bWJlciA9IHRoaXMuI3JvdW5kTnVtYmVyKHZhbHVlIC8gc3ltYm9sLnZhbHVlLCBkaWdpdHMpO1xuXG4gICAgICAgIGlmIChNYXRoLmFicyhyb3VuZGVkTnVtYmVyKSA9PT0gMTAwMCAmJiBpID4gMCkge1xuICAgICAgICAgIC8vIFJvdW5kaW5nIGNhdXNlZCB0aGUgbnVtYmVyIHRvIGNyb3NzIGludG8gdGhlIHJhbmdlIG9mIHRoZSBuZXh0IHN5bWJvbC5cbiAgICAgICAgICBzeW1ib2wgPSB0aGlzLiNzeW1ib2xJbmRleFtpIC0gMV07XG4gICAgICAgICAgcm91bmRlZE51bWJlciAvPSAxMDAwO1xuICAgICAgICB9XG5cbiAgICAgICAgc3VmZml4ID0gc3ltYm9sLmxhYmVsO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBvdXRwdXQ6IHN0cmluZyA9XG4gICAgICByb3VuZGVkTnVtYmVyLnRvU3RyaW5nKCkucmVwbGFjZShkZWNpbWFsUGxhY2VSZWdFeHAsICckMScpICsgc3VmZml4O1xuXG4gICAgdGhpcy4jc3RvcmVTaG9ydGVuU3ltYm9sKG91dHB1dCk7XG5cbiAgICBsZXQgZGlnaXRzRm9ybWF0dGVkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGlzRGVjaW1hbCA9IGZhbHNlO1xuXG4gICAgLy8gQ2hlY2tzIHRoZSBzdHJpbmcgZW50ZXJlZCBmb3IgZm9ybWF0LiBVc2luZyB0b0xvd2VyQ2FzZSB0byBpZ25vcmUgY2FzZS5cbiAgICBzd2l0Y2ggKG51bWVyaWNPcHRpb25zLmZvcm1hdD8udG9Mb3dlckNhc2UoKSkge1xuICAgICAgLy8gSW4gYSBjYXNlIHdoZXJlIGEgZGVjaW1hbCB2YWx1ZSB3YXMgbm90IHNob3J0ZW5lZCBhbmRcbiAgICAgIC8vIHRoZSBkaWdpdCBpbnB1dCBpcyAyIG9yIGhpZ2hlciwgaXQgZm9yY2VzIDIgZGlnaXRzLlxuICAgICAgLy8gRm9yIGV4YW1wbGUsIHRoaXMgcHJldmVudHMgYSB2YWx1ZSBsaWtlICQxNS41MCBmcm9tIGRpc3BsYXlpbmcgYXMgJDE1LjUuXG4gICAgICAvLyBOb3RlOiBUaGlzIHdpbGwgbmVlZCB0byBiZSByZXZpZXdlZCBpZiB3ZSBzdXBwb3J0IGN1cnJlbmNpZXMgd2l0aFxuICAgICAgLy8gdGhyZWUgZGVjaW1hbCBkaWdpdHMuXG4gICAgICBjYXNlICdjdXJyZW5jeSc6XG4gICAgICAgIGlzRGVjaW1hbCA9IHZhbHVlICUgMSAhPT0gMDtcblxuICAgICAgICBpZiAobnVtZXJpY09wdGlvbnMubWluRGlnaXRzKSB7XG4gICAgICAgICAgZGlnaXRzRm9ybWF0dGVkID0gYDEuJHtudW1lcmljT3B0aW9ucy5taW5EaWdpdHN9LSR7ZGlnaXRzfWA7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNEZWNpbWFsICYmIGRpZ2l0cyA+PSAyKSB7XG4gICAgICAgICAgZGlnaXRzRm9ybWF0dGVkID0gYDEuMi0ke2RpZ2l0c31gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRpZ2l0c0Zvcm1hdHRlZCA9IGAxLjAtJHtkaWdpdHN9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIG91dHB1dCA9IFNreU51bWJlckZvcm1hdFV0aWxpdHkuZm9ybWF0TnVtYmVyKFxuICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICBwYXJzZUZsb2F0KG91dHB1dCksXG4gICAgICAgICAgU2t5SW50bE51bWJlckZvcm1hdFN0eWxlLkN1cnJlbmN5LFxuICAgICAgICAgIGRpZ2l0c0Zvcm1hdHRlZCxcbiAgICAgICAgICBudW1lcmljT3B0aW9ucy5pc28sXG4gICAgICAgICAgLy8gQW5ndWxhciA1KyBuZWVkcyBhIHN0cmluZyBmb3IgdGhpcyBwYXJhbWV0ZXIsIGJ1dCBBbmd1bGFyIDQgbmVlZHMgYSBib29sZWFuLlxuICAgICAgICAgIC8vIFRvIHN1cHBvcnQgYm90aCB2ZXJzaW9ucyB3ZSBjYW4gc3VwcGx5ICdzeW1ib2wnIHdoaWNoIHdpbGwgZXZhbHVhdGUgdHJ1dGh5IGZvciBBbmd1bGFyIDRcbiAgICAgICAgICAvLyBhbmQgdGhlIGFwcHJvcHJpYXRlIHN0cmluZyB2YWx1ZSBmb3IgQW5ndWxhciA1Ky5cbiAgICAgICAgICAvLyBTZWU6IGh0dHBzOi8vYW5ndWxhci5pby9hcGkvY29tbW9uL0N1cnJlbmN5UGlwZSNwYXJhbWV0ZXJzXG4gICAgICAgICAgJ3N5bWJvbCcgYXMgYW55LFxuICAgICAgICAgIG51bWVyaWNPcHRpb25zLmN1cnJlbmN5U2lnblxuICAgICAgICApIGFzIHN0cmluZztcbiAgICAgICAgLy8gICBeXl5eXl4gUmVzdWx0IGNhbid0IGJlIG51bGwgc2luY2UgdGhlIHNhbml0aXplZCBpbnB1dCBpcyBhbHdheXMgYSBudW1iZXIuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICAvLyBUaGUgZm9sbG93aW5nIGlzIGEgY2F0Y2gtYWxsIHRvIGVuc3VyZSB0aGF0IGlmXG4gICAgICAvLyBhbnl0aGluZyBidXQgY3VycmVuY3kgKG9yIGEgZnV0dXJlIG9wdGlvbikgYXJlIGVudGVyZWQsXG4gICAgICAvLyBpdCB3aWxsIGJlIHRyZWF0ZWQgbGlrZSBhIG51bWJlci5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIEVuc3VyZXMgbG9jYWxpemF0aW9uIG9mIHRoZSBudW1iZXIgdG8gZW5zdXJlIGNvbW1hIGFuZFxuICAgICAgICAvLyBkZWNpbWFsIHNlcGFyYXRvclxuICAgICAgICBpZiAobnVtZXJpY09wdGlvbnMubWluRGlnaXRzKSB7XG4gICAgICAgICAgZGlnaXRzRm9ybWF0dGVkID0gYDEuJHtudW1lcmljT3B0aW9ucy5taW5EaWdpdHN9LSR7ZGlnaXRzfWA7XG4gICAgICAgIH0gZWxzZSBpZiAobnVtZXJpY09wdGlvbnMudHJ1bmNhdGUpIHtcbiAgICAgICAgICBkaWdpdHNGb3JtYXR0ZWQgPSBgMS4wLSR7ZGlnaXRzfWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGlnaXRzRm9ybWF0dGVkID0gYDEuJHtkaWdpdHN9LSR7ZGlnaXRzfWA7XG4gICAgICAgIH1cblxuICAgICAgICBvdXRwdXQgPSBTa3lOdW1iZXJGb3JtYXRVdGlsaXR5LmZvcm1hdE51bWJlcihcbiAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgcGFyc2VGbG9hdChvdXRwdXQpLFxuICAgICAgICAgIFNreUludGxOdW1iZXJGb3JtYXRTdHlsZS5EZWNpbWFsLFxuICAgICAgICAgIGRpZ2l0c0Zvcm1hdHRlZFxuICAgICAgICApIGFzIHN0cmluZztcbiAgICAgICAgLy8gICBeXl5eXl4gUmVzdWx0IGNhbid0IGJlIG51bGwgc2luY2UgdGhlIHNhbml0aXplZCBpbnB1dCBpcyBhbHdheXMgYSBudW1iZXIuXG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChudW1lcmljT3B0aW9ucy50cnVuY2F0ZSkge1xuICAgICAgb3V0cHV0ID0gdGhpcy4jcmVwbGFjZVNob3J0ZW5TeW1ib2wob3V0cHV0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0cHV0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJvdW5kcyBhIGdpdmVuIG51bWJlclxuICAgKlxuICAgKiBKUydzIGxpbWl0YXRpb24gLSBudW1iZXJzIGJpZ2dlciB0aGFuIE51bWJlci5NSU5fU0FGRV9JTlRFR0VSIG9yIE51bWJlci5NQVhfU0FGRV9JTlRFR0VSXG4gICAqIGFyZSBub3QgZ3VhcmFudGVlZCB0byBiZSByZXByZXNlbnRlZCBvciByb3VuZGVkIGNvcnJlY3RseVxuICAgKiBAcGFyYW0gdmFsdWUgLSB2YWx1ZSB0byByb3VuZFxuICAgKiBAcGFyYW0gcHJlY2lzaW9uIC0gd2hhdCBwcmVjaXNpb24gdG8gcm91bmQgd2l0aCwgZGVmYXVsdHMgdG8gMCBkZWNpbWFsIHBsYWNlc1xuICAgKi9cbiAgI3JvdW5kTnVtYmVyKHZhbHVlOiBudW1iZXIsIHByZWNpc2lvbjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAocHJlY2lzaW9uIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTa3lJbnZhbGlkQXJndW1lbnQ6IHByZWNpc2lvbiBtdXN0IGJlID49IDAnKTtcbiAgICB9XG5cbiAgICAvKiBTYW5pdHkgY2hlY2sgLSBpZ25vcmluZyBjb3ZlcmFnZSBidXQgc2hvdWxkIG5vdCBpZ25vcmUgaWYgd2UgbWFrZSB0aGlzIG1ldGhvZCBwdWJsaWMgKi9cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmIChpc05hTih2YWx1ZSkgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGNvbnN0IHNjYWxlZFZhbHVlOiBudW1iZXIgPSB0aGlzLiNzY2FsZU51bWJlckJ5UG93ZXJPZlRlbihcbiAgICAgIHZhbHVlLFxuICAgICAgcHJlY2lzaW9uLFxuICAgICAgdHJ1ZVxuICAgICk7XG4gICAgY29uc3Qgc2NhbGVkUm91bmRlZFZhbHVlOiBudW1iZXIgPSBNYXRoLnJvdW5kKHNjYWxlZFZhbHVlKTtcbiAgICBjb25zdCB1bnNjYWxlZFJvdW5kZWRWYWx1ZTogbnVtYmVyID0gdGhpcy4jc2NhbGVOdW1iZXJCeVBvd2VyT2ZUZW4oXG4gICAgICBzY2FsZWRSb3VuZGVkVmFsdWUsXG4gICAgICBwcmVjaXNpb24sXG4gICAgICBmYWxzZVxuICAgICk7XG5cbiAgICByZXR1cm4gdW5zY2FsZWRSb3VuZGVkVmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogU2NhbGVzIGEgZ2l2ZW4gbnVtYmVyIGJ5IGEgcG93ZXIgb2YgMTBcbiAgICogQHBhcmFtIHZhbHVlIC0gdmFsdWUgdG8gc2NhbGVcbiAgICogQHBhcmFtIHNjYWxhciAtIDEwXnNjYWxhclxuICAgKiBAcGFyYW0gc2NhbGVVcCAtIHdoZXRoZXIgdG8gaW5jcmVhc2Ugb3IgZGVjcmVhc2UgdGhlIHZhbHVlXG4gICAqL1xuICAjc2NhbGVOdW1iZXJCeVBvd2VyT2ZUZW4oXG4gICAgdmFsdWU6IG51bWJlcixcbiAgICBzY2FsYXI6IG51bWJlcixcbiAgICBzY2FsZVVwOiBib29sZWFuXG4gICk6IG51bWJlciB7XG4gICAgY29uc3QgdmFsdWVTdHI6IHN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBpc0V4cG9uZW50Rm9ybWF0OiBib29sZWFuID0gdmFsdWVTdHIuaW5jbHVkZXMoJ2UnKTtcblxuICAgIGlmIChpc0V4cG9uZW50Rm9ybWF0KSB7XG4gICAgICBjb25zdCBbYmFzZSwgZXhwXSA9IHZhbHVlU3RyLnNwbGl0KCdlJyk7XG4gICAgICBjb25zdCBuZXdFeHAgPSBzY2FsZVVwID8gTnVtYmVyKGV4cCkgKyBzY2FsYXIgOiBOdW1iZXIoZXhwKSAtIHNjYWxhcjtcbiAgICAgIHJldHVybiBOdW1iZXIoYCR7YmFzZX1lJHtuZXdFeHB9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGUgPSBzY2FsZVVwID8gJ2UnIDogJ2UtJztcbiAgICAgIHJldHVybiBOdW1iZXIoYCR7dmFsdWV9JHtlfSR7c2NhbGFyfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9yZXMgdGhlIHN5bWJvbCBhZGRlZCBmcm9tIHNob3J0ZW5pbmcgdG8gcmVhcHBseSBsYXRlci5cbiAgICogQHBhcmFtIHZhbHVlIFRoZSBzdHJpbmcgdG8gZGVyaXZlIHRoZSBzaG9ydGVuIHN5bWJvbCBmcm9tLlxuICAgKi9cbiAgI3N0b3JlU2hvcnRlblN5bWJvbCh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgc3ltYm9sczogc3RyaW5nW10gPSB0aGlzLiNzeW1ib2xJbmRleC5tYXAoKHMpID0+IHMubGFiZWwpO1xuICAgIGNvbnN0IHJlZ2V4cCA9IG5ldyBSZWdFeHAoc3ltYm9scy5qb2luKCd8JyksICdpZycpO1xuICAgIGNvbnN0IG1hdGNoID0gdmFsdWUubWF0Y2gocmVnZXhwKTtcbiAgICB0aGlzLnNob3J0U3ltYm9sID0gbWF0Y2ggPyBtYXRjaC50b1N0cmluZygpIDogJyc7XG4gIH1cblxuICAvKipcbiAgICogTXVzdCBoYXZlIHByZXZpb3VzbHkgY2FsbGVkIHN0b3JlU2hvcnRlblN5bWJvbCB0byBoYXZlIHNvbWV0aGluZyB0byByZXBsYWNlLlxuICAgKiBGaW5kcyB0aGUgbGFzdCBudW1iZXIgaW4gdGhlIGZvcm1hdHRlZCBudW1iZXIsIGdldHMgdGhlIGluZGV4IG9mIHRoZSBwb3NpdGlvblxuICAgKiBhZnRlciB0aGF0IGNoYXJhY3RlciBhbmQgcmUtaW5zZXJ0cyB0aGUgc3ltYm9sLlxuICAgKiBXb3JrcyByZWdhcmRsZXNzIG9mIGN1cnJlbmN5IHN5bWJvbCBwb3NpdGlvbi5cbiAgICogQHBhcmFtIHZhbHVlIFRoZSBzdHJpbmcgdG8gbW9kaWZ5LlxuICAgKi9cbiAgI3JlcGxhY2VTaG9ydGVuU3ltYm9sKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHJlc3VsdCA9IC8oXFxkKSg/IS4qXFxkKS9nLmV4ZWModmFsdWUpO1xuICAgIC8qaXN0YW5idWwgaWdub3JlIGVsc2UqL1xuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIGNvbnN0IHBvcyA9IHJlc3VsdC5pbmRleCArIHJlc3VsdC5sZW5ndGg7XG4gICAgICBjb25zdCBvdXRwdXQgPVxuICAgICAgICB2YWx1ZS5zdWJzdHJpbmcoMCwgcG9zKSArIHRoaXMuc2hvcnRTeW1ib2wgKyB2YWx1ZS5zdWJzdHJpbmcocG9zKTtcblxuICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gICNnZXRTeW1ib2woa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIFRPRE86IE5lZWQgdG8gaW1wbGVtZW50IHRoZSBhc3luYyBgZ2V0U3RyaW5nYCBtZXRob2QgaW4gYSBicmVha2luZyBjaGFuZ2UuXG4gICAgcmV0dXJuIHRoaXMuI3Jlc291cmNlc1N2Yy5nZXRTdHJpbmdGb3JMb2NhbGUoeyBsb2NhbGU6ICdlbl9VUycgfSwga2V5KTtcbiAgfVxufVxuIl19
|