@dugararchit/flex-layout 13.0.0-dugararchit

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 (226) hide show
  1. package/README.md +7 -0
  2. package/_private-utils/angular-flex-layout-_private-utils.d.ts +5 -0
  3. package/_private-utils/auto-prefixer.d.ts +24 -0
  4. package/_private-utils/index.d.ts +10 -0
  5. package/_private-utils/layout-validator.d.ts +32 -0
  6. package/_private-utils/object-extend.d.ts +15 -0
  7. package/_private-utils/package.json +10 -0
  8. package/_private-utils/testing/angular-flex-layout-_private-utils-testing.d.ts +5 -0
  9. package/_private-utils/testing/custom-matchers.d.ts +65 -0
  10. package/_private-utils/testing/dom-tools.d.ts +47 -0
  11. package/_private-utils/testing/helpers.d.ts +24 -0
  12. package/_private-utils/testing/index.d.ts +10 -0
  13. package/_private-utils/testing/package.json +10 -0
  14. package/angular-flex-layout-13.0.0-beta.38.tgz +0 -0
  15. package/angular-flex-layout.d.ts +5 -0
  16. package/core/README.md +25 -0
  17. package/core/add-alias.d.ts +14 -0
  18. package/core/angular-flex-layout-core.d.ts +5 -0
  19. package/core/base/base2.d.ts +60 -0
  20. package/core/base/index.d.ts +8 -0
  21. package/core/basis-validator/basis-validator.d.ts +13 -0
  22. package/core/breakpoints/break-point-registry.d.ts +42 -0
  23. package/core/breakpoints/break-point.d.ts +14 -0
  24. package/core/breakpoints/break-points-token.d.ts +14 -0
  25. package/core/breakpoints/breakpoint-tools.d.ts +19 -0
  26. package/core/breakpoints/data/break-points.d.ts +12 -0
  27. package/core/breakpoints/data/orientation-break-points.d.ts +23 -0
  28. package/core/breakpoints/index.d.ts +12 -0
  29. package/core/browser-provider.d.ts +24 -0
  30. package/core/match-media/index.d.ts +9 -0
  31. package/core/match-media/match-media.d.ts +59 -0
  32. package/core/match-media/mock/mock-match-media.d.ts +92 -0
  33. package/core/media-change.d.ts +30 -0
  34. package/core/media-marshaller/media-marshaller.d.ts +123 -0
  35. package/core/media-marshaller/print-hook.d.ts +95 -0
  36. package/core/media-observer/index.d.ts +8 -0
  37. package/core/media-observer/media-observer.d.ts +115 -0
  38. package/core/media-trigger/index.d.ts +8 -0
  39. package/core/media-trigger/media-trigger.d.ts +73 -0
  40. package/core/module.d.ts +11 -0
  41. package/core/multiply/multiplier.d.ts +5 -0
  42. package/core/package.json +10 -0
  43. package/core/public-api.d.ts +25 -0
  44. package/core/sass/_layout-bp.scss +76 -0
  45. package/core/style-builder/style-builder.d.ts +21 -0
  46. package/core/style-utils/style-utils.d.ts +53 -0
  47. package/core/stylesheet-map/index.d.ts +8 -0
  48. package/core/stylesheet-map/stylesheet-map.d.ts +24 -0
  49. package/core/tokens/breakpoint-token.d.ts +10 -0
  50. package/core/tokens/index.d.ts +10 -0
  51. package/core/tokens/library-config.d.ts +26 -0
  52. package/core/tokens/server-token.d.ts +15 -0
  53. package/core/utils/array.d.ts +9 -0
  54. package/core/utils/index.d.ts +9 -0
  55. package/core/utils/sort.d.ts +15 -0
  56. package/esm2020/_private-utils/angular-flex-layout-_private-utils.mjs +5 -0
  57. package/esm2020/_private-utils/auto-prefixer.mjs +65 -0
  58. package/esm2020/_private-utils/index.mjs +11 -0
  59. package/esm2020/_private-utils/layout-validator.mjs +83 -0
  60. package/esm2020/_private-utils/object-extend.mjs +30 -0
  61. package/esm2020/_private-utils/testing/angular-flex-layout-_private-utils-testing.mjs +5 -0
  62. package/esm2020/_private-utils/testing/custom-matchers.mjs +201 -0
  63. package/esm2020/_private-utils/testing/dom-tools.mjs +101 -0
  64. package/esm2020/_private-utils/testing/helpers.mjs +43 -0
  65. package/esm2020/_private-utils/testing/index.mjs +11 -0
  66. package/esm2020/angular-flex-layout.mjs +5 -0
  67. package/esm2020/core/add-alias.mjs +23 -0
  68. package/esm2020/core/angular-flex-layout-core.mjs +5 -0
  69. package/esm2020/core/base/base2.mjs +131 -0
  70. package/esm2020/core/base/index.mjs +9 -0
  71. package/esm2020/core/basis-validator/basis-validator.mjs +48 -0
  72. package/esm2020/core/breakpoints/break-point-registry.mjs +76 -0
  73. package/esm2020/core/breakpoints/break-point.mjs +2 -0
  74. package/esm2020/core/breakpoints/break-points-token.mjs +30 -0
  75. package/esm2020/core/breakpoints/breakpoint-tools.mjs +53 -0
  76. package/esm2020/core/breakpoints/data/break-points.mjs +78 -0
  77. package/esm2020/core/breakpoints/data/orientation-break-points.mjs +40 -0
  78. package/esm2020/core/breakpoints/index.mjs +13 -0
  79. package/esm2020/core/browser-provider.mjs +41 -0
  80. package/esm2020/core/match-media/index.mjs +10 -0
  81. package/esm2020/core/match-media/match-media.mjs +186 -0
  82. package/esm2020/core/match-media/mock/mock-match-media.mjs +224 -0
  83. package/esm2020/core/media-change.mjs +25 -0
  84. package/esm2020/core/media-marshaller/media-marshaller.mjs +317 -0
  85. package/esm2020/core/media-marshaller/print-hook.mjs +265 -0
  86. package/esm2020/core/media-observer/index.mjs +9 -0
  87. package/esm2020/core/media-observer/media-observer.mjs +195 -0
  88. package/esm2020/core/media-trigger/index.mjs +9 -0
  89. package/esm2020/core/media-trigger/media-trigger.mjs +188 -0
  90. package/esm2020/core/module.mjs +27 -0
  91. package/esm2020/core/multiply/multiplier.mjs +16 -0
  92. package/esm2020/core/public-api.mjs +26 -0
  93. package/esm2020/core/style-builder/style-builder.mjs +15 -0
  94. package/esm2020/core/style-utils/style-utils.mjs +174 -0
  95. package/esm2020/core/stylesheet-map/index.mjs +9 -0
  96. package/esm2020/core/stylesheet-map/stylesheet-map.mjs +59 -0
  97. package/esm2020/core/tokens/breakpoint-token.mjs +13 -0
  98. package/esm2020/core/tokens/index.mjs +11 -0
  99. package/esm2020/core/tokens/library-config.mjs +30 -0
  100. package/esm2020/core/tokens/server-token.mjs +19 -0
  101. package/esm2020/core/utils/array.mjs +12 -0
  102. package/esm2020/core/utils/index.mjs +10 -0
  103. package/esm2020/core/utils/sort.mjs +20 -0
  104. package/esm2020/extended/angular-flex-layout-extended.mjs +5 -0
  105. package/esm2020/extended/class/class.mjs +88 -0
  106. package/esm2020/extended/img-src/img-src.mjs +106 -0
  107. package/esm2020/extended/module.mjs +45 -0
  108. package/esm2020/extended/public-api.mjs +13 -0
  109. package/esm2020/extended/show-hide/show-hide.mjs +176 -0
  110. package/esm2020/extended/style/style-transforms.mjs +76 -0
  111. package/esm2020/extended/style/style.mjs +130 -0
  112. package/esm2020/flex/angular-flex-layout-flex.mjs +5 -0
  113. package/esm2020/flex/flex/flex.mjs +291 -0
  114. package/esm2020/flex/flex-align/flex-align.mjs +80 -0
  115. package/esm2020/flex/flex-fill/flex-fill.mjs +50 -0
  116. package/esm2020/flex/flex-offset/flex-offset.mjs +121 -0
  117. package/esm2020/flex/flex-order/flex-order.mjs +66 -0
  118. package/esm2020/flex/layout/layout.mjs +86 -0
  119. package/esm2020/flex/layout-align/layout-align.mjs +194 -0
  120. package/esm2020/flex/layout-gap/layout-gap.mjs +282 -0
  121. package/esm2020/flex/module.mjs +62 -0
  122. package/esm2020/flex/public-api.mjs +17 -0
  123. package/esm2020/grid/align-columns/align-columns.mjs +137 -0
  124. package/esm2020/grid/align-rows/align-rows.mjs +119 -0
  125. package/esm2020/grid/angular-flex-layout-grid.mjs +5 -0
  126. package/esm2020/grid/area/area.mjs +67 -0
  127. package/esm2020/grid/areas/areas.mjs +86 -0
  128. package/esm2020/grid/auto/auto.mjs +89 -0
  129. package/esm2020/grid/column/column.mjs +67 -0
  130. package/esm2020/grid/columns/columns.mjs +96 -0
  131. package/esm2020/grid/gap/gap.mjs +85 -0
  132. package/esm2020/grid/grid-align/grid-align.mjs +111 -0
  133. package/esm2020/grid/module.mjs +73 -0
  134. package/esm2020/grid/public-api.mjs +20 -0
  135. package/esm2020/grid/row/row.mjs +67 -0
  136. package/esm2020/grid/rows/rows.mjs +96 -0
  137. package/esm2020/module.mjs +64 -0
  138. package/esm2020/public-api.mjs +20 -0
  139. package/esm2020/server/angular-flex-layout-server.mjs +5 -0
  140. package/esm2020/server/module.mjs +22 -0
  141. package/esm2020/server/public-api.mjs +10 -0
  142. package/esm2020/server/server-match-media.mjs +151 -0
  143. package/esm2020/server/server-provider.mjs +140 -0
  144. package/esm2020/version.mjs +11 -0
  145. package/extended/README.md +18 -0
  146. package/extended/angular-flex-layout-extended.d.ts +5 -0
  147. package/extended/class/class.d.ts +38 -0
  148. package/extended/img-src/img-src.d.ts +51 -0
  149. package/extended/module.d.ts +16 -0
  150. package/extended/package.json +10 -0
  151. package/extended/public-api.d.ts +12 -0
  152. package/extended/show-hide/show-hide.d.ts +61 -0
  153. package/extended/style/style-transforms.d.ts +36 -0
  154. package/extended/style/style.d.ts +45 -0
  155. package/fesm2015/angular-flex-layout-_private-utils-testing.mjs +357 -0
  156. package/fesm2015/angular-flex-layout-_private-utils-testing.mjs.map +1 -0
  157. package/fesm2015/angular-flex-layout-_private-utils.mjs +193 -0
  158. package/fesm2015/angular-flex-layout-_private-utils.mjs.map +1 -0
  159. package/fesm2015/angular-flex-layout-core.mjs +2331 -0
  160. package/fesm2015/angular-flex-layout-core.mjs.map +1 -0
  161. package/fesm2015/angular-flex-layout-extended.mjs +621 -0
  162. package/fesm2015/angular-flex-layout-extended.mjs.map +1 -0
  163. package/fesm2015/angular-flex-layout-flex.mjs +1206 -0
  164. package/fesm2015/angular-flex-layout-flex.mjs.map +1 -0
  165. package/fesm2015/angular-flex-layout-grid.mjs +1047 -0
  166. package/fesm2015/angular-flex-layout-grid.mjs.map +1 -0
  167. package/fesm2015/angular-flex-layout-server.mjs +324 -0
  168. package/fesm2015/angular-flex-layout-server.mjs.map +1 -0
  169. package/fesm2015/angular-flex-layout.mjs +94 -0
  170. package/fesm2015/angular-flex-layout.mjs.map +1 -0
  171. package/fesm2020/angular-flex-layout-_private-utils-testing.mjs +357 -0
  172. package/fesm2020/angular-flex-layout-_private-utils-testing.mjs.map +1 -0
  173. package/fesm2020/angular-flex-layout-_private-utils.mjs +192 -0
  174. package/fesm2020/angular-flex-layout-_private-utils.mjs.map +1 -0
  175. package/fesm2020/angular-flex-layout-core.mjs +2304 -0
  176. package/fesm2020/angular-flex-layout-core.mjs.map +1 -0
  177. package/fesm2020/angular-flex-layout-extended.mjs +612 -0
  178. package/fesm2020/angular-flex-layout-extended.mjs.map +1 -0
  179. package/fesm2020/angular-flex-layout-flex.mjs +1198 -0
  180. package/fesm2020/angular-flex-layout-flex.mjs.map +1 -0
  181. package/fesm2020/angular-flex-layout-grid.mjs +1047 -0
  182. package/fesm2020/angular-flex-layout-grid.mjs.map +1 -0
  183. package/fesm2020/angular-flex-layout-server.mjs +322 -0
  184. package/fesm2020/angular-flex-layout-server.mjs.map +1 -0
  185. package/fesm2020/angular-flex-layout.mjs +92 -0
  186. package/fesm2020/angular-flex-layout.mjs.map +1 -0
  187. package/flex/README.md +19 -0
  188. package/flex/angular-flex-layout-flex.d.ts +5 -0
  189. package/flex/flex/flex.d.ts +59 -0
  190. package/flex/flex-align/flex-align.d.ts +32 -0
  191. package/flex/flex-fill/flex-fill.d.ts +33 -0
  192. package/flex/flex-offset/flex-offset.d.ts +44 -0
  193. package/flex/flex-order/flex-order.d.ts +34 -0
  194. package/flex/layout/layout.d.ts +43 -0
  195. package/flex/layout-align/layout-align.d.ts +49 -0
  196. package/flex/layout-gap/layout-gap.d.ts +65 -0
  197. package/flex/module.d.ts +21 -0
  198. package/flex/package.json +10 -0
  199. package/flex/public-api.d.ts +16 -0
  200. package/grid/README.md +19 -0
  201. package/grid/align-columns/align-columns.d.ts +39 -0
  202. package/grid/align-rows/align-rows.d.ts +39 -0
  203. package/grid/angular-flex-layout-grid.d.ts +5 -0
  204. package/grid/area/area.d.ts +34 -0
  205. package/grid/areas/areas.d.ts +41 -0
  206. package/grid/auto/auto.d.ts +41 -0
  207. package/grid/column/column.d.ts +34 -0
  208. package/grid/columns/columns.d.ts +43 -0
  209. package/grid/gap/gap.d.ts +42 -0
  210. package/grid/grid-align/grid-align.d.ts +37 -0
  211. package/grid/module.d.ts +23 -0
  212. package/grid/package.json +10 -0
  213. package/grid/public-api.d.ts +19 -0
  214. package/grid/row/row.d.ts +34 -0
  215. package/grid/rows/rows.d.ts +43 -0
  216. package/module.d.ts +30 -0
  217. package/package.json +100 -0
  218. package/public-api.d.ts +18 -0
  219. package/server/README.md +23 -0
  220. package/server/angular-flex-layout-server.d.ts +5 -0
  221. package/server/module.d.ts +6 -0
  222. package/server/package.json +10 -0
  223. package/server/public-api.d.ts +9 -0
  224. package/server/server-match-media.d.ts +61 -0
  225. package/server/server-provider.d.ts +44 -0
  226. package/version.d.ts +10 -0
@@ -0,0 +1,188 @@
1
+ /**
2
+ * @license
3
+ * Copyright Google LLC All Rights Reserved.
4
+ *
5
+ * Use of this source code is governed by an MIT-style license that can be
6
+ * found in the LICENSE file at https://angular.io/license
7
+ */
8
+ import { Inject, Injectable, PLATFORM_ID } from '@angular/core';
9
+ import { DOCUMENT, isPlatformBrowser } from '@angular/common';
10
+ import { fromEvent } from 'rxjs';
11
+ import { take } from 'rxjs/operators';
12
+ import { mergeAlias } from '../add-alias';
13
+ import { MediaChange } from '../media-change';
14
+ import { sortDescendingPriority } from '../utils/sort';
15
+ import { LAYOUT_CONFIG } from '../tokens/library-config';
16
+ import * as i0 from "@angular/core";
17
+ import * as i1 from "../breakpoints/break-point-registry";
18
+ import * as i2 from "../match-media/match-media";
19
+ /**
20
+ * Class
21
+ */
22
+ export class MediaTrigger {
23
+ constructor(breakpoints, matchMedia, layoutConfig, _platformId, _document) {
24
+ this.breakpoints = breakpoints;
25
+ this.matchMedia = matchMedia;
26
+ this.layoutConfig = layoutConfig;
27
+ this._platformId = _platformId;
28
+ this._document = _document;
29
+ this.hasCachedRegistryMatches = false;
30
+ this.originalActivations = [];
31
+ this.originalRegistry = new Map();
32
+ }
33
+ /**
34
+ * Manually activate range of breakpoints
35
+ * @param list array of mediaQuery or alias strings
36
+ */
37
+ activate(list) {
38
+ list = list.map(it => it.trim()); // trim queries
39
+ this.saveActivations();
40
+ this.deactivateAll();
41
+ this.setActivations(list);
42
+ this.prepareAutoRestore();
43
+ }
44
+ /**
45
+ * Restore original, 'real' breakpoints and emit events
46
+ * to trigger stream notification
47
+ */
48
+ restore() {
49
+ if (this.hasCachedRegistryMatches) {
50
+ const extractQuery = (change) => change.mediaQuery;
51
+ const list = this.originalActivations.map(extractQuery);
52
+ try {
53
+ this.deactivateAll();
54
+ this.restoreRegistryMatches();
55
+ this.setActivations(list);
56
+ }
57
+ finally {
58
+ this.originalActivations = [];
59
+ if (this.resizeSubscription) {
60
+ this.resizeSubscription.unsubscribe();
61
+ }
62
+ }
63
+ }
64
+ }
65
+ // ************************************************
66
+ // Internal Methods
67
+ // ************************************************
68
+ /**
69
+ * Whenever window resizes, immediately auto-restore original
70
+ * activations (if we are simulating activations)
71
+ */
72
+ prepareAutoRestore() {
73
+ const isBrowser = isPlatformBrowser(this._platformId) && this._document;
74
+ const enableAutoRestore = isBrowser && this.layoutConfig.mediaTriggerAutoRestore;
75
+ if (enableAutoRestore) {
76
+ const resize$ = fromEvent(window, 'resize').pipe(take(1));
77
+ this.resizeSubscription = resize$.subscribe(this.restore.bind(this));
78
+ }
79
+ }
80
+ /**
81
+ * Notify all matchMedia subscribers of de-activations
82
+ *
83
+ * Note: we must force 'matches' updates for
84
+ * future matchMedia::activation lookups
85
+ */
86
+ deactivateAll() {
87
+ const list = this.currentActivations;
88
+ this.forceRegistryMatches(list, false);
89
+ this.simulateMediaChanges(list, false);
90
+ }
91
+ /**
92
+ * Cache current activations as sorted, prioritized list of MediaChanges
93
+ */
94
+ saveActivations() {
95
+ if (!this.hasCachedRegistryMatches) {
96
+ const toMediaChange = (query) => new MediaChange(true, query);
97
+ const mergeMQAlias = (change) => {
98
+ const bp = this.breakpoints.findByQuery(change.mediaQuery);
99
+ return mergeAlias(change, bp);
100
+ };
101
+ this.originalActivations = this.currentActivations
102
+ .map(toMediaChange)
103
+ .map(mergeMQAlias)
104
+ .sort(sortDescendingPriority);
105
+ this.cacheRegistryMatches();
106
+ }
107
+ }
108
+ /**
109
+ * Force set manual activations for specified mediaQuery list
110
+ */
111
+ setActivations(list) {
112
+ if (!!this.originalRegistry) {
113
+ this.forceRegistryMatches(list, true);
114
+ }
115
+ this.simulateMediaChanges(list);
116
+ }
117
+ /**
118
+ * For specified mediaQuery list manually simulate activations or deactivations
119
+ */
120
+ simulateMediaChanges(queries, matches = true) {
121
+ const toMediaQuery = (query) => {
122
+ const locator = this.breakpoints;
123
+ const bp = locator.findByAlias(query) || locator.findByQuery(query);
124
+ return bp ? bp.mediaQuery : query;
125
+ };
126
+ const emitChangeEvent = (query) => this.emitChangeEvent(matches, query);
127
+ queries.map(toMediaQuery).forEach(emitChangeEvent);
128
+ }
129
+ /**
130
+ * Replace current registry with simulated registry...
131
+ * Note: this is required since MediaQueryList::matches is 'readOnly'
132
+ */
133
+ forceRegistryMatches(queries, matches) {
134
+ const registry = new Map();
135
+ queries.forEach(query => {
136
+ registry.set(query, { matches });
137
+ });
138
+ this.matchMedia.registry = registry;
139
+ }
140
+ /**
141
+ * Save current MatchMedia::registry items.
142
+ */
143
+ cacheRegistryMatches() {
144
+ const target = this.originalRegistry;
145
+ target.clear();
146
+ this.matchMedia.registry.forEach((value, key) => {
147
+ target.set(key, value);
148
+ });
149
+ this.hasCachedRegistryMatches = true;
150
+ }
151
+ /**
152
+ * Restore original, 'true' registry
153
+ */
154
+ restoreRegistryMatches() {
155
+ const target = this.matchMedia.registry;
156
+ target.clear();
157
+ this.originalRegistry.forEach((value, key) => {
158
+ target.set(key, value);
159
+ });
160
+ this.originalRegistry.clear();
161
+ this.hasCachedRegistryMatches = false;
162
+ }
163
+ /**
164
+ * Manually emit a MediaChange event via the MatchMedia to MediaMarshaller and MediaObserver
165
+ */
166
+ emitChangeEvent(matches, query) {
167
+ this.matchMedia.source.next(new MediaChange(matches, query));
168
+ }
169
+ get currentActivations() {
170
+ return this.matchMedia.activations;
171
+ }
172
+ }
173
+ MediaTrigger.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: MediaTrigger, deps: [{ token: i1.BreakPointRegistry }, { token: i2.MatchMedia }, { token: LAYOUT_CONFIG }, { token: PLATFORM_ID }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable });
174
+ MediaTrigger.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: MediaTrigger, providedIn: 'root' });
175
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: MediaTrigger, decorators: [{
176
+ type: Injectable,
177
+ args: [{ providedIn: 'root' }]
178
+ }], ctorParameters: function () { return [{ type: i1.BreakPointRegistry }, { type: i2.MatchMedia }, { type: undefined, decorators: [{
179
+ type: Inject,
180
+ args: [LAYOUT_CONFIG]
181
+ }] }, { type: Object, decorators: [{
182
+ type: Inject,
183
+ args: [PLATFORM_ID]
184
+ }] }, { type: undefined, decorators: [{
185
+ type: Inject,
186
+ args: [DOCUMENT]
187
+ }] }]; } });
188
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaWEtdHJpZ2dlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpYnMvZmxleC1sYXlvdXQvY29yZS9tZWRpYS10cmlnZ2VyL21lZGlhLXRyaWdnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBQ0gsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBQyxRQUFRLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUU1RCxPQUFPLEVBQUMsU0FBUyxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwQyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUc1QyxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFDLGFBQWEsRUFBc0IsTUFBTSwwQkFBMEIsQ0FBQzs7OztBQUU1RTs7R0FFRztBQUVILE1BQU0sT0FBTyxZQUFZO0lBRXZCLFlBQ2MsV0FBK0IsRUFDL0IsVUFBc0IsRUFDQyxZQUFpQyxFQUNuQyxXQUFtQixFQUN0QixTQUFjO1FBSmhDLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQUMvQixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ0MsaUJBQVksR0FBWixZQUFZLENBQXFCO1FBQ25DLGdCQUFXLEdBQVgsV0FBVyxDQUFRO1FBQ3RCLGNBQVMsR0FBVCxTQUFTLENBQUs7UUFxS3RDLDZCQUF3QixHQUFHLEtBQUssQ0FBQztRQUNqQyx3QkFBbUIsR0FBa0IsRUFBRSxDQUFDO1FBQ3hDLHFCQUFnQixHQUFnQyxJQUFJLEdBQUcsRUFBMEIsQ0FBQztJQXRLMUYsQ0FBQztJ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QUFPLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDO0lBQ3JDLENBQUM7O3lHQTFLVSxZQUFZLDhFQUtYLGFBQWEsYUFDYixXQUFXLGFBQ1gsUUFBUTs2R0FQVCxZQUFZLGNBREEsTUFBTTsyRkFDbEIsWUFBWTtrQkFEeEIsVUFBVTttQkFBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUM7OzBCQU16QixNQUFNOzJCQUFDLGFBQWE7OEJBQ3VCLE1BQU07MEJBQWpELE1BQU07MkJBQUMsV0FBVzs7MEJBQ2xCLE1BQU07MkJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGUsIFBMQVRGT1JNX0lEfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RE9DVU1FTlQsIGlzUGxhdGZvcm1Ccm93c2VyfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQge2Zyb21FdmVudCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7dGFrZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge21lcmdlQWxpYXN9IGZyb20gJy4uL2FkZC1hbGlhcyc7XG5pbXBvcnQge01lZGlhQ2hhbmdlfSBmcm9tICcuLi9tZWRpYS1jaGFuZ2UnO1xuaW1wb3J0IHtNYXRjaE1lZGlhfSBmcm9tICcuLi9tYXRjaC1tZWRpYS9tYXRjaC1tZWRpYSc7XG5pbXBvcnQge0JyZWFrUG9pbnRSZWdpc3RyeSwgT3B0aW9uYWxCcmVha1BvaW50fSBmcm9tICcuLi9icmVha3BvaW50cy9icmVhay1wb2ludC1yZWdpc3RyeSc7XG5pbXBvcnQge3NvcnREZXNjZW5kaW5nUHJpb3JpdHl9IGZyb20gJy4uL3V0aWxzL3NvcnQnO1xuaW1wb3J0IHtMQVlPVVRfQ09ORklHLCBMYXlvdXRDb25maWdPcHRpb25zfSBmcm9tICcuLi90b2tlbnMvbGlicmFyeS1jb25maWcnO1xuXG4vKipcbiAqIENsYXNzXG4gKi9cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIE1lZGlhVHJpZ2dlciB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICBwcm90ZWN0ZWQgYnJlYWtwb2ludHM6IEJyZWFrUG9pbnRSZWdpc3RyeSxcbiAgICAgIHByb3RlY3RlZCBtYXRjaE1lZGlhOiBNYXRjaE1lZGlhLFxuICAgICAgQEluamVjdChMQVlPVVRfQ09ORklHKSBwcm90ZWN0ZWQgbGF5b3V0Q29uZmlnOiBMYXlvdXRDb25maWdPcHRpb25zLFxuICAgICAgQEluamVjdChQTEFURk9STV9JRCkgcHJvdGVjdGVkIF9wbGF0Zm9ybUlkOiBPYmplY3QsXG4gICAgICBASW5qZWN0KERPQ1VNRU5UKSBwcm90ZWN0ZWQgX2RvY3VtZW50OiBhbnkpIHtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYW51YWxseSBhY3RpdmF0ZSByYW5nZSBvZiBicmVha3BvaW50c1xuICAgKiBAcGFyYW0gbGlzdCBhcnJheSBvZiBtZWRpYVF1ZXJ5IG9yIGFsaWFzIHN0cmluZ3NcbiAgICovXG4gIGFjdGl2YXRlKGxpc3Q6IHN0cmluZ1tdKSB7XG4gICAgbGlzdCA9IGxpc3QubWFwKGl0ID0+IGl0LnRyaW0oKSk7IC8vIHRyaW0gcXVlcmllc1xuXG4gICAgdGhpcy5zYXZlQWN0aXZhdGlvbnMoKTtcbiAgICB0aGlzLmRlYWN0aXZhdGVBbGwoKTtcbiAgICB0aGlzLnNldEFjdGl2YXRpb25zKGxpc3QpO1xuXG4gICAgdGhpcy5wcmVwYXJlQXV0b1Jlc3RvcmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0b3JlIG9yaWdpbmFsLCAncmVhbCcgYnJlYWtwb2ludHMgYW5kIGVtaXQgZXZlbnRzXG4gICAqIHRvIHRyaWdnZXIgc3RyZWFtIG5vdGlmaWNhdGlvblxuICAgKi9cbiAgcmVzdG9yZSgpIHtcbiAgICBpZiAodGhpcy5oYXNDYWNoZWRSZWdpc3RyeU1hdGNoZXMpIHtcbiAgICAgIGNvbnN0IGV4dHJhY3RRdWVyeSA9IChjaGFuZ2U6IE1lZGlhQ2hhbmdlKSA9PiBjaGFuZ2UubWVkaWFRdWVyeTtcbiAgICAgIGNvbnN0IGxpc3QgPSB0aGlzLm9yaWdpbmFsQWN0aXZhdGlvbnMubWFwKGV4dHJhY3RRdWVyeSk7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLmRlYWN0aXZhdGVBbGwoKTtcbiAgICAgICAgdGhpcy5yZXN0b3JlUmVnaXN0cnlNYXRjaGVzKCk7XG4gICAgICAgIHRoaXMuc2V0QWN0aXZhdGlvbnMobGlzdCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLm9yaWdpbmFsQWN0aXZhdGlvbnMgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMucmVzaXplU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgdGhpcy5yZXNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAvLyBJbnRlcm5hbCBNZXRob2RzXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG4gIC8qKlxuICAgKiBXaGVuZXZlciB3aW5kb3cgcmVzaXplcywgaW1tZWRpYXRlbHkgYXV0by1yZXN0b3JlIG9yaWdpbmFsXG4gICAqIGFjdGl2YXRpb25zIChpZiB3ZSBhcmUgc2ltdWxhdGluZyBhY3RpdmF0aW9ucylcbiAgICovXG4gIHByaXZhdGUgcHJlcGFyZUF1dG9SZXN0b3JlKCkge1xuICAgIGNvbnN0IGlzQnJvd3NlciA9IGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMuX3BsYXRmb3JtSWQpICYmIHRoaXMuX2RvY3VtZW50O1xuICAgIGNvbnN0IGVuYWJsZUF1dG9SZXN0b3JlID0gaXNCcm93c2VyICYmIHRoaXMubGF5b3V0Q29uZmlnLm1lZGlhVHJpZ2dlckF1dG9SZXN0b3JlO1xuXG4gICAgaWYgKGVuYWJsZUF1dG9SZXN0b3JlKSB7XG4gICAgICBjb25zdCByZXNpemUkID0gZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpLnBpcGUodGFrZSgxKSk7XG4gICAgICB0aGlzLnJlc2l6ZVN1YnNjcmlwdGlvbiA9IHJlc2l6ZSQuc3Vic2NyaWJlKHRoaXMucmVzdG9yZS5iaW5kKHRoaXMpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTm90aWZ5IGFsbCBtYXRjaE1lZGlhIHN1YnNjcmliZXJzIG9mIGRlLWFjdGl2YXRpb25zXG4gICAqXG4gICAqIE5vdGU6IHdlIG11c3QgZm9yY2UgJ21hdGNoZXMnIHVwZGF0ZXMgZm9yXG4gICAqICAgICAgIGZ1dHVyZSBtYXRjaE1lZGlhOjphY3RpdmF0aW9uIGxvb2t1cHNcbiAgICovXG4gIHByaXZhdGUgZGVhY3RpdmF0ZUFsbCgpIHtcbiAgICBjb25zdCBsaXN0ID0gdGhpcy5jdXJyZW50QWN0aXZhdGlvbnM7XG5cbiAgICB0aGlzLmZvcmNlUmVnaXN0cnlNYXRjaGVzKGxpc3QsIGZhbHNlKTtcbiAgICB0aGlzLnNpbXVsYXRlTWVkaWFDaGFuZ2VzKGxpc3QsIGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWNoZSBjdXJyZW50IGFjdGl2YXRpb25zIGFzIHNvcnRlZCwgcHJpb3JpdGl6ZWQgbGlzdCBvZiBNZWRpYUNoYW5nZXNcbiAgICovXG4gIHByaXZhdGUgc2F2ZUFjdGl2YXRpb25zKCkge1xuICAgIGlmICghdGhpcy5oYXNDYWNoZWRSZWdpc3RyeU1hdGNoZXMpIHtcbiAgICAgIGNvbnN0IHRvTWVkaWFDaGFuZ2UgPSAocXVlcnk6IHN0cmluZykgPT4gbmV3IE1lZGlhQ2hhbmdlKHRydWUsIHF1ZXJ5KTtcbiAgICAgIGNvbnN0IG1lcmdlTVFBbGlhcyA9IChjaGFuZ2U6IE1lZGlhQ2hhbmdlKSA9PiB7XG4gICAgICAgIGNvbnN0IGJwOiBPcHRpb25hbEJyZWFrUG9pbnQgPSB0aGlzLmJyZWFrcG9pbnRzLmZpbmRCeVF1ZXJ5KGNoYW5nZS5tZWRpYVF1ZXJ5KTtcbiAgICAgICAgcmV0dXJuIG1lcmdlQWxpYXMoY2hhbmdlLCBicCk7XG4gICAgICB9O1xuXG4gICAgICB0aGlzLm9yaWdpbmFsQWN0aXZhdGlvbnMgPSB0aGlzLmN1cnJlbnRBY3RpdmF0aW9uc1xuICAgICAgICAgIC5tYXAodG9NZWRpYUNoYW5nZSlcbiAgICAgICAgICAubWFwKG1lcmdlTVFBbGlhcylcbiAgICAgICAgICAuc29ydChzb3J0RGVzY2VuZGluZ1ByaW9yaXR5KTtcblxuICAgICAgdGhpcy5jYWNoZVJlZ2lzdHJ5TWF0Y2hlcygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JjZSBzZXQgbWFudWFsIGFjdGl2YXRpb25zIGZvciBzcGVjaWZpZWQgbWVkaWFRdWVyeSBsaXN0XG4gICAqL1xuICBwcml2YXRlIHNldEFjdGl2YXRpb25zKGxpc3Q6IHN0cmluZ1tdKSB7XG4gICAgaWYgKCEhdGhpcy5vcmlnaW5hbFJlZ2lzdHJ5KSB7XG4gICAgICB0aGlzLmZvcmNlUmVnaXN0cnlNYXRjaGVzKGxpc3QsIHRydWUpO1xuICAgIH1cbiAgICB0aGlzLnNpbXVsYXRlTWVkaWFDaGFuZ2VzKGxpc3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvciBzcGVjaWZpZWQgbWVkaWFRdWVyeSBsaXN0IG1hbnVhbGx5IHNpbXVsYXRlIGFjdGl2YXRpb25zIG9yIGRlYWN0aXZhdGlvbnNcbiAgICovXG4gIHByaXZhdGUgc2ltdWxhdGVNZWRpYUNoYW5nZXMocXVlcmllczogc3RyaW5nW10sIG1hdGNoZXMgPSB0cnVlKSB7XG4gICAgY29uc3QgdG9NZWRpYVF1ZXJ5ID0gKHF1ZXJ5OiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IGxvY2F0b3IgPSB0aGlzLmJyZWFrcG9pbnRzO1xuICAgICAgY29uc3QgYnAgPSBsb2NhdG9yLmZpbmRCeUFsaWFzKHF1ZXJ5KSB8fCBsb2NhdG9yLmZpbmRCeVF1ZXJ5KHF1ZXJ5KTtcbiAgICAgIHJldHVybiBicCA/IGJwLm1lZGlhUXVlcnkgOiBxdWVyeTtcbiAgICB9O1xuICAgIGNvbnN0IGVtaXRDaGFuZ2VFdmVudCA9IChxdWVyeTogc3RyaW5nKSA9PiB0aGlzLmVtaXRDaGFuZ2VFdmVudChtYXRjaGVzLCBxdWVyeSk7XG5cbiAgICBxdWVyaWVzLm1hcCh0b01lZGlhUXVlcnkpLmZvckVhY2goZW1pdENoYW5nZUV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNlIGN1cnJlbnQgcmVnaXN0cnkgd2l0aCBzaW11bGF0ZWQgcmVnaXN0cnkuLi5cbiAgICogTm90ZTogdGhpcyBpcyByZXF1aXJlZCBzaW5jZSBNZWRpYVF1ZXJ5TGlzdDo6bWF0Y2hlcyBpcyAncmVhZE9ubHknXG4gICAqL1xuICBwcml2YXRlIGZvcmNlUmVnaXN0cnlNYXRjaGVzKHF1ZXJpZXM6IHN0cmluZ1tdLCBtYXRjaGVzOiBib29sZWFuKSB7XG4gICAgY29uc3QgcmVnaXN0cnkgPSBuZXcgTWFwPHN0cmluZywgTWVkaWFRdWVyeUxpc3Q+KCk7XG4gICAgcXVlcmllcy5mb3JFYWNoKHF1ZXJ5ID0+IHtcbiAgICAgIHJlZ2lzdHJ5LnNldChxdWVyeSwge21hdGNoZXN9IGFzIE1lZGlhUXVlcnlMaXN0KTtcbiAgICB9KTtcblxuICAgIHRoaXMubWF0Y2hNZWRpYS5yZWdpc3RyeSA9IHJlZ2lzdHJ5O1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgY3VycmVudCBNYXRjaE1lZGlhOjpyZWdpc3RyeSBpdGVtcy5cbiAgICovXG4gIHByaXZhdGUgY2FjaGVSZWdpc3RyeU1hdGNoZXMoKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5vcmlnaW5hbFJlZ2lzdHJ5O1xuXG4gICAgdGFyZ2V0LmNsZWFyKCk7XG4gICAgdGhpcy5tYXRjaE1lZGlhLnJlZ2lzdHJ5LmZvckVhY2goKHZhbHVlOiBNZWRpYVF1ZXJ5TGlzdCwga2V5OiBzdHJpbmcpID0+IHtcbiAgICAgIHRhcmdldC5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgfSk7XG4gICAgdGhpcy5oYXNDYWNoZWRSZWdpc3RyeU1hdGNoZXMgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc3RvcmUgb3JpZ2luYWwsICd0cnVlJyByZWdpc3RyeVxuICAgKi9cbiAgcHJpdmF0ZSByZXN0b3JlUmVnaXN0cnlNYXRjaGVzKCkge1xuICAgIGNvbnN0IHRhcmdldCA9IHRoaXMubWF0Y2hNZWRpYS5yZWdpc3RyeTtcblxuICAgIHRhcmdldC5jbGVhcigpO1xuICAgIHRoaXMub3JpZ2luYWxSZWdpc3RyeS5mb3JFYWNoKCh2YWx1ZTogTWVkaWFRdWVyeUxpc3QsIGtleTogc3RyaW5nKSA9PiB7XG4gICAgICB0YXJnZXQuc2V0KGtleSwgdmFsdWUpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5vcmlnaW5hbFJlZ2lzdHJ5LmNsZWFyKCk7XG4gICAgdGhpcy5oYXNDYWNoZWRSZWdpc3RyeU1hdGNoZXMgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYW51YWxseSBlbWl0IGEgTWVkaWFDaGFuZ2UgZXZlbnQgdmlhIHRoZSBNYXRjaE1lZGlhIHRvIE1lZGlhTWFyc2hhbGxlciBhbmQgTWVkaWFPYnNlcnZlclxuICAgKi9cbiAgcHJpdmF0ZSBlbWl0Q2hhbmdlRXZlbnQobWF0Y2hlczogYm9vbGVhbiwgcXVlcnk6IHN0cmluZykge1xuICAgIHRoaXMubWF0Y2hNZWRpYS5zb3VyY2UubmV4dChuZXcgTWVkaWFDaGFuZ2UobWF0Y2hlcywgcXVlcnkpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGN1cnJlbnRBY3RpdmF0aW9ucygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMubWF0Y2hNZWRpYS5hY3RpdmF0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgaGFzQ2FjaGVkUmVnaXN0cnlNYXRjaGVzID0gZmFsc2U7XG4gIHByaXZhdGUgb3JpZ2luYWxBY3RpdmF0aW9uczogTWVkaWFDaGFuZ2VbXSA9IFtdO1xuICBwcml2YXRlIG9yaWdpbmFsUmVnaXN0cnk6IE1hcDxzdHJpbmcsIE1lZGlhUXVlcnlMaXN0PiA9IG5ldyBNYXA8c3RyaW5nLCBNZWRpYVF1ZXJ5TGlzdD4oKTtcblxuICBwcml2YXRlIHJlc2l6ZVN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcbn1cblxuIl19
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @license
3
+ * Copyright Google LLC All Rights Reserved.
4
+ *
5
+ * Use of this source code is governed by an MIT-style license that can be
6
+ * found in the LICENSE file at https://angular.io/license
7
+ */
8
+ import { NgModule } from '@angular/core';
9
+ import { BROWSER_PROVIDER } from './browser-provider';
10
+ import * as i0 from "@angular/core";
11
+ /**
12
+ * *****************************************************************
13
+ * Define module for common Angular Layout utilities
14
+ * *****************************************************************
15
+ */
16
+ export class CoreModule {
17
+ }
18
+ CoreModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CoreModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
19
+ CoreModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CoreModule });
20
+ CoreModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CoreModule, providers: [BROWSER_PROVIDER] });
21
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CoreModule, decorators: [{
22
+ type: NgModule,
23
+ args: [{
24
+ providers: [BROWSER_PROVIDER]
25
+ }]
26
+ }] });
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbGlicy9mbGV4LWxheW91dC9jb3JlL21vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFDSCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXZDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLG9CQUFvQixDQUFDOztBQUdwRDs7OztHQUlHO0FBSUgsTUFBTSxPQUFPLFVBQVU7O3VHQUFWLFVBQVU7d0dBQVYsVUFBVTt3R0FBVixVQUFVLGFBRlYsQ0FBQyxnQkFBZ0IsQ0FBQzsyRkFFbEIsVUFBVTtrQkFIdEIsUUFBUTttQkFBQztvQkFDUixTQUFTLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztpQkFDOUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmltcG9ydCB7TmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge0JST1dTRVJfUFJPVklERVJ9IGZyb20gJy4vYnJvd3Nlci1wcm92aWRlcic7XG5cblxuLyoqXG4gKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogRGVmaW5lIG1vZHVsZSBmb3IgY29tbW9uIEFuZ3VsYXIgTGF5b3V0IHV0aWxpdGllc1xuICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqL1xuQE5nTW9kdWxlKHtcbiAgcHJvdmlkZXJzOiBbQlJPV1NFUl9QUk9WSURFUl1cbn0pXG5leHBvcnQgY2xhc3MgQ29yZU1vZHVsZSB7XG59XG4iXX0=
@@ -0,0 +1,16 @@
1
+ const MULTIPLIER_SUFFIX = 'x';
2
+ export function multiply(value, multiplier) {
3
+ if (multiplier === undefined) {
4
+ return value;
5
+ }
6
+ const transformValue = (possibleValue) => {
7
+ const numberValue = +(possibleValue.slice(0, -MULTIPLIER_SUFFIX.length));
8
+ if (value.endsWith(MULTIPLIER_SUFFIX) && !isNaN(numberValue)) {
9
+ return `${numberValue * multiplier.value}${multiplier.unit}`;
10
+ }
11
+ return value;
12
+ };
13
+ return value.includes(' ') ?
14
+ value.split(' ').map(transformValue).join(' ') : transformValue(value);
15
+ }
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlwbGllci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpYnMvZmxleC1sYXlvdXQvY29yZS9tdWx0aXBseS9tdWx0aXBsaWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLE1BQU0saUJBQWlCLEdBQUcsR0FBRyxDQUFDO0FBRTlCLE1BQU0sVUFBVSxRQUFRLENBQUMsS0FBYSxFQUFFLFVBQXVCO0lBQzdELElBQUksVUFBVSxLQUFLLFNBQVMsRUFBRTtRQUM1QixPQUFPLEtBQUssQ0FBQztLQUNkO0lBRUQsTUFBTSxjQUFjLEdBQUcsQ0FBQyxhQUFxQixFQUFFLEVBQUU7UUFDL0MsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUV6RSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUM1RCxPQUFPLEdBQUcsV0FBVyxHQUFHLFVBQVUsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQzlEO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDLENBQUM7SUFFRixPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMxQixLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMzRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBNdWx0aXBsaWVyIHtcbiAgcmVhZG9ubHkgdW5pdDogc3RyaW5nO1xuICByZWFkb25seSB2YWx1ZTogbnVtYmVyO1xufVxuXG5jb25zdCBNVUxUSVBMSUVSX1NVRkZJWCA9ICd4JztcblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpcGx5KHZhbHVlOiBzdHJpbmcsIG11bHRpcGxpZXI/OiBNdWx0aXBsaWVyKTogc3RyaW5nIHtcbiAgaWYgKG11bHRpcGxpZXIgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGNvbnN0IHRyYW5zZm9ybVZhbHVlID0gKHBvc3NpYmxlVmFsdWU6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IG51bWJlclZhbHVlID0gKyhwb3NzaWJsZVZhbHVlLnNsaWNlKDAsIC1NVUxUSVBMSUVSX1NVRkZJWC5sZW5ndGgpKTtcblxuICAgIGlmICh2YWx1ZS5lbmRzV2l0aChNVUxUSVBMSUVSX1NVRkZJWCkgJiYgIWlzTmFOKG51bWJlclZhbHVlKSkge1xuICAgICAgcmV0dXJuIGAke251bWJlclZhbHVlICogbXVsdGlwbGllci52YWx1ZX0ke211bHRpcGxpZXIudW5pdH1gO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcblxuICByZXR1cm4gdmFsdWUuaW5jbHVkZXMoJyAnKSA/XG4gICAgdmFsdWUuc3BsaXQoJyAnKS5tYXAodHJhbnNmb3JtVmFsdWUpLmpvaW4oJyAnKSA6IHRyYW5zZm9ybVZhbHVlKHZhbHVlKTtcbn1cbiJdfQ==
@@ -0,0 +1,26 @@
1
+ /**
2
+ * @license
3
+ * Copyright Google LLC All Rights Reserved.
4
+ *
5
+ * Use of this source code is governed by an MIT-style license that can be
6
+ * found in the LICENSE file at https://angular.io/license
7
+ */
8
+ export * from './module';
9
+ export * from './browser-provider';
10
+ export * from './media-change';
11
+ export * from './stylesheet-map/index';
12
+ export * from './tokens/index';
13
+ export * from './add-alias';
14
+ export * from './base/index';
15
+ export * from './breakpoints/index';
16
+ export { MatchMedia as ɵMatchMedia, MockMatchMedia as ɵMockMatchMedia, MockMatchMediaProvider as ɵMockMatchMediaProvider, } from './match-media/index';
17
+ export * from './media-observer/index';
18
+ export * from './media-trigger/index';
19
+ export * from './utils/index';
20
+ export * from './style-utils/style-utils';
21
+ export * from './style-builder/style-builder';
22
+ export * from './basis-validator/basis-validator';
23
+ export * from './media-marshaller/media-marshaller';
24
+ export * from './media-marshaller/print-hook';
25
+ export { multiply as ɵmultiply } from './multiply/multiplier';
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpYnMvZmxleC1sYXlvdXQvY29yZS9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxhQUFhLENBQUM7QUFFNUIsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxPQUFPLEVBQ0wsVUFBVSxJQUFJLFdBQVcsRUFDekIsY0FBYyxJQUFJLGVBQWUsRUFDakMsc0JBQXNCLElBQUksdUJBQXVCLEdBQ2xELE1BQU0scUJBQXFCLENBQUM7QUFDN0IsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsZUFBZSxDQUFDO0FBRTlCLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxPQUFPLEVBQWEsUUFBUSxJQUFJLFNBQVMsRUFBQyxNQUFNLHVCQUF1QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vbW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vYnJvd3Nlci1wcm92aWRlcic7XG5leHBvcnQgKiBmcm9tICcuL21lZGlhLWNoYW5nZSc7XG5leHBvcnQgKiBmcm9tICcuL3N0eWxlc2hlZXQtbWFwL2luZGV4JztcbmV4cG9ydCAqIGZyb20gJy4vdG9rZW5zL2luZGV4JztcbmV4cG9ydCAqIGZyb20gJy4vYWRkLWFsaWFzJztcblxuZXhwb3J0ICogZnJvbSAnLi9iYXNlL2luZGV4JztcbmV4cG9ydCAqIGZyb20gJy4vYnJlYWtwb2ludHMvaW5kZXgnO1xuZXhwb3J0IHtcbiAgTWF0Y2hNZWRpYSBhcyDJtU1hdGNoTWVkaWEsXG4gIE1vY2tNYXRjaE1lZGlhIGFzIMm1TW9ja01hdGNoTWVkaWEsXG4gIE1vY2tNYXRjaE1lZGlhUHJvdmlkZXIgYXMgybVNb2NrTWF0Y2hNZWRpYVByb3ZpZGVyLFxufSBmcm9tICcuL21hdGNoLW1lZGlhL2luZGV4JztcbmV4cG9ydCAqIGZyb20gJy4vbWVkaWEtb2JzZXJ2ZXIvaW5kZXgnO1xuZXhwb3J0ICogZnJvbSAnLi9tZWRpYS10cmlnZ2VyL2luZGV4JztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMvaW5kZXgnO1xuXG5leHBvcnQgKiBmcm9tICcuL3N0eWxlLXV0aWxzL3N0eWxlLXV0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vc3R5bGUtYnVpbGRlci9zdHlsZS1idWlsZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vYmFzaXMtdmFsaWRhdG9yL2Jhc2lzLXZhbGlkYXRvcic7XG5leHBvcnQgKiBmcm9tICcuL21lZGlhLW1hcnNoYWxsZXIvbWVkaWEtbWFyc2hhbGxlcic7XG5leHBvcnQgKiBmcm9tICcuL21lZGlhLW1hcnNoYWxsZXIvcHJpbnQtaG9vayc7XG5leHBvcnQge011bHRpcGxpZXIsIG11bHRpcGx5IGFzIMm1bXVsdGlwbHl9IGZyb20gJy4vbXVsdGlwbHkvbXVsdGlwbGllcic7XG4iXX0=
@@ -0,0 +1,15 @@
1
+ /** A class that encapsulates CSS style generation for common directives */
2
+ export class StyleBuilder {
3
+ constructor() {
4
+ /** Whether to cache the generated output styles */
5
+ this.shouldCache = true;
6
+ }
7
+ /**
8
+ * Run a side effect computation given the input string and the computed styles
9
+ * from the build task and the host configuration object
10
+ * NOTE: This should be a no-op unless an algorithm is provided in a subclass
11
+ */
12
+ sideEffect(_input, _styles, _parent) {
13
+ }
14
+ }
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R5bGUtYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpYnMvZmxleC1sYXlvdXQvY29yZS9zdHlsZS1idWlsZGVyL3N0eWxlLWJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBU0EsMkVBQTJFO0FBQzNFLE1BQU0sT0FBZ0IsWUFBWTtJQUFsQztRQUVFLG1EQUFtRDtRQUNuRCxnQkFBVyxHQUFHLElBQUksQ0FBQztJQVlyQixDQUFDO0lBUEM7Ozs7T0FJRztJQUNILFVBQVUsQ0FBQyxNQUFjLEVBQUUsT0FBd0IsRUFBRSxPQUFnQjtJQUNyRSxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmltcG9ydCB7U3R5bGVEZWZpbml0aW9ufSBmcm9tICcuLi9zdHlsZS11dGlscy9zdHlsZS11dGlscyc7XG5cbi8qKiBBIGNsYXNzIHRoYXQgZW5jYXBzdWxhdGVzIENTUyBzdHlsZSBnZW5lcmF0aW9uIGZvciBjb21tb24gZGlyZWN0aXZlcyAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFN0eWxlQnVpbGRlciB7XG5cbiAgLyoqIFdoZXRoZXIgdG8gY2FjaGUgdGhlIGdlbmVyYXRlZCBvdXRwdXQgc3R5bGVzICovXG4gIHNob3VsZENhY2hlID0gdHJ1ZTtcblxuICAvKiogQnVpbGQgdGhlIHN0eWxlcyBnaXZlbiBhbiBpbnB1dCBzdHJpbmcgYW5kIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZyb20gYSBob3N0ICovXG4gIGFic3RyYWN0IGJ1aWxkU3R5bGVzKGlucHV0OiBzdHJpbmcsIHBhcmVudD86IE9iamVjdCk6IFN0eWxlRGVmaW5pdGlvbjtcblxuICAvKipcbiAgICogUnVuIGEgc2lkZSBlZmZlY3QgY29tcHV0YXRpb24gZ2l2ZW4gdGhlIGlucHV0IHN0cmluZyBhbmQgdGhlIGNvbXB1dGVkIHN0eWxlc1xuICAgKiBmcm9tIHRoZSBidWlsZCB0YXNrIGFuZCB0aGUgaG9zdCBjb25maWd1cmF0aW9uIG9iamVjdFxuICAgKiBOT1RFOiBUaGlzIHNob3VsZCBiZSBhIG5vLW9wIHVubGVzcyBhbiBhbGdvcml0aG0gaXMgcHJvdmlkZWQgaW4gYSBzdWJjbGFzc1xuICAgKi9cbiAgc2lkZUVmZmVjdChfaW5wdXQ6IHN0cmluZywgX3N0eWxlczogU3R5bGVEZWZpbml0aW9uLCBfcGFyZW50PzogT2JqZWN0KSB7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,174 @@
1
+ /**
2
+ * @license
3
+ * Copyright Google LLC All Rights Reserved.
4
+ *
5
+ * Use of this source code is governed by an MIT-style license that can be
6
+ * found in the LICENSE file at https://angular.io/license
7
+ */
8
+ import { Inject, Injectable, PLATFORM_ID } from '@angular/core';
9
+ import { isPlatformBrowser, isPlatformServer } from '@angular/common';
10
+ import { applyCssPrefixes } from '@angular/flex-layout/_private-utils';
11
+ import { SERVER_TOKEN } from '../tokens/server-token';
12
+ import { LAYOUT_CONFIG } from '../tokens/library-config';
13
+ import * as i0 from "@angular/core";
14
+ import * as i1 from "../stylesheet-map/stylesheet-map";
15
+ export class StyleUtils {
16
+ constructor(_serverStylesheet, _serverModuleLoaded, _platformId, layoutConfig) {
17
+ this._serverStylesheet = _serverStylesheet;
18
+ this._serverModuleLoaded = _serverModuleLoaded;
19
+ this._platformId = _platformId;
20
+ this.layoutConfig = layoutConfig;
21
+ }
22
+ /**
23
+ * Applies styles given via string pair or object map to the directive element
24
+ */
25
+ applyStyleToElement(element, style, value = null) {
26
+ let styles = {};
27
+ if (typeof style === 'string') {
28
+ styles[style] = value;
29
+ style = styles;
30
+ }
31
+ styles = this.layoutConfig.disableVendorPrefixes ? style : applyCssPrefixes(style);
32
+ this._applyMultiValueStyleToElement(styles, element);
33
+ }
34
+ /**
35
+ * Applies styles given via string pair or object map to the directive's element
36
+ */
37
+ applyStyleToElements(style, elements = []) {
38
+ const styles = this.layoutConfig.disableVendorPrefixes ? style : applyCssPrefixes(style);
39
+ elements.forEach(el => {
40
+ this._applyMultiValueStyleToElement(styles, el);
41
+ });
42
+ }
43
+ /**
44
+ * Determine the DOM element's Flexbox flow (flex-direction)
45
+ *
46
+ * Check inline style first then check computed (stylesheet) style
47
+ */
48
+ getFlowDirection(target) {
49
+ const query = 'flex-direction';
50
+ let value = this.lookupStyle(target, query);
51
+ const hasInlineValue = this.lookupInlineStyle(target, query) ||
52
+ (isPlatformServer(this._platformId) && this._serverModuleLoaded) ? value : '';
53
+ return [value || 'row', hasInlineValue];
54
+ }
55
+ hasWrap(target) {
56
+ const query = 'flex-wrap';
57
+ return this.lookupStyle(target, query) === 'wrap';
58
+ }
59
+ /**
60
+ * Find the DOM element's raw attribute value (if any)
61
+ */
62
+ lookupAttributeValue(element, attribute) {
63
+ return element.getAttribute(attribute) ?? '';
64
+ }
65
+ /**
66
+ * Find the DOM element's inline style value (if any)
67
+ */
68
+ lookupInlineStyle(element, styleName) {
69
+ return isPlatformBrowser(this._platformId) ?
70
+ element.style.getPropertyValue(styleName) : getServerStyle(element, styleName);
71
+ }
72
+ /**
73
+ * Determine the inline or inherited CSS style
74
+ * NOTE: platform-server has no implementation for getComputedStyle
75
+ */
76
+ lookupStyle(element, styleName, inlineOnly = false) {
77
+ let value = '';
78
+ if (element) {
79
+ let immediateValue = value = this.lookupInlineStyle(element, styleName);
80
+ if (!immediateValue) {
81
+ if (isPlatformBrowser(this._platformId)) {
82
+ if (!inlineOnly) {
83
+ value = getComputedStyle(element).getPropertyValue(styleName);
84
+ }
85
+ }
86
+ else {
87
+ if (this._serverModuleLoaded) {
88
+ value = this._serverStylesheet.getStyleForElement(element, styleName);
89
+ }
90
+ }
91
+ }
92
+ }
93
+ // Note: 'inline' is the default of all elements, unless UA stylesheet overrides;
94
+ // in which case getComputedStyle() should determine a valid value.
95
+ return value ? value.trim() : '';
96
+ }
97
+ /**
98
+ * Applies the styles to the element. The styles object map may contain an array of values
99
+ * Each value will be added as element style
100
+ * Keys are sorted to add prefixed styles (like -webkit-x) first, before the standard ones
101
+ */
102
+ _applyMultiValueStyleToElement(styles, element) {
103
+ Object.keys(styles).sort().forEach(key => {
104
+ const el = styles[key];
105
+ const values = Array.isArray(el) ? el : [el];
106
+ values.sort();
107
+ for (let value of values) {
108
+ value = value ? value + '' : '';
109
+ if (isPlatformBrowser(this._platformId) || !this._serverModuleLoaded) {
110
+ isPlatformBrowser(this._platformId) ?
111
+ element.style.setProperty(key, value) : setServerStyle(element, key, value);
112
+ }
113
+ else {
114
+ this._serverStylesheet.addStyleToElement(element, key, value);
115
+ }
116
+ }
117
+ });
118
+ }
119
+ }
120
+ StyleUtils.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: StyleUtils, deps: [{ token: i1.StylesheetMap }, { token: SERVER_TOKEN }, { token: PLATFORM_ID }, { token: LAYOUT_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
121
+ StyleUtils.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: StyleUtils, providedIn: 'root' });
122
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: StyleUtils, decorators: [{
123
+ type: Injectable,
124
+ args: [{ providedIn: 'root' }]
125
+ }], ctorParameters: function () { return [{ type: i1.StylesheetMap }, { type: undefined, decorators: [{
126
+ type: Inject,
127
+ args: [SERVER_TOKEN]
128
+ }] }, { type: Object, decorators: [{
129
+ type: Inject,
130
+ args: [PLATFORM_ID]
131
+ }] }, { type: undefined, decorators: [{
132
+ type: Inject,
133
+ args: [LAYOUT_CONFIG]
134
+ }] }]; } });
135
+ function getServerStyle(element, styleName) {
136
+ const styleMap = readStyleAttribute(element);
137
+ return styleMap[styleName] ?? '';
138
+ }
139
+ function setServerStyle(element, styleName, styleValue) {
140
+ styleName = styleName.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
141
+ const styleMap = readStyleAttribute(element);
142
+ styleMap[styleName] = styleValue ?? '';
143
+ writeStyleAttribute(element, styleMap);
144
+ }
145
+ function writeStyleAttribute(element, styleMap) {
146
+ let styleAttrValue = '';
147
+ for (const key in styleMap) {
148
+ const newValue = styleMap[key];
149
+ if (newValue) {
150
+ styleAttrValue += `${key}:${styleMap[key]};`;
151
+ }
152
+ }
153
+ element.setAttribute('style', styleAttrValue);
154
+ }
155
+ function readStyleAttribute(element) {
156
+ const styleMap = {};
157
+ const styleAttribute = element.getAttribute('style');
158
+ if (styleAttribute) {
159
+ const styleList = styleAttribute.split(/;+/g);
160
+ for (let i = 0; i < styleList.length; i++) {
161
+ const style = styleList[i].trim();
162
+ if (style.length > 0) {
163
+ const colonIndex = style.indexOf(':');
164
+ if (colonIndex === -1) {
165
+ throw new Error(`Invalid CSS style: ${style}`);
166
+ }
167
+ const name = style.substr(0, colonIndex).trim();
168
+ styleMap[name] = style.substr(colonIndex + 1).trim();
169
+ }
170
+ }
171
+ }
172
+ return styleMap;
173
+ }
174
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R5bGUtdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saWJzL2ZsZXgtbGF5b3V0L2NvcmUvc3R5bGUtdXRpbHMvc3R5bGUtdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBQ0gsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRXBFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBRXJFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRCxPQUFPLEVBQUMsYUFBYSxFQUFzQixNQUFNLDBCQUEwQixDQUFDOzs7QUFHNUUsTUFBTSxPQUFPLFVBQVU7SUFFckIsWUFBb0IsaUJBQWdDLEVBQ1YsbUJBQTRCLEVBQzdCLFdBQW1CLEVBQ2pCLFlBQWlDO1FBSHhELHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBZTtRQUNWLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBUztRQUM3QixnQkFBVyxHQUFYLFdBQVcsQ0FBUTtRQUNqQixpQkFBWSxHQUFaLFlBQVksQ0FBcUI7SUFBRyxDQUFDO0lBRWhGOztPQUVHO0lBQ0gsbUJBQW1CLENBQUMsT0FBb0IsRUFDcEIsS0FBK0IsRUFDL0IsUUFBZ0MsSUFBSTtRQUN0RCxJQUFJLE1BQU0sR0FBb0IsRUFBRSxDQUFDO1FBQ2pDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1lBQzdCLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDdEIsS0FBSyxHQUFHLE1BQU0sQ0FBQztTQUNoQjtRQUNELE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxLQUFL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QyxNQUFNLFFBQVEsR0FBNkIsRUFBRSxDQUFDO0lBQzlDLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckQsSUFBSSxjQUFjLEVBQUU7UUFDbEIsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN6QyxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbEMsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDcEIsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdEMsSUFBSSxVQUFVLEtBQUssQ0FBQyxDQUFDLEVBQUU7b0JBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLEtBQUssRUFBRSxDQUFDLENBQUM7aUJBQ2hEO2dCQUNELE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNoRCxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDdEQ7U0FDRjtLQUNGO0lBQ0QsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGUsIFBMQVRGT1JNX0lEfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7aXNQbGF0Zm9ybUJyb3dzZXIsIGlzUGxhdGZvcm1TZXJ2ZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmltcG9ydCB7YXBwbHlDc3NQcmVmaXhlc30gZnJvbSAnQGFuZ3VsYXIvZmxleC1sYXlvdXQvX3ByaXZhdGUtdXRpbHMnO1xuaW1wb3J0IHtTdHlsZXNoZWV0TWFwfSBmcm9tICcuLi9zdHlsZXNoZWV0LW1hcC9zdHlsZXNoZWV0LW1hcCc7XG5pbXBvcnQge1NFUlZFUl9UT0tFTn0gZnJvbSAnLi4vdG9rZW5zL3NlcnZlci10b2tlbic7XG5pbXBvcnQge0xBWU9VVF9DT05GSUcsIExheW91dENvbmZpZ09wdGlvbnN9IGZyb20gJy4uL3Rva2Vucy9saWJyYXJ5LWNvbmZpZyc7XG5cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIFN0eWxlVXRpbHMge1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX3NlcnZlclN0eWxlc2hlZXQ6IFN0eWxlc2hlZXRNYXAsXG4gICAgICAgICAgICAgIEBJbmplY3QoU0VSVkVSX1RPS0VOKSBwcml2YXRlIF9zZXJ2ZXJNb2R1bGVMb2FkZWQ6IGJvb2xlYW4sXG4gICAgICAgICAgICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgX3BsYXRmb3JtSWQ6IE9iamVjdCxcbiAgICAgICAgICAgICAgQEluamVjdChMQVlPVVRfQ09ORklHKSBwcml2YXRlIGxheW91dENvbmZpZzogTGF5b3V0Q29uZmlnT3B0aW9ucykge31cblxuICAvKipcbiAgICogQXBwbGllcyBzdHlsZXMgZ2l2ZW4gdmlhIHN0cmluZyBwYWlyIG9yIG9iamVjdCBtYXAgdG8gdGhlIGRpcmVjdGl2ZSBlbGVtZW50XG4gICAqL1xuICBhcHBseVN0eWxlVG9FbGVtZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiBTdHlsZURlZmluaXRpb24gfCBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHN0cmluZyB8IG51bWJlciB8IG51bGwgPSBudWxsKSB7XG4gICAgbGV0IHN0eWxlczogU3R5bGVEZWZpbml0aW9uID0ge307XG4gICAgaWYgKHR5cGVvZiBzdHlsZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHN0eWxlc1tzdHlsZV0gPSB2YWx1ZTtcbiAgICAgIHN0eWxlID0gc3R5bGVzO1xuICAgIH1cbiAgICBzdHlsZXMgPSB0aGlzLmxheW91dENvbmZpZy5kaXNhYmxlVmVuZG9yUHJlZml4ZXMgPyBzdHlsZSA6IGFwcGx5Q3NzUHJlZml4ZXMoc3R5bGUpO1xuICAgIHRoaXMuX2FwcGx5TXVsdGlWYWx1ZVN0eWxlVG9FbGVtZW50KHN0eWxlcywgZWxlbWVudCk7XG4gIH1cblxuICAvKipcbiAgICogQXBwbGllcyBzdHlsZXMgZ2l2ZW4gdmlhIHN0cmluZyBwYWlyIG9yIG9iamVjdCBtYXAgdG8gdGhlIGRpcmVjdGl2ZSdzIGVsZW1lbnRcbiAgICovXG4gIGFwcGx5U3R5bGVUb0VsZW1lbnRzKHN0eWxlOiBTdHlsZURlZmluaXRpb24sIGVsZW1lbnRzOiBIVE1MRWxlbWVudFtdID0gW10pIHtcbiAgICBjb25zdCBzdHlsZXMgPSB0aGlzLmxheW91dENvbmZpZy5kaXNhYmxlVmVuZG9yUHJlZml4ZXMgPyBzdHlsZSA6IGFwcGx5Q3NzUHJlZml4ZXMoc3R5bGUpO1xuICAgIGVsZW1lbnRzLmZvckVhY2goZWwgPT4ge1xuICAgICAgdGhpcy5fYXBwbHlNdWx0aVZhbHVlU3R5bGVUb0VsZW1lbnQoc3R5bGVzLCBlbCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIHRoZSBET00gZWxlbWVudCdzIEZsZXhib3ggZmxvdyAoZmxleC1kaXJlY3Rpb24pXG4gICAqXG4gICAqIENoZWNrIGlubGluZSBzdHlsZSBmaXJzdCB0aGVuIGNoZWNrIGNvbXB1dGVkIChzdHlsZXNoZWV0KSBzdHlsZVxuICAgKi9cbiAgZ2V0Rmxvd0RpcmVjdGlvbih0YXJnZXQ6IEhUTUxFbGVtZW50KTogW3N0cmluZywgc3RyaW5nXSB7XG4gICAgY29uc3QgcXVlcnkgPSAnZmxleC1kaXJlY3Rpb24nO1xuICAgIGxldCB2YWx1ZSA9IHRoaXMubG9va3VwU3R5bGUodGFyZ2V0LCBxdWVyeSk7XG4gICAgY29uc3QgaGFzSW5saW5lVmFsdWUgPSB0aGlzLmxvb2t1cElubGluZVN0eWxlKHRhcmdldCwgcXVlcnkpIHx8XG4gICAgKGlzUGxhdGZvcm1TZXJ2ZXIodGhpcy5fcGxhdGZvcm1JZCkgJiYgdGhpcy5fc2VydmVyTW9kdWxlTG9hZGVkKSA/IHZhbHVlIDogJyc7XG5cbiAgICByZXR1cm4gW3ZhbHVlIHx8ICdyb3cnLCBoYXNJbmxpbmVWYWx1ZV07XG4gIH1cblxuICBoYXNXcmFwKHRhcmdldDogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICBjb25zdCBxdWVyeSA9ICdmbGV4LXdyYXAnO1xuICAgIHJldHVybiB0aGlzLmxvb2t1cFN0eWxlKHRhcmdldCwgcXVlcnkpID09PSAnd3JhcCc7XG4gIH1cblxuICAvKipcbiAgICogRmluZCB0aGUgRE9NIGVsZW1lbnQncyByYXcgYXR0cmlidXRlIHZhbHVlIChpZiBhbnkpXG4gICAqL1xuICBsb29rdXBBdHRyaWJ1dGVWYWx1ZShlbGVtZW50OiBIVE1MRWxlbWVudCwgYXR0cmlidXRlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBlbGVtZW50LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGUpID8/ICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgdGhlIERPTSBlbGVtZW50J3MgaW5saW5lIHN0eWxlIHZhbHVlIChpZiBhbnkpXG4gICAqL1xuICBsb29rdXBJbmxpbmVTdHlsZShlbGVtZW50OiBIVE1MRWxlbWVudCwgc3R5bGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLl9wbGF0Zm9ybUlkKSA/XG4gICAgICBlbGVtZW50LnN0eWxlLmdldFByb3BlcnR5VmFsdWUoc3R5bGVOYW1lKSA6IGdldFNlcnZlclN0eWxlKGVsZW1lbnQsIHN0eWxlTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIHRoZSBpbmxpbmUgb3IgaW5oZXJpdGVkIENTUyBzdHlsZVxuICAgKiBOT1RFOiBwbGF0Zm9ybS1zZXJ2ZXIgaGFzIG5vIGltcGxlbWVudGF0aW9uIGZvciBnZXRDb21wdXRlZFN0eWxlXG4gICAqL1xuICBsb29rdXBTdHlsZShlbGVtZW50OiBIVE1MRWxlbWVudCwgc3R5bGVOYW1lOiBzdHJpbmcsIGlubGluZU9ubHkgPSBmYWxzZSk6IHN0cmluZyB7XG4gICAgbGV0IHZhbHVlID0gJyc7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIGxldCBpbW1lZGlhdGVWYWx1ZSA9IHZhbHVlID0gdGhpcy5sb29rdXBJbmxpbmVTdHlsZShlbGVtZW50LCBzdHlsZU5hbWUpO1xuICAgICAgaWYgKCFpbW1lZGlhdGVWYWx1ZSkge1xuICAgICAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5fcGxhdGZvcm1JZCkpIHtcbiAgICAgICAgICBpZiAoIWlubGluZU9ubHkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKHN0eWxlTmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLl9zZXJ2ZXJNb2R1bGVMb2FkZWQpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5fc2VydmVyU3R5bGVzaGVldC5nZXRTdHlsZUZvckVsZW1lbnQoZWxlbWVudCwgc3R5bGVOYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBOb3RlOiAnaW5saW5lJyBpcyB0aGUgZGVmYXVsdCBvZiBhbGwgZWxlbWVudHMsIHVubGVzcyBVQSBzdHlsZXNoZWV0IG92ZXJyaWRlcztcbiAgICAvLyAgICAgICBpbiB3aGljaCBjYXNlIGdldENvbXB1dGVkU3R5bGUoKSBzaG91bGQgZGV0ZXJtaW5lIGEgdmFsaWQgdmFsdWUuXG4gICAgcmV0dXJuIHZhbHVlID8gdmFsdWUudHJpbSgpIDogJyc7XG4gIH1cblxuICAvKipcbiAgICogQXBwbGllcyB0aGUgc3R5bGVzIHRvIHRoZSBlbGVtZW50LiBUaGUgc3R5bGVzIG9iamVjdCBtYXAgbWF5IGNvbnRhaW4gYW4gYXJyYXkgb2YgdmFsdWVzXG4gICAqIEVhY2ggdmFsdWUgd2lsbCBiZSBhZGRlZCBhcyBlbGVtZW50IHN0eWxlXG4gICAqIEtleXMgYXJlIHNvcnRlZCB0byBhZGQgcHJlZml4ZWQgc3R5bGVzIChsaWtlIC13ZWJraXQteCkgZmlyc3QsIGJlZm9yZSB0aGUgc3RhbmRhcmQgb25lc1xuICAgKi9cbiAgcHJpdmF0ZSBfYXBwbHlNdWx0aVZhbHVlU3R5bGVUb0VsZW1lbnQoc3R5bGVzOiBTdHlsZURlZmluaXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgT2JqZWN0LmtleXMoc3R5bGVzKS5zb3J0KCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgY29uc3QgZWwgPSBzdHlsZXNba2V5XTtcbiAgICAgIGNvbnN0IHZhbHVlczogKHN0cmluZyB8IG51bWJlciB8IG51bGwpW10gPSBBcnJheS5pc0FycmF5KGVsKSA/IGVsIDogW2VsXTtcbiAgICAgIHZhbHVlcy5zb3J0KCk7XG4gICAgICBmb3IgKGxldCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZSA/IHZhbHVlICsgJycgOiAnJztcbiAgICAgICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMuX3BsYXRmb3JtSWQpIHx8ICF0aGlzLl9zZXJ2ZXJNb2R1bGVMb2FkZWQpIHtcbiAgICAgICAgICBpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLl9wbGF0Zm9ybUlkKSA/XG4gICAgICAgICAgICBlbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KGtleSwgdmFsdWUpIDogc2V0U2VydmVyU3R5bGUoZWxlbWVudCwga2V5LCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fc2VydmVyU3R5bGVzaGVldC5hZGRTdHlsZVRvRWxlbWVudChlbGVtZW50LCBrZXksIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFNlcnZlclN0eWxlKGVsZW1lbnQ6IGFueSwgc3R5bGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzdHlsZU1hcCA9IHJlYWRTdHlsZUF0dHJpYnV0ZShlbGVtZW50KTtcbiAgcmV0dXJuIHN0eWxlTWFwW3N0eWxlTmFtZV0gPz8gJyc7XG59XG5cbmZ1bmN0aW9uIHNldFNlcnZlclN0eWxlKGVsZW1lbnQ6IGFueSwgc3R5bGVOYW1lOiBzdHJpbmcsIHN0eWxlVmFsdWU/OiBzdHJpbmd8bnVsbCkge1xuICBzdHlsZU5hbWUgPSBzdHlsZU5hbWUucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywgJyQxLSQyJykudG9Mb3dlckNhc2UoKTtcbiAgY29uc3Qgc3R5bGVNYXAgPSByZWFkU3R5bGVBdHRyaWJ1dGUoZWxlbWVudCk7XG4gIHN0eWxlTWFwW3N0eWxlTmFtZV0gPSBzdHlsZVZhbHVlID8/ICcnO1xuICB3cml0ZVN0eWxlQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlTWFwKTtcbn1cblxuZnVuY3Rpb24gd3JpdGVTdHlsZUF0dHJpYnV0ZShlbGVtZW50OiBhbnksIHN0eWxlTWFwOiB7W25hbWU6IHN0cmluZ106IHN0cmluZ30pIHtcbiAgbGV0IHN0eWxlQXR0clZhbHVlID0gJyc7XG4gIGZvciAoY29uc3Qga2V5IGluIHN0eWxlTWFwKSB7XG4gICAgY29uc3QgbmV3VmFsdWUgPSBzdHlsZU1hcFtrZXldO1xuICAgIGlmIChuZXdWYWx1ZSkge1xuICAgICAgc3R5bGVBdHRyVmFsdWUgKz0gYCR7a2V5fToke3N0eWxlTWFwW2tleV19O2A7XG4gICAgfVxuICB9XG4gIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdzdHlsZScsIHN0eWxlQXR0clZhbHVlKTtcbn1cblxuZnVuY3Rpb24gcmVhZFN0eWxlQXR0cmlidXRlKGVsZW1lbnQ6IGFueSk6IHtbbmFtZTogc3RyaW5nXTogc3RyaW5nfSB7XG4gIGNvbnN0IHN0eWxlTWFwOiB7W25hbWU6IHN0cmluZ106IHN0cmluZ30gPSB7fTtcbiAgY29uc3Qgc3R5bGVBdHRyaWJ1dGUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnc3R5bGUnKTtcbiAgaWYgKHN0eWxlQXR0cmlidXRlKSB7XG4gICAgY29uc3Qgc3R5bGVMaXN0ID0gc3R5bGVBdHRyaWJ1dGUuc3BsaXQoLzsrL2cpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3R5bGVMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBzdHlsZSA9IHN0eWxlTGlzdFtpXS50cmltKCk7XG4gICAgICBpZiAoc3R5bGUubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBjb2xvbkluZGV4ID0gc3R5bGUuaW5kZXhPZignOicpO1xuICAgICAgICBpZiAoY29sb25JbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgQ1NTIHN0eWxlOiAke3N0eWxlfWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5hbWUgPSBzdHlsZS5zdWJzdHIoMCwgY29sb25JbmRleCkudHJpbSgpO1xuICAgICAgICBzdHlsZU1hcFtuYW1lXSA9IHN0eWxlLnN1YnN0cihjb2xvbkluZGV4ICsgMSkudHJpbSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gc3R5bGVNYXA7XG59XG5cbi8qKlxuICogRGVmaW5pdGlvbiBvZiBhIGNzcyBzdHlsZS4gRWl0aGVyIGEgcHJvcGVydHkgbmFtZSAoZS5nLiBcImZsZXgtYmFzaXNcIikgb3IgYW4gb2JqZWN0XG4gKiBtYXAgb2YgcHJvcGVydHkgbmFtZSBhbmQgdmFsdWUgKGUuZy4ge2Rpc3BsYXk6ICdub25lJywgZmxleC1vcmRlcjogNX0pXG4gKi9cbmV4cG9ydCB0eXBlIFN0eWxlRGVmaW5pdGlvbiA9IHsgW3Byb3BlcnR5OiBzdHJpbmddOiBzdHJpbmcgfCBudW1iZXIgfCBudWxsIH07XG4iXX0=
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @license
3
+ * Copyright Google LLC All Rights Reserved.
4
+ *
5
+ * Use of this source code is governed by an MIT-style license that can be
6
+ * found in the LICENSE file at https://angular.io/license
7
+ */
8
+ export * from './stylesheet-map';
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saWJzL2ZsZXgtbGF5b3V0L2NvcmUvc3R5bGVzaGVldC1tYXAvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsY0FBYyxrQkFBa0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3N0eWxlc2hlZXQtbWFwJztcbiJdfQ==
@@ -0,0 +1,59 @@
1
+ /**
2
+ * @license
3
+ * Copyright Google LLC All Rights Reserved.
4
+ *
5
+ * Use of this source code is governed by an MIT-style license that can be
6
+ * found in the LICENSE file at https://angular.io/license
7
+ */
8
+ import { Injectable } from '@angular/core';
9
+ import * as i0 from "@angular/core";
10
+ /**
11
+ * Utility to emulate a CSS stylesheet
12
+ *
13
+ * This utility class stores all of the styles for a given HTML element
14
+ * as a readonly `stylesheet` map.
15
+ */
16
+ export class StylesheetMap {
17
+ constructor() {
18
+ this.stylesheet = new Map();
19
+ }
20
+ /**
21
+ * Add an individual style to an HTML element
22
+ */
23
+ addStyleToElement(element, style, value) {
24
+ const stylesheet = this.stylesheet.get(element);
25
+ if (stylesheet) {
26
+ stylesheet.set(style, value);
27
+ }
28
+ else {
29
+ this.stylesheet.set(element, new Map([[style, value]]));
30
+ }
31
+ }
32
+ /**
33
+ * Clear the virtual stylesheet
34
+ */
35
+ clearStyles() {
36
+ this.stylesheet.clear();
37
+ }
38
+ /**
39
+ * Retrieve a given style for an HTML element
40
+ */
41
+ getStyleForElement(el, styleName) {
42
+ const styles = this.stylesheet.get(el);
43
+ let value = '';
44
+ if (styles) {
45
+ const style = styles.get(styleName);
46
+ if (typeof style === 'number' || typeof style === 'string') {
47
+ value = style + '';
48
+ }
49
+ }
50
+ return value;
51
+ }
52
+ }
53
+ StylesheetMap.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: StylesheetMap, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
54
+ StylesheetMap.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: StylesheetMap, providedIn: 'root' });
55
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: StylesheetMap, decorators: [{
56
+ type: Injectable,
57
+ args: [{ providedIn: 'root' }]
58
+ }] });
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R5bGVzaGVldC1tYXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saWJzL2ZsZXgtbGF5b3V0L2NvcmUvc3R5bGVzaGVldC1tYXAvc3R5bGVzaGVldC1tYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBQ0gsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQzs7QUFFekM7Ozs7O0dBS0c7QUFFSCxNQUFNLE9BQU8sYUFBYTtJQUQxQjtRQUdXLGVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBMkMsQ0FBQztLQW1DMUU7SUFqQ0M7O09BRUc7SUFDSCxpQkFBaUIsQ0FBQyxPQUFvQixFQUFFLEtBQWEsRUFBRSxLQUFvQjtRQUN6RSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoRCxJQUFJLFVBQVUsRUFBRTtZQUNkLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQzlCO2FBQU07WUFDTCxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN6RDtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVc7UUFDVCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRDs7T0FFRztJQUNILGtCQUFrQixDQUFDLEVBQWUsRUFBRSxTQUFpQjtRQUNuRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2QyxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDZixJQUFJLE1BQU0sRUFBRTtZQUNWLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDcEMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO2dCQUMxRCxLQUFLLEdBQUcsS0FBSyxHQUFHLEVBQUUsQ0FBQzthQUNwQjtTQUNGO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOzswR0FwQ1UsYUFBYTs4R0FBYixhQUFhLGNBREQsTUFBTTsyRkFDbEIsYUFBYTtrQkFEekIsVUFBVTttQkFBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogVXRpbGl0eSB0byBlbXVsYXRlIGEgQ1NTIHN0eWxlc2hlZXRcbiAqXG4gKiBUaGlzIHV0aWxpdHkgY2xhc3Mgc3RvcmVzIGFsbCBvZiB0aGUgc3R5bGVzIGZvciBhIGdpdmVuIEhUTUwgZWxlbWVudFxuICogYXMgYSByZWFkb25seSBgc3R5bGVzaGVldGAgbWFwLlxuICovXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBTdHlsZXNoZWV0TWFwIHtcblxuICByZWFkb25seSBzdHlsZXNoZWV0ID0gbmV3IE1hcDxIVE1MRWxlbWVudCwgTWFwPHN0cmluZywgc3RyaW5nfG51bWJlcj4+KCk7XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBpbmRpdmlkdWFsIHN0eWxlIHRvIGFuIEhUTUwgZWxlbWVudFxuICAgKi9cbiAgYWRkU3R5bGVUb0VsZW1lbnQoZWxlbWVudDogSFRNTEVsZW1lbnQsIHN0eWxlOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmd8bnVtYmVyKSB7XG4gICAgY29uc3Qgc3R5bGVzaGVldCA9IHRoaXMuc3R5bGVzaGVldC5nZXQoZWxlbWVudCk7XG4gICAgaWYgKHN0eWxlc2hlZXQpIHtcbiAgICAgIHN0eWxlc2hlZXQuc2V0KHN0eWxlLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3R5bGVzaGVldC5zZXQoZWxlbWVudCwgbmV3IE1hcChbW3N0eWxlLCB2YWx1ZV1dKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIHRoZSB2aXJ0dWFsIHN0eWxlc2hlZXRcbiAgICovXG4gIGNsZWFyU3R5bGVzKCkge1xuICAgIHRoaXMuc3R5bGVzaGVldC5jbGVhcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGEgZ2l2ZW4gc3R5bGUgZm9yIGFuIEhUTUwgZWxlbWVudFxuICAgKi9cbiAgZ2V0U3R5bGVGb3JFbGVtZW50KGVsOiBIVE1MRWxlbWVudCwgc3R5bGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHN0eWxlcyA9IHRoaXMuc3R5bGVzaGVldC5nZXQoZWwpO1xuICAgIGxldCB2YWx1ZSA9ICcnO1xuICAgIGlmIChzdHlsZXMpIHtcbiAgICAgIGNvbnN0IHN0eWxlID0gc3R5bGVzLmdldChzdHlsZU5hbWUpO1xuICAgICAgaWYgKHR5cGVvZiBzdHlsZSA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHN0eWxlID09PSAnc3RyaW5nJykge1xuICAgICAgICB2YWx1ZSA9IHN0eWxlICsgJyc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuIl19
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @license
3
+ * Copyright Google LLC All Rights Reserved.
4
+ *
5
+ * Use of this source code is governed by an MIT-style license that can be
6
+ * found in the LICENSE file at https://angular.io/license
7
+ */
8
+ import { InjectionToken } from '@angular/core';
9
+ export const BREAKPOINT = new InjectionToken('Flex Layout token, collect all breakpoints into one provider', {
10
+ providedIn: 'root',
11
+ factory: () => null
12
+ });
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWtwb2ludC10b2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpYnMvZmxleC1sYXlvdXQvY29yZS90b2tlbnMvYnJlYWtwb2ludC10b2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFDSCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRzdDLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxJQUFJLGNBQWMsQ0FDMUMsOERBQThELEVBQUU7SUFDOUQsVUFBVSxFQUFFLE1BQU07SUFDbEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUk7Q0FDcEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5pbXBvcnQge0luamVjdGlvblRva2VufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QnJlYWtQb2ludH0gZnJvbSAnLi4vYnJlYWtwb2ludHMvYnJlYWstcG9pbnQnO1xuXG5leHBvcnQgY29uc3QgQlJFQUtQT0lOVCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxCcmVha1BvaW50fEJyZWFrUG9pbnRbXXxudWxsPihcbiAgJ0ZsZXggTGF5b3V0IHRva2VuLCBjb2xsZWN0IGFsbCBicmVha3BvaW50cyBpbnRvIG9uZSBwcm92aWRlcicsIHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG4gICAgZmFjdG9yeTogKCkgPT4gbnVsbFxuICB9KTtcbiJdfQ==
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @license
3
+ * Copyright Google LLC All Rights Reserved.
4
+ *
5
+ * Use of this source code is governed by an MIT-style license that can be
6
+ * found in the LICENSE file at https://angular.io/license
7
+ */
8
+ export * from './library-config';
9
+ export * from './server-token';
10
+ export * from './breakpoint-token';
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saWJzL2ZsZXgtbGF5b3V0L2NvcmUvdG9rZW5zL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLG9CQUFvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vbGlicmFyeS1jb25maWcnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2ZXItdG9rZW4nO1xuZXhwb3J0ICogZnJvbSAnLi9icmVha3BvaW50LXRva2VuJztcbiJdfQ==