@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.
- package/README.md +7 -0
- package/_private-utils/angular-flex-layout-_private-utils.d.ts +5 -0
- package/_private-utils/auto-prefixer.d.ts +24 -0
- package/_private-utils/index.d.ts +10 -0
- package/_private-utils/layout-validator.d.ts +32 -0
- package/_private-utils/object-extend.d.ts +15 -0
- package/_private-utils/package.json +10 -0
- package/_private-utils/testing/angular-flex-layout-_private-utils-testing.d.ts +5 -0
- package/_private-utils/testing/custom-matchers.d.ts +65 -0
- package/_private-utils/testing/dom-tools.d.ts +47 -0
- package/_private-utils/testing/helpers.d.ts +24 -0
- package/_private-utils/testing/index.d.ts +10 -0
- package/_private-utils/testing/package.json +10 -0
- package/angular-flex-layout-13.0.0-beta.38.tgz +0 -0
- package/angular-flex-layout.d.ts +5 -0
- package/core/README.md +25 -0
- package/core/add-alias.d.ts +14 -0
- package/core/angular-flex-layout-core.d.ts +5 -0
- package/core/base/base2.d.ts +60 -0
- package/core/base/index.d.ts +8 -0
- package/core/basis-validator/basis-validator.d.ts +13 -0
- package/core/breakpoints/break-point-registry.d.ts +42 -0
- package/core/breakpoints/break-point.d.ts +14 -0
- package/core/breakpoints/break-points-token.d.ts +14 -0
- package/core/breakpoints/breakpoint-tools.d.ts +19 -0
- package/core/breakpoints/data/break-points.d.ts +12 -0
- package/core/breakpoints/data/orientation-break-points.d.ts +23 -0
- package/core/breakpoints/index.d.ts +12 -0
- package/core/browser-provider.d.ts +24 -0
- package/core/match-media/index.d.ts +9 -0
- package/core/match-media/match-media.d.ts +59 -0
- package/core/match-media/mock/mock-match-media.d.ts +92 -0
- package/core/media-change.d.ts +30 -0
- package/core/media-marshaller/media-marshaller.d.ts +123 -0
- package/core/media-marshaller/print-hook.d.ts +95 -0
- package/core/media-observer/index.d.ts +8 -0
- package/core/media-observer/media-observer.d.ts +115 -0
- package/core/media-trigger/index.d.ts +8 -0
- package/core/media-trigger/media-trigger.d.ts +73 -0
- package/core/module.d.ts +11 -0
- package/core/multiply/multiplier.d.ts +5 -0
- package/core/package.json +10 -0
- package/core/public-api.d.ts +25 -0
- package/core/sass/_layout-bp.scss +76 -0
- package/core/style-builder/style-builder.d.ts +21 -0
- package/core/style-utils/style-utils.d.ts +53 -0
- package/core/stylesheet-map/index.d.ts +8 -0
- package/core/stylesheet-map/stylesheet-map.d.ts +24 -0
- package/core/tokens/breakpoint-token.d.ts +10 -0
- package/core/tokens/index.d.ts +10 -0
- package/core/tokens/library-config.d.ts +26 -0
- package/core/tokens/server-token.d.ts +15 -0
- package/core/utils/array.d.ts +9 -0
- package/core/utils/index.d.ts +9 -0
- package/core/utils/sort.d.ts +15 -0
- package/esm2020/_private-utils/angular-flex-layout-_private-utils.mjs +5 -0
- package/esm2020/_private-utils/auto-prefixer.mjs +65 -0
- package/esm2020/_private-utils/index.mjs +11 -0
- package/esm2020/_private-utils/layout-validator.mjs +83 -0
- package/esm2020/_private-utils/object-extend.mjs +30 -0
- package/esm2020/_private-utils/testing/angular-flex-layout-_private-utils-testing.mjs +5 -0
- package/esm2020/_private-utils/testing/custom-matchers.mjs +201 -0
- package/esm2020/_private-utils/testing/dom-tools.mjs +101 -0
- package/esm2020/_private-utils/testing/helpers.mjs +43 -0
- package/esm2020/_private-utils/testing/index.mjs +11 -0
- package/esm2020/angular-flex-layout.mjs +5 -0
- package/esm2020/core/add-alias.mjs +23 -0
- package/esm2020/core/angular-flex-layout-core.mjs +5 -0
- package/esm2020/core/base/base2.mjs +131 -0
- package/esm2020/core/base/index.mjs +9 -0
- package/esm2020/core/basis-validator/basis-validator.mjs +48 -0
- package/esm2020/core/breakpoints/break-point-registry.mjs +76 -0
- package/esm2020/core/breakpoints/break-point.mjs +2 -0
- package/esm2020/core/breakpoints/break-points-token.mjs +30 -0
- package/esm2020/core/breakpoints/breakpoint-tools.mjs +53 -0
- package/esm2020/core/breakpoints/data/break-points.mjs +78 -0
- package/esm2020/core/breakpoints/data/orientation-break-points.mjs +40 -0
- package/esm2020/core/breakpoints/index.mjs +13 -0
- package/esm2020/core/browser-provider.mjs +41 -0
- package/esm2020/core/match-media/index.mjs +10 -0
- package/esm2020/core/match-media/match-media.mjs +186 -0
- package/esm2020/core/match-media/mock/mock-match-media.mjs +224 -0
- package/esm2020/core/media-change.mjs +25 -0
- package/esm2020/core/media-marshaller/media-marshaller.mjs +317 -0
- package/esm2020/core/media-marshaller/print-hook.mjs +265 -0
- package/esm2020/core/media-observer/index.mjs +9 -0
- package/esm2020/core/media-observer/media-observer.mjs +195 -0
- package/esm2020/core/media-trigger/index.mjs +9 -0
- package/esm2020/core/media-trigger/media-trigger.mjs +188 -0
- package/esm2020/core/module.mjs +27 -0
- package/esm2020/core/multiply/multiplier.mjs +16 -0
- package/esm2020/core/public-api.mjs +26 -0
- package/esm2020/core/style-builder/style-builder.mjs +15 -0
- package/esm2020/core/style-utils/style-utils.mjs +174 -0
- package/esm2020/core/stylesheet-map/index.mjs +9 -0
- package/esm2020/core/stylesheet-map/stylesheet-map.mjs +59 -0
- package/esm2020/core/tokens/breakpoint-token.mjs +13 -0
- package/esm2020/core/tokens/index.mjs +11 -0
- package/esm2020/core/tokens/library-config.mjs +30 -0
- package/esm2020/core/tokens/server-token.mjs +19 -0
- package/esm2020/core/utils/array.mjs +12 -0
- package/esm2020/core/utils/index.mjs +10 -0
- package/esm2020/core/utils/sort.mjs +20 -0
- package/esm2020/extended/angular-flex-layout-extended.mjs +5 -0
- package/esm2020/extended/class/class.mjs +88 -0
- package/esm2020/extended/img-src/img-src.mjs +106 -0
- package/esm2020/extended/module.mjs +45 -0
- package/esm2020/extended/public-api.mjs +13 -0
- package/esm2020/extended/show-hide/show-hide.mjs +176 -0
- package/esm2020/extended/style/style-transforms.mjs +76 -0
- package/esm2020/extended/style/style.mjs +130 -0
- package/esm2020/flex/angular-flex-layout-flex.mjs +5 -0
- package/esm2020/flex/flex/flex.mjs +291 -0
- package/esm2020/flex/flex-align/flex-align.mjs +80 -0
- package/esm2020/flex/flex-fill/flex-fill.mjs +50 -0
- package/esm2020/flex/flex-offset/flex-offset.mjs +121 -0
- package/esm2020/flex/flex-order/flex-order.mjs +66 -0
- package/esm2020/flex/layout/layout.mjs +86 -0
- package/esm2020/flex/layout-align/layout-align.mjs +194 -0
- package/esm2020/flex/layout-gap/layout-gap.mjs +282 -0
- package/esm2020/flex/module.mjs +62 -0
- package/esm2020/flex/public-api.mjs +17 -0
- package/esm2020/grid/align-columns/align-columns.mjs +137 -0
- package/esm2020/grid/align-rows/align-rows.mjs +119 -0
- package/esm2020/grid/angular-flex-layout-grid.mjs +5 -0
- package/esm2020/grid/area/area.mjs +67 -0
- package/esm2020/grid/areas/areas.mjs +86 -0
- package/esm2020/grid/auto/auto.mjs +89 -0
- package/esm2020/grid/column/column.mjs +67 -0
- package/esm2020/grid/columns/columns.mjs +96 -0
- package/esm2020/grid/gap/gap.mjs +85 -0
- package/esm2020/grid/grid-align/grid-align.mjs +111 -0
- package/esm2020/grid/module.mjs +73 -0
- package/esm2020/grid/public-api.mjs +20 -0
- package/esm2020/grid/row/row.mjs +67 -0
- package/esm2020/grid/rows/rows.mjs +96 -0
- package/esm2020/module.mjs +64 -0
- package/esm2020/public-api.mjs +20 -0
- package/esm2020/server/angular-flex-layout-server.mjs +5 -0
- package/esm2020/server/module.mjs +22 -0
- package/esm2020/server/public-api.mjs +10 -0
- package/esm2020/server/server-match-media.mjs +151 -0
- package/esm2020/server/server-provider.mjs +140 -0
- package/esm2020/version.mjs +11 -0
- package/extended/README.md +18 -0
- package/extended/angular-flex-layout-extended.d.ts +5 -0
- package/extended/class/class.d.ts +38 -0
- package/extended/img-src/img-src.d.ts +51 -0
- package/extended/module.d.ts +16 -0
- package/extended/package.json +10 -0
- package/extended/public-api.d.ts +12 -0
- package/extended/show-hide/show-hide.d.ts +61 -0
- package/extended/style/style-transforms.d.ts +36 -0
- package/extended/style/style.d.ts +45 -0
- package/fesm2015/angular-flex-layout-_private-utils-testing.mjs +357 -0
- package/fesm2015/angular-flex-layout-_private-utils-testing.mjs.map +1 -0
- package/fesm2015/angular-flex-layout-_private-utils.mjs +193 -0
- package/fesm2015/angular-flex-layout-_private-utils.mjs.map +1 -0
- package/fesm2015/angular-flex-layout-core.mjs +2331 -0
- package/fesm2015/angular-flex-layout-core.mjs.map +1 -0
- package/fesm2015/angular-flex-layout-extended.mjs +621 -0
- package/fesm2015/angular-flex-layout-extended.mjs.map +1 -0
- package/fesm2015/angular-flex-layout-flex.mjs +1206 -0
- package/fesm2015/angular-flex-layout-flex.mjs.map +1 -0
- package/fesm2015/angular-flex-layout-grid.mjs +1047 -0
- package/fesm2015/angular-flex-layout-grid.mjs.map +1 -0
- package/fesm2015/angular-flex-layout-server.mjs +324 -0
- package/fesm2015/angular-flex-layout-server.mjs.map +1 -0
- package/fesm2015/angular-flex-layout.mjs +94 -0
- package/fesm2015/angular-flex-layout.mjs.map +1 -0
- package/fesm2020/angular-flex-layout-_private-utils-testing.mjs +357 -0
- package/fesm2020/angular-flex-layout-_private-utils-testing.mjs.map +1 -0
- package/fesm2020/angular-flex-layout-_private-utils.mjs +192 -0
- package/fesm2020/angular-flex-layout-_private-utils.mjs.map +1 -0
- package/fesm2020/angular-flex-layout-core.mjs +2304 -0
- package/fesm2020/angular-flex-layout-core.mjs.map +1 -0
- package/fesm2020/angular-flex-layout-extended.mjs +612 -0
- package/fesm2020/angular-flex-layout-extended.mjs.map +1 -0
- package/fesm2020/angular-flex-layout-flex.mjs +1198 -0
- package/fesm2020/angular-flex-layout-flex.mjs.map +1 -0
- package/fesm2020/angular-flex-layout-grid.mjs +1047 -0
- package/fesm2020/angular-flex-layout-grid.mjs.map +1 -0
- package/fesm2020/angular-flex-layout-server.mjs +322 -0
- package/fesm2020/angular-flex-layout-server.mjs.map +1 -0
- package/fesm2020/angular-flex-layout.mjs +92 -0
- package/fesm2020/angular-flex-layout.mjs.map +1 -0
- package/flex/README.md +19 -0
- package/flex/angular-flex-layout-flex.d.ts +5 -0
- package/flex/flex/flex.d.ts +59 -0
- package/flex/flex-align/flex-align.d.ts +32 -0
- package/flex/flex-fill/flex-fill.d.ts +33 -0
- package/flex/flex-offset/flex-offset.d.ts +44 -0
- package/flex/flex-order/flex-order.d.ts +34 -0
- package/flex/layout/layout.d.ts +43 -0
- package/flex/layout-align/layout-align.d.ts +49 -0
- package/flex/layout-gap/layout-gap.d.ts +65 -0
- package/flex/module.d.ts +21 -0
- package/flex/package.json +10 -0
- package/flex/public-api.d.ts +16 -0
- package/grid/README.md +19 -0
- package/grid/align-columns/align-columns.d.ts +39 -0
- package/grid/align-rows/align-rows.d.ts +39 -0
- package/grid/angular-flex-layout-grid.d.ts +5 -0
- package/grid/area/area.d.ts +34 -0
- package/grid/areas/areas.d.ts +41 -0
- package/grid/auto/auto.d.ts +41 -0
- package/grid/column/column.d.ts +34 -0
- package/grid/columns/columns.d.ts +43 -0
- package/grid/gap/gap.d.ts +42 -0
- package/grid/grid-align/grid-align.d.ts +37 -0
- package/grid/module.d.ts +23 -0
- package/grid/package.json +10 -0
- package/grid/public-api.d.ts +19 -0
- package/grid/row/row.d.ts +34 -0
- package/grid/rows/rows.d.ts +43 -0
- package/module.d.ts +30 -0
- package/package.json +100 -0
- package/public-api.d.ts +18 -0
- package/server/README.md +23 -0
- package/server/angular-flex-layout-server.d.ts +5 -0
- package/server/module.d.ts +6 -0
- package/server/package.json +10 -0
- package/server/public-api.d.ts +9 -0
- package/server/server-match-media.d.ts +61 -0
- package/server/server-provider.d.ts +44 -0
- package/version.d.ts +10 -0
|
@@ -0,0 +1,76 @@
|
|
|
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
|
+
/** NgStyle allowed inputs */
|
|
9
|
+
export class NgStyleKeyValue {
|
|
10
|
+
constructor(key, value, noQuotes = true) {
|
|
11
|
+
this.key = key;
|
|
12
|
+
this.value = value;
|
|
13
|
+
this.key = noQuotes ? key.replace(/['"]/g, '').trim() : key.trim();
|
|
14
|
+
this.value = noQuotes ? value.replace(/['"]/g, '').trim() : value.trim();
|
|
15
|
+
this.value = this.value.replace(/;/, '');
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export function getType(target) {
|
|
19
|
+
let what = typeof target;
|
|
20
|
+
if (what === 'object') {
|
|
21
|
+
return (target.constructor === Array) ? 'array' :
|
|
22
|
+
(target.constructor === Set) ? 'set' : 'object';
|
|
23
|
+
}
|
|
24
|
+
return what;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Split string of key:value pairs into Array of k-v pairs
|
|
28
|
+
* e.g. 'key:value; key:value; key:value;' -> ['key:value',...]
|
|
29
|
+
*/
|
|
30
|
+
export function buildRawList(source, delimiter = ';') {
|
|
31
|
+
return String(source)
|
|
32
|
+
.trim()
|
|
33
|
+
.split(delimiter)
|
|
34
|
+
.map((val) => val.trim())
|
|
35
|
+
.filter(val => val !== '');
|
|
36
|
+
}
|
|
37
|
+
/** Convert array of key:value strings to a iterable map object */
|
|
38
|
+
export function buildMapFromList(styles, sanitize) {
|
|
39
|
+
const sanitizeValue = (it) => {
|
|
40
|
+
if (sanitize) {
|
|
41
|
+
it.value = sanitize(it.value);
|
|
42
|
+
}
|
|
43
|
+
return it;
|
|
44
|
+
};
|
|
45
|
+
return styles
|
|
46
|
+
.map(stringToKeyValue)
|
|
47
|
+
.filter(entry => !!entry)
|
|
48
|
+
.map(sanitizeValue)
|
|
49
|
+
.reduce(keyValuesToMap, {});
|
|
50
|
+
}
|
|
51
|
+
/** Convert Set<string> or raw Object to an iterable NgStyleMap */
|
|
52
|
+
export function buildMapFromSet(source, sanitize) {
|
|
53
|
+
let list = [];
|
|
54
|
+
if (getType(source) === 'set') {
|
|
55
|
+
source.forEach(entry => list.push(entry));
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
Object.keys(source).forEach((key) => {
|
|
59
|
+
list.push(`${key}:${source[key]}`);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
return buildMapFromList(list, sanitize);
|
|
63
|
+
}
|
|
64
|
+
/** Convert 'key:value' -> [key, value] */
|
|
65
|
+
export function stringToKeyValue(it) {
|
|
66
|
+
const [key, ...vals] = it.split(':');
|
|
67
|
+
return new NgStyleKeyValue(key, vals.join(':'));
|
|
68
|
+
}
|
|
69
|
+
/** Convert [ [key,value] ] -> { key : value } */
|
|
70
|
+
export function keyValuesToMap(map, entry) {
|
|
71
|
+
if (!!entry.key) {
|
|
72
|
+
map[entry.key] = entry.value;
|
|
73
|
+
}
|
|
74
|
+
return map;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R5bGUtdHJhbnNmb3Jtcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpYnMvZmxleC1sYXlvdXQvZXh0ZW5kZWQvc3R5bGUvc3R5bGUtdHJhbnNmb3Jtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFZSCw2QkFBNkI7QUFDN0IsTUFBTSxPQUFPLGVBQWU7SUFDMUIsWUFBbUIsR0FBVyxFQUFTLEtBQWEsRUFBRSxRQUFRLEdBQUcsSUFBSTtRQUFsRCxRQUFHLEdBQUgsR0FBRyxDQUFRO1FBQVMsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUNsRCxJQUFJLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUVuRSxJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN6RSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMzQyxDQUFDO0NBQ0Y7QUFFRCxNQUFNLFVBQVUsT0FBTyxDQUFDLE1BQVc7SUFDakMsSUFBSSxJQUFJLEdBQUcsT0FBTyxNQUFNLENBQUM7SUFDekIsSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFO1FBQ3JCLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM3QyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0tBQ3JEO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxNQUFXLEVBQUUsU0FBUyxHQUFHLEdBQUc7SUFDdkQsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDO1NBQ2hCLElBQUksRUFBRTtTQUNOLEtBQUssQ0FBQyxTQUFTLENBQUM7U0FDaEIsR0FBRyxDQUFDLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDaEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ2pDLENBQUM7QUFFRCxrRUFBa0U7QUFDbEUsTUFBTSxVQUFVLGdCQUFnQixDQUFDLE1BQXNCLEVBQUUsUUFBMkI7SUFDbEYsTUFBTSxhQUFhLEdBQUcsQ0FBQyxFQUFtQixFQUFFLEVBQUU7UUFDNUMsSUFBSSxRQUFRLEVBQUU7WUFDWixFQUFFLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDL0I7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUMsQ0FBQztJQUVGLE9BQU8sTUFBTTtTQUNSLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQztTQUNyQixNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1NBQ3hCLEdBQUcsQ0FBQyxhQUFhLENBQUM7U0FDbEIsTUFBTSxDQUFDLGNBQWMsRUFBRSxFQUFnQixDQUFDLENBQUM7QUFDaEQsQ0FBQztBQUVELGtFQUFrRTtBQUNsRSxNQUFNLFVBQVUsZUFBZSxDQUFDLE1BQW1CLEVBQUUsUUFBMkI7SUFDOUUsSUFBSSxJQUFJLEdBQWEsRUFBRSxDQUFDO0lBQ3hCLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEtBQUssRUFBRTtRQUM1QixNQUFzQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztLQUM1RDtTQUFNO1FBQ0wsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFXLEVBQUUsRUFBRTtZQUMxQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFLLE1BQXFCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELENBQUMsQ0FBQyxDQUFDO0tBQ0o7SUFDRCxPQUFPLGdCQUFnQixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztBQUMxQyxDQUFDO0FBR0QsMENBQTBDO0FBQzFDLE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxFQUFVO0lBQ3pDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLE9BQU8sSUFBSSxlQUFlLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRUQsaURBQWlEO0FBQ2pELE1BQU0sVUFBVSxjQUFjLENBQUMsR0FBZSxFQUFFLEtBQXNCO0lBQ3BFLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7UUFDZixHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7S0FDOUI7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuZXhwb3J0IHR5cGUgTmdTdHlsZVJhd0xpc3QgPSBzdHJpbmdbXTtcbmV4cG9ydCB0eXBlIE5nU3R5bGVNYXAgPSB7W2tsYXNzOiBzdHJpbmddOiBzdHJpbmd9O1xuLy8gTmdTdHlsZSBzZWxlY3RvcnMgYWNjZXB0IE5nU3R5bGVUeXBlIHZhbHVlc1xuZXhwb3J0IHR5cGUgTmdTdHlsZVR5cGUgPSBzdHJpbmcgfCBTZXQ8c3RyaW5nPiB8IE5nU3R5bGVSYXdMaXN0IHwgTmdTdHlsZU1hcDtcblxuLyoqXG4gKiBDYWxsYmFjayBmdW5jdGlvbiBmb3IgU2VjdXJpdHlDb250ZXh0LlNUWUxFIHNhbml0aXphdGlvblxuICovXG5leHBvcnQgdHlwZSBOZ1N0eWxlU2FuaXRpemVyID0gKHZhbDogYW55KSA9PiBzdHJpbmc7XG5cbi8qKiBOZ1N0eWxlIGFsbG93ZWQgaW5wdXRzICovXG5leHBvcnQgY2xhc3MgTmdTdHlsZUtleVZhbHVlIHtcbiAgY29uc3RydWN0b3IocHVibGljIGtleTogc3RyaW5nLCBwdWJsaWMgdmFsdWU6IHN0cmluZywgbm9RdW90ZXMgPSB0cnVlKSB7XG4gICAgdGhpcy5rZXkgPSBub1F1b3RlcyA/IGtleS5yZXBsYWNlKC9bJ1wiXS9nLCAnJykudHJpbSgpIDoga2V5LnRyaW0oKTtcblxuICAgIHRoaXMudmFsdWUgPSBub1F1b3RlcyA/IHZhbHVlLnJlcGxhY2UoL1snXCJdL2csICcnKS50cmltKCkgOiB2YWx1ZS50cmltKCk7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWUucmVwbGFjZSgvOy8sICcnKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHlwZSh0YXJnZXQ6IGFueSk6IHN0cmluZyB7XG4gIGxldCB3aGF0ID0gdHlwZW9mIHRhcmdldDtcbiAgaWYgKHdoYXQgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuICh0YXJnZXQuY29uc3RydWN0b3IgPT09IEFycmF5KSA/ICdhcnJheScgOlxuICAgICAgICAodGFyZ2V0LmNvbnN0cnVjdG9yID09PSBTZXQpID8gJ3NldCcgOiAnb2JqZWN0JztcbiAgfVxuICByZXR1cm4gd2hhdDtcbn1cblxuLyoqXG4gKiBTcGxpdCBzdHJpbmcgb2Yga2V5OnZhbHVlIHBhaXJzIGludG8gQXJyYXkgb2Ygay12IHBhaXJzXG4gKiBlLmcuICAna2V5OnZhbHVlOyBrZXk6dmFsdWU7IGtleTp2YWx1ZTsnIC0+IFsna2V5OnZhbHVlJywuLi5dXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFJhd0xpc3Qoc291cmNlOiBhbnksIGRlbGltaXRlciA9ICc7Jyk6IE5nU3R5bGVSYXdMaXN0IHtcbiAgcmV0dXJuIFN0cmluZyhzb3VyY2UpXG4gICAgICAudHJpbSgpXG4gICAgICAuc3BsaXQoZGVsaW1pdGVyKVxuICAgICAgLm1hcCgodmFsOiBzdHJpbmcpID0+IHZhbC50cmltKCkpXG4gICAgICAuZmlsdGVyKHZhbCA9PiB2YWwgIT09ICcnKTtcbn1cblxuLyoqIENvbnZlcnQgYXJyYXkgb2Yga2V5OnZhbHVlIHN0cmluZ3MgdG8gYSBpdGVyYWJsZSBtYXAgb2JqZWN0ICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRNYXBGcm9tTGlzdChzdHlsZXM6IE5nU3R5bGVSYXdMaXN0LCBzYW5pdGl6ZT86IE5nU3R5bGVTYW5pdGl6ZXIpOiBOZ1N0eWxlTWFwIHtcbiAgY29uc3Qgc2FuaXRpemVWYWx1ZSA9IChpdDogTmdTdHlsZUtleVZhbHVlKSA9PiB7XG4gICAgaWYgKHNhbml0aXplKSB7XG4gICAgICBpdC52YWx1ZSA9IHNhbml0aXplKGl0LnZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIGl0O1xuICB9O1xuXG4gIHJldHVybiBzdHlsZXNcbiAgICAgIC5tYXAoc3RyaW5nVG9LZXlWYWx1ZSlcbiAgICAgIC5maWx0ZXIoZW50cnkgPT4gISFlbnRyeSlcbiAgICAgIC5tYXAoc2FuaXRpemVWYWx1ZSlcbiAgICAgIC5yZWR1Y2Uoa2V5VmFsdWVzVG9NYXAsIHt9IGFzIE5nU3R5bGVNYXApO1xufVxuXG4vKiogQ29udmVydCBTZXQ8c3RyaW5nPiBvciByYXcgT2JqZWN0IHRvIGFuIGl0ZXJhYmxlIE5nU3R5bGVNYXAgKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZE1hcEZyb21TZXQoc291cmNlOiBOZ1N0eWxlVHlwZSwgc2FuaXRpemU/OiBOZ1N0eWxlU2FuaXRpemVyKTogTmdTdHlsZU1hcCB7XG4gIGxldCBsaXN0OiBzdHJpbmdbXSA9IFtdO1xuICBpZiAoZ2V0VHlwZShzb3VyY2UpID09PSAnc2V0Jykge1xuICAgIChzb3VyY2UgYXMgU2V0PHN0cmluZz4pLmZvckVhY2goZW50cnkgPT4gbGlzdC5wdXNoKGVudHJ5KSk7XG4gIH0gZWxzZSB7XG4gICAgT2JqZWN0LmtleXMoc291cmNlKS5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xuICAgICAgbGlzdC5wdXNoKGAke2tleX06JHsoc291cmNlIGFzIE5nU3R5bGVNYXApW2tleV19YCk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGJ1aWxkTWFwRnJvbUxpc3QobGlzdCwgc2FuaXRpemUpO1xufVxuXG5cbi8qKiBDb252ZXJ0ICdrZXk6dmFsdWUnIC0+IFtrZXksIHZhbHVlXSAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ1RvS2V5VmFsdWUoaXQ6IHN0cmluZyk6IE5nU3R5bGVLZXlWYWx1ZSB7XG4gIGNvbnN0IFtrZXksIC4uLnZhbHNdID0gaXQuc3BsaXQoJzonKTtcbiAgcmV0dXJuIG5ldyBOZ1N0eWxlS2V5VmFsdWUoa2V5LCB2YWxzLmpvaW4oJzonKSk7XG59XG5cbi8qKiBDb252ZXJ0IFsgW2tleSx2YWx1ZV0gXSAtPiB7IGtleSA6IHZhbHVlIH0gKi9cbmV4cG9ydCBmdW5jdGlvbiBrZXlWYWx1ZXNUb01hcChtYXA6IE5nU3R5bGVNYXAsIGVudHJ5OiBOZ1N0eWxlS2V5VmFsdWUpOiBOZ1N0eWxlTWFwIHtcbiAgaWYgKCEhZW50cnkua2V5KSB7XG4gICAgbWFwW2VudHJ5LmtleV0gPSBlbnRyeS52YWx1ZTtcbiAgfVxuICByZXR1cm4gbWFwO1xufVxuIl19
|
|
@@ -0,0 +1,130 @@
|
|
|
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 { Directive, Inject, Optional, PLATFORM_ID, SecurityContext, Self, } from '@angular/core';
|
|
9
|
+
import { isPlatformServer, NgStyle } from '@angular/common';
|
|
10
|
+
import { BaseDirective2, SERVER_TOKEN, } from '@angular/flex-layout/core';
|
|
11
|
+
import { buildRawList, getType, buildMapFromSet, stringToKeyValue, keyValuesToMap, } from './style-transforms';
|
|
12
|
+
import * as i0 from "@angular/core";
|
|
13
|
+
import * as i1 from "@angular/flex-layout/core";
|
|
14
|
+
import * as i2 from "@angular/platform-browser";
|
|
15
|
+
import * as i3 from "@angular/common";
|
|
16
|
+
export class StyleDirective extends BaseDirective2 {
|
|
17
|
+
constructor(elementRef, styler, marshal, sanitizer, differs, renderer2, ngStyleInstance, serverLoaded, platformId) {
|
|
18
|
+
super(elementRef, null, styler, marshal);
|
|
19
|
+
this.sanitizer = sanitizer;
|
|
20
|
+
this.ngStyleInstance = ngStyleInstance;
|
|
21
|
+
this.DIRECTIVE_KEY = 'ngStyle';
|
|
22
|
+
if (!this.ngStyleInstance) {
|
|
23
|
+
// Create an instance NgStyle Directive instance only if `ngStyle=""` has NOT been
|
|
24
|
+
// defined on the same host element; since the responsive variations may be defined...
|
|
25
|
+
this.ngStyleInstance = new NgStyle(elementRef, differs, renderer2);
|
|
26
|
+
}
|
|
27
|
+
this.init();
|
|
28
|
+
const styles = this.nativeElement.getAttribute('style') ?? '';
|
|
29
|
+
this.fallbackStyles = this.buildStyleMap(styles);
|
|
30
|
+
this.isServer = serverLoaded && isPlatformServer(platformId);
|
|
31
|
+
}
|
|
32
|
+
/** Add generated styles */
|
|
33
|
+
updateWithValue(value) {
|
|
34
|
+
const styles = this.buildStyleMap(value);
|
|
35
|
+
this.ngStyleInstance.ngStyle = { ...this.fallbackStyles, ...styles };
|
|
36
|
+
if (this.isServer) {
|
|
37
|
+
this.applyStyleToElement(styles);
|
|
38
|
+
}
|
|
39
|
+
this.ngStyleInstance.ngDoCheck();
|
|
40
|
+
}
|
|
41
|
+
/** Remove generated styles */
|
|
42
|
+
clearStyles() {
|
|
43
|
+
this.ngStyleInstance.ngStyle = this.fallbackStyles;
|
|
44
|
+
this.ngStyleInstance.ngDoCheck();
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Convert raw strings to ngStyleMap; which is required by ngStyle
|
|
48
|
+
* NOTE: Raw string key-value pairs MUST be delimited by `;`
|
|
49
|
+
* Comma-delimiters are not supported due to complexities of
|
|
50
|
+
* possible style values such as `rgba(x,x,x,x)` and others
|
|
51
|
+
*/
|
|
52
|
+
buildStyleMap(styles) {
|
|
53
|
+
// Always safe-guard (aka sanitize) style property values
|
|
54
|
+
const sanitizer = (val) => this.sanitizer.sanitize(SecurityContext.STYLE, val) ?? '';
|
|
55
|
+
if (styles) {
|
|
56
|
+
switch (getType(styles)) {
|
|
57
|
+
case 'string': return buildMapFromList(buildRawList(styles), sanitizer);
|
|
58
|
+
case 'array': return buildMapFromList(styles, sanitizer);
|
|
59
|
+
case 'set': return buildMapFromSet(styles, sanitizer);
|
|
60
|
+
default: return buildMapFromSet(styles, sanitizer);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return {};
|
|
64
|
+
}
|
|
65
|
+
// ******************************************************************
|
|
66
|
+
// Lifecycle Hooks
|
|
67
|
+
// ******************************************************************
|
|
68
|
+
/** For ChangeDetectionStrategy.onPush and ngOnChanges() updates */
|
|
69
|
+
ngDoCheck() {
|
|
70
|
+
this.ngStyleInstance.ngDoCheck();
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
StyleDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: StyleDirective, deps: [{ token: i0.ElementRef }, { token: i1.StyleUtils }, { token: i1.MediaMarshaller }, { token: i2.DomSanitizer }, { token: i0.KeyValueDiffers }, { token: i0.Renderer2 }, { token: i3.NgStyle, optional: true, self: true }, { token: SERVER_TOKEN }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Directive });
|
|
74
|
+
StyleDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.2", type: StyleDirective, usesInheritance: true, ngImport: i0 });
|
|
75
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: StyleDirective, decorators: [{
|
|
76
|
+
type: Directive
|
|
77
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.StyleUtils }, { type: i1.MediaMarshaller }, { type: i2.DomSanitizer }, { type: i0.KeyValueDiffers }, { type: i0.Renderer2 }, { type: i3.NgStyle, decorators: [{
|
|
78
|
+
type: Optional
|
|
79
|
+
}, {
|
|
80
|
+
type: Self
|
|
81
|
+
}] }, { type: undefined, decorators: [{
|
|
82
|
+
type: Inject,
|
|
83
|
+
args: [SERVER_TOKEN]
|
|
84
|
+
}] }, { type: Object, decorators: [{
|
|
85
|
+
type: Inject,
|
|
86
|
+
args: [PLATFORM_ID]
|
|
87
|
+
}] }]; } });
|
|
88
|
+
const inputs = [
|
|
89
|
+
'ngStyle',
|
|
90
|
+
'ngStyle.xs', 'ngStyle.sm', 'ngStyle.md', 'ngStyle.lg', 'ngStyle.xl',
|
|
91
|
+
'ngStyle.lt-sm', 'ngStyle.lt-md', 'ngStyle.lt-lg', 'ngStyle.lt-xl',
|
|
92
|
+
'ngStyle.gt-xs', 'ngStyle.gt-sm', 'ngStyle.gt-md', 'ngStyle.gt-lg'
|
|
93
|
+
];
|
|
94
|
+
const selector = `
|
|
95
|
+
[ngStyle],
|
|
96
|
+
[ngStyle.xs], [ngStyle.sm], [ngStyle.md], [ngStyle.lg], [ngStyle.xl],
|
|
97
|
+
[ngStyle.lt-sm], [ngStyle.lt-md], [ngStyle.lt-lg], [ngStyle.lt-xl],
|
|
98
|
+
[ngStyle.gt-xs], [ngStyle.gt-sm], [ngStyle.gt-md], [ngStyle.gt-lg]
|
|
99
|
+
`;
|
|
100
|
+
/**
|
|
101
|
+
* Directive to add responsive support for ngStyle.
|
|
102
|
+
*
|
|
103
|
+
*/
|
|
104
|
+
export class DefaultStyleDirective extends StyleDirective {
|
|
105
|
+
constructor() {
|
|
106
|
+
super(...arguments);
|
|
107
|
+
this.inputs = inputs;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
DefaultStyleDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: DefaultStyleDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
111
|
+
DefaultStyleDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.2", type: DefaultStyleDirective, selector: "\n [ngStyle],\n [ngStyle.xs], [ngStyle.sm], [ngStyle.md], [ngStyle.lg], [ngStyle.xl],\n [ngStyle.lt-sm], [ngStyle.lt-md], [ngStyle.lt-lg], [ngStyle.lt-xl],\n [ngStyle.gt-xs], [ngStyle.gt-sm], [ngStyle.gt-md], [ngStyle.gt-lg]\n", inputs: { ngStyle: "ngStyle", "ngStyle.xs": "ngStyle.xs", "ngStyle.sm": "ngStyle.sm", "ngStyle.md": "ngStyle.md", "ngStyle.lg": "ngStyle.lg", "ngStyle.xl": "ngStyle.xl", "ngStyle.lt-sm": "ngStyle.lt-sm", "ngStyle.lt-md": "ngStyle.lt-md", "ngStyle.lt-lg": "ngStyle.lt-lg", "ngStyle.lt-xl": "ngStyle.lt-xl", "ngStyle.gt-xs": "ngStyle.gt-xs", "ngStyle.gt-sm": "ngStyle.gt-sm", "ngStyle.gt-md": "ngStyle.gt-md", "ngStyle.gt-lg": "ngStyle.gt-lg" }, usesInheritance: true, ngImport: i0 });
|
|
112
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: DefaultStyleDirective, decorators: [{
|
|
113
|
+
type: Directive,
|
|
114
|
+
args: [{ selector, inputs }]
|
|
115
|
+
}] });
|
|
116
|
+
/** Build a styles map from a list of styles, while sanitizing bad values first */
|
|
117
|
+
function buildMapFromList(styles, sanitize) {
|
|
118
|
+
const sanitizeValue = (it) => {
|
|
119
|
+
if (sanitize) {
|
|
120
|
+
it.value = sanitize(it.value);
|
|
121
|
+
}
|
|
122
|
+
return it;
|
|
123
|
+
};
|
|
124
|
+
return styles
|
|
125
|
+
.map(stringToKeyValue)
|
|
126
|
+
.filter(entry => !!entry)
|
|
127
|
+
.map(sanitizeValue)
|
|
128
|
+
.reduce(keyValuesToMap, {});
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R5bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saWJzL2ZsZXgtbGF5b3V0L2V4dGVuZGVkL3N0eWxlL3N0eWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUNILE9BQU8sRUFDTCxTQUFTLEVBR1QsTUFBTSxFQUVOLFFBQVEsRUFDUixXQUFXLEVBRVgsZUFBZSxFQUNmLElBQUksR0FDTCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsZ0JBQWdCLEVBQUUsT0FBTyxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFMUQsT0FBTyxFQUNMLGNBQWMsRUFHZCxZQUFZLEdBQ2IsTUFBTSwyQkFBMkIsQ0FBQztBQUVuQyxPQUFPLEVBSUwsWUFBWSxFQUNaLE9BQU8sRUFDUCxlQUFlLEVBR2YsZ0JBQWdCLEVBQ2hCLGNBQWMsR0FDZixNQUFNLG9CQUFvQixDQUFDOzs7OztBQUc1QixNQUFNLE9BQU8sY0FBZSxTQUFRLGNBQWM7SUFNaEQsWUFBWSxVQUFzQixFQUN0QixNQUFrQixFQUNsQixPQUF3QixFQUNkLFNBQXVCLEVBQ2pDLE9BQXdCLEVBQ3hCLFNBQW9CLEVBQ2lCLGVBQXdCLEVBQ3ZDLFlBQXFCLEVBQ3RCLFVBQWtCO1FBQ2pELEtBQUssQ0FBQyxVQUFVLEVBQUUsSUFBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztRQU50QixjQUFTLEdBQVQsU0FBUyxDQUFjO1FBR0ksb0JBQWUsR0FBZixlQUFlLENBQVM7UUFWL0Qsa0JBQWEsR0FBRyxTQUFTLENBQUM7UUFjbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDekIsa0ZBQWtGO1lBQ2xGLHNGQUFzRjtZQUN0RixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksT0FBTyxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7U0FDcEU7UUFDRCxJQUFJLENBQUMsSUFB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QixxQkFBcUI7a0JBRGpDLFNBQVM7bUJBQUMsRUFBQyxRQUFRLEVBQUUsTUFBTSxFQUFDOztBQUs3QixrRkFBa0Y7QUFDbEYsU0FBUyxnQkFBZ0IsQ0FBQyxNQUFzQixFQUFFLFFBQTJCO0lBQzNFLE1BQU0sYUFBYSxHQUFHLENBQUMsRUFBbUIsRUFBRSxFQUFFO1FBQzVDLElBQUksUUFBUSxFQUFFO1lBQ1osRUFBRSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQy9CO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDLENBQUM7SUFFRixPQUFPLE1BQU07U0FDVixHQUFHLENBQUMsZ0JBQWdCLENBQUM7U0FDckIsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztTQUN4QixHQUFHLENBQUMsYUFBYSxDQUFDO1NBQ2xCLE1BQU0sQ0FBQyxjQUFjLEVBQUUsRUFBZ0IsQ0FBQyxDQUFDO0FBQzlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgRG9DaGVjayxcbiAgRWxlbWVudFJlZixcbiAgSW5qZWN0LFxuICBLZXlWYWx1ZURpZmZlcnMsXG4gIE9wdGlvbmFsLFxuICBQTEFURk9STV9JRCxcbiAgUmVuZGVyZXIyLFxuICBTZWN1cml0eUNvbnRleHQsXG4gIFNlbGYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtpc1BsYXRmb3JtU2VydmVyLCBOZ1N0eWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtEb21TYW5pdGl6ZXJ9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHtcbiAgQmFzZURpcmVjdGl2ZTIsXG4gIFN0eWxlVXRpbHMsXG4gIE1lZGlhTWFyc2hhbGxlcixcbiAgU0VSVkVSX1RPS0VOLFxufSBmcm9tICdAYW5ndWxhci9mbGV4LWxheW91dC9jb3JlJztcblxuaW1wb3J0IHtcbiAgTmdTdHlsZVJhd0xpc3QsXG4gIE5nU3R5bGVUeXBlLFxuICBOZ1N0eWxlU2FuaXRpemVyLFxuICBidWlsZFJhd0xpc3QsXG4gIGdldFR5cGUsXG4gIGJ1aWxkTWFwRnJvbVNldCxcbiAgTmdTdHlsZU1hcCxcbiAgTmdTdHlsZUtleVZhbHVlLFxuICBzdHJpbmdUb0tleVZhbHVlLFxuICBrZXlWYWx1ZXNUb01hcCxcbn0gZnJvbSAnLi9zdHlsZS10cmFuc2Zvcm1zJztcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgY2xhc3MgU3R5bGVEaXJlY3RpdmUgZXh0ZW5kcyBCYXNlRGlyZWN0aXZlMiBpbXBsZW1lbnRzIERvQ2hlY2sge1xuXG4gIHByb3RlY3RlZCBESVJFQ1RJVkVfS0VZID0gJ25nU3R5bGUnO1xuICBwcm90ZWN0ZWQgZmFsbGJhY2tTdHlsZXM6IE5nU3R5bGVNYXA7XG4gIHByb3RlY3RlZCBpc1NlcnZlcjogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICAgICAgICBzdHlsZXI6IFN0eWxlVXRpbHMsXG4gICAgICAgICAgICAgIG1hcnNoYWw6IE1lZGlhTWFyc2hhbGxlcixcbiAgICAgICAgICAgICAgcHJvdGVjdGVkIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgICAgICAgICAgICBkaWZmZXJzOiBLZXlWYWx1ZURpZmZlcnMsXG4gICAgICAgICAgICAgIHJlbmRlcmVyMjogUmVuZGVyZXIyLFxuICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHByaXZhdGUgcmVhZG9ubHkgbmdTdHlsZUluc3RhbmNlOiBOZ1N0eWxlLFxuICAgICAgICAgICAgICBASW5qZWN0KFNFUlZFUl9UT0tFTikgc2VydmVyTG9hZGVkOiBib29sZWFuLFxuICAgICAgICAgICAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwbGF0Zm9ybUlkOiBPYmplY3QpIHtcbiAgICBzdXBlcihlbGVtZW50UmVmLCBudWxsISwgc3R5bGVyLCBtYXJzaGFsKTtcbiAgICBpZiAoIXRoaXMubmdTdHlsZUluc3RhbmNlKSB7XG4gICAgICAvLyBDcmVhdGUgYW4gaW5zdGFuY2UgTmdTdHlsZSBEaXJlY3RpdmUgaW5zdGFuY2Ugb25seSBpZiBgbmdTdHlsZT1cIlwiYCBoYXMgTk9UIGJlZW5cbiAgICAgIC8vIGRlZmluZWQgb24gdGhlIHNhbWUgaG9zdCBlbGVtZW50OyBzaW5jZSB0aGUgcmVzcG9uc2l2ZSB2YXJpYXRpb25zIG1heSBiZSBkZWZpbmVkLi4uXG4gICAgICB0aGlzLm5nU3R5bGVJbnN0YW5jZSA9IG5ldyBOZ1N0eWxlKGVsZW1lbnRSZWYsIGRpZmZlcnMsIHJlbmRlcmVyMik7XG4gICAgfVxuICAgIHRoaXMuaW5pdCgpO1xuICAgIGNvbnN0IHN0eWxlcyA9IHRoaXMubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3N0eWxlJykgPz8gJyc7XG4gICAgdGhpcy5mYWxsYmFja1N0eWxlcyA9IHRoaXMuYnVpbGRTdHlsZU1hcChzdHlsZXMpO1xuICAgIHRoaXMuaXNTZXJ2ZXIgPSBzZXJ2ZXJMb2FkZWQgJiYgaXNQbGF0Zm9ybVNlcnZlcihwbGF0Zm9ybUlkKTtcbiAgfVxuXG4gIC8qKiBBZGQgZ2VuZXJhdGVkIHN0eWxlcyAqL1xuICBwcm90ZWN0ZWQgdXBkYXRlV2l0aFZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICBjb25zdCBzdHlsZXMgPSB0aGlzLmJ1aWxkU3R5bGVNYXAodmFsdWUpO1xuICAgIHRoaXMubmdTdHlsZUluc3RhbmNlLm5nU3R5bGUgPSB7Li4udGhpcy5mYWxsYmFja1N0eWxlcywgLi4uc3R5bGVzfTtcbiAgICBpZiAodGhpcy5pc1NlcnZlcikge1xuICAgICAgdGhpcy5hcHBseVN0eWxlVG9FbGVtZW50KHN0eWxlcyk7XG4gICAgfVxuICAgIHRoaXMubmdTdHlsZUluc3RhbmNlLm5nRG9DaGVjaygpO1xuICB9XG5cbiAgLyoqIFJlbW92ZSBnZW5lcmF0ZWQgc3R5bGVzICovXG4gIHByb3RlY3RlZCBjbGVhclN0eWxlcygpIHtcbiAgICB0aGlzLm5nU3R5bGVJbnN0YW5jZS5uZ1N0eWxlID0gdGhpcy5mYWxsYmFja1N0eWxlcztcbiAgICB0aGlzLm5nU3R5bGVJbnN0YW5jZS5uZ0RvQ2hlY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IHJhdyBzdHJpbmdzIHRvIG5nU3R5bGVNYXA7IHdoaWNoIGlzIHJlcXVpcmVkIGJ5IG5nU3R5bGVcbiAgICogTk9URTogUmF3IHN0cmluZyBrZXktdmFsdWUgcGFpcnMgTVVTVCBiZSBkZWxpbWl0ZWQgYnkgYDtgXG4gICAqICAgICAgIENvbW1hLWRlbGltaXRlcnMgYXJlIG5vdCBzdXBwb3J0ZWQgZHVlIHRvIGNvbXBsZXhpdGllcyBvZlxuICAgKiAgICAgICBwb3NzaWJsZSBzdHlsZSB2YWx1ZXMgc3VjaCBhcyBgcmdiYSh4LHgseCx4KWAgYW5kIG90aGVyc1xuICAgKi9cbiAgcHJvdGVjdGVkIGJ1aWxkU3R5bGVNYXAoc3R5bGVzOiBOZ1N0eWxlVHlwZSk6IE5nU3R5bGVNYXAge1xuICAgIC8vIEFsd2F5cyBzYWZlLWd1YXJkIChha2Egc2FuaXRpemUpIHN0eWxlIHByb3BlcnR5IHZhbHVlc1xuICAgIGNvbnN0IHNhbml0aXplcjogTmdTdHlsZVNhbml0aXplciA9ICh2YWw6IGFueSkgPT5cbiAgICAgIHRoaXMuc2FuaXRpemVyLnNhbml0aXplKFNlY3VyaXR5Q29udGV4dC5TVFlMRSwgdmFsKSA/PyAnJztcbiAgICBpZiAoc3R5bGVzKSB7XG4gICAgICBzd2l0Y2ggKGdldFR5cGUoc3R5bGVzKSkge1xuICAgICAgICBjYXNlICdzdHJpbmcnOiAgcmV0dXJuIGJ1aWxkTWFwRnJvbUxpc3QoYnVpbGRSYXdMaXN0KHN0eWxlcyksXG4gICAgICAgICAgc2FuaXRpemVyKTtcbiAgICAgICAgY2FzZSAnYXJyYXknIDogIHJldHVybiBidWlsZE1hcEZyb21MaXN0KHN0eWxlcyBhcyBOZ1N0eWxlUmF3TGlzdCwgc2FuaXRpemVyKTtcbiAgICAgICAgY2FzZSAnc2V0JyAgIDogIHJldHVybiBidWlsZE1hcEZyb21TZXQoc3R5bGVzLCBzYW5pdGl6ZXIpO1xuICAgICAgICBkZWZhdWx0ICAgICAgOiAgcmV0dXJuIGJ1aWxkTWFwRnJvbVNldChzdHlsZXMsIHNhbml0aXplcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gIC8vIExpZmVjeWNsZSBIb29rc1xuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuICAvKiogRm9yIENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lm9uUHVzaCBhbmQgbmdPbkNoYW5nZXMoKSB1cGRhdGVzICovXG4gIG5nRG9DaGVjaygpIHtcbiAgICB0aGlzLm5nU3R5bGVJbnN0YW5jZS5uZ0RvQ2hlY2soKTtcbiAgfVxufVxuXG5jb25zdCBpbnB1dHMgPSBbXG4gICduZ1N0eWxlJyxcbiAgJ25nU3R5bGUueHMnLCAnbmdTdHlsZS5zbScsICduZ1N0eWxlLm1kJywgJ25nU3R5bGUubGcnLCAnbmdTdHlsZS54bCcsXG4gICduZ1N0eWxlLmx0LXNtJywgJ25nU3R5bGUubHQtbWQnLCAnbmdTdHlsZS5sdC1sZycsICduZ1N0eWxlLmx0LXhsJyxcbiAgJ25nU3R5bGUuZ3QteHMnLCAnbmdTdHlsZS5ndC1zbScsICduZ1N0eWxlLmd0LW1kJywgJ25nU3R5bGUuZ3QtbGcnXG5dO1xuXG5jb25zdCBzZWxlY3RvciA9IGBcbiAgW25nU3R5bGVdLFxuICBbbmdTdHlsZS54c10sIFtuZ1N0eWxlLnNtXSwgW25nU3R5bGUubWRdLCBbbmdTdHlsZS5sZ10sIFtuZ1N0eWxlLnhsXSxcbiAgW25nU3R5bGUubHQtc21dLCBbbmdTdHlsZS5sdC1tZF0sIFtuZ1N0eWxlLmx0LWxnXSwgW25nU3R5bGUubHQteGxdLFxuICBbbmdTdHlsZS5ndC14c10sIFtuZ1N0eWxlLmd0LXNtXSwgW25nU3R5bGUuZ3QtbWRdLCBbbmdTdHlsZS5ndC1sZ11cbmA7XG5cbi8qKlxuICogRGlyZWN0aXZlIHRvIGFkZCByZXNwb25zaXZlIHN1cHBvcnQgZm9yIG5nU3R5bGUuXG4gKlxuICovXG5ARGlyZWN0aXZlKHtzZWxlY3RvciwgaW5wdXRzfSlcbmV4cG9ydCBjbGFzcyBEZWZhdWx0U3R5bGVEaXJlY3RpdmUgZXh0ZW5kcyBTdHlsZURpcmVjdGl2ZSBpbXBsZW1lbnRzIERvQ2hlY2sge1xuICBwcm90ZWN0ZWQgaW5wdXRzID0gaW5wdXRzO1xufVxuXG4vKiogQnVpbGQgYSBzdHlsZXMgbWFwIGZyb20gYSBsaXN0IG9mIHN0eWxlcywgd2hpbGUgc2FuaXRpemluZyBiYWQgdmFsdWVzIGZpcnN0ICovXG5mdW5jdGlvbiBidWlsZE1hcEZyb21MaXN0KHN0eWxlczogTmdTdHlsZVJhd0xpc3QsIHNhbml0aXplPzogTmdTdHlsZVNhbml0aXplcik6IE5nU3R5bGVNYXAge1xuICBjb25zdCBzYW5pdGl6ZVZhbHVlID0gKGl0OiBOZ1N0eWxlS2V5VmFsdWUpID0+IHtcbiAgICBpZiAoc2FuaXRpemUpIHtcbiAgICAgIGl0LnZhbHVlID0gc2FuaXRpemUoaXQudmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gaXQ7XG4gIH07XG5cbiAgcmV0dXJuIHN0eWxlc1xuICAgIC5tYXAoc3RyaW5nVG9LZXlWYWx1ZSlcbiAgICAuZmlsdGVyKGVudHJ5ID0+ICEhZW50cnkpXG4gICAgLm1hcChzYW5pdGl6ZVZhbHVlKVxuICAgIC5yZWR1Y2Uoa2V5VmFsdWVzVG9NYXAsIHt9IGFzIE5nU3R5bGVNYXApO1xufVxuIl19
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1mbGV4LWxheW91dC1mbGV4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbGlicy9mbGV4LWxheW91dC9mbGV4L2FuZ3VsYXItZmxleC1sYXlvdXQtZmxleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
|
|
@@ -0,0 +1,291 @@
|
|
|
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 { Directive, Inject, Injectable, Input } from '@angular/core';
|
|
9
|
+
import { BaseDirective2, LAYOUT_CONFIG, validateBasis, StyleBuilder, } from '@angular/flex-layout/core';
|
|
10
|
+
import { takeUntil } from 'rxjs/operators';
|
|
11
|
+
import { extendObject } from '@angular/flex-layout/_private-utils';
|
|
12
|
+
import { isFlowHorizontal } from '@angular/flex-layout/_private-utils';
|
|
13
|
+
import * as i0 from "@angular/core";
|
|
14
|
+
import * as i1 from "@angular/flex-layout/core";
|
|
15
|
+
export class FlexStyleBuilder extends StyleBuilder {
|
|
16
|
+
constructor(layoutConfig) {
|
|
17
|
+
super();
|
|
18
|
+
this.layoutConfig = layoutConfig;
|
|
19
|
+
}
|
|
20
|
+
buildStyles(input, parent) {
|
|
21
|
+
let [grow, shrink, ...basisParts] = input.split(' ');
|
|
22
|
+
let basis = basisParts.join(' ');
|
|
23
|
+
// The flex-direction of this element's flex container. Defaults to 'row'.
|
|
24
|
+
const direction = (parent.direction.indexOf('column') > -1) ? 'column' : 'row';
|
|
25
|
+
const max = isFlowHorizontal(direction) ? 'max-width' : 'max-height';
|
|
26
|
+
const min = isFlowHorizontal(direction) ? 'min-width' : 'min-height';
|
|
27
|
+
const hasCalc = String(basis).indexOf('calc') > -1;
|
|
28
|
+
const usingCalc = hasCalc || (basis === 'auto');
|
|
29
|
+
const isPercent = String(basis).indexOf('%') > -1 && !hasCalc;
|
|
30
|
+
const hasUnits = String(basis).indexOf('px') > -1 || String(basis).indexOf('rem') > -1 ||
|
|
31
|
+
String(basis).indexOf('em') > -1 || String(basis).indexOf('vw') > -1 ||
|
|
32
|
+
String(basis).indexOf('vh') > -1;
|
|
33
|
+
let isValue = (hasCalc || hasUnits);
|
|
34
|
+
grow = (grow == '0') ? 0 : grow;
|
|
35
|
+
shrink = (shrink == '0') ? 0 : shrink;
|
|
36
|
+
// make box inflexible when shrink and grow are both zero
|
|
37
|
+
// should not set a min when the grow is zero
|
|
38
|
+
// should not set a max when the shrink is zero
|
|
39
|
+
const isFixed = !grow && !shrink;
|
|
40
|
+
let css = {};
|
|
41
|
+
// flex-basis allows you to specify the initial/starting main-axis size of the element,
|
|
42
|
+
// before anything else is computed. It can either be a percentage or an absolute value.
|
|
43
|
+
// It is, however, not the breaking point for flex-grow/shrink properties
|
|
44
|
+
//
|
|
45
|
+
// flex-grow can be seen as this:
|
|
46
|
+
// 0: Do not stretch. Either size to element's content width, or obey 'flex-basis'.
|
|
47
|
+
// 1: (Default value). Stretch; will be the same size to all other flex items on
|
|
48
|
+
// the same row since they have a default value of 1.
|
|
49
|
+
// ≥2 (integer n): Stretch. Will be n times the size of other elements
|
|
50
|
+
// with 'flex-grow: 1' on the same row.
|
|
51
|
+
// Use `null` to clear existing styles.
|
|
52
|
+
const clearStyles = {
|
|
53
|
+
'max-width': null,
|
|
54
|
+
'max-height': null,
|
|
55
|
+
'min-width': null,
|
|
56
|
+
'min-height': null
|
|
57
|
+
};
|
|
58
|
+
switch (basis || '') {
|
|
59
|
+
case '':
|
|
60
|
+
const useColumnBasisZero = this.layoutConfig.useColumnBasisZero !== false;
|
|
61
|
+
basis = direction === 'row' ? '0%' : (useColumnBasisZero ? '0.000000001px' : 'auto');
|
|
62
|
+
break;
|
|
63
|
+
case 'initial': // default
|
|
64
|
+
case 'nogrow':
|
|
65
|
+
grow = 0;
|
|
66
|
+
basis = 'auto';
|
|
67
|
+
break;
|
|
68
|
+
case 'grow':
|
|
69
|
+
basis = '100%';
|
|
70
|
+
break;
|
|
71
|
+
case 'noshrink':
|
|
72
|
+
shrink = 0;
|
|
73
|
+
basis = 'auto';
|
|
74
|
+
break;
|
|
75
|
+
case 'auto':
|
|
76
|
+
break;
|
|
77
|
+
case 'none':
|
|
78
|
+
grow = 0;
|
|
79
|
+
shrink = 0;
|
|
80
|
+
basis = 'auto';
|
|
81
|
+
break;
|
|
82
|
+
default:
|
|
83
|
+
// Defaults to percentage sizing unless `px` is explicitly set
|
|
84
|
+
if (!isValue && !isPercent && !isNaN(basis)) {
|
|
85
|
+
basis = basis + '%';
|
|
86
|
+
}
|
|
87
|
+
// Fix for issue 280
|
|
88
|
+
if (basis === '0%') {
|
|
89
|
+
isValue = true;
|
|
90
|
+
}
|
|
91
|
+
if (basis === '0px') {
|
|
92
|
+
basis = '0%';
|
|
93
|
+
}
|
|
94
|
+
// fix issue #5345
|
|
95
|
+
if (hasCalc) {
|
|
96
|
+
css = extendObject(clearStyles, {
|
|
97
|
+
'flex-grow': grow,
|
|
98
|
+
'flex-shrink': shrink,
|
|
99
|
+
'flex-basis': isValue ? basis : '100%'
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
css = extendObject(clearStyles, {
|
|
104
|
+
'flex': `${grow} ${shrink} ${isValue ? basis : '100%'}`
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
break;
|
|
108
|
+
}
|
|
109
|
+
if (!(css['flex'] || css['flex-grow'])) {
|
|
110
|
+
if (hasCalc) {
|
|
111
|
+
css = extendObject(clearStyles, {
|
|
112
|
+
'flex-grow': grow,
|
|
113
|
+
'flex-shrink': shrink,
|
|
114
|
+
'flex-basis': basis
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
css = extendObject(clearStyles, {
|
|
119
|
+
'flex': `${grow} ${shrink} ${basis}`
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// Fix for issues 277, 534, and 728
|
|
124
|
+
if (basis !== '0%' && basis !== '0px' && basis !== '0.000000001px' && basis !== 'auto') {
|
|
125
|
+
css[min] = isFixed || (isValue && grow) ? basis : null;
|
|
126
|
+
css[max] = isFixed || (!usingCalc && shrink) ? basis : null;
|
|
127
|
+
}
|
|
128
|
+
// Fix for issue 528
|
|
129
|
+
if (!css[min] && !css[max]) {
|
|
130
|
+
if (hasCalc) {
|
|
131
|
+
css = extendObject(clearStyles, {
|
|
132
|
+
'flex-grow': grow,
|
|
133
|
+
'flex-shrink': shrink,
|
|
134
|
+
'flex-basis': basis
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
css = extendObject(clearStyles, {
|
|
139
|
+
'flex': `${grow} ${shrink} ${basis}`
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
// Fix for issue 660
|
|
145
|
+
if (parent.hasWrap) {
|
|
146
|
+
css[hasCalc ? 'flex-basis' : 'flex'] = css[max] ?
|
|
147
|
+
(hasCalc ? css[max] : `${grow} ${shrink} ${css[max]}`) :
|
|
148
|
+
(hasCalc ? css[min] : `${grow} ${shrink} ${css[min]}`);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return extendObject(css, { 'box-sizing': 'border-box' });
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
FlexStyleBuilder.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: FlexStyleBuilder, deps: [{ token: LAYOUT_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
155
|
+
FlexStyleBuilder.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: FlexStyleBuilder, providedIn: 'root' });
|
|
156
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: FlexStyleBuilder, decorators: [{
|
|
157
|
+
type: Injectable,
|
|
158
|
+
args: [{ providedIn: 'root' }]
|
|
159
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
160
|
+
type: Inject,
|
|
161
|
+
args: [LAYOUT_CONFIG]
|
|
162
|
+
}] }]; } });
|
|
163
|
+
const inputs = [
|
|
164
|
+
'fxFlex', 'fxFlex.xs', 'fxFlex.sm', 'fxFlex.md',
|
|
165
|
+
'fxFlex.lg', 'fxFlex.xl', 'fxFlex.lt-sm', 'fxFlex.lt-md',
|
|
166
|
+
'fxFlex.lt-lg', 'fxFlex.lt-xl', 'fxFlex.gt-xs', 'fxFlex.gt-sm',
|
|
167
|
+
'fxFlex.gt-md', 'fxFlex.gt-lg'
|
|
168
|
+
];
|
|
169
|
+
const selector = `
|
|
170
|
+
[fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md],
|
|
171
|
+
[fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md],
|
|
172
|
+
[fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm],
|
|
173
|
+
[fxFlex.gt-md], [fxFlex.gt-lg]
|
|
174
|
+
`;
|
|
175
|
+
/**
|
|
176
|
+
* Directive to control the size of a flex item using flex-basis, flex-grow, and flex-shrink.
|
|
177
|
+
* Corresponds to the css `flex` shorthand property.
|
|
178
|
+
*
|
|
179
|
+
* @see https://css-tricks.com/snippets/css/a-guide-to-flexbox/
|
|
180
|
+
*/
|
|
181
|
+
export class FlexDirective extends BaseDirective2 {
|
|
182
|
+
constructor(elRef, styleUtils, layoutConfig, styleBuilder, marshal) {
|
|
183
|
+
super(elRef, styleBuilder, styleUtils, marshal);
|
|
184
|
+
this.layoutConfig = layoutConfig;
|
|
185
|
+
this.marshal = marshal;
|
|
186
|
+
this.DIRECTIVE_KEY = 'flex';
|
|
187
|
+
this.direction = undefined;
|
|
188
|
+
this.wrap = undefined;
|
|
189
|
+
this.flexGrow = '1';
|
|
190
|
+
this.flexShrink = '1';
|
|
191
|
+
this.init();
|
|
192
|
+
}
|
|
193
|
+
get shrink() { return this.flexShrink; }
|
|
194
|
+
set shrink(value) {
|
|
195
|
+
this.flexShrink = value || '1';
|
|
196
|
+
this.triggerReflow();
|
|
197
|
+
}
|
|
198
|
+
get grow() { return this.flexGrow; }
|
|
199
|
+
set grow(value) {
|
|
200
|
+
this.flexGrow = value || '1';
|
|
201
|
+
this.triggerReflow();
|
|
202
|
+
}
|
|
203
|
+
ngOnInit() {
|
|
204
|
+
if (this.parentElement) {
|
|
205
|
+
this.marshal.trackValue(this.parentElement, 'layout')
|
|
206
|
+
.pipe(takeUntil(this.destroySubject))
|
|
207
|
+
.subscribe(this.onLayoutChange.bind(this));
|
|
208
|
+
this.marshal.trackValue(this.nativeElement, 'layout-align')
|
|
209
|
+
.pipe(takeUntil(this.destroySubject))
|
|
210
|
+
.subscribe(this.triggerReflow.bind(this));
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Caches the parent container's 'flex-direction' and updates the element's style.
|
|
215
|
+
* Used as a handler for layout change events from the parent flex container.
|
|
216
|
+
*/
|
|
217
|
+
onLayoutChange(matcher) {
|
|
218
|
+
const layout = matcher.value;
|
|
219
|
+
const layoutParts = layout.split(' ');
|
|
220
|
+
this.direction = layoutParts[0];
|
|
221
|
+
this.wrap = layoutParts[1] !== undefined && layoutParts[1] === 'wrap';
|
|
222
|
+
this.triggerUpdate();
|
|
223
|
+
}
|
|
224
|
+
/** Input to this is exclusively the basis input value */
|
|
225
|
+
updateWithValue(value) {
|
|
226
|
+
const addFlexToParent = this.layoutConfig.addFlexToParent !== false;
|
|
227
|
+
if (this.direction === undefined) {
|
|
228
|
+
this.direction = this.getFlexFlowDirection(this.parentElement, addFlexToParent);
|
|
229
|
+
}
|
|
230
|
+
if (this.wrap === undefined) {
|
|
231
|
+
this.wrap = this.hasWrap(this.parentElement);
|
|
232
|
+
}
|
|
233
|
+
const direction = this.direction;
|
|
234
|
+
const isHorizontal = direction.startsWith('row');
|
|
235
|
+
const hasWrap = this.wrap;
|
|
236
|
+
if (isHorizontal && hasWrap) {
|
|
237
|
+
this.styleCache = flexRowWrapCache;
|
|
238
|
+
}
|
|
239
|
+
else if (isHorizontal && !hasWrap) {
|
|
240
|
+
this.styleCache = flexRowCache;
|
|
241
|
+
}
|
|
242
|
+
else if (!isHorizontal && hasWrap) {
|
|
243
|
+
this.styleCache = flexColumnWrapCache;
|
|
244
|
+
}
|
|
245
|
+
else if (!isHorizontal && !hasWrap) {
|
|
246
|
+
this.styleCache = flexColumnCache;
|
|
247
|
+
}
|
|
248
|
+
const basis = String(value).replace(';', '');
|
|
249
|
+
const parts = validateBasis(basis, this.flexGrow, this.flexShrink);
|
|
250
|
+
this.addStyles(parts.join(' '), { direction, hasWrap });
|
|
251
|
+
}
|
|
252
|
+
/** Trigger a style reflow, usually based on a shrink/grow input event */
|
|
253
|
+
triggerReflow() {
|
|
254
|
+
const activatedValue = this.activatedValue;
|
|
255
|
+
if (activatedValue !== undefined) {
|
|
256
|
+
const parts = validateBasis(activatedValue + '', this.flexGrow, this.flexShrink);
|
|
257
|
+
this.marshal.updateElement(this.nativeElement, this.DIRECTIVE_KEY, parts.join(' '));
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
FlexDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: FlexDirective, deps: [{ token: i0.ElementRef }, { token: i1.StyleUtils }, { token: LAYOUT_CONFIG }, { token: FlexStyleBuilder }, { token: i1.MediaMarshaller }], target: i0.ɵɵFactoryTarget.Directive });
|
|
262
|
+
FlexDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.2", type: FlexDirective, inputs: { shrink: ["fxShrink", "shrink"], grow: ["fxGrow", "grow"] }, usesInheritance: true, ngImport: i0 });
|
|
263
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: FlexDirective, decorators: [{
|
|
264
|
+
type: Directive
|
|
265
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.StyleUtils }, { type: undefined, decorators: [{
|
|
266
|
+
type: Inject,
|
|
267
|
+
args: [LAYOUT_CONFIG]
|
|
268
|
+
}] }, { type: FlexStyleBuilder }, { type: i1.MediaMarshaller }]; }, propDecorators: { shrink: [{
|
|
269
|
+
type: Input,
|
|
270
|
+
args: ['fxShrink']
|
|
271
|
+
}], grow: [{
|
|
272
|
+
type: Input,
|
|
273
|
+
args: ['fxGrow']
|
|
274
|
+
}] } });
|
|
275
|
+
export class DefaultFlexDirective extends FlexDirective {
|
|
276
|
+
constructor() {
|
|
277
|
+
super(...arguments);
|
|
278
|
+
this.inputs = inputs;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
DefaultFlexDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: DefaultFlexDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
282
|
+
DefaultFlexDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.2", type: DefaultFlexDirective, selector: "\n [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md],\n [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md],\n [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm],\n [fxFlex.gt-md], [fxFlex.gt-lg]\n", inputs: { fxFlex: "fxFlex", "fxFlex.xs": "fxFlex.xs", "fxFlex.sm": "fxFlex.sm", "fxFlex.md": "fxFlex.md", "fxFlex.lg": "fxFlex.lg", "fxFlex.xl": "fxFlex.xl", "fxFlex.lt-sm": "fxFlex.lt-sm", "fxFlex.lt-md": "fxFlex.lt-md", "fxFlex.lt-lg": "fxFlex.lt-lg", "fxFlex.lt-xl": "fxFlex.lt-xl", "fxFlex.gt-xs": "fxFlex.gt-xs", "fxFlex.gt-sm": "fxFlex.gt-sm", "fxFlex.gt-md": "fxFlex.gt-md", "fxFlex.gt-lg": "fxFlex.gt-lg" }, usesInheritance: true, ngImport: i0 });
|
|
283
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: DefaultFlexDirective, decorators: [{
|
|
284
|
+
type: Directive,
|
|
285
|
+
args: [{ inputs, selector }]
|
|
286
|
+
}] });
|
|
287
|
+
const flexRowCache = new Map();
|
|
288
|
+
const flexColumnCache = new Map();
|
|
289
|
+
const flexRowWrapCache = new Map();
|
|
290
|
+
const flexColumnWrapCache = new Map();
|
|
291
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxleC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpYnMvZmxleC1sYXlvdXQvZmxleC9mbGV4L2ZsZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBQ0gsT0FBTyxFQUFDLFNBQVMsRUFBYyxNQUFNLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBUyxNQUFNLGVBQWUsQ0FBQztBQUN2RixPQUFPLEVBQ0wsY0FBYyxFQUVkLGFBQWEsRUFFYixhQUFhLEVBQ2IsWUFBWSxHQUliLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXpDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUNqRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQzs7O0FBUXJFLE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxZQUFZO0lBQ2hELFlBQTZDLFlBQWlDO1FBQzVFLEtBQUssRUFBRSxDQUFDO1FBRG1DLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtJQUU5RSxDQUFDO0lBQ0QsV0FBVyxDQUFDLEtBQWEsRUFBRSxNQUF5QjtRQUNsRCxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQyxHQUFzQixLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hFLElBQUksS0FBSyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFakMsMEVBQTBFO1FBQzFFLE1BQU0sU0FBUyxHQUFHLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFFL0UsTUFBTSxHQUFHLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO1FBQ3JFLE1BQU0sR0FBRyxHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztRQUVyRSxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ25ELE1BQU0sU0FBUyxHQUFHLE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxNQUFNLENBQUMsQ0FBQztRQUNoRCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQzlELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDcEYsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNwRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRW5DLElBQUksT0FBTyxHQUFHLENBQUMsT0FBTyxJQUFJLFFBQVEsQ0FBQyxDQUFDO1FBRXBDLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDaEMsTUFBTSxHQUFHLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUV0Qyx5REFBeUQ7UUFDekQsNkNBQTZDO1FBQzdDLCtDQUErQztRQUMvQyxNQUFNLE9BQU8sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUVqQyxJQUFJLEdBQUcsR0FBNEMsRUFBRSxDQUFDO1FBRXRELHVGQUF1RjtRQUN2Rix3RkFBd0Y7UUFDeEYseUVBQXlFO1FBQ3pFLEVBQUU7UUFDRixpQ0FBaUM7UUFDakMscUZBQXFGO1FBQ3JGLGtGQUFrRjtRQUNsRiwyREFBMkQ7UUFDM0Qsd0VBQXdFO1FBQ3hFLDRDQUE0QztRQUU1Qyx1Q0FBdUM7UUFDdkMsTUFBTSxXQUFXLEdBQUc7WUFDbEIsV0FBVyxFQUFFLElBQUk7WUFDakIsWUFBWSxFQUFFLElBQUk7WUFDbEIsV0FBVyxFQUFFLElBQUk7WUFDakIsWUFBWSxFQUFFLElBQUk7U0FDbkIsQ0FBQztRQUNGLFFBQVEsS0FBSyxJQUFJLEVBQUUsRUFBRTtZQUNuQixLQUFLLEVBQUU7Z0JBQ0wsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixLQUFLLEtBQUssQ0FBQztnQkFDMUUsS0FBSyxHQUFHLFNBQVMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDckYsTUFBTTtZQUNSLEtBQUssU0FBUyxDQUFDLENBQUcsVUFBVTtZQUM1QixLQUFLLFFBQVE7Z0JBQ1gsSUFBSSxHQUFHLENBQUMsQ0FBQztnQkFDVCxLQUFLLEdBQUcsTUFBTSxDQUFDO2dCQUNmLE1BQU07WUFDUixLQUFLLE1BQU07Z0JBQ1QsS0FBSyxHQUFHLE1BQU0sQ0FBQztnQkFDZixNQUFNO1lBQ1IsS0FBSyxVQUFVO2dCQUNiLE1BQU0sR0FBRyxDQUFDLENBQUM7Z0JBQ1gsS0FBSyxHQUFHLE1BQU0sQ0FBQztnQkFDZixNQUFNO1lBQ1IsS0FBSyxNQUFNO2dCQUNULE1BQU07WUFDUixLQUFLLE1BQU07Z0JBQ1QsSUFBSSxHQUFHLENBQUMsQ0FBQztnQkFDVCxNQUFNLEdBQUcsQ0FBQyxDQUFDO2dCQUNYLEtBQUssR0FBRyxNQUFNLENBQUM7Z0JBQ2YsTUFBTTtZQUNSO2dCQUNFLDhEQUE4RDtnQkFDOUQsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFZLENBQUMsRUFBRTtvQkFDbEQsS0FBSyxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUM7aUJBQ3JCO2dCQUVELG9CQUFvQjtnQkFDcEIsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFO29CQUNsQixPQUFPLEdBQUcsSUFBSSxDQUFDO2lCQUNoQjtnQkFFRCxJQUFJLEtBQUssS0FBSyxLQUFLLEVBQUU7b0JBQ25CLEtBQUssR0FBRyxJQUFJLENBQUM7aUJBQ2Q7Z0JBRUQsa0JBQWtCO2dCQUNsQixJQUFJLE9BQU8sRUFBRTtvQkFDWCxHQUFHLEdBQUcsWUFBWSxDQUFDLFdBQVcsRUFBRTt3QkFDOUIsV0FBVyxFQUFFLElBQUk7d0JBQ2pCLGFBQWEsRUFBRSxNQUFNO3dCQUNyQixZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU07cUJBQ3ZDLENBQUMsQ0FBQztpQkFDSjtxQkFBTTtvQkFDTCxHQUFHLEdBQUcsWUFBWSxDQUFDLFdBQVcsRUFBRTt3QkFDOUIsTUFBTSxFQUFFLEdBQUcsSUFBSSxJQUFJLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFO3FCQUN4RCxDQUFDLENBQUM7aUJBQ0o7Z0JBRUQsTUFBTTtTQUNUO1FBRUQsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFO1lBQ3RDLElBQUksT0FBTyxFQUFFO2dCQUNYLEdBQUcsR0FBRyxZQUFZLENBQUMsV0FBVyxFQUFFO29CQUM5QixXQUFXLEVBQUUsSUFBSTtvQkFDakIsYUFBYSxFQUFFLE1BQU07b0JBQ3JCLFlBQVksRUFBRSxLQUFLO2lCQUNwQixDQUFDLENBQUM7YUFDSjtpQkFBTTtnQkFDTCxHQUFHLEdBQUcsWUFBWSxDQUFDLFdBQVcsRUFBRTtvQkFDOUIsTUFBTSxFQUFFLEdBQUcsSUFBSSxJQUFJLE1BQU0sSUFBSSxLQUFLLEVBQUU7aUJBQ3JDLENBQUMsQ0FBQzthQUNKO1NBQ0Y7UUFFRCxtQ0FBbUM7UUFDbkMsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLElBQUksS0FBSyxLQUFLLGVBQWUsSUFBSSxLQUFLLEtBQUssTUFBTSxFQUFFO1lBQ3RGLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3ZELEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLElBQUksQ0FBQyxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7U0FDN0Q7UUFFRCxvQkFBb0I7UUFDcEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUMxQixJQUFJLE9BQU8sRUFBRTtnQkFDWCxHQUFHLEdBQUcsWUFBWSxDQUFDLFdBQVcsRUFBRTtvQkFDOUIsV0FBVyxFQUFFLElBQUk7b0JBQ2pCLGFBQWEsRUFBRSxNQUFNO29CQUNyQixZQUFZLEVBQUUsS0FBSztpQkFDcEIsQ0FBQyxDQUFDO2FBQ0o7aUJBQU07Z0JBQ0wsR0FBRyxHQUFHLFlBQVksQ0FBQyxXQUFXLEVBQUU7b0JBQzlCLE1BQU0sRUFBRSxHQUFHLElBQUksSUFBSSxNQUFNLElBQUksS0FBSyxFQUFFO2lCQUNyQyxDQUFDLENBQUM7YUFDSjtTQUNGO2FBQU07WUFDTCxvQkFBb0I7WUFDcEIsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFO2dCQUNsQixHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUMvQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksSUFBSSxNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN4RCxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksSUFBSSxNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUMxRDtTQUNGO1FBRUQsT0FBTyxZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUMsWUFBWSxFQUFFLFlBQVksRUFBQyxDQUFvQixDQUFDO0lBQzVFLENBQUM7OzZHQXJKVSxnQkFBZ0Isa0JBQ1AsYUFBYTtpSEFEdEIsZ0JBQWdCLGNBREosTUFBTTsyRkFDbEIsZ0JBQWdCO2tCQUQ1QixVQUFVO21CQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQzs7MEJBRWpCLE1BQU07MkJBQUMsYUFBYTs7QUF1Sm5DLE1BQU0sTUFBTSxHQUFHO0lBQ2IsUUFBUSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVztJQUMvQyxXQUFXLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxjQUFjO0lBQ3hELGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWM7SUFDOUQsY0FBYyxFQUFFLGNBQWM7Q0FDL0IsQ0FBQztBQUNGLE1BQU0sUUFBUSxHQUFHOzs7OztDQUtoQixDQUFDO0FBRUY7Ozs7O0dBS0c7QUFFSCxNQUFNLE9BQU8sYUFBYyxTQUFRLGNBQWM7SUF3Qi9DLFlBQVksS0FBaUIsRUFDakIsVUFBc0IsRUFDVyxZQUFpQyxFQUNsRSxZQUE4QixFQUNwQixPQUF3QjtRQUM1QyxLQUFLLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFITCxpQkFBWSxHQUFaLFlBQVksQ0FBcUI7UUFFeEQsWUFBTyxHQUFQLE9BQU8sQ0FBaUI7UUExQnBDLGtCQUFhLEdBQUcsTUFBTSxDQUFDO1FBQ3ZCLGNBQVMsR0FBWSxTQUFTLENBQUM7UUFDL0IsU0FBSSxHQUFhLFNBQVMsQ0FBQztRQWlCM0IsYUFBUSxHQUFHLEdBQUcsQ0FBQztRQUNmLGVBQVUsR0FBRyxHQUFHLENBQUM7UUFRekIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQXhCRCxJQUNJLE1BQU0sS0FBYSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQ2hELElBQUksTUFBTSxDQUFDLEtBQWE7UUFDdEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLElBQUksR0FBRyxDQUFDO1FBQy9CLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFDSSxJQUFJLEtBQWEsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUM1QyxJQUFJLElBQUksQ0FBQyxLQUFhO1FBQ3BCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxJQUFJLEdBQUcsQ0FBQztRQUM3QixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQWNELFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUM7aUJBQ2xELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2lCQUNwQyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLGNBQWMsQ0FBQztpQkFDeEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7aUJBQ3BDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQzdDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNPLGNBQWMsQ0FBQyxPQUF1QjtRQUM5QyxNQUFNLE1BQU0sR0FBVyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ3JDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSyxNQUFNLENBQUM7UUFDdEUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCx5REFBeUQ7SUFDL0MsZUFBZSxDQUFDLEtBQWE7UUFDckMsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLEtBQUssS0FBSyxDQUFDO1FBQ3BFLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUU7WUFDaEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLGFBQWMsRUFBRSxlQUFlLENBQUMsQ0FBQztTQUNsRjtRQUNELElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUU7WUFDM0IsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFjLENBQUMsQ0FBQztTQUMvQztRQUNELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDakMsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzFCLElBQUksWUFBWSxJQUFJLE9BQU8sRUFBRTtZQUMzQixJQUFJLENBQUMsVUFBVSxHQUFHLGdCQUFnQixDQUFDO1NBQ3BDO2FBQU0sSUFBSSxZQUFZLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDbkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxZQUFZLENBQUM7U0FDaEM7YUFBTSxJQUFJLENBQUMsWUFBWSxJQUFJLE9BQU8sRUFBRTtZQUNuQyxJQUFJLENBQUMsVUFBVSxHQUFHLG1CQUFtQixDQUFDO1NBQ3ZDO2FBQU0sSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNwQyxJQUFJLENBQUMsVUFBVSxHQUFHLGVBQWUsQ0FBQztTQUNuQztRQUNELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzdDLE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUMsU0FBUyxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELHlFQUF5RTtJQUMvRCxhQUFhO1FBQ3JCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDM0MsSUFBSSxjQUFjLEtBQUssU0FBUyxFQUFFO1lBQ2hDLE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxjQUFjLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2pGLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDckY7SUFDSCxDQUFDOzswR0F6RlUsYUFBYSxzRUEwQkosYUFBYSxhQUNQLGdCQUFnQjs4RkEzQi9CLGFBQWE7MkZBQWIsYUFBYTtrQkFEekIsU0FBUzs7MEJBMkJLLE1BQU07MkJBQUMsYUFBYTs4QkFDUCxnQkFBZ0Isd0RBbkJ0QyxNQUFNO3NCQURULEtBQUs7dUJBQUMsVUFBVTtnQkFRYixJQUFJO3NCQURQLEtBQUs7dUJBQUMsUUFBUTs7QUErRWpCLE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxhQUFhO0lBRHZEOztRQUVZLFdBQU0sR0FBRyxNQUFNLENBQUM7S0FDM0I7O2lIQUZZLG9CQUFvQjtxR0FBcEIsb0JBQW9COzJGQUFwQixvQkFBb0I7a0JBRGhDLFNBQVM7bUJBQUMsRUFBQyxNQUFNLEVBQUUsUUFBUSxFQUFDOztBQUs3QixNQUFNLFlBQVksR0FBaUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUM3RCxNQUFNLGVBQWUsR0FBaUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNoRSxNQUFNLGdCQUFnQixHQUFpQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ2pFLE1BQU0sbUJBQW1CLEdBQWlDLElBQUksR0FBRyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmltcG9ydCB7RGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbmplY3QsIEluamVjdGFibGUsIElucHV0LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQmFzZURpcmVjdGl2ZTIsXG4gIExheW91dENvbmZpZ09wdGlvbnMsXG4gIExBWU9VVF9DT05GSUcsXG4gIFN0eWxlVXRpbHMsXG4gIHZhbGlkYXRlQmFzaXMsXG4gIFN0eWxlQnVpbGRlcixcbiAgU3R5bGVEZWZpbml0aW9uLFxuICBNZWRpYU1hcnNoYWxsZXIsXG4gIEVsZW1lbnRNYXRjaGVyLFxufSBmcm9tICdAYW5ndWxhci9mbGV4LWxheW91dC9jb3JlJztcbmltcG9ydCB7dGFrZVVudGlsfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7ZXh0ZW5kT2JqZWN0fSBmcm9tICdAYW5ndWxhci9mbGV4LWxheW91dC9fcHJpdmF0ZS11dGlscyc7XG5pbXBvcnQge2lzRmxvd0hvcml6b250YWx9IGZyb20gJ0Bhbmd1bGFyL2ZsZXgtbGF5b3V0L19wcml2YXRlLXV0aWxzJztcblxuaW50ZXJmYWNlIEZsZXhCdWlsZGVyUGFyZW50IHtcbiAgZGlyZWN0aW9uOiBzdHJpbmc7XG4gIGhhc1dyYXA6IGJvb2xlYW47XG59XG5cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIEZsZXhTdHlsZUJ1aWxkZXIgZXh0ZW5kcyBTdHlsZUJ1aWxkZXIge1xuICBjb25zdHJ1Y3RvcihASW5qZWN0KExBWU9VVF9DT05GSUcpIHByb3RlY3RlZCBsYXlvdXRDb25maWc6IExheW91dENvbmZpZ09wdGlvbnMpIHtcbiAgICBzdXBlcigpO1xuICB9XG4gIGJ1aWxkU3R5bGVzKGlucHV0OiBzdHJpbmcsIHBhcmVudDogRmxleEJ1aWxkZXJQYXJlbnQpIHtcbiAgICBsZXQgW2dyb3csIHNocmluaywgLi4uYmFzaXNQYXJ0c106IChzdHJpbmd8bnVtYmVyKVtdID0gaW5wdXQuc3BsaXQoJyAnKTtcbiAgICBsZXQgYmFzaXMgPSBiYXNpc1BhcnRzLmpvaW4oJyAnKTtcblxuICAgIC8vIFRoZSBmbGV4LWRpcmVjdGlvbiBvZiB0aGlzIGVsZW1lbnQncyBmbGV4IGNvbnRhaW5lci4gRGVmYXVsdHMgdG8gJ3JvdycuXG4gICAgY29uc3QgZGlyZWN0aW9uID0gKHBhcmVudC5kaXJlY3Rpb24uaW5kZXhPZignY29sdW1uJykgPiAtMSkgPyAnY29sdW1uJyA6ICdyb3cnO1xuXG4gICAgY29uc3QgbWF4ID0gaXNGbG93SG9yaXpvbnRhbChkaXJlY3Rpb24pID8gJ21heC13aWR0aCcgOiAnbWF4LWhlaWdodCc7XG4gICAgY29uc3QgbWluID0gaXNGbG93SG9yaXpvbnRhbChkaXJlY3Rpb24pID8gJ21pbi13aWR0aCcgOiAnbWluLWhlaWdodCc7XG5cbiAgICBjb25zdCBoYXNDYWxjID0gU3RyaW5nKGJhc2lzKS5pbmRleE9mKCdjYWxjJykgPiAtMTtcbiAgICBjb25zdCB1c2luZ0NhbGMgPSBoYXNDYWxjIHx8IChiYXNpcyA9PT0gJ2F1dG8nKTtcbiAgICBjb25zdCBpc1BlcmNlbnQgPSBTdHJpbmcoYmFzaXMpLmluZGV4T2YoJyUnKSA+IC0xICYmICFoYXNDYWxjO1xuICAgIGNvbnN0IGhhc1VuaXRzID0gU3RyaW5nKGJhc2lzKS5pbmRleE9mKCdweCcpID4gLTEgfHwgU3RyaW5nKGJhc2lzKS5pbmRleE9mKCdyZW0nKSA+IC0xIHx8XG4gICAgICBTdHJpbmcoYmFzaXMpLmluZGV4T2YoJ2VtJykgPiAtMSB8fCBTdHJpbmcoYmFzaXMpLmluZGV4T2YoJ3Z3JykgPiAtMSB8fFxuICAgICAgU3RyaW5nKGJhc2lzKS5pbmRleE9mKCd2aCcpID4gLTE7XG5cbiAgICBsZXQgaXNWYWx1ZSA9IChoYXNDYWxjIHx8IGhhc1VuaXRzKTtcblxuICAgIGdyb3cgPSAoZ3JvdyA9PSAnMCcpID8gMCA6IGdyb3c7XG4gICAgc2hyaW5rID0gKHNocmluayA9PSAnMCcpID8gMCA6IHNocmluaztcblxuICAgIC8vIG1ha2UgYm94IGluZmxleGlibGUgd2hlbiBzaHJpbmsgYW5kIGdyb3cgYXJlIGJvdGggemVyb1xuICAgIC8vIHNob3VsZCBub3Qgc2V0IGEgbWluIHdoZW4gdGhlIGdyb3cgaXMgemVyb1xuICAgIC8vIHNob3VsZCBub3Qgc2V0IGEgbWF4IHdoZW4gdGhlIHNocmluayBpcyB6ZXJvXG4gICAgY29uc3QgaXNGaXhlZCA9ICFncm93ICYmICFzaHJpbms7XG5cbiAgICBsZXQgY3NzOiB7W2tleTogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbH0gPSB7fTtcblxuICAgIC8vIGZsZXgtYmFzaXMgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IHRoZSBpbml0aWFsL3N0YXJ0aW5nIG1haW4tYXhpcyBzaXplIG9mIHRoZSBlbGVtZW50LFxuICAgIC8vIGJlZm9yZSBhbnl0aGluZyBlbHNlIGlzIGNvbXB1dGVkLiBJdCBjYW4gZWl0aGVyIGJlIGEgcGVyY2VudGFnZSBvciBhbiBhYnNvbHV0ZSB2YWx1ZS5cbiAgICAvLyBJdCBpcywgaG93ZXZlciwgbm90IHRoZSBicmVha2luZyBwb2ludCBmb3IgZmxleC1ncm93L3NocmluayBwcm9wZXJ0aWVzXG4gICAgLy9cbiAgICAvLyBmbGV4LWdyb3cgY2FuIGJlIHNlZW4gYXMgdGhpczpcbiAgICAvLyAgIDA6IERvIG5vdCBzdHJldGNoLiBFaXRoZXIgc2l6ZSB0byBlbGVtZW50J3MgY29udGVudCB3aWR0aCwgb3Igb2JleSAnZmxleC1iYXNpcycuXG4gICAgLy8gICAxOiAoRGVmYXVsdCB2YWx1ZSkuIFN0cmV0Y2g7IHdpbGwgYmUgdGhlIHNhbWUgc2l6ZSB0byBhbGwgb3RoZXIgZmxleCBpdGVtcyBvblxuICAgIC8vICAgICAgIHRoZSBzYW1lIHJvdyBzaW5jZSB0aGV5IGhhdmUgYSBkZWZhdWx0IHZhbHVlIG9mIDEuXG4gICAgLy8gICDiiaUyIChpbnRlZ2VyIG4pOiBTdHJldGNoLiBXaWxsIGJlIG4gdGltZXMgdGhlIHNpemUgb2Ygb3RoZXIgZWxlbWVudHNcbiAgICAvLyAgICAgIHdpdGggJ2ZsZXgtZ3JvdzogMScgb24gdGhlIHNhbWUgcm93LlxuXG4gICAgLy8gVXNlIGBudWxsYCB0byBjbGVhciBleGlzdGluZyBzdHlsZXMuXG4gICAgY29uc3QgY2xlYXJTdHlsZXMgPSB7XG4gICAgICAnbWF4LXdpZHRoJzogbnVsbCxcbiAgICAgICdtYXgtaGVpZ2h0JzogbnVsbCxcbiAgICAgICdtaW4td2lkdGgnOiBudWxsLFxuICAgICAgJ21pbi1oZWlnaHQnOiBudWxsXG4gICAgfTtcbiAgICBzd2l0Y2ggKGJhc2lzIHx8ICcnKSB7XG4gICAgICBjYXNlICcnOlxuICAgICAgICBjb25zdCB1c2VDb2x1bW5CYXNpc1plcm8gPSB0aGlzLmxheW91dENvbmZpZy51c2VDb2x1bW5CYXNpc1plcm8gIT09IGZhbHNlO1xuICAgICAgICBiYXNpcyA9IGRpcmVjdGlvbiA9PT0gJ3JvdycgPyAnMCUnIDogKHVzZUNvbHVtbkJhc2lzWmVybyA/ICcwLjAwMDAwMDAwMXB4JyA6ICdhdXRvJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaW5pdGlhbCc6ICAgLy8gZGVmYXVsdFxuICAgICAgY2FzZSAnbm9ncm93JzpcbiAgICAgICAgZ3JvdyA9IDA7XG4gICAgICAgIGJhc2lzID0gJ2F1dG8nO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2dyb3cnOlxuICAgICAgICBiYXNpcyA9ICcxMDAlJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdub3Nocmluayc6XG4gICAgICAgIHNocmluayA9IDA7XG4gICAgICAgIGJhc2lzID0gJ2F1dG8nO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2F1dG8nOlxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ25vbmUnOlxuICAgICAgICBncm93ID0gMDtcbiAgICAgICAgc2hyaW5rID0gMDtcbiAgICAgICAgYmFzaXMgPSAnYXV0byc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gRGVmYXVsdHMgdG8gcGVyY2VudGFnZSBzaXppbmcgdW5sZXNzIGBweGAgaXMgZXhwbGljaXRseSBzZXRcbiAgICAgICAgaWYgKCFpc1ZhbHVlICYmICFpc1BlcmNlbnQgJiYgIWlzTmFOKGJhc2lzIGFzIGFueSkpIHtcbiAgICAgICAgICBiYXNpcyA9IGJhc2lzICsgJyUnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRml4IGZvciBpc3N1ZSAyODBcbiAgICAgICAgaWYgKGJhc2lzID09PSAnMCUnKSB7XG4gICAgICAgICAgaXNWYWx1ZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYmFzaXMgPT09ICcwcHgnKSB7XG4gICAgICAgICAgYmFzaXMgPSAnMCUnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZml4IGlzc3VlICM1MzQ1XG4gICAgICAgIGlmIChoYXNDYWxjKSB7XG4gICAgICAgICAgY3NzID0gZXh0ZW5kT2JqZWN0KGNsZWFyU3R5bGVzLCB7XG4gICAgICAgICAgICAnZmxleC1ncm93JzogZ3JvdyxcbiAgICAgICAgICAgICdmbGV4LXNocmluayc6IHNocmluayxcbiAgICAgICAgICAgICdmbGV4LWJhc2lzJzogaXNWYWx1ZSA/IGJhc2lzIDogJzEwMCUnXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY3NzID0gZXh0ZW5kT2JqZWN0KGNsZWFyU3R5bGVzLCB7XG4gICAgICAgICAgICAnZmxleCc6IGAke2dyb3d9ICR7c2hyaW5rfSAke2lzVmFsdWUgPyBiYXNpcyA6ICcxMDAlJ31gXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoIShjc3NbJ2ZsZXgnXSB8fCBjc3NbJ2ZsZXgtZ3JvdyddKSkge1xuICAgICAgaWYgKGhhc0NhbGMpIHtcbiAgICAgICAgY3NzID0gZXh0ZW5kT2JqZWN0KGNsZWFyU3R5bGVzLCB7XG4gICAgICAgICAgJ2ZsZXgtZ3Jvdyc6IGdyb3csXG4gICAgICAgICAgJ2ZsZXgtc2hyaW5rJzogc2hyaW5rLFxuICAgICAgICAgICdmbGV4LWJhc2lzJzogYmFzaXNcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjc3MgPSBleHRlbmRPYmplY3QoY2xlYXJTdHlsZXMsIHtcbiAgICAgICAgICAnZmxleCc6IGAke2dyb3d9ICR7c2hyaW5rfSAke2Jhc2lzfWBcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRml4IGZvciBpc3N1ZXMgMjc3LCA1MzQsIGFuZCA3MjhcbiAgICBpZiAoYmFzaXMgIT09ICcwJScgJiYgYmFzaXMgIT09ICcwcHgnICYmIGJhc2lzICE9PSAnMC4wMDAwMDAwMDFweCcgJiYgYmFzaXMgIT09ICdhdXRvJykge1xuICAgICAgY3NzW21pbl0gPSBpc0ZpeGVkIHx8IChpc1ZhbHVlICYmIGdyb3cpID8gYmFzaXMgOiBudWxsO1xuICAgICAgY3NzW21heF0gPSBpc0ZpeGVkIHx8ICghdXNpbmdDYWxjICYmIHNocmluaykgPyBiYXNpcyA6IG51bGw7XG4gICAgfVxuXG4gICAgLy8gRml4IGZvciBpc3N1ZSA1MjhcbiAgICBpZiAoIWNzc1ttaW5dICYmICFjc3NbbWF4XSkge1xuICAgICAgaWYgKGhhc0NhbGMpIHtcbiAgICAgICAgY3NzID0gZXh0ZW5kT2JqZWN0KGNsZWFyU3R5bGVzLCB7XG4gICAgICAgICAgJ2ZsZXgtZ3Jvdyc6IGdyb3csXG4gICAgICAgICAgJ2ZsZXgtc2hyaW5rJzogc2hyaW5rLFxuICAgICAgICAgICdmbGV4LWJhc2lzJzogYmFzaXNcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjc3MgPSBleHRlbmRPYmplY3QoY2xlYXJTdHlsZXMsIHtcbiAgICAgICAgICAnZmxleCc6IGAke2dyb3d9ICR7c2hyaW5rfSAke2Jhc2lzfWBcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZpeCBmb3IgaXNzdWUgNjYwXG4gICAgICBpZiAocGFyZW50Lmhhc1dyYXApIHtcbiAgICAgICAgY3NzW2hhc0NhbGMgPyAnZmxleC1iYXNpcycgOiAnZmxleCddID0gY3NzW21heF0gP1xuICAgICAgICAgIChoYXNDYWxjID8gY3NzW21heF0gOiBgJHtncm93fSAke3Nocmlua30gJHtjc3NbbWF4XX1gKSA6XG4gICAgICAgICAgKGhhc0NhbGMgPyBjc3NbbWluXSA6IGAke2dyb3d9ICR7c2hyaW5rfSAke2Nzc1ttaW5dfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBleHRlbmRPYmplY3QoY3NzLCB7J2JveC1zaXppbmcnOiAnYm9yZGVyLWJveCd9KSBhcyBTdHlsZURlZmluaXRpb247XG4gIH1cbn1cblxuY29uc3QgaW5wdXRzID0gW1xuICAnZnhGbGV4JywgJ2Z4RmxleC54cycsICdmeEZsZXguc20nLCAnZnhGbGV4Lm1kJyxcbiAgJ2Z4RmxleC5sZycsICdmeEZsZXgueGwnLCAnZnhGbGV4Lmx0LXNtJywgJ2Z4RmxleC5sdC1tZCcsXG4gICdmeEZsZXgubHQtbGcnLCAnZnhGbGV4Lmx0LXhsJywgJ2Z4RmxleC5ndC14cycsICdmeEZsZXguZ3Qtc20nLFxuICAnZnhGbGV4Lmd0LW1kJywgJ2Z4RmxleC5ndC1sZydcbl07XG5jb25zdCBzZWxlY3RvciA9IGBcbiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sXG4gIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLFxuICBbZnhGbGV4Lmx0LWxnXSwgW2Z4RmxleC5sdC14bF0sIFtmeEZsZXguZ3QteHNdLCBbZnhGbGV4Lmd0LXNtXSxcbiAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddXG5gO1xuXG4vKipcbiAqIERpcmVjdGl2ZSB0byBjb250cm9sIHRoZSBzaXplIG9mIGEgZmxleCBpdGVtIHVzaW5nIGZsZXgtYmFzaXMsIGZsZXgtZ3JvdywgYW5kIGZsZXgtc2hyaW5rLlxuICogQ29ycmVzcG9uZHMgdG8gdGhlIGNzcyBgZmxleGAgc2hvcnRoYW5kIHByb3BlcnR5LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS9zbmlwcGV0cy9jc3MvYS1ndWlkZS10by1mbGV4Ym94L1xuICovXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBjbGFzcyBGbGV4RGlyZWN0aXZlIGV4dGVuZHMgQmFzZURpcmVjdGl2ZTIgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIHByb3RlY3RlZCBESVJFQ1RJVkVfS0VZID0gJ2ZsZXgnO1xuICBwcm90ZWN0ZWQgZGlyZWN0aW9uPzogc3RyaW5nID0gdW5kZWZpbmVkO1xuICBwcm90ZWN0ZWQgd3JhcD86IGJvb2xlYW4gPSB1bmRlZmluZWQ7XG5cblxuICBASW5wdXQoJ2Z4U2hyaW5rJylcbiAgZ2V0IHNocmluaygpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5mbGV4U2hyaW5rOyB9XG4gIHNldCBzaHJpbmsodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuZmxleFNocmluayA9IHZhbHVlIHx8ICcxJztcbiAgICB0aGlzLnRyaWdnZXJSZWZsb3coKTtcbiAgfVxuXG4gIEBJbnB1dCgnZnhHcm93JylcbiAgZ2V0IGdyb3coKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuZmxleEdyb3c7IH1cbiAgc2V0IGdyb3codmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuZmxleEdyb3cgPSB2YWx1ZSB8fCAnMSc7XG4gICAgdGhpcy50cmlnZ2VyUmVmbG93KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZmxleEdyb3cgPSAnMSc7XG4gIHByb3RlY3RlZCBmbGV4U2hyaW5rID0gJzEnO1xuXG4gIGNvbnN0cnVjdG9yKGVsUmVmOiBFbGVtZW50UmVmLFxuICAgICAgICAgICAgICBzdHlsZVV0aWxzOiBTdHlsZVV0aWxzLFxuICAgICAgICAgICAgICBASW5qZWN0KExBWU9VVF9DT05GSUcpIHByb3RlY3RlZCBsYXlvdXRDb25maWc6IExheW91dENvbmZpZ09wdGlvbnMsXG4gICAgICAgICAgICAgIHN0eWxlQnVpbGRlcjogRmxleFN0eWxlQnVpbGRlcixcbiAgICAgICAgICAgICAgcHJvdGVjdGVkIG1hcnNoYWw6IE1lZGlhTWFyc2hhbGxlcikge1xuICAgIHN1cGVyKGVsUmVmLCBzdHlsZUJ1aWxkZXIsIHN0eWxlVXRpbHMsIG1hcnNoYWwpO1xuICAgIHRoaXMuaW5pdCgpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMucGFyZW50RWxlbWVudCkge1xuICAgICAgdGhpcy5tYXJzaGFsLnRyYWNrVmFsdWUodGhpcy5wYXJlbnRFbGVtZW50LCAnbGF5b3V0JylcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveVN1YmplY3QpKVxuICAgICAgICAuc3Vic2NyaWJlKHRoaXMub25MYXlvdXRDaGFuZ2UuYmluZCh0aGlzKSk7XG4gICAgICB0aGlzLm1hcnNoYWwudHJhY2tWYWx1ZSh0aGlzLm5hdGl2ZUVsZW1lbnQsICdsYXlvdXQtYWxpZ24nKVxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95U3ViamVjdCkpXG4gICAgICAgIC5zdWJzY3JpYmUodGhpcy50cmlnZ2VyUmVmbG93LmJpbmQodGhpcykpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYWNoZXMgdGhlIHBhcmVudCBjb250YWluZXIncyAnZmxleC1kaXJlY3Rpb24nIGFuZCB1cGRhdGVzIHRoZSBlbGVtZW50J3Mgc3R5bGUuXG4gICAqIFVzZWQgYXMgYSBoYW5kbGVyIGZvciBsYXlvdXQgY2hhbmdlIGV2ZW50cyBmcm9tIHRoZSBwYXJlbnQgZmxleCBjb250YWluZXIuXG4gICAqL1xuICBwcm90ZWN0ZWQgb25MYXlvdXRDaGFuZ2UobWF0Y2hlcjogRWxlbWVudE1hdGNoZXIpIHtcbiAgICBjb25zdCBsYXlvdXQ6IHN0cmluZyA9IG1hdGNoZXIudmFsdWU7XG4gICAgY29uc3QgbGF5b3V0UGFydHMgPSBsYXlvdXQuc3BsaXQoJyAnKTtcbiAgICB0aGlzLmRpcmVjdGlvbiA9IGxheW91dFBhcnRzWzBdO1xuICAgIHRoaXMud3JhcCA9IGxheW91dFBhcnRzWzFdICE9PSB1bmRlZmluZWQgJiYgbGF5b3V0UGFydHNbMV0gPT09ICd3cmFwJztcbiAgICB0aGlzLnRyaWdnZXJVcGRhdGUoKTtcbiAgfVxuXG4gIC8qKiBJbnB1dCB0byB0aGlzIGlzIGV4Y2x1c2l2ZWx5IHRoZSBiYXNpcyBpbnB1dCB2YWx1ZSAqL1xuICBwcm90ZWN0ZWQgdXBkYXRlV2l0aFZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBhZGRGbGV4VG9QYXJlbnQgPSB0aGlzLmxheW91dENvbmZpZy5hZGRGbGV4VG9QYXJlbnQgIT09IGZhbHNlO1xuICAgIGlmICh0aGlzLmRpcmVjdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmRpcmVjdGlvbiA9IHRoaXMuZ2V0RmxleEZsb3dEaXJlY3Rpb24odGhpcy5wYXJlbnRFbGVtZW50ISwgYWRkRmxleFRvUGFyZW50KTtcbiAgICB9XG4gICAgaWYgKHRoaXMud3JhcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLndyYXAgPSB0aGlzLmhhc1dyYXAodGhpcy5wYXJlbnRFbGVtZW50ISk7XG4gICAgfVxuICAgIGNvbnN0IGRpcmVjdGlvbiA9IHRoaXMuZGlyZWN0aW9uO1xuICAgIGNvbnN0IGlzSG9yaXpvbnRhbCA9IGRpcmVjdGlvbi5zdGFydHNXaXRoKCdyb3cnKTtcbiAgICBjb25zdCBoYXNXcmFwID0gdGhpcy53cmFwO1xuICAgIGlmIChpc0hvcml6b250YWwgJiYgaGFzV3JhcCkge1xuICAgICAgdGhpcy5zdHlsZUNhY2hlID0gZmxleFJvd1dyYXBDYWNoZTtcbiAgICB9IGVsc2UgaWYgKGlzSG9yaXpvbnRhbCAmJiAhaGFzV3JhcCkge1xuICAgICAgdGhpcy5zdHlsZUNhY2hlID0gZmxleFJvd0NhY2hlO1xuICAgIH0gZWxzZSBpZiAoIWlzSG9yaXpvbnRhbCAmJiBoYXNXcmFwKSB7XG4gICAgICB0aGlzLnN0eWxlQ2FjaGUgPSBmbGV4Q29sdW1uV3JhcENhY2hlO1xuICAgIH0gZWxzZSBpZiAoIWlzSG9yaXpvbnRhbCAmJiAhaGFzV3JhcCkge1xuICAgICAgdGhpcy5zdHlsZUNhY2hlID0gZmxleENvbHVtbkNhY2hlO1xuICAgIH1cbiAgICBjb25zdCBiYXNpcyA9IFN0cmluZyh2YWx1ZSkucmVwbGFjZSgnOycsICcnKTtcbiAgICBjb25zdCBwYXJ0cyA9IHZhbGlkYXRlQmFzaXMoYmFzaXMsIHRoaXMuZmxleEdyb3csIHRoaXMuZmxleFNocmluayk7XG4gICAgdGhpcy5hZGRTdHlsZXMocGFydHMuam9pbignICcpLCB7ZGlyZWN0aW9uLCBoYXNXcmFwfSk7XG4gIH1cblxuICAvKiogVHJpZ2dlciBhIHN0eWxlIHJlZmxvdywgdXN1YWxseSBiYXNlZCBvbiBhIHNocmluay9ncm93IGlucHV0IGV2ZW50ICovXG4gIHByb3RlY3RlZCB0cmlnZ2VyUmVmbG93KCkge1xuICAgIGNvbnN0IGFjdGl2YXRlZFZhbHVlID0gdGhpcy5hY3RpdmF0ZWRWYWx1ZTtcbiAgICBpZiAoYWN0aXZhdGVkVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgcGFydHMgPSB2YWxpZGF0ZUJhc2lzKGFjdGl2YXRlZFZhbHVlICsgJycsIHRoaXMuZmxleEdyb3csIHRoaXMuZmxleFNocmluayk7XG4gICAgICB0aGlzLm1hcnNoYWwudXBkYXRlRWxlbWVudCh0aGlzLm5hdGl2ZUVsZW1lbnQsIHRoaXMuRElSRUNUSVZFX0tFWSwgcGFydHMuam9pbignICcpKTtcbiAgICB9XG4gIH1cbn1cblxuQERpcmVjdGl2ZSh7aW5wdXRzLCBzZWxlY3Rvcn0pXG5leHBvcnQgY2xhc3MgRGVmYXVsdEZsZXhEaXJlY3RpdmUgZXh0ZW5kcyBGbGV4RGlyZWN0aXZlIHtcbiAgcHJvdGVjdGVkIGlucHV0cyA9IGlucHV0cztcbn1cblxuY29uc3QgZmxleFJvd0NhY2hlOiBNYXA8c3RyaW5nLCBTdHlsZURlZmluaXRpb24+ID0gbmV3IE1hcCgpO1xuY29uc3QgZmxleENvbHVtbkNhY2hlOiBNYXA8c3RyaW5nLCBTdHlsZURlZmluaXRpb24+ID0gbmV3IE1hcCgpO1xuY29uc3QgZmxleFJvd1dyYXBDYWNoZTogTWFwPHN0cmluZywgU3R5bGVEZWZpbml0aW9uPiA9IG5ldyBNYXAoKTtcbmNvbnN0IGZsZXhDb2x1bW5XcmFwQ2FjaGU6IE1hcDxzdHJpbmcsIFN0eWxlRGVmaW5pdGlvbj4gPSBuZXcgTWFwKCk7XG4iXX0=
|