@jax-data-science/sci-image-visualizer 0.9.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/index.mjs +10 -1
- package/esm2022/lib/contracts/image.contract.mjs +1 -1
- package/esm2022/lib/contracts/ports/region-io.port.mjs +1 -1
- package/esm2022/lib/contracts/region-editor-api.contract.mjs +1 -1
- package/esm2022/lib/contracts/region-store.contract.mjs +1 -1
- package/esm2022/lib/contracts/section-view.contract.mjs +2 -0
- package/esm2022/lib/contracts/visualizer.contract.mjs +1 -1
- package/esm2022/lib/contracts/viz-config.mjs +1 -1
- package/esm2022/lib/geometry/loft.mjs +128 -0
- package/esm2022/lib/geometry/polylabel.mjs +156 -0
- package/esm2022/lib/geometry/reconstruct.mjs +315 -0
- package/esm2022/lib/geometry/reslice-image.mjs +57 -0
- package/esm2022/lib/geometry/section.mjs +215 -0
- package/esm2022/lib/implementations/napari-js/napari-loading-badge.mjs +11 -7
- package/esm2022/lib/implementations/napari-js/napari-loading-state.mjs +20 -3
- package/esm2022/lib/implementations/napari-js/napari-region-mesh-pointer.mjs +100 -0
- package/esm2022/lib/implementations/napari-js/napari-region-overlay.mjs +28 -5
- package/esm2022/lib/implementations/napari-js/napari-scene.mjs +1 -1
- package/esm2022/lib/implementations/napari-js/napari-spatial-hover.mjs +9 -2
- package/esm2022/lib/implementations/napari-js/napari-tool-bridge.mjs +5 -2
- package/esm2022/lib/implementations/napari-js/napari-visualizer.service.mjs +81 -1
- package/esm2022/lib/implementations/napari-js/napari-volume-region-meshes.mjs +129 -0
- package/esm2022/lib/implementations/napari-js/napari-volume-scene.mjs +115 -4
- package/esm2022/lib/implementations/napari-js/napari-volume-slice-planes.mjs +103 -0
- package/esm2022/lib/implementations/napari-js/region-overlay/region-svg-renderer.mjs +15 -3
- package/esm2022/lib/implementations/osd/openseadragon-viewer-options.mjs +18 -2
- package/esm2022/lib/implementations/osd/openseadragon-visualizer.service.mjs +9 -1
- package/esm2022/lib/implementations/osd/osd-region-overlay-draw.mjs +18 -7
- package/esm2022/lib/implementations/osd/osd-region-overlay.mjs +38 -8
- package/esm2022/lib/implementations/osd/osd-tile-loading.mjs +71 -0
- package/esm2022/lib/implementations/osd/osd-viewer-like.mjs +1 -1
- package/esm2022/lib/implementations/osd/slice-cache.mjs +35 -6
- package/esm2022/lib/implementations/tile-server/tile-protocol.mjs +1 -1
- package/esm2022/lib/models/class-preset.mjs +1 -1
- package/esm2022/lib/models/polygon-factory.mjs +17 -1
- package/esm2022/lib/models/region-geojson.mjs +44 -6
- package/esm2022/lib/models/region.mjs +1 -1
- package/esm2022/lib/region-editor/class-tree/class-tree.component.mjs +156 -0
- package/esm2022/lib/region-editor/class-tree/class-tree.mjs +108 -0
- package/esm2022/lib/region-editor/classes-panel/classes-panel.component.mjs +77 -13
- package/esm2022/lib/region-editor/region-editor.component.mjs +670 -42
- package/esm2022/lib/region-editor/region-metrics.mjs +20 -2
- package/esm2022/lib/region-editor/region-persistence.service.mjs +44 -10
- package/esm2022/lib/region-editor/region-table/region-table.component.mjs +24 -8
- package/esm2022/lib/region-import/label-classes.mjs +149 -0
- package/esm2022/lib/region-import/label-volume.mjs +194 -0
- package/esm2022/lib/region-import/region-import.mjs +71 -0
- package/esm2022/lib/region-overlay/region-geometry.mjs +3 -3
- package/esm2022/lib/region-overlay/region-source-layer.mjs +378 -0
- package/esm2022/lib/region-overlay/region-style.mjs +97 -0
- package/esm2022/lib/region-source/http-region-source.mjs +104 -0
- package/esm2022/lib/region-source/region-source-ops.mjs +53 -0
- package/esm2022/lib/region-source/region-source-worker.mjs +10 -0
- package/esm2022/lib/region-source/region-source.mjs +67 -0
- package/esm2022/lib/region-source/region-tiles.mjs +708 -0
- package/esm2022/lib/region-source/worker-region-source.mjs +229 -0
- package/esm2022/lib/routing-visualizer.service.mjs +510 -22
- package/esm2022/lib/section-pane/section-pane.component.mjs +299 -0
- package/esm2022/lib/store/class-color.util.mjs +10 -5
- package/esm2022/lib/store/class-signatures.mjs +63 -0
- package/esm2022/lib/store/region-scope-cache.mjs +5 -1
- package/esm2022/lib/store/region-source-scope.mjs +186 -0
- package/esm2022/lib/store/region-store.service.mjs +774 -12
- package/esm2022/lib/store/visualizer-store.service.mjs +33 -6
- package/esm2022/lib/toolbar/region-tools/region-tools.component.mjs +8 -2
- package/esm2022/lib/toolbar/stack-controls/stack-controls.component.mjs +55 -15
- package/esm2022/lib/toolbar/toolbar.component.mjs +19 -5
- package/esm2022/lib/visualizer/region-load.mjs +67 -4
- package/esm2022/lib/visualizer/volume-sections.mjs +175 -0
- package/esm2022/lib/visualizer.component.mjs +155 -7
- package/fesm2022/{jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-Csxlnq7I.mjs → jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-BELcx0jv.mjs} +9851 -2904
- package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-BELcx0jv.mjs.map +1 -0
- package/fesm2022/{jax-data-science-sci-image-visualizer-onnx-sam-session-Bkujqg7m.mjs → jax-data-science-sci-image-visualizer-onnx-sam-session-DEDSm_NL.mjs} +4 -4
- package/fesm2022/{jax-data-science-sci-image-visualizer-onnx-sam-session-Bkujqg7m.mjs.map → jax-data-science-sci-image-visualizer-onnx-sam-session-DEDSm_NL.mjs.map} +1 -1
- package/fesm2022/jax-data-science-sci-image-visualizer-region-source-worker-CAqBjM5L.mjs +12 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-region-source-worker-CAqBjM5L.mjs.map +1 -0
- package/fesm2022/jax-data-science-sci-image-visualizer.mjs +3 -3
- package/fesm2022/region-source.worker.js +1067 -0
- package/index.d.ts +12 -0
- package/lib/contracts/image.contract.d.ts +4 -0
- package/lib/contracts/ports/region-io.port.d.ts +24 -0
- package/lib/contracts/region-editor-api.contract.d.ts +102 -0
- package/lib/contracts/region-store.contract.d.ts +22 -0
- package/lib/contracts/section-view.contract.d.ts +44 -0
- package/lib/contracts/visualizer.contract.d.ts +10 -0
- package/lib/contracts/viz-config.d.ts +8 -0
- package/lib/geometry/loft.d.ts +22 -0
- package/lib/geometry/polylabel.d.ts +23 -0
- package/lib/geometry/reconstruct.d.ts +54 -0
- package/lib/geometry/reslice-image.d.ts +33 -0
- package/lib/geometry/section.d.ts +52 -0
- package/lib/implementations/napari-js/napari-loading-badge.d.ts +4 -2
- package/lib/implementations/napari-js/napari-loading-state.d.ts +8 -1
- package/lib/implementations/napari-js/napari-region-mesh-pointer.d.ts +32 -0
- package/lib/implementations/napari-js/napari-region-overlay.d.ts +6 -1
- package/lib/implementations/napari-js/napari-scene.d.ts +33 -0
- package/lib/implementations/napari-js/napari-spatial-hover.d.ts +3 -1
- package/lib/implementations/napari-js/napari-visualizer.service.d.ts +48 -0
- package/lib/implementations/napari-js/napari-volume-region-meshes.d.ts +66 -0
- package/lib/implementations/napari-js/napari-volume-scene.d.ts +45 -1
- package/lib/implementations/napari-js/napari-volume-slice-planes.d.ts +43 -0
- package/lib/implementations/osd/openseadragon-viewer-options.d.ts +2 -0
- package/lib/implementations/osd/openseadragon-visualizer.service.d.ts +2 -0
- package/lib/implementations/osd/osd-region-overlay-draw.d.ts +4 -3
- package/lib/implementations/osd/osd-region-overlay.d.ts +10 -3
- package/lib/implementations/osd/osd-tile-loading.d.ts +43 -0
- package/lib/implementations/osd/osd-viewer-like.d.ts +14 -0
- package/lib/implementations/osd/slice-cache.d.ts +13 -3
- package/lib/implementations/tile-server/tile-protocol.d.ts +3 -0
- package/lib/models/class-preset.d.ts +7 -0
- package/lib/models/polygon-factory.d.ts +5 -0
- package/lib/models/region-geojson.d.ts +40 -0
- package/lib/models/region.d.ts +19 -0
- package/lib/region-editor/class-tree/class-tree.component.d.ts +78 -0
- package/lib/region-editor/class-tree/class-tree.d.ts +31 -0
- package/lib/region-editor/classes-panel/classes-panel.component.d.ts +36 -6
- package/lib/region-editor/region-editor.component.d.ts +159 -17
- package/lib/region-editor/region-metrics.d.ts +8 -0
- package/lib/region-editor/region-persistence.service.d.ts +17 -5
- package/lib/region-editor/region-table/region-table.component.d.ts +10 -4
- package/lib/region-import/label-classes.d.ts +39 -0
- package/lib/region-import/label-volume.d.ts +31 -0
- package/lib/region-import/region-import.d.ts +46 -0
- package/lib/region-overlay/region-geometry.d.ts +4 -3
- package/lib/region-overlay/region-source-layer.d.ts +96 -0
- package/lib/region-overlay/region-style.d.ts +52 -0
- package/lib/region-source/http-region-source.d.ts +45 -0
- package/lib/region-source/region-source-ops.d.ts +89 -0
- package/lib/region-source/region-source-worker.d.ts +7 -0
- package/lib/region-source/region-source.d.ts +82 -0
- package/lib/region-source/region-tiles.d.ts +289 -0
- package/lib/region-source/worker-region-source.d.ts +65 -0
- package/lib/routing-visualizer.service.d.ts +168 -1
- package/lib/section-pane/section-pane.component.d.ts +47 -0
- package/lib/store/class-color.util.d.ts +6 -3
- package/lib/store/class-signatures.d.ts +11 -0
- package/lib/store/region-scope-cache.d.ts +2 -0
- package/lib/store/region-source-scope.d.ts +74 -0
- package/lib/store/region-store.service.d.ts +216 -2
- package/lib/store/visualizer-store.service.d.ts +10 -0
- package/lib/toolbar/region-tools/region-tools.component.d.ts +3 -1
- package/lib/toolbar/stack-controls/stack-controls.component.d.ts +20 -9
- package/lib/toolbar/toolbar.component.d.ts +9 -2
- package/lib/visualizer/region-load.d.ts +23 -4
- package/lib/visualizer/volume-sections.d.ts +64 -0
- package/lib/visualizer.component.d.ts +40 -0
- package/package.json +2 -2
- package/src/lib/assets/slice.svg +23 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-Csxlnq7I.mjs.map +0 -1
|
@@ -10,7 +10,8 @@ export function pickMpp(meta) {
|
|
|
10
10
|
const m = Array.isArray(meta) ? (meta.find((e) => e && (e.mppX ?? 0) > 0) ?? meta[0]) : undefined;
|
|
11
11
|
const mx = m && (m.mppX ?? 0) > 0 ? m.mppX : undefined;
|
|
12
12
|
const my = m && (m.mppY ?? 0) > 0 ? m.mppY : undefined;
|
|
13
|
-
|
|
13
|
+
const mz = m && (m.mppZ ?? 0) > 0 ? m.mppZ : undefined;
|
|
14
|
+
return { mppX: mx, mppY: my ?? mx, mppZ: mz };
|
|
14
15
|
}
|
|
15
16
|
/**
|
|
16
17
|
* A region's area in px²: width·height for a rectangle, shoelace for a polygon
|
|
@@ -41,6 +42,23 @@ export function formatArea(px, mpp = {}) {
|
|
|
41
42
|
}
|
|
42
43
|
return `${fmt(px)} px²`;
|
|
43
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* A volume in px² × slices for display: mm³ (three significant digits) from 0.001 mm³, µm³ below,
|
|
47
|
+
* when the pixel size and the slice spacing are known; otherwise voxels (one pixel by one slice).
|
|
48
|
+
* Empty for a non-positive volume.
|
|
49
|
+
*/
|
|
50
|
+
export function formatVolume(pxSlices, mpp = {}) {
|
|
51
|
+
if (!(pxSlices > 0))
|
|
52
|
+
return '';
|
|
53
|
+
const { mppX, mppY, mppZ } = mpp;
|
|
54
|
+
if (mppX && mppY && mppZ && mppX > 0 && mppY > 0 && mppZ > 0) {
|
|
55
|
+
const um3 = pxSlices * mppX * mppY * mppZ;
|
|
56
|
+
return um3 >= 1e6
|
|
57
|
+
? `${Number((um3 / 1e9).toPrecision(3)).toLocaleString(undefined, { maximumFractionDigits: 6 })} mm³`
|
|
58
|
+
: `${fmt(um3)} µm³`;
|
|
59
|
+
}
|
|
60
|
+
return `${fmt(pxSlices)} voxels`;
|
|
61
|
+
}
|
|
44
62
|
/** Exterior shoelace minus each hole, never negative. */
|
|
45
63
|
function polygonArea(p) {
|
|
46
64
|
if ((p.xpoints?.length ?? 0) < 3)
|
|
@@ -65,4 +83,4 @@ function ringArea(xs, ys) {
|
|
|
65
83
|
function fmt(n) {
|
|
66
84
|
return (n >= 1000 ? Math.round(n) : Math.round(n * 100) / 100).toLocaleString();
|
|
67
85
|
}
|
|
68
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaW9uLW1ldHJpY3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JlZ2lvbi1lZGl0b3IvcmVnaW9uLW1ldHJpY3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sa0JBQWtCLENBQUM7QUFTNUU7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLE9BQU8sQ0FBQyxJQUFrQztJQUN4RCxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNsRyxNQUFNLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUUsQ0FBQyxDQUFDLElBQWUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ25FLE1BQU0sRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBRSxDQUFDLENBQUMsSUFBZSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDbkUsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQztBQUN0QyxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsTUFBOEI7SUFDekQsTUFBTSxDQUFDLEdBQUcsTUFBTSxD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QUFDO0lBQ2xGLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDekIsQ0FBQztBQUVELFNBQVMsR0FBRyxDQUFDLENBQVM7SUFDcEIsT0FBTyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ2xGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNdWx0aVBvbHlnb24sIFBvbHlnb24sIFJlY3RhbmdsZSwgUmVnaW9uIH0gZnJvbSAnLi4vbW9kZWxzL3JlZ2lvbic7XG5pbXBvcnQgeyBJSW1hZ2VNZXRhZGF0YSB9IGZyb20gJy4uL2NvbnRyYWN0cy9pbWFnZS5jb250cmFjdCc7XG5cbi8qKiBQaHlzaWNhbCBwaXhlbCBzaXplICjCtW0vcGl4ZWwpOyBib3RoIHVuZGVmaW5lZCB3aGVuIHRoZSBpbWFnZSBpcyB1bnNjYWxlZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGl4ZWxTaXplIHtcbiAgbXBwWD86IG51bWJlcjtcbiAgbXBwWT86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBDaG9vc2UgdGhlIHBoeXNpY2FsIHBpeGVsIHNpemUgZm9yIGFyZWEgZGlzcGxheSBmcm9tIHRoZSBpbWFnZSBtZXRhLiBUaGVcbiAqIGNhbGlicmF0aW9uIG1heSBzaXQgb24gYW55IGNoYW5uZWwgZW50cnksIG5vdCBuZWNlc3NhcmlseSBbMF0sIHNvIHRha2UgdGhlXG4gKiBmaXJzdCBlbnRyeSB3aXRoIGEgcG9zaXRpdmUgbXBwWCAoYXMgUGxvdGx5U2VydmljZS5jdXJyZW50TXBwIGRvZXMpLiBXaXRoXG4gKiBvbmx5IG9uZSBheGlzIHJlcG9ydGVkLCBwaXhlbHMgYXJlIHNxdWFyZSAobXBwWSA9IG1wcFgpLCBzbyBhIHNjYWxlZCBpbWFnZVxuICogc2hvd3MgwrVtwrIvbW3CsiByYXRoZXIgdGhhbiBweMKyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGlja01wcChtZXRhOiBJSW1hZ2VNZXRhZGF0YVtdIHwgdW5kZWZpbmVkKTogUGl4ZWxTaXplIHtcbiAgY29uc3QgbSA9IEFycmF5LmlzQXJyYXkobWV0YSkgPyAobWV0YS5maW5kKChlKSA9PiBlICYmIChlLm1wcFggPz8gMCkgPiAwKSA/PyBtZXRhWzBdKSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgbXggPSBtICYmIChtLm1wcFggPz8gMCkgPiAwID8gKG0ubXBwWCBhcyBudW1iZXIpIDogdW5kZWZpbmVkO1xuICBjb25zdCBteSA9IG0gJiYgKG0ubXBwWSA/PyAwKSA+IDAgPyAobS5tcHBZIGFzIG51bWJlcikgOiB1bmRlZmluZWQ7XG4gIHJldHVybiB7IG1wcFg6IG14LCBtcHBZOiBteSA/PyBteCB9O1xufVxuXG4vKipcbiAqIEEgcmVnaW9uJ3MgYXJlYSBpbiBweMKyOiB3aWR0aMK3aGVpZ2h0IGZvciBhIHJlY3RhbmdsZSwgc2hvZWxhY2UgZm9yIGEgcG9seWdvblxuICogd2l0aCBlYWNoIGludGVyaW9yIHJpbmcgKGhvbGUpIHN1YnRyYWN0ZWQgKGEgZG9udXQgcmVwb3J0cyB0aGUgYW5udWx1cyksIGFuZFxuICogdGhlIHN1bSBvZiB0aGUgcGFydHMgZm9yIGEgbXVsdGktcG9seWdvbiAoaml0LXVpIzg1KS4gMCBmb3IgYW55dGhpbmcgZWxzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lvbkFyZWFQeChyZWdpb246IFBpY2s8UmVnaW9uLCAnYm91bmRzJz4pOiBudW1iZXIge1xuICBjb25zdCBiID0gcmVnaW9uLmJvdW5kcztcbiAgaWYgKGIgaW5zdGFuY2VvZiBSZWN0YW5nbGUpIHJldHVybiBNYXRoLmFicyhiLndpZHRoICogYi5oZWlnaHQpO1xuICBpZiAoYiBpbnN0YW5jZW9mIFBvbHlnb24pIHJldHVybiBwb2x5Z29uQXJlYShiKTtcbiAgaWYgKGIgaW5zdGFuY2VvZiBNdWx0aVBvbHlnb24pIHJldHVybiBiLnBvbHlnb25zLnJlZHVjZSgoc3VtLCBwKSA9PiBzdW0gKyBwb2x5Z29uQXJlYShwKSwgMCk7XG4gIHJldHVybiAwO1xufVxuXG4vKipcbiAqIEFuIGFyZWEgZm9yIGRpc3BsYXk6IMK1bcKyIChtbcKyIGZyb20gMWU2IMK1bcKyKSB3aGVuIHRoZSBwaXhlbCBzaXplIGlzIGtub3duLFxuICogb3RoZXJ3aXNlIHB4wrIuIEVtcHR5IGZvciBhIGRlZ2VuZXJhdGUgKG5vbi1wb3NpdGl2ZSkgYXJlYS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEFyZWEocHg6IG51bWJlciwgbXBwOiBQaXhlbFNpemUgPSB7fSk6IHN0cmluZyB7XG4gIGlmICghKHB4ID4gMCkpIHJldHVybiAnJztcbiAgY29uc3QgeyBtcHBYLCBtcHBZIH0gPSBtcHA7XG4gIGlmIChtcHBYICYmIG1wcFkgJiYgbXBwWCA+IDAgJiYgbXBwWSA+IDApIHtcbiAgICBjb25zdCB1bTIgPSBweCAqIG1wcFggKiBtcHBZO1xuICAgIHJldHVybiB1bTIgPj0gMWU2ID8gYCR7Zm10KHVtMiAvIDFlNil9IG1twrJgIDogYCR7Zm10KHVtMil9IMK1bcKyYDtcbiAgfVxuICByZXR1cm4gYCR7Zm10KHB4KX0gcHjCsmA7XG59XG5cbi8qKiBFeHRlcmlvciBzaG9lbGFjZSBtaW51cyBlYWNoIGhvbGUsIG5ldmVyIG5lZ2F0aXZlLiAqL1xuZnVuY3Rpb24gcG9seWdvbkFyZWEocDogUG9seWdvbik6IG51bWJlciB7XG4gIGlmICgocC54cG9pbnRzPy5sZW5ndGggPz8gMCkgPCAzKSByZXR1cm4gMDtcbiAgbGV0IGEgPSByaW5nQXJlYShwLnhwb2ludHMsIHAueXBvaW50cyk7XG4gIGlmIChwLmhvbGVzKSB7XG4gICAgZm9yIChjb25zdCByaW5nIG9mIHAuaG9sZXMpXG4gICAgICBhIC09IHJpbmdBcmVhKFxuICAgICAgICByaW5nLm1hcCgocHQpID0+IHB0WzBdKSxcbiAgICAgICAgcmluZy5tYXAoKHB0KSA9PiBwdFsxXSksXG4gICAgICApO1xuICB9XG4gIHJldHVybiBNYXRoLm1heCgwLCBhKTtcbn1cblxuLyoqIEFic29sdXRlIHNob2VsYWNlIGFyZWEgb2Ygb25lIHJpbmcuICovXG5mdW5jdGlvbiByaW5nQXJlYSh4czogbnVtYmVyW10sIHlzOiBudW1iZXJbXSk6IG51bWJlciB7XG4gIGNvbnN0IG4gPSB4cz8ubGVuZ3RoID8/IDA7XG4gIGlmIChuIDwgMykgcmV0dXJuIDA7XG4gIGxldCBhID0gMDtcbiAgZm9yIChsZXQgaSA9IDAsIGogPSBuIC0gMTsgaSA8IG47IGogPSBpKyspIGEgKz0gKHhzW2pdICsgeHNbaV0pICogKHlzW2pdIC0geXNbaV0pO1xuICByZXR1cm4gTWF0aC5hYnMoYSAvIDIpO1xufVxuXG5mdW5jdGlvbiBmbXQobjogbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIChuID49IDEwMDAgPyBNYXRoLnJvdW5kKG4pIDogTWF0aC5yb3VuZChuICogMTAwKSAvIDEwMCkudG9Mb2NhbGVTdHJpbmcoKTtcbn1cbiJdfQ==
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaW9uLW1ldHJpY3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JlZ2lvbi1lZGl0b3IvcmVnaW9uLW1ldHJpY3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sa0JBQWtCLENBQUM7QUFXNUU7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLE9BQU8sQ0FBQyxJQUFrQztJQUN4RCxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNsRyxNQUFNLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUUsQ0FBQyxDQUFDLElBQWUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ25FLE1BQU0sRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBRSxDQUFDLENBQUMsSUFBZSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDbkUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFFLENBQUMsQ0FBQyxJQUFlLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNuRSxPQUFPLEVBQUUsSUFBSSxF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QUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDbEYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE11bHRpUG9seWdvbiwgUG9seWdvbiwgUmVjdGFuZ2xlLCBSZWdpb24gfSBmcm9tICcuLi9tb2RlbHMvcmVnaW9uJztcbmltcG9ydCB7IElJbWFnZU1ldGFkYXRhIH0gZnJvbSAnLi4vY29udHJhY3RzL2ltYWdlLmNvbnRyYWN0JztcblxuLyoqIFBoeXNpY2FsIHBpeGVsIHNpemUgKMK1bS9waXhlbCk7IGJvdGggdW5kZWZpbmVkIHdoZW4gdGhlIGltYWdlIGlzIHVuc2NhbGVkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaXhlbFNpemUge1xuICBtcHBYPzogbnVtYmVyO1xuICBtcHBZPzogbnVtYmVyO1xuICAvKiogU3BhY2luZyBiZXR3ZWVuIHNsaWNlcyAowrVtKSwgd2hlbiB0aGUgc3RhY2sgZGVjbGFyZXMgaXQuICovXG4gIG1wcFo/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQ2hvb3NlIHRoZSBwaHlzaWNhbCBwaXhlbCBzaXplIGZvciBhcmVhIGRpc3BsYXkgZnJvbSB0aGUgaW1hZ2UgbWV0YS4gVGhlXG4gKiBjYWxpYnJhdGlvbiBtYXkgc2l0IG9uIGFueSBjaGFubmVsIGVudHJ5LCBub3QgbmVjZXNzYXJpbHkgWzBdLCBzbyB0YWtlIHRoZVxuICogZmlyc3QgZW50cnkgd2l0aCBhIHBvc2l0aXZlIG1wcFggKGFzIFBsb3RseVNlcnZpY2UuY3VycmVudE1wcCBkb2VzKS4gV2l0aFxuICogb25seSBvbmUgYXhpcyByZXBvcnRlZCwgcGl4ZWxzIGFyZSBzcXVhcmUgKG1wcFkgPSBtcHBYKSwgc28gYSBzY2FsZWQgaW1hZ2VcbiAqIHNob3dzIMK1bcKyL21twrIgcmF0aGVyIHRoYW4gcHjCsi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBpY2tNcHAobWV0YTogSUltYWdlTWV0YWRhdGFbXSB8IHVuZGVmaW5lZCk6IFBpeGVsU2l6ZSB7XG4gIGNvbnN0IG0gPSBBcnJheS5pc0FycmF5KG1ldGEpID8gKG1ldGEuZmluZCgoZSkgPT4gZSAmJiAoZS5tcHBYID8/IDApID4gMCkgPz8gbWV0YVswXSkgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IG14ID0gbSAmJiAobS5tcHBYID8/IDApID4gMCA/IChtLm1wcFggYXMgbnVtYmVyKSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgbXkgPSBtICYmIChtLm1wcFkgPz8gMCkgPiAwID8gKG0ubXBwWSBhcyBudW1iZXIpIDogdW5kZWZpbmVkO1xuICBjb25zdCBteiA9IG0gJiYgKG0ubXBwWiA/PyAwKSA+IDAgPyAobS5tcHBaIGFzIG51bWJlcikgOiB1bmRlZmluZWQ7XG4gIHJldHVybiB7IG1wcFg6IG14LCBtcHBZOiBteSA/PyBteCwgbXBwWjogbXogfTtcbn1cblxuLyoqXG4gKiBBIHJlZ2lvbidzIGFyZWEgaW4gcHjCsjogd2lkdGjCt2hlaWdodCBmb3IgYSByZWN0YW5nbGUsIHNob2VsYWNlIGZvciBhIHBvbHlnb25cbiAqIHdpdGggZWFjaCBpbnRlcmlvciByaW5nIChob2xlKSBzdWJ0cmFjdGVkIChhIGRvbnV0IHJlcG9ydHMgdGhlIGFubnVsdXMpLCBhbmRcbiAqIHRoZSBzdW0gb2YgdGhlIHBhcnRzIGZvciBhIG11bHRpLXBvbHlnb24gKGppdC11aSM4NSkuIDAgZm9yIGFueXRoaW5nIGVsc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpb25BcmVhUHgocmVnaW9uOiBQaWNrPFJlZ2lvbiwgJ2JvdW5kcyc+KTogbnVtYmVyIHtcbiAgY29uc3QgYiA9IHJlZ2lvbi5ib3VuZHM7XG4gIGlmIChiIGluc3RhbmNlb2YgUmVjdGFuZ2xlKSByZXR1cm4gTWF0aC5hYnMoYi53aWR0aCAqIGIuaGVpZ2h0KTtcbiAgaWYgKGIgaW5zdGFuY2VvZiBQb2x5Z29uKSByZXR1cm4gcG9seWdvbkFyZWEoYik7XG4gIGlmIChiIGluc3RhbmNlb2YgTXVsdGlQb2x5Z29uKSByZXR1cm4gYi5wb2x5Z29ucy5yZWR1Y2UoKHN1bSwgcCkgPT4gc3VtICsgcG9seWdvbkFyZWEocCksIDApO1xuICByZXR1cm4gMDtcbn1cblxuLyoqXG4gKiBBbiBhcmVhIGZvciBkaXNwbGF5OiDCtW3CsiAobW3CsiBmcm9tIDFlNiDCtW3Csikgd2hlbiB0aGUgcGl4ZWwgc2l6ZSBpcyBrbm93bixcbiAqIG90aGVyd2lzZSBweMKyLiBFbXB0eSBmb3IgYSBkZWdlbmVyYXRlIChub24tcG9zaXRpdmUpIGFyZWEuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRBcmVhKHB4OiBudW1iZXIsIG1wcDogUGl4ZWxTaXplID0ge30pOiBzdHJpbmcge1xuICBpZiAoIShweCA+IDApKSByZXR1cm4gJyc7XG4gIGNvbnN0IHsgbXBwWCwgbXBwWSB9ID0gbXBwO1xuICBpZiAobXBwWCAmJiBtcHBZICYmIG1wcFggPiAwICYmIG1wcFkgPiAwKSB7XG4gICAgY29uc3QgdW0yID0gcHggKiBtcHBYICogbXBwWTtcbiAgICByZXR1cm4gdW0yID49IDFlNiA/IGAke2ZtdCh1bTIgLyAxZTYpfSBtbcKyYCA6IGAke2ZtdCh1bTIpfSDCtW3CsmA7XG4gIH1cbiAgcmV0dXJuIGAke2ZtdChweCl9IHB4wrJgO1xufVxuXG4vKipcbiAqIEEgdm9sdW1lIGluIHB4wrIgw5cgc2xpY2VzIGZvciBkaXNwbGF5OiBtbcKzICh0aHJlZSBzaWduaWZpY2FudCBkaWdpdHMpIGZyb20gMC4wMDEgbW3CsywgwrVtwrMgYmVsb3csXG4gKiB3aGVuIHRoZSBwaXhlbCBzaXplIGFuZCB0aGUgc2xpY2Ugc3BhY2luZyBhcmUga25vd247IG90aGVyd2lzZSB2b3hlbHMgKG9uZSBwaXhlbCBieSBvbmUgc2xpY2UpLlxuICogRW1wdHkgZm9yIGEgbm9uLXBvc2l0aXZlIHZvbHVtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFZvbHVtZShweFNsaWNlczogbnVtYmVyLCBtcHA6IFBpeGVsU2l6ZSA9IHt9KTogc3RyaW5nIHtcbiAgaWYgKCEocHhTbGljZXMgPiAwKSkgcmV0dXJuICcnO1xuICBjb25zdCB7IG1wcFgsIG1wcFksIG1wcFogfSA9IG1wcDtcbiAgaWYgKG1wcFggJiYgbXBwWSAmJiBtcHBaICYmIG1wcFggPiAwICYmIG1wcFkgPiAwICYmIG1wcFogPiAwKSB7XG4gICAgY29uc3QgdW0zID0gcHhTbGljZXMgKiBtcHBYICogbXBwWSAqIG1wcFo7XG4gICAgcmV0dXJuIHVtMyA+PSAxZTZcbiAgICAgID8gYCR7TnVtYmVyKCh1bTMgLyAxZTkpLnRvUHJlY2lzaW9uKDMpKS50b0xvY2FsZVN0cmluZyh1bmRlZmluZWQsIHsgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiA2IH0pfSBtbcKzYFxuICAgICAgOiBgJHtmbXQodW0zKX0gwrVtwrNgO1xuICB9XG4gIHJldHVybiBgJHtmbXQocHhTbGljZXMpfSB2b3hlbHNgO1xufVxuXG4vKiogRXh0ZXJpb3Igc2hvZWxhY2UgbWludXMgZWFjaCBob2xlLCBuZXZlciBuZWdhdGl2ZS4gKi9cbmZ1bmN0aW9uIHBvbHlnb25BcmVhKHA6IFBvbHlnb24pOiBudW1iZXIge1xuICBpZiAoKHAueHBvaW50cz8ubGVuZ3RoID8/IDApIDwgMykgcmV0dXJuIDA7XG4gIGxldCBhID0gcmluZ0FyZWEocC54cG9pbnRzLCBwLnlwb2ludHMpO1xuICBpZiAocC5ob2xlcykge1xuICAgIGZvciAoY29uc3QgcmluZyBvZiBwLmhvbGVzKVxuICAgICAgYSAtPSByaW5nQXJlYShcbiAgICAgICAgcmluZy5tYXAoKHB0KSA9PiBwdFswXSksXG4gICAgICAgIHJpbmcubWFwKChwdCkgPT4gcHRbMV0pLFxuICAgICAgKTtcbiAgfVxuICByZXR1cm4gTWF0aC5tYXgoMCwgYSk7XG59XG5cbi8qKiBBYnNvbHV0ZSBzaG9lbGFjZSBhcmVhIG9mIG9uZSByaW5nLiAqL1xuZnVuY3Rpb24gcmluZ0FyZWEoeHM6IG51bWJlcltdLCB5czogbnVtYmVyW10pOiBudW1iZXIge1xuICBjb25zdCBuID0geHM/Lmxlbmd0aCA/PyAwO1xuICBpZiAobiA8IDMpIHJldHVybiAwO1xuICBsZXQgYSA9IDA7XG4gIGZvciAobGV0IGkgPSAwLCBqID0gbiAtIDE7IGkgPCBuOyBqID0gaSsrKSBhICs9ICh4c1tqXSArIHhzW2ldKSAqICh5c1tqXSAtIHlzW2ldKTtcbiAgcmV0dXJuIE1hdGguYWJzKGEgLyAyKTtcbn1cblxuZnVuY3Rpb24gZm10KG46IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiAobiA+PSAxMDAwID8gTWF0aC5yb3VuZChuKSA6IE1hdGgucm91bmQobiAqIDEwMCkgLyAxMDApLnRvTG9jYWxlU3RyaW5nKCk7XG59XG4iXX0=
|
|
@@ -61,9 +61,25 @@ export class RegionPersistenceService {
|
|
|
61
61
|
fileExists(names) {
|
|
62
62
|
return names.pipe(debounceTime(400), switchMap((name) => this.io.roiFileExists(name).pipe(catchError(() => of(false)))));
|
|
63
63
|
}
|
|
64
|
-
/**
|
|
65
|
-
|
|
66
|
-
|
|
64
|
+
/**
|
|
65
|
+
* `regions` as GeoJSON, merged with the image's region source when it has one (the source's
|
|
66
|
+
* features that were not taken or deleted, then `regions`); `slice` names a folder stack's
|
|
67
|
+
* slice.
|
|
68
|
+
*/
|
|
69
|
+
serialize(regions, slice) {
|
|
70
|
+
const merged = this.api.getGeoJsonStringWithSource?.(regions, slice);
|
|
71
|
+
if (merged)
|
|
72
|
+
return merged;
|
|
73
|
+
try {
|
|
74
|
+
return Promise.resolve(this.api.getGeoJsonString(regions));
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
return Promise.reject(err);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/** Download `regions` (with the region source behind them) as a GeoJSON file named `filename`. */
|
|
81
|
+
async download(regions, filename) {
|
|
82
|
+
const blob = new Blob([await this.serialize(regions)], { type: 'application/json' });
|
|
67
83
|
saveAs(blob, filename);
|
|
68
84
|
}
|
|
69
85
|
/**
|
|
@@ -75,18 +91,23 @@ export class RegionPersistenceService {
|
|
|
75
91
|
save(regions, filename) {
|
|
76
92
|
return new Observable((subscriber) => {
|
|
77
93
|
let upload;
|
|
94
|
+
let cancelled = false;
|
|
78
95
|
const timer = setTimeout(() => {
|
|
79
|
-
let
|
|
96
|
+
let serialized;
|
|
80
97
|
try {
|
|
81
|
-
|
|
98
|
+
serialized = this.serialize(regions());
|
|
82
99
|
}
|
|
83
100
|
catch (err) {
|
|
84
101
|
subscriber.error(err);
|
|
85
102
|
return;
|
|
86
103
|
}
|
|
87
|
-
|
|
104
|
+
serialized.then((geoJsonStr) => {
|
|
105
|
+
if (!cancelled)
|
|
106
|
+
upload = this.io.saveGeoJson(geoJsonStr, filename).subscribe(subscriber);
|
|
107
|
+
}, (err) => subscriber.error(err));
|
|
88
108
|
});
|
|
89
109
|
return () => {
|
|
110
|
+
cancelled = true;
|
|
90
111
|
clearTimeout(timer);
|
|
91
112
|
upload?.unsubscribe();
|
|
92
113
|
};
|
|
@@ -96,15 +117,28 @@ export class RegionPersistenceService {
|
|
|
96
117
|
* A folder stack's regions as one geojson per slice-file (jit-ui#93), each
|
|
97
118
|
* serialized on the default plane (z=0): every slice-file is one plane, and
|
|
98
119
|
* the loader re-derives the slice index from the file's position. Slices
|
|
99
|
-
* cleared since load are included (empty) so their file is overwritten
|
|
120
|
+
* cleared since load are included (empty) so their file is overwritten, and so are slices
|
|
121
|
+
* whose region source lost features; a slice with a region source keeps the features still
|
|
122
|
+
* in it.
|
|
100
123
|
*/
|
|
101
|
-
sliceGeoJsons() {
|
|
124
|
+
async sliceGeoJsons() {
|
|
102
125
|
const out = [];
|
|
103
126
|
for (const [z, regs] of this.api.getStackSaveAnnotationSlices()) {
|
|
104
|
-
out.push({
|
|
127
|
+
out.push({
|
|
128
|
+
z,
|
|
129
|
+
geoJsonStr: await this.serialize(regs.map((r) => withRegionZ(r, 0)), z),
|
|
130
|
+
});
|
|
105
131
|
}
|
|
106
132
|
return out;
|
|
107
133
|
}
|
|
134
|
+
/** Whether the host can pick regions on its server (see RegionIoPort.pickServerRegions). */
|
|
135
|
+
canPickServerRegions() {
|
|
136
|
+
return typeof this.io.pickServerRegions === 'function';
|
|
137
|
+
}
|
|
138
|
+
/** Let the user pick regions on the host's server; null when cancelled or unsupported. */
|
|
139
|
+
pickServerRegions() {
|
|
140
|
+
return this.io.pickServerRegions?.() ?? of(null);
|
|
141
|
+
}
|
|
108
142
|
/** Write per-slice geojsons through the host port. */
|
|
109
143
|
saveSlices(slices) {
|
|
110
144
|
return this.io.saveSliceGeoJsons(slices);
|
|
@@ -131,4 +165,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImpor
|
|
|
131
165
|
type: Inject,
|
|
132
166
|
args: [REGION_IO_PORT]
|
|
133
167
|
}] }] });
|
|
134
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaW9uLXBlcnNpc3RlbmNlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JlZ2lvbi1lZGl0b3IvcmVnaW9uLXBlcnNpc3RlbmNlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEVBQUUsVUFBVSxFQUFnQixFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHckUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBb0IsaUJBQWlCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUM5RixPQUFPLEVBQUUsY0FBYyxFQUFnQixNQUFNLG1DQUFtQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7O0FBUXZDOzs7Ozs7R0FNRztBQUVILE1BQU0sT0FBTyx3QkFBd0I7SUFDbkMsWUFDOEMsR0FBcUIsRUFDeEIsRUFBZ0I7UUFEYixRQUFHLEdBQUgsR0FBRyxDQUFrQjtRQUN4QixPQUFFLEdBQUYsRUFBRSxDQUFjO0lBQ3hELENBQUM7SUFFSiw4Q0FBOEM7SUFDOUMsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVELGtGQUFrRjtJQUNsRixlQUFlO1FBQ2IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzNDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUs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ZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBzYXZlQXMgfSBmcm9tICdmaWxlLXNhdmVyJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGRlYm91bmNlVGltZSwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBSZWdpb24gfSBmcm9tICcuLi9tb2RlbHMvcmVnaW9uJztcbmltcG9ydCB7IHdpdGhSZWdpb25aIH0gZnJvbSAnLi4vbW9kZWxzL3JlZ2lvbi1jbG9uZSc7XG5pbXBvcnQgeyBJUmVnaW9uRWRpdG9yQXBpLCBSRUdJT05fRURJVE9SX0FQSSB9IGZyb20gJy4uL2NvbnRyYWN0cy9yZWdpb24tZWRpdG9yLWFwaS5jb250cmFjdCc7XG5pbXBvcnQgeyBSRUdJT05fSU9fUE9SVCwgUmVnaW9uSW9Qb3J0IH0gZnJvbSAnLi4vY29udHJhY3RzL3BvcnRzL3JlZ2lvbi1pby5wb3J0JztcbmltcG9ydCB7IGZpbGVTdGVtIH0gZnJvbSAnLi9maWxlLXN0ZW0nO1xuXG4vKiogT25lIHNsaWNlLWZpbGUncyBzZXJpYWxpemVkIHJlZ2lvbnMgKGZvbGRlciBzdGFjaywgaml0LXVpIzkzKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2xpY2VHZW9Kc29uIHtcbiAgejogbnVtYmVyO1xuICBnZW9Kc29uU3RyOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVnaW9uIGZpbGUgSS9PIGZvciB0aGUgUmVnaW9uIEVkaXRvcjogZGVmYXVsdCBmaWxlIG5hbWVzLCBHZW9KU09OIGRvd25sb2FkXG4gKiAoZXhwb3J0KSwgc2F2ZSB0byB0aGUgaG9zdCB0aHJvdWdoIHtAbGluayBSZWdpb25Jb1BvcnR9ICh3aXRoIGEgZGVib3VuY2VkXG4gKiBcImZpbGUgZXhpc3RzXCIgY2hlY2spLCBwZXItc2xpY2Ugc2F2ZXMgZm9yIGZvbGRlciBzdGFja3MsIGFuZCByZWFkaW5nIGFuXG4gKiBpbXBvcnRlZCBmaWxlLiBQcm92aWRlZCBieSB0aGUgZWRpdG9yOyBpdCBob2xkcyBubyBzdGF0ZSDigJQgdGhlIGVkaXRvciBvd25zXG4gKiB0aGUgZGlhbG9ncywgdGhlIHRvYXN0cyBhbmQgdGhlIHJ1bm5pbmcgam9icy5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFJlZ2lvblBlcnNpc3RlbmNlU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoUkVHSU9OX0VESVRPUl9BUEkpIHByaXZhdGUgcmVhZG9ubHkgYXBpOiBJUmVnaW9uRWRpdG9yQXBpLFxuICAgIEBJbmplY3QoUkVHSU9OX0lPX1BPUlQpIHByaXZhdGUgcmVhZG9ubHkgaW86IFJlZ2lvbklvUG9ydCxcbiAgKSB7fVxuXG4gIC8qKiBUaGUgc2VsZWN0ZWQgaW1hZ2UncyBmaWxlIG5hbWUsIGlmIGFueS4gKi9cbiAgc2VsZWN0ZWRGaWxlTmFtZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmlvLmdldFNlbGVjdGVkRmlsZU5hbWUoKTtcbiAgfVxuXG4gIC8qKiBgPGltYWdlLXN0ZW0+Lmdlb2pzb25gIGZvciBhIHNlcnZlciBzYXZlOyB1bmRlZmluZWQgd2l0aCBubyBpbWFnZSBzZWxlY3RlZC4gKi9cbiAgZGVmYXVsdFNhdmVOYW1lKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbmFtZSA9IHRoaXMuaW8uZ2V0U2VsZWN0ZWRGaWxlTmFtZSgpO1xuICAgIHJldHVybiBuYW1lID8gYCR7ZmlsZVN0ZW0obmFtZSwgbmFtZSl9Lmdlb2pzb25gIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqIGA8aW1hZ2Utc3RlbT4uZ2VvanNvbmAgKG9yIGByb2lzLmdlb2pzb25gKSBmb3IgYSBkb3dubG9hZC4gKi9cbiAgZGVmYXVsdEV4cG9ydE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7ZmlsZVN0ZW0odGhpcy5pby5nZXRTZWxlY3RlZEZpbGVOYW1lKCksICdyb2lzJyl9Lmdlb2pzb25gO1xuICB9XG5cbiAgLyoqIGA8aW1hZ2Utc3RlbT5fbWFzay5wbmdgIChvciBgcmVnaW9uc19tYXNrLnBuZ2ApIGZvciBhIG1hc2sgZG93bmxvYWQuICovXG4gIGRlZmF1bHRNYXNrTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtmaWxlU3RlbSh0aGlzLmlvLmdldFNlbGVjdGVkRmlsZU5hbWUoKSwgJ3JlZ2lvbnMnKX1fbWFzay5wbmdgO1xuICB9XG5cbiAgLyoqIFRydWUgd2hlbiBhIHNhdmUgd3JpdGVzIG9uZSBnZW9qc29uIHBlciBzbGljZS1maWxlIChmb2xkZXIgc3RhY2ssIGppdC11aSM5MykuICovXG4gIHNhdmVzUGVyU2xpY2UoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYXBpLmlzU3RhY2tNb2RlKCkgJiYgdGhpcy5hcGkuZ2V0U3RhY2tTYXZlTGF5b3V0KCkgPT09ICdwZXItc2xpY2UtZmlsZSc7XG4gIH1cblxuICAvKipcbiAgICogUmVnaW9ucyB0byBzZXJpYWxpemUgb24gc2F2ZS9leHBvcnQuIEZvciBhIHNpbmdsZS1maWxlIHotc3RhY2sgdGhlIHN0b3JlXG4gICAqIGtlZXBzIG9ubHkgdGhlIGN1cnJlbnQgc2xpY2UgbGl2ZSwgc28gdGFrZSBFVkVSWSBzbGljZSdzIGFubm90YXRpb25zIChlYWNoXG4gICAqIHRhZ2dlZCB3aXRoIGl0cyB6ZXJvLWJhc2VkIFJlZ2lvbi56KSBmb3Igb25lIGNvbWJpbmVkIHotaW5kZXhlZCBnZW9qc29uXG4gICAqIChqaXQtdWkjOTMpOyBvdGhlcndpc2UgYGxpdmVgIChzaW5nbGUgcGxhbmUsIG9yIGEgZm9sZGVyIHN0YWNrIHdob3NlIHNsaWNlc1xuICAgKiBzYXZlIHRvIHRoZWlyIG93biBmaWxlcykuXG4gICAqL1xuICByZWdpb25zRm9yU2F2ZShsaXZlOiBSZWdpb25bXSk6IFJlZ2lvbltdIHtcbiAgICBpZiAodGhpcy5hcGkuaXNTdGFja01vZGUoKSAmJiB0aGlzLmFwaS5nZXRTdGFja1NhdmVMYXlvdXQoKSA9PT0gJ2NvbWJpbmVkJykge1xuICAgICAgcmV0dXJuIHRoaXMuYXBpLmdldFNsaWNlQW5ub3RhdGlvblJlZ2lvbnMoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxpdmU7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciBlYWNoIGZpbGUgbmFtZSBpbiBgbmFtZXNgIGFscmVhZHkgZXhpc3RzIG9uIHRoZSBob3N0LCBkZWJvdW5jZWRcbiAgICogNDAwIG1zOyBhIG5ld2VyIG5hbWUgc3VwZXJzZWRlcyBhbiBpbi1mbGlnaHQgY2hlY2suIEEgZmFpbGVkIGNoZWNrIHJlYWRzIGFzXG4gICAqIFwiZG9lcyBub3QgZXhpc3RcIiBhbmQgbGF0ZXIgY2hlY2tzIGtlZXAgd29ya2luZy5cbiAgICovXG4gIGZpbGVFeGlzdHMobmFtZXM6IE9ic2VydmFibGU8c3RyaW5nPik6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBuYW1lcy5waXBlKFxuICAgICAgZGVib3VuY2VUaW1lKDQwMCksXG4gICAgICBzd2l0Y2hNYXAoKG5hbWUpID0+IHRoaXMuaW8ucm9pRmlsZUV4aXN0cyhuYW1lKS5waXBlKGNhdGNoRXJyb3IoKCkgPT4gb2YoZmFsc2UpKSkpLFxuICAgICk7XG4gIH1cblxuICAvKiogRG93bmxvYWQgYHJlZ2lvbnNgIGFzIGEgR2VvSlNPTiBmaWxlIG5hbWVkIGBmaWxlbmFtZWAuICovXG4gIGRvd25sb2FkKHJlZ2lvbnM6IFJlZ2lvbltdLCBmaWxlbmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFt0aGlzLmFwaS5nZXRHZW9Kc29uU3RyaW5nKHJlZ2lvbnMpXSwgeyB0eXBlOiAnYXBwbGljYXRpb24vanNvbicgfSk7XG4gICAgc2F2ZUFzKGJsb2IsIGZpbGVuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIGByZWdpb25zKClgIHRvIHRoZSBob3N0IGFzIGBmaWxlbmFtZWAuIFNlcmlhbGl6aW5nIGlzIGRlZmVycmVkIG9uZVxuICAgKiB0aWNrIChzbyBhIHByb2dyZXNzIGluZGljYXRvciBwYWludHMgYmVmb3JlIGEgbGFyZ2Ugc3luY2hyb25vdXNcbiAgICogc2VyaWFsaXplKTsgdW5zdWJzY3JpYmluZyBiZWZvcmUgdGhlbiBjYW5jZWxzIHRoZSBzYXZlIGVudGlyZWx5LCBhbmQgYWZ0ZXJcbiAgICogaXQgY2FuY2VscyB0aGUgdXBsb2FkLiBBIHNlcmlhbGl6ZSBmYWlsdXJlIGlzIGFuIGVycm9yLCBsaWtlIGFuIHVwbG9hZCBvbmUuXG4gICAqL1xuICBzYXZlKHJlZ2lvbnM6ICgpID0+IFJlZ2lvbltdLCBmaWxlbmFtZTogc3RyaW5nKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPHZvaWQ+KChzdWJzY3JpYmVyKSA9PiB7XG4gICAgICBsZXQgdXBsb2FkOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG4gICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBsZXQgZ2VvSnNvblN0cjogc3RyaW5nO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGdlb0pzb25TdHIgPSB0aGlzLmFwaS5nZXRHZW9Kc29uU3RyaW5nKHJlZ2lvbnMoKSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdXBsb2FkID0gdGhpcy5pby5zYXZlR2VvSnNvbihnZW9Kc29uU3RyLCBmaWxlbmFtZSkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICB1cGxvYWQ/LnVuc3Vic2NyaWJlKCk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgZm9sZGVyIHN0YWNrJ3MgcmVnaW9ucyBhcyBvbmUgZ2VvanNvbiBwZXIgc2xpY2UtZmlsZSAoaml0LXVpIzkzKSwgZWFjaFxuICAgKiBzZXJpYWxpemVkIG9uIHRoZSBkZWZhdWx0IHBsYW5lICh6PTApOiBldmVyeSBzbGljZS1maWxlIGlzIG9uZSBwbGFuZSwgYW5kXG4gICAqIHRoZSBsb2FkZXIgcmUtZGVyaXZlcyB0aGUgc2xpY2UgaW5kZXggZnJvbSB0aGUgZmlsZSdzIHBvc2l0aW9uLiBTbGljZXNcbiAgICogY2xlYXJlZCBzaW5jZSBsb2FkIGFyZSBpbmNsdWRlZCAoZW1wdHkpIHNvIHRoZWlyIGZpbGUgaXMgb3ZlcndyaXR0ZW4uXG4gICAqL1xuICBzbGljZUdlb0pzb25zKCk6IFNsaWNlR2VvSnNvbltdIHtcbiAgICBjb25zdCBvdXQ6IFNsaWNlR2VvSnNvbltdID0gW107XG4gICAgZm9yIChjb25zdCBbeiwgcmVnc10gb2YgdGhpcy5hcGkuZ2V0U3RhY2tTYXZlQW5ub3RhdGlvblNsaWNlcygpKSB7XG4gICAgICBvdXQucHVzaCh7IHosIGdlb0pzb25TdHI6IHRoaXMuYXBpLmdldEdlb0pzb25TdHJpbmcocmVncy5tYXAoKHIpID0+IHdpdGhSZWdpb25aKHIsIDApKSkgfSk7XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICAvKiogV3JpdGUgcGVyLXNsaWNlIGdlb2pzb25zIHRocm91Z2ggdGhlIGhvc3QgcG9ydC4gKi9cbiAgc2F2ZVNsaWNlcyhzbGljZXM6IFNsaWNlR2VvSnNvbltdKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuaW8uc2F2ZVNsaWNlR2VvSnNvbnMoc2xpY2VzKTtcbiAgfVxuXG4gIC8qKiBSZWFkIHRoZSBmaWxlIGNob3NlbiBpbiBhIGZpbGUgaW5wdXQncyBjaGFuZ2UgZXZlbnQgYXMgdGV4dCwgdGhlbiBjYWxsXG4gICAqICBgb25UZXh0YC4gTm8tb3Agd2hlbiBubyBmaWxlIHdhcyBjaG9zZW4uICovXG4gIHJlYWRDaG9zZW5GaWxlKGV2ZW50OiBFdmVudCwgb25UZXh0OiAodGV4dDogc3RyaW5nKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgY29uc3QgZmlsZSA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuZmlsZXM/LlswXTtcbiAgICBpZiAoIWZpbGUpIHJldHVybjtcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiBvblRleHQocmVhZGVyLnJlc3VsdCBhcyBzdHJpbmcpO1xuICAgIHJlYWRlci5yZWFkQXNUZXh0KGZpbGUpO1xuICB9XG59XG4iXX0=
|
|
168
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaW9uLXBlcnNpc3RlbmNlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JlZ2lvbi1lZGl0b3IvcmVnaW9uLXBlcnNpc3RlbmNlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEVBQUUsVUFBVSxFQUFnQixFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHckUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBb0IsaUJBQWlCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUM5RixPQUFPLEVBQUUsY0FBYyxFQUFrQyxNQUFNLG1DQUFtQyxDQUFDO0FBQ25HLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7O0FBUXZDOzs7Ozs7R0FNRztBQUVILE1BQU0sT0FBTyx3QkFBd0I7SUFDbkMsWUFDOEMsR0FBcUIsRUFDeEIsRUFBZ0I7UUFEYixRQUFHLEdBQUgsR0FBRyxDQUFrQjtRQUN4QixPQUFFLEdBQUYsRUFBRSxDQUFjO0lBQ3hELENBQUM7SUFFSiw4Q0FBOEM7SUFDOUMsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVELGtGQUFrRjtJQUNsRixlQUFlO1FBQ2IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzNDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUs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b0JBQW9CO1FBQ2xCLE9BQU8sT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLGlCQUFpQixLQUFLLFVBQVUsQ0FBQztJQUN6RCxDQUFDO0lBRUQsMEZBQTBGO0lBQzFGLGlCQUFpQjtRQUNmLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxzREFBc0Q7SUFDdEQsVUFBVSxDQUFDLE1BQXNCO1FBQy9CLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7bURBQytDO0lBQy9DLGNBQWMsQ0FBQyxLQUFZLEVBQUUsTUFBOEI7UUFDekQsTUFBTSxJQUFJLEdBQUksS0FBSyxDQUFDLE1BQTJCLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPO1FBQ2xCLE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7UUFDaEMsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQWdCLENBQUMsQ0FBQztRQUN0RCxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFCLENBQUM7OEdBN0pVLHdCQUF3QixrQkFFekIsaUJBQWlCLGFBQ2pCLGNBQWM7a0hBSGIsd0JBQXdCOzsyRkFBeEIsd0JBQXdCO2tCQURwQyxVQUFVOzswQkFHTixNQUFNOzJCQUFDLGlCQUFpQjs7MEJBQ3hCLE1BQU07MkJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgc2F2ZUFzIH0gZnJvbSAnZmlsZS1zYXZlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24sIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBkZWJvdW5jZVRpbWUsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgUmVnaW9uIH0gZnJvbSAnLi4vbW9kZWxzL3JlZ2lvbic7XG5pbXBvcnQgeyB3aXRoUmVnaW9uWiB9IGZyb20gJy4uL21vZGVscy9yZWdpb24tY2xvbmUnO1xuaW1wb3J0IHsgSVJlZ2lvbkVkaXRvckFwaSwgUkVHSU9OX0VESVRPUl9BUEkgfSBmcm9tICcuLi9jb250cmFjdHMvcmVnaW9uLWVkaXRvci1hcGkuY29udHJhY3QnO1xuaW1wb3J0IHsgUkVHSU9OX0lPX1BPUlQsIFJlZ2lvbklvUG9ydCwgU2VydmVyUmVnaW9uUGljayB9IGZyb20gJy4uL2NvbnRyYWN0cy9wb3J0cy9yZWdpb24taW8ucG9ydCc7XG5pbXBvcnQgeyBmaWxlU3RlbSB9IGZyb20gJy4vZmlsZS1zdGVtJztcblxuLyoqIE9uZSBzbGljZS1maWxlJ3Mgc2VyaWFsaXplZCByZWdpb25zIChmb2xkZXIgc3RhY2ssIGppdC11aSM5MykuICovXG5leHBvcnQgaW50ZXJmYWNlIFNsaWNlR2VvSnNvbiB7XG4gIHo6IG51bWJlcjtcbiAgZ2VvSnNvblN0cjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlZ2lvbiBmaWxlIEkvTyBmb3IgdGhlIFJlZ2lvbiBFZGl0b3I6IGRlZmF1bHQgZmlsZSBuYW1lcywgR2VvSlNPTiBkb3dubG9hZFxuICogKGV4cG9ydCksIHNhdmUgdG8gdGhlIGhvc3QgdGhyb3VnaCB7QGxpbmsgUmVnaW9uSW9Qb3J0fSAod2l0aCBhIGRlYm91bmNlZFxuICogXCJmaWxlIGV4aXN0c1wiIGNoZWNrKSwgcGVyLXNsaWNlIHNhdmVzIGZvciBmb2xkZXIgc3RhY2tzLCBhbmQgcmVhZGluZyBhblxuICogaW1wb3J0ZWQgZmlsZS4gUHJvdmlkZWQgYnkgdGhlIGVkaXRvcjsgaXQgaG9sZHMgbm8gc3RhdGUg4oCUIHRoZSBlZGl0b3Igb3duc1xuICogdGhlIGRpYWxvZ3MsIHRoZSB0b2FzdHMgYW5kIHRoZSBydW5uaW5nIGpvYnMuXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBSZWdpb25QZXJzaXN0ZW5jZVNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KFJFR0lPTl9FRElUT1JfQVBJKSBwcml2YXRlIHJlYWRvbmx5IGFwaTogSVJlZ2lvbkVkaXRvckFwaSxcbiAgICBASW5qZWN0KFJFR0lPTl9JT19QT1JUKSBwcml2YXRlIHJlYWRvbmx5IGlvOiBSZWdpb25Jb1BvcnQsXG4gICkge31cblxuICAvKiogVGhlIHNlbGVjdGVkIGltYWdlJ3MgZmlsZSBuYW1lLCBpZiBhbnkuICovXG4gIHNlbGVjdGVkRmlsZU5hbWUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5pby5nZXRTZWxlY3RlZEZpbGVOYW1lKCk7XG4gIH1cblxuICAvKiogYDxpbWFnZS1zdGVtPi5nZW9qc29uYCBmb3IgYSBzZXJ2ZXIgc2F2ZTsgdW5kZWZpbmVkIHdpdGggbm8gaW1hZ2Ugc2VsZWN0ZWQuICovXG4gIGRlZmF1bHRTYXZlTmFtZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IG5hbWUgPSB0aGlzLmlvLmdldFNlbGVjdGVkRmlsZU5hbWUoKTtcbiAgICByZXR1cm4gbmFtZSA/IGAke2ZpbGVTdGVtKG5hbWUsIG5hbWUpfS5nZW9qc29uYCA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKiBgPGltYWdlLXN0ZW0+Lmdlb2pzb25gIChvciBgcm9pcy5nZW9qc29uYCkgZm9yIGEgZG93bmxvYWQuICovXG4gIGRlZmF1bHRFeHBvcnROYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke2ZpbGVTdGVtKHRoaXMuaW8uZ2V0U2VsZWN0ZWRGaWxlTmFtZSgpLCAncm9pcycpfS5nZW9qc29uYDtcbiAgfVxuXG4gIC8qKiBgPGltYWdlLXN0ZW0+X21hc2sucG5nYCAob3IgYHJlZ2lvbnNfbWFzay5wbmdgKSBmb3IgYSBtYXNrIGRvd25sb2FkLiAqL1xuICBkZWZhdWx0TWFza05hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7ZmlsZVN0ZW0odGhpcy5pby5nZXRTZWxlY3RlZEZpbGVOYW1lKCksICdyZWdpb25zJyl9X21hc2sucG5nYDtcbiAgfVxuXG4gIC8qKiBUcnVlIHdoZW4gYSBzYXZlIHdyaXRlcyBvbmUgZ2VvanNvbiBwZXIgc2xpY2UtZmlsZSAoZm9sZGVyIHN0YWNrLCBqaXQtdWkjOTMpLiAqL1xuICBzYXZlc1BlclNsaWNlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFwaS5pc1N0YWNrTW9kZSgpICYmIHRoaXMuYXBpLmdldFN0YWNrU2F2ZUxheW91dCgpID09PSAncGVyLXNsaWNlLWZpbGUnO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lvbnMgdG8gc2VyaWFsaXplIG9uIHNhdmUvZXhwb3J0LiBGb3IgYSBzaW5nbGUtZmlsZSB6LXN0YWNrIHRoZSBzdG9yZVxuICAgKiBrZWVwcyBvbmx5IHRoZSBjdXJyZW50IHNsaWNlIGxpdmUsIHNvIHRha2UgRVZFUlkgc2xpY2UncyBhbm5vdGF0aW9ucyAoZWFjaFxuICAgKiB0YWdnZWQgd2l0aCBpdHMgemVyby1iYXNlZCBSZWdpb24ueikgZm9yIG9uZSBjb21iaW5lZCB6LWluZGV4ZWQgZ2VvanNvblxuICAgKiAoaml0LXVpIzkzKTsgb3RoZXJ3aXNlIGBsaXZlYCAoc2luZ2xlIHBsYW5lLCBvciBhIGZvbGRlciBzdGFjayB3aG9zZSBzbGljZXNcbiAgICogc2F2ZSB0byB0aGVpciBvd24gZmlsZXMpLlxuICAgKi9cbiAgcmVnaW9uc0ZvclNhdmUobGl2ZTogUmVnaW9uW10pOiBSZWdpb25bXSB7XG4gICAgaWYgKHRoaXMuYXBpLmlzU3RhY2tNb2RlKCkgJiYgdGhpcy5hcGkuZ2V0U3RhY2tTYXZlTGF5b3V0KCkgPT09ICdjb21iaW5lZCcpIHtcbiAgICAgIHJldHVybiB0aGlzLmFwaS5nZXRTbGljZUFubm90YXRpb25SZWdpb25zKCk7XG4gICAgfVxuICAgIHJldHVybiBsaXZlO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgZWFjaCBmaWxlIG5hbWUgaW4gYG5hbWVzYCBhbHJlYWR5IGV4aXN0cyBvbiB0aGUgaG9zdCwgZGVib3VuY2VkXG4gICAqIDQwMCBtczsgYSBuZXdlciBuYW1lIHN1cGVyc2VkZXMgYW4gaW4tZmxpZ2h0IGNoZWNrLiBBIGZhaWxlZCBjaGVjayByZWFkcyBhc1xuICAgKiBcImRvZXMgbm90IGV4aXN0XCIgYW5kIGxhdGVyIGNoZWNrcyBrZWVwIHdvcmtpbmcuXG4gICAqL1xuICBmaWxlRXhpc3RzKG5hbWVzOiBPYnNlcnZhYmxlPHN0cmluZz4pOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gbmFtZXMucGlwZShcbiAgICAgIGRlYm91bmNlVGltZSg0MDApLFxuICAgICAgc3dpdGNoTWFwKChuYW1lKSA9PiB0aGlzLmlvLnJvaUZpbGVFeGlzdHMobmFtZSkucGlwZShjYXRjaEVycm9yKCgpID0+IG9mKGZhbHNlKSkpKSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIGByZWdpb25zYCBhcyBHZW9KU09OLCBtZXJnZWQgd2l0aCB0aGUgaW1hZ2UncyByZWdpb24gc291cmNlIHdoZW4gaXQgaGFzIG9uZSAodGhlIHNvdXJjZSdzXG4gICAqIGZlYXR1cmVzIHRoYXQgd2VyZSBub3QgdGFrZW4gb3IgZGVsZXRlZCwgdGhlbiBgcmVnaW9uc2ApOyBgc2xpY2VgIG5hbWVzIGEgZm9sZGVyIHN0YWNrJ3NcbiAgICogc2xpY2UuXG4gICAqL1xuICBzZXJpYWxpemUocmVnaW9uczogUmVnaW9uW10sIHNsaWNlPzogbnVtYmVyKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBtZXJnZWQgPSB0aGlzLmFwaS5nZXRHZW9Kc29uU3RyaW5nV2l0aFNvdXJjZT8uKHJlZ2lvbnMsIHNsaWNlKTtcbiAgICBpZiAobWVyZ2VkKSByZXR1cm4gbWVyZ2VkO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuYXBpLmdldEdlb0pzb25TdHJpbmcocmVnaW9ucykpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycik7XG4gICAgfVxuICB9XG5cbiAgLyoqIERvd25sb2FkIGByZWdpb25zYCAod2l0aCB0aGUgcmVnaW9uIHNvdXJjZSBiZWhpbmQgdGhlbSkgYXMgYSBHZW9KU09OIGZpbGUgbmFtZWQgYGZpbGVuYW1lYC4gKi9cbiAgYXN5bmMgZG93bmxvYWQocmVnaW9uczogUmVnaW9uW10sIGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2F3YWl0IHRoaXMuc2VyaWFsaXplKHJlZ2lvbnMpXSwgeyB0eXBlOiAnYXBwbGljYXRpb24vanNvbicgfSk7XG4gICAgc2F2ZUFzKGJsb2IsIGZpbGVuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIGByZWdpb25zKClgIHRvIHRoZSBob3N0IGFzIGBmaWxlbmFtZWAuIFNlcmlhbGl6aW5nIGlzIGRlZmVycmVkIG9uZVxuICAgKiB0aWNrIChzbyBhIHByb2dyZXNzIGluZGljYXRvciBwYWludHMgYmVmb3JlIGEgbGFyZ2Ugc3luY2hyb25vdXNcbiAgICogc2VyaWFsaXplKTsgdW5zdWJzY3JpYmluZyBiZWZvcmUgdGhlbiBjYW5jZWxzIHRoZSBzYXZlIGVudGlyZWx5LCBhbmQgYWZ0ZXJcbiAgICogaXQgY2FuY2VscyB0aGUgdXBsb2FkLiBBIHNlcmlhbGl6ZSBmYWlsdXJlIGlzIGFuIGVycm9yLCBsaWtlIGFuIHVwbG9hZCBvbmUuXG4gICAqL1xuICBzYXZlKHJlZ2lvbnM6ICgpID0+IFJlZ2lvbltdLCBmaWxlbmFtZTogc3RyaW5nKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPHZvaWQ+KChzdWJzY3JpYmVyKSA9PiB7XG4gICAgICBsZXQgdXBsb2FkOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG4gICAgICBsZXQgY2FuY2VsbGVkID0gZmFsc2U7XG4gICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBsZXQgc2VyaWFsaXplZDogUHJvbWlzZTxzdHJpbmc+O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHNlcmlhbGl6ZWQgPSB0aGlzLnNlcmlhbGl6ZShyZWdpb25zKCkpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHNlcmlhbGl6ZWQudGhlbihcbiAgICAgICAgICAoZ2VvSnNvblN0cikgPT4ge1xuICAgICAgICAgICAgaWYgKCFjYW5jZWxsZWQpIHVwbG9hZCA9IHRoaXMuaW8uc2F2ZUdlb0pzb24oZ2VvSnNvblN0ciwgZmlsZW5hbWUpLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIChlcnIpID0+IHN1YnNjcmliZXIuZXJyb3IoZXJyKSxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgY2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgdXBsb2FkPy51bnN1YnNjcmliZSgpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIGZvbGRlciBzdGFjaydzIHJlZ2lvbnMgYXMgb25lIGdlb2pzb24gcGVyIHNsaWNlLWZpbGUgKGppdC11aSM5MyksIGVhY2hcbiAgICogc2VyaWFsaXplZCBvbiB0aGUgZGVmYXVsdCBwbGFuZSAoej0wKTogZXZlcnkgc2xpY2UtZmlsZSBpcyBvbmUgcGxhbmUsIGFuZFxuICAgKiB0aGUgbG9hZGVyIHJlLWRlcml2ZXMgdGhlIHNsaWNlIGluZGV4IGZyb20gdGhlIGZpbGUncyBwb3NpdGlvbi4gU2xpY2VzXG4gICAqIGNsZWFyZWQgc2luY2UgbG9hZCBhcmUgaW5jbHVkZWQgKGVtcHR5KSBzbyB0aGVpciBmaWxlIGlzIG92ZXJ3cml0dGVuLCBhbmQgc28gYXJlIHNsaWNlc1xuICAgKiB3aG9zZSByZWdpb24gc291cmNlIGxvc3QgZmVhdHVyZXM7IGEgc2xpY2Ugd2l0aCBhIHJlZ2lvbiBzb3VyY2Uga2VlcHMgdGhlIGZlYXR1cmVzIHN0aWxsXG4gICAqIGluIGl0LlxuICAgKi9cbiAgYXN5bmMgc2xpY2VHZW9Kc29ucygpOiBQcm9taXNlPFNsaWNlR2VvSnNvbltdPiB7XG4gICAgY29uc3Qgb3V0OiBTbGljZUdlb0pzb25bXSA9IFtdO1xuICAgIGZvciAoY29uc3QgW3osIHJlZ3NdIG9mIHRoaXMuYXBpLmdldFN0YWNrU2F2ZUFubm90YXRpb25TbGljZXMoKSkge1xuICAgICAgb3V0LnB1c2goe1xuICAgICAgICB6LFxuICAgICAgICBnZW9Kc29uU3RyOiBhd2FpdCB0aGlzLnNlcmlhbGl6ZShcbiAgICAgICAgICByZWdzLm1hcCgocikgPT4gd2l0aFJlZ2lvbloociwgMCkpLFxuICAgICAgICAgIHosXG4gICAgICAgICksXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBob3N0IGNhbiBwaWNrIHJlZ2lvbnMgb24gaXRzIHNlcnZlciAoc2VlIFJlZ2lvbklvUG9ydC5waWNrU2VydmVyUmVnaW9ucykuICovXG4gIGNhblBpY2tTZXJ2ZXJSZWdpb25zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5pby5waWNrU2VydmVyUmVnaW9ucyA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIC8qKiBMZXQgdGhlIHVzZXIgcGljayByZWdpb25zIG9uIHRoZSBob3N0J3Mgc2VydmVyOyBudWxsIHdoZW4gY2FuY2VsbGVkIG9yIHVuc3VwcG9ydGVkLiAqL1xuICBwaWNrU2VydmVyUmVnaW9ucygpOiBPYnNlcnZhYmxlPFNlcnZlclJlZ2lvblBpY2sgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuaW8ucGlja1NlcnZlclJlZ2lvbnM/LigpID8/IG9mKG51bGwpO1xuICB9XG5cbiAgLyoqIFdyaXRlIHBlci1zbGljZSBnZW9qc29ucyB0aHJvdWdoIHRoZSBob3N0IHBvcnQuICovXG4gIHNhdmVTbGljZXMoc2xpY2VzOiBTbGljZUdlb0pzb25bXSk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmlvLnNhdmVTbGljZUdlb0pzb25zKHNsaWNlcyk7XG4gIH1cblxuICAvKiogUmVhZCB0aGUgZmlsZSBjaG9zZW4gaW4gYSBmaWxlIGlucHV0J3MgY2hhbmdlIGV2ZW50IGFzIHRleHQsIHRoZW4gY2FsbFxuICAgKiAgYG9uVGV4dGAuIE5vLW9wIHdoZW4gbm8gZmlsZSB3YXMgY2hvc2VuLiAqL1xuICByZWFkQ2hvc2VuRmlsZShldmVudDogRXZlbnQsIG9uVGV4dDogKHRleHQ6IHN0cmluZykgPT4gdm9pZCk6IHZvaWQge1xuICAgIGNvbnN0IGZpbGUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmZpbGVzPy5bMF07XG4gICAgaWYgKCFmaWxlKSByZXR1cm47XG4gICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICByZWFkZXIub25sb2FkID0gKCkgPT4gb25UZXh0KHJlYWRlci5yZXN1bHQgYXMgc3RyaW5nKTtcbiAgICByZWFkZXIucmVhZEFzVGV4dChmaWxlKTtcbiAgfVxufVxuIl19
|
|
@@ -11,7 +11,7 @@ import { TableModule } from 'primeng/table';
|
|
|
11
11
|
import { TooltipModule } from 'primeng/tooltip';
|
|
12
12
|
import { defaultPresetSet } from '../../models/class-preset';
|
|
13
13
|
import { colorForLabel } from '../../store/class-color.util';
|
|
14
|
-
import { formatArea, regionAreaPx } from '../region-metrics';
|
|
14
|
+
import { formatArea, formatVolume, regionAreaPx } from '../region-metrics';
|
|
15
15
|
import * as i0 from "@angular/core";
|
|
16
16
|
import * as i1 from "@angular/common";
|
|
17
17
|
import * as i2 from "@angular/forms";
|
|
@@ -56,6 +56,11 @@ export class RegionTableComponent {
|
|
|
56
56
|
this.defaultColor = '#00FFFF';
|
|
57
57
|
/** Pixel size for the area column. */
|
|
58
58
|
this.mpp = {};
|
|
59
|
+
/**
|
|
60
|
+
* In a volume view, each class's volume over the whole stack (px² × slices; null while it is
|
|
61
|
+
* computed): the column shows the row's class volume instead of its area. Null: areas.
|
|
62
|
+
*/
|
|
63
|
+
this.volumes = null;
|
|
59
64
|
/** Rows whose label is being edited → the typed draft. A new map per start/stop. */
|
|
60
65
|
this.labelDrafts = new Map();
|
|
61
66
|
/** A row's pencil: start editing its label. */
|
|
@@ -70,18 +75,27 @@ export class RegionTableComponent {
|
|
|
70
75
|
this.deleteRow = new EventEmitter();
|
|
71
76
|
/** The paginator moved or changed its page size. */
|
|
72
77
|
this.pageChange = new EventEmitter();
|
|
73
|
-
/** Per row of {@link page}: its class swatch colour and formatted area
|
|
74
|
-
* an input changes instead of per check (the area walks the region's geometry). */
|
|
78
|
+
/** Per row of {@link page}: its class swatch colour and formatted area (or class volume),
|
|
79
|
+
* derived when an input changes instead of per check (the area walks the region's geometry). */
|
|
75
80
|
this.rowView = new Map();
|
|
76
81
|
}
|
|
77
82
|
ngOnChanges() {
|
|
78
|
-
this.rowView = new Map(this.page.map((r) => [r, { color: this.classColor(r.label),
|
|
83
|
+
this.rowView = new Map(this.page.map((r) => [r, { color: this.classColor(r.label), measure: this.measure(r) }]));
|
|
84
|
+
}
|
|
85
|
+
measure(region) {
|
|
86
|
+
if (!this.volumes)
|
|
87
|
+
return this.area(region);
|
|
88
|
+
if (!region.label || !this.volumes.has(region.label))
|
|
89
|
+
return '';
|
|
90
|
+
const v = this.volumes.get(region.label);
|
|
91
|
+
return v == null ? '…' : formatVolume(v, this.mpp);
|
|
79
92
|
}
|
|
80
93
|
classColor(name) {
|
|
81
94
|
return name ? colorForLabel(name, this.presetSet) : this.defaultColor;
|
|
82
95
|
}
|
|
83
96
|
area(region) {
|
|
84
|
-
|
|
97
|
+
// A region source's stand-in row has no geometry yet: the source's index gives its area.
|
|
98
|
+
return formatArea(region.bounds ? regionAreaPx(region) : (region.sourceArea ?? 0), this.mpp);
|
|
85
99
|
}
|
|
86
100
|
startEdit(region, event) {
|
|
87
101
|
event.stopPropagation(); // don't toggle row selection
|
|
@@ -95,7 +109,7 @@ export class RegionTableComponent {
|
|
|
95
109
|
this.pageChange.emit({ first: event.first ?? 0, rows: event.rows ?? this.rows });
|
|
96
110
|
}
|
|
97
111
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: RegionTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
98
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.9", type: RegionTableComponent, isStandalone: true, selector: "region-table", inputs: { page: "page", total: "total", first: "first", rows: "rows", rowsPerPageOptions: "rowsPerPageOptions", metaKey: "metaKey", selection: "selection", presetSet: "presetSet", defaultColor: "defaultColor", mpp: "mpp", labelDrafts: "labelDrafts" }, outputs: { selectionChange: "selectionChange", rowSelect: "rowSelect", labelEditStart: "labelEditStart", labelDraftChange: "labelDraftChange", labelEditStop: "labelEditStop", classPick: "classPick", deleteRow: "deleteRow", pageChange: "pageChange" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"region-editor-content\">\n <p-table\n [value]=\"page\"\n [tableStyle]=\"{ width: '100%' }\"\n [selection]=\"selection\"\n (selectionChange)=\"selectionChange.emit($event)\"\n selectionMode=\"multiple\"\n [metaKeySelection]=\"metaKey\"\n (onRowSelect)=\"rowSelect.emit()\"\n (onRowUnselect)=\"rowSelect.emit()\"\n [resizableColumns]=\"true\"\n [rowHover]=\"true\"\n dataKey=\"id\"\n styleClass=\"p-datatable-sm region-editor-table\"\n [scrollable]=\"true\"\n scrollHeight=\"100%\"\n >\n <ng-template pTemplate=\"header\">\n <!-- Hide the column header when there are no regions to show. -->\n <tr *ngIf=\"total > 0\">\n <!-- Class column: shrinks to fit \"Region\" by default, grows with longer labels. -->\n <th class=\"class-col-header\" pResizableColumn>Class <p-sortIcon field=\"label\"></p-sortIcon></th>\n <th class=\"surface-col-header\" pResizableColumn>Surface</th>\n <!-- Trash column: just enough for the icon. -->\n <th style=\"width: 2rem\"></th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-region let-rowIdx=\"rowIndex\">\n <tr [pSelectableRow]=\"region\" [pSelectableRowIndex]=\"rowIdx\">\n <td class=\"class-cell\">\n <ng-container *ngIf=\"!labelDrafts.has(region); else editLabelTpl\">\n <span class=\"class-cell-display\">\n <!-- Quick-pick a preset class (its colour follows); the pencil is for\n a free-form name / rename (jit-ui#70). -->\n <p-dropdown\n class=\"class-dropdown\"\n appendTo=\"body\"\n [options]=\"presetSet.classes\"\n optionLabel=\"name\"\n optionValue=\"name\"\n [ngModel]=\"region.label\"\n [autoDisplayFirst]=\"false\"\n ariaLabel=\"Class\"\n (onChange)=\"classPick.emit({ region: region, name: $event.value })\"\n >\n <ng-template pTemplate=\"selectedItem\">\n <span class=\"dd-value\">\n <span class=\"chip-swatch\" [style.background]=\"rowView.get(region)?.color\"></span>\n <span class=\"class-name\" [pTooltip]=\"region.label\" tooltipPosition=\"bottom\">{{\n region.label || '\u2014'\n }}</span>\n </span>\n </ng-template>\n <ng-template let-c pTemplate=\"item\">\n <span class=\"dd-value\">\n <span class=\"chip-swatch\" [style.background]=\"c.color\"></span>\n <span>{{ c.name }}</span>\n </span>\n </ng-template>\n </p-dropdown>\n <i\n class=\"pi pi-pencil icon-hover ml-2\"\n pTooltip=\"Rename / free-form label\"\n tooltipPosition=\"bottom\"\n role=\"button\"\n aria-label=\"Rename\"\n (click)=\"startEdit(region, $event)\"\n ></i>\n </span>\n </ng-container>\n <ng-template #editLabelTpl>\n <span class=\"p-input-icon-right class-cell-edit\">\n <i\n class=\"pi pi-times icon-hover\"\n pTooltip=\"Close\"\n tooltipPosition=\"bottom\"\n role=\"button\"\n aria-label=\"Cancel rename\"\n (click)=\"stopEdit(region, false, $event)\"\n ></i>\n <input\n type=\"text\"\n pInputText\n class=\"p-inputtext-sm w-full\"\n aria-label=\"Class label\"\n [ngModel]=\"labelDrafts.get(region)\"\n (ngModelChange)=\"labelDraftChange.emit({ region: region, value: $event })\"\n (click)=\"$event.stopPropagation()\"\n (keydown.enter)=\"stopEdit(region, true, $event)\"\n (keydown.escape)=\"stopEdit(region, false, $event)\"\n />\n </span>\n </ng-template>\n </td>\n <!-- Surface area (\u00B5m\u00B2/mm\u00B2 when the image is scaled, else px\u00B2). -->\n <td class=\"surface-cell\">{{ rowView.get(region)?.area || '\u2014' }}</td>\n <td>\n <button\n pButton\n pRipple\n icon=\"pi pi-trash\"\n aria-label=\"Delete region\"\n class=\"p-button-sm p-button-rounded p-button-text p-button-warning\"\n (click)=\"deleteRow.emit(first + rowIdx)\"\n ></button>\n </td>\n </tr>\n </ng-template>\n </p-table>\n</div>\n\n<p-paginator\n *ngIf=\"total > 0\"\n [rows]=\"rows\"\n [totalRecords]=\"total\"\n [first]=\"first\"\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\n [showCurrentPageReport]=\"true\"\n currentPageReportTemplate=\"{first} to {last} of {totalRecords}\"\n (onPageChange)=\"onPage($event)\"\n styleClass=\"region-editor-paginator\"\n>\n</p-paginator>\n", styles: ["@charset \"UTF-8\";.chip-swatch{display:inline-block;width:.75rem;height:.75rem;border-radius:50%;border:1px solid rgba(0,0,0,.2);flex:0 0 auto}.dd-value{display:inline-flex;align-items:center;gap:.4rem;min-width:0}.dd-value .class-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;overflow:hidden}.region-editor-content{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;overflow:hidden}::ng-deep .region-editor-content .p-3{padding:0!important}::ng-deep .region-editor-content>p-table{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;overflow:hidden}::ng-deep .region-editor-content .p-datatable.region-editor-table{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;overflow:hidden}::ng-deep .region-editor-content .p-datatable.region-editor-table>.p-datatable-header{flex:0 0 auto}::ng-deep .region-editor-content .p-datatable.region-editor-table>.p-datatable-wrapper,::ng-deep .region-editor-content .p-datatable.region-editor-table>.p-datatable-table-container,::ng-deep .region-editor-content .p-datatable.region-editor-table .p-scroller-viewport{flex:1 1 0;min-height:0;height:100%;max-height:100%;overflow:auto}:host>p-paginator{display:block;flex:0 0 auto;border-top:1px solid var(--surface-border);padding:.25rem 0}.class-col-header,.class-cell{white-space:nowrap;max-width:16rem}.class-cell .class-cell-display{display:flex;align-items:center;min-width:0}.class-cell .class-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.class-cell .icon-hover{flex:0 0 auto}.class-cell .icon-hover{cursor:pointer;color:var(--text-color-secondary);transition:color .15s ease}.class-cell .icon-hover:hover{color:var(--primary-color)}.class-cell .class-cell-edit{display:inline-block;width:100%}::ng-deep .p-datatable-sm .p-datatable-tbody>tr>td .p-button.p-button-rounded,::ng-deep .p-datatable-sm .p-datatable-tbody>tr>td .p-button.p-button-icon-only{width:1.5rem;height:1.5rem;padding:0}::ng-deep .p-datatable-sm .p-datatable-tbody>tr>td .p-button.p-button-rounded .p-button-icon,::ng-deep .p-datatable-sm .p-datatable-tbody>tr>td .p-button.p-button-icon-only .p-button-icon{font-size:.75rem}::ng-deep .p-datatable-sm .p-datatable-tbody>tr>td .p-inputtext{padding:.25rem .5rem;font-size:.875rem}::ng-deep .p-datatable-sm .p-paginator{padding:.15rem .25rem!important;min-height:unset!important}::ng-deep .p-datatable-sm .p-paginator,::ng-deep .p-datatable-sm .p-paginator *{font-size:.75rem!important}::ng-deep .p-datatable-sm .p-paginator .p-paginator-element{min-width:1.5rem!important;height:1.5rem!important}::ng-deep .p-datatable-sm .p-paginator .p-paginator-current{font-size:.75rem!important;height:1.5rem!important;min-width:unset!important}::ng-deep .p-datatable-sm .p-paginator .p-dropdown{height:1.5rem!important}::ng-deep .p-datatable-sm .p-paginator .p-dropdown .p-dropdown-label{padding:.1rem .25rem!important;line-height:1.2!important}::ng-deep .p-datatable-sm .p-paginator .p-dropdown .p-dropdown-trigger{width:1.25rem!important}::ng-deep .p-paginator-rpp-options .p-dropdown-panel .p-dropdown-items .p-dropdown-item{padding:.25rem .5rem!important;font-size:.75rem!important}.class-cell .class-dropdown{min-width:0;flex:1 1 auto}::ng-deep .class-cell .class-dropdown.p-dropdown{width:100%}::ng-deep .class-cell .class-dropdown .p-dropdown-label{padding:.15rem .5rem;display:flex;align-items:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: SharedModule }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i4.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "component", type: i5.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "autoShowPanelOnPrintableCharacterKeyDown", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i6.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "ngmodule", type: PaginatorModule }, { kind: "component", type: i7.Paginator, selector: "p-paginator", inputs: ["pageLinkSize", "style", "styleClass", "alwaysShow", "dropdownAppendTo", "templateLeft", "templateRight", "appendTo", "dropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showFirstLastIcon", "totalRecords", "rows", "rowsPerPageOptions", "showJumpToPageDropdown", "showJumpToPageInput", "jumpToPageItemTemplate", "showPageLinks", "locale", "dropdownItemTemplate", "first"], outputs: ["onPageChange"] }, { kind: "ngmodule", type: RippleModule }, { kind: "directive", type: i8.Ripple, selector: "[pRipple]" }, { kind: "ngmodule", type: TableModule }, { kind: "component", type: i9.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i9.SelectableRow, selector: "[pSelectableRow]", inputs: ["pSelectableRow", "pSelectableRowIndex", "pSelectableRowDisabled"] }, { kind: "directive", type: i9.ResizableColumn, selector: "[pResizableColumn]", inputs: ["pResizableColumnDisabled"] }, { kind: "component", type: i9.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i10.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
112
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.9", type: RegionTableComponent, isStandalone: true, selector: "region-table", inputs: { page: "page", total: "total", first: "first", rows: "rows", rowsPerPageOptions: "rowsPerPageOptions", metaKey: "metaKey", selection: "selection", presetSet: "presetSet", defaultColor: "defaultColor", mpp: "mpp", volumes: "volumes", labelDrafts: "labelDrafts" }, outputs: { selectionChange: "selectionChange", rowSelect: "rowSelect", labelEditStart: "labelEditStart", labelDraftChange: "labelDraftChange", labelEditStop: "labelEditStop", classPick: "classPick", deleteRow: "deleteRow", pageChange: "pageChange" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"region-editor-content\">\n <p-table\n [value]=\"page\"\n [tableStyle]=\"{ width: '100%' }\"\n [selection]=\"selection\"\n (selectionChange)=\"selectionChange.emit($event)\"\n selectionMode=\"multiple\"\n [metaKeySelection]=\"metaKey\"\n (onRowSelect)=\"rowSelect.emit()\"\n (onRowUnselect)=\"rowSelect.emit()\"\n [resizableColumns]=\"true\"\n [rowHover]=\"true\"\n dataKey=\"id\"\n styleClass=\"p-datatable-sm region-editor-table\"\n [scrollable]=\"true\"\n scrollHeight=\"100%\"\n >\n <ng-template pTemplate=\"header\">\n <!-- Hide the column header when there are no regions to show. -->\n <tr *ngIf=\"total > 0\">\n <!-- Class column: shrinks to fit \"Region\" by default, grows with longer labels. -->\n <th class=\"class-col-header\" pResizableColumn>Class <p-sortIcon field=\"label\"></p-sortIcon></th>\n <th\n *ngIf=\"!volumes\"\n class=\"surface-col-header\"\n pResizableColumn\n pTooltip=\"The region's area on this slice\"\n tooltipPosition=\"top\"\n >\n Surface\n </th>\n <th\n *ngIf=\"volumes\"\n class=\"surface-col-header\"\n pResizableColumn\n pTooltip=\"The volume of the region's class over the whole stack: its area on every slice, one slice thick\"\n tooltipPosition=\"top\"\n >\n Volume\n </th>\n <!-- Trash column: just enough for the icon. -->\n <th style=\"width: 2rem\"></th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-region let-rowIdx=\"rowIndex\">\n <tr [pSelectableRow]=\"region\" [pSelectableRowIndex]=\"rowIdx\">\n <td class=\"class-cell\">\n <ng-container *ngIf=\"!labelDrafts.has(region); else editLabelTpl\">\n <span class=\"class-cell-display\">\n <!-- Quick-pick a preset class (its colour follows); the pencil is for\n a free-form name / rename (jit-ui#70). -->\n <p-dropdown\n class=\"class-dropdown\"\n appendTo=\"body\"\n [options]=\"presetSet.classes\"\n optionLabel=\"name\"\n optionValue=\"name\"\n [ngModel]=\"region.label\"\n [autoDisplayFirst]=\"false\"\n ariaLabel=\"Class\"\n (onChange)=\"classPick.emit({ region: region, name: $event.value })\"\n >\n <ng-template pTemplate=\"selectedItem\">\n <span class=\"dd-value\">\n <span class=\"chip-swatch\" [style.background]=\"rowView.get(region)?.color\"></span>\n <span class=\"class-name\" [pTooltip]=\"region.label\" tooltipPosition=\"bottom\">{{\n region.label || '\u2014'\n }}</span>\n </span>\n </ng-template>\n <ng-template let-c pTemplate=\"item\">\n <span class=\"dd-value\">\n <span class=\"chip-swatch\" [style.background]=\"c.color\"></span>\n <span>{{ c.name }}</span>\n </span>\n </ng-template>\n </p-dropdown>\n <i\n class=\"pi pi-pencil icon-hover ml-2\"\n pTooltip=\"Rename / free-form label\"\n tooltipPosition=\"bottom\"\n role=\"button\"\n aria-label=\"Rename\"\n (click)=\"startEdit(region, $event)\"\n ></i>\n </span>\n </ng-container>\n <ng-template #editLabelTpl>\n <span class=\"p-input-icon-right class-cell-edit\">\n <i\n class=\"pi pi-times icon-hover\"\n pTooltip=\"Close\"\n tooltipPosition=\"bottom\"\n role=\"button\"\n aria-label=\"Cancel rename\"\n (click)=\"stopEdit(region, false, $event)\"\n ></i>\n <input\n type=\"text\"\n pInputText\n class=\"p-inputtext-sm w-full\"\n aria-label=\"Class label\"\n [ngModel]=\"labelDrafts.get(region)\"\n (ngModelChange)=\"labelDraftChange.emit({ region: region, value: $event })\"\n (click)=\"$event.stopPropagation()\"\n (keydown.enter)=\"stopEdit(region, true, $event)\"\n (keydown.escape)=\"stopEdit(region, false, $event)\"\n />\n </span>\n </ng-template>\n </td>\n <!-- Surface area (\u00B5m\u00B2/mm\u00B2 when the image is scaled, else px\u00B2). -->\n <td class=\"surface-cell\">{{ rowView.get(region)?.measure || '\u2014' }}</td>\n <td>\n <button\n pButton\n pRipple\n icon=\"pi pi-trash\"\n aria-label=\"Delete region\"\n class=\"p-button-sm p-button-rounded p-button-text p-button-warning\"\n (click)=\"deleteRow.emit(first + rowIdx)\"\n ></button>\n </td>\n </tr>\n </ng-template>\n </p-table>\n</div>\n\n<p-paginator\n *ngIf=\"total > 0\"\n [rows]=\"rows\"\n [totalRecords]=\"total\"\n [first]=\"first\"\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\n [showCurrentPageReport]=\"true\"\n currentPageReportTemplate=\"{first} to {last} of {totalRecords}\"\n (onPageChange)=\"onPage($event)\"\n styleClass=\"region-editor-paginator\"\n>\n</p-paginator>\n", styles: ["@charset \"UTF-8\";.chip-swatch{display:inline-block;width:.75rem;height:.75rem;border-radius:50%;border:1px solid rgba(0,0,0,.2);flex:0 0 auto}.dd-value{display:inline-flex;align-items:center;gap:.4rem;min-width:0}.dd-value .class-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;overflow:hidden}.region-editor-content{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;overflow:hidden}::ng-deep .region-editor-content .p-3{padding:0!important}::ng-deep .region-editor-content>p-table{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;overflow:hidden}::ng-deep .region-editor-content .p-datatable.region-editor-table{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;overflow:hidden}::ng-deep .region-editor-content .p-datatable.region-editor-table>.p-datatable-header{flex:0 0 auto}::ng-deep .region-editor-content .p-datatable.region-editor-table>.p-datatable-wrapper,::ng-deep .region-editor-content .p-datatable.region-editor-table>.p-datatable-table-container,::ng-deep .region-editor-content .p-datatable.region-editor-table .p-scroller-viewport{flex:1 1 0;min-height:0;height:100%;max-height:100%;overflow:auto}:host>p-paginator{display:block;flex:0 0 auto;border-top:1px solid var(--surface-border);padding:.25rem 0}.class-col-header,.class-cell{white-space:nowrap;max-width:16rem}.class-cell .class-cell-display{display:flex;align-items:center;min-width:0}.class-cell .class-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.class-cell .icon-hover{flex:0 0 auto}.class-cell .icon-hover{cursor:pointer;color:var(--text-color-secondary);transition:color .15s ease}.class-cell .icon-hover:hover{color:var(--primary-color)}.class-cell .class-cell-edit{display:inline-block;width:100%}::ng-deep .p-datatable-sm .p-datatable-tbody>tr>td .p-button.p-button-rounded,::ng-deep .p-datatable-sm .p-datatable-tbody>tr>td .p-button.p-button-icon-only{width:1.5rem;height:1.5rem;padding:0}::ng-deep .p-datatable-sm .p-datatable-tbody>tr>td .p-button.p-button-rounded .p-button-icon,::ng-deep .p-datatable-sm .p-datatable-tbody>tr>td .p-button.p-button-icon-only .p-button-icon{font-size:.75rem}::ng-deep .p-datatable-sm .p-datatable-tbody>tr>td .p-inputtext{padding:.25rem .5rem;font-size:.875rem}::ng-deep .p-datatable-sm .p-paginator{padding:.15rem .25rem!important;min-height:unset!important}::ng-deep .p-datatable-sm .p-paginator,::ng-deep .p-datatable-sm .p-paginator *{font-size:.75rem!important}::ng-deep .p-datatable-sm .p-paginator .p-paginator-element{min-width:1.5rem!important;height:1.5rem!important}::ng-deep .p-datatable-sm .p-paginator .p-paginator-current{font-size:.75rem!important;height:1.5rem!important;min-width:unset!important}::ng-deep .p-datatable-sm .p-paginator .p-dropdown{height:1.5rem!important}::ng-deep .p-datatable-sm .p-paginator .p-dropdown .p-dropdown-label{padding:.1rem .25rem!important;line-height:1.2!important}::ng-deep .p-datatable-sm .p-paginator .p-dropdown .p-dropdown-trigger{width:1.25rem!important}::ng-deep .p-paginator-rpp-options .p-dropdown-panel .p-dropdown-items .p-dropdown-item{padding:.25rem .5rem!important;font-size:.75rem!important}.class-cell .class-dropdown{min-width:0;flex:1 1 auto}::ng-deep .class-cell .class-dropdown.p-dropdown{width:100%}::ng-deep .class-cell .class-dropdown .p-dropdown-label{padding:.15rem .5rem;display:flex;align-items:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: SharedModule }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i4.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "component", type: i5.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "autoShowPanelOnPrintableCharacterKeyDown", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i6.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "ngmodule", type: PaginatorModule }, { kind: "component", type: i7.Paginator, selector: "p-paginator", inputs: ["pageLinkSize", "style", "styleClass", "alwaysShow", "dropdownAppendTo", "templateLeft", "templateRight", "appendTo", "dropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showFirstLastIcon", "totalRecords", "rows", "rowsPerPageOptions", "showJumpToPageDropdown", "showJumpToPageInput", "jumpToPageItemTemplate", "showPageLinks", "locale", "dropdownItemTemplate", "first"], outputs: ["onPageChange"] }, { kind: "ngmodule", type: RippleModule }, { kind: "directive", type: i8.Ripple, selector: "[pRipple]" }, { kind: "ngmodule", type: TableModule }, { kind: "component", type: i9.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i9.SelectableRow, selector: "[pSelectableRow]", inputs: ["pSelectableRow", "pSelectableRowIndex", "pSelectableRowDisabled"] }, { kind: "directive", type: i9.ResizableColumn, selector: "[pResizableColumn]", inputs: ["pResizableColumnDisabled"] }, { kind: "component", type: i9.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i10.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
99
113
|
}
|
|
100
114
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: RegionTableComponent, decorators: [{
|
|
101
115
|
type: Component,
|
|
@@ -110,7 +124,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImpor
|
|
|
110
124
|
RippleModule,
|
|
111
125
|
TableModule,
|
|
112
126
|
TooltipModule,
|
|
113
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"region-editor-content\">\n <p-table\n [value]=\"page\"\n [tableStyle]=\"{ width: '100%' }\"\n [selection]=\"selection\"\n (selectionChange)=\"selectionChange.emit($event)\"\n selectionMode=\"multiple\"\n [metaKeySelection]=\"metaKey\"\n (onRowSelect)=\"rowSelect.emit()\"\n (onRowUnselect)=\"rowSelect.emit()\"\n [resizableColumns]=\"true\"\n [rowHover]=\"true\"\n dataKey=\"id\"\n styleClass=\"p-datatable-sm region-editor-table\"\n [scrollable]=\"true\"\n scrollHeight=\"100%\"\n >\n <ng-template pTemplate=\"header\">\n <!-- Hide the column header when there are no regions to show. -->\n <tr *ngIf=\"total > 0\">\n <!-- Class column: shrinks to fit \"Region\" by default, grows with longer labels. -->\n <th class=\"class-col-header\" pResizableColumn>Class <p-sortIcon field=\"label\"></p-sortIcon></th>\n <th
|
|
127
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"region-editor-content\">\n <p-table\n [value]=\"page\"\n [tableStyle]=\"{ width: '100%' }\"\n [selection]=\"selection\"\n (selectionChange)=\"selectionChange.emit($event)\"\n selectionMode=\"multiple\"\n [metaKeySelection]=\"metaKey\"\n (onRowSelect)=\"rowSelect.emit()\"\n (onRowUnselect)=\"rowSelect.emit()\"\n [resizableColumns]=\"true\"\n [rowHover]=\"true\"\n dataKey=\"id\"\n styleClass=\"p-datatable-sm region-editor-table\"\n [scrollable]=\"true\"\n scrollHeight=\"100%\"\n >\n <ng-template pTemplate=\"header\">\n <!-- Hide the column header when there are no regions to show. -->\n <tr *ngIf=\"total > 0\">\n <!-- Class column: shrinks to fit \"Region\" by default, grows with longer labels. -->\n <th class=\"class-col-header\" pResizableColumn>Class <p-sortIcon field=\"label\"></p-sortIcon></th>\n <th\n *ngIf=\"!volumes\"\n class=\"surface-col-header\"\n pResizableColumn\n pTooltip=\"The region's area on this slice\"\n tooltipPosition=\"top\"\n >\n Surface\n </th>\n <th\n *ngIf=\"volumes\"\n class=\"surface-col-header\"\n pResizableColumn\n pTooltip=\"The volume of the region's class over the whole stack: its area on every slice, one slice thick\"\n tooltipPosition=\"top\"\n >\n Volume\n </th>\n <!-- Trash column: just enough for the icon. -->\n <th style=\"width: 2rem\"></th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-region let-rowIdx=\"rowIndex\">\n <tr [pSelectableRow]=\"region\" [pSelectableRowIndex]=\"rowIdx\">\n <td class=\"class-cell\">\n <ng-container *ngIf=\"!labelDrafts.has(region); else editLabelTpl\">\n <span class=\"class-cell-display\">\n <!-- Quick-pick a preset class (its colour follows); the pencil is for\n a free-form name / rename (jit-ui#70). -->\n <p-dropdown\n class=\"class-dropdown\"\n appendTo=\"body\"\n [options]=\"presetSet.classes\"\n optionLabel=\"name\"\n optionValue=\"name\"\n [ngModel]=\"region.label\"\n [autoDisplayFirst]=\"false\"\n ariaLabel=\"Class\"\n (onChange)=\"classPick.emit({ region: region, name: $event.value })\"\n >\n <ng-template pTemplate=\"selectedItem\">\n <span class=\"dd-value\">\n <span class=\"chip-swatch\" [style.background]=\"rowView.get(region)?.color\"></span>\n <span class=\"class-name\" [pTooltip]=\"region.label\" tooltipPosition=\"bottom\">{{\n region.label || '\u2014'\n }}</span>\n </span>\n </ng-template>\n <ng-template let-c pTemplate=\"item\">\n <span class=\"dd-value\">\n <span class=\"chip-swatch\" [style.background]=\"c.color\"></span>\n <span>{{ c.name }}</span>\n </span>\n </ng-template>\n </p-dropdown>\n <i\n class=\"pi pi-pencil icon-hover ml-2\"\n pTooltip=\"Rename / free-form label\"\n tooltipPosition=\"bottom\"\n role=\"button\"\n aria-label=\"Rename\"\n (click)=\"startEdit(region, $event)\"\n ></i>\n </span>\n </ng-container>\n <ng-template #editLabelTpl>\n <span class=\"p-input-icon-right class-cell-edit\">\n <i\n class=\"pi pi-times icon-hover\"\n pTooltip=\"Close\"\n tooltipPosition=\"bottom\"\n role=\"button\"\n aria-label=\"Cancel rename\"\n (click)=\"stopEdit(region, false, $event)\"\n ></i>\n <input\n type=\"text\"\n pInputText\n class=\"p-inputtext-sm w-full\"\n aria-label=\"Class label\"\n [ngModel]=\"labelDrafts.get(region)\"\n (ngModelChange)=\"labelDraftChange.emit({ region: region, value: $event })\"\n (click)=\"$event.stopPropagation()\"\n (keydown.enter)=\"stopEdit(region, true, $event)\"\n (keydown.escape)=\"stopEdit(region, false, $event)\"\n />\n </span>\n </ng-template>\n </td>\n <!-- Surface area (\u00B5m\u00B2/mm\u00B2 when the image is scaled, else px\u00B2). -->\n <td class=\"surface-cell\">{{ rowView.get(region)?.measure || '\u2014' }}</td>\n <td>\n <button\n pButton\n pRipple\n icon=\"pi pi-trash\"\n aria-label=\"Delete region\"\n class=\"p-button-sm p-button-rounded p-button-text p-button-warning\"\n (click)=\"deleteRow.emit(first + rowIdx)\"\n ></button>\n </td>\n </tr>\n </ng-template>\n </p-table>\n</div>\n\n<p-paginator\n *ngIf=\"total > 0\"\n [rows]=\"rows\"\n [totalRecords]=\"total\"\n [first]=\"first\"\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\n [showCurrentPageReport]=\"true\"\n currentPageReportTemplate=\"{first} to {last} of {totalRecords}\"\n (onPageChange)=\"onPage($event)\"\n styleClass=\"region-editor-paginator\"\n>\n</p-paginator>\n", styles: ["@charset \"UTF-8\";.chip-swatch{display:inline-block;width:.75rem;height:.75rem;border-radius:50%;border:1px solid rgba(0,0,0,.2);flex:0 0 auto}.dd-value{display:inline-flex;align-items:center;gap:.4rem;min-width:0}.dd-value .class-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;overflow:hidden}.region-editor-content{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;overflow:hidden}::ng-deep .region-editor-content .p-3{padding:0!important}::ng-deep .region-editor-content>p-table{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;overflow:hidden}::ng-deep .region-editor-content .p-datatable.region-editor-table{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;overflow:hidden}::ng-deep .region-editor-content .p-datatable.region-editor-table>.p-datatable-header{flex:0 0 auto}::ng-deep .region-editor-content .p-datatable.region-editor-table>.p-datatable-wrapper,::ng-deep .region-editor-content .p-datatable.region-editor-table>.p-datatable-table-container,::ng-deep .region-editor-content .p-datatable.region-editor-table .p-scroller-viewport{flex:1 1 0;min-height:0;height:100%;max-height:100%;overflow:auto}:host>p-paginator{display:block;flex:0 0 auto;border-top:1px solid var(--surface-border);padding:.25rem 0}.class-col-header,.class-cell{white-space:nowrap;max-width:16rem}.class-cell .class-cell-display{display:flex;align-items:center;min-width:0}.class-cell .class-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.class-cell .icon-hover{flex:0 0 auto}.class-cell .icon-hover{cursor:pointer;color:var(--text-color-secondary);transition:color .15s ease}.class-cell .icon-hover:hover{color:var(--primary-color)}.class-cell .class-cell-edit{display:inline-block;width:100%}::ng-deep .p-datatable-sm .p-datatable-tbody>tr>td .p-button.p-button-rounded,::ng-deep .p-datatable-sm .p-datatable-tbody>tr>td .p-button.p-button-icon-only{width:1.5rem;height:1.5rem;padding:0}::ng-deep .p-datatable-sm .p-datatable-tbody>tr>td .p-button.p-button-rounded .p-button-icon,::ng-deep .p-datatable-sm .p-datatable-tbody>tr>td .p-button.p-button-icon-only .p-button-icon{font-size:.75rem}::ng-deep .p-datatable-sm .p-datatable-tbody>tr>td .p-inputtext{padding:.25rem .5rem;font-size:.875rem}::ng-deep .p-datatable-sm .p-paginator{padding:.15rem .25rem!important;min-height:unset!important}::ng-deep .p-datatable-sm .p-paginator,::ng-deep .p-datatable-sm .p-paginator *{font-size:.75rem!important}::ng-deep .p-datatable-sm .p-paginator .p-paginator-element{min-width:1.5rem!important;height:1.5rem!important}::ng-deep .p-datatable-sm .p-paginator .p-paginator-current{font-size:.75rem!important;height:1.5rem!important;min-width:unset!important}::ng-deep .p-datatable-sm .p-paginator .p-dropdown{height:1.5rem!important}::ng-deep .p-datatable-sm .p-paginator .p-dropdown .p-dropdown-label{padding:.1rem .25rem!important;line-height:1.2!important}::ng-deep .p-datatable-sm .p-paginator .p-dropdown .p-dropdown-trigger{width:1.25rem!important}::ng-deep .p-paginator-rpp-options .p-dropdown-panel .p-dropdown-items .p-dropdown-item{padding:.25rem .5rem!important;font-size:.75rem!important}.class-cell .class-dropdown{min-width:0;flex:1 1 auto}::ng-deep .class-cell .class-dropdown.p-dropdown{width:100%}::ng-deep .class-cell .class-dropdown .p-dropdown-label{padding:.15rem .5rem;display:flex;align-items:center}\n"] }]
|
|
114
128
|
}], propDecorators: { page: [{
|
|
115
129
|
type: Input
|
|
116
130
|
}], total: [{
|
|
@@ -135,6 +149,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImpor
|
|
|
135
149
|
type: Input
|
|
136
150
|
}], mpp: [{
|
|
137
151
|
type: Input
|
|
152
|
+
}], volumes: [{
|
|
153
|
+
type: Input
|
|
138
154
|
}], labelDrafts: [{
|
|
139
155
|
type: Input
|
|
140
156
|
}], labelEditStart: [{
|
|
@@ -150,4 +166,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImpor
|
|
|
150
166
|
}], pageChange: [{
|
|
151
167
|
type: Output
|
|
152
168
|
}] } });
|
|
153
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaW9uLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvcmVnaW9uLWVkaXRvci9yZWdpb24tdGFibGUvcmVnaW9uLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvcmVnaW9uLWVkaXRvci9yZWdpb24tdGFibGUvcmVnaW9uLXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0csT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHaEQsT0FBTyxFQUFhLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBYSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1C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O2dCQUVHLFNBQVM7c0JBQWxCLE1BQU07Z0JBRUcsVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTaGFyZWRNb2R1bGUgfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XG5pbXBvcnQgeyBEcm9wZG93bk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZHJvcGRvd24nO1xuaW1wb3J0IHsgSW5wdXRUZXh0TW9kdWxlIH0gZnJvbSAncHJpbWVuZy9pbnB1dHRleHQnO1xuaW1wb3J0IHsgUGFnaW5hdG9yTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9wYWdpbmF0b3InO1xuaW1wb3J0IHsgUmlwcGxlTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9yaXBwbGUnO1xuaW1wb3J0IHsgVGFibGVNb2R1bGUgfSBmcm9tICdwcmltZW5nL3RhYmxlJztcbmltcG9ydCB7IFRvb2x0aXBNb2R1bGUgfSBmcm9tICdwcmltZW5nL3Rvb2x0aXAnO1xuXG5pbXBvcnQgeyBSZWdpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvcmVnaW9uJztcbmltcG9ydCB7IFByZXNldFNldCwgZGVmYXVsdFByZXNldFNldCB9IGZyb20gJy4uLy4uL21vZGVscy9jbGFzcy1wcmVzZXQnO1xuaW1wb3J0IHsgY29sb3JGb3JMYWJlbCB9IGZyb20gJy4uLy4uL3N0b3JlL2NsYXNzLWNvbG9yLnV0aWwnO1xuaW1wb3J0IHsgUGl4ZWxTaXplLCBmb3JtYXRBcmVhLCByZWdpb25BcmVhUHggfSBmcm9tICcuLi9yZWdpb24tbWV0cmljcyc7XG5cbi8qKiBBIHBhZ2UgY2hhbmdlIGZyb20gdGhlIHBhZ2luYXRvci4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaW9uUGFnZSB7XG4gIGZpcnN0OiBudW1iZXI7XG4gIHJvd3M6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaGUgUmVnaW9uIEVkaXRvcidzIHJlZ2lvbnMgdGFibGUgYW5kIHBhZ2luYXRvcjogb25lIHBhZ2Ugb2Ygcm93cyB3aXRoIGFcbiAqIGNsYXNzIGRyb3Bkb3duIChvciBhbiBpbmxpbmUgbGFiZWwgZWRpdG9yKSwgdGhlIGFyZWEsIGFuZCBhIGRlbGV0ZSBidXR0b24uXG4gKiBQcmVzZW50YXRpb25hbCBhbmQgT25QdXNoOiB0aGUgZWRpdG9yIG93bnMgdGhlIHJvd3MsIHRoZSBzZWxlY3Rpb24sIHRoZVxuICogcGFnaW5nIGFuZCB0aGUgbGFiZWwgZHJhZnRzLCBhbmQgYXBwbGllcyBldmVyeSBlZGl0IHRocm91Z2ggaXRzIG9uZVxuICogY29weS1vbi13cml0ZSBjb21taXQgcGF0aCDigJQgdGhlIHRhYmxlIG5ldmVyIGNoYW5nZXMgYSB7QGxpbmsgUmVnaW9ufS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncmVnaW9uLXRhYmxlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBTaGFyZWRNb2R1bGUsXG4gICAgQnV0dG9uTW9kdWxlLFxuICAgIERyb3Bkb3duTW9kdWxlLFxuICAgIElucHV0VGV4dE1vZHVsZSxcbiAgICBQYWdpbmF0b3JNb2R1bGUsXG4gICAgUmlwcGxlTW9kdWxlLFxuICAgIFRhYmxlTW9kdWxlLFxuICAgIFRvb2x0aXBNb2R1bGUsXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9yZWdpb24tdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yZWdpb24tdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFJlZ2lvblRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgLyoqIFRoZSByb3dzIG9uIHRoZSBjdXJyZW50IHBhZ2UuICovXG4gIEBJbnB1dCgpIHBhZ2U6IFJlZ2lvbltdID0gW107XG4gIC8qKiBUb3RhbCBudW1iZXIgb2Ygcm93cyAoYWxsIHBhZ2VzKS4gKi9cbiAgQElucHV0KCkgdG90YWwgPSAwO1xuICAvKiogSW5kZXggb2YgdGhlIHBhZ2UncyBmaXJzdCByb3cgYWNyb3NzIGFsbCBwYWdlcy4gKi9cbiAgQElucHV0KCkgZmlyc3QgPSAwO1xuICAvKiogUm93cyBwZXIgcGFnZS4gKi9cbiAgQElucHV0KCkgcm93cyA9IDEwO1xuICAvKiogVGhlIHBhZ2luYXRvcidzIHJvd3MtcGVyLXBhZ2UgY2hvaWNlcy4gKi9cbiAgQElucHV0KCkgcm93c1BlclBhZ2VPcHRpb25zID0gWzEwLCAyNSwgNTBdO1xuICAvKiogQ3RybC9DbWQtY2xpY2sgdG9nZ2xlcyBhIHJvdyAoUHJpbWVORyBtZXRhS2V5U2VsZWN0aW9uKS4gKi9cbiAgQElucHV0KCkgbWV0YUtleSA9IHRydWU7XG5cbiAgLyoqIFRoZSBzZWxlY3RlZCByb3dzLiAqL1xuICBASW5wdXQoKSBzZWxlY3Rpb246IFJlZ2lvbltdID0gW107XG4gIC8qKiBUaGUgdGFibGUncyBzZWxlY3Rpb24gY2hhbmdlZCAoYW55IHJvdyBjbGljaykuICovXG4gIEBPdXRwdXQoKSBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFJlZ2lvbltdPigpO1xuICAvKiogQSByb3cgd2FzIHNlbGVjdGVkIG9yIHVuc2VsZWN0ZWQgKGFmdGVyIHtAbGluayBzZWxlY3Rpb25DaGFuZ2V9KS4gKi9cbiAgQE91dHB1dCgpIHJvd1NlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKiogQ2xhc3NlcyBmb3IgdGhlIHBlci1yb3cgZHJvcGRvd24sIGFuZCB0aGVpciBjb2xvdXJzLiAqL1xuICBASW5wdXQoKSBwcmVzZXRTZXQ6IFByZXNldFNldCA9IGRlZmF1bHRQcmVzZXRTZXQoKTtcbiAgLyoqIFN3YXRjaCBjb2xvdXIgb2YgYW4gdW5sYWJlbGxlZCByb3cuICovXG4gIEBJbnB1dCgpIGRlZmF1bHRDb2xvciA9ICcjMDBGRkZGJztcbiAgLyoqIFBpeGVsIHNpemUgZm9yIHRoZSBhcmVhIGNvbHVtbi4gKi9cbiAgQElucHV0KCkgbXBwOiBQaXhlbFNpemUgPSB7fTtcblxuICAvKiogUm93cyB3aG9zZSBsYWJlbCBpcyBiZWluZyBlZGl0ZWQg4oaSIHRoZSB0eXBlZCBkcmFmdC4gQSBuZXcgbWFwIHBlciBzdGFydC9zdG9wLiAqL1xuICBASW5wdXQoKSBsYWJlbERyYWZ0cyA9IG5ldyBNYXA8UmVnaW9uLCBzdHJpbmc+KCk7XG4gIC8qKiBBIHJvdydzIHBlbmNpbDogc3RhcnQgZWRpdGluZyBpdHMgbGFiZWwuICovXG4gIEBPdXRwdXQoKSBsYWJlbEVkaXRTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8UmVnaW9uPigpO1xuICAvKiogVGhlIGlubGluZSBsYWJlbCBlZGl0b3IncyB0ZXh0IGNoYW5nZWQuICovXG4gIEBPdXRwdXQoKSBsYWJlbERyYWZ0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx7IHJlZ2lvbjogUmVnaW9uOyB2YWx1ZTogc3RyaW5nIH0+KCk7XG4gIC8qKiBUaGUgaW5saW5lIGxhYmVsIGVkaXRvciBjbG9zZWQ6IEVudGVyIGNvbW1pdHMsIEVzY2FwZSAvIGNsb3NlIGNhbmNlbHMuICovXG4gIEBPdXRwdXQoKSBsYWJlbEVkaXRTdG9wID0gbmV3IEV2ZW50RW1pdHRlcjx7IHJlZ2lvbjogUmVnaW9uOyBjb21taXQ6IGJvb2xlYW4gfT4oKTtcblxuICAvKiogQSBjbGFzcyB3YXMgcGlja2VkIGluIGEgcm93J3MgZHJvcGRvd24uICovXG4gIEBPdXRwdXQoKSBjbGFzc1BpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHsgcmVnaW9uOiBSZWdpb247IG5hbWU6IHN0cmluZyB9PigpO1xuICAvKiogQSByb3cncyB0cmFzaCBidXR0b246IHRoZSByb3cncyBpbmRleCBhY3Jvc3MgYWxsIHBhZ2VzLiAqL1xuICBAT3V0cHV0KCkgZGVsZXRlUm93ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIC8qKiBUaGUgcGFnaW5hdG9yIG1vdmVkIG9yIGNoYW5nZWQgaXRzIHBhZ2Ugc2l6ZS4gKi9cbiAgQE91dHB1dCgpIHBhZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFJlZ2lvblBhZ2U+KCk7XG5cbiAgLyoqIFBlciByb3cgb2Yge0BsaW5rIHBhZ2V9OiBpdHMgY2xhc3Mgc3dhdGNoIGNvbG91ciBhbmQgZm9ybWF0dGVkIGFyZWEsIGRlcml2ZWQgd2hlblxuICAgKiAgYW4gaW5wdXQgY2hhbmdlcyBpbnN0ZWFkIG9mIHBlciBjaGVjayAodGhlIGFyZWEgd2Fsa3MgdGhlIHJlZ2lvbidzIGdlb21ldHJ5KS4gKi9cbiAgcHJvdGVjdGVkIHJvd1ZpZXcgPSBuZXcgTWFwPFJlZ2lvbiwgeyBjb2xvcjogc3RyaW5nOyBhcmVhOiBzdHJpbmcgfT4oKTtcblxuICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLnJvd1ZpZXcgPSBuZXcgTWFwKHRoaXMucGFnZS5tYXAoKHIpID0+IFtyLCB7IGNvbG9yOiB0aGlzLmNsYXNzQ29sb3Ioci5sYWJlbCksIGFyZWE6IHRoaXMuYXJlYShyKSB9XSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGFzc0NvbG9yKG5hbWU/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBuYW1lID8gY29sb3JGb3JMYWJlbChuYW1lLCB0aGlzLnByZXNldFNldCkgOiB0aGlzLmRlZmF1bHRDb2xvcjtcbiAgfVxuXG4gIHByaXZhdGUgYXJlYShyZWdpb246IFJlZ2lvbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGZvcm1hdEFyZWEocmVnaW9uQXJlYVB4KHJlZ2lvbiksIHRoaXMubXBwKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzdGFydEVkaXQocmVnaW9uOiBSZWdpb24sIGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyAvLyBkb24ndCB0b2dnbGUgcm93IHNlbGVjdGlvblxuICAgIHRoaXMubGFiZWxFZGl0U3RhcnQuZW1pdChyZWdpb24pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN0b3BFZGl0KHJlZ2lvbjogUmVnaW9uLCBjb21taXQ6IGJvb2xlYW4sIGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMubGFiZWxFZGl0U3RvcC5lbWl0KHsgcmVnaW9uLCBjb21taXQgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25QYWdlKGV2ZW50OiB7IGZpcnN0PzogbnVtYmVyOyByb3dzPzogbnVtYmVyIH0pOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2VDaGFuZ2UuZW1pdCh7IGZpcnN0OiBldmVudC5maXJzdCA/PyAwLCByb3dzOiBldmVudC5yb3dzID8/IHRoaXMucm93cyB9KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInJlZ2lvbi1lZGl0b3ItY29udGVudFwiPlxuICA8cC10YWJsZVxuICAgIFt2YWx1ZV09XCJwYWdlXCJcbiAgICBbdGFibGVTdHlsZV09XCJ7IHdpZHRoOiAnMTAwJScgfVwiXG4gICAgW3NlbGVjdGlvbl09XCJzZWxlY3Rpb25cIlxuICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwic2VsZWN0aW9uQ2hhbmdlLmVtaXQoJGV2ZW50KVwiXG4gICAgc2VsZWN0aW9uTW9kZT1cIm11bHRpcGxlXCJcbiAgICBbbWV0YUtleVNlbGVjdGlvbl09XCJtZXRhS2V5XCJcbiAgICAob25Sb3dTZWxlY3QpPVwicm93U2VsZWN0LmVtaXQoKVwiXG4gICAgKG9uUm93VW5zZWxlY3QpPVwicm93U2VsZWN0LmVtaXQoKVwiXG4gICAgW3Jlc2l6YWJsZUNvbHVtbnNdPVwidHJ1ZVwiXG4gICAgW3Jvd0hvdmVyXT1cInRydWVcIlxuICAgIGRhdGFLZXk9XCJpZFwiXG4gICAgc3R5bGVDbGFzcz1cInAtZGF0YXRhYmxlLXNtIHJlZ2lvbi1lZGl0b3ItdGFibGVcIlxuICAgIFtzY3JvbGxhYmxlXT1cInRydWVcIlxuICAgIHNjcm9sbEhlaWdodD1cIjEwMCVcIlxuICA+XG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxuICAgICAgPCEtLSBIaWRlIHRoZSBjb2x1bW4gaGVhZGVyIHdoZW4gdGhlcmUgYXJlIG5vIHJlZ2lvbnMgdG8gc2hvdy4gLS0+XG4gICAgICA8dHIgKm5nSWY9XCJ0b3RhbCA+IDBcIj5cbiAgICAgICAgPCEtLSBDbGFzcyBjb2x1bW46IHNocmlua3MgdG8gZml0IFwiUmVnaW9uXCIgYnkgZGVmYXVsdCwgZ3Jvd3Mgd2l0aCBsb25nZXIgbGFiZWxzLiAtLT5cbiAgICAgICAgPHRoIGNsYXNzPVwiY2xhc3MtY29sLWhlYWRlclwiIHBSZXNpemFibGVDb2x1bW4+Q2xhc3MgPHAtc29ydEljb24gZmllbGQ9XCJsYWJlbFwiPjwvcC1zb3J0SWNvbj48L3RoPlxuICAgICAgICA8dGggY2xhc3M9XCJzdXJmYWNlLWNvbC1oZWFkZXJcIiBwUmVzaXphYmxlQ29sdW1uPlN1cmZhY2U8L3RoPlxuICAgICAgICA8IS0tIFRyYXNoIGNvbHVtbjoganVzdCBlbm91Z2ggZm9yIHRoZSBpY29uLiAtLT5cbiAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6IDJyZW1cIj48L3RoPlxuICAgICAgPC90cj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LXJlZ2lvbiBsZXQtcm93SWR4PVwicm93SW5kZXhcIj5cbiAgICAgIDx0ciBbcFNlbGVjdGFibGVSb3ddPVwicmVnaW9uXCIgW3BTZWxlY3RhYmxlUm93SW5kZXhdPVwicm93SWR4XCI+XG4gICAgICAgIDx0ZCBjbGFzcz1cImNsYXNzLWNlbGxcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxhYmVsRHJhZnRzLmhhcyhyZWdpb24pOyBlbHNlIGVkaXRMYWJlbFRwbFwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjbGFzcy1jZWxsLWRpc3BsYXlcIj5cbiAgICAgICAgICAgICAgPCEtLSBRdWljay1waWNrIGEgcHJlc2V0IGNsYXNzIChpdHMgY29sb3VyIGZvbGxvd3MpOyB0aGUgcGVuY2lsIGlzIGZvclxuICAgICAgICAgICAgICAgICAgICAgYSBmcmVlLWZvcm0gbmFtZSAvIHJlbmFtZSAoaml0LXVpIzcwKS4gLS0+XG4gICAgICAgICAgICAgIDxwLWRyb3Bkb3duXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjbGFzcy1kcm9wZG93blwiXG4gICAgICAgICAgICAgICAgYXBwZW5kVG89XCJib2R5XCJcbiAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJwcmVzZXRTZXQuY2xhc3Nlc1wiXG4gICAgICAgICAgICAgICAgb3B0aW9uTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICBvcHRpb25WYWx1ZT1cIm5hbWVcIlxuICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInJlZ2lvbi5sYWJlbFwiXG4gICAgICAgICAgICAgICAgW2F1dG9EaXNwbGF5Rmlyc3RdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIGFyaWFMYWJlbD1cIkNsYXNzXCJcbiAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwiY2xhc3NQaWNrLmVtaXQoeyByZWdpb246IHJlZ2lvbiwgbmFtZTogJGV2ZW50LnZhbHVlIH0pXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJzZWxlY3RlZEl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGQtdmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwLXN3YXRjaFwiIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInJvd1ZpZXcuZ2V0KHJlZ2lvbik/LmNvbG9yXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNsYXNzLW5hbWVcIiBbcFRvb2x0aXBdPVwicmVnaW9uLmxhYmVsXCIgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICByZWdpb24ubGFiZWwgfHwgJ+KAlCdcbiAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LWMgcFRlbXBsYXRlPVwiaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkZC12YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXAtc3dhdGNoXCIgW3N0eWxlLmJhY2tncm91bmRdPVwiYy5jb2xvclwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgYy5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvcC1kcm9wZG93bj5cbiAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICBjbGFzcz1cInBpIHBpLXBlbmNpbCBpY29uLWhvdmVyIG1sLTJcIlxuICAgICAgICAgICAgICAgIHBUb29sdGlwPVwiUmVuYW1lIC8gZnJlZS1mb3JtIGxhYmVsXCJcbiAgICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJib3R0b21cIlxuICAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJSZW5hbWVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzdGFydEVkaXQocmVnaW9uLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2VkaXRMYWJlbFRwbD5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1pbnB1dC1pY29uLXJpZ2h0IGNsYXNzLWNlbGwtZWRpdFwiPlxuICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgIGNsYXNzPVwicGkgcGktdGltZXMgaWNvbi1ob3ZlclwiXG4gICAgICAgICAgICAgICAgcFRvb2x0aXA9XCJDbG9zZVwiXG4gICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCJcbiAgICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2FuY2VsIHJlbmFtZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInN0b3BFZGl0KHJlZ2lvbiwgZmFsc2UsICRldmVudClcIlxuICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgcElucHV0VGV4dFxuICAgICAgICAgICAgICAgIGNsYXNzPVwicC1pbnB1dHRleHQtc20gdy1mdWxsXCJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2xhc3MgbGFiZWxcIlxuICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImxhYmVsRHJhZnRzLmdldChyZWdpb24pXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJsYWJlbERyYWZ0Q2hhbmdlLmVtaXQoeyByZWdpb246IHJlZ2lvbiwgdmFsdWU6ICRldmVudCB9KVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwic3RvcEVkaXQocmVnaW9uLCB0cnVlLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bi5lc2NhcGUpPVwic3RvcEVkaXQocmVnaW9uLCBmYWxzZSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPCEtLSBTdXJmYWNlIGFyZWEgKMK1bcKyL21twrIgd2hlbiB0aGUgaW1hZ2UgaXMgc2NhbGVkLCBlbHNlIHB4wrIpLiAtLT5cbiAgICAgICAgPHRkIGNsYXNzPVwic3VyZmFjZS1jZWxsXCI+e3sgcm93Vmlldy5nZXQocmVnaW9uKT8uYXJlYSB8fCAn4oCUJyB9fTwvdGQ+XG4gICAgICAgIDx0ZD5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgICBwUmlwcGxlXG4gICAgICAgICAgICBpY29uPVwicGkgcGktdHJhc2hcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkRlbGV0ZSByZWdpb25cIlxuICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1zbSBwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHQgcC1idXR0b24td2FybmluZ1wiXG4gICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlUm93LmVtaXQoZmlyc3QgKyByb3dJZHgpXCJcbiAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L3RyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvcC10YWJsZT5cbjwvZGl2PlxuXG48cC1wYWdpbmF0b3JcbiAgKm5nSWY9XCJ0b3RhbCA+IDBcIlxuICBbcm93c109XCJyb3dzXCJcbiAgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbFwiXG4gIFtmaXJzdF09XCJmaXJzdFwiXG4gIFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwicm93c1BlclBhZ2VPcHRpb25zXCJcbiAgW3Nob3dDdXJyZW50UGFnZVJlcG9ydF09XCJ0cnVlXCJcbiAgY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZT1cIntmaXJzdH0gdG8ge2xhc3R9IG9mIHt0b3RhbFJlY29yZHN9XCJcbiAgKG9uUGFnZUNoYW5nZSk9XCJvblBhZ2UoJGV2ZW50KVwiXG4gIHN0eWxlQ2xhc3M9XCJyZWdpb24tZWRpdG9yLXBhZ2luYXRvclwiXG4+XG48L3AtcGFnaW5hdG9yPlxuIl19
|
|
169
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaW9uLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvcmVnaW9uLWVkaXRvci9yZWdpb24tdGFibGUvcmVnaW9uLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvcmVnaW9uLWVkaXRvci9yZWdpb24tdGFibGUvcmVnaW9uLXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0csT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHaEQsT0FBTyxFQUFhLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBYSxVQUFVLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxN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QUNaLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsWUFBWTt3QkFDWixZQUFZO3dCQUNaLGNBQWM7d0JBQ2QsZUFBZTt3QkFDZixlQUFlO3dCQUNmLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxhQUFhO3FCQUNkLG1CQUdnQix1QkFBdUIsQ0FBQyxNQUFNOzhCQUl0QyxJQUFJO3NCQUFaLEtBQUs7Z0JBRUcsS0FBSztzQkFBYixLQUFLO2dCQUVHLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxJQUFJO3NCQUFaLEtBQUs7Z0JBRUcsa0JBQWtCO3NCQUExQixLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFHRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVJLGVBQWU7c0JBQXhCLE1BQU07Z0JBRUcsU0FBUztzQkFBbEIsTUFBTTtnQkFHRSxTQUFTO3NCQUFqQixLQUFLO2dCQUVHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUcsR0FBRztzQkFBWCxLQUFLO2dCQUtHLE9BQU87c0JBQWYsS0FBSztnQkFHRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVJLGNBQWM7c0JBQXZCLE1BQU07Z0JBRUcsZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUVHLGFBQWE7c0JBQXRCLE1BQU07Z0JBR0csU0FBUztzQkFBbEIsTUFBTTtnQkFFRyxTQUFTO3NCQUFsQixNQUFNO2dCQUVHLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU2hhcmVkTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xuaW1wb3J0IHsgRHJvcGRvd25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2Ryb3Bkb3duJztcbmltcG9ydCB7IElucHV0VGV4dE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvaW5wdXR0ZXh0JztcbmltcG9ydCB7IFBhZ2luYXRvck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvcGFnaW5hdG9yJztcbmltcG9ydCB7IFJpcHBsZU1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvcmlwcGxlJztcbmltcG9ydCB7IFRhYmxlTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90YWJsZSc7XG5pbXBvcnQgeyBUb29sdGlwTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90b29sdGlwJztcblxuaW1wb3J0IHsgUmVnaW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3JlZ2lvbic7XG5pbXBvcnQgeyBQcmVzZXRTZXQsIGRlZmF1bHRQcmVzZXRTZXQgfSBmcm9tICcuLi8uLi9tb2RlbHMvY2xhc3MtcHJlc2V0JztcbmltcG9ydCB7IGNvbG9yRm9yTGFiZWwgfSBmcm9tICcuLi8uLi9zdG9yZS9jbGFzcy1jb2xvci51dGlsJztcbmltcG9ydCB7IFBpeGVsU2l6ZSwgZm9ybWF0QXJlYSwgZm9ybWF0Vm9sdW1lLCByZWdpb25BcmVhUHggfSBmcm9tICcuLi9yZWdpb24tbWV0cmljcyc7XG5cbi8qKiBBIHBhZ2UgY2hhbmdlIGZyb20gdGhlIHBhZ2luYXRvci4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaW9uUGFnZSB7XG4gIGZpcnN0OiBudW1iZXI7XG4gIHJvd3M6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaGUgUmVnaW9uIEVkaXRvcidzIHJlZ2lvbnMgdGFibGUgYW5kIHBhZ2luYXRvcjogb25lIHBhZ2Ugb2Ygcm93cyB3aXRoIGFcbiAqIGNsYXNzIGRyb3Bkb3duIChvciBhbiBpbmxpbmUgbGFiZWwgZWRpdG9yKSwgdGhlIGFyZWEsIGFuZCBhIGRlbGV0ZSBidXR0b24uXG4gKiBQcmVzZW50YXRpb25hbCBhbmQgT25QdXNoOiB0aGUgZWRpdG9yIG93bnMgdGhlIHJvd3MsIHRoZSBzZWxlY3Rpb24sIHRoZVxuICogcGFnaW5nIGFuZCB0aGUgbGFiZWwgZHJhZnRzLCBhbmQgYXBwbGllcyBldmVyeSBlZGl0IHRocm91Z2ggaXRzIG9uZVxuICogY29weS1vbi13cml0ZSBjb21taXQgcGF0aCDigJQgdGhlIHRhYmxlIG5ldmVyIGNoYW5nZXMgYSB7QGxpbmsgUmVnaW9ufS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncmVnaW9uLXRhYmxlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBTaGFyZWRNb2R1bGUsXG4gICAgQnV0dG9uTW9kdWxlLFxuICAgIERyb3Bkb3duTW9kdWxlLFxuICAgIElucHV0VGV4dE1vZHVsZSxcbiAgICBQYWdpbmF0b3JNb2R1bGUsXG4gICAgUmlwcGxlTW9kdWxlLFxuICAgIFRhYmxlTW9kdWxlLFxuICAgIFRvb2x0aXBNb2R1bGUsXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9yZWdpb24tdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yZWdpb24tdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFJlZ2lvblRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgLyoqIFRoZSByb3dzIG9uIHRoZSBjdXJyZW50IHBhZ2UuICovXG4gIEBJbnB1dCgpIHBhZ2U6IFJlZ2lvbltdID0gW107XG4gIC8qKiBUb3RhbCBudW1iZXIgb2Ygcm93cyAoYWxsIHBhZ2VzKS4gKi9cbiAgQElucHV0KCkgdG90YWwgPSAwO1xuICAvKiogSW5kZXggb2YgdGhlIHBhZ2UncyBmaXJzdCByb3cgYWNyb3NzIGFsbCBwYWdlcy4gKi9cbiAgQElucHV0KCkgZmlyc3QgPSAwO1xuICAvKiogUm93cyBwZXIgcGFnZS4gKi9cbiAgQElucHV0KCkgcm93cyA9IDEwO1xuICAvKiogVGhlIHBhZ2luYXRvcidzIHJvd3MtcGVyLXBhZ2UgY2hvaWNlcy4gKi9cbiAgQElucHV0KCkgcm93c1BlclBhZ2VPcHRpb25zID0gWzEwLCAyNSwgNTBdO1xuICAvKiogQ3RybC9DbWQtY2xpY2sgdG9nZ2xlcyBhIHJvdyAoUHJpbWVORyBtZXRhS2V5U2VsZWN0aW9uKS4gKi9cbiAgQElucHV0KCkgbWV0YUtleSA9IHRydWU7XG5cbiAgLyoqIFRoZSBzZWxlY3RlZCByb3dzLiAqL1xuICBASW5wdXQoKSBzZWxlY3Rpb246IFJlZ2lvbltdID0gW107XG4gIC8qKiBUaGUgdGFibGUncyBzZWxlY3Rpb24gY2hhbmdlZCAoYW55IHJvdyBjbGljaykuICovXG4gIEBPdXRwdXQoKSBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFJlZ2lvbltdPigpO1xuICAvKiogQSByb3cgd2FzIHNlbGVjdGVkIG9yIHVuc2VsZWN0ZWQgKGFmdGVyIHtAbGluayBzZWxlY3Rpb25DaGFuZ2V9KS4gKi9cbiAgQE91dHB1dCgpIHJvd1NlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKiogQ2xhc3NlcyBmb3IgdGhlIHBlci1yb3cgZHJvcGRvd24sIGFuZCB0aGVpciBjb2xvdXJzLiAqL1xuICBASW5wdXQoKSBwcmVzZXRTZXQ6IFByZXNldFNldCA9IGRlZmF1bHRQcmVzZXRTZXQoKTtcbiAgLyoqIFN3YXRjaCBjb2xvdXIgb2YgYW4gdW5sYWJlbGxlZCByb3cuICovXG4gIEBJbnB1dCgpIGRlZmF1bHRDb2xvciA9ICcjMDBGRkZGJztcbiAgLyoqIFBpeGVsIHNpemUgZm9yIHRoZSBhcmVhIGNvbHVtbi4gKi9cbiAgQElucHV0KCkgbXBwOiBQaXhlbFNpemUgPSB7fTtcbiAgLyoqXG4gICAqIEluIGEgdm9sdW1lIHZpZXcsIGVhY2ggY2xhc3MncyB2b2x1bWUgb3ZlciB0aGUgd2hvbGUgc3RhY2sgKHB4wrIgw5cgc2xpY2VzOyBudWxsIHdoaWxlIGl0IGlzXG4gICAqIGNvbXB1dGVkKTogdGhlIGNvbHVtbiBzaG93cyB0aGUgcm93J3MgY2xhc3Mgdm9sdW1lIGluc3RlYWQgb2YgaXRzIGFyZWEuIE51bGw6IGFyZWFzLlxuICAgKi9cbiAgQElucHV0KCkgdm9sdW1lczogUmVhZG9ubHlNYXA8c3RyaW5nLCBudW1iZXIgfCBudWxsPiB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBSb3dzIHdob3NlIGxhYmVsIGlzIGJlaW5nIGVkaXRlZCDihpIgdGhlIHR5cGVkIGRyYWZ0LiBBIG5ldyBtYXAgcGVyIHN0YXJ0L3N0b3AuICovXG4gIEBJbnB1dCgpIGxhYmVsRHJhZnRzID0gbmV3IE1hcDxSZWdpb24sIHN0cmluZz4oKTtcbiAgLyoqIEEgcm93J3MgcGVuY2lsOiBzdGFydCBlZGl0aW5nIGl0cyBsYWJlbC4gKi9cbiAgQE91dHB1dCgpIGxhYmVsRWRpdFN0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWdpb24+KCk7XG4gIC8qKiBUaGUgaW5saW5lIGxhYmVsIGVkaXRvcidzIHRleHQgY2hhbmdlZC4gKi9cbiAgQE91dHB1dCgpIGxhYmVsRHJhZnRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsgcmVnaW9uOiBSZWdpb247IHZhbHVlOiBzdHJpbmcgfT4oKTtcbiAgLyoqIFRoZSBpbmxpbmUgbGFiZWwgZWRpdG9yIGNsb3NlZDogRW50ZXIgY29tbWl0cywgRXNjYXBlIC8gY2xvc2UgY2FuY2Vscy4gKi9cbiAgQE91dHB1dCgpIGxhYmVsRWRpdFN0b3AgPSBuZXcgRXZlbnRFbWl0dGVyPHsgcmVnaW9uOiBSZWdpb247IGNvbW1pdDogYm9vbGVhbiB9PigpO1xuXG4gIC8qKiBBIGNsYXNzIHdhcyBwaWNrZWQgaW4gYSByb3cncyBkcm9wZG93bi4gKi9cbiAgQE91dHB1dCgpIGNsYXNzUGljayA9IG5ldyBFdmVudEVtaXR0ZXI8eyByZWdpb246IFJlZ2lvbjsgbmFtZTogc3RyaW5nIH0+KCk7XG4gIC8qKiBBIHJvdydzIHRyYXNoIGJ1dHRvbjogdGhlIHJvdydzIGluZGV4IGFjcm9zcyBhbGwgcGFnZXMuICovXG4gIEBPdXRwdXQoKSBkZWxldGVSb3cgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgLyoqIFRoZSBwYWdpbmF0b3IgbW92ZWQgb3IgY2hhbmdlZCBpdHMgcGFnZSBzaXplLiAqL1xuICBAT3V0cHV0KCkgcGFnZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8UmVnaW9uUGFnZT4oKTtcblxuICAvKiogUGVyIHJvdyBvZiB7QGxpbmsgcGFnZX06IGl0cyBjbGFzcyBzd2F0Y2ggY29sb3VyIGFuZCBmb3JtYXR0ZWQgYXJlYSAob3IgY2xhc3Mgdm9sdW1lKSxcbiAgICogIGRlcml2ZWQgd2hlbiBhbiBpbnB1dCBjaGFuZ2VzIGluc3RlYWQgb2YgcGVyIGNoZWNrICh0aGUgYXJlYSB3YWxrcyB0aGUgcmVnaW9uJ3MgZ2VvbWV0cnkpLiAqL1xuICBwcm90ZWN0ZWQgcm93VmlldyA9IG5ldyBNYXA8UmVnaW9uLCB7IGNvbG9yOiBzdHJpbmc7IG1lYXN1cmU6IHN0cmluZyB9PigpO1xuXG4gIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMucm93VmlldyA9IG5ldyBNYXAoXG4gICAgICB0aGlzLnBhZ2UubWFwKChyKSA9PiBbciwgeyBjb2xvcjogdGhpcy5jbGFzc0NvbG9yKHIubGFiZWwpLCBtZWFzdXJlOiB0aGlzLm1lYXN1cmUocikgfV0pLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG1lYXN1cmUocmVnaW9uOiBSZWdpb24pOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy52b2x1bWVzKSByZXR1cm4gdGhpcy5hcmVhKHJlZ2lvbik7XG4gICAgaWYgKCFyZWdpb24ubGFiZWwgfHwgIXRoaXMudm9sdW1lcy5oYXMocmVnaW9uLmxhYmVsKSkgcmV0dXJuICcnO1xuICAgIGNvbnN0IHYgPSB0aGlzLnZvbHVtZXMuZ2V0KHJlZ2lvbi5sYWJlbCk7XG4gICAgcmV0dXJuIHYgPT0gbnVsbCA/ICfigKYnIDogZm9ybWF0Vm9sdW1lKHYsIHRoaXMubXBwKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xhc3NDb2xvcihuYW1lPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmFtZSA/IGNvbG9yRm9yTGFiZWwobmFtZSwgdGhpcy5wcmVzZXRTZXQpIDogdGhpcy5kZWZhdWx0Q29sb3I7XG4gIH1cblxuICBwcml2YXRlIGFyZWEocmVnaW9uOiBSZWdpb24pOiBzdHJpbmcge1xuICAgIC8vIEEgcmVnaW9uIHNvdXJjZSdzIHN0YW5kLWluIHJvdyBoYXMgbm8gZ2VvbWV0cnkgeWV0OiB0aGUgc291cmNlJ3MgaW5kZXggZ2l2ZXMgaXRzIGFyZWEuXG4gICAgcmV0dXJuIGZvcm1hdEFyZWEocmVnaW9uLmJvdW5kcyA/IHJlZ2lvbkFyZWFQeChyZWdpb24pIDogKHJlZ2lvbi5zb3VyY2VBcmVhID8/IDApLCB0aGlzLm1wcCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc3RhcnRFZGl0KHJlZ2lvbjogUmVnaW9uLCBldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgLy8gZG9uJ3QgdG9nZ2xlIHJvdyBzZWxlY3Rpb25cbiAgICB0aGlzLmxhYmVsRWRpdFN0YXJ0LmVtaXQocmVnaW9uKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzdG9wRWRpdChyZWdpb246IFJlZ2lvbiwgY29tbWl0OiBib29sZWFuLCBldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmxhYmVsRWRpdFN0b3AuZW1pdCh7IHJlZ2lvbiwgY29tbWl0IH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uUGFnZShldmVudDogeyBmaXJzdD86IG51bWJlcjsgcm93cz86IG51bWJlciB9KTogdm9pZCB7XG4gICAgdGhpcy5wYWdlQ2hhbmdlLmVtaXQoeyBmaXJzdDogZXZlbnQuZmlyc3QgPz8gMCwgcm93czogZXZlbnQucm93cyA/PyB0aGlzLnJvd3MgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJyZWdpb24tZWRpdG9yLWNvbnRlbnRcIj5cbiAgPHAtdGFibGVcbiAgICBbdmFsdWVdPVwicGFnZVwiXG4gICAgW3RhYmxlU3R5bGVdPVwieyB3aWR0aDogJzEwMCUnIH1cIlxuICAgIFtzZWxlY3Rpb25dPVwic2VsZWN0aW9uXCJcbiAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cInNlbGVjdGlvbkNoYW5nZS5lbWl0KCRldmVudClcIlxuICAgIHNlbGVjdGlvbk1vZGU9XCJtdWx0aXBsZVwiXG4gICAgW21ldGFLZXlTZWxlY3Rpb25dPVwibWV0YUtleVwiXG4gICAgKG9uUm93U2VsZWN0KT1cInJvd1NlbGVjdC5lbWl0KClcIlxuICAgIChvblJvd1Vuc2VsZWN0KT1cInJvd1NlbGVjdC5lbWl0KClcIlxuICAgIFtyZXNpemFibGVDb2x1bW5zXT1cInRydWVcIlxuICAgIFtyb3dIb3Zlcl09XCJ0cnVlXCJcbiAgICBkYXRhS2V5PVwiaWRcIlxuICAgIHN0eWxlQ2xhc3M9XCJwLWRhdGF0YWJsZS1zbSByZWdpb24tZWRpdG9yLXRhYmxlXCJcbiAgICBbc2Nyb2xsYWJsZV09XCJ0cnVlXCJcbiAgICBzY3JvbGxIZWlnaHQ9XCIxMDAlXCJcbiAgPlxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cbiAgICAgIDwhLS0gSGlkZSB0aGUgY29sdW1uIGhlYWRlciB3aGVuIHRoZXJlIGFyZSBubyByZWdpb25zIHRvIHNob3cuIC0tPlxuICAgICAgPHRyICpuZ0lmPVwidG90YWwgPiAwXCI+XG4gICAgICAgIDwhLS0gQ2xhc3MgY29sdW1uOiBzaHJpbmtzIHRvIGZpdCBcIlJlZ2lvblwiIGJ5IGRlZmF1bHQsIGdyb3dzIHdpdGggbG9uZ2VyIGxhYmVscy4gLS0+XG4gICAgICAgIDx0aCBjbGFzcz1cImNsYXNzLWNvbC1oZWFkZXJcIiBwUmVzaXphYmxlQ29sdW1uPkNsYXNzIDxwLXNvcnRJY29uIGZpZWxkPVwibGFiZWxcIj48L3Atc29ydEljb24+PC90aD5cbiAgICAgICAgPHRoXG4gICAgICAgICAgKm5nSWY9XCIhdm9sdW1lc1wiXG4gICAgICAgICAgY2xhc3M9XCJzdXJmYWNlLWNvbC1oZWFkZXJcIlxuICAgICAgICAgIHBSZXNpemFibGVDb2x1bW5cbiAgICAgICAgICBwVG9vbHRpcD1cIlRoZSByZWdpb24ncyBhcmVhIG9uIHRoaXMgc2xpY2VcIlxuICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiXG4gICAgICAgID5cbiAgICAgICAgICBTdXJmYWNlXG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aFxuICAgICAgICAgICpuZ0lmPVwidm9sdW1lc1wiXG4gICAgICAgICAgY2xhc3M9XCJzdXJmYWNlLWNvbC1oZWFkZXJcIlxuICAgICAgICAgIHBSZXNpemFibGVDb2x1bW5cbiAgICAgICAgICBwVG9vbHRpcD1cIlRoZSB2b2x1bWUgb2YgdGhlIHJlZ2lvbidzIGNsYXNzIG92ZXIgdGhlIHdob2xlIHN0YWNrOiBpdHMgYXJlYSBvbiBldmVyeSBzbGljZSwgb25lIHNsaWNlIHRoaWNrXCJcbiAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJ0b3BcIlxuICAgICAgICA+XG4gICAgICAgICAgVm9sdW1lXG4gICAgICAgIDwvdGg+XG4gICAgICAgIDwhLS0gVHJhc2ggY29sdW1uOiBqdXN0IGVub3VnaCBmb3IgdGhlIGljb24uIC0tPlxuICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDogMnJlbVwiPjwvdGg+XG4gICAgICA8L3RyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIiBsZXQtcmVnaW9uIGxldC1yb3dJZHg9XCJyb3dJbmRleFwiPlxuICAgICAgPHRyIFtwU2VsZWN0YWJsZVJvd109XCJyZWdpb25cIiBbcFNlbGVjdGFibGVSb3dJbmRleF09XCJyb3dJZHhcIj5cbiAgICAgICAgPHRkIGNsYXNzPVwiY2xhc3MtY2VsbFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbGFiZWxEcmFmdHMuaGFzKHJlZ2lvbik7IGVsc2UgZWRpdExhYmVsVHBsXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNsYXNzLWNlbGwtZGlzcGxheVwiPlxuICAgICAgICAgICAgICA8IS0tIFF1aWNrLXBpY2sgYSBwcmVzZXQgY2xhc3MgKGl0cyBjb2xvdXIgZm9sbG93cyk7IHRoZSBwZW5jaWwgaXMgZm9yXG4gICAgICAgICAgICAgICAgICAgICBhIGZyZWUtZm9ybSBuYW1lIC8gcmVuYW1lIChqaXQtdWkjNzApLiAtLT5cbiAgICAgICAgICAgICAgPHAtZHJvcGRvd25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImNsYXNzLWRyb3Bkb3duXCJcbiAgICAgICAgICAgICAgICBhcHBlbmRUbz1cImJvZHlcIlxuICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInByZXNldFNldC5jbGFzc2VzXCJcbiAgICAgICAgICAgICAgICBvcHRpb25MYWJlbD1cIm5hbWVcIlxuICAgICAgICAgICAgICAgIG9wdGlvblZhbHVlPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxdPVwicmVnaW9uLmxhYmVsXCJcbiAgICAgICAgICAgICAgICBbYXV0b0Rpc3BsYXlGaXJzdF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgYXJpYUxhYmVsPVwiQ2xhc3NcIlxuICAgICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJjbGFzc1BpY2suZW1pdCh7IHJlZ2lvbjogcmVnaW9uLCBuYW1lOiAkZXZlbnQudmFsdWUgfSlcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cInNlbGVjdGVkSXRlbVwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkZC12YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXAtc3dhdGNoXCIgW3N0eWxlLmJhY2tncm91bmRdPVwicm93Vmlldy5nZXQocmVnaW9uKT8uY29sb3JcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2xhc3MtbmFtZVwiIFtwVG9vbHRpcF09XCJyZWdpb24ubGFiZWxcIiB0b29sdGlwUG9zaXRpb249XCJib3R0b21cIj57e1xuICAgICAgICAgICAgICAgICAgICAgIHJlZ2lvbi5sYWJlbCB8fCAn4oCUJ1xuICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtYyBwVGVtcGxhdGU9XCJpdGVtXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRkLXZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcC1zd2F0Y2hcIiBbc3R5bGUuYmFja2dyb3VuZF09XCJjLmNvbG9yXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBjLm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9wLWRyb3Bkb3duPlxuICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgIGNsYXNzPVwicGkgcGktcGVuY2lsIGljb24taG92ZXIgbWwtMlwiXG4gICAgICAgICAgICAgICAgcFRvb2x0aXA9XCJSZW5hbWUgLyBmcmVlLWZvcm0gbGFiZWxcIlxuICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiXG4gICAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlJlbmFtZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInN0YXJ0RWRpdChyZWdpb24sICRldmVudClcIlxuICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZWRpdExhYmVsVHBsPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLWlucHV0LWljb24tcmlnaHQgY2xhc3MtY2VsbC1lZGl0XCI+XG4gICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwaSBwaS10aW1lcyBpY29uLWhvdmVyXCJcbiAgICAgICAgICAgICAgICBwVG9vbHRpcD1cIkNsb3NlXCJcbiAgICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJib3R0b21cIlxuICAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJDYW5jZWwgcmVuYW1lXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic3RvcEVkaXQocmVnaW9uLCBmYWxzZSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICBwSW5wdXRUZXh0XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwLWlucHV0dGV4dC1zbSB3LWZ1bGxcIlxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJDbGFzcyBsYWJlbFwiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxdPVwibGFiZWxEcmFmdHMuZ2V0KHJlZ2lvbilcIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImxhYmVsRHJhZnRDaGFuZ2UuZW1pdCh7IHJlZ2lvbjogcmVnaW9uLCB2YWx1ZTogJGV2ZW50IH0pXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJzdG9wRWRpdChyZWdpb24sIHRydWUsICRldmVudClcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duLmVzY2FwZSk9XCJzdG9wRWRpdChyZWdpb24sIGZhbHNlLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3RkPlxuICAgICAgICA8IS0tIFN1cmZhY2UgYXJlYSAowrVtwrIvbW3CsiB3aGVuIHRoZSBpbWFnZSBpcyBzY2FsZWQsIGVsc2UgcHjCsikuIC0tPlxuICAgICAgICA8dGQgY2xhc3M9XCJzdXJmYWNlLWNlbGxcIj57eyByb3dWaWV3LmdldChyZWdpb24pPy5tZWFzdXJlIHx8ICfigJQnIH19PC90ZD5cbiAgICAgICAgPHRkPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHBCdXR0b25cbiAgICAgICAgICAgIHBSaXBwbGVcbiAgICAgICAgICAgIGljb249XCJwaSBwaS10cmFzaFwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiRGVsZXRlIHJlZ2lvblwiXG4gICAgICAgICAgICBjbGFzcz1cInAtYnV0dG9uLXNtIHAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tdGV4dCBwLWJ1dHRvbi13YXJuaW5nXCJcbiAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVSb3cuZW1pdChmaXJzdCArIHJvd0lkeClcIlxuICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9wLXRhYmxlPlxuPC9kaXY+XG5cbjxwLXBhZ2luYXRvclxuICAqbmdJZj1cInRvdGFsID4gMFwiXG4gIFtyb3dzXT1cInJvd3NcIlxuICBbdG90YWxSZWNvcmRzXT1cInRvdGFsXCJcbiAgW2ZpcnN0XT1cImZpcnN0XCJcbiAgW3Jvd3NQZXJQYWdlT3B0aW9uc109XCJyb3dzUGVyUGFnZU9wdGlvbnNcIlxuICBbc2hvd0N1cnJlbnRQYWdlUmVwb3J0XT1cInRydWVcIlxuICBjdXJyZW50UGFnZVJlcG9ydFRlbXBsYXRlPVwie2ZpcnN0fSB0byB7bGFzdH0gb2Yge3RvdGFsUmVjb3Jkc31cIlxuICAob25QYWdlQ2hhbmdlKT1cIm9uUGFnZSgkZXZlbnQpXCJcbiAgc3R5bGVDbGFzcz1cInJlZ2lvbi1lZGl0b3ItcGFnaW5hdG9yXCJcbj5cbjwvcC1wYWdpbmF0b3I+XG4iXX0=
|