@skyux/core 8.6.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.
Files changed (151) hide show
  1. package/{esm2020 → esm2022}/lib/modules/adapter-service/adapter.module.mjs +5 -5
  2. package/esm2022/lib/modules/adapter-service/adapter.service.mjs +225 -0
  3. package/esm2022/lib/modules/affix/affix.directive.mjs +116 -0
  4. package/{esm2020 → esm2022}/lib/modules/affix/affix.module.mjs +5 -5
  5. package/esm2022/lib/modules/affix/affix.service.mjs +25 -0
  6. package/esm2022/lib/modules/affix/affixer.mjs +398 -0
  7. package/esm2022/lib/modules/default-input-provider/default-input-provider.mjs +26 -0
  8. package/esm2022/lib/modules/dock/dock-dom-adapter.service.mjs +81 -0
  9. package/esm2022/lib/modules/dock/dock-item.mjs +31 -0
  10. package/esm2022/lib/modules/dock/dock.component.mjs +108 -0
  11. package/{esm2020 → esm2022}/lib/modules/dock/dock.module.mjs +5 -5
  12. package/esm2022/lib/modules/dock/dock.service.mjs +96 -0
  13. package/{esm2020 → esm2022}/lib/modules/dynamic-component/dynamic-component.module.mjs +5 -5
  14. package/esm2022/lib/modules/dynamic-component/dynamic-component.service.mjs +106 -0
  15. package/{esm2020 → esm2022}/lib/modules/format/app-format.mjs +4 -4
  16. package/esm2022/lib/modules/id/id.directive.mjs +31 -0
  17. package/{esm2020 → esm2022}/lib/modules/id/id.module.mjs +5 -5
  18. package/{esm2020 → esm2022}/lib/modules/id/id.service.mjs +4 -4
  19. package/esm2022/lib/modules/layout-host/layout-host.service.mjs +22 -0
  20. package/esm2022/lib/modules/live-announcer/live-announcer.service.mjs +79 -0
  21. package/{esm2020 → esm2022}/lib/modules/log/log.module.mjs +5 -5
  22. package/esm2022/lib/modules/log/log.service.mjs +148 -0
  23. package/{esm2020 → esm2022}/lib/modules/media-query/media-query.module.mjs +5 -5
  24. package/esm2022/lib/modules/media-query/media-query.service.mjs +123 -0
  25. package/{esm2020 → esm2022}/lib/modules/mutation/mutation-observer-service.mjs +4 -4
  26. package/{esm2020 → esm2022}/lib/modules/numeric/numeric.module.mjs +5 -5
  27. package/esm2022/lib/modules/numeric/numeric.pipe.mjs +81 -0
  28. package/esm2022/lib/modules/numeric/numeric.service.mjs +205 -0
  29. package/esm2022/lib/modules/overlay/overlay-adapter.service.mjs +44 -0
  30. package/esm2022/lib/modules/overlay/overlay-instance.mjs +62 -0
  31. package/esm2022/lib/modules/overlay/overlay.component.mjs +193 -0
  32. package/{esm2020 → esm2022}/lib/modules/overlay/overlay.module.mjs +5 -5
  33. package/esm2022/lib/modules/overlay/overlay.service.mjs +124 -0
  34. package/{esm2020 → esm2022}/lib/modules/percent-pipe/percent-pipe.module.mjs +5 -5
  35. package/esm2022/lib/modules/percent-pipe/percent.pipe.mjs +56 -0
  36. package/esm2022/lib/modules/resize-observer/resize-observer-media-query.service.mjs +120 -0
  37. package/esm2022/lib/modules/resize-observer/resize-observer.service.mjs +77 -0
  38. package/esm2022/lib/modules/scrollable-host/scrollable-host.service.mjs +223 -0
  39. package/esm2022/lib/modules/shared/number-format/number-format-utility.mjs +72 -0
  40. package/esm2022/lib/modules/shared/sky-core-resources.module.mjs +50 -0
  41. package/esm2022/lib/modules/title/title.service.mjs +31 -0
  42. package/esm2022/lib/modules/trim/trim.directive.mjs +64 -0
  43. package/{esm2020 → esm2022}/lib/modules/trim/trim.module.mjs +5 -5
  44. package/{esm2020 → esm2022}/lib/modules/ui-config/ui-config.service.mjs +4 -4
  45. package/{esm2020 → esm2022}/lib/modules/viewkeeper/viewkeeper-host-options.mjs +4 -4
  46. package/esm2022/lib/modules/viewkeeper/viewkeeper.directive.mjs +131 -0
  47. package/esm2022/lib/modules/viewkeeper/viewkeeper.mjs +283 -0
  48. package/{esm2020 → esm2022}/lib/modules/viewkeeper/viewkeeper.module.mjs +5 -5
  49. package/esm2022/lib/modules/viewkeeper/viewkeeper.service.mjs +39 -0
  50. package/{esm2020 → esm2022}/lib/modules/window/window-ref.mjs +4 -4
  51. package/esm2022/testing/core-testing.module.mjs +32 -0
  52. package/esm2022/testing/mock-media-query.service.mjs +46 -0
  53. package/{esm2020 → esm2022}/testing/mock-ui-config.service.mjs +4 -4
  54. package/esm2022/testing/overlay/overlay-harness.mjs +43 -0
  55. package/esm2022/testing/shared/component-harness.mjs +13 -0
  56. package/{fesm2020 → fesm2022}/skyux-core-testing.mjs +28 -34
  57. package/{fesm2020 → fesm2022}/skyux-core-testing.mjs.map +1 -1
  58. package/fesm2022/skyux-core.mjs +3858 -0
  59. package/fesm2022/skyux-core.mjs.map +1 -0
  60. package/lib/modules/affix/affix.directive.d.ts +1 -1
  61. package/lib/modules/viewkeeper/viewkeeper.directive.d.ts +1 -1
  62. package/package.json +14 -22
  63. package/esm2020/lib/modules/adapter-service/adapter.service.mjs +0 -227
  64. package/esm2020/lib/modules/affix/affix.directive.mjs +0 -118
  65. package/esm2020/lib/modules/affix/affix.service.mjs +0 -28
  66. package/esm2020/lib/modules/affix/affixer.mjs +0 -377
  67. package/esm2020/lib/modules/default-input-provider/default-input-provider.mjs +0 -31
  68. package/esm2020/lib/modules/dock/dock-dom-adapter.service.mjs +0 -83
  69. package/esm2020/lib/modules/dock/dock-item.mjs +0 -34
  70. package/esm2020/lib/modules/dock/dock.component.mjs +0 -110
  71. package/esm2020/lib/modules/dock/dock.service.mjs +0 -98
  72. package/esm2020/lib/modules/dynamic-component/dynamic-component.service.mjs +0 -109
  73. package/esm2020/lib/modules/id/id.directive.mjs +0 -34
  74. package/esm2020/lib/modules/layout-host/layout-host.service.mjs +0 -27
  75. package/esm2020/lib/modules/live-announcer/live-announcer.service.mjs +0 -80
  76. package/esm2020/lib/modules/log/log.service.mjs +0 -147
  77. package/esm2020/lib/modules/media-query/media-query.service.mjs +0 -124
  78. package/esm2020/lib/modules/numeric/numeric.pipe.mjs +0 -84
  79. package/esm2020/lib/modules/numeric/numeric.service.mjs +0 -179
  80. package/esm2020/lib/modules/overlay/overlay-adapter.service.mjs +0 -47
  81. package/esm2020/lib/modules/overlay/overlay-instance.mjs +0 -65
  82. package/esm2020/lib/modules/overlay/overlay.component.mjs +0 -192
  83. package/esm2020/lib/modules/overlay/overlay.service.mjs +0 -125
  84. package/esm2020/lib/modules/percent-pipe/percent.pipe.mjs +0 -59
  85. package/esm2020/lib/modules/resize-observer/resize-observer-media-query.service.mjs +0 -121
  86. package/esm2020/lib/modules/resize-observer/resize-observer.service.mjs +0 -79
  87. package/esm2020/lib/modules/scrollable-host/scrollable-host.service.mjs +0 -218
  88. package/esm2020/lib/modules/shared/number-format/number-format-utility.mjs +0 -72
  89. package/esm2020/lib/modules/shared/sky-core-resources.module.mjs +0 -50
  90. package/esm2020/lib/modules/title/title.service.mjs +0 -34
  91. package/esm2020/lib/modules/trim/trim.directive.mjs +0 -65
  92. package/esm2020/lib/modules/viewkeeper/viewkeeper.directive.mjs +0 -131
  93. package/esm2020/lib/modules/viewkeeper/viewkeeper.mjs +0 -276
  94. package/esm2020/lib/modules/viewkeeper/viewkeeper.service.mjs +0 -42
  95. package/esm2020/testing/core-testing.module.mjs +0 -32
  96. package/esm2020/testing/mock-media-query.service.mjs +0 -46
  97. package/esm2020/testing/overlay/overlay-harness.mjs +0 -43
  98. package/esm2020/testing/shared/component-harness.mjs +0 -19
  99. package/fesm2015/skyux-core-testing.mjs +0 -209
  100. package/fesm2015/skyux-core-testing.mjs.map +0 -1
  101. package/fesm2015/skyux-core.mjs +0 -3835
  102. package/fesm2015/skyux-core.mjs.map +0 -1
  103. package/fesm2020/skyux-core.mjs +0 -3825
  104. package/fesm2020/skyux-core.mjs.map +0 -1
  105. /package/{esm2020 → esm2022}/index.mjs +0 -0
  106. /package/{esm2020 → esm2022}/lib/modules/adapter-service/focusable-children-options.mjs +0 -0
  107. /package/{esm2020 → esm2022}/lib/modules/affix/affix-auto-fit-context.mjs +0 -0
  108. /package/{esm2020 → esm2022}/lib/modules/affix/affix-config.mjs +0 -0
  109. /package/{esm2020 → esm2022}/lib/modules/affix/affix-horizontal-alignment.mjs +0 -0
  110. /package/{esm2020 → esm2022}/lib/modules/affix/affix-offset-change.mjs +0 -0
  111. /package/{esm2020 → esm2022}/lib/modules/affix/affix-offset.mjs +0 -0
  112. /package/{esm2020 → esm2022}/lib/modules/affix/affix-placement-change.mjs +0 -0
  113. /package/{esm2020 → esm2022}/lib/modules/affix/affix-placement.mjs +0 -0
  114. /package/{esm2020 → esm2022}/lib/modules/affix/affix-position.mjs +0 -0
  115. /package/{esm2020 → esm2022}/lib/modules/affix/affix-rect.mjs +0 -0
  116. /package/{esm2020 → esm2022}/lib/modules/affix/affix-utils.mjs +0 -0
  117. /package/{esm2020 → esm2022}/lib/modules/affix/affix-vertical-alignment.mjs +0 -0
  118. /package/{esm2020 → esm2022}/lib/modules/affix/dom-utils.mjs +0 -0
  119. /package/{esm2020 → esm2022}/lib/modules/dock/dock-insert-component-config.mjs +0 -0
  120. /package/{esm2020 → esm2022}/lib/modules/dock/dock-item-config.mjs +0 -0
  121. /package/{esm2020 → esm2022}/lib/modules/dock/dock-item-reference.mjs +0 -0
  122. /package/{esm2020 → esm2022}/lib/modules/dock/dock-location.mjs +0 -0
  123. /package/{esm2020 → esm2022}/lib/modules/dock/dock-options.mjs +0 -0
  124. /package/{esm2020 → esm2022}/lib/modules/dock/sort-by-stack-order.mjs +0 -0
  125. /package/{esm2020 → esm2022}/lib/modules/dynamic-component/dynamic-component-location.mjs +0 -0
  126. /package/{esm2020 → esm2022}/lib/modules/dynamic-component/dynamic-component-options.mjs +0 -0
  127. /package/{esm2020 → esm2022}/lib/modules/layout-host/layout-host-for-child-args.mjs +0 -0
  128. /package/{esm2020 → esm2022}/lib/modules/live-announcer/types/live-announcer-args.mjs +0 -0
  129. /package/{esm2020 → esm2022}/lib/modules/live-announcer/types/live-announcer-politeness.mjs +0 -0
  130. /package/{esm2020 → esm2022}/lib/modules/log/types/log-deprecation-args.mjs +0 -0
  131. /package/{esm2020 → esm2022}/lib/modules/log/types/log-level-token.mjs +0 -0
  132. /package/{esm2020 → esm2022}/lib/modules/log/types/log-level.mjs +0 -0
  133. /package/{esm2020 → esm2022}/lib/modules/media-query/media-breakpoints.mjs +0 -0
  134. /package/{esm2020 → esm2022}/lib/modules/media-query/media-query-listener.mjs +0 -0
  135. /package/{esm2020 → esm2022}/lib/modules/numeric/numeric-symbol.mjs +0 -0
  136. /package/{esm2020 → esm2022}/lib/modules/numeric/numeric.options.mjs +0 -0
  137. /package/{esm2020 → esm2022}/lib/modules/overlay/overlay-config.mjs +0 -0
  138. /package/{esm2020 → esm2022}/lib/modules/overlay/overlay-context.mjs +0 -0
  139. /package/{esm2020 → esm2022}/lib/modules/overlay/overlay-position.mjs +0 -0
  140. /package/{esm2020 → esm2022}/lib/modules/stacking-context/stacking-context-token.mjs +0 -0
  141. /package/{esm2020 → esm2022}/lib/modules/stacking-context/stacking-context.mjs +0 -0
  142. /package/{esm2020 → esm2022}/lib/modules/title/set-title-args.mjs +0 -0
  143. /package/{esm2020 → esm2022}/lib/modules/viewkeeper/viewkeeper-boundary-info.mjs +0 -0
  144. /package/{esm2020 → esm2022}/lib/modules/viewkeeper/viewkeeper-fixed-styles.mjs +0 -0
  145. /package/{esm2020 → esm2022}/lib/modules/viewkeeper/viewkeeper-offset.mjs +0 -0
  146. /package/{esm2020 → esm2022}/lib/modules/viewkeeper/viewkeeper-options.mjs +0 -0
  147. /package/{esm2020 → esm2022}/skyux-core.mjs +0 -0
  148. /package/{esm2020 → esm2022}/testing/overlay/overlay-harness-filters.mjs +0 -0
  149. /package/{esm2020 → esm2022}/testing/public-api.mjs +0 -0
  150. /package/{esm2020 → esm2022}/testing/shared/harness-filters.mjs +0 -0
  151. /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