@jax-data-science/sci-image-visualizer 0.8.3 → 0.10.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/README.md +201 -460
- package/esm2022/index.mjs +34 -15
- package/esm2022/lib/channel-histogram/channel-histogram.component.mjs +163 -91
- package/esm2022/lib/contracts/capabilities.contract.mjs +4 -3
- package/esm2022/lib/contracts/cell-segmenter.contract.mjs +1 -1
- package/esm2022/lib/contracts/channel-histogram-api.contract.mjs +5 -1
- package/esm2022/lib/contracts/color.mjs +60 -0
- package/esm2022/lib/contracts/colormap-lut.mjs +213 -57
- package/esm2022/lib/contracts/coordinate-transform.contract.mjs +1 -1
- package/esm2022/lib/contracts/display-types.mjs +11 -1
- package/esm2022/lib/contracts/image.contract.mjs +1 -1
- package/esm2022/lib/contracts/instance-segmenter.contract.mjs +1 -1
- package/esm2022/lib/contracts/intensity.mjs +48 -5
- package/esm2022/lib/contracts/plot-type-contribution.contract.mjs +1 -1
- package/esm2022/lib/contracts/plot-type.mjs +134 -17
- package/esm2022/lib/contracts/ports/image-state.port.mjs +4 -1
- package/esm2022/lib/contracts/ports/preferences.port.mjs +5 -1
- package/esm2022/lib/contracts/ports/region-io.port.mjs +2 -1
- package/esm2022/lib/contracts/ports/spatial-data.port.mjs +5 -1
- package/esm2022/lib/contracts/ports/tile-access.port.mjs +2 -1
- package/esm2022/lib/contracts/region-editor-api.contract.mjs +1 -1
- package/esm2022/lib/contracts/region-overlay.contract.mjs +1 -1
- package/esm2022/lib/contracts/region-store.contract.mjs +1 -1
- package/esm2022/lib/contracts/sam.contract.mjs +1 -1
- package/esm2022/lib/contracts/section-view.contract.mjs +2 -0
- package/esm2022/lib/contracts/semantic-segmenter.contract.mjs +1 -1
- package/esm2022/lib/contracts/spatial-dataset.contract.mjs +3 -1
- package/esm2022/lib/contracts/toolbar-tool.contract.mjs +6 -4
- package/esm2022/lib/contracts/visualizer.contract.mjs +1 -1
- package/esm2022/lib/contracts/viz-config.mjs +2 -1
- package/esm2022/lib/geometry/contour.mjs +63 -0
- package/esm2022/lib/geometry/loft.mjs +128 -0
- package/esm2022/lib/geometry/polylabel.mjs +156 -0
- package/esm2022/lib/geometry/raster.mjs +98 -0
- package/esm2022/lib/geometry/reconstruct.mjs +315 -0
- package/esm2022/lib/geometry/reslice-image.mjs +57 -0
- package/esm2022/lib/geometry/ring.mjs +201 -0
- package/esm2022/lib/geometry/section.mjs +215 -0
- package/esm2022/lib/hex-color-picker/hex-color-picker.component.mjs +202 -102
- package/esm2022/lib/implementations/base-store-visualizer.mjs +201 -48
- package/esm2022/lib/implementations/napari-js/napari-axes-gizmo.mjs +65 -0
- package/esm2022/lib/implementations/napari-js/napari-display-state.mjs +136 -0
- package/esm2022/lib/implementations/napari-js/napari-helpers.mjs +199 -0
- package/esm2022/lib/implementations/napari-js/napari-image-2d-scene.mjs +602 -0
- package/esm2022/lib/implementations/napari-js/napari-loading-badge.mjs +12 -9
- package/esm2022/lib/implementations/napari-js/napari-loading-state.mjs +83 -0
- package/esm2022/lib/implementations/napari-js/napari-region-mesh-pointer.mjs +100 -0
- package/esm2022/lib/implementations/napari-js/napari-region-overlay.mjs +180 -591
- package/esm2022/lib/implementations/napari-js/napari-scene.mjs +2 -0
- package/esm2022/lib/implementations/napari-js/napari-spatial-2d-scene.mjs +614 -0
- package/esm2022/lib/implementations/napari-js/napari-spatial-3d-scene.mjs +769 -0
- package/esm2022/lib/implementations/napari-js/napari-spatial-encoding.mjs +199 -0
- package/esm2022/lib/implementations/napari-js/napari-spatial-hover.mjs +270 -0
- package/esm2022/lib/implementations/napari-js/napari-spatial-scene.mjs +159 -0
- package/esm2022/lib/implementations/napari-js/napari-spatial-tiles.mjs +106 -1408
- package/esm2022/lib/implementations/napari-js/napari-spatial-tooltip.mjs +2 -2
- package/esm2022/lib/implementations/napari-js/napari-surface-scene.mjs +271 -0
- package/esm2022/lib/implementations/napari-js/napari-tile-client.mjs +562 -0
- package/esm2022/lib/implementations/napari-js/napari-tool-bridge.mjs +347 -0
- package/esm2022/lib/implementations/napari-js/napari-visualizer.service.mjs +427 -4207
- package/esm2022/lib/implementations/napari-js/napari-volume-region-meshes.mjs +129 -0
- package/esm2022/lib/implementations/napari-js/napari-volume-scene.mjs +550 -0
- package/esm2022/lib/implementations/napari-js/napari-volume-slice-planes.mjs +103 -0
- package/esm2022/lib/implementations/napari-js/napari-volume-z-handle.mjs +6 -6
- package/esm2022/lib/implementations/napari-js/region-overlay/overlay-projection.mjs +96 -0
- package/esm2022/lib/implementations/napari-js/region-overlay/region-edit.mjs +35 -0
- package/esm2022/lib/implementations/napari-js/region-overlay/region-svg-renderer.mjs +194 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/categorical-lookup.mjs +30 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/cell-layers.mjs +274 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/density-layer.mjs +144 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/layer-groups.mjs +165 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/plan-context.mjs +78 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-hover.mjs +182 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-jobs.mjs +369 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-layers.mjs +306 -0
- package/esm2022/lib/implementations/osd/display-pipeline.mjs +102 -40
- package/esm2022/lib/implementations/osd/histogram-sampler.mjs +56 -31
- package/esm2022/lib/implementations/osd/openseadragon-viewer-options.mjs +128 -0
- package/esm2022/lib/implementations/osd/openseadragon-visualizer.service.mjs +333 -1685
- package/esm2022/lib/implementations/osd/osd-coordinate-transform.mjs +1 -1
- package/esm2022/lib/implementations/osd/osd-coords.mjs +5 -6
- package/esm2022/lib/implementations/osd/osd-export.mjs +122 -0
- package/esm2022/lib/implementations/osd/osd-lib.mjs +15 -1
- package/esm2022/lib/implementations/osd/osd-navigator-chrome.mjs +205 -0
- package/esm2022/lib/implementations/osd/osd-pixel-readback.mjs +68 -0
- package/esm2022/lib/implementations/osd/osd-region-overlay-draw.mjs +164 -0
- package/esm2022/lib/implementations/osd/osd-region-overlay.mjs +213 -716
- package/esm2022/lib/implementations/osd/osd-scale-bar.mjs +52 -60
- package/esm2022/lib/implementations/osd/osd-tile-source.mjs +105 -0
- package/esm2022/lib/implementations/osd/osd-viewer-like.mjs +2 -0
- package/esm2022/lib/implementations/osd/osd-viewer-mount.mjs +44 -0
- package/esm2022/lib/implementations/osd/osd-viewport.mjs +184 -0
- package/esm2022/lib/implementations/osd/osd-zoom.mjs +7 -1
- package/esm2022/lib/implementations/osd/simple-source.mjs +395 -0
- package/esm2022/lib/implementations/osd/slice-cache.mjs +53 -48
- package/esm2022/lib/implementations/osd/tile-client.mjs +32 -11
- package/esm2022/lib/implementations/osd/tile-recolor.mjs +330 -0
- package/esm2022/lib/implementations/plotly/omics-trace-builders.mjs +161 -73
- package/esm2022/lib/implementations/plotly/plotly-coordinate-transform.mjs +1 -1
- package/esm2022/lib/implementations/plotly/plotly-image-loader.mjs +112 -0
- package/esm2022/lib/implementations/plotly/plotly-image-recolor.mjs +178 -0
- package/esm2022/lib/implementations/plotly/plotly-intensity-inset.mjs +33 -0
- package/esm2022/lib/implementations/plotly/plotly-isosurface-controls.mjs +83 -0
- package/esm2022/lib/implementations/plotly/plotly-layouts.mjs +121 -0
- package/esm2022/lib/implementations/plotly/plotly-readback.mjs +117 -0
- package/esm2022/lib/implementations/plotly/plotly-region-overlay.mjs +19 -10
- package/esm2022/lib/implementations/plotly/plotly-shape-projection.mjs +223 -0
- package/esm2022/lib/implementations/plotly/plotly-trace-builders.mjs +79 -19
- package/esm2022/lib/implementations/plotly/plotly-zoom-controller.mjs +223 -0
- package/esm2022/lib/implementations/plotly/plotly.service.mjs +439 -1655
- package/esm2022/lib/implementations/region-centroids.mjs +47 -0
- package/esm2022/lib/implementations/simple-slice-access.service.mjs +22 -12
- package/esm2022/lib/implementations/spatial-data-http/spatial-data-http.service.mjs +172 -92
- package/esm2022/lib/implementations/spatial-data-http/spatial-wire.mjs +103 -22
- package/esm2022/lib/implementations/tile-server/index.mjs +6 -0
- package/esm2022/lib/implementations/tile-server/native-histogram.mjs +30 -0
- package/esm2022/lib/implementations/tile-server/poll-descriptor.mjs +65 -0
- package/esm2022/lib/implementations/tile-server/tile-protocol.mjs +42 -0
- package/esm2022/lib/implementations/tile-server/transport.mjs +135 -0
- package/esm2022/lib/intensity/intensity-profile.mjs +107 -0
- package/esm2022/lib/intensity/intensity-profile.service.mjs +223 -0
- package/esm2022/lib/intensity-inset/intensity-inset.component.mjs +133 -0
- package/esm2022/lib/models/bezier.mjs +1 -11
- package/esm2022/lib/models/class-preset.mjs +41 -3
- package/esm2022/lib/models/geometry.mjs +27 -164
- package/esm2022/lib/models/polygon-edit.mjs +254 -0
- package/esm2022/lib/models/polygon-factory.mjs +134 -0
- package/esm2022/lib/models/region-clone.mjs +68 -0
- package/esm2022/lib/models/region-geojson.mjs +411 -0
- package/esm2022/lib/models/region.mjs +34 -33
- package/esm2022/lib/models/shape.mjs +18 -16
- package/esm2022/lib/plot-mode/contribution-host.mjs +297 -0
- package/esm2022/lib/plot-mode/plot-mode-controller.mjs +9 -6
- package/esm2022/lib/plot-mode/plot-type-menu.mjs +85 -0
- package/esm2022/lib/plot-mode/tool-params-model.mjs +87 -0
- package/esm2022/lib/plot.utilities.mjs +296 -473
- package/esm2022/lib/processing/image-crop.mjs +1 -1
- package/esm2022/lib/processing/processing-image.mjs +28 -15
- package/esm2022/lib/provide-visualization.mjs +40 -14
- 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 +163 -0
- package/esm2022/lib/region-editor/file-stem.mjs +13 -0
- package/esm2022/lib/region-editor/manage-classes-dialog/manage-classes-dialog.component.mjs +118 -0
- package/esm2022/lib/region-editor/mask-export.service.mjs +98 -0
- package/esm2022/lib/region-editor/mask-raster.mjs +11 -5
- package/esm2022/lib/region-editor/region-color-dialog/region-color-dialog.component.mjs +56 -0
- package/esm2022/lib/region-editor/region-editor-help/region-editor-help.component.mjs +28 -0
- package/esm2022/lib/region-editor/region-editor.component.mjs +896 -660
- package/esm2022/lib/region-editor/region-metrics.mjs +86 -0
- package/esm2022/lib/region-editor/region-persistence.service.mjs +160 -0
- package/esm2022/lib/region-editor/region-table/region-table.component.mjs +169 -0
- package/esm2022/lib/region-editor/save-mask-dialog/save-mask-dialog.component.mjs +91 -0
- package/esm2022/lib/region-editor/save-regions-dialog/save-regions-dialog.component.mjs +92 -0
- package/esm2022/lib/region-ops.service.mjs +28 -70
- package/esm2022/lib/region-overlay/region-geometry.mjs +360 -0
- package/esm2022/lib/region-overlay/region-hit-test.mjs +103 -0
- 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-overlay/svg-region-renderer.mjs +228 -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/render-orchestrator.mjs +14 -11
- package/esm2022/lib/render-session.mjs +207 -0
- package/esm2022/lib/routing-visualizer.service.mjs +858 -414
- package/esm2022/lib/section-pane/section-pane.component.mjs +299 -0
- package/esm2022/lib/spatial/density-raster.mjs +14 -0
- package/esm2022/lib/spatial/embedding-compute-coordinator.mjs +239 -0
- package/esm2022/lib/spatial/embedding-compute.mjs +43 -10
- package/esm2022/lib/spatial/gene-search.mjs +1 -1
- package/esm2022/lib/spatial/glyphs.mjs +97 -0
- package/esm2022/lib/spatial/lod.mjs +187 -0
- package/esm2022/lib/spatial/spatial-controls.facade.mjs +200 -0
- package/esm2022/lib/spatial/spatial-density.mjs +25 -16
- package/esm2022/lib/spatial/spatial-encoding.mjs +26 -82
- package/esm2022/lib/spatial/spatial-expression.mjs +43 -42
- package/esm2022/lib/spatial/spatial-framing.mjs +1 -1
- package/esm2022/lib/spatial/spatial-heatmap.mjs +6 -3
- package/esm2022/lib/spatial/spatial-hover.mjs +5 -33
- package/esm2022/lib/spatial/spatial-panel-model.mjs +282 -0
- package/esm2022/lib/spatial/spatial-sections.mjs +1 -1
- package/esm2022/lib/spatial/spatial-selection.mjs +33 -46
- package/esm2022/lib/spatial/spatial-tile-merge.mjs +219 -0
- package/esm2022/lib/spatial/spatial-tiles.mjs +12 -648
- package/esm2022/lib/spatial/spatial-volume-image.mjs +2 -4
- package/esm2022/lib/spatial/stats.mjs +71 -0
- package/esm2022/lib/spatial/transcript-grouping.mjs +307 -0
- package/esm2022/lib/spatial-controls/spatial-cells-panel/spatial-cells-panel.component.mjs +150 -0
- package/esm2022/lib/spatial-controls/spatial-charts/chart-data-model.mjs +309 -0
- package/esm2022/lib/spatial-controls/spatial-charts/chart-help.mjs +145 -0
- package/esm2022/lib/spatial-controls/spatial-charts/plotly-chart-host.mjs +158 -0
- package/esm2022/lib/spatial-controls/spatial-charts/spatial-chart-window/spatial-chart-window.component.mjs +47 -0
- package/esm2022/lib/spatial-controls/spatial-charts/spatial-charts.component.mjs +297 -802
- package/esm2022/lib/spatial-controls/spatial-charts/spatial-embedding-controls/spatial-embedding-controls.component.mjs +89 -0
- package/esm2022/lib/spatial-controls/spatial-charts/spatial-heatmap-controls/spatial-heatmap-controls.component.mjs +52 -0
- package/esm2022/lib/spatial-controls/spatial-controls.component.mjs +143 -1238
- package/esm2022/lib/spatial-controls/spatial-gene-picker.mjs +153 -0
- package/esm2022/lib/spatial-controls/spatial-gene-tree/spatial-gene-tree.component.mjs +241 -0
- package/esm2022/lib/spatial-controls/spatial-groups-panel/spatial-groups-panel.component.mjs +193 -0
- package/esm2022/lib/spatial-controls/spatial-key/spatial-key.component.mjs +132 -0
- package/esm2022/lib/spatial-controls/spatial-key/spatial-key.model.mjs +67 -0
- package/esm2022/lib/spatial-controls/spatial-marker-genes-form/spatial-marker-genes-form.component.mjs +147 -0
- package/esm2022/lib/spatial-controls/spatial-observations-panel/spatial-observations-panel.component.mjs +300 -0
- package/esm2022/lib/spatial-controls/spatial-transcripts-panel/spatial-transcripts-panel.component.mjs +370 -0
- package/esm2022/lib/store/class-color.util.mjs +53 -5
- package/esm2022/lib/store/class-signatures.mjs +63 -0
- package/esm2022/lib/store/region-history.mjs +146 -0
- package/esm2022/lib/store/region-scope-cache.mjs +144 -0
- package/esm2022/lib/store/region-selection.mjs +82 -0
- package/esm2022/lib/store/region-source-scope.mjs +171 -0
- package/esm2022/lib/store/region-store.service.mjs +986 -670
- package/esm2022/lib/store/spatial-selection.service.mjs +2 -2
- package/esm2022/lib/store/visualizer-store.service.mjs +81 -76
- package/esm2022/lib/toast-outlets.mjs +5 -4
- package/esm2022/lib/toolbar/brush/brush-tool.service.mjs +92 -434
- package/esm2022/lib/toolbar/canvas-tools.mjs +20 -0
- package/esm2022/lib/toolbar/crop/slide-crop.mjs +26 -42
- package/esm2022/lib/toolbar/plot-type-selector/plot-type-selector.component.mjs +85 -0
- package/esm2022/lib/toolbar/region-tools/region-tool-buttons.mjs +74 -0
- package/esm2022/lib/toolbar/region-tools/region-tools.component.mjs +120 -0
- package/esm2022/lib/toolbar/segmentation/cell-segment-tool.service.mjs +74 -78
- package/esm2022/lib/toolbar/segmentation/cellpose-segmenter.service.mjs +50 -8
- package/esm2022/lib/toolbar/segmentation/onnx-sam-session.mjs +61 -42
- package/esm2022/lib/toolbar/segmentation/pending-calls.mjs +47 -0
- package/esm2022/lib/toolbar/segmentation/sam-model-registry.mjs +12 -4
- package/esm2022/lib/toolbar/segmentation/sam-onnx-core.mjs +70 -14
- package/esm2022/lib/toolbar/segmentation/sam-point-tool.service.mjs +135 -172
- package/esm2022/lib/toolbar/segmentation/sam-prompt.mjs +9 -90
- package/esm2022/lib/toolbar/segmentation/sam-session.service.mjs +183 -0
- package/esm2022/lib/toolbar/segmentation/sam-tool.service.mjs +95 -150
- package/esm2022/lib/toolbar/segmentation/segmentation-commit.mjs +12 -0
- package/esm2022/lib/toolbar/segmentation/segmentation-runner.mjs +108 -0
- package/esm2022/lib/toolbar/segmentation-tools/segmentation-tools.component.mjs +155 -0
- package/esm2022/lib/toolbar/stack-controls/stack-controls.component.mjs +121 -0
- package/esm2022/lib/toolbar/tool-kit/async-tool-status.mjs +37 -0
- package/esm2022/lib/toolbar/tool-kit/canvas-tool-manager.mjs +63 -0
- package/esm2022/lib/toolbar/tool-kit/canvas-tool.mjs +2 -0
- package/esm2022/lib/toolbar/tool-kit/frame-pixels.mjs +108 -0
- package/esm2022/lib/toolbar/tool-kit/mask-stroke-editor.mjs +306 -0
- package/esm2022/lib/toolbar/tool-kit/matrix-frame.mjs +61 -0
- package/esm2022/lib/toolbar/tool-kit/tool-overlay.mjs +140 -0
- package/esm2022/lib/toolbar/tool-kit/undo-gesture.mjs +24 -0
- package/esm2022/lib/toolbar/tool-slider/tool-slider.component.mjs +63 -0
- package/esm2022/lib/toolbar/toolbar-help-dialog/toolbar-help-dialog.component.mjs +50 -0
- package/esm2022/lib/toolbar/toolbar.component.mjs +84 -119
- package/esm2022/lib/toolbar/vertex-eraser/vertex-eraser-tool.service.mjs +93 -115
- package/esm2022/lib/toolbar/view-controls/view-controls.component.mjs +107 -0
- package/esm2022/lib/toolbar/wand/wand-region-grow.mjs +321 -0
- package/esm2022/lib/toolbar/wand/wand-tool.service.mjs +121 -416
- package/esm2022/lib/toolbar/wand/wand.service.mjs +30 -894
- package/esm2022/lib/toolbar/zoom-to-box/zoom-to-box-tool.service.mjs +48 -90
- package/esm2022/lib/util/mark-for-check.mjs +17 -0
- package/esm2022/lib/util/supersede.mjs +56 -0
- package/esm2022/lib/visualization.module.mjs +39 -141
- package/esm2022/lib/visualizer/floating-drag.directive.mjs +58 -0
- package/esm2022/lib/visualizer/region-actions.mjs +149 -0
- package/esm2022/lib/visualizer/region-load.mjs +123 -0
- package/esm2022/lib/visualizer/spatial-dataset-binder.mjs +163 -0
- package/esm2022/lib/visualizer/tool-modes.mjs +113 -0
- package/esm2022/lib/visualizer/viewer-shortcuts.mjs +167 -0
- package/esm2022/lib/visualizer/visualizer-context-menu.mjs +119 -0
- package/esm2022/lib/visualizer/volume-sections.mjs +175 -0
- package/esm2022/lib/visualizer.component.mjs +602 -1902
- package/esm2022/lib/workers/spatial-math-ops.mjs +43 -0
- package/esm2022/lib/workers/spatial-math-worker.mjs +10 -0
- package/esm2022/lib/workers/spatial-math.mjs +190 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-BKQhpbHv.mjs +47169 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-BKQhpbHv.mjs.map +1 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-z1IN-F7w.mjs +238 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-z1IN-F7w.mjs.map +1 -0
- 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-spatial-math-worker-BzVFFqGS.mjs +12 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-spatial-math-worker-BzVFFqGS.mjs.map +1 -0
- package/fesm2022/jax-data-science-sci-image-visualizer.mjs +41 -34467
- package/fesm2022/jax-data-science-sci-image-visualizer.mjs.map +1 -1
- package/fesm2022/mask.worker.js +36 -917
- package/fesm2022/onnx-sam.worker.js +52 -16
- package/fesm2022/region-source.worker.js +1067 -0
- package/fesm2022/spatial-math.worker.js +471 -0
- package/fesm2022/tsne.worker.js +32 -15
- package/index.d.ts +19 -10
- package/lib/channel-histogram/channel-histogram.component.d.ts +53 -43
- package/lib/contracts/capabilities.contract.d.ts +4 -2
- package/lib/contracts/cell-segmenter.contract.d.ts +1 -0
- package/lib/contracts/channel-histogram-api.contract.d.ts +4 -0
- package/lib/contracts/color.d.ts +27 -0
- package/lib/contracts/colormap-lut.d.ts +19 -4
- package/lib/contracts/coordinate-transform.contract.d.ts +3 -3
- package/lib/contracts/display-types.d.ts +21 -0
- package/lib/contracts/image.contract.d.ts +4 -0
- package/lib/contracts/instance-segmenter.contract.d.ts +5 -0
- package/lib/contracts/intensity.d.ts +13 -2
- package/lib/contracts/plot-type.d.ts +3 -1
- package/lib/contracts/ports/image-state.port.d.ts +6 -2
- package/lib/contracts/ports/preferences.port.d.ts +4 -0
- package/lib/contracts/ports/region-io.port.d.ts +1 -0
- package/lib/contracts/ports/spatial-data.port.d.ts +4 -10
- package/lib/contracts/ports/tile-access.port.d.ts +1 -0
- package/lib/contracts/region-editor-api.contract.d.ts +85 -1
- package/lib/contracts/region-overlay.contract.d.ts +5 -0
- package/lib/contracts/region-store.contract.d.ts +22 -0
- package/lib/contracts/sam.contract.d.ts +7 -0
- package/lib/contracts/section-view.contract.d.ts +44 -0
- package/lib/contracts/semantic-segmenter.contract.d.ts +6 -0
- package/lib/contracts/spatial-dataset.contract.d.ts +19 -6
- package/lib/contracts/toolbar-tool.contract.d.ts +1 -0
- package/lib/contracts/visualizer.contract.d.ts +231 -54
- package/lib/contracts/viz-config.d.ts +9 -0
- package/lib/geometry/contour.d.ts +24 -0
- package/lib/geometry/loft.d.ts +22 -0
- package/lib/geometry/polylabel.d.ts +23 -0
- package/lib/geometry/raster.d.ts +42 -0
- package/lib/geometry/reconstruct.d.ts +54 -0
- package/lib/geometry/reslice-image.d.ts +33 -0
- package/lib/geometry/ring.d.ts +67 -0
- package/lib/geometry/section.d.ts +52 -0
- package/lib/hex-color-picker/hex-color-picker.component.d.ts +61 -27
- package/lib/implementations/base-store-visualizer.d.ts +61 -15
- package/lib/implementations/napari-js/napari-axes-gizmo.d.ts +36 -0
- package/lib/implementations/napari-js/napari-display-state.d.ts +76 -0
- package/lib/implementations/napari-js/napari-helpers.d.ts +129 -0
- package/lib/implementations/napari-js/napari-image-2d-scene.d.ts +162 -0
- package/lib/implementations/napari-js/napari-loading-badge.d.ts +4 -3
- package/lib/implementations/napari-js/napari-loading-state.d.ts +37 -0
- package/lib/implementations/napari-js/napari-region-mesh-pointer.d.ts +32 -0
- package/lib/implementations/napari-js/napari-region-overlay.d.ts +68 -71
- package/lib/implementations/napari-js/napari-scene.d.ts +126 -0
- package/lib/implementations/napari-js/napari-spatial-2d-scene.d.ts +163 -0
- package/lib/implementations/napari-js/napari-spatial-3d-scene.d.ts +212 -0
- package/lib/implementations/napari-js/napari-spatial-encoding.d.ts +114 -0
- package/lib/implementations/napari-js/napari-spatial-hover.d.ts +91 -0
- package/lib/implementations/napari-js/napari-spatial-scene.d.ts +118 -0
- package/lib/implementations/napari-js/napari-spatial-tiles.d.ts +56 -263
- package/lib/implementations/napari-js/napari-spatial-tooltip.d.ts +1 -1
- package/lib/implementations/napari-js/napari-surface-scene.d.ts +76 -0
- package/lib/implementations/napari-js/napari-tile-client.d.ts +214 -0
- package/lib/implementations/napari-js/napari-tool-bridge.d.ts +179 -0
- package/lib/implementations/napari-js/napari-visualizer.service.d.ts +169 -883
- package/lib/implementations/napari-js/napari-volume-region-meshes.d.ts +66 -0
- package/lib/implementations/napari-js/napari-volume-scene.d.ts +148 -0
- package/lib/implementations/napari-js/napari-volume-slice-planes.d.ts +43 -0
- package/lib/implementations/napari-js/napari-volume-z-handle.d.ts +8 -12
- package/lib/implementations/napari-js/region-overlay/overlay-projection.d.ts +59 -0
- package/lib/implementations/napari-js/region-overlay/region-edit.d.ts +15 -0
- package/lib/implementations/napari-js/region-overlay/region-svg-renderer.d.ts +54 -0
- package/lib/implementations/napari-js/spatial-tiles/categorical-lookup.d.ts +26 -0
- package/lib/implementations/napari-js/spatial-tiles/cell-layers.d.ts +70 -0
- package/lib/implementations/napari-js/spatial-tiles/density-layer.d.ts +61 -0
- package/lib/implementations/napari-js/spatial-tiles/layer-groups.d.ts +67 -0
- package/lib/implementations/napari-js/spatial-tiles/plan-context.d.ts +38 -0
- package/lib/implementations/napari-js/spatial-tiles/transcript-hover.d.ts +71 -0
- package/lib/implementations/napari-js/spatial-tiles/transcript-jobs.d.ts +105 -0
- package/lib/implementations/napari-js/spatial-tiles/transcript-layers.d.ts +56 -0
- package/lib/implementations/osd/display-pipeline.d.ts +38 -9
- package/lib/implementations/osd/histogram-sampler.d.ts +22 -12
- package/lib/implementations/osd/openseadragon-viewer-options.d.ts +35 -0
- package/lib/implementations/osd/openseadragon-visualizer.service.d.ts +78 -354
- package/lib/implementations/osd/osd-coordinate-transform.d.ts +2 -1
- package/lib/implementations/osd/osd-coords.d.ts +6 -4
- package/lib/implementations/osd/osd-export.d.ts +36 -0
- package/lib/implementations/osd/osd-lib.d.ts +7 -0
- package/lib/implementations/osd/osd-navigator-chrome.d.ts +69 -0
- package/lib/implementations/osd/osd-pixel-readback.d.ts +22 -0
- package/lib/implementations/osd/osd-region-overlay-draw.d.ts +38 -0
- package/lib/implementations/osd/osd-region-overlay.d.ts +46 -51
- package/lib/implementations/osd/osd-scale-bar.d.ts +8 -6
- package/lib/implementations/osd/osd-tile-source.d.ts +49 -0
- package/lib/implementations/osd/osd-viewer-like.d.ts +100 -0
- package/lib/implementations/osd/osd-viewer-mount.d.ts +14 -0
- package/lib/implementations/osd/osd-viewport.d.ts +77 -0
- package/lib/implementations/osd/osd-zoom.d.ts +6 -0
- package/lib/implementations/osd/simple-source.d.ts +161 -0
- package/lib/implementations/osd/slice-cache.d.ts +12 -3
- package/lib/implementations/osd/tile-client.d.ts +11 -14
- package/lib/implementations/osd/tile-recolor.d.ts +141 -0
- package/lib/implementations/plotly/omics-trace-builders.d.ts +32 -20
- package/lib/implementations/plotly/plotly-image-loader.d.ts +49 -0
- package/lib/implementations/plotly/plotly-image-recolor.d.ts +75 -0
- package/lib/implementations/plotly/plotly-intensity-inset.d.ts +8 -0
- package/lib/implementations/plotly/plotly-isosurface-controls.d.ts +38 -0
- package/lib/implementations/plotly/plotly-layouts.d.ts +188 -0
- package/lib/implementations/plotly/plotly-readback.d.ts +41 -0
- package/lib/implementations/plotly/plotly-region-overlay.d.ts +2 -2
- package/lib/implementations/plotly/plotly-shape-projection.d.ts +92 -0
- package/lib/implementations/plotly/plotly-trace-builders.d.ts +23 -12
- package/lib/implementations/plotly/plotly-zoom-controller.d.ts +86 -0
- package/lib/implementations/plotly/plotly.service.d.ts +136 -401
- package/lib/implementations/region-centroids.d.ts +14 -0
- package/lib/implementations/simple-slice-access.service.d.ts +7 -4
- package/lib/implementations/spatial-data-http/spatial-data-http.service.d.ts +42 -18
- package/lib/implementations/spatial-data-http/spatial-wire.d.ts +34 -9
- package/lib/implementations/tile-server/index.d.ts +5 -0
- package/lib/implementations/tile-server/native-histogram.d.ts +25 -0
- package/lib/implementations/tile-server/poll-descriptor.d.ts +39 -0
- package/lib/implementations/tile-server/tile-protocol.d.ts +83 -0
- package/lib/implementations/tile-server/transport.d.ts +62 -0
- package/lib/intensity/intensity-profile.d.ts +66 -0
- package/lib/intensity/intensity-profile.service.d.ts +108 -0
- package/lib/intensity-inset/intensity-inset.component.d.ts +58 -0
- package/lib/models/bezier.d.ts +0 -5
- package/lib/models/class-preset.d.ts +25 -0
- package/lib/models/geometry.d.ts +14 -48
- package/lib/models/polygon-edit.d.ts +72 -0
- package/lib/models/polygon-factory.d.ts +45 -0
- package/lib/models/region-clone.d.ts +20 -0
- package/lib/models/region-geojson.d.ts +57 -0
- package/lib/models/region.d.ts +59 -4
- package/lib/models/shape.d.ts +8 -0
- package/lib/plot-mode/contribution-host.d.ts +125 -0
- package/lib/plot-mode/plot-type-menu.d.ts +60 -0
- package/lib/plot-mode/tool-params-model.d.ts +49 -0
- package/lib/plot.utilities.d.ts +19 -30
- package/lib/processing/processing-image.d.ts +5 -2
- package/lib/provide-visualization.d.ts +19 -2
- 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 +86 -0
- package/lib/region-editor/file-stem.d.ts +7 -0
- package/lib/region-editor/manage-classes-dialog/manage-classes-dialog.component.d.ts +45 -0
- package/lib/region-editor/mask-export.service.d.ts +54 -0
- package/lib/region-editor/mask-raster.d.ts +2 -8
- package/lib/region-editor/region-color-dialog/region-color-dialog.component.d.ts +29 -0
- package/lib/region-editor/region-editor-help/region-editor-help.component.d.ts +11 -0
- package/lib/region-editor/region-editor.component.d.ts +283 -200
- package/lib/region-editor/region-metrics.d.ts +34 -0
- package/lib/region-editor/region-persistence.service.d.ts +77 -0
- package/lib/region-editor/region-table/region-table.component.d.ts +89 -0
- package/lib/region-editor/save-mask-dialog/save-mask-dialog.component.d.ts +36 -0
- package/lib/region-editor/save-regions-dialog/save-regions-dialog.component.d.ts +37 -0
- package/lib/region-ops.service.d.ts +1 -7
- package/lib/region-overlay/region-geometry.d.ts +158 -0
- package/lib/region-overlay/region-hit-test.d.ts +38 -0
- package/lib/region-overlay/region-source-layer.d.ts +96 -0
- package/lib/region-overlay/region-style.d.ts +52 -0
- package/lib/region-overlay/svg-region-renderer.d.ts +110 -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/render-orchestrator.d.ts +6 -2
- package/lib/render-session.d.ts +75 -0
- package/lib/routing-visualizer.service.d.ts +248 -59
- package/lib/section-pane/section-pane.component.d.ts +47 -0
- package/lib/spatial/density-raster.d.ts +6 -0
- package/lib/spatial/embedding-compute-coordinator.d.ts +123 -0
- package/lib/spatial/embedding-compute.d.ts +21 -2
- package/lib/spatial/glyphs.d.ts +16 -0
- package/lib/spatial/lod.d.ts +94 -0
- package/lib/spatial/spatial-controls.facade.d.ts +64 -0
- package/lib/spatial/spatial-density.d.ts +15 -5
- package/lib/spatial/spatial-encoding.d.ts +11 -44
- package/lib/spatial/spatial-expression.d.ts +40 -22
- package/lib/spatial/spatial-framing.d.ts +1 -0
- package/lib/spatial/spatial-heatmap.d.ts +2 -0
- package/lib/spatial/spatial-hover.d.ts +4 -16
- package/lib/spatial/spatial-panel-model.d.ts +135 -0
- package/lib/spatial/spatial-selection.d.ts +21 -26
- package/lib/spatial/spatial-tile-merge.d.ts +41 -0
- package/lib/spatial/spatial-tiles.d.ts +9 -256
- package/lib/spatial/stats.d.ts +38 -0
- package/lib/spatial/transcript-grouping.d.ts +119 -0
- package/lib/spatial-controls/spatial-cells-panel/spatial-cells-panel.component.d.ts +64 -0
- package/lib/spatial-controls/spatial-charts/chart-data-model.d.ts +153 -0
- package/lib/spatial-controls/spatial-charts/chart-help.d.ts +69 -0
- package/lib/spatial-controls/spatial-charts/plotly-chart-host.d.ts +98 -0
- package/lib/spatial-controls/spatial-charts/spatial-chart-window/spatial-chart-window.component.d.ts +26 -0
- package/lib/spatial-controls/spatial-charts/spatial-charts.component.d.ts +101 -260
- package/lib/spatial-controls/spatial-charts/spatial-embedding-controls/spatial-embedding-controls.component.d.ts +43 -0
- package/lib/spatial-controls/spatial-charts/spatial-heatmap-controls/spatial-heatmap-controls.component.d.ts +27 -0
- package/lib/spatial-controls/spatial-controls.component.d.ts +68 -448
- package/lib/spatial-controls/spatial-gene-picker.d.ts +86 -0
- package/lib/spatial-controls/spatial-gene-tree/spatial-gene-tree.component.d.ts +102 -0
- package/lib/spatial-controls/spatial-groups-panel/spatial-groups-panel.component.d.ts +72 -0
- package/lib/spatial-controls/spatial-key/spatial-key.component.d.ts +66 -0
- package/lib/spatial-controls/spatial-key/spatial-key.model.d.ts +33 -0
- package/lib/spatial-controls/spatial-marker-genes-form/spatial-marker-genes-form.component.d.ts +64 -0
- package/lib/spatial-controls/spatial-observations-panel/spatial-observations-panel.component.d.ts +117 -0
- package/lib/spatial-controls/spatial-transcripts-panel/spatial-transcripts-panel.component.d.ts +142 -0
- package/lib/store/class-color.util.d.ts +39 -2
- package/lib/store/class-signatures.d.ts +11 -0
- package/lib/store/region-history.d.ts +66 -0
- package/lib/store/region-scope-cache.d.ts +65 -0
- package/lib/store/region-selection.d.ts +36 -0
- package/lib/store/region-source-scope.d.ts +68 -0
- package/lib/store/region-store.service.d.ts +312 -116
- package/lib/store/visualizer-store.service.d.ts +32 -33
- package/lib/toast-outlets.d.ts +4 -3
- package/lib/toolbar/brush/brush-tool.service.d.ts +31 -98
- package/lib/toolbar/canvas-tools.d.ts +20 -0
- package/lib/toolbar/crop/slide-crop.d.ts +10 -4
- package/lib/toolbar/plot-type-selector/plot-type-selector.component.d.ts +38 -0
- package/lib/toolbar/region-tools/region-tool-buttons.d.ts +21 -0
- package/lib/toolbar/region-tools/region-tools.component.d.ts +62 -0
- package/lib/toolbar/segmentation/cell-segment-tool.service.d.ts +10 -14
- package/lib/toolbar/segmentation/cellpose-segmenter.service.d.ts +12 -2
- package/lib/toolbar/segmentation/onnx-sam-session.d.ts +22 -3
- package/lib/toolbar/segmentation/pending-calls.d.ts +31 -0
- package/lib/toolbar/segmentation/sam-model-registry.d.ts +9 -3
- package/lib/toolbar/segmentation/sam-onnx-core.d.ts +18 -5
- package/lib/toolbar/segmentation/sam-point-tool.service.d.ts +46 -32
- package/lib/toolbar/segmentation/sam-prompt.d.ts +7 -31
- package/lib/toolbar/segmentation/sam-session.service.d.ts +74 -0
- package/lib/toolbar/segmentation/sam-tool.service.d.ts +23 -30
- package/lib/toolbar/segmentation/segmentation-commit.d.ts +8 -0
- package/lib/toolbar/segmentation/segmentation-runner.d.ts +52 -0
- package/lib/toolbar/segmentation-tools/segmentation-tools.component.d.ts +87 -0
- package/lib/toolbar/stack-controls/stack-controls.component.d.ts +51 -0
- package/lib/toolbar/tool-kit/async-tool-status.d.ts +21 -0
- package/lib/toolbar/tool-kit/canvas-tool-manager.d.ts +36 -0
- package/lib/toolbar/tool-kit/canvas-tool.d.ts +86 -0
- package/lib/toolbar/tool-kit/frame-pixels.d.ts +45 -0
- package/lib/toolbar/tool-kit/mask-stroke-editor.d.ts +125 -0
- package/lib/toolbar/tool-kit/matrix-frame.d.ts +40 -0
- package/lib/toolbar/tool-kit/tool-overlay.d.ts +60 -0
- package/lib/toolbar/tool-kit/undo-gesture.d.ts +17 -0
- package/lib/toolbar/tool-slider/tool-slider.component.d.ts +33 -0
- package/lib/toolbar/toolbar-help-dialog/toolbar-help-dialog.component.d.ts +24 -0
- package/lib/toolbar/toolbar.component.d.ts +55 -84
- package/lib/toolbar/vertex-eraser/vertex-eraser-tool.service.d.ts +33 -40
- package/lib/toolbar/view-controls/view-controls.component.d.ts +54 -0
- package/lib/toolbar/wand/wand-region-grow.d.ts +49 -0
- package/lib/toolbar/wand/wand-tool.service.d.ts +39 -124
- package/lib/toolbar/wand/wand.service.d.ts +22 -116
- package/lib/toolbar/zoom-to-box/zoom-to-box-tool.service.d.ts +17 -37
- package/lib/util/mark-for-check.d.ts +11 -0
- package/lib/util/supersede.d.ts +53 -0
- package/lib/visualization.module.d.ts +18 -39
- package/lib/visualizer/floating-drag.directive.d.ts +30 -0
- package/lib/visualizer/region-actions.d.ts +54 -0
- package/lib/visualizer/region-load.d.ts +46 -0
- package/lib/visualizer/spatial-dataset-binder.d.ts +74 -0
- package/lib/visualizer/tool-modes.d.ts +49 -0
- package/lib/visualizer/viewer-shortcuts.d.ts +71 -0
- package/lib/visualizer/visualizer-context-menu.d.ts +55 -0
- package/lib/visualizer/volume-sections.d.ts +64 -0
- package/lib/visualizer.component.d.ts +232 -447
- package/lib/workers/spatial-math-ops.d.ts +65 -0
- package/lib/workers/spatial-math-worker.d.ts +7 -0
- package/lib/workers/spatial-math.d.ts +74 -0
- package/package.json +12 -3
- package/src/lib/assets/slice.svg +23 -0
- package/src/lib/styles/_viz-icons-rules.scss +73 -0
- package/src/lib/styles/viz-icons.scss +14 -0
- package/esm2022/lib/implementations/napari-js/napari-axes-labels.mjs +0 -97
- package/esm2022/lib/implementations/napari-js/napari-navigator.mjs +0 -195
- package/esm2022/lib/implementations/napari-js/napari-scale-bar.mjs +0 -92
- package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-BwP-A11m.mjs +0 -329
- package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-BwP-A11m.mjs.map +0 -1
- package/lib/implementations/napari-js/napari-axes-labels.d.ts +0 -49
- package/lib/implementations/napari-js/napari-navigator.d.ts +0 -72
- package/lib/implementations/napari-js/napari-scale-bar.d.ts +0 -35
- package/src/lib/assets/cell-detection.svg +0 -37
- package/src/lib/assets/click.svg +0 -1
- package/src/lib/assets/colormap-luts.json +0 -1
- package/src/lib/assets/edit-selection-white.svg +0 -47
- package/src/lib/assets/icons/colormap-earth.png +0 -0
- package/src/lib/assets/icons/colormap-placeholder.png +0 -0
- package/src/lib/assets/icons/colormap-pubu.png +0 -0
- package/src/lib/assets/interactive-segmentation-cursor.svg +0 -1
- package/src/lib/assets/picture-segmentation.svg +0 -43
- package/src/lib/assets/test/download-379.svg +0 -1
- package/src/lib/assets/test/download-98.svg +0 -1
- package/src/lib/assets/test/json-1.svg +0 -1
- package/src/lib/assets/test/load-53.svg +0 -1
- package/src/lib/assets/test/mask-44.svg +0 -1
- package/src/lib/assets/test/mask-download-44.svg +0 -15
- package/src/lib/assets/test/mask-save-44.svg +0 -11
- package/src/lib/assets/test/overlay-1.svg +0 -1
- package/src/lib/assets/test/overlay-4.svg +0 -1
- package/src/lib/assets/test/region-26.svg +0 -1
- package/src/lib/assets/test/save-56.svg +0 -1
- package/src/lib/assets/test/upload-43.svg +0 -1
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Optional features a viewer backend may or may not support. Consumers query
|
|
3
|
-
* `
|
|
3
|
+
* `IVisualizer.capabilities` and degrade gracefully (hide a toolbar item,
|
|
4
4
|
* skip a render path) rather than calling a method that no-ops.
|
|
5
5
|
*
|
|
6
6
|
* The Plotly backend supports the scientific/data features; the OpenSeadragon
|
|
7
7
|
* backend supports `ImageDisplay` (large zoomable image) but not the
|
|
8
|
-
* scalar-data features.
|
|
8
|
+
* scalar-data features. `RoutingVisualizerService` picks a backend per plot type
|
|
9
|
+
* and reports Plotly's capabilities, so the UI keeps offering every type.
|
|
9
10
|
*/
|
|
10
11
|
export var ViewerFeature;
|
|
11
12
|
(function (ViewerFeature) {
|
|
@@ -29,4 +30,4 @@ export function capabilitiesOf(features) {
|
|
|
29
30
|
const set = new Set(features);
|
|
30
31
|
return { has: (f) => set.has(f) };
|
|
31
32
|
}
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FwYWJpbGl0aWVzLmNvbnRyYWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb250cmFjdHMvY2FwYWJpbGl0aWVzLmNvbnRyYWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sQ0FBTixJQUFZLGFBZVg7QUFmRCxXQUFZLGFBQWE7SUFDdkIsd0VBQXdFO0lBQ3hFLDhDQUE2QixDQUFBO0lBQzdCLDJEQUEyRDtJQUMzRCx3Q0FBdUIsQ0FBQTtJQUN2Qix3REFBd0Q7SUFDeEQsa0RBQWlDLENBQUE7SUFDakMsb0VBQW9FO0lBQ3BFLGdEQUErQixDQUFBO0lBQy9CLHVFQUF1RTtJQUN2RSw0Q0FBMkIsQ0FBQTtJQUMzQiw4Q0FBOEM7SUFDOUMsNENBQTJCLENBQUE7SUFDM0Isa0ZBQWtGO0lBQ2xGLDBDQUF5QixDQUFBO0FBQzNCLENBQUMsRUFmVyxhQUFhLEtBQWIsYUFBYSxRQWV4QjtBQU9ELDZEQUE2RDtBQUM3RCxNQUFNLFVBQVUsY0FBYyxDQUFDLFFBQWlDO0lBQzlELE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFnQixRQUFRLENBQUMsQ0FBQztJQUM3QyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBZ0IsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ25ELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE9wdGlvbmFsIGZlYXR1cmVzIGEgdmlld2VyIGJhY2tlbmQgbWF5IG9yIG1heSBub3Qgc3VwcG9ydC4gQ29uc3VtZXJzIHF1ZXJ5XG4gKiBgSVZpc3VhbGl6ZXIuY2FwYWJpbGl0aWVzYCBhbmQgZGVncmFkZSBncmFjZWZ1bGx5IChoaWRlIGEgdG9vbGJhciBpdGVtLFxuICogc2tpcCBhIHJlbmRlciBwYXRoKSByYXRoZXIgdGhhbiBjYWxsaW5nIGEgbWV0aG9kIHRoYXQgbm8tb3BzLlxuICpcbiAqIFRoZSBQbG90bHkgYmFja2VuZCBzdXBwb3J0cyB0aGUgc2NpZW50aWZpYy9kYXRhIGZlYXR1cmVzOyB0aGUgT3BlblNlYWRyYWdvblxuICogYmFja2VuZCBzdXBwb3J0cyBgSW1hZ2VEaXNwbGF5YCAobGFyZ2Ugem9vbWFibGUgaW1hZ2UpIGJ1dCBub3QgdGhlXG4gKiBzY2FsYXItZGF0YSBmZWF0dXJlcy4gYFJvdXRpbmdWaXN1YWxpemVyU2VydmljZWAgcGlja3MgYSBiYWNrZW5kIHBlciBwbG90IHR5cGVcbiAqIGFuZCByZXBvcnRzIFBsb3RseSdzIGNhcGFiaWxpdGllcywgc28gdGhlIFVJIGtlZXBzIG9mZmVyaW5nIGV2ZXJ5IHR5cGUuXG4gKi9cbmV4cG9ydCBlbnVtIFZpZXdlckZlYXR1cmUge1xuICAvKiogRGlzcGxheSBhIHJhc3Rlci90aWxlZCBpbWFnZSAoSEVBVE1BUC9SR0IgaW1hZ2UsIE9TRCdzIHN0cmVuZ3RoKS4gKi9cbiAgSW1hZ2VEaXNwbGF5ID0gJ2ltYWdlRGlzcGxheScsXG4gIC8qKiAzRCBzY2VuZSByZW5kZXJpbmcgKFNVUkZBQ0UsIFNDQVRURVIzRCwgSVNPU1VSRkFDRSkuICovXG4gIFN1cmZhY2UzRCA9ICdzdXJmYWNlM2QnLFxuICAvKiogTGl2ZSBjb2xvcm1hcC9MVVQgYXBwbGllZCB0byBhIHJhdyBzY2FsYXIgbWF0cml4LiAqL1xuICBTY2FsYXJDb2xvcm1hcCA9ICdzY2FsYXJDb2xvcm1hcCcsXG4gIC8qKiBSZWFkIGJhY2sgdGhlIGRpc3BsYXllZCBwaXhlbCBtYXRyaXggKGdldERpc3BsYXllZFBpeGVsRGF0YSkuICovXG4gIFBpeGVsUmVhZGJhY2sgPSAncGl4ZWxSZWFkYmFjaycsXG4gIC8qKiBTZXJ2ZXIgcmUtZmV0Y2ggb2YgYSBoaWdoZXItcmVzIGNyb3Agb24gem9vbSAodnMgbmF0aXZlIHRpbGluZykuICovXG4gIEhpZ2hEZWZab29tID0gJ2hpZ2hEZWZab29tJyxcbiAgLyoqIFBlci16LXBsYW5lIHNsaWRlciBvdmVyIGFuIGltYWdlIHN0YWNrLiAqL1xuICBTdGFja1NsaWRlciA9ICdzdGFja1NsaWRlcicsXG4gIC8qKiBMaXZlIGlzb3N1cmZhY2UgaW50ZW5zaXR5IGJvdW5kcyAoaXNvbWluL2lzb21heCkg4oCUIHNlZSBJSXNvc3VyZmFjZUNvbnRyb2xzLiAqL1xuICBJc29zdXJmYWNlID0gJ2lzb3N1cmZhY2UnLFxufVxuXG4vKiogVGhlIGZlYXR1cmUgc2V0IGEgYmFja2VuZCBhZHZlcnRpc2VzIChzZWUge0BsaW5rIFZpZXdlckZlYXR1cmV9KS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmlld2VyQ2FwYWJpbGl0aWVzIHtcbiAgaGFzKGZlYXR1cmU6IFZpZXdlckZlYXR1cmUpOiBib29sZWFuO1xufVxuXG4vKiogQnVpbGQgYSBgVmlld2VyQ2FwYWJpbGl0aWVzYCBmcm9tIGEgZml4ZWQgZmVhdHVyZSBzZXQuICovXG5leHBvcnQgZnVuY3Rpb24gY2FwYWJpbGl0aWVzT2YoZmVhdHVyZXM6IEl0ZXJhYmxlPFZpZXdlckZlYXR1cmU+KTogVmlld2VyQ2FwYWJpbGl0aWVzIHtcbiAgY29uc3Qgc2V0ID0gbmV3IFNldDxWaWV3ZXJGZWF0dXJlPihmZWF0dXJlcyk7XG4gIHJldHVybiB7IGhhczogKGY6IFZpZXdlckZlYXR1cmUpID0+IHNldC5oYXMoZikgfTtcbn1cbiJdfQ==
|
|
@@ -9,4 +9,4 @@ export const CELL_SEGMENTER = new InjectionToken('CELL_SEGMENTER', {
|
|
|
9
9
|
providedIn: 'root',
|
|
10
10
|
factory: () => inject(CellposeSegmenterService),
|
|
11
11
|
});
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1zZWdtZW50ZXIuY29udHJhY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbnRyYWN0cy9jZWxsLXNlZ21lbnRlci5jb250cmFjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV2RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQXNDOUY7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBaUIsZ0JBQWdCLEVBQUU7SUFDakYsVUFBVSxFQUFFLE1BQU07SUFDbEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQztDQUNoRCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IENlbGxwb3NlU2VnbWVudGVyU2VydmljZSB9IGZyb20gJy4uL3Rvb2xiYXIvc2VnbWVudGF0aW9uL2NlbGxwb3NlLXNlZ21lbnRlci5zZXJ2aWNlJztcblxuLyoqXG4gKiBSZXN1bHQgb2YgYW4gYXV0b21hdGljIGNlbGwgc2VnbWVudGVyOiBhIHBlci1waXhlbCBpbnN0YW5jZSBsYWJlbCBtYXAgZm9yIHRoZVxuICogaW5wdXQgaW1hZ2UgKDAgPSBiYWNrZ3JvdW5kLCAxLi5jb3VudCA9IGluc3RhbmNlcyksIHJvdy1tYWpvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDZWxsU2VnbWVudGF0aW9uIHtcbiAgbGFiZWxzOiBVaW50MzJBcnJheTtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGNvdW50OiBudW1iZXI7XG59XG5cbi8qKlxuICogUG9ydCBmb3IgYW4gYXV0b21hdGljIChwcm9tcHQtZnJlZSkgY2VsbCBzZWdtZW50ZXIg4oCUIGUuZy4gY2VsbHBvc2UtU0FNLiBUaGVcbiAqIGxpYnJhcnkgY2FsbHMgdGhpcyBvbiBhIGNsaWVudCBzbGlkZS1jcm9wIG9mIGEgZHJhd24gYm94LiBCeSBkZWZhdWx0IHRoZVxuICoge0BsaW5rIENFTExfU0VHTUVOVEVSfSB0b2tlbiByZXNvbHZlcyB0byB0aGUgbGlicmFyeSdzIG93biBjZWxscG9zZS1qcy1iYWNrZWRcbiAqIHtAbGluayBDZWxscG9zZVNlZ21lbnRlclNlcnZpY2V9IChzbyB0aGUgdG9vbGJhciBDZWxscG9zZSB0b29sIHdvcmtzIG91dCBvZiB0aGVcbiAqIGJveCksIGJ1dCBhIGhvc3QgY2FuIG92ZXJyaWRlIHRoZSB0b2tlbiB0byBzdXBwbHkgYSBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb25cbiAqIChlLmcuIGEgc2VydmVyLXNpZGUgc2VnbWVudGVyKSAoaml0LXVpIzkwKS5cbiAqL1xuLyoqIFByb2dyZXNzL3N0YXR1cyBjYWxsYmFja3MgZm9yIGEgc2VnbWVudGF0aW9uIHJ1biAoYWxsIG9wdGlvbmFsKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2VsbFNlZ21lbnRQcm9ncmVzcyB7XG4gIC8qKiBNb2RlbC1kb3dubG9hZCBwcm9ncmVzcywgMC4uMSAoZmlyc3QgcnVuIG9ubHkpLiAqL1xuICBvblByb2dyZXNzPzogKGZyYWN0aW9uOiBudW1iZXIpID0+IHZvaWQ7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBwaGFzZSwgZS5nLiAnUnVubmluZyBpbmZlcmVuY2UgKHRpbGUgMy84KeKApicuICovXG4gIG9uU3RhdHVzPzogKHN0YXR1czogc3RyaW5nKSA9PiB2b2lkO1xufVxuXG4vKiogQSBzZWdtZW50ZXIgdGhhdCBsYWJlbHMgZXZlcnkgY2VsbCBvZiBhbiBpbWFnZSAob25lIGV4Y2x1c2l2ZSBsYWJlbCBwZXIgcGl4ZWwpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQ2VsbFNlZ21lbnRlciB7XG4gIC8qKiBTZWdtZW50IGFsbCBjZWxscyBpbiBhbiBSR0JBIGltYWdlIGludG8gYW4gaW5zdGFuY2UgbGFiZWwgbWFwLiAqL1xuICBzZWdtZW50Q2VsbHMoXG4gICAgaW1hZ2U6IHsgZGF0YTogVWludDhDbGFtcGVkQXJyYXk7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0sXG4gICAgcHJvZ3Jlc3M/OiBDZWxsU2VnbWVudFByb2dyZXNzLFxuICApOiBQcm9taXNlPENlbGxTZWdtZW50YXRpb24+O1xufVxuXG4vKipcbiAqIERJIHRva2VuIGZvciB0aGUgYXV0b21hdGljIGNlbGwgc2VnbWVudGVyLiBEZWZhdWx0cyB0byB0aGUgaW4tbGlicmFyeVxuICoge0BsaW5rIENlbGxwb3NlU2VnbWVudGVyU2VydmljZX0gKGNlbGxwb3NlLWpzLCBsYXp5LWxvYWRlZCk7IG92ZXJyaWRlIGl0IGluIHRoZVxuICogaG9zdCB0byBzd2FwIGltcGxlbWVudGF0aW9ucy5cbiAqL1xuZXhwb3J0IGNvbnN0IENFTExfU0VHTUVOVEVSID0gbmV3IEluamVjdGlvblRva2VuPElDZWxsU2VnbWVudGVyPignQ0VMTF9TRUdNRU5URVInLCB7XG4gIHByb3ZpZGVkSW46ICdyb290JyxcbiAgZmFjdG9yeTogKCkgPT4gaW5qZWN0KENlbGxwb3NlU2VnbWVudGVyU2VydmljZSksXG59KTtcbiJdfQ==
|
|
@@ -10,5 +10,9 @@ export const LUT_COLORS = [
|
|
|
10
10
|
{ name: 'Magenta', color: '#ff00ff' },
|
|
11
11
|
{ name: 'Yellow', color: '#ffff00' },
|
|
12
12
|
];
|
|
13
|
+
/**
|
|
14
|
+
* DI token for the Channels & Histogram pane's API. The library binds it to its router
|
|
15
|
+
* (VisualizationModule / provideVisualization); hosts inject it, they do not provide it.
|
|
16
|
+
*/
|
|
13
17
|
export const CHANNEL_HISTOGRAM_API = new InjectionToken('CHANNEL_HISTOGRAM_API');
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbm5lbC1oaXN0b2dyYW0tYXBpLmNvbnRyYWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb250cmFjdHMvY2hhbm5lbC1oaXN0b2dyYW0tYXBpLmNvbnRyYWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFzQi9DO29DQUNvQztBQUNwQyxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQW1EO0lBQ3hFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0lBQ2pDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0lBQ25DLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0lBQ2xDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0lBQ2xDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0lBQ2xDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0lBQ3JDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0NBQ3JDLENBQUM7QUFzRkY7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxjQUFjLENBQXVCLHVCQUF1QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSUltYWdlTWV0YWRhdGEgfSBmcm9tICcuL2ltYWdlLmNvbnRyYWN0JztcbmltcG9ydCB7IENvbG9ybWFwTm9kZSB9IGZyb20gJy4vZGlzcGxheS10eXBlcyc7XG5cbi8qKlxuICogRGlzcGxheSBzdGF0ZSBmb3Igb25lIGltYWdlIGNoYW5uZWwgaW4gdGhlIENoYW5uZWxzICYgSGlzdG9ncmFtIHBhbmUuXG4gKiBgbWluYC9gbWF4YCBhcmUgdGhlIGRpc3BsYXkgd2luZG93IChjb250cmFzdC9icmlnaHRuZXNzKSBpbiByYXcgMC4uMjU1IHNwYWNlO1xuICogYGdhbW1hYCBzaGFwZXMgdGhlIHRyYW5zZmVyIGN1cnZlOyBgY29sb3JgIGlzIHRoZSBjaGFubmVsJ3MgZGlzcGxheSB0aW50XG4gKiAodXNlZCB3aGVuIGNvbXBvc2l0aW5nIG11bHRpcGxlIGNoYW5uZWxzKTsgYHZpc2libGVgIHRvZ2dsZXMgaXQgb24vb2ZmLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElDaGFubmVsU3RhdGUge1xuICBpbmRleDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBEaXNwbGF5IHRpbnQgYXMgYCNycmdnYmJgLiAqL1xuICBjb2xvcjogc3RyaW5nO1xuICBtaW46IG51bWJlcjtcbiAgbWF4OiBudW1iZXI7XG4gIGdhbW1hOiBudW1iZXI7XG4gIHZpc2libGU6IGJvb2xlYW47XG59XG5cbi8qKiBUaGUgc3RhbmRhcmQgTFVUIHBzZXVkby1jb2xvdXJzIChtaXJyb3JzIEZpamkncyBNZXJnZSBDaGFubmVscyBwYWxldHRlKSBmb3JcbiAqICBxdWljayBwZXItY2hhbm5lbCBhc3NpZ25tZW50LiAqL1xuZXhwb3J0IGNvbnN0IExVVF9DT0xPUlM6IFJlYWRvbmx5QXJyYXk8eyBuYW1lOiBzdHJpbmc7IGNvbG9yOiBzdHJpbmcgfT4gPSBbXG4gIHsgbmFtZTogJ1JlZCcsIGNvbG9yOiAnI2ZmMDAwMCcgfSxcbiAgeyBuYW1lOiAnR3JlZW4nLCBjb2xvcjogJyMwMGZmMDAnIH0sXG4gIHsgbmFtZTogJ0JsdWUnLCBjb2xvcjogJyMwMDAwZmYnIH0sXG4gIHsgbmFtZTogJ0dyYXknLCBjb2xvcjogJyNmZmZmZmYnIH0sXG4gIHsgbmFtZTogJ0N5YW4nLCBjb2xvcjogJyMwMGZmZmYnIH0sXG4gIHsgbmFtZTogJ01hZ2VudGEnLCBjb2xvcjogJyNmZjAwZmYnIH0sXG4gIHsgbmFtZTogJ1llbGxvdycsIGNvbG9yOiAnI2ZmZmYwMCcgfSxcbl07XG5cbi8qKiBBIGJpbm5lZCBpbnRlbnNpdHkgaGlzdG9ncmFtIGZvciBvbmUgY2hhbm5lbC5cbiAqXG4gKiBUaGUgOC1iaXQgY2xpZW50IHBhdGggKFJHQiAvIDgtYml0IGdyYXlzY2FsZSwgc2FtcGxlZCBmcm9tIGRpc3BsYXllZCB0aWxlcylcbiAqIGxlYXZlcyB0aGUgbmF0aXZlIGZpZWxkcyB1bmRlZmluZWQgYW5kIGBiaW5zYCBzcGFuIDAuLjI1NS4gVGhlIG5hdGl2ZSBwYXRoXG4gKiAoPjgtYml0IGltYWdlcywgZnJvbSB0aGUgc2VydmVyIGAvaGlzdG9ncmFtYCBlbmRwb2ludCkgZmlsbHMgYGJpdERlcHRoYCxcbiAqIGByYW5nZU1pbmAvYHJhbmdlTWF4YCAodGhlIHBpeGVsLXR5cGUgc3BhbiB0aGUgYmlucyBjb3ZlcikgYW5kXG4gKiBgb2JzZXJ2ZWRNaW5gL2BvYnNlcnZlZE1heGAgKHRoZSBhY3R1YWwgZXh0cmVtZXMgc2VlbiksIHNvIHRoZSBkaWFsb2cgY2FuXG4gKiBsYWJlbCB0aGUgd2luZG93L2F4aXMgaW4gbmF0aXZlIHVuaXRzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJSGlzdG9ncmFtIHtcbiAgLyoqIExlZnQgZWRnZSBvZiBlYWNoIGJpbiAoMC4uMjU1IGZvciB0aGUgOC1iaXQgcGF0aCwgbmF0aXZlIHVuaXRzIG90aGVyd2lzZSkuICovXG4gIGJpbnM6IG51bWJlcltdO1xuICAvKiogUGl4ZWwgY291bnQgcGVyIGJpbiwgbGVuZ3RoID0gYmluIGNvdW50LiAqL1xuICBjb3VudHM6IG51bWJlcltdO1xuICAvKiogTGFyZ2VzdCBiaW4gY291bnQsIGZvciB5LWF4aXMgc2NhbGluZy4gKi9cbiAgbWF4OiBudW1iZXI7XG4gIC8qKiBOYXRpdmUgYml0IGRlcHRoICg4LCAxNiwg4oCmKSDigJQgcHJlc2VudCBvbmx5IG9uIHRoZSBuYXRpdmUgc2VydmVyIHBhdGguICovXG4gIGJpdERlcHRoPzogbnVtYmVyO1xuICAvKiogUGl4ZWwtdHlwZSByYW5nZSB0aGUgYmlucyBzcGFuIChlLmcuIDAuLjY1NTM1KSwgbmF0aXZlIHBhdGggb25seS4gKi9cbiAgcmFuZ2VNaW4/OiBudW1iZXI7XG4gIHJhbmdlTWF4PzogbnVtYmVyO1xuICAvKiogQWN0dWFsIG1pbi9tYXggcGl4ZWwgb2JzZXJ2ZWQgKGF1dG8tY29udHJhc3Qgc2VlZCksIG5hdGl2ZSBwYXRoIG9ubHkuICovXG4gIG9ic2VydmVkTWluPzogbnVtYmVyO1xuICBvYnNlcnZlZE1heD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQdWJsaWMsIGltcGxlbWVudGF0aW9uLWFnbm9zdGljIHN1cmZhY2UgdGhlIENoYW5uZWxzICYgSGlzdG9ncmFtIHBhbmUgKGFuXG4gKiBleHRlcm5hbCBjb25zdW1lciBvZiB0aGUgdmlzdWFsaXphdGlvbiBwYWNrYWdlKSBkZXBlbmRzIG9uLiBJdCBleHBvc2VzIHRoZVxuICogcGVyLWNoYW5uZWwgZGlzcGxheSB3aW5kb3cvZ2FtbWEvdmlzaWJpbGl0eSwgYW4gaW50ZW5zaXR5IGhpc3RvZ3JhbSBjb21wdXRlZFxuICogZnJvbSB0aGUgY3VycmVudGx5LWRpc3BsYXllZCBwaXhlbHMsIGFuZCB0aGUgTFVUL2NvbG9ybWFwIGNvbnRyb2xzIHRoYXQgdXNlZFxuICogdG8gbGl2ZSBpbiB0aGUgdG9vbGJhci4gVGhlIHBhbmUgaW5qZWN0cyB0aGlzIHZpYSB7QGxpbmsgQ0hBTk5FTF9ISVNUT0dSQU1fQVBJfVxuICogKGJvdW5kIHRvIHRoZSBjb25jcmV0ZSBgUm91dGluZ1Zpc3VhbGl6ZXJTZXJ2aWNlYCB3aXRoIGB1c2VFeGlzdGluZ2ApIHNvIGl0XG4gKiBuZXZlciByZWFjaGVzIHRoZSBpbXBsZW1lbnRhdGlvbi4gRXZlcnkgc2V0dGVyIGxpdmUtdXBkYXRlcyB3aGljaGV2ZXIgYmFja2VuZFxuICogKFBsb3RseSBvciBPcGVuU2VhZHJhZ29uKSBpcyBvbiBzY3JlZW4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUNoYW5uZWxIaXN0b2dyYW1BcGkge1xuICAvLyDilIDilIAgY2hhbm5lbHMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIC8qKiBUaGUgY2hhbm5lbHMgb2YgdGhlIGN1cnJlbnQgaW1hZ2UgKDEgZm9yIGdyYXlzY2FsZSwgMyBmb3IgUkdCKS4gKi9cbiAgZ2V0Q2hhbm5lbHMkKCk6IE9ic2VydmFibGU8SUNoYW5uZWxTdGF0ZVtdPjtcbiAgLyoqIFBhdGNoIG9uZSBjaGFubmVsJ3Mgc3RhdGUgKHdpbmRvdy9nYW1tYS92aXNpYmlsaXR5L2NvbG9yKTsgbGl2ZS11cGRhdGVzLiAqL1xuICBzZXRDaGFubmVsU3RhdGUoaW5kZXg6IG51bWJlciwgcGFydGlhbDogUGFydGlhbDxJQ2hhbm5lbFN0YXRlPik6IHZvaWQ7XG4gIC8qKiBTZXQgdGhlIGNoYW5uZWwgc2VsZWN0ZWQgaW4gdGhlIHBhbmUg4oCUIHRoZSBiYW5kIGEgc2luZ2xlLXNjYWxhciAzRCBTdXJmYWNlIGZvbGxvd3MuICovXG4gIHNldFNlbGVjdGVkQ2hhbm5lbChpbmRleDogbnVtYmVyKTogdm9pZDtcbiAgLyoqIEF1dG8td2luZG93IHRoZSBnaXZlbiBjaGFubmVscyBieSBzYXR1cmF0aW5nIGBzYXR1cmF0aW9uYCAoMC4uMSkgb2YgcGl4ZWxzXG4gICAqICBhdCBlYWNoIGVuZCBvZiB0aGVpciBoaXN0b2dyYW0uICovXG4gIGF1dG9Db250cmFzdChpbmRpY2VzOiBudW1iZXJbXSwgc2F0dXJhdGlvbjogbnVtYmVyKTogdm9pZDtcbiAgLyoqIFJlc2V0IHRoZSBnaXZlbiBjaGFubmVscyB0byB0aGVpciBkZXJpdmVkIGRlZmF1bHRzOiBmdWxsIGRpc3BsYXkgcmFuZ2VcbiAgICogICgwLi4yNTUpLCBnYW1tYSAxLCBhbmQgdGhlIGNoYW5uZWwncyBkZWZhdWx0IHRpbnQgY29sb3VyLiAqL1xuICByZXNldENvbnRyYXN0KGluZGljZXM6IG51bWJlcltdKTogdm9pZDtcblxuICAvLyDilIDilIAgaGlzdG9ncmFtIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAvKiogQmlubmVkIGhpc3RvZ3JhbSBmb3IgYSBjaGFubmVsIGZyb20gdGhlIGRpc3BsYXllZCBwaXhlbHMsIG9yIG51bGwgd2hlbiBub1xuICAgKiAgaW1hZ2UvcGl4ZWxzIGFyZSBhdmFpbGFibGUuIFN5bmNocm9ub3VzIDgtYml0IHBhdGggKHVzZWQgYnkgYXV0by1jb250cmFzdCkuICovXG4gIGdldEhpc3RvZ3JhbShjaGFubmVsSW5kZXg6IG51bWJlciwgYmluczogbnVtYmVyKTogSUhpc3RvZ3JhbSB8IG51bGw7XG4gIC8qKiBIaXN0b2dyYW0gZm9yIGEgY2hhbm5lbCBhcyBhbiBhc3luYyBzdHJlYW06IGVtaXRzIHRoZSAqKm5hdGl2ZSoqIGJpdC1kZXB0aFxuICAgKiAgaGlzdG9ncmFtIChmcm9tIHRoZSBzZXJ2ZXIpIGZvciA+OC1iaXQgaW1hZ2VzLCBlbHNlIHRoZSA4LWJpdCBjbGllbnRcbiAgICogIGhpc3RvZ3JhbS4gVGhlIGRpYWxvZyB1c2VzIHRoaXMgc28gMTYtYml0IHN0YWNrcyBnZXQgYSB0cnVlIGRpc3RyaWJ1dGlvbi4gKi9cbiAgZ2V0SGlzdG9ncmFtJChjaGFubmVsSW5kZXg6IG51bWJlciwgYmluczogbnVtYmVyKTogT2JzZXJ2YWJsZTxJSGlzdG9ncmFtIHwgbnVsbD47XG5cbiAgLy8g4pSA4pSAIGRpc3BsYXkgb3B0aW9ucyAobW92ZWQgb3V0IG9mIHRoZSB0b29sYmFyKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgZ2V0Q29sb3JtYXAoKTogT2JzZXJ2YWJsZTxDb2xvcm1hcE5vZGUgfCBudWxsPjtcbiAgc2V0Q29sb3JtYXAoY29sb3JtYXA6IENvbG9ybWFwTm9kZSk6IHZvaWQ7XG4gIGdldENvbG9ybWFwT3B0aW9ucygpOiBDb2xvcm1hcE5vZGVbXTtcbiAgZ2V0UmV2ZXJzZVNjYWxlKCk6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHNldFJldmVyc2VTY2FsZShyZXZlcnNlOiBib29sZWFuKTogdm9pZDtcbiAgZ2V0R3JheXNjYWxlJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBzZXRHcmF5c2NhbGUob246IGJvb2xlYW4pOiB2b2lkO1xuICBnZXRJbnZlcnQkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHNldEludmVydChvbjogYm9vbGVhbik6IHZvaWQ7XG5cbiAgLy8g4pSA4pSAIGltYWdlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICBnZXRJbWFnZU1ldGEoKTogT2JzZXJ2YWJsZTxJSW1hZ2VNZXRhZGF0YVtdPjtcblxuICAvKiogRXhwb3J0IHRoZSBkaXNwbGF5ZWQgaW1hZ2Ug4oCUIGNvbXBvc2l0ZWQgd2l0aCB0aGUgY3VycmVudCBwZXItY2hhbm5lbFxuICAgKiAgcHNldWRvLWNvbG91cnMgLyB3aW5kb3cgLyBjb2xvcm1hcCDigJQgYXMgYSBwdWJsaWNhdGlvbi1yZWFkeSBQTkcgZG93bmxvYWQuICovXG4gIGV4cG9ydENvbXBvc2l0ZSgpOiB2b2lkO1xuXG4gIC8qKiBFeHBvcnQgdGhlIHVuZGVybHlpbmcgaW1hZ2UgZGF0YSDigJQgYWxsIChvciB0aGUgdmlzaWJsZSkgY2hhbm5lbHMgYXQgbmF0aXZlXG4gICAqICBiaXQgZGVwdGgg4oCUIGFzIGEgZGF0YS1wcmVzZXJ2aW5nIG11bHRpLWJhbmQgVElGRiBkb3dubG9hZC4gU2VydmVyLXNpZGUsIHNvXG4gICAqICBpdCBrZWVwcyB0cnVlIDE2LWJpdCB2YWx1ZXMgKHRoZSBQTkcgY29tcG9zaXRlIGlzIGFuIDgtYml0IGZpZ3VyZSkuIE9ubHlcbiAgICogIG1lYW5pbmdmdWwgZm9yID44LWJpdCBpbWFnZXM7IGEgbm8tb3Agb24gYmFja2VuZHMgdGhhdCBjYW4ndCBwcm92aWRlIGl0LiAqL1xuICBleHBvcnREYXRhKCk6IHZvaWQ7XG59XG5cbi8qKlxuICogREkgdG9rZW4gZm9yIHRoZSBDaGFubmVscyAmIEhpc3RvZ3JhbSBwYW5lJ3MgQVBJLiBUaGUgbGlicmFyeSBiaW5kcyBpdCB0byBpdHMgcm91dGVyXG4gKiAoVmlzdWFsaXphdGlvbk1vZHVsZSAvIHByb3ZpZGVWaXN1YWxpemF0aW9uKTsgaG9zdHMgaW5qZWN0IGl0LCB0aGV5IGRvIG5vdCBwcm92aWRlIGl0LlxuICovXG5leHBvcnQgY29uc3QgQ0hBTk5FTF9ISVNUT0dSQU1fQVBJID0gbmV3IEluamVjdGlvblRva2VuPElDaGFubmVsSGlzdG9ncmFtQXBpPignQ0hBTk5FTF9ISVNUT0dSQU1fQVBJJyk7XG4iXX0=
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one CSS colour parser (review NAPARI-BOUNDARY-29, CORE-25, RT-28).
|
|
3
|
+
*
|
|
4
|
+
* Seven call sites used to parse colours by hand, each accepting a different
|
|
5
|
+
* subset (`#rgb` here, `#rrggbb` only there, `rgb()` in one place) and each
|
|
6
|
+
* falling back to a different colour on bad input. They now all call
|
|
7
|
+
* {@link parseCssColor}, which returns null for anything it does not
|
|
8
|
+
* understand, and keep their own fallback at the call site
|
|
9
|
+
* (`parseCssColor(s) ?? MISSING_COLOR`).
|
|
10
|
+
*
|
|
11
|
+
* Pure: no DOM, no Angular. Channels are 0–255 integers.
|
|
12
|
+
*/
|
|
13
|
+
const HEX = /^#?([0-9a-f]{3}|[0-9a-f]{6}|[0-9a-f]{8})$/i;
|
|
14
|
+
const FUNC = /^rgba?\(\s*([^)]*)\)$/i;
|
|
15
|
+
/**
|
|
16
|
+
* Parse a CSS colour to RGB, or null when it is not one this parser accepts.
|
|
17
|
+
*
|
|
18
|
+
* Accepts `#rgb`, `#rrggbb` and `#rrggbbaa` (the `#` may be omitted, and the
|
|
19
|
+
* alpha is ignored), and `rgb(r, g, b)` / `rgba(r, g, b, a)` with comma- or
|
|
20
|
+
* space-separated channels (rounded and clamped to 0–255). Named colours
|
|
21
|
+
* (`red`) are not accepted.
|
|
22
|
+
*/
|
|
23
|
+
export function parseCssColor(s) {
|
|
24
|
+
const text = (s ?? '').trim();
|
|
25
|
+
if (!text)
|
|
26
|
+
return null;
|
|
27
|
+
const hex = HEX.exec(text);
|
|
28
|
+
if (hex) {
|
|
29
|
+
let h = hex[1];
|
|
30
|
+
if (h.length === 3)
|
|
31
|
+
h = h[0] + h[0] + h[1] + h[1] + h[2] + h[2];
|
|
32
|
+
return [parseInt(h.slice(0, 2), 16), parseInt(h.slice(2, 4), 16), parseInt(h.slice(4, 6), 16)];
|
|
33
|
+
}
|
|
34
|
+
const fn = FUNC.exec(text);
|
|
35
|
+
if (fn) {
|
|
36
|
+
const parts = fn[1]
|
|
37
|
+
.split(/[\s,/]+/)
|
|
38
|
+
.filter((p) => p.length > 0)
|
|
39
|
+
.slice(0, 3)
|
|
40
|
+
.map(Number);
|
|
41
|
+
if (parts.length < 3 || parts.some((v) => !Number.isFinite(v)))
|
|
42
|
+
return null;
|
|
43
|
+
return [clampByte(parts[0]), clampByte(parts[1]), clampByte(parts[2])];
|
|
44
|
+
}
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
/** `#rrggbb` (lower-case) for an RGB colour; channels are rounded and clamped to 0–255. */
|
|
48
|
+
export function rgbToHex(rgb) {
|
|
49
|
+
const h = (n) => clampByte(n).toString(16).padStart(2, '0');
|
|
50
|
+
return `#${h(rgb[0])}${h(rgb[1])}${h(rgb[2])}`;
|
|
51
|
+
}
|
|
52
|
+
/** {@link parseCssColor} for hex input: `#rgb` / `#rrggbb` / `#rrggbbaa` (with or without `#`), or null. */
|
|
53
|
+
export function hexToRgb(hex) {
|
|
54
|
+
const text = (hex ?? '').trim();
|
|
55
|
+
return HEX.test(text) ? parseCssColor(text) : null;
|
|
56
|
+
}
|
|
57
|
+
function clampByte(n) {
|
|
58
|
+
return Math.max(0, Math.min(255, Math.round(n)));
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbnRyYWN0cy9jb2xvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7R0FXRztBQUtILE1BQU0sR0FBRyxHQUFHLDRDQUE0QyxDQUFDO0FBQ3pELE1BQU0sSUFBSSxHQUFHLHdCQUF3QixDQUFDO0FBRXRDOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUFDLENBQTRCO0lBQ3hELE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzlCLElBQUksQ0FBQyxJQUFJO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDdkIsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakcsQ0FBQztJQUNELE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0IsSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUNQLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDaEIsS0FBSyxDQUFDLFNBQVMsQ0FBQzthQUNoQixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2FBQzNCLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ1gsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUM1RSxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsMkZBQTJGO0FBQzNGLE1BQU0sVUFBVSxRQUFRLENBQUMsR0FBa0I7SUFDekMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNwRSxPQUFPLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNqRCxDQUFDO0FBRUQsNEdBQTRHO0FBQzVHLE1BQU0sVUFBVSxRQUFRLENBQUMsR0FBOEI7SUFDckQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNyRCxDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUMsQ0FBUztJQUMxQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25ELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBvbmUgQ1NTIGNvbG91ciBwYXJzZXIgKHJldmlldyBOQVBBUkktQk9VTkRBUlktMjksIENPUkUtMjUsIFJULTI4KS5cbiAqXG4gKiBTZXZlbiBjYWxsIHNpdGVzIHVzZWQgdG8gcGFyc2UgY29sb3VycyBieSBoYW5kLCBlYWNoIGFjY2VwdGluZyBhIGRpZmZlcmVudFxuICogc3Vic2V0IChgI3JnYmAgaGVyZSwgYCNycmdnYmJgIG9ubHkgdGhlcmUsIGByZ2IoKWAgaW4gb25lIHBsYWNlKSBhbmQgZWFjaFxuICogZmFsbGluZyBiYWNrIHRvIGEgZGlmZmVyZW50IGNvbG91ciBvbiBiYWQgaW5wdXQuIFRoZXkgbm93IGFsbCBjYWxsXG4gKiB7QGxpbmsgcGFyc2VDc3NDb2xvcn0sIHdoaWNoIHJldHVybnMgbnVsbCBmb3IgYW55dGhpbmcgaXQgZG9lcyBub3RcbiAqIHVuZGVyc3RhbmQsIGFuZCBrZWVwIHRoZWlyIG93biBmYWxsYmFjayBhdCB0aGUgY2FsbCBzaXRlXG4gKiAoYHBhcnNlQ3NzQ29sb3IocykgPz8gTUlTU0lOR19DT0xPUmApLlxuICpcbiAqIFB1cmU6IG5vIERPTSwgbm8gQW5ndWxhci4gQ2hhbm5lbHMgYXJlIDDigJMyNTUgaW50ZWdlcnMuXG4gKi9cblxuLyoqIEFuIFJHQiBjb2xvdXIsIGVhY2ggY2hhbm5lbCAw4oCTMjU1LiAqL1xuZXhwb3J0IHR5cGUgUmdiID0gW251bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuXG5jb25zdCBIRVggPSAvXiM/KFswLTlhLWZdezN9fFswLTlhLWZdezZ9fFswLTlhLWZdezh9KSQvaTtcbmNvbnN0IEZVTkMgPSAvXnJnYmE/XFwoXFxzKihbXildKilcXCkkL2k7XG5cbi8qKlxuICogUGFyc2UgYSBDU1MgY29sb3VyIHRvIFJHQiwgb3IgbnVsbCB3aGVuIGl0IGlzIG5vdCBvbmUgdGhpcyBwYXJzZXIgYWNjZXB0cy5cbiAqXG4gKiBBY2NlcHRzIGAjcmdiYCwgYCNycmdnYmJgIGFuZCBgI3JyZ2diYmFhYCAodGhlIGAjYCBtYXkgYmUgb21pdHRlZCwgYW5kIHRoZVxuICogYWxwaGEgaXMgaWdub3JlZCksIGFuZCBgcmdiKHIsIGcsIGIpYCAvIGByZ2JhKHIsIGcsIGIsIGEpYCB3aXRoIGNvbW1hLSBvclxuICogc3BhY2Utc2VwYXJhdGVkIGNoYW5uZWxzIChyb3VuZGVkIGFuZCBjbGFtcGVkIHRvIDDigJMyNTUpLiBOYW1lZCBjb2xvdXJzXG4gKiAoYHJlZGApIGFyZSBub3QgYWNjZXB0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUNzc0NvbG9yKHM6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBSZ2IgfCBudWxsIHtcbiAgY29uc3QgdGV4dCA9IChzID8/ICcnKS50cmltKCk7XG4gIGlmICghdGV4dCkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGhleCA9IEhFWC5leGVjKHRleHQpO1xuICBpZiAoaGV4KSB7XG4gICAgbGV0IGggPSBoZXhbMV07XG4gICAgaWYgKGgubGVuZ3RoID09PSAzKSBoID0gaFswXSArIGhbMF0gKyBoWzFdICsgaFsxXSArIGhbMl0gKyBoWzJdO1xuICAgIHJldHVybiBbcGFyc2VJbnQoaC5zbGljZSgwLCAyKSwgMTYpLCBwYXJzZUludChoLnNsaWNlKDIsIDQpLCAxNiksIHBhcnNlSW50KGguc2xpY2UoNCwgNiksIDE2KV07XG4gIH1cbiAgY29uc3QgZm4gPSBGVU5DLmV4ZWModGV4dCk7XG4gIGlmIChmbikge1xuICAgIGNvbnN0IHBhcnRzID0gZm5bMV1cbiAgICAgIC5zcGxpdCgvW1xccywvXSsvKVxuICAgICAgLmZpbHRlcigocCkgPT4gcC5sZW5ndGggPiAwKVxuICAgICAgLnNsaWNlKDAsIDMpXG4gICAgICAubWFwKE51bWJlcik7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCA8IDMgfHwgcGFydHMuc29tZSgodikgPT4gIU51bWJlci5pc0Zpbml0ZSh2KSkpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBbY2xhbXBCeXRlKHBhcnRzWzBdKSwgY2xhbXBCeXRlKHBhcnRzWzFdKSwgY2xhbXBCeXRlKHBhcnRzWzJdKV07XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKiBgI3JyZ2diYmAgKGxvd2VyLWNhc2UpIGZvciBhbiBSR0IgY29sb3VyOyBjaGFubmVscyBhcmUgcm91bmRlZCBhbmQgY2xhbXBlZCB0byAw4oCTMjU1LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJnYlRvSGV4KHJnYjogUmVhZG9ubHk8UmdiPik6IHN0cmluZyB7XG4gIGNvbnN0IGggPSAobjogbnVtYmVyKSA9PiBjbGFtcEJ5dGUobikudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJyk7XG4gIHJldHVybiBgIyR7aChyZ2JbMF0pfSR7aChyZ2JbMV0pfSR7aChyZ2JbMl0pfWA7XG59XG5cbi8qKiB7QGxpbmsgcGFyc2VDc3NDb2xvcn0gZm9yIGhleCBpbnB1dDogYCNyZ2JgIC8gYCNycmdnYmJgIC8gYCNycmdnYmJhYWAgKHdpdGggb3Igd2l0aG91dCBgI2ApLCBvciBudWxsLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhleFRvUmdiKGhleDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IFJnYiB8IG51bGwge1xuICBjb25zdCB0ZXh0ID0gKGhleCA/PyAnJykudHJpbSgpO1xuICByZXR1cm4gSEVYLnRlc3QodGV4dCkgPyBwYXJzZUNzc0NvbG9yKHRleHQpIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gY2xhbXBCeXRlKG46IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQobikpKTtcbn1cbiJdfQ==
|
|
@@ -7,59 +7,228 @@
|
|
|
7
7
|
* to Plotly's `colorscale` — so the two surfaces stay in lock-step.
|
|
8
8
|
*
|
|
9
9
|
* A colormap value is either:
|
|
10
|
-
* - an array of `[stop, color]` pairs (the matplotlib
|
|
11
|
-
* - a Plotly built-in scale *name* string (e.g. 'Viridis', 'Reds')
|
|
10
|
+
* - an array of `[stop, color]` pairs (the matplotlib tables, see {@link lutScale}), or
|
|
11
|
+
* - a Plotly built-in scale *name* string (e.g. 'Viridis', 'Reds'), or
|
|
12
|
+
* - a 256-entry RGB table itself (a `napari-js/colormaps` `*_LUT`), used as is.
|
|
12
13
|
* `color` may be `'rgb(r, g, b)'` or `'#rrggbb'`/`'#rgb'`.
|
|
13
14
|
*/
|
|
15
|
+
import { Colormap, buildLut } from 'napari-js';
|
|
16
|
+
import { parseCssColor } from './color';
|
|
14
17
|
/**
|
|
15
18
|
* Plotly's built-in named colorscales (copied verbatim from plotly.js
|
|
16
19
|
* `components/colorscale/scales.js`), for the `COLORMAP_OPTIONS` entries whose
|
|
17
20
|
* `value` is a name string rather than an inline LUT array.
|
|
18
21
|
*/
|
|
19
22
|
const BUILTIN_SCALES = {
|
|
20
|
-
Greys: [
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
23
|
+
Greys: [
|
|
24
|
+
[0, 'rgb(0,0,0)'],
|
|
25
|
+
[1, 'rgb(255,255,255)'],
|
|
26
|
+
],
|
|
27
|
+
YlGnBu: [
|
|
28
|
+
[0, 'rgb(8,29,88)'],
|
|
29
|
+
[0.125, 'rgb(37,52,148)'],
|
|
30
|
+
[0.25, 'rgb(34,94,168)'],
|
|
31
|
+
[0.375, 'rgb(29,145,192)'],
|
|
32
|
+
[0.5, 'rgb(65,182,196)'],
|
|
33
|
+
[0.625, 'rgb(127,205,187)'],
|
|
34
|
+
[0.75, 'rgb(199,233,180)'],
|
|
35
|
+
[0.875, 'rgb(237,248,217)'],
|
|
36
|
+
[1, 'rgb(255,255,217)'],
|
|
37
|
+
],
|
|
38
|
+
Greens: [
|
|
39
|
+
[0, 'rgb(0,68,27)'],
|
|
40
|
+
[0.125, 'rgb(0,109,44)'],
|
|
41
|
+
[0.25, 'rgb(35,139,69)'],
|
|
42
|
+
[0.375, 'rgb(65,171,93)'],
|
|
43
|
+
[0.5, 'rgb(116,196,118)'],
|
|
44
|
+
[0.625, 'rgb(161,217,155)'],
|
|
45
|
+
[0.75, 'rgb(199,233,192)'],
|
|
46
|
+
[0.875, 'rgb(229,245,224)'],
|
|
47
|
+
[1, 'rgb(247,252,245)'],
|
|
48
|
+
],
|
|
49
|
+
YlOrRd: [
|
|
50
|
+
[0, 'rgb(128,0,38)'],
|
|
51
|
+
[0.125, 'rgb(189,0,38)'],
|
|
52
|
+
[0.25, 'rgb(227,26,28)'],
|
|
53
|
+
[0.375, 'rgb(252,78,42)'],
|
|
54
|
+
[0.5, 'rgb(253,141,60)'],
|
|
55
|
+
[0.625, 'rgb(254,178,76)'],
|
|
56
|
+
[0.75, 'rgb(254,217,118)'],
|
|
57
|
+
[0.875, 'rgb(255,237,160)'],
|
|
58
|
+
[1, 'rgb(255,255,204)'],
|
|
59
|
+
],
|
|
60
|
+
Bluered: [
|
|
61
|
+
[0, 'rgb(0,0,255)'],
|
|
62
|
+
[1, 'rgb(255,0,0)'],
|
|
63
|
+
],
|
|
64
|
+
RdBu: [
|
|
65
|
+
[0, 'rgb(5,10,172)'],
|
|
66
|
+
[0.35, 'rgb(106,137,247)'],
|
|
67
|
+
[0.5, 'rgb(190,190,190)'],
|
|
68
|
+
[0.6, 'rgb(220,170,132)'],
|
|
69
|
+
[0.7, 'rgb(230,145,90)'],
|
|
70
|
+
[1, 'rgb(178,10,28)'],
|
|
71
|
+
],
|
|
72
|
+
Reds: [
|
|
73
|
+
[0, 'rgb(220,220,220)'],
|
|
74
|
+
[0.2, 'rgb(245,195,157)'],
|
|
75
|
+
[0.4, 'rgb(245,160,105)'],
|
|
76
|
+
[1, 'rgb(178,10,28)'],
|
|
77
|
+
],
|
|
78
|
+
Blues: [
|
|
79
|
+
[0, 'rgb(5,10,172)'],
|
|
80
|
+
[0.35, 'rgb(40,60,190)'],
|
|
81
|
+
[0.5, 'rgb(70,100,245)'],
|
|
82
|
+
[0.6, 'rgb(90,120,245)'],
|
|
83
|
+
[0.7, 'rgb(106,137,247)'],
|
|
84
|
+
[1, 'rgb(220,220,220)'],
|
|
85
|
+
],
|
|
86
|
+
Picnic: [
|
|
87
|
+
[0, 'rgb(0,0,255)'],
|
|
88
|
+
[0.1, 'rgb(51,153,255)'],
|
|
89
|
+
[0.2, 'rgb(102,204,255)'],
|
|
90
|
+
[0.3, 'rgb(153,204,255)'],
|
|
91
|
+
[0.4, 'rgb(204,204,255)'],
|
|
92
|
+
[0.5, 'rgb(255,255,255)'],
|
|
93
|
+
[0.6, 'rgb(255,204,255)'],
|
|
94
|
+
[0.7, 'rgb(255,153,255)'],
|
|
95
|
+
[0.8, 'rgb(255,102,204)'],
|
|
96
|
+
[0.9, 'rgb(255,102,102)'],
|
|
97
|
+
[1, 'rgb(255,0,0)'],
|
|
98
|
+
],
|
|
99
|
+
Rainbow: [
|
|
100
|
+
[0, 'rgb(150,0,90)'],
|
|
101
|
+
[0.125, 'rgb(0,0,200)'],
|
|
102
|
+
[0.25, 'rgb(0,25,255)'],
|
|
103
|
+
[0.375, 'rgb(0,152,255)'],
|
|
104
|
+
[0.5, 'rgb(44,255,150)'],
|
|
105
|
+
[0.625, 'rgb(151,255,0)'],
|
|
106
|
+
[0.75, 'rgb(255,234,0)'],
|
|
107
|
+
[0.875, 'rgb(255,111,0)'],
|
|
108
|
+
[1, 'rgb(255,0,0)'],
|
|
109
|
+
],
|
|
110
|
+
Portland: [
|
|
111
|
+
[0, 'rgb(12,51,131)'],
|
|
112
|
+
[0.25, 'rgb(10,136,186)'],
|
|
113
|
+
[0.5, 'rgb(242,211,56)'],
|
|
114
|
+
[0.75, 'rgb(242,143,56)'],
|
|
115
|
+
[1, 'rgb(217,30,30)'],
|
|
116
|
+
],
|
|
117
|
+
Jet: [
|
|
118
|
+
[0, 'rgb(0,0,131)'],
|
|
119
|
+
[0.125, 'rgb(0,60,170)'],
|
|
120
|
+
[0.375, 'rgb(5,255,255)'],
|
|
121
|
+
[0.625, 'rgb(255,255,0)'],
|
|
122
|
+
[0.875, 'rgb(250,0,0)'],
|
|
123
|
+
[1, 'rgb(128,0,0)'],
|
|
124
|
+
],
|
|
125
|
+
Hot: [
|
|
126
|
+
[0, 'rgb(0,0,0)'],
|
|
127
|
+
[0.3, 'rgb(230,0,0)'],
|
|
128
|
+
[0.6, 'rgb(255,210,0)'],
|
|
129
|
+
[1, 'rgb(255,255,255)'],
|
|
130
|
+
],
|
|
131
|
+
Blackbody: [
|
|
132
|
+
[0, 'rgb(0,0,0)'],
|
|
133
|
+
[0.2, 'rgb(230,0,0)'],
|
|
134
|
+
[0.4, 'rgb(230,210,0)'],
|
|
135
|
+
[0.7, 'rgb(255,255,255)'],
|
|
136
|
+
[1, 'rgb(160,200,255)'],
|
|
137
|
+
],
|
|
138
|
+
Earth: [
|
|
139
|
+
[0, 'rgb(0,0,130)'],
|
|
140
|
+
[0.1, 'rgb(0,180,180)'],
|
|
141
|
+
[0.2, 'rgb(40,210,40)'],
|
|
142
|
+
[0.4, 'rgb(230,230,50)'],
|
|
143
|
+
[0.6, 'rgb(120,70,20)'],
|
|
144
|
+
[1, 'rgb(255,255,255)'],
|
|
145
|
+
],
|
|
146
|
+
Electric: [
|
|
147
|
+
[0, 'rgb(0,0,0)'],
|
|
148
|
+
[0.15, 'rgb(30,0,100)'],
|
|
149
|
+
[0.4, 'rgb(120,0,100)'],
|
|
150
|
+
[0.6, 'rgb(160,90,0)'],
|
|
151
|
+
[0.8, 'rgb(230,200,0)'],
|
|
152
|
+
[1, 'rgb(255,250,220)'],
|
|
153
|
+
],
|
|
154
|
+
Viridis: [
|
|
155
|
+
[0, '#440154'],
|
|
156
|
+
[0.06274509803921569, '#48186a'],
|
|
157
|
+
[0.12549019607843137, '#472d7b'],
|
|
158
|
+
[0.18823529411764706, '#424086'],
|
|
159
|
+
[0.25098039215686274, '#3b528b'],
|
|
160
|
+
[0.3137254901960784, '#33638d'],
|
|
161
|
+
[0.3764705882352941, '#2c728e'],
|
|
162
|
+
[0.4392156862745098, '#26828e'],
|
|
163
|
+
[0.5019607843137255, '#21918c'],
|
|
164
|
+
[0.5647058823529412, '#1fa088'],
|
|
165
|
+
[0.6274509803921569, '#28ae80'],
|
|
166
|
+
[0.6901960784313725, '#3fbc73'],
|
|
167
|
+
[0.7529411764705882, '#5ec962'],
|
|
168
|
+
[0.8156862745098039, '#84d44b'],
|
|
169
|
+
[0.8784313725490196, '#addc30'],
|
|
170
|
+
[0.9411764705882353, '#d8e219'],
|
|
171
|
+
[1, '#fde725'],
|
|
172
|
+
],
|
|
173
|
+
Cividis: [
|
|
174
|
+
[0, 'rgb(0,32,76)'],
|
|
175
|
+
[0.058824, 'rgb(0,42,102)'],
|
|
176
|
+
[0.117647, 'rgb(0,52,110)'],
|
|
177
|
+
[0.176471, 'rgb(39,63,108)'],
|
|
178
|
+
[0.235294, 'rgb(60,74,107)'],
|
|
179
|
+
[0.294118, 'rgb(76,85,107)'],
|
|
180
|
+
[0.352941, 'rgb(91,95,109)'],
|
|
181
|
+
[0.411765, 'rgb(104,106,112)'],
|
|
182
|
+
[0.470588, 'rgb(117,117,117)'],
|
|
183
|
+
[0.529412, 'rgb(131,129,120)'],
|
|
184
|
+
[0.588235, 'rgb(146,140,120)'],
|
|
185
|
+
[0.647059, 'rgb(161,152,118)'],
|
|
186
|
+
[0.705882, 'rgb(176,165,114)'],
|
|
187
|
+
[0.764706, 'rgb(192,177,109)'],
|
|
188
|
+
[0.823529, 'rgb(209,191,102)'],
|
|
189
|
+
[0.882353, 'rgb(225,204,92)'],
|
|
190
|
+
[0.941176, 'rgb(243,219,79)'],
|
|
191
|
+
[1, 'rgb(255,233,69)'],
|
|
192
|
+
],
|
|
38
193
|
};
|
|
39
|
-
/**
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
if (rgb) {
|
|
51
|
-
const p = rgb[1].split(',').map((v) => parseFloat(v.trim()));
|
|
52
|
-
return [Math.round(p[0]) || 0, Math.round(p[1]) || 0, Math.round(p[2]) || 0];
|
|
194
|
+
/**
|
|
195
|
+
* A 256-entry RGB table (a `napari-js/colormaps` `*_LUT`, `Uint8Array(768)`) as an inline
|
|
196
|
+
* Plotly colorscale: one `[i / 255, 'rgb(r, g, b)']` stop per entry, the shape the colormap
|
|
197
|
+
* tree hands to Plotly's `colorscale` and to {@link buildColormapLut}. Stops are rounded to
|
|
198
|
+
* six decimals, as the colormap asset this replaces carried them.
|
|
199
|
+
*/
|
|
200
|
+
export function lutScale(lut) {
|
|
201
|
+
const n = Math.floor(lut.length / 3);
|
|
202
|
+
const scale = new Array(n);
|
|
203
|
+
for (let i = 0; i < n; i++) {
|
|
204
|
+
scale[i] = [Number((i / (n - 1)).toFixed(6)), `rgb(${lut[i * 3]}, ${lut[i * 3 + 1]}, ${lut[i * 3 + 2]})`];
|
|
53
205
|
}
|
|
54
|
-
return
|
|
206
|
+
return scale;
|
|
207
|
+
}
|
|
208
|
+
/** Parse a Plotly colorscale color (`rgb(r,g,b)` or `#rrggbb`/`#rgb`) to RGB; black when unparseable. */
|
|
209
|
+
function parseColor(c) {
|
|
210
|
+
return parseCssColor(c) ?? [0, 0, 0];
|
|
55
211
|
}
|
|
56
212
|
/**
|
|
57
213
|
* Build a 256-entry RGB lookup table from a `COLORMAP_OPTIONS` value, indexed by
|
|
58
214
|
* grayscale value 0–255. Returns null if the value can't be resolved to a scale.
|
|
59
|
-
*
|
|
215
|
+
*
|
|
216
|
+
* The Plotly side (the value's forms, the colour strings, the built-in names) is
|
|
217
|
+
* parsed here; the interpolation is napari-js's own `Colormap` sampled by `buildLut`,
|
|
218
|
+
* so both backends ramp a scale the same way.
|
|
219
|
+
* @param value array of `[stop, color]` pairs, a Plotly built-in name string, or a
|
|
220
|
+
* 256-entry RGB `Uint8Array(768)`
|
|
60
221
|
* @param reverse mirror the scale (matches Plotly's `reversescale`)
|
|
61
222
|
*/
|
|
62
223
|
export function buildColormapLut(value, reverse = false) {
|
|
224
|
+
if (value instanceof Uint8Array && value.length === 768) {
|
|
225
|
+
const lut = new Array(256);
|
|
226
|
+
for (let i = 0; i < 256; i++)
|
|
227
|
+
lut[i] = [value[i * 3], value[i * 3 + 1], value[i * 3 + 2]];
|
|
228
|
+
if (reverse)
|
|
229
|
+
lut.reverse();
|
|
230
|
+
return lut;
|
|
231
|
+
}
|
|
63
232
|
let scale = null;
|
|
64
233
|
if (Array.isArray(value))
|
|
65
234
|
scale = value;
|
|
@@ -67,29 +236,16 @@ export function buildColormapLut(value, reverse = false) {
|
|
|
67
236
|
scale = BUILTIN_SCALES[value] ?? null;
|
|
68
237
|
if (!scale || scale.length < 2)
|
|
69
238
|
return null;
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
239
|
+
const colormap = new Colormap('plotly-scale', scale.map((s) => {
|
|
240
|
+
const [r, g, b] = parseColor(String(s[1]));
|
|
241
|
+
return { t: Number(s[0]), color: [r / 255, g / 255, b / 255] };
|
|
242
|
+
}));
|
|
243
|
+
const rgba = buildLut(colormap, 256);
|
|
74
244
|
const lut = new Array(256);
|
|
75
|
-
for (let i = 0; i < 256; i++)
|
|
76
|
-
|
|
77
|
-
// Find the bracketing control points for t.
|
|
78
|
-
let k = 0;
|
|
79
|
-
while (k < stops.length - 2 && stops[k + 1][0] < t)
|
|
80
|
-
k++;
|
|
81
|
-
const [t0, c0] = stops[k];
|
|
82
|
-
const [t1, c1] = stops[k + 1];
|
|
83
|
-
const span = t1 - t0 || 1;
|
|
84
|
-
const f = Math.max(0, Math.min(1, (t - t0) / span));
|
|
85
|
-
lut[i] = [
|
|
86
|
-
Math.round(c0[0] + (c1[0] - c0[0]) * f),
|
|
87
|
-
Math.round(c0[1] + (c1[1] - c0[1]) * f),
|
|
88
|
-
Math.round(c0[2] + (c1[2] - c0[2]) * f),
|
|
89
|
-
];
|
|
90
|
-
}
|
|
245
|
+
for (let i = 0; i < 256; i++)
|
|
246
|
+
lut[i] = [rgba[i * 4], rgba[i * 4 + 1], rgba[i * 4 + 2]];
|
|
91
247
|
if (reverse)
|
|
92
248
|
lut.reverse();
|
|
93
249
|
return lut;
|
|
94
250
|
}
|
|
95
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3JtYXAtbHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb250cmFjdHMvY29sb3JtYXAtbHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7R0FZRztBQUtIOzs7O0dBSUc7QUFDSCxNQUFNLGNBQWMsR0FBMkI7SUFDN0MsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztJQUNuRCxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsaUJBQWlCLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFDdlAsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztJQUN0UCxNQUFNLEVB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RUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3BELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRztZQUNQLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3hDLENBQUM7SUFDSixDQUFDO0lBQ0QsSUFBSSxPQUFPO1FBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNCLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29sb3JtYXAg4oaSIFJHQiBsb29rdXAtdGFibGUgYnVpbGRlci5cbiAqXG4gKiBMZXRzIGEgbm9uLVBsb3RseSBiYWNrZW5kIChPcGVuU2VhZHJhZ29uKSByZWNvbG9yIGdyYXlzY2FsZSBwaXhlbHMgd2l0aCB0aGVcbiAqIGV4YWN0IHNhbWUgY29sb3JtYXBzIHRoZSBQbG90bHkgaGVhdG1hcCB1c2VzLiBUaGUgaW5wdXQgaXMgYSBjb2xvcm1hcCB2YWx1ZVxuICogc3RyYWlnaHQgZnJvbSBgQ09MT1JNQVBfT1BUSU9OU2AgKHNlZSBwbG90LnV0aWxpdGllcykg4oCUIHRoZSBzYW1lIHZhbHVlIGhhbmRlZFxuICogdG8gUGxvdGx5J3MgYGNvbG9yc2NhbGVgIOKAlCBzbyB0aGUgdHdvIHN1cmZhY2VzIHN0YXkgaW4gbG9jay1zdGVwLlxuICpcbiAqIEEgY29sb3JtYXAgdmFsdWUgaXMgZWl0aGVyOlxuICogICAtIGFuIGFycmF5IG9mIGBbc3RvcCwgY29sb3JdYCBwYWlycyAodGhlIG1hdHBsb3RsaWIgYCpfTFVUYCBjb25zdGFudHMpLCBvclxuICogICAtIGEgUGxvdGx5IGJ1aWx0LWluIHNjYWxlICpuYW1lKiBzdHJpbmcgKGUuZy4gJ1ZpcmlkaXMnLCAnUmVkcycpLlxuICogYGNvbG9yYCBtYXkgYmUgYCdyZ2IociwgZywgYiknYCBvciBgJyNycmdnYmInYC9gJyNyZ2InYC5cbiAqL1xuXG5leHBvcnQgdHlwZSBSZ2IgPSBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG50eXBlIFN0b3AgPSBbbnVtYmVyLCBzdHJpbmddO1xuXG4vKipcbiAqIFBsb3RseSdzIGJ1aWx0LWluIG5hbWVkIGNvbG9yc2NhbGVzIChjb3BpZWQgdmVyYmF0aW0gZnJvbSBwbG90bHkuanNcbiAqIGBjb21wb25lbnRzL2NvbG9yc2NhbGUvc2NhbGVzLmpzYCksIGZvciB0aGUgYENPTE9STUFQX09QVElPTlNgIGVudHJpZXMgd2hvc2VcbiAqIGB2YWx1ZWAgaXMgYSBuYW1lIHN0cmluZyByYXRoZXIgdGhhbiBhbiBpbmxpbmUgTFVUIGFycmF5LlxuICovXG5jb25zdCBCVUlMVElOX1NDQUxFUzogUmVjb3JkPHN0cmluZywgU3RvcFtdPiA9IHtcbiAgR3JleXM6IFtbMCwgJ3JnYigwLDAsMCknXSwgWzEsICdyZ2IoMjU1LDI1NSwyNTUpJ11dLFxuICBZbEduQnU6IFtbMCwgJ3JnYig4LDI5LDg4KSddLCBbMC4xMjUsICdyZ2IoMzcsNTIsMTQ4KSddLCBbMC4yNSwgJ3JnYigzNCw5NCwxNjgpJ10sIFswLjM3NSwgJ3JnYigyOSwxNDUsMTkyKSddLCBbMC41LCAncmdiKDY1LDE4MiwxOTYpJ10sIFswLjYyNSwgJ3JnYigxMjcsMjA1LDE4NyknXSwgWzAuNzUsICdyZ2IoMTk5LDIzMywxODApJ10sIFswLjg3NSwgJ3JnYigyMzcsMjQ4LDIxNyknXSwgWzEsICdyZ2IoMjU1LDI1NSwyMTcpJ11dLFxuICBHcmVlbnM6IFtbMCwgJ3JnYigwLDY4LDI3KSddLCBbMC4xMjUsICdyZ2IoMCwxMDksNDQpJ10sIFswLjI1LCAncmdiKDM1LDEzOSw2OSknXSwgWzAuMzc1LCAncmdiKDY1LDE3MSw5MyknXSwgWzAuNSwgJ3JnYigxMTYsMTk2LDExOCknXSwgWzAuNjI1LCAncmdiKDE2MSwyMTcsMTU1KSddLCBbMC43NSwgJ3JnYigxOTksMjMzLDE5MiknXSwgWzAuODc1LCAncmdiKDIyOSwyNDUsMjI0KSddLCBbMSwgJ3JnYigyNDcsMjUyLDI0NSknXV0sXG4gIFlsT3JSZDogW1swLCAncmdiKDEyOCwwLDM4KSddLCBbMC4xMjUsICdyZ2IoMTg5LDAsMzgpJ10sIFswLjI1LCAncmdiKDIyNywyNiwyOCknXSwgWzAuMzc1LCAncmdiKDI1Miw3OCw0MiknXSwgWzAuNSwgJ3JnYigyNTMsMTQxLDYwKSddLCBbMC42MjUsICdyZ2IoMjU0LDE3OCw3NiknXSwgWzAuNzUsICdyZ2IoMjU0LDIxNywxMTgpJ10sIFswLjg3NSwgJ3JnYigyNTUsMjM3LDE2MCknXSwgWzEsICdyZ2IoMjU1LDI1NSwyMDQpJ11dLFxuICBCbHVlcmVkOiBbWzAsICdyZ2IoMCwwLDI1NSknXSwgWzEsICdyZ2IoMjU1LDAsMCknXV0sXG4gIFJkQnU6IFtbMCwgJ3JnYig1LDEwLDE3MiknXSwgWzAuMzUsICdyZ2IoMTA2LDEzNywyNDcpJ10sIFswLjUsICdyZ2IoMTkwLDE5MCwxOTApJ10sIFswLjYsICdyZ2IoMjIwLDE3MCwxMzIpJ10sIFswLjcsICdyZ2IoMjMwLDE0NSw5MCknXSwgWzEsICdyZ2IoMTc4LDEwLDI4KSddXSxcbiAgUmVkczogW1swLCAncmdiKDIyMCwyMjAsMjIwKSddLCBbMC4yLCAncmdiKDI0NSwxOTUsMTU3KSddLCBbMC40LCAncmdiKDI0NSwxNjAsMTA1KSddLCBbMSwgJ3JnYigxNzgsMTAsMjgpJ11dLFxuICBCbHVlczogW1swLCAncmdiKDUsMTAsMTcyKSddLCBbMC4zNSwgJ3JnYig0MCw2MCwxOTApJ10sIFswLjUsICdyZ2IoNzAsMTAwLDI0NSknXSwgWzAuNiwgJ3JnYig5MCwxMjAsMjQ1KSddLCBbMC43LCAncmdiKDEwNiwxMzcsMjQ3KSddLCBbMSwgJ3JnYigyMjAsMjIwLDIyMCknXV0sXG4gIFBpY25pYzogW1swLCAncmdiKDAsMCwyNTUpJ10sIFswLjEsICdyZ2IoNTEsMTUzLDI1NSknXSwgWzAuMiwgJ3JnYigxMDIsMjA0LDI1NSknXSwgWzAuMywgJ3JnYigxNTMsMjA0LDI1NSknXSwgWzAuNCwgJ3JnYigyMDQsMjA0LDI1NSknXSwgWzAuNSwgJ3JnYigyNTUsMjU1LDI1NSknXSwgWzAuNiwgJ3JnYigyNTUsMjA0LDI1NSknXSwgWzAuNywgJ3JnYigyNTUsMTUzLDI1NSknXSwgWzAuOCwgJ3JnYigyNTUsMTAyLDIwNCknXSwgWzAuOSwgJ3JnYigyNTUsMTAyLDEwMiknXSwgWzEsICdyZ2IoMjU1LDAsMCknXV0sXG4gIFJhaW5ib3c6IFtbMCwgJ3JnYigxNTAsMCw5MCknXSwgWzAuMTI1LCAncmdiKDAsMCwyMDApJ10sIFswLjI1LCAncmdiKDAsMjUsMjU1KSddLCBbMC4zNzUsICdyZ2IoMCwxNTIsMjU1KSddLCBbMC41LCAncmdiKDQ0LDI1NSwxNTApJ10sIFswLjYyNSwgJ3JnYigxNTEsMjU1LDApJ10sIFswLjc1LCAncmdiKDI1NSwyMzQsMCknXSwgWzAuODc1LCAncmdiKDI1NSwxMTEsMCknXSwgWzEsICdyZ2IoMjU1LDAsMCknXV0sXG4gIFBvcnRsYW5kOiBbWzAsICdyZ2IoMTIsNTEsMTMxKSddLCBbMC4yNSwgJ3JnYigxMCwxMzYsMTg2KSddLCBbMC41LCAncmdiKDI0MiwyMTEsNTYpJ10sIFswLjc1LCAncmdiKDI0MiwxNDMsNTYpJ10sIFsxLCAncmdiKDIxNywzMCwzMCknXV0sXG4gIEpldDogW1swLCAncmdiKDAsMCwxMzEpJ10sIFswLjEyNSwgJ3JnYigwLDYwLDE3MCknXSwgWzAuMzc1LCAncmdiKDUsMjU1LDI1NSknXSwgWzAuNjI1LCAncmdiKDI1NSwyNTUsMCknXSwgWzAuODc1LCAncmdiKDI1MCwwLDApJ10sIFsxLCAncmdiKDEyOCwwLDApJ11dLFxuICBIb3Q6IFtbMCwgJ3JnYigwLDAsMCknXSwgWzAuMywgJ3JnYigyMzAsMCwwKSddLCBbMC42LCAncmdiKDI1NSwyMTAsMCknXSwgWzEsICdyZ2IoMjU1LDI1NSwyNTUpJ11dLFxuICBCbGFja2JvZHk6IFtbMCwgJ3JnYigwLDAsMCknXSwgWzAuMiwgJ3JnYigyMzAsMCwwKSddLCBbMC40LCAncmdiKDIzMCwyMTAsMCknXSwgWzAuNywgJ3JnYigyNTUsMjU1LDI1NSknXSwgWzEsICdyZ2IoMTYwLDIwMCwyNTUpJ11dLFxuICBFYXJ0aDogW1swLCAncmdiKDAsMCwxMzApJ10sIFswLjEsICdyZ2IoMCwxODAsMTgwKSddLCBbMC4yLCAncmdiKDQwLDIxMCw0MCknXSwgWzAuNCwgJ3JnYigyMzAsMjMwLDUwKSddLCBbMC42LCAncmdiKDEyMCw3MCwyMCknXSwgWzEsICdyZ2IoMjU1LDI1NSwyNTUpJ11dLFxuICBFbGVjdHJpYzogW1swLCAncmdiKDAsMCwwKSddLCBbMC4xNSwgJ3JnYigzMCwwLDEwMCknXSwgWzAuNCwgJ3JnYigxMjAsMCwxMDApJ10sIFswLjYsICdyZ2IoMTYwLDkwLDApJ10sIFswLjgsICdyZ2IoMjMwLDIwMCwwKSddLCBbMSwgJ3JnYigyNTUsMjUwLDIyMCknXV0sXG4gIFZpcmlkaXM6IFtbMCwgJyM0NDAxNTQnXSwgWzAuMDYyNzQ1MDk4MDM5MjE1NjksICcjNDgxODZhJ10sIFswLjEyNTQ5MDE5NjA3ODQzMTM3LCAnIzQ3MmQ3YiddLCBbMC4xODgyMzUyOTQxMTc2NDcwNiwgJyM0MjQwODYnXSwgWzAuMjUwOTgwMzkyMTU2ODYyNzQsICcjM2I1MjhiJ10sIFswLjMxMzcyNTQ5MDE5NjA3ODQsICcjMzM2MzhkJ10sIFswLjM3NjQ3MDU4ODIzNTI5NDEsICcjMmM3MjhlJ10sIFswLjQzOTIxNTY4NjI3NDUwOTgsICcjMjY4MjhlJ10sIFswLjUwMTk2MDc4NDMxMzcyNTUsICcjMjE5MThjJ10sIFswLjU2NDcwNTg4MjM1Mjk0MTIsICcjMWZhMDg4J10sIFswLjYyNzQ1MDk4MDM5MjE1NjksICcjMjhhZTgwJ10sIFswLjY5MDE5NjA3ODQzMTM3MjUsICcjM2ZiYzczJ10sIFswLjc1Mjk0MTE3NjQ3MDU4ODIsICcjNWVjOTYyJ10sIFswLjgxNTY4NjI3NDUwOTgwMzksICcjODRkNDRiJ10sIFswLjg3ODQzMTM3MjU0OTAxOTYsICcjYWRkYzMwJ10sIFswLjk0MTE3NjQ3MDU4ODIzNTMsICcjZDhlMjE5J10sIFsxLCAnI2ZkZTcyNSddXSxcbiAgQ2l2aWRpczogW1swLCAncmdiKDAsMzIsNzYpJ10sIFswLjA1ODgyNCwgJ3JnYigwLDQyLDEwMiknXSwgWzAuMTE3NjQ3LCAncmdiKDAsNTIsMTEwKSddLCBbMC4xNzY0NzEsICdyZ2IoMzksNjMsMTA4KSddLCBbMC4yMzUyOTQsICdyZ2IoNjAsNzQsMTA3KSddLCBbMC4yOTQxMTgsICdyZ2IoNzYsODUsMTA3KSddLCBbMC4zNTI5NDEsICdyZ2IoOTEsOTUsMTA5KSddLCBbMC40MTE3NjUsICdyZ2IoMTA0LDEwNiwxMTIpJ10sIFswLjQ3MDU4OCwgJ3JnYigxMTcsMTE3LDExNyknXSwgWzAuNTI5NDEyLCAncmdiKDEzMSwxMjksMTIwKSddLCBbMC41ODgyMzUsICdyZ2IoMTQ2LDE0MCwxMjApJ10sIFswLjY0NzA1OSwgJ3JnYigxNjEsMTUyLDExOCknXSwgWzAuNzA1ODgyLCAncmdiKDE3NiwxNjUsMTE0KSddLCBbMC43NjQ3MDYsICdyZ2IoMTkyLDE3NywxMDkpJ10sIFswLjgyMzUyOSwgJ3JnYigyMDksMTkxLDEwMiknXSwgWzAuODgyMzUzLCAncmdiKDIyNSwyMDQsOTIpJ10sIFswLjk0MTE3NiwgJ3JnYigyNDMsMjE5LDc5KSddLCBbMSwgJ3JnYigyNTUsMjMzLDY5KSddXSxcbn07XG5cbi8qKiBQYXJzZSBhIFBsb3RseSBjb2xvcnNjYWxlIGNvbG9yIChgcmdiKHIsZyxiKWAgb3IgYCNycmdnYmJgL2AjcmdiYCkgdG8gUkdCLiAqL1xuZnVuY3Rpb24gcGFyc2VDb2xvcihjOiBzdHJpbmcpOiBSZ2Ige1xuICBjb25zdCBzID0gKGMgfHwgJycpLnRyaW0oKTtcbiAgY29uc3QgaGV4ID0gcy5tYXRjaCgvXiMoWzAtOWEtZl17M318WzAtOWEtZl17Nn0pJC9pKTtcbiAgaWYgKGhleCkge1xuICAgIGxldCBoID0gaGV4WzFdO1xuICAgIGlmIChoLmxlbmd0aCA9PT0gMykgaCA9IGhbMF0gKyBoWzBdICsgaFsxXSArIGhbMV0gKyBoWzJdICsgaFsyXTtcbiAgICByZXR1cm4gW3BhcnNlSW50KGguc2xpY2UoMCwgMiksIDE2KSwgcGFyc2VJbnQoaC5zbGljZSgyLCA0KSwgMTYpLCBwYXJzZUludChoLnNsaWNlKDQsIDYpLCAxNildO1xuICB9XG4gIGNvbnN0IHJnYiA9IHMubWF0Y2goL3JnYmE/XFwoKFteKV0rKVxcKS9pKTtcbiAgaWYgKHJnYikge1xuICAgIGNvbnN0IHAgPSByZ2JbMV0uc3BsaXQoJywnKS5tYXAoKHYpID0+IHBhcnNlRmxvYXQodi50cmltKCkpKTtcbiAgICByZXR1cm4gW01hdGgucm91bmQocFswXSkgfHwgMCwgTWF0aC5yb3VuZChwWzFdKSB8fCAwLCBNYXRoLnJvdW5kKHBbMl0pIHx8IDBdO1xuICB9XG4gIHJldHVybiBbMCwgMCwgMF07XG59XG5cbi8qKlxuICogQnVpbGQgYSAyNTYtZW50cnkgUkdCIGxvb2t1cCB0YWJsZSBmcm9tIGEgYENPTE9STUFQX09QVElPTlNgIHZhbHVlLCBpbmRleGVkIGJ5XG4gKiBncmF5c2NhbGUgdmFsdWUgMOKAkzI1NS4gUmV0dXJucyBudWxsIGlmIHRoZSB2YWx1ZSBjYW4ndCBiZSByZXNvbHZlZCB0byBhIHNjYWxlLlxuICogQHBhcmFtIHZhbHVlICBhcnJheSBvZiBgW3N0b3AsIGNvbG9yXWAgcGFpcnMsIG9yIGEgUGxvdGx5IGJ1aWx0LWluIG5hbWUgc3RyaW5nXG4gKiBAcGFyYW0gcmV2ZXJzZSAgbWlycm9yIHRoZSBzY2FsZSAobWF0Y2hlcyBQbG90bHkncyBgcmV2ZXJzZXNjYWxlYClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQ29sb3JtYXBMdXQodmFsdWU6IHVua25vd24sIHJldmVyc2UgPSBmYWxzZSk6IFJnYltdIHwgbnVsbCB7XG4gIGxldCBzY2FsZTogU3RvcFtdIHwgbnVsbCA9IG51bGw7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgc2NhbGUgPSB2YWx1ZSBhcyBTdG9wW107XG4gIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHNjYWxlID0gQlVJTFRJTl9TQ0FMRVNbdmFsdWVdID8/IG51bGw7XG4gIGlmICghc2NhbGUgfHwgc2NhbGUubGVuZ3RoIDwgMikgcmV0dXJuIG51bGw7XG5cbiAgLy8gTm9ybWFsaXNlICsgc29ydCB0aGUgY29udHJvbCBwb2ludHMuXG4gIGNvbnN0IHN0b3BzID0gc2NhbGVcbiAgICAubWFwKChzKSA9PiBbTnVtYmVyKHNbMF0pLCBwYXJzZUNvbG9yKFN0cmluZyhzWzFdKSldIGFzIFtudW1iZXIsIFJnYl0pXG4gICAgLnNvcnQoKGEsIGIpID0+IGFbMF0gLSBiWzBdKTtcblxuICBjb25zdCBsdXQ6IFJnYltdID0gbmV3IEFycmF5KDI1Nik7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMjU2OyBpKyspIHtcbiAgICBjb25zdCB0ID0gaSAvIDI1NTtcbiAgICAvLyBGaW5kIHRoZSBicmFja2V0aW5nIGNvbnRyb2wgcG9pbnRzIGZvciB0LlxuICAgIGxldCBrID0gMDtcbiAgICB3aGlsZSAoayA8IHN0b3BzLmxlbmd0aCAtIDIgJiYgc3RvcHNbayArIDFdWzBdIDwgdCkgaysrO1xuICAgIGNvbnN0IFt0MCwgYzBdID0gc3RvcHNba107XG4gICAgY29uc3QgW3QxLCBjMV0gPSBzdG9wc1trICsgMV07XG4gICAgY29uc3Qgc3BhbiA9IHQxIC0gdDAgfHwgMTtcbiAgICBjb25zdCBmID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgKHQgLSB0MCkgLyBzcGFuKSk7XG4gICAgbHV0W2ldID0gW1xuICAgICAgTWF0aC5yb3VuZChjMFswXSArIChjMVswXSAtIGMwWzBdKSAqIGYpLFxuICAgICAgTWF0aC5yb3VuZChjMFsxXSArIChjMVsxXSAtIGMwWzFdKSAqIGYpLFxuICAgICAgTWF0aC5yb3VuZChjMFsyXSArIChjMVsyXSAtIGMwWzJdKSAqIGYpLFxuICAgIF07XG4gIH1cbiAgaWYgKHJldmVyc2UpIGx1dC5yZXZlcnNlKCk7XG4gIHJldHVybiBsdXQ7XG59XG4iXX0=
|
|
251
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3JtYXAtbHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb250cmFjdHMvY29sb3JtYXAtbHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFFSCxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUUvQyxPQUFPLEVBQU8sYUFBYSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBSzdDOzs7O0dBSUc7QUFDSCxNQUFNLGNBQWMsR0FBMkI7SUFDN0MsS0FBSyxFQUFFO1FBQ0wsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxFQUFFLGtCQUFrQixDQUFDO0tBQ3hCO0lBQ0QsTUFBTSxFQUFFO1FBQ04sQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDO1FBQ25CLENBQUMsS0FBSyxFQUFFLGdCQUFnQixDQUFDO1FBQ3pCLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDO1FBQ3hCLENBQUMsS0FBSyxFQUFFLGlCQUFpQixDQUFDO1FBQzFCLENBQUMsR0FBRyxFQUFFLGlCQUFpQixDQUFDO1FBQ3hCLENBQUMsS0FBSyxFQUFFLGtCQUFrQixDQUFDO1FBQzNCLENBQUMsSUFBSSxFQUFFLGtCQUFrQixDQUFDO1FBQzFCLENBQUMsS0FBSyxFQUFFLGtCQUFrQixDQUFDO1FBQzNCLENBQUMsQ0FBQyxFQUFFLGtCQUFrQixDQUFDO0tBQ3hCO0lBQ0QsTUFBTSxFQUFFO1FBQ04sQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDO1FBQ25CLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQztRQUN4QixDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQztRQUN4QixDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQztRQUN6QixDQUFDLEdBQUcsRUFBRSxrQkFBa0IsQ0FBQztRQUN6QixDQUFDLEtBQUssRUFBRSxrQkFBa0IsQ0FBQztRQUMzQixD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QUFLLEtBQUssUUFBUTtRQUFFLEtBQUssR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDO0lBQzFFLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFFNUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxRQUFRLENBQzNCLGNBQWMsRUFDZCxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7UUFDZCxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0MsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ2pFLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDRixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sR0FBRyxHQUFVLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFO1FBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZGLElBQUksT0FBTztRQUFFLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMzQixPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbG9ybWFwIOKGkiBSR0IgbG9va3VwLXRhYmxlIGJ1aWxkZXIuXG4gKlxuICogTGV0cyBhIG5vbi1QbG90bHkgYmFja2VuZCAoT3BlblNlYWRyYWdvbikgcmVjb2xvciBncmF5c2NhbGUgcGl4ZWxzIHdpdGggdGhlXG4gKiBleGFjdCBzYW1lIGNvbG9ybWFwcyB0aGUgUGxvdGx5IGhlYXRtYXAgdXNlcy4gVGhlIGlucHV0IGlzIGEgY29sb3JtYXAgdmFsdWVcbiAqIHN0cmFpZ2h0IGZyb20gYENPTE9STUFQX09QVElPTlNgIChzZWUgcGxvdC51dGlsaXRpZXMpIOKAlCB0aGUgc2FtZSB2YWx1ZSBoYW5kZWRcbiAqIHRvIFBsb3RseSdzIGBjb2xvcnNjYWxlYCDigJQgc28gdGhlIHR3byBzdXJmYWNlcyBzdGF5IGluIGxvY2stc3RlcC5cbiAqXG4gKiBBIGNvbG9ybWFwIHZhbHVlIGlzIGVpdGhlcjpcbiAqICAgLSBhbiBhcnJheSBvZiBgW3N0b3AsIGNvbG9yXWAgcGFpcnMgKHRoZSBtYXRwbG90bGliIHRhYmxlcywgc2VlIHtAbGluayBsdXRTY2FsZX0pLCBvclxuICogICAtIGEgUGxvdGx5IGJ1aWx0LWluIHNjYWxlICpuYW1lKiBzdHJpbmcgKGUuZy4gJ1ZpcmlkaXMnLCAnUmVkcycpLCBvclxuICogICAtIGEgMjU2LWVudHJ5IFJHQiB0YWJsZSBpdHNlbGYgKGEgYG5hcGFyaS1qcy9jb2xvcm1hcHNgIGAqX0xVVGApLCB1c2VkIGFzIGlzLlxuICogYGNvbG9yYCBtYXkgYmUgYCdyZ2IociwgZywgYiknYCBvciBgJyNycmdnYmInYC9gJyNyZ2InYC5cbiAqL1xuXG5pbXBvcnQgeyBDb2xvcm1hcCwgYnVpbGRMdXQgfSBmcm9tICduYXBhcmktanMnO1xuXG5pbXBvcnQgeyBSZ2IsIHBhcnNlQ3NzQ29sb3IgfSBmcm9tICcuL2NvbG9yJztcblxuZXhwb3J0IHR5cGUgeyBSZ2IgfTtcbnR5cGUgU3RvcCA9IFtudW1iZXIsIHN0cmluZ107XG5cbi8qKlxuICogUGxvdGx5J3MgYnVpbHQtaW4gbmFtZWQgY29sb3JzY2FsZXMgKGNvcGllZCB2ZXJiYXRpbSBmcm9tIHBsb3RseS5qc1xuICogYGNvbXBvbmVudHMvY29sb3JzY2FsZS9zY2FsZXMuanNgKSwgZm9yIHRoZSBgQ09MT1JNQVBfT1BUSU9OU2AgZW50cmllcyB3aG9zZVxuICogYHZhbHVlYCBpcyBhIG5hbWUgc3RyaW5nIHJhdGhlciB0aGFuIGFuIGlubGluZSBMVVQgYXJyYXkuXG4gKi9cbmNvbnN0IEJVSUxUSU5fU0NBTEVTOiBSZWNvcmQ8c3RyaW5nLCBTdG9wW10+ID0ge1xuICBHcmV5czogW1xuICAgIFswLCAncmdiKDAsMCwwKSddLFxuICAgIFsxLCAncmdiKDI1NSwyNTUsMjU1KSddLFxuICBdLFxuICBZbEduQnU6IFtcbiAgICBbMCwgJ3JnYig4LDI5LDg4KSddLFxuICAgIFswLjEyNSwgJ3JnYigzNyw1MiwxNDgpJ10sXG4gICAgWzAuMjUsICdyZ2IoMzQsOTQsMTY4KSddLFxuICAgIFswLjM3NSwgJ3JnYigyOSwxNDUsMTkyKSddLFxuICAgIFswLjUsICdyZ2IoNjUsMTgyLDE5NiknXSxcbiAgICBbMC42MjUsICdyZ2IoMTI3LDIwNSwxODcpJ10sXG4gICAgWzAuNzUsICdyZ2IoMTk5LDIzMywxODApJ10sXG4gICAgWzAuODc1LCAncmdiKDIzNywyNDgsMjE3KSddLFxuICAgIFsxLCAncmdiKDI1NSwyNTUsMjE3KSddLFxuICBdLFxuICBHcmVlbnM6IFtcbiAgICBbMCwgJ3JnYigwLDY4LDI3KSddLFxuICAgIFswLjEyNSwgJ3JnYigwLDEwOSw0NCknXSxcbiAgICBbMC4yNSwgJ3JnYigzNSwxMzksNjkpJ10sXG4gICAgWzAuMzc1LCAncmdiKDY1LDE3MSw5MyknXSxcbiAgICBbMC41LCAncmdiKDExNiwxOTYsMTE4KSddLFxuICAgIFswLjYyNSwgJ3JnYigxNjEsMjE3LDE1NSknXSxcbiAgICBbMC43NSwgJ3JnYigxOTksMjMzLDE5MiknXSxcbiAgICBbMC44NzUsICdyZ2IoMjI5LDI0NSwyMjQpJ10sXG4gICAgWzEsICdyZ2IoMjQ3LDI1MiwyNDUpJ10sXG4gIF0sXG4gIFlsT3JSZDogW1xuICAgIFswLCAncmdiKDEyOCwwLDM4KSddLFxuICAgIFswLjEyNSwgJ3JnYigxODksMCwzOCknXSxcbiAgICBbMC4yNSwgJ3JnYigyMjcsMjYsMjgpJ10sXG4gICAgWzAuMzc1LCAncmdiKDI1Miw3OCw0MiknXSxcbiAgICBbMC41LCAncmdiKDI1MywxNDEsNjApJ10sXG4gICAgWzAuNjI1LCAncmdiKDI1NCwxNzgsNzYpJ10sXG4gICAgWzAuNzUsICdyZ2IoMjU0LDIxNywxMTgpJ10sXG4gICAgWzAuODc1LCAncmdiKDI1NSwyMzcsMTYwKSddLFxuICAgIFsxLCAncmdiKDI1NSwyNTUsMjA0KSddLFxuICBdLFxuICBCbHVlcmVkOiBbXG4gICAgWzAsICdyZ2IoMCwwLDI1NSknXSxcbiAgICBbMSwgJ3JnYigyNTUsMCwwKSddLFxuICBdLFxuICBSZEJ1OiBbXG4gICAgWzAsICdyZ2IoNSwxMCwxNzIpJ10sXG4gICAgWzAuMzUsICdyZ2IoMTA2LDEzNywyNDcpJ10sXG4gICAgWzAuNSwgJ3JnYigxOTAsMTkwLDE5MCknXSxcbiAgICBbMC42LCAncmdiKDIyMCwxNzAsMTMyKSddLFxuICAgIFswLjcsICdyZ2IoMjMwLDE0NSw5MCknXSxcbiAgICBbMSwgJ3JnYigxNzgsMTAsMjgpJ10sXG4gIF0sXG4gIFJlZHM6IFtcbiAgICBbMCwgJ3JnYigyMjAsMjIwLDIyMCknXSxcbiAgICBbMC4yLCAncmdiKDI0NSwxOTUsMTU3KSddLFxuICAgIFswLjQsICdyZ2IoMjQ1LDE2MCwxMDUpJ10sXG4gICAgWzEsICdyZ2IoMTc4LDEwLDI4KSddLFxuICBdLFxuICBCbHVlczogW1xuICAgIFswLCAncmdiKDUsMTAsMTcyKSddLFxuICAgIFswLjM1LCAncmdiKDQwLDYwLDE5MCknXSxcbiAgICBbMC41LCAncmdiKDcwLDEwMCwyNDUpJ10sXG4gICAgWzAuNiwgJ3JnYig5MCwxMjAsMjQ1KSddLFxuICAgIFswLjcsICdyZ2IoMTA2LDEzNywyNDcpJ10sXG4gICAgWzEsICdyZ2IoMjIwLDIyMCwyMjApJ10sXG4gIF0sXG4gIFBpY25pYzogW1xuICAgIFswLCAncmdiKDAsMCwyNTUpJ10sXG4gICAgWzAuMSwgJ3JnYig1MSwxNTMsMjU1KSddLFxuICAgIFswLjIsICdyZ2IoMTAyLDIwNCwyNTUpJ10sXG4gICAgWzAuMywgJ3JnYigxNTMsMjA0LDI1NSknXSxcbiAgICBbMC40LCAncmdiKDIwNCwyMDQsMjU1KSddLFxuICAgIFswLjUsICdyZ2IoMjU1LDI1NSwyNTUpJ10sXG4gICAgWzAuNiwgJ3JnYigyNTUsMjA0LDI1NSknXSxcbiAgICBbMC43LCAncmdiKDI1NSwxNTMsMjU1KSddLFxuICAgIFswLjgsICdyZ2IoMjU1LDEwMiwyMDQpJ10sXG4gICAgWzAuOSwgJ3JnYigyNTUsMTAyLDEwMiknXSxcbiAgICBbMSwgJ3JnYigyNTUsMCwwKSddLFxuICBdLFxuICBSYWluYm93OiBbXG4gICAgWzAsICdyZ2IoMTUwLDAsOTApJ10sXG4gICAgWzAuMTI1LCAncmdiKDAsMCwyMDApJ10sXG4gICAgWzAuMjUsICdyZ2IoMCwyNSwyNTUpJ10sXG4gICAgWzAuMzc1LCAncmdiKDAsMTUyLDI1NSknXSxcbiAgICBbMC41LCAncmdiKDQ0LDI1NSwxNTApJ10sXG4gICAgWzAuNjI1LCAncmdiKDE1MSwyNTUsMCknXSxcbiAgICBbMC43NSwgJ3JnYigyNTUsMjM0LDApJ10sXG4gICAgWzAuODc1LCAncmdiKDI1NSwxMTEsMCknXSxcbiAgICBbMSwgJ3JnYigyNTUsMCwwKSddLFxuICBdLFxuICBQb3J0bGFuZDogW1xuICAgIFswLCAncmdiKDEyLDUxLDEzMSknXSxcbiAgICBbMC4yNSwgJ3JnYigxMCwxMzYsMTg2KSddLFxuICAgIFswLjUsICdyZ2IoMjQyLDIxMSw1NiknXSxcbiAgICBbMC43NSwgJ3JnYigyNDIsMTQzLDU2KSddLFxuICAgIFsxLCAncmdiKDIxNywzMCwzMCknXSxcbiAgXSxcbiAgSmV0OiBbXG4gICAgWzAsICdyZ2IoMCwwLDEzMSknXSxcbiAgICBbMC4xMjUsICdyZ2IoMCw2MCwxNzApJ10sXG4gICAgWzAuMzc1LCAncmdiKDUsMjU1LDI1NSknXSxcbiAgICBbMC42MjUsICdyZ2IoMjU1LDI1NSwwKSddLFxuICAgIFswLjg3NSwgJ3JnYigyNTAsMCwwKSddLFxuICAgIFsxLCAncmdiKDEyOCwwLDApJ10sXG4gIF0sXG4gIEhvdDogW1xuICAgIFswLCAncmdiKDAsMCwwKSddLFxuICAgIFswLjMsICdyZ2IoMjMwLDAsMCknXSxcbiAgICBbMC42LCAncmdiKDI1NSwyMTAsMCknXSxcbiAgICBbMSwgJ3JnYigyNTUsMjU1LDI1NSknXSxcbiAgXSxcbiAgQmxhY2tib2R5OiBbXG4gICAgWzAsICdyZ2IoMCwwLDApJ10sXG4gICAgWzAuMiwgJ3JnYigyMzAsMCwwKSddLFxuICAgIFswLjQsICdyZ2IoMjMwLDIxMCwwKSddLFxuICAgIFswLjcsICdyZ2IoMjU1LDI1NSwyNTUpJ10sXG4gICAgWzEsICdyZ2IoMTYwLDIwMCwyNTUpJ10sXG4gIF0sXG4gIEVhcnRoOiBbXG4gICAgWzAsICdyZ2IoMCwwLDEzMCknXSxcbiAgICBbMC4xLCAncmdiKDAsMTgwLDE4MCknXSxcbiAgICBbMC4yLCAncmdiKDQwLDIxMCw0MCknXSxcbiAgICBbMC40LCAncmdiKDIzMCwyMzAsNTApJ10sXG4gICAgWzAuNiwgJ3JnYigxMjAsNzAsMjApJ10sXG4gICAgWzEsICdyZ2IoMjU1LDI1NSwyNTUpJ10sXG4gIF0sXG4gIEVsZWN0cmljOiBbXG4gICAgWzAsICdyZ2IoMCwwLDApJ10sXG4gICAgWzAuMTUsICdyZ2IoMzAsMCwxMDApJ10sXG4gICAgWzAuNCwgJ3JnYigxMjAsMCwxMDApJ10sXG4gICAgWzAuNiwgJ3JnYigxNjAsOTAsMCknXSxcbiAgICBbMC44LCAncmdiKDIzMCwyMDAsMCknXSxcbiAgICBbMSwgJ3JnYigyNTUsMjUwLDIyMCknXSxcbiAgXSxcbiAgVmlyaWRpczogW1xuICAgIFswLCAnIzQ0MDE1NCddLFxuICAgIFswLjA2Mjc0NTA5ODAzOTIxNTY5LCAnIzQ4MTg2YSddLFxuICAgIFswLjEyNTQ5MDE5NjA3ODQzMTM3LCAnIzQ3MmQ3YiddLFxuICAgIFswLjE4ODIzNTI5NDExNzY0NzA2LCAnIzQyNDA4NiddLFxuICAgIFswLjI1MDk4MDM5MjE1Njg2Mjc0LCAnIzNiNTI4YiddLFxuICAgIFswLjMxMzcyNTQ5MDE5NjA3ODQsICcjMzM2MzhkJ10sXG4gICAgWzAuMzc2NDcwNTg4MjM1Mjk0MSwgJyMyYzcyOGUnXSxcbiAgICBbMC40MzkyMTU2ODYyNzQ1MDk4LCAnIzI2ODI4ZSddLFxuICAgIFswLjUwMTk2MDc4NDMxMzcyNTUsICcjMjE5MThjJ10sXG4gICAgWzAuNTY0NzA1ODgyMzUyOTQxMiwgJyMxZmEwODgnXSxcbiAgICBbMC42Mjc0NTA5ODAzOTIxNTY5LCAnIzI4YWU4MCddLFxuICAgIFswLjY5MDE5NjA3ODQzMTM3MjUsICcjM2ZiYzczJ10sXG4gICAgWzAuNzUyOTQxMTc2NDcwNTg4MiwgJyM1ZWM5NjInXSxcbiAgICBbMC44MTU2ODYyNzQ1MDk4MDM5LCAnIzg0ZDQ0YiddLFxuICAgIFswLjg3ODQzMTM3MjU0OTAxOTYsICcjYWRkYzMwJ10sXG4gICAgWzAuOTQxMTc2NDcwNTg4MjM1MywgJyNkOGUyMTknXSxcbiAgICBbMSwgJyNmZGU3MjUnXSxcbiAgXSxcbiAgQ2l2aWRpczogW1xuICAgIFswLCAncmdiKDAsMzIsNzYpJ10sXG4gICAgWzAuMDU4ODI0LCAncmdiKDAsNDIsMTAyKSddLFxuICAgIFswLjExNzY0NywgJ3JnYigwLDUyLDExMCknXSxcbiAgICBbMC4xNzY0NzEsICdyZ2IoMzksNjMsMTA4KSddLFxuICAgIFswLjIzNTI5NCwgJ3JnYig2MCw3NCwxMDcpJ10sXG4gICAgWzAuMjk0MTE4LCAncmdiKDc2LDg1LDEwNyknXSxcbiAgICBbMC4zNTI5NDEsICdyZ2IoOTEsOTUsMTA5KSddLFxuICAgIFswLjQxMTc2NSwgJ3JnYigxMDQsMTA2LDExMiknXSxcbiAgICBbMC40NzA1ODgsICdyZ2IoMTE3LDExNywxMTcpJ10sXG4gICAgWzAuNTI5NDEyLCAncmdiKDEzMSwxMjksMTIwKSddLFxuICAgIFswLjU4ODIzNSwgJ3JnYigxNDYsMTQwLDEyMCknXSxcbiAgICBbMC42NDcwNTksICdyZ2IoMTYxLDE1MiwxMTgpJ10sXG4gICAgWzAuNzA1ODgyLCAncmdiKDE3NiwxNjUsMTE0KSddLFxuICAgIFswLjc2NDcwNiwgJ3JnYigxOTIsMTc3LDEwOSknXSxcbiAgICBbMC44MjM1MjksICdyZ2IoMjA5LDE5MSwxMDIpJ10sXG4gICAgWzAuODgyMzUzLCAncmdiKDIyNSwyMDQsOTIpJ10sXG4gICAgWzAuOTQxMTc2LCAncmdiKDI0MywyMTksNzkpJ10sXG4gICAgWzEsICdyZ2IoMjU1LDIzMyw2OSknXSxcbiAgXSxcbn07XG5cbi8qKlxuICogQSAyNTYtZW50cnkgUkdCIHRhYmxlIChhIGBuYXBhcmktanMvY29sb3JtYXBzYCBgKl9MVVRgLCBgVWludDhBcnJheSg3NjgpYCkgYXMgYW4gaW5saW5lXG4gKiBQbG90bHkgY29sb3JzY2FsZTogb25lIGBbaSAvIDI1NSwgJ3JnYihyLCBnLCBiKSddYCBzdG9wIHBlciBlbnRyeSwgdGhlIHNoYXBlIHRoZSBjb2xvcm1hcFxuICogdHJlZSBoYW5kcyB0byBQbG90bHkncyBgY29sb3JzY2FsZWAgYW5kIHRvIHtAbGluayBidWlsZENvbG9ybWFwTHV0fS4gU3RvcHMgYXJlIHJvdW5kZWQgdG9cbiAqIHNpeCBkZWNpbWFscywgYXMgdGhlIGNvbG9ybWFwIGFzc2V0IHRoaXMgcmVwbGFjZXMgY2FycmllZCB0aGVtLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbHV0U2NhbGUobHV0OiBBcnJheUxpa2U8bnVtYmVyPik6IFN0b3BbXSB7XG4gIGNvbnN0IG4gPSBNYXRoLmZsb29yKGx1dC5sZW5ndGggLyAzKTtcbiAgY29uc3Qgc2NhbGU6IFN0b3BbXSA9IG5ldyBBcnJheShuKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICBzY2FsZVtpXSA9IFtOdW1iZXIoKGkgLyAobiAtIDEpKS50b0ZpeGVkKDYpKSwgYHJnYigke2x1dFtpICogM119LCAke2x1dFtpICogMyArIDFdfSwgJHtsdXRbaSAqIDMgKyAyXX0pYF07XG4gIH1cbiAgcmV0dXJuIHNjYWxlO1xufVxuXG4vKiogUGFyc2UgYSBQbG90bHkgY29sb3JzY2FsZSBjb2xvciAoYHJnYihyLGcsYilgIG9yIGAjcnJnZ2JiYC9gI3JnYmApIHRvIFJHQjsgYmxhY2sgd2hlbiB1bnBhcnNlYWJsZS4gKi9cbmZ1bmN0aW9uIHBhcnNlQ29sb3IoYzogc3RyaW5nKTogUmdiIHtcbiAgcmV0dXJuIHBhcnNlQ3NzQ29sb3IoYykgPz8gWzAsIDAsIDBdO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgMjU2LWVudHJ5IFJHQiBsb29rdXAgdGFibGUgZnJvbSBhIGBDT0xPUk1BUF9PUFRJT05TYCB2YWx1ZSwgaW5kZXhlZCBieVxuICogZ3JheXNjYWxlIHZhbHVlIDDigJMyNTUuIFJldHVybnMgbnVsbCBpZiB0aGUgdmFsdWUgY2FuJ3QgYmUgcmVzb2x2ZWQgdG8gYSBzY2FsZS5cbiAqXG4gKiBUaGUgUGxvdGx5IHNpZGUgKHRoZSB2YWx1ZSdzIGZvcm1zLCB0aGUgY29sb3VyIHN0cmluZ3MsIHRoZSBidWlsdC1pbiBuYW1lcykgaXNcbiAqIHBhcnNlZCBoZXJlOyB0aGUgaW50ZXJwb2xhdGlvbiBpcyBuYXBhcmktanMncyBvd24gYENvbG9ybWFwYCBzYW1wbGVkIGJ5IGBidWlsZEx1dGAsXG4gKiBzbyBib3RoIGJhY2tlbmRzIHJhbXAgYSBzY2FsZSB0aGUgc2FtZSB3YXkuXG4gKiBAcGFyYW0gdmFsdWUgIGFycmF5IG9mIGBbc3RvcCwgY29sb3JdYCBwYWlycywgYSBQbG90bHkgYnVpbHQtaW4gbmFtZSBzdHJpbmcsIG9yIGFcbiAqICAgMjU2LWVudHJ5IFJHQiBgVWludDhBcnJheSg3NjgpYFxuICogQHBhcmFtIHJldmVyc2UgIG1pcnJvciB0aGUgc2NhbGUgKG1hdGNoZXMgUGxvdGx5J3MgYHJldmVyc2VzY2FsZWApXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZENvbG9ybWFwTHV0KHZhbHVlOiB1bmtub3duLCByZXZlcnNlID0gZmFsc2UpOiBSZ2JbXSB8IG51bGwge1xuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBVaW50OEFycmF5ICYmIHZhbHVlLmxlbmd0aCA9PT0gNzY4KSB7XG4gICAgY29uc3QgbHV0OiBSZ2JbXSA9IG5ldyBBcnJheSgyNTYpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjU2OyBpKyspIGx1dFtpXSA9IFt2YWx1ZVtpICogM10sIHZhbHVlW2kgKiAzICsgMV0sIHZhbHVlW2kgKiAzICsgMl1dO1xuICAgIGlmIChyZXZlcnNlKSBsdXQucmV2ZXJzZSgpO1xuICAgIHJldHVybiBsdXQ7XG4gIH1cbiAgbGV0IHNjYWxlOiBTdG9wW10gfCBudWxsID0gbnVsbDtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSBzY2FsZSA9IHZhbHVlIGFzIFN0b3BbXTtcbiAgZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgc2NhbGUgPSBCVUlMVElOX1NDQUxFU1t2YWx1ZV0gPz8gbnVsbDtcbiAgaWYgKCFzY2FsZSB8fCBzY2FsZS5sZW5ndGggPCAyKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBjb2xvcm1hcCA9IG5ldyBDb2xvcm1hcChcbiAgICAncGxvdGx5LXNjYWxlJyxcbiAgICBzY2FsZS5tYXAoKHMpID0+IHtcbiAgICAgIGNvbnN0IFtyLCBnLCBiXSA9IHBhcnNlQ29sb3IoU3RyaW5nKHNbMV0pKTtcbiAgICAgIHJldHVybiB7IHQ6IE51bWJlcihzWzBdKSwgY29sb3I6IFtyIC8gMjU1LCBnIC8gMjU1LCBiIC8gMjU1XSB9O1xuICAgIH0pLFxuICApO1xuICBjb25zdCByZ2JhID0gYnVpbGRMdXQoY29sb3JtYXAsIDI1Nik7XG4gIGNvbnN0IGx1dDogUmdiW10gPSBuZXcgQXJyYXkoMjU2KTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAyNTY7IGkrKykgbHV0W2ldID0gW3JnYmFbaSAqIDRdLCByZ2JhW2kgKiA0ICsgMV0sIHJnYmFbaSAqIDQgKyAyXV07XG4gIGlmIChyZXZlcnNlKSBsdXQucmV2ZXJzZSgpO1xuICByZXR1cm4gbHV0O1xufVxuIl19
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29vcmRpbmF0ZS10cmFuc2Zvcm0uY29udHJhY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbnRyYWN0cy9jb29yZGluYXRlLXRyYW5zZm9ybS5jb250cmFjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVnaW9uIH0gZnJvbSAnLi4vbW9kZWxzL3JlZ2lvbic7XG5cbi8qKlxuICogVGhlIHZpZXdwb3J0IG1hdGggdGhlIG9uLWNhbnZhcyB0b29scyAod2FuZCwgdmVydGV4IGVyYXNlcikgbmVlZCwgYWJzdHJhY3RlZFxuICogYXdheSBmcm9tIGFueSBzcGVjaWZpYyBiYWNrZW5kLiBQbG90bHkgaW1wbGVtZW50cyBpdCBvdmVyIGl0cyBheGlzIG9iamVjdHNcbiAqIChgX2Z1bGxMYXlvdXQueGF4aXMveWF4aXNgKSwgT3BlblNlYWRyYWdvbiBvdmVyIGl0cyB2aWV3cG9ydCBBUEkuIFRoaXMgaXMgd2hhdFxuICogbGV0cyB0aGUgdG9vbHMgcnVuIG9uIGVpdGhlciBiYWNrZW5kLlxuICpcbiAqIFwiRGF0YSBjb29yZGluYXRlc1wiIGFyZSB0aGUgYmFja2VuZCdzIHNoYXBlIGNvb3JkaW5hdGUgc3BhY2U6IFBsb3RseSBkYXRhXG4gKiBjb29yZHMgZm9yIFBsb3RseSwgaW1hZ2UtcGl4ZWwgY29vcmRzIGZvciBPcGVuU2VhZHJhZ29uLiBUaGUgdG9vbHMgY29udmVydFxuICogZGF0YSAtPiBpbWFnZS1tYXRyaXggdXNpbmcgdGhlIHBlci1heGlzIHJhdGlvcyB0aGV5IGFscmVhZHkgZ2V0IGZyb20gdGhlIGhvc3RcbiAqIChgZ2V0Q2FjaGVkSW1hZ2VEYXRhKCkucmF0aW9zYCwgc2VlIGBNYXRyaXhGcmFtZWApLCBzbyB0aGF0IGRpdmlzaW9uIHN0YXlzIGluXG4gKiB0aGUgdG9vbCBhbmQgdGhlIHRyYW5zZm9ybSBzdGF5cyBwdXJlbHkgc2NyZWVuPC0+ZGF0YS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQ29vcmRpbmF0ZVRyYW5zZm9ybSB7XG4gIC8qKiBDbGllbnQgKG1vdXNlIGV2ZW50KSBwaXhlbCAtPiBkYXRhIGNvb3JkaW5hdGVzLiAqL1xuICBjbGllbnRUb0RhdGEoY2xpZW50WDogbnVtYmVyLCBjbGllbnRZOiBudW1iZXIpOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH07XG4gIC8qKiBBIGxlbmd0aCBpbiBkYXRhIGNvb3JkaW5hdGVzIC0+IGxlbmd0aCBpbiBzY3JlZW4gcGl4ZWxzLiAqL1xuICBkYXRhTGVuZ3RoVG9TY3JlZW4oZGF0YUxlbmd0aDogbnVtYmVyKTogbnVtYmVyO1xuICAvKiogVHJ1ZSBvbmNlIHRoZSB2aWV3cG9ydCBpcyBsYWlkIG91dCBhbmQgY29udmVyc2lvbnMgYXJlIHZhbGlkLiAqL1xuICBpc1JlYWR5KCk6IGJvb2xlYW47XG59XG5cbi8qKiBXaGF0IGEgYmFja2VuZCBzdXBwbGllcyBzbyB0aGUgdG9vbHMgY2FuIGF0dGFjaCArIGNvbnZlcnQgY29vcmRpbmF0ZXMuICovXG5leHBvcnQgaW50ZXJmYWNlIElWaWV3cG9ydEhvc3Qge1xuICAvKiogVGhlIGVsZW1lbnQgdGhlIHRvb2wncyBjYW52YXMgb3ZlcmxheSBhdHRhY2hlcyB0byAoZmlsbHMgdGhlIHBsb3QgYXJlYSkuICovXG4gIGdldE92ZXJsYXlDb250YWluZXIoKTogSFRNTEVsZW1lbnQgfCBudWxsO1xuICAvKiogTGl2ZSBjb29yZGluYXRlIHRyYW5zZm9ybSBmb3IgdGhlIGN1cnJlbnQgdmlld3BvcnQgc3RhdGUuICovXG4gIGdldENvb3JkaW5hdGVUcmFuc2Zvcm0oKTogSUNvb3JkaW5hdGVUcmFuc2Zvcm07XG59XG5cbi8qKlxuICogUmVnaW9uIHJlYWQvd3JpdGUgYWNjZXNzIGZvciB0aGUgb24tY2FudmFzIHRvb2xzLCBpbiB0aGUgYmFja2VuZC1uZXV0cmFsXG4gKiB7QGxpbmsgUmVnaW9ufSBtb2RlbCDigJQgc28gdGhlIHdhbmQgYW5kIHZlcnRleCBlcmFzZXIgb3BlcmF0ZSBvbiByZWdpb25zLCBub3RcbiAqIGEgYmFja2VuZCdzIG93biBzaGFwZSByZXByZXNlbnRhdGlvbi4gQm90aCBiYWNrZW5kcyBpbXBsZW1lbnQgdGhpcyBieVxuICogZGVsZWdhdGluZyB0byB0aGUgc2hhcmVkIFJlZ2lvblN0b3JlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElSZWdpb25EYXRhSG9zdCB7XG4gIC8qKiBDdXJyZW50IHJlZ2lvbnMgKG5ldXRyYWwgbW9kZWwpLiAqL1xuICBnZXRSZWdpb25zKCk6IFJlZ2lvbltdO1xuICAvKiogQ29tbWl0IHRoZSAocG9zc2libHkgbXV0YXRlZCkgcmVnaW9uIHNldDsgdGhlIGJhY2tlbmQgcmVuZGVycyArIGVtaXRzLiAqL1xuICBzZXRSZWdpb25zKHJlZ2lvbnM6IFJlZ2lvbltdKTogdm9pZDtcbn1cbiJdfQ==
|