@kepler.gl/components 3.2.6 → 3.3.0-alpha.1
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/dist/annotations/annotation-node.d.ts +11 -0
- package/dist/annotations/annotation-node.js +145 -0
- package/dist/annotations/annotation-overlay.d.ts +16 -0
- package/dist/annotations/annotation-overlay.js +166 -0
- package/dist/annotations/annotation-panel.d.ts +24 -0
- package/dist/annotations/annotation-panel.js +362 -0
- package/dist/annotations/annotation-text.d.ts +16 -0
- package/dist/annotations/annotation-text.js +150 -0
- package/dist/annotations/annotation-utils.d.ts +39 -0
- package/dist/annotations/annotation-utils.js +156 -0
- package/dist/annotations/index.d.ts +7 -0
- package/dist/annotations/index.js +53 -0
- package/dist/annotations/lexical-editor/clickable-link-plugin.d.ts +3 -0
- package/dist/annotations/lexical-editor/clickable-link-plugin.js +71 -0
- package/dist/annotations/lexical-editor/floating-link-editor.d.ts +1 -0
- package/dist/annotations/lexical-editor/floating-link-editor.js +194 -0
- package/dist/annotations/lexical-editor/index.d.ts +7 -0
- package/dist/annotations/lexical-editor/index.js +78 -0
- package/dist/annotations/lexical-editor/lexical-constants.d.ts +12 -0
- package/dist/annotations/lexical-editor/lexical-constants.js +22 -0
- package/dist/annotations/lexical-editor/lexical-nodes.d.ts +3 -0
- package/dist/annotations/lexical-editor/lexical-nodes.js +13 -0
- package/dist/annotations/lexical-editor/lexical-rich-text-editor.d.ts +15 -0
- package/dist/annotations/lexical-editor/lexical-rich-text-editor.js +122 -0
- package/dist/annotations/lexical-editor/lexical-theme.d.ts +15 -0
- package/dist/annotations/lexical-editor/lexical-theme.js +25 -0
- package/dist/annotations/lexical-editor/lexical-toolbar.d.ts +7 -0
- package/dist/annotations/lexical-editor/lexical-toolbar.js +293 -0
- package/dist/annotations/lexical-editor/lexical-utils.d.ts +4 -0
- package/dist/annotations/lexical-editor/lexical-utils.js +45 -0
- package/dist/annotations/lexical-editor/use-lexical-toolbar.d.ts +36 -0
- package/dist/annotations/lexical-editor/use-lexical-toolbar.js +253 -0
- package/dist/bottom-widget.d.ts +5 -5
- package/dist/bottom-widget.js +12 -6
- package/dist/common/action-panel.d.ts +3 -3
- package/dist/common/animation-control/animation-control.d.ts +2 -1
- package/dist/common/animation-control/animation-control.js +3 -1
- package/dist/common/animation-control/animation-controller.js +8 -6
- package/dist/common/animation-control/export-video-control.d.ts +9 -0
- package/dist/common/animation-control/export-video-control.js +43 -0
- package/dist/common/animation-control/playback-controls.d.ts +5 -3
- package/dist/common/animation-control/playback-controls.js +7 -4
- package/dist/common/checkbox.d.ts +5 -21
- package/dist/common/checkbox.js +58 -70
- package/dist/common/color-legend.d.ts +4 -4
- package/dist/common/color-legend.js +3 -3
- package/dist/common/column-stats-chart.d.ts +3 -3
- package/dist/common/data-table/button.d.ts +1 -1
- package/dist/common/data-table/canvas.d.ts +0 -1
- package/dist/common/data-table/cell-size.d.ts +2 -2
- package/dist/common/data-table/display-format.d.ts +1 -1
- package/dist/common/data-table/header-cell.d.ts +2 -2
- package/dist/common/data-table/index.d.ts +8 -10
- package/dist/common/data-table/index.js +3 -3
- package/dist/common/data-table/option-dropdown.d.ts +1 -1
- package/dist/common/field-selector.d.ts +5 -5
- package/dist/common/field-token.d.ts +1 -1
- package/dist/common/file-uploader/file-drop.d.ts +1 -1
- package/dist/common/file-uploader/file-upload-progress.d.ts +1 -1
- package/dist/common/file-uploader/file-upload.d.ts +1 -1
- package/dist/common/file-uploader/file-upload.js +4 -4
- package/dist/common/flex-container.d.ts +2 -3
- package/dist/common/histogram-plot.d.ts +1 -1
- package/dist/common/histogram-plot.js +102 -53
- package/dist/common/icon-button.d.ts +16 -16
- package/dist/common/icons/3d-models/airplane.d.ts +14 -0
- package/dist/common/icons/3d-models/airplane.js +104 -0
- package/dist/common/icons/3d-models/bicycle.d.ts +14 -0
- package/dist/common/icons/3d-models/bicycle.js +426 -0
- package/dist/common/icons/3d-models/boeing.d.ts +14 -0
- package/dist/common/icons/3d-models/boeing.js +119 -0
- package/dist/common/icons/3d-models/car.d.ts +14 -0
- package/dist/common/icons/3d-models/car.js +110 -0
- package/dist/common/icons/3d-models/cargoship.d.ts +14 -0
- package/dist/common/icons/3d-models/cargoship.js +246 -0
- package/dist/common/icons/3d-models/evtol.d.ts +14 -0
- package/dist/common/icons/3d-models/evtol.js +134 -0
- package/dist/common/icons/3d-models/glider.d.ts +14 -0
- package/dist/common/icons/3d-models/glider.js +62 -0
- package/dist/common/icons/3d-models/helicopter.d.ts +14 -0
- package/dist/common/icons/3d-models/helicopter.js +110 -0
- package/dist/common/icons/3d-models/scooter.d.ts +14 -0
- package/dist/common/icons/3d-models/scooter.js +159 -0
- package/dist/common/icons/3d-models/semitruck.d.ts +14 -0
- package/dist/common/icons/3d-models/semitruck.js +177 -0
- package/dist/common/icons/3d-models/truck.d.ts +14 -0
- package/dist/common/icons/3d-models/truck.js +122 -0
- package/dist/common/icons/anchor_window.d.ts +1 -8
- package/dist/common/icons/anchor_window.js +17 -10
- package/dist/common/icons/annotation-text.d.ts +9 -0
- package/dist/common/icons/annotation-text.js +56 -0
- package/dist/common/icons/base.d.ts +1 -1
- package/dist/common/icons/close.js +1 -1
- package/dist/common/icons/effects/distance-fog.d.ts +14 -0
- package/dist/common/icons/effects/distance-fog.js +79 -0
- package/dist/common/icons/effects/surface-fog.d.ts +14 -0
- package/dist/common/icons/effects/surface-fog.js +86 -0
- package/dist/common/icons/index.d.ts +3 -0
- package/dist/common/icons/index.js +22 -1
- package/dist/common/item-selector/chickleted-input.d.ts +5 -5
- package/dist/common/item-selector/chickleted-input.js +5 -5
- package/dist/common/item-selector/dropdown-list.d.ts +3 -3
- package/dist/common/item-selector/dropdown-select.d.ts +7 -7
- package/dist/common/item-selector/item-selector.d.ts +2 -2
- package/dist/common/item-selector/typeahead.d.ts +3 -3
- package/dist/common/line-chart.d.ts +4 -1
- package/dist/common/line-chart.js +59 -12
- package/dist/common/loading-spinner.d.ts +2 -2
- package/dist/common/modal.d.ts +5 -5
- package/dist/common/portaled.d.ts +8 -25
- package/dist/common/progress-bar.d.ts +1 -1
- package/dist/common/radius-legend.d.ts +1 -1
- package/dist/common/range-brush.d.ts +1 -1
- package/dist/common/range-plot.d.ts +1 -1
- package/dist/common/range-plot.js +4 -2
- package/dist/common/range-slider.d.ts +2 -0
- package/dist/common/range-slider.js +108 -43
- package/dist/common/slider/mouse-event.d.ts +1 -1
- package/dist/common/slider/slider-bar-handle.d.ts +2 -2
- package/dist/common/slider/slider-handle.d.ts +3 -3
- package/dist/common/slider/slider.d.ts +6 -2
- package/dist/common/slider/slider.js +78 -35
- package/dist/common/styled-components.d.ts +158 -159
- package/dist/common/styled-components.js +2 -2
- package/dist/common/sync-timeline-control.d.ts +3 -3
- package/dist/common/time-range-slider-time-title.d.ts +2 -2
- package/dist/common/time-range-slider-time-title.js +5 -5
- package/dist/common/time-range-slider.d.ts +4 -3
- package/dist/common/time-range-slider.js +19 -7
- package/dist/common/timeline-helpers.d.ts +3 -0
- package/dist/common/timeline-helpers.js +57 -0
- package/dist/common/timeline-slider.d.ts +1 -1
- package/dist/common/timeline-slider.js +21 -12
- package/dist/common/tippy-tooltip.d.ts +1 -1
- package/dist/common/toolbar-item.d.ts +1 -1
- package/dist/common/toolbar-item.js +5 -5
- package/dist/common/toolbar.d.ts +2 -2
- package/dist/common/toolbar.js +4 -4
- package/dist/common/vertical-toolbar.d.ts +2 -3
- package/dist/container.d.ts +6 -6
- package/dist/context.d.ts +3 -3
- package/dist/dnd-context.d.ts +2 -2
- package/dist/editor/editor.d.ts +1 -1
- package/dist/editor/editor.js +1 -1
- package/dist/editor/feature-action-panel.d.ts +1 -1
- package/dist/editor/feature-action-panel.js +1 -1
- package/dist/effects/compact-color-picker.d.ts +1 -1
- package/dist/effects/effect-configurator.d.ts +5 -4
- package/dist/effects/effect-configurator.js +243 -44
- package/dist/effects/effect-list.d.ts +1 -1
- package/dist/effects/effect-manager.d.ts +3 -3
- package/dist/effects/effect-manager.js +11 -4
- package/dist/effects/effect-panel-header.d.ts +2 -2
- package/dist/effects/effect-panel-header.js +35 -18
- package/dist/effects/effect-panel.d.ts +6 -6
- package/dist/effects/effect-panel.js +61 -86
- package/dist/effects/effect-time-configurator.d.ts +1 -1
- package/dist/effects/effect-time-configurator.js +10 -10
- package/dist/effects/effect-time-selector.d.ts +1 -1
- package/dist/effects/effect-time-slider.d.ts +3 -3
- package/dist/effects/effect-type-dropdown-list.d.ts +3 -2
- package/dist/effects/effect-type-dropdown-list.js +1 -1
- package/dist/effects/effect-type-list-item.d.ts +2 -1
- package/dist/effects/effect-type-list-item.js +23 -7
- package/dist/effects/effect-type-selector.d.ts +3 -2
- package/dist/effects/effect-type-selector.js +2 -2
- package/dist/effects/side-panel-title.d.ts +1 -1
- package/dist/effects/surface-fog-section.d.ts +14 -0
- package/dist/effects/surface-fog-section.js +263 -0
- package/dist/effects/timezone-selector.d.ts +1 -1
- package/dist/filters/components.d.ts +2 -3
- package/dist/filters/filter-panels/types.d.ts +4 -4
- package/dist/filters/index.d.ts +1 -0
- package/dist/filters/index.js +8 -1
- package/dist/filters/polygon-filter.js +2 -2
- package/dist/filters/time-range-filter.js +3 -1
- package/dist/filters/time-widget-settings.d.ts +14 -0
- package/dist/filters/time-widget-settings.js +312 -0
- package/dist/filters/time-widget-top.d.ts +2 -3
- package/dist/filters/time-widget-top.js +32 -39
- package/dist/filters/time-widget.d.ts +3 -2
- package/dist/filters/time-widget.js +285 -9
- package/dist/filters/types.d.ts +11 -11
- package/dist/filters/types.js +1 -1
- package/dist/geocoder/geocoder.d.ts +7 -4
- package/dist/geocoder/geocoder.js +65 -14
- package/dist/geocoder-panel.d.ts +11 -2
- package/dist/geocoder-panel.js +8 -4
- package/dist/hooks/use-cloud-list-provider.d.ts +1 -1
- package/dist/hooks/use-dnd-effects.d.ts +1 -1
- package/dist/hooks/use-dnd-layers.d.ts +1 -1
- package/dist/hooks/use-feature-flags.d.ts +1 -1
- package/dist/hooks/use-fetch-raster-tile-metadata.d.ts +3 -3
- package/dist/hooks/use-fetch-vector-tile-metadata.d.ts +2 -2
- package/dist/hooks/use-legend-position.d.ts +4 -5
- package/dist/index.d.ts +14 -0
- package/dist/index.js +124 -1
- package/dist/injector.d.ts +5 -5
- package/dist/kepler-gl.d.ts +70 -67
- package/dist/kepler-gl.js +89 -11
- package/dist/loading-indicator.d.ts +6 -4
- package/dist/loading-indicator.js +6 -3
- package/dist/map/annotations/annotation-control.d.ts +16 -0
- package/dist/map/annotations/annotation-control.js +56 -0
- package/dist/map/effects/effect-control.d.ts +1 -1
- package/dist/map/layer-hover-info.d.ts +3 -3
- package/dist/map/layer-hover-info.js +69 -36
- package/dist/map/layer-selector-panel.d.ts +2 -2
- package/dist/map/lazy-tippy.js +3 -3
- package/dist/map/locale-panel.d.ts +2 -2
- package/dist/map/locale-panel.js +2 -2
- package/dist/map/map-control-panel.d.ts +1 -1
- package/dist/map/map-control-toolbar.d.ts +7 -8
- package/dist/map/map-control-tooltip.d.ts +1 -1
- package/dist/map/map-control.d.ts +8 -4
- package/dist/map/map-control.js +16 -7
- package/dist/map/map-draw-panel.d.ts +2 -2
- package/dist/map/map-draw-panel.js +7 -4
- package/dist/map/map-legend-panel.d.ts +5 -4
- package/dist/map/map-legend-panel.js +10 -8
- package/dist/map/map-legend.d.ts +11 -9
- package/dist/map/map-legend.js +39 -9
- package/dist/map/map-navigation-control.d.ts +13 -0
- package/dist/map/map-navigation-control.js +143 -0
- package/dist/map/map-popover-content.d.ts +2 -2
- package/dist/map/map-popover.d.ts +2 -2
- package/dist/map/map-popover.js +2 -2
- package/dist/map/split-map-button.d.ts +1 -1
- package/dist/map/toggle-3d-button.d.ts +1 -1
- package/dist/map-container.d.ts +15 -5
- package/dist/map-container.js +286 -73
- package/dist/map-view-state-context.d.ts +10 -2
- package/dist/map-view-state-context.js +1 -1
- package/dist/modal-container.d.ts +6 -8
- package/dist/modal-container.js +28 -6
- package/dist/modals/add-map-style-modal.js +173 -200
- package/dist/modals/cloud-components/cloud-header.d.ts +1 -1
- package/dist/modals/cloud-components/provider-select.d.ts +1 -1
- package/dist/modals/cloud-tile.d.ts +1 -1
- package/dist/modals/data-table-modal.d.ts +2 -2
- package/dist/modals/data-table-modal.js +146 -194
- package/dist/modals/export-data-modal.js +117 -139
- package/dist/modals/export-image-modal.js +1 -1
- package/dist/modals/export-map-modal/components.d.ts +1 -1
- package/dist/modals/export-map-modal/export-html-map.d.ts +1 -1
- package/dist/modals/export-map-modal/export-json-map.d.ts +1 -1
- package/dist/modals/export-video-modal.d.ts +25 -0
- package/dist/modals/export-video-modal.js +338 -0
- package/dist/modals/export-video-modal.spec.d.ts +1 -0
- package/dist/modals/export-video-modal.spec.js +686 -0
- package/dist/modals/fog-height-animation.d.ts +8 -0
- package/dist/modals/fog-height-animation.js +97 -0
- package/dist/modals/hubble-utils.d.ts +25 -0
- package/dist/modals/hubble-utils.js +197 -0
- package/dist/modals/hubble-utils.spec.d.ts +1 -0
- package/dist/modals/hubble-utils.spec.js +397 -0
- package/dist/modals/image-modal-container.d.ts +1 -1
- package/dist/modals/load-data-modal.d.ts +2 -2
- package/dist/modals/modal-dialog.d.ts +0 -2
- package/dist/modals/overwrite-map-modal.d.ts +1 -1
- package/dist/modals/save-map-modal.d.ts +3 -3
- package/dist/modals/share-map-modal.d.ts +1 -1
- package/dist/modals/tilesets-modals/common.d.ts +3 -3
- package/dist/modals/tilesets-modals/common.js +1 -1
- package/dist/modals/tilesets-modals/load-data-footer.d.ts +1 -1
- package/dist/modals/tilesets-modals/load-data-footer.js +2 -2
- package/dist/modals/tilesets-modals/load-tileset.d.ts +1 -1
- package/dist/modals/tilesets-modals/load-tileset.js +27 -10
- package/dist/modals/tilesets-modals/tileset-bitmap-form.d.ts +14 -0
- package/dist/modals/tilesets-modals/tileset-bitmap-form.js +284 -0
- package/dist/modals/tilesets-modals/tileset-icon.d.ts +1 -1
- package/dist/modals/tilesets-modals/tileset-raster-form.d.ts +2 -2
- package/dist/modals/tilesets-modals/tileset-raster-form.js +94 -11
- package/dist/modals/tilesets-modals/tileset-tile3d-form.d.ts +12 -0
- package/dist/modals/tilesets-modals/tileset-tile3d-form.js +389 -0
- package/dist/modals/tilesets-modals/tileset-vector-form.d.ts +3 -3
- package/dist/modals/tilesets-modals/tileset-vector-form.js +58 -4
- package/dist/modals/tilesets-modals/tileset-wms-form.d.ts +1 -1
- package/dist/modals/tilesets-modals/tileset-wms-form.js +55 -11
- package/dist/notification-panel/notification-item.d.ts +1 -53
- package/dist/notification-panel/notification-item.js +47 -75
- package/dist/notification-panel.d.ts +1 -1
- package/dist/notification-panel.js +20 -42
- package/dist/plot-container.js +55 -14
- package/dist/side-panel/add-by-dataset-button.d.ts +1 -1
- package/dist/side-panel/add-by-dataset-button.js +3 -3
- package/dist/side-panel/common/dataset-info.d.ts +2 -2
- package/dist/side-panel/common/dataset-info.js +2 -2
- package/dist/side-panel/common/dataset-tag.d.ts +2 -2
- package/dist/side-panel/common/dataset-title.d.ts +2 -2
- package/dist/side-panel/common/source-data-catalog.d.ts +3 -3
- package/dist/side-panel/common/types.d.ts +8 -8
- package/dist/side-panel/custom-panel.d.ts +2 -2
- package/dist/side-panel/filter-manager.d.ts +3 -3
- package/dist/side-panel/filter-panel/add-filter-button.d.ts +1 -1
- package/dist/side-panel/filter-panel/filter-panel-header.d.ts +2 -2
- package/dist/side-panel/interaction-manager.d.ts +1 -1
- package/dist/side-panel/interaction-panel/brush-config.d.ts +1 -1
- package/dist/side-panel/interaction-panel/geocoder-config.d.ts +11 -0
- package/dist/side-panel/interaction-panel/geocoder-config.js +45 -0
- package/dist/side-panel/interaction-panel/interaction-panel.d.ts +3 -2
- package/dist/side-panel/interaction-panel/interaction-panel.js +10 -3
- package/dist/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.d.ts +3 -3
- package/dist/side-panel/interaction-panel/tooltip-config.d.ts +1 -1
- package/dist/side-panel/layer-manager.d.ts +2 -2
- package/dist/side-panel/layer-manager.js +11 -3
- package/dist/side-panel/layer-panel/add-layer-button.d.ts +1 -1
- package/dist/side-panel/layer-panel/channel-by-value-selector.d.ts +1 -1
- package/dist/side-panel/layer-panel/color-breaks-panel.d.ts +4 -4
- package/dist/side-panel/layer-panel/color-palette-preset.d.ts +1 -1
- package/dist/side-panel/layer-panel/color-palette.d.ts +2 -2
- package/dist/side-panel/layer-panel/color-range-selector.d.ts +3 -3
- package/dist/side-panel/layer-panel/color-scale-selector.d.ts +5 -5
- package/dist/side-panel/layer-panel/color-scale-selector.js +1 -1
- package/dist/side-panel/layer-panel/color-selector.d.ts +3 -3
- package/dist/side-panel/layer-panel/column-selector.d.ts +1 -1
- package/dist/side-panel/layer-panel/custom-palette.d.ts +10 -10
- package/dist/side-panel/layer-panel/custom-palette.js +5 -5
- package/dist/side-panel/layer-panel/custom-picker.d.ts +1 -1
- package/dist/side-panel/layer-panel/dataset-layer-group.d.ts +1 -1
- package/dist/side-panel/layer-panel/dataset-layer-section.d.ts +1 -1
- package/dist/side-panel/layer-panel/dataset-layer-section.js +19 -3
- package/dist/side-panel/layer-panel/dataset-section.d.ts +2 -2
- package/dist/side-panel/layer-panel/dimension-scale-selector.d.ts +1 -1
- package/dist/side-panel/layer-panel/how-to-button.d.ts +1 -1
- package/dist/side-panel/layer-panel/layer-color-selector.d.ts +3 -3
- package/dist/side-panel/layer-panel/layer-column-config.d.ts +1 -1
- package/dist/side-panel/layer-panel/layer-column-mode-config.d.ts +3 -3
- package/dist/side-panel/layer-panel/layer-config-group.d.ts +5 -5
- package/dist/side-panel/layer-panel/layer-configurator.d.ts +6 -4
- package/dist/side-panel/layer-panel/layer-configurator.js +408 -72
- package/dist/side-panel/layer-panel/layer-error-message.d.ts +1 -1
- package/dist/side-panel/layer-panel/layer-list.d.ts +2 -2
- package/dist/side-panel/layer-panel/layer-panel-header.d.ts +5 -5
- package/dist/side-panel/layer-panel/layer-panel-header.js +2 -2
- package/dist/side-panel/layer-panel/layer-panel.d.ts +1 -1
- package/dist/side-panel/layer-panel/layer-type-dropdown-list.d.ts +2 -2
- package/dist/side-panel/layer-panel/layer-type-list-item.d.ts +2 -2
- package/dist/side-panel/layer-panel/layer-type-selector.d.ts +1 -1
- package/dist/side-panel/layer-panel/radius-by-zoom-input.d.ts +1 -1
- package/dist/side-panel/layer-panel/raster-tile-layer-configurator.d.ts +2 -2
- package/dist/side-panel/layer-panel/raster-tile-layer-configurator.js +127 -27
- package/dist/side-panel/layer-panel/scenegraph-model-selector.d.ts +24 -0
- package/dist/side-panel/layer-panel/scenegraph-model-selector.js +123 -0
- package/dist/side-panel/layer-panel/single-color-palette.d.ts +1 -1
- package/dist/side-panel/layer-panel/text-label-panel.d.ts +2 -2
- package/dist/side-panel/layer-panel/text-label-panel.js +11 -2
- package/dist/side-panel/layer-panel/vector-tile-layer-configurator.d.ts +3 -3
- package/dist/side-panel/layer-panel/vis-config-by-field-selector.d.ts +1 -1
- package/dist/side-panel/layer-panel/vis-config-slider.d.ts +3 -1
- package/dist/side-panel/layer-panel/vis-config-slider.js +7 -3
- package/dist/side-panel/layer-panel/vis-config-switch.d.ts +1 -1
- package/dist/side-panel/map-manager.d.ts +1 -1
- package/dist/side-panel/map-style-panel/map-layer-group-color-picker.d.ts +1 -1
- package/dist/side-panel/map-style-panel/map-layer-group-item.d.ts +2 -2
- package/dist/side-panel/map-style-panel/map-layer-selector.d.ts +1 -1
- package/dist/side-panel/map-style-panel/map-style-selector.d.ts +1 -1
- package/dist/side-panel/panel-header-action.d.ts +1 -1
- package/dist/side-panel/panel-header.d.ts +13 -12
- package/dist/side-panel/panel-header.js +9 -2
- package/dist/side-panel/panel-tab.d.ts +5 -5
- package/dist/side-panel/panel-tab.js +4 -4
- package/dist/side-panel/panel-title.d.ts +1 -1
- package/dist/side-panel/panel-toggle.d.ts +1 -1
- package/dist/side-panel/panel-view-list-toggle.d.ts +3 -3
- package/dist/side-panel/side-bar.d.ts +2 -2
- package/dist/side-panel.d.ts +1 -1
- package/dist/side-panel.js +5 -1
- package/dist/types.d.ts +3 -3
- package/package.json +41 -29
|
@@ -0,0 +1,397 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
5
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
6
|
+
var _constants = require("@kepler.gl/constants");
|
|
7
|
+
var _hubbleUtils = require("./hubble-utils");
|
|
8
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
9
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } // SPDX-License-Identifier: MIT
|
|
10
|
+
// Copyright contributors to the kepler.gl project
|
|
11
|
+
// @ts-nocheck
|
|
12
|
+
jest.mock('@kepler.gl/utils', function () {
|
|
13
|
+
return _objectSpread(_objectSpread({}, jest.requireActual('@kepler.gl/utils')), {}, {
|
|
14
|
+
getBaseMapLibrary: jest.fn(function () {
|
|
15
|
+
return 'maplibre';
|
|
16
|
+
})
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
jest.mock('maplibregl-mapbox-request-transformer', function () {
|
|
20
|
+
return {
|
|
21
|
+
isMapboxURL: jest.fn(function (url) {
|
|
22
|
+
return url.startsWith('mapbox:');
|
|
23
|
+
}),
|
|
24
|
+
transformMapboxUrl: jest.fn(function (url, _resourceType, token) {
|
|
25
|
+
return {
|
|
26
|
+
url: "".concat(url.replace('mapbox://', 'https://api.mapbox.com/'), "?access_token=").concat(token)
|
|
27
|
+
};
|
|
28
|
+
})
|
|
29
|
+
};
|
|
30
|
+
});
|
|
31
|
+
describe('hubble-utils', function () {
|
|
32
|
+
describe('getTimeRangeFilterKeyframes', function () {
|
|
33
|
+
var baseFilter = {
|
|
34
|
+
type: _constants.FILTER_TYPES.timeRange,
|
|
35
|
+
domain: [100, 500],
|
|
36
|
+
value: [200, 300],
|
|
37
|
+
animationWindow: 'free',
|
|
38
|
+
plotType: {
|
|
39
|
+
interval: null
|
|
40
|
+
},
|
|
41
|
+
timeBins: null,
|
|
42
|
+
dataId: ['dataset1']
|
|
43
|
+
};
|
|
44
|
+
test('throws when filter type is not timeRange', function () {
|
|
45
|
+
expect(function () {
|
|
46
|
+
return (0, _hubbleUtils.getTimeRangeFilterKeyframes)({
|
|
47
|
+
filter: _objectSpread(_objectSpread({}, baseFilter), {}, {
|
|
48
|
+
type: 'range'
|
|
49
|
+
}),
|
|
50
|
+
timings: [0, 1000]
|
|
51
|
+
});
|
|
52
|
+
}).toThrow("filter type must be 'timeRange'.");
|
|
53
|
+
});
|
|
54
|
+
test('returns free keyframes by default', function () {
|
|
55
|
+
var result = (0, _hubbleUtils.getTimeRangeFilterKeyframes)({
|
|
56
|
+
filter: baseFilter,
|
|
57
|
+
timings: [0, 1000]
|
|
58
|
+
});
|
|
59
|
+
var delta = baseFilter.value[1] - baseFilter.value[0]; // 100
|
|
60
|
+
expect(result.keyframes).toEqual([{
|
|
61
|
+
value: [100, 100 + delta]
|
|
62
|
+
}, {
|
|
63
|
+
value: [500 - delta, 500]
|
|
64
|
+
}]);
|
|
65
|
+
expect((0, _typeof2["default"])(result.easings)).toBe('function');
|
|
66
|
+
expect(result.easings(0.5)).toBe(0.5);
|
|
67
|
+
});
|
|
68
|
+
test('returns incremental keyframes', function () {
|
|
69
|
+
var result = (0, _hubbleUtils.getTimeRangeFilterKeyframes)({
|
|
70
|
+
filter: _objectSpread(_objectSpread({}, baseFilter), {}, {
|
|
71
|
+
animationWindow: 'incremental'
|
|
72
|
+
}),
|
|
73
|
+
timings: [0, 1000]
|
|
74
|
+
});
|
|
75
|
+
expect(result.keyframes).toEqual([{
|
|
76
|
+
value: [200, 201]
|
|
77
|
+
}, {
|
|
78
|
+
value: [200, 500]
|
|
79
|
+
}]);
|
|
80
|
+
});
|
|
81
|
+
test('returns point keyframes', function () {
|
|
82
|
+
var result = (0, _hubbleUtils.getTimeRangeFilterKeyframes)({
|
|
83
|
+
filter: _objectSpread(_objectSpread({}, baseFilter), {}, {
|
|
84
|
+
animationWindow: 'point'
|
|
85
|
+
}),
|
|
86
|
+
timings: [0, 1000]
|
|
87
|
+
});
|
|
88
|
+
expect(result.keyframes).toEqual([{
|
|
89
|
+
value: 100
|
|
90
|
+
}, {
|
|
91
|
+
value: 500
|
|
92
|
+
}]);
|
|
93
|
+
});
|
|
94
|
+
test('returns interval keyframes with bins', function () {
|
|
95
|
+
var bins = [{
|
|
96
|
+
x0: 100,
|
|
97
|
+
x1: 200
|
|
98
|
+
}, {
|
|
99
|
+
x0: 200,
|
|
100
|
+
x1: 300
|
|
101
|
+
}, {
|
|
102
|
+
x0: 300,
|
|
103
|
+
x1: 400
|
|
104
|
+
}];
|
|
105
|
+
var filter = _objectSpread(_objectSpread({}, baseFilter), {}, {
|
|
106
|
+
animationWindow: 'interval',
|
|
107
|
+
plotType: {
|
|
108
|
+
interval: 'day'
|
|
109
|
+
},
|
|
110
|
+
timeBins: {
|
|
111
|
+
dataset1: {
|
|
112
|
+
day: bins
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
dataId: ['dataset1']
|
|
116
|
+
});
|
|
117
|
+
var result = (0, _hubbleUtils.getTimeRangeFilterKeyframes)({
|
|
118
|
+
filter: filter,
|
|
119
|
+
timings: [0, 900]
|
|
120
|
+
});
|
|
121
|
+
expect(result.keyframes).toEqual([{
|
|
122
|
+
value: [100, 200]
|
|
123
|
+
}, {
|
|
124
|
+
value: [200, 300]
|
|
125
|
+
}, {
|
|
126
|
+
value: [300, 400]
|
|
127
|
+
}]);
|
|
128
|
+
expect(result.timings).toEqual([0, 300, 600]);
|
|
129
|
+
// hold easing: returns 0 unless p === 1
|
|
130
|
+
expect(result.easings(0)).toBe(0);
|
|
131
|
+
expect(result.easings(0.5)).toBe(0);
|
|
132
|
+
expect(result.easings(1)).toBe(1);
|
|
133
|
+
});
|
|
134
|
+
test('falls back to free keyframes when interval has no bins', function () {
|
|
135
|
+
var filter = _objectSpread(_objectSpread({}, baseFilter), {}, {
|
|
136
|
+
animationWindow: 'interval',
|
|
137
|
+
plotType: {
|
|
138
|
+
interval: null
|
|
139
|
+
},
|
|
140
|
+
timeBins: null
|
|
141
|
+
});
|
|
142
|
+
var result = (0, _hubbleUtils.getTimeRangeFilterKeyframes)({
|
|
143
|
+
filter: filter,
|
|
144
|
+
timings: [0, 1000]
|
|
145
|
+
});
|
|
146
|
+
var delta = baseFilter.value[1] - baseFilter.value[0];
|
|
147
|
+
expect(result.keyframes).toEqual([{
|
|
148
|
+
value: [100, 100 + delta]
|
|
149
|
+
}, {
|
|
150
|
+
value: [500 - delta, 500]
|
|
151
|
+
}]);
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
describe('getBeforeLayerId', function () {
|
|
155
|
+
test('returns null when topMapStyle is null', function () {
|
|
156
|
+
expect((0, _hubbleUtils.getBeforeLayerId)(null, {
|
|
157
|
+
layers: [{
|
|
158
|
+
id: 'a'
|
|
159
|
+
}]
|
|
160
|
+
})).toBeNull();
|
|
161
|
+
});
|
|
162
|
+
test('returns null when bottomMapStyle is null', function () {
|
|
163
|
+
expect((0, _hubbleUtils.getBeforeLayerId)({
|
|
164
|
+
layers: [{
|
|
165
|
+
id: 'a'
|
|
166
|
+
}]
|
|
167
|
+
}, null)).toBeNull();
|
|
168
|
+
});
|
|
169
|
+
test('returns null when either has empty layers', function () {
|
|
170
|
+
expect((0, _hubbleUtils.getBeforeLayerId)({
|
|
171
|
+
layers: []
|
|
172
|
+
}, {
|
|
173
|
+
layers: [{
|
|
174
|
+
id: 'a'
|
|
175
|
+
}]
|
|
176
|
+
})).toBeNull();
|
|
177
|
+
});
|
|
178
|
+
test('returns the layer before the first top layer in the bottom style', function () {
|
|
179
|
+
var topMapStyle = {
|
|
180
|
+
layers: [{
|
|
181
|
+
id: 'layer-b'
|
|
182
|
+
}]
|
|
183
|
+
};
|
|
184
|
+
var bottomMapStyle = {
|
|
185
|
+
layers: [{
|
|
186
|
+
id: 'layer-a'
|
|
187
|
+
}, {
|
|
188
|
+
id: 'layer-b'
|
|
189
|
+
}, {
|
|
190
|
+
id: 'layer-c'
|
|
191
|
+
}]
|
|
192
|
+
};
|
|
193
|
+
var result = (0, _hubbleUtils.getBeforeLayerId)(topMapStyle, bottomMapStyle);
|
|
194
|
+
expect(result).toEqual({
|
|
195
|
+
id: 'layer-a'
|
|
196
|
+
});
|
|
197
|
+
});
|
|
198
|
+
test('returns null when first top layer is at index 0 in bottom style', function () {
|
|
199
|
+
var topMapStyle = {
|
|
200
|
+
layers: [{
|
|
201
|
+
id: 'layer-a'
|
|
202
|
+
}]
|
|
203
|
+
};
|
|
204
|
+
var bottomMapStyle = {
|
|
205
|
+
layers: [{
|
|
206
|
+
id: 'layer-a'
|
|
207
|
+
}, {
|
|
208
|
+
id: 'layer-b'
|
|
209
|
+
}]
|
|
210
|
+
};
|
|
211
|
+
expect((0, _hubbleUtils.getBeforeLayerId)(topMapStyle, bottomMapStyle)).toBeNull();
|
|
212
|
+
});
|
|
213
|
+
test('returns null when first top layer is not found in bottom style', function () {
|
|
214
|
+
var topMapStyle = {
|
|
215
|
+
layers: [{
|
|
216
|
+
id: 'missing'
|
|
217
|
+
}]
|
|
218
|
+
};
|
|
219
|
+
var bottomMapStyle = {
|
|
220
|
+
layers: [{
|
|
221
|
+
id: 'layer-a'
|
|
222
|
+
}, {
|
|
223
|
+
id: 'layer-b'
|
|
224
|
+
}]
|
|
225
|
+
};
|
|
226
|
+
expect((0, _hubbleUtils.getBeforeLayerId)(topMapStyle, bottomMapStyle)).toBeNull();
|
|
227
|
+
});
|
|
228
|
+
});
|
|
229
|
+
describe('getStaticMapProps', function () {
|
|
230
|
+
var mockKeplerState = {
|
|
231
|
+
visState: {},
|
|
232
|
+
mapState: {
|
|
233
|
+
latitude: 37.7,
|
|
234
|
+
longitude: -122.4,
|
|
235
|
+
zoom: 10
|
|
236
|
+
},
|
|
237
|
+
mapStyle: {
|
|
238
|
+
styleType: 'dark',
|
|
239
|
+
mapStyles: {
|
|
240
|
+
dark: {
|
|
241
|
+
accessToken: 'style-token'
|
|
242
|
+
}
|
|
243
|
+
},
|
|
244
|
+
bottomMapStyle: {
|
|
245
|
+
id: 'dark-map-style'
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
};
|
|
249
|
+
var onViewChange = jest.fn();
|
|
250
|
+
test('spreads mapState into result', function () {
|
|
251
|
+
var result = (0, _hubbleUtils.getStaticMapProps)(mockKeplerState, onViewChange, 'global-token');
|
|
252
|
+
expect(result.latitude).toBe(37.7);
|
|
253
|
+
expect(result.longitude).toBe(-122.4);
|
|
254
|
+
expect(result.zoom).toBe(10);
|
|
255
|
+
});
|
|
256
|
+
test('uses style accessToken when available', function () {
|
|
257
|
+
var result = (0, _hubbleUtils.getStaticMapProps)(mockKeplerState, onViewChange, 'global-token');
|
|
258
|
+
expect(result.mapboxApiAccessToken).toBe('style-token');
|
|
259
|
+
});
|
|
260
|
+
test('falls back to global token when style has no accessToken', function () {
|
|
261
|
+
var state = _objectSpread(_objectSpread({}, mockKeplerState), {}, {
|
|
262
|
+
mapStyle: _objectSpread(_objectSpread({}, mockKeplerState.mapStyle), {}, {
|
|
263
|
+
mapStyles: {
|
|
264
|
+
dark: {}
|
|
265
|
+
}
|
|
266
|
+
})
|
|
267
|
+
});
|
|
268
|
+
var result = (0, _hubbleUtils.getStaticMapProps)(state, onViewChange, 'global-token');
|
|
269
|
+
expect(result.mapboxApiAccessToken).toBe('global-token');
|
|
270
|
+
});
|
|
271
|
+
test('sets preserveDrawingBuffer to true', function () {
|
|
272
|
+
var result = (0, _hubbleUtils.getStaticMapProps)(mockKeplerState, onViewChange, 'token');
|
|
273
|
+
expect(result.preserveDrawingBuffer).toBe(true);
|
|
274
|
+
});
|
|
275
|
+
test('passes bottomMapStyle as mapStyle', function () {
|
|
276
|
+
var result = (0, _hubbleUtils.getStaticMapProps)(mockKeplerState, onViewChange, 'token');
|
|
277
|
+
expect(result.mapStyle).toEqual({
|
|
278
|
+
id: 'dark-map-style'
|
|
279
|
+
});
|
|
280
|
+
});
|
|
281
|
+
test('passes onViewChange as onViewportChange', function () {
|
|
282
|
+
var result = (0, _hubbleUtils.getStaticMapProps)(mockKeplerState, onViewChange, 'token');
|
|
283
|
+
expect(result.onViewportChange).toBe(onViewChange);
|
|
284
|
+
});
|
|
285
|
+
test('includes mapLib as a Promise (always maplibre-gl)', function () {
|
|
286
|
+
var result = (0, _hubbleUtils.getStaticMapProps)(mockKeplerState, onViewChange, 'token');
|
|
287
|
+
expect(result.mapLib).toBeDefined();
|
|
288
|
+
expect(result.mapLib).toBeInstanceOf(Promise);
|
|
289
|
+
});
|
|
290
|
+
test('provides transformRequest that handles mapbox:// URLs', function () {
|
|
291
|
+
var result = (0, _hubbleUtils.getStaticMapProps)(mockKeplerState, onViewChange, 'global-token');
|
|
292
|
+
expect((0, _typeof2["default"])(result.transformRequest)).toBe('function');
|
|
293
|
+
var transformed = result.transformRequest('mapbox://styles/user/style1', 'Style');
|
|
294
|
+
expect(transformed.url).toContain('api.mapbox.com');
|
|
295
|
+
var regular = result.transformRequest('https://example.com/tiles', 'Source');
|
|
296
|
+
expect(regular.url).toBe('https://example.com/tiles');
|
|
297
|
+
});
|
|
298
|
+
test('converts mapbox:// URLs in style object for mapbox styles', function () {
|
|
299
|
+
var _require = require('@kepler.gl/utils'),
|
|
300
|
+
getBaseMapLibrary = _require.getBaseMapLibrary;
|
|
301
|
+
getBaseMapLibrary.mockReturnValueOnce('mapbox');
|
|
302
|
+
var state = _objectSpread(_objectSpread({}, mockKeplerState), {}, {
|
|
303
|
+
mapStyle: _objectSpread(_objectSpread({}, mockKeplerState.mapStyle), {}, {
|
|
304
|
+
bottomMapStyle: {
|
|
305
|
+
id: 'mapbox-style',
|
|
306
|
+
sprite: 'mapbox://sprites/user/style1',
|
|
307
|
+
glyphs: 'mapbox://fonts/user/{fontstack}/{range}.pbf',
|
|
308
|
+
sources: {
|
|
309
|
+
composite: {
|
|
310
|
+
url: 'mapbox://mapbox.mapbox-streets-v8'
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
})
|
|
315
|
+
});
|
|
316
|
+
var result = (0, _hubbleUtils.getStaticMapProps)(state, onViewChange, 'token');
|
|
317
|
+
expect(result.mapStyle.sprite).toContain('api.mapbox.com');
|
|
318
|
+
expect(result.mapStyle.glyphs).toContain('api.mapbox.com');
|
|
319
|
+
expect(result.mapStyle.sources.composite.url).toContain('api.mapbox.com');
|
|
320
|
+
});
|
|
321
|
+
test('does not convert style URLs for non-mapbox styles', function () {
|
|
322
|
+
var result = (0, _hubbleUtils.getStaticMapProps)(mockKeplerState, onViewChange, 'token');
|
|
323
|
+
expect(result.mapStyle).toEqual({
|
|
324
|
+
id: 'dark-map-style'
|
|
325
|
+
});
|
|
326
|
+
});
|
|
327
|
+
});
|
|
328
|
+
describe('getAnimatableFilters', function () {
|
|
329
|
+
test('returns empty array when no filters', function () {
|
|
330
|
+
var state = {
|
|
331
|
+
visState: {
|
|
332
|
+
filters: []
|
|
333
|
+
},
|
|
334
|
+
mapState: {},
|
|
335
|
+
mapStyle: {}
|
|
336
|
+
};
|
|
337
|
+
expect((0, _hubbleUtils.getAnimatableFilters)(state)).toEqual([]);
|
|
338
|
+
});
|
|
339
|
+
test('returns empty array when visState.filters is undefined', function () {
|
|
340
|
+
var state = {
|
|
341
|
+
visState: {},
|
|
342
|
+
mapState: {},
|
|
343
|
+
mapStyle: {}
|
|
344
|
+
};
|
|
345
|
+
expect((0, _hubbleUtils.getAnimatableFilters)(state)).toEqual([]);
|
|
346
|
+
});
|
|
347
|
+
test('filters only timeRange filters with enlarged view', function () {
|
|
348
|
+
var filters = [{
|
|
349
|
+
type: _constants.FILTER_TYPES.timeRange,
|
|
350
|
+
view: _constants.FILTER_VIEW_TYPES.enlarged,
|
|
351
|
+
id: 'f1'
|
|
352
|
+
}, {
|
|
353
|
+
type: _constants.FILTER_TYPES.range,
|
|
354
|
+
view: _constants.FILTER_VIEW_TYPES.enlarged,
|
|
355
|
+
id: 'f2'
|
|
356
|
+
}, {
|
|
357
|
+
type: _constants.FILTER_TYPES.timeRange,
|
|
358
|
+
view: _constants.FILTER_VIEW_TYPES.side,
|
|
359
|
+
id: 'f3'
|
|
360
|
+
}];
|
|
361
|
+
var state = {
|
|
362
|
+
visState: {
|
|
363
|
+
filters: filters
|
|
364
|
+
},
|
|
365
|
+
mapState: {},
|
|
366
|
+
mapStyle: {}
|
|
367
|
+
};
|
|
368
|
+
var result = (0, _hubbleUtils.getAnimatableFilters)(state);
|
|
369
|
+
expect(result).toHaveLength(1);
|
|
370
|
+
expect(result[0].id).toBe('f1');
|
|
371
|
+
});
|
|
372
|
+
test('includes timeRange filters synced with layer timeline', function () {
|
|
373
|
+
var filters = [{
|
|
374
|
+
type: _constants.FILTER_TYPES.timeRange,
|
|
375
|
+
view: _constants.FILTER_VIEW_TYPES.side,
|
|
376
|
+
syncedWithLayerTimeline: true,
|
|
377
|
+
id: 'synced'
|
|
378
|
+
}, {
|
|
379
|
+
type: _constants.FILTER_TYPES.timeRange,
|
|
380
|
+
view: _constants.FILTER_VIEW_TYPES.side,
|
|
381
|
+
syncedWithLayerTimeline: false,
|
|
382
|
+
id: 'not-synced'
|
|
383
|
+
}];
|
|
384
|
+
var state = {
|
|
385
|
+
visState: {
|
|
386
|
+
filters: filters
|
|
387
|
+
},
|
|
388
|
+
mapState: {},
|
|
389
|
+
mapStyle: {}
|
|
390
|
+
};
|
|
391
|
+
var result = (0, _hubbleUtils.getAnimatableFilters)(state);
|
|
392
|
+
expect(result).toHaveLength(1);
|
|
393
|
+
expect(result[0].id).toBe('synced');
|
|
394
|
+
});
|
|
395
|
+
});
|
|
396
|
+
});
|
|
397
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29uc3RhbnRzIiwicmVxdWlyZSIsIl9odWJibGVVdGlscyIsIm93bktleXMiLCJlIiwiciIsInQiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiamVzdCIsIm1vY2siLCJyZXF1aXJlQWN0dWFsIiwiZ2V0QmFzZU1hcExpYnJhcnkiLCJmbiIsImlzTWFwYm94VVJMIiwidXJsIiwic3RhcnRzV2l0aCIsInRyYW5zZm9ybU1hcGJveFVybCIsIl9yZXNvdXJjZVR5cGUiLCJ0b2tlbiIsImNvbmNhdCIsInJlcGxhY2UiLCJkZXNjcmliZSIsImJhc2VGaWx0ZXIiLCJ0eXBlIiwiRklMVEVSX1RZUEVTIiwidGltZVJhbmdlIiwiZG9tYWluIiwidmFsdWUiLCJhbmltYXRpb25XaW5kb3ciLCJwbG90VHlwZSIsImludGVydmFsIiwidGltZUJpbnMiLCJkYXRhSWQiLCJ0ZXN0IiwiZXhwZWN0IiwiZ2V0VGltZVJhbmdlRmlsdGVyS2V5ZnJhbWVzIiwidGltaW5ncyIsInRvVGhyb3ciLCJyZXN1bHQiLCJkZWx0YSIsImtleWZyYW1lcyIsInRvRXF1YWwiLCJfdHlwZW9mMiIsImVhc2luZ3MiLCJ0b0JlIiwiYmlucyIsIngwIiwieDEiLCJkYXRhc2V0MSIsImRheSIsImdldEJlZm9yZUxheWVySWQiLCJsYXllcnMiLCJpZCIsInRvQmVOdWxsIiwidG9wTWFwU3R5bGUiLCJib3R0b21NYXBTdHlsZSIsIm1vY2tLZXBsZXJTdGF0ZSIsInZpc1N0YXRlIiwibWFwU3RhdGUiLCJsYXRpdHVkZSIsImxvbmdpdHVkZSIsInpvb20iLCJtYXBTdHlsZSIsInN0eWxlVHlwZSIsIm1hcFN0eWxlcyIsImRhcmsiLCJhY2Nlc3NUb2tlbiIsIm9uVmlld0NoYW5nZSIsImdldFN0YXRpY01hcFByb3BzIiwibWFwYm94QXBpQWNjZXNzVG9rZW4iLCJzdGF0ZSIsInByZXNlcnZlRHJhd2luZ0J1ZmZlciIsIm9uVmlld3BvcnRDaGFuZ2UiLCJtYXBMaWIiLCJ0b0JlRGVmaW5lZCIsInRvQmVJbnN0YW5jZU9mIiwiUHJvbWlzZSIsInRyYW5zZm9ybVJlcXVlc3QiLCJ0cmFuc2Zvcm1lZCIsInRvQ29udGFpbiIsInJlZ3VsYXIiLCJfcmVxdWlyZSIsIm1vY2tSZXR1cm5WYWx1ZU9uY2UiLCJzcHJpdGUiLCJnbHlwaHMiLCJzb3VyY2VzIiwiY29tcG9zaXRlIiwiZmlsdGVycyIsImdldEFuaW1hdGFibGVGaWx0ZXJzIiwidmlldyIsIkZJTFRFUl9WSUVXX1RZUEVTIiwiZW5sYXJnZWQiLCJyYW5nZSIsInNpZGUiLCJ0b0hhdmVMZW5ndGgiLCJzeW5jZWRXaXRoTGF5ZXJUaW1lbGluZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RhbHMvaHViYmxlLXV0aWxzLnNwZWMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuLy8gQHRzLW5vY2hlY2tcbmltcG9ydCB7RklMVEVSX1RZUEVTLCBGSUxURVJfVklFV19UWVBFU30gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgZ2V0VGltZVJhbmdlRmlsdGVyS2V5ZnJhbWVzLFxuICBnZXRCZWZvcmVMYXllcklkLFxuICBnZXRTdGF0aWNNYXBQcm9wcyxcbiAgZ2V0QW5pbWF0YWJsZUZpbHRlcnNcbn0gZnJvbSAnLi9odWJibGUtdXRpbHMnO1xuXG5qZXN0Lm1vY2soJ0BrZXBsZXIuZ2wvdXRpbHMnLCAoKSA9PiAoe1xuICAuLi5qZXN0LnJlcXVpcmVBY3R1YWwoJ0BrZXBsZXIuZ2wvdXRpbHMnKSxcbiAgZ2V0QmFzZU1hcExpYnJhcnk6IGplc3QuZm4oKCkgPT4gJ21hcGxpYnJlJylcbn0pKTtcblxuamVzdC5tb2NrKCdtYXBsaWJyZWdsLW1hcGJveC1yZXF1ZXN0LXRyYW5zZm9ybWVyJywgKCkgPT4gKHtcbiAgaXNNYXBib3hVUkw6IGplc3QuZm4oKHVybDogc3RyaW5nKSA9PiB1cmwuc3RhcnRzV2l0aCgnbWFwYm94OicpKSxcbiAgdHJhbnNmb3JtTWFwYm94VXJsOiBqZXN0LmZuKCh1cmw6IHN0cmluZywgX3Jlc291cmNlVHlwZTogc3RyaW5nLCB0b2tlbjogc3RyaW5nKSA9PiAoe1xuICAgIHVybDogYCR7dXJsLnJlcGxhY2UoJ21hcGJveDovLycsICdodHRwczovL2FwaS5tYXBib3guY29tLycpfT9hY2Nlc3NfdG9rZW49JHt0b2tlbn1gXG4gIH0pKVxufSkpO1xuXG5kZXNjcmliZSgnaHViYmxlLXV0aWxzJywgKCkgPT4ge1xuICBkZXNjcmliZSgnZ2V0VGltZVJhbmdlRmlsdGVyS2V5ZnJhbWVzJywgKCkgPT4ge1xuICAgIGNvbnN0IGJhc2VGaWx0ZXIgPSB7XG4gICAgICB0eXBlOiBGSUxURVJfVFlQRVMudGltZVJhbmdlLFxuICAgICAgZG9tYWluOiBbMTAwLCA1MDBdLFxuICAgICAgdmFsdWU6IFsyMDAsIDMwMF0sXG4gICAgICBhbmltYXRpb25XaW5kb3c6ICdmcmVlJyxcbiAgICAgIHBsb3RUeXBlOiB7aW50ZXJ2YWw6IG51bGx9LFxuICAgICAgdGltZUJpbnM6IG51bGwsXG4gICAgICBkYXRhSWQ6IFsnZGF0YXNldDEnXVxuICAgIH07XG5cbiAgICB0ZXN0KCd0aHJvd3Mgd2hlbiBmaWx0ZXIgdHlwZSBpcyBub3QgdGltZVJhbmdlJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KCgpID0+XG4gICAgICAgIGdldFRpbWVSYW5nZUZpbHRlcktleWZyYW1lcyh7XG4gICAgICAgICAgZmlsdGVyOiB7Li4uYmFzZUZpbHRlciwgdHlwZTogJ3JhbmdlJ30sXG4gICAgICAgICAgdGltaW5nczogWzAsIDEwMDBdXG4gICAgICAgIH0pXG4gICAgICApLnRvVGhyb3coXCJmaWx0ZXIgdHlwZSBtdXN0IGJlICd0aW1lUmFuZ2UnLlwiKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3JldHVybnMgZnJlZSBrZXlmcmFtZXMgYnkgZGVmYXVsdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFRpbWVSYW5nZUZpbHRlcktleWZyYW1lcyh7XG4gICAgICAgIGZpbHRlcjogYmFzZUZpbHRlcixcbiAgICAgICAgdGltaW5nczogWzAsIDEwMDBdXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgZGVsdGEgPSBiYXNlRmlsdGVyLnZhbHVlWzFdIC0gYmFzZUZpbHRlci52YWx1ZVswXTsgLy8gMTAwXG4gICAgICBleHBlY3QocmVzdWx0LmtleWZyYW1lcykudG9FcXVhbChbe3ZhbHVlOiBbMTAwLCAxMDAgKyBkZWx0YV19LCB7dmFsdWU6IFs1MDAgLSBkZWx0YSwgNTAwXX1dKTtcbiAgICAgIGV4cGVjdCh0eXBlb2YgcmVzdWx0LmVhc2luZ3MpLnRvQmUoJ2Z1bmN0aW9uJyk7XG4gICAgICBleHBlY3QocmVzdWx0LmVhc2luZ3MoMC41KSkudG9CZSgwLjUpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgncmV0dXJucyBpbmNyZW1lbnRhbCBrZXlmcmFtZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRUaW1lUmFuZ2VGaWx0ZXJLZXlmcmFtZXMoe1xuICAgICAgICBmaWx0ZXI6IHsuLi5iYXNlRmlsdGVyLCBhbmltYXRpb25XaW5kb3c6ICdpbmNyZW1lbnRhbCd9LFxuICAgICAgICB0aW1pbmdzOiBbMCwgMTAwMF1cbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QocmVzdWx0LmtleWZyYW1lcykudG9FcXVhbChbe3ZhbHVlOiBbMjAwLCAyMDFdfSwge3ZhbHVlOiBbMjAwLCA1MDBdfV0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgncmV0dXJucyBwb2ludCBrZXlmcmFtZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRUaW1lUmFuZ2VGaWx0ZXJLZXlmcmFtZXMoe1xuICAgICAgICBmaWx0ZXI6IHsuLi5iYXNlRmlsdGVyLCBhbmltYXRpb25XaW5kb3c6ICdwb2ludCd9LFxuICAgICAgICB0aW1pbmdzOiBbMCwgMTAwMF1cbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QocmVzdWx0LmtleWZyYW1lcykudG9FcXVhbChbe3ZhbHVlOiAxMDB9LCB7dmFsdWU6IDUwMH1dKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3JldHVybnMgaW50ZXJ2YWwga2V5ZnJhbWVzIHdpdGggYmlucycsICgpID0+IHtcbiAgICAgIGNvbnN0IGJpbnMgPSBbXG4gICAgICAgIHt4MDogMTAwLCB4MTogMjAwfSxcbiAgICAgICAge3gwOiAyMDAsIHgxOiAzMDB9LFxuICAgICAgICB7eDA6IDMwMCwgeDE6IDQwMH1cbiAgICAgIF07XG4gICAgICBjb25zdCBmaWx0ZXIgPSB7XG4gICAgICAgIC4uLmJhc2VGaWx0ZXIsXG4gICAgICAgIGFuaW1hdGlvbldpbmRvdzogJ2ludGVydmFsJyxcbiAgICAgICAgcGxvdFR5cGU6IHtpbnRlcnZhbDogJ2RheSd9LFxuICAgICAgICB0aW1lQmluczoge2RhdGFzZXQxOiB7ZGF5OiBiaW5zfX0sXG4gICAgICAgIGRhdGFJZDogWydkYXRhc2V0MSddXG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRUaW1lUmFuZ2VGaWx0ZXJLZXlmcmFtZXMoe1xuICAgICAgICBmaWx0ZXIsXG4gICAgICAgIHRpbWluZ3M6IFswLCA5MDBdXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHJlc3VsdC5rZXlmcmFtZXMpLnRvRXF1YWwoW1xuICAgICAgICB7dmFsdWU6IFsxMDAsIDIwMF19LFxuICAgICAgICB7dmFsdWU6IFsyMDAsIDMwMF19LFxuICAgICAgICB7dmFsdWU6IFszMDAsIDQwMF19XG4gICAgICBdKTtcbiAgICAgIGV4cGVjdChyZXN1bHQudGltaW5ncykudG9FcXVhbChbMCwgMzAwLCA2MDBdKTtcbiAgICAgIC8vIGhvbGQgZWFzaW5nOiByZXR1cm5zIDAgdW5sZXNzIHAgPT09IDFcbiAgICAgIGV4cGVjdChyZXN1bHQuZWFzaW5ncygwKSkudG9CZSgwKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuZWFzaW5ncygwLjUpKS50b0JlKDApO1xuICAgICAgZXhwZWN0KHJlc3VsdC5lYXNpbmdzKDEpKS50b0JlKDEpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnZmFsbHMgYmFjayB0byBmcmVlIGtleWZyYW1lcyB3aGVuIGludGVydmFsIGhhcyBubyBiaW5zJywgKCkgPT4ge1xuICAgICAgY29uc3QgZmlsdGVyID0ge1xuICAgICAgICAuLi5iYXNlRmlsdGVyLFxuICAgICAgICBhbmltYXRpb25XaW5kb3c6ICdpbnRlcnZhbCcsXG4gICAgICAgIHBsb3RUeXBlOiB7aW50ZXJ2YWw6IG51bGx9LFxuICAgICAgICB0aW1lQmluczogbnVsbFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0VGltZVJhbmdlRmlsdGVyS2V5ZnJhbWVzKHtcbiAgICAgICAgZmlsdGVyLFxuICAgICAgICB0aW1pbmdzOiBbMCwgMTAwMF1cbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBkZWx0YSA9IGJhc2VGaWx0ZXIudmFsdWVbMV0gLSBiYXNlRmlsdGVyLnZhbHVlWzBdO1xuICAgICAgZXhwZWN0KHJlc3VsdC5rZXlmcmFtZXMpLnRvRXF1YWwoW3t2YWx1ZTogWzEwMCwgMTAwICsgZGVsdGFdfSwge3ZhbHVlOiBbNTAwIC0gZGVsdGEsIDUwMF19XSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRCZWZvcmVMYXllcklkJywgKCkgPT4ge1xuICAgIHRlc3QoJ3JldHVybnMgbnVsbCB3aGVuIHRvcE1hcFN0eWxlIGlzIG51bGwnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoZ2V0QmVmb3JlTGF5ZXJJZChudWxsLCB7bGF5ZXJzOiBbe2lkOiAnYSd9XX0pKS50b0JlTnVsbCgpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgncmV0dXJucyBudWxsIHdoZW4gYm90dG9tTWFwU3R5bGUgaXMgbnVsbCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChnZXRCZWZvcmVMYXllcklkKHtsYXllcnM6IFt7aWQ6ICdhJ31dfSwgbnVsbCkpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdyZXR1cm5zIG51bGwgd2hlbiBlaXRoZXIgaGFzIGVtcHR5IGxheWVycycsICgpID0+IHtcbiAgICAgIGV4cGVjdChnZXRCZWZvcmVMYXllcklkKHtsYXllcnM6IFtdfSwge2xheWVyczogW3tpZDogJ2EnfV19KSkudG9CZU51bGwoKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3JldHVybnMgdGhlIGxheWVyIGJlZm9yZSB0aGUgZmlyc3QgdG9wIGxheWVyIGluIHRoZSBib3R0b20gc3R5bGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCB0b3BNYXBTdHlsZSA9IHtsYXllcnM6IFt7aWQ6ICdsYXllci1iJ31dfTtcbiAgICAgIGNvbnN0IGJvdHRvbU1hcFN0eWxlID0ge1xuICAgICAgICBsYXllcnM6IFt7aWQ6ICdsYXllci1hJ30sIHtpZDogJ2xheWVyLWInfSwge2lkOiAnbGF5ZXItYyd9XVxuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0QmVmb3JlTGF5ZXJJZCh0b3BNYXBTdHlsZSwgYm90dG9tTWFwU3R5bGUpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7aWQ6ICdsYXllci1hJ30pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgncmV0dXJucyBudWxsIHdoZW4gZmlyc3QgdG9wIGxheWVyIGlzIGF0IGluZGV4IDAgaW4gYm90dG9tIHN0eWxlJywgKCkgPT4ge1xuICAgICAgY29uc3QgdG9wTWFwU3R5bGUgPSB7bGF5ZXJzOiBbe2lkOiAnbGF5ZXItYSd9XX07XG4gICAgICBjb25zdCBib3R0b21NYXBTdHlsZSA9IHtsYXllcnM6IFt7aWQ6ICdsYXllci1hJ30sIHtpZDogJ2xheWVyLWInfV19O1xuXG4gICAgICBleHBlY3QoZ2V0QmVmb3JlTGF5ZXJJZCh0b3BNYXBTdHlsZSwgYm90dG9tTWFwU3R5bGUpKS50b0JlTnVsbCgpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgncmV0dXJucyBudWxsIHdoZW4gZmlyc3QgdG9wIGxheWVyIGlzIG5vdCBmb3VuZCBpbiBib3R0b20gc3R5bGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCB0b3BNYXBTdHlsZSA9IHtsYXllcnM6IFt7aWQ6ICdtaXNzaW5nJ31dfTtcbiAgICAgIGNvbnN0IGJvdHRvbU1hcFN0eWxlID0ge2xheWVyczogW3tpZDogJ2xheWVyLWEnfSwge2lkOiAnbGF5ZXItYid9XX07XG5cbiAgICAgIGV4cGVjdChnZXRCZWZvcmVMYXllcklkKHRvcE1hcFN0eWxlLCBib3R0b21NYXBTdHlsZSkpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRTdGF0aWNNYXBQcm9wcycsICgpID0+IHtcbiAgICBjb25zdCBtb2NrS2VwbGVyU3RhdGUgPSB7XG4gICAgICB2aXNTdGF0ZToge30sXG4gICAgICBtYXBTdGF0ZToge2xhdGl0dWRlOiAzNy43LCBsb25naXR1ZGU6IC0xMjIuNCwgem9vbTogMTB9LFxuICAgICAgbWFwU3R5bGU6IHtcbiAgICAgICAgc3R5bGVUeXBlOiAnZGFyaycsXG4gICAgICAgIG1hcFN0eWxlczoge1xuICAgICAgICAgIGRhcms6IHthY2Nlc3NUb2tlbjogJ3N0eWxlLXRva2VuJ31cbiAgICAgICAgfSxcbiAgICAgICAgYm90dG9tTWFwU3R5bGU6IHtpZDogJ2RhcmstbWFwLXN0eWxlJ31cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG9uVmlld0NoYW5nZSA9IGplc3QuZm4oKTtcblxuICAgIHRlc3QoJ3NwcmVhZHMgbWFwU3RhdGUgaW50byByZXN1bHQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRTdGF0aWNNYXBQcm9wcyhtb2NrS2VwbGVyU3RhdGUsIG9uVmlld0NoYW5nZSwgJ2dsb2JhbC10b2tlbicpO1xuXG4gICAgICBleHBlY3QocmVzdWx0LmxhdGl0dWRlKS50b0JlKDM3LjcpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5sb25naXR1ZGUpLnRvQmUoLTEyMi40KTtcbiAgICAgIGV4cGVjdChyZXN1bHQuem9vbSkudG9CZSgxMCk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCd1c2VzIHN0eWxlIGFjY2Vzc1Rva2VuIHdoZW4gYXZhaWxhYmxlJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0U3RhdGljTWFwUHJvcHMobW9ja0tlcGxlclN0YXRlLCBvblZpZXdDaGFuZ2UsICdnbG9iYWwtdG9rZW4nKTtcbiAgICAgIGV4cGVjdChyZXN1bHQubWFwYm94QXBpQWNjZXNzVG9rZW4pLnRvQmUoJ3N0eWxlLXRva2VuJyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdmYWxscyBiYWNrIHRvIGdsb2JhbCB0b2tlbiB3aGVuIHN0eWxlIGhhcyBubyBhY2Nlc3NUb2tlbicsICgpID0+IHtcbiAgICAgIGNvbnN0IHN0YXRlID0ge1xuICAgICAgICAuLi5tb2NrS2VwbGVyU3RhdGUsXG4gICAgICAgIG1hcFN0eWxlOiB7XG4gICAgICAgICAgLi4ubW9ja0tlcGxlclN0YXRlLm1hcFN0eWxlLFxuICAgICAgICAgIG1hcFN0eWxlczoge2Rhcms6IHt9fVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0U3RhdGljTWFwUHJvcHMoc3RhdGUsIG9uVmlld0NoYW5nZSwgJ2dsb2JhbC10b2tlbicpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5tYXBib3hBcGlBY2Nlc3NUb2tlbikudG9CZSgnZ2xvYmFsLXRva2VuJyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdzZXRzIHByZXNlcnZlRHJhd2luZ0J1ZmZlciB0byB0cnVlJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0U3RhdGljTWFwUHJvcHMobW9ja0tlcGxlclN0YXRlLCBvblZpZXdDaGFuZ2UsICd0b2tlbicpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdwYXNzZXMgYm90dG9tTWFwU3R5bGUgYXMgbWFwU3R5bGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRTdGF0aWNNYXBQcm9wcyhtb2NrS2VwbGVyU3RhdGUsIG9uVmlld0NoYW5nZSwgJ3Rva2VuJyk7XG4gICAgICBleHBlY3QocmVzdWx0Lm1hcFN0eWxlKS50b0VxdWFsKHtpZDogJ2RhcmstbWFwLXN0eWxlJ30pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgncGFzc2VzIG9uVmlld0NoYW5nZSBhcyBvblZpZXdwb3J0Q2hhbmdlJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0U3RhdGljTWFwUHJvcHMobW9ja0tlcGxlclN0YXRlLCBvblZpZXdDaGFuZ2UsICd0b2tlbicpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5vblZpZXdwb3J0Q2hhbmdlKS50b0JlKG9uVmlld0NoYW5nZSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdpbmNsdWRlcyBtYXBMaWIgYXMgYSBQcm9taXNlIChhbHdheXMgbWFwbGlicmUtZ2wpJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0U3RhdGljTWFwUHJvcHMobW9ja0tlcGxlclN0YXRlLCBvblZpZXdDaGFuZ2UsICd0b2tlbicpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5tYXBMaWIpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QocmVzdWx0Lm1hcExpYikudG9CZUluc3RhbmNlT2YoUHJvbWlzZSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdwcm92aWRlcyB0cmFuc2Zvcm1SZXF1ZXN0IHRoYXQgaGFuZGxlcyBtYXBib3g6Ly8gVVJMcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFN0YXRpY01hcFByb3BzKG1vY2tLZXBsZXJTdGF0ZSwgb25WaWV3Q2hhbmdlLCAnZ2xvYmFsLXRva2VuJyk7XG4gICAgICBleHBlY3QodHlwZW9mIHJlc3VsdC50cmFuc2Zvcm1SZXF1ZXN0KS50b0JlKCdmdW5jdGlvbicpO1xuXG4gICAgICBjb25zdCB0cmFuc2Zvcm1lZCA9IHJlc3VsdC50cmFuc2Zvcm1SZXF1ZXN0KCdtYXBib3g6Ly9zdHlsZXMvdXNlci9zdHlsZTEnLCAnU3R5bGUnKTtcbiAgICAgIGV4cGVjdCh0cmFuc2Zvcm1lZC51cmwpLnRvQ29udGFpbignYXBpLm1hcGJveC5jb20nKTtcblxuICAgICAgY29uc3QgcmVndWxhciA9IHJlc3VsdC50cmFuc2Zvcm1SZXF1ZXN0KCdodHRwczovL2V4YW1wbGUuY29tL3RpbGVzJywgJ1NvdXJjZScpO1xuICAgICAgZXhwZWN0KHJlZ3VsYXIudXJsKS50b0JlKCdodHRwczovL2V4YW1wbGUuY29tL3RpbGVzJyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdjb252ZXJ0cyBtYXBib3g6Ly8gVVJMcyBpbiBzdHlsZSBvYmplY3QgZm9yIG1hcGJveCBzdHlsZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7Z2V0QmFzZU1hcExpYnJhcnl9ID0gcmVxdWlyZSgnQGtlcGxlci5nbC91dGlscycpO1xuICAgICAgZ2V0QmFzZU1hcExpYnJhcnkubW9ja1JldHVyblZhbHVlT25jZSgnbWFwYm94Jyk7XG5cbiAgICAgIGNvbnN0IHN0YXRlID0ge1xuICAgICAgICAuLi5tb2NrS2VwbGVyU3RhdGUsXG4gICAgICAgIG1hcFN0eWxlOiB7XG4gICAgICAgICAgLi4ubW9ja0tlcGxlclN0YXRlLm1hcFN0eWxlLFxuICAgICAgICAgIGJvdHRvbU1hcFN0eWxlOiB7XG4gICAgICAgICAgICBpZDogJ21hcGJveC1zdHlsZScsXG4gICAgICAgICAgICBzcHJpdGU6ICdtYXBib3g6Ly9zcHJpdGVzL3VzZXIvc3R5bGUxJyxcbiAgICAgICAgICAgIGdseXBoczogJ21hcGJveDovL2ZvbnRzL3VzZXIve2ZvbnRzdGFja30ve3JhbmdlfS5wYmYnLFxuICAgICAgICAgICAgc291cmNlczoge1xuICAgICAgICAgICAgICBjb21wb3NpdGU6IHt1cmw6ICdtYXBib3g6Ly9tYXBib3gubWFwYm94LXN0cmVldHMtdjgnfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0U3RhdGljTWFwUHJvcHMoc3RhdGUsIG9uVmlld0NoYW5nZSwgJ3Rva2VuJyk7XG4gICAgICBleHBlY3QocmVzdWx0Lm1hcFN0eWxlLnNwcml0ZSkudG9Db250YWluKCdhcGkubWFwYm94LmNvbScpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5tYXBTdHlsZS5nbHlwaHMpLnRvQ29udGFpbignYXBpLm1hcGJveC5jb20nKTtcbiAgICAgIGV4cGVjdChyZXN1bHQubWFwU3R5bGUuc291cmNlcy5jb21wb3NpdGUudXJsKS50b0NvbnRhaW4oJ2FwaS5tYXBib3guY29tJyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdkb2VzIG5vdCBjb252ZXJ0IHN0eWxlIFVSTHMgZm9yIG5vbi1tYXBib3ggc3R5bGVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0U3RhdGljTWFwUHJvcHMobW9ja0tlcGxlclN0YXRlLCBvblZpZXdDaGFuZ2UsICd0b2tlbicpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5tYXBTdHlsZSkudG9FcXVhbCh7aWQ6ICdkYXJrLW1hcC1zdHlsZSd9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldEFuaW1hdGFibGVGaWx0ZXJzJywgKCkgPT4ge1xuICAgIHRlc3QoJ3JldHVybnMgZW1wdHkgYXJyYXkgd2hlbiBubyBmaWx0ZXJzJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGUgPSB7dmlzU3RhdGU6IHtmaWx0ZXJzOiBbXX0sIG1hcFN0YXRlOiB7fSwgbWFwU3R5bGU6IHt9fTtcbiAgICAgIGV4cGVjdChnZXRBbmltYXRhYmxlRmlsdGVycyhzdGF0ZSkpLnRvRXF1YWwoW10pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgncmV0dXJucyBlbXB0eSBhcnJheSB3aGVuIHZpc1N0YXRlLmZpbHRlcnMgaXMgdW5kZWZpbmVkJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGUgPSB7dmlzU3RhdGU6IHt9LCBtYXBTdGF0ZToge30sIG1hcFN0eWxlOiB7fX07XG4gICAgICBleHBlY3QoZ2V0QW5pbWF0YWJsZUZpbHRlcnMoc3RhdGUpKS50b0VxdWFsKFtdKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2ZpbHRlcnMgb25seSB0aW1lUmFuZ2UgZmlsdGVycyB3aXRoIGVubGFyZ2VkIHZpZXcnLCAoKSA9PiB7XG4gICAgICBjb25zdCBmaWx0ZXJzID0gW1xuICAgICAgICB7dHlwZTogRklMVEVSX1RZUEVTLnRpbWVSYW5nZSwgdmlldzogRklMVEVSX1ZJRVdfVFlQRVMuZW5sYXJnZWQsIGlkOiAnZjEnfSxcbiAgICAgICAge3R5cGU6IEZJTFRFUl9UWVBFUy5yYW5nZSwgdmlldzogRklMVEVSX1ZJRVdfVFlQRVMuZW5sYXJnZWQsIGlkOiAnZjInfSxcbiAgICAgICAge3R5cGU6IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UsIHZpZXc6IEZJTFRFUl9WSUVXX1RZUEVTLnNpZGUsIGlkOiAnZjMnfVxuICAgICAgXTtcbiAgICAgIGNvbnN0IHN0YXRlID0ge3Zpc1N0YXRlOiB7ZmlsdGVyc30sIG1hcFN0YXRlOiB7fSwgbWFwU3R5bGU6IHt9fTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEFuaW1hdGFibGVGaWx0ZXJzKHN0YXRlKTtcblxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9IYXZlTGVuZ3RoKDEpO1xuICAgICAgZXhwZWN0KHJlc3VsdFswXS5pZCkudG9CZSgnZjEnKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2luY2x1ZGVzIHRpbWVSYW5nZSBmaWx0ZXJzIHN5bmNlZCB3aXRoIGxheWVyIHRpbWVsaW5lJywgKCkgPT4ge1xuICAgICAgY29uc3QgZmlsdGVycyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UsXG4gICAgICAgICAgdmlldzogRklMVEVSX1ZJRVdfVFlQRVMuc2lkZSxcbiAgICAgICAgICBzeW5jZWRXaXRoTGF5ZXJUaW1lbGluZTogdHJ1ZSxcbiAgICAgICAgICBpZDogJ3N5bmNlZCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UsXG4gICAgICAgICAgdmlldzogRklMVEVSX1ZJRVdfVFlQRVMuc2lkZSxcbiAgICAgICAgICBzeW5jZWRXaXRoTGF5ZXJUaW1lbGluZTogZmFsc2UsXG4gICAgICAgICAgaWQ6ICdub3Qtc3luY2VkJ1xuICAgICAgICB9XG4gICAgICBdO1xuICAgICAgY29uc3Qgc3RhdGUgPSB7dmlzU3RhdGU6IHtmaWx0ZXJzfSwgbWFwU3RhdGU6IHt9LCBtYXBTdHlsZToge319O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0QW5pbWF0YWJsZUZpbHRlcnMoc3RhdGUpO1xuXG4gICAgICBleHBlY3QocmVzdWx0KS50b0hhdmVMZW5ndGgoMSk7XG4gICAgICBleHBlY3QocmVzdWx0WzBdLmlkKS50b0JlKCdzeW5jZWQnKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFJQSxJQUFBQSxVQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxZQUFBLEdBQUFELE9BQUE7QUFLd0IsU0FBQUUsUUFBQUMsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxJQUFBLENBQUFKLENBQUEsT0FBQUcsTUFBQSxDQUFBRSxxQkFBQSxRQUFBQyxDQUFBLEdBQUFILE1BQUEsQ0FBQUUscUJBQUEsQ0FBQUwsQ0FBQSxHQUFBQyxD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
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { SetExportImageSettingUpdaterAction } from '@kepler.gl/actions';
|
|
3
3
|
import { Provider } from '@kepler.gl/cloud-providers';
|
|
4
|
-
export
|
|
4
|
+
export type ImageModalContainerProps = {
|
|
5
5
|
provider?: Provider | null;
|
|
6
6
|
onUpdateImageSetting: (newSetting: SetExportImageSettingUpdaterAction['payload']) => void;
|
|
7
7
|
cleanupExportImage: () => void;
|
|
@@ -14,7 +14,7 @@ export interface LoadingMethod {
|
|
|
14
14
|
intl: IntlShape;
|
|
15
15
|
}>;
|
|
16
16
|
}
|
|
17
|
-
|
|
17
|
+
type LoadDataModalProps = {
|
|
18
18
|
onFileUpload: (files: File[]) => void;
|
|
19
19
|
onLoadCloudMap: (provider: any, vis: any) => void;
|
|
20
20
|
onTilesetAdded: (tileset: {
|
|
@@ -36,7 +36,7 @@ declare type LoadDataModalProps = {
|
|
|
36
36
|
fileLoadingProgress: FileLoadingProgress;
|
|
37
37
|
};
|
|
38
38
|
export declare function LoadDataModalFactory(ModalTabs: ReturnType<typeof ModalTabsFactory>, FileUpload: ReturnType<typeof FileUploadFactory>, LoadStorageMap: ReturnType<typeof LoadStorageMapFactory>, LoadTileset: ReturnType<typeof LoadTilesetFactory>): React.FC<LoadDataModalProps> & {
|
|
39
|
-
defaultLoadingMethods: LoadDataModalProps[
|
|
39
|
+
defaultLoadingMethods: LoadDataModalProps["loadingMethods"];
|
|
40
40
|
};
|
|
41
41
|
export declare namespace LoadDataModalFactory {
|
|
42
42
|
var deps: (typeof LoadTilesetFactory | typeof ModalTabsFactory | typeof FileUploadFactory | typeof LoadStorageMapFactory)[];
|
|
@@ -1,4 +1,2 @@
|
|
|
1
|
-
/// <reference types="react-modal" />
|
|
2
|
-
/// <reference types="react" />
|
|
3
1
|
declare const ModalDialogFactory: () => import("styled-components").IStyledComponent<"web", import("styled-components/dist/types").FastOmit<import("../common/modal").ModalDialogOwnProps & Omit<import("react-modal").Props, "className" | "style" | "ariaHideApp"> & import("react").RefAttributes<import("../common/modal").ModalDialog>, never>> & Omit<typeof import("../common/modal").ModalDialog, keyof import("react").Component<any, {}, any>>;
|
|
4
2
|
export default ModalDialogFactory;
|
|
@@ -2,7 +2,7 @@ import React from 'react';
|
|
|
2
2
|
import { ImageModalContainerProps } from './image-modal-container';
|
|
3
3
|
import { Provider } from '@kepler.gl/cloud-providers';
|
|
4
4
|
import { cleanupExportImage as cleanupExportImageAction } from '@kepler.gl/actions';
|
|
5
|
-
|
|
5
|
+
type OverwriteMapModalProps = {
|
|
6
6
|
mapSaved: string | null;
|
|
7
7
|
title: string;
|
|
8
8
|
isProviderLoading: boolean;
|
|
@@ -3,11 +3,11 @@ import { ImageModalContainerProps } from './image-modal-container';
|
|
|
3
3
|
import { MapInfo, ExportImage } from '@kepler.gl/types';
|
|
4
4
|
import { Provider } from '@kepler.gl/cloud-providers';
|
|
5
5
|
import { setMapInfo, cleanupExportImage as cleanupExportImageAction } from '@kepler.gl/actions';
|
|
6
|
-
|
|
6
|
+
type CharacterLimits = {
|
|
7
7
|
title?: number;
|
|
8
8
|
description?: number;
|
|
9
9
|
};
|
|
10
|
-
|
|
10
|
+
type SaveMapModalProps = {
|
|
11
11
|
mapInfo: MapInfo;
|
|
12
12
|
exportImage: ExportImage;
|
|
13
13
|
isProviderLoading: boolean;
|
|
@@ -19,7 +19,7 @@ declare type SaveMapModalProps = {
|
|
|
19
19
|
onConfirm: (provider: Provider) => void;
|
|
20
20
|
onCancel: () => void;
|
|
21
21
|
};
|
|
22
|
-
|
|
22
|
+
type MapInfoPanelProps = Pick<SaveMapModalProps, 'mapInfo' | 'characterLimits'> & {
|
|
23
23
|
onChangeInput: (type: string, event: React.ChangeEvent<HTMLTextAreaElement | HTMLInputElement>) => void;
|
|
24
24
|
};
|
|
25
25
|
export declare const MapInfoPanel: React.FC<MapInfoPanelProps>;
|
|
@@ -4,7 +4,7 @@ import { Provider } from '@kepler.gl/cloud-providers';
|
|
|
4
4
|
import { cleanupExportImage as cleanupExportImageAction } from '@kepler.gl/actions';
|
|
5
5
|
export declare const StyledInputLabel: import("styled-components").IStyledComponent<"web", import("styled-components/dist/types").FastOmit<React.DetailedHTMLProps<React.LabelHTMLAttributes<HTMLLabelElement>, HTMLLabelElement>, never>>;
|
|
6
6
|
export declare const StyleSharingUrl: import("styled-components").IStyledComponent<"web", import("styled-components/dist/types").FastOmit<import("styled-components/dist/types").FastOmit<import("styled-components/dist/types").Substitute<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
|
|
7
|
-
ref?: ((instance: HTMLDivElement | null) => void) | React.RefObject<HTMLDivElement> | null | undefined;
|
|
7
|
+
ref?: ((instance: HTMLDivElement | null) => void | React.DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof React.DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES]) | React.RefObject<HTMLDivElement> | null | undefined;
|
|
8
8
|
}>, never>, never>>;
|
|
9
9
|
interface SharingUrlProps {
|
|
10
10
|
url: string;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import type { WMSCapabilities } from '@loaders.gl/wms';
|
|
2
2
|
import type { VectorTileMetadata } from '@kepler.gl/table';
|
|
3
3
|
import type { StacTypes } from '@kepler.gl/types';
|
|
4
|
-
export
|
|
4
|
+
export type DatasetCreationAttributes = {
|
|
5
5
|
name: string;
|
|
6
6
|
type: string;
|
|
7
7
|
metadata: Record<string, any>;
|
|
8
8
|
};
|
|
9
|
-
export
|
|
10
|
-
metadata?: VectorTileMetadata | StacTypes.CompleteSTACObject | WMSCapabilities | null;
|
|
9
|
+
export type MetaResponse = {
|
|
10
|
+
metadata?: VectorTileMetadata | StacTypes.CompleteSTACObject | WMSCapabilities | Record<string, unknown> | null;
|
|
11
11
|
dataset?: DatasetCreationAttributes | null;
|
|
12
12
|
loading?: boolean;
|
|
13
13
|
error?: Error | null;
|
|
@@ -3,4 +3,4 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
6
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21vZGFscy90aWxlc2V0cy1tb2RhbHMvY29tbW9uLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgdHlwZSB7V01TQ2FwYWJpbGl0aWVzfSBmcm9tICdAbG9hZGVycy5nbC93bXMnO1xuXG5pbXBvcnQgdHlwZSB7VmVjdG9yVGlsZU1ldGFkYXRhfSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcbmltcG9ydCB0eXBlIHtTdGFjVHlwZXN9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBEYXRhc2V0Q3JlYXRpb25BdHRyaWJ1dGVzID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT47XG59O1xuXG5leHBvcnQgdHlwZSBNZXRhUmVzcG9uc2UgPSB7XG4gIG1ldGFkYXRhPzpcbiAgICB8IFZlY3RvclRpbGVNZXRhZGF0YVxuICAgIHwgU3RhY1R5cGVzLkNvbXBsZXRlU1RBQ09iamVjdFxuICAgIHwgV01TQ2FwYWJpbGl0aWVzXG4gICAgfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgIHwgbnVsbDtcbiAgZGF0YXNldD86IERhdGFzZXRDcmVhdGlvbkF0dHJpYnV0ZXMgfCBudWxsO1xuICBsb2FkaW5nPzogYm9vbGVhbjtcbiAgZXJyb3I/OiBFcnJvciB8IG51bGw7XG59O1xuIl0sIm1hcHBpbmdzIjoiIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -25,7 +25,7 @@ var AddDataButton = (0, _styledComponents["default"])(_common.Button)(_templateO
|
|
|
25
25
|
});
|
|
26
26
|
var LoadDataFooterContainer = _styledComponents["default"].div.attrs({
|
|
27
27
|
className: 'load-data-footer'
|
|
28
|
-
})(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n /* position: absolute; */\n width: 100%;\n bottom: 0;\n\n display: flex;\n justify-content: space-between;\n padding: 21px 21px 0px 72px;\n margin:
|
|
28
|
+
})(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n /* position: absolute; */\n width: 100%;\n bottom: 0;\n\n display: flex;\n justify-content: space-between;\n padding: 21px 21px 0px 72px;\n margin: 0 -72px 0;\n align-items: center;\n"])));
|
|
29
29
|
var ErrorContainer = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n color: red;\n padding-left: 15px;\n display: inline-block;\n"])));
|
|
30
30
|
var LoadDataFooter = function LoadDataFooter(_ref) {
|
|
31
31
|
var disabled = _ref.disabled,
|
|
@@ -53,4 +53,4 @@ var LoadDataFooter = function LoadDataFooter(_ref) {
|
|
|
53
53
|
})), errorText && /*#__PURE__*/_react["default"].createElement(ErrorContainer, null, errorText)));
|
|
54
54
|
};
|
|
55
55
|
var _default = exports["default"] = (0, _styledComponents.withTheme)((0, _reactIntl.injectIntl)(LoadDataFooter));
|
|
56
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdEludGwiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX2NvbW1vbiIsIl9sb2FkaW5nU3Bpbm5lciIsIl90ZW1wbGF0ZU9iamVjdCIsIl90ZW1wbGF0ZU9iamVjdDIiLCJfdGVtcGxhdGVPYmplY3QzIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiQWRkRGF0YUJ1dHRvbiIsInN0eWxlZCIsIkJ1dHRvbiIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwyIiwicHJvcHMiLCJkaXNhYmxlZCIsIndpZHRoIiwiaXNMb2FkaW5nIiwiTG9hZERhdGFGb290ZXJDb250YWluZXIiLCJkaXYiLCJhdHRycyIsImNsYXNzTmFtZSIsIkVycm9yQ29udGFpbmVyIiwiTG9hZERhdGFGb290ZXIiLCJfcmVmIiwiaW50bCIsIm9uQ29uZmlybSIsImNvbmZpcm1UZXh0IiwiX3JlZiRwcmVwZW5kVGV4dCIsInByZXBlbmRUZXh0IiwiX3JlZiRlcnJvclRleHQiLCJlcnJvclRleHQiLCJ0aGVtZSIsImNyZWF0ZUVsZW1lbnQiLCJvbkNsaWNrIiwiY3RhIiwiY29sb3IiLCJib3JkZXJDb2xvckxUIiwiYm9yZGVyQ29sb3IiLCJzaXplIiwiZm9ybWF0TWVzc2FnZSIsImlkIiwiX2RlZmF1bHQiLCJleHBvcnRzIiwid2l0aFRoZW1lIiwiaW5qZWN0SW50bCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tb2RhbHMvdGlsZXNldHMtbW9kYWxzL2xvYWQtZGF0YS1mb290ZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge2luamVjdEludGwsIFdyYXBwZWRDb21wb25lbnRQcm9wc30gZnJvbSAncmVhY3QtaW50bCc7XG5pbXBvcnQgc3R5bGVkLCB7d2l0aFRoZW1lfSBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5cbmltcG9ydCB7QnV0dG9ufSBmcm9tICcuLi8uLi9jb21tb24nO1xuaW1wb3J0IExvYWRpbmdTcGlubmVyIGZyb20gJy4uLy4uL2NvbW1vbi9sb2FkaW5nLXNwaW5uZXInO1xuXG5jb25zdCBBZGREYXRhQnV0dG9uID0gc3R5bGVkKEJ1dHRvbik8e2lzTG9hZGluZz86IGJvb2xlYW59PmBcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgb3BhY2l0eTogJHtwcm9wcyA9PiAocHJvcHMuZGlzYWJsZWQgPyAwLjYgOiAxKX07XG4gIGhlaWdodDogNDBweDtcbiAgcGFkZGluZzogOXB4IDMycHg7XG4gIHdpZHRoOiAke3Byb3BzID0+
|
|
56
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdEludGwiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX2NvbW1vbiIsIl9sb2FkaW5nU3Bpbm5lciIsIl90ZW1wbGF0ZU9iamVjdCIsIl90ZW1wbGF0ZU9iamVjdDIiLCJfdGVtcGxhdGVPYmplY3QzIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiQWRkRGF0YUJ1dHRvbiIsInN0eWxlZCIsIkJ1dHRvbiIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwyIiwicHJvcHMiLCJkaXNhYmxlZCIsIndpZHRoIiwiaXNMb2FkaW5nIiwiTG9hZERhdGFGb290ZXJDb250YWluZXIiLCJkaXYiLCJhdHRycyIsImNsYXNzTmFtZSIsIkVycm9yQ29udGFpbmVyIiwiTG9hZERhdGFGb290ZXIiLCJfcmVmIiwiaW50bCIsIm9uQ29uZmlybSIsImNvbmZpcm1UZXh0IiwiX3JlZiRwcmVwZW5kVGV4dCIsInByZXBlbmRUZXh0IiwiX3JlZiRlcnJvclRleHQiLCJlcnJvclRleHQiLCJ0aGVtZSIsImNyZWF0ZUVsZW1lbnQiLCJvbkNsaWNrIiwiY3RhIiwiY29sb3IiLCJib3JkZXJDb2xvckxUIiwiYm9yZGVyQ29sb3IiLCJzaXplIiwiZm9ybWF0TWVzc2FnZSIsImlkIiwiX2RlZmF1bHQiLCJleHBvcnRzIiwid2l0aFRoZW1lIiwiaW5qZWN0SW50bCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tb2RhbHMvdGlsZXNldHMtbW9kYWxzL2xvYWQtZGF0YS1mb290ZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge2luamVjdEludGwsIFdyYXBwZWRDb21wb25lbnRQcm9wc30gZnJvbSAncmVhY3QtaW50bCc7XG5pbXBvcnQgc3R5bGVkLCB7d2l0aFRoZW1lfSBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5cbmltcG9ydCB7QnV0dG9ufSBmcm9tICcuLi8uLi9jb21tb24nO1xuaW1wb3J0IExvYWRpbmdTcGlubmVyIGZyb20gJy4uLy4uL2NvbW1vbi9sb2FkaW5nLXNwaW5uZXInO1xuXG5jb25zdCBBZGREYXRhQnV0dG9uID0gc3R5bGVkKEJ1dHRvbik8e2lzTG9hZGluZz86IGJvb2xlYW59PmBcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgb3BhY2l0eTogJHtwcm9wcyA9PiAocHJvcHMuZGlzYWJsZWQgPyAwLjYgOiAxKX07XG4gIGhlaWdodDogNDBweDtcbiAgcGFkZGluZzogOXB4IDMycHg7XG4gIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLndpZHRofTtcblxuICBzdmcge1xuICAgIG1hcmdpbi1yaWdodDogJHtwcm9wcyA9PiAocHJvcHMuaXNMb2FkaW5nID8gJzAnIDogJzZweCcpfTtcbiAgfVxuYDtcblxuY29uc3QgTG9hZERhdGFGb290ZXJDb250YWluZXIgPSBzdHlsZWQuZGl2LmF0dHJzKHtcbiAgY2xhc3NOYW1lOiAnbG9hZC1kYXRhLWZvb3Rlcidcbn0pYFxuICAvKiBwb3NpdGlvbjogYWJzb2x1dGU7ICovXG4gIHdpZHRoOiAxMDAlO1xuICBib3R0b206IDA7XG5cbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBwYWRkaW5nOiAyMXB4IDIxcHggMHB4IDcycHg7XG4gIG1hcmdpbjogMCAtNzJweCAwO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuYDtcblxuY29uc3QgRXJyb3JDb250YWluZXIgPSBzdHlsZWQuZGl2YFxuICBjb2xvcjogcmVkO1xuICBwYWRkaW5nLWxlZnQ6IDE1cHg7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbmA7XG5cbnR5cGUgTG9hZERhdGFGb290ZXJQcm9wcyA9IHtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBpc0xvYWRpbmc/OiBib29sZWFuO1xuICBvbkNvbmZpcm06ICgpID0+IHZvaWQ7XG4gIGNvbmZpcm1UZXh0OiBzdHJpbmc7XG4gIHByZXBlbmRUZXh0Pzogc3RyaW5nO1xuICBlcnJvclRleHQ/OiBzdHJpbmcgfCBudWxsO1xufTtcblxudHlwZSBUaGVtZVByb3BzID0ge1xuICB0aGVtZTogYW55O1xufTtcblxuY29uc3QgTG9hZERhdGFGb290ZXIgPSAoe1xuICBkaXNhYmxlZCxcbiAgaW50bCxcbiAgaXNMb2FkaW5nLFxuICBvbkNvbmZpcm0sXG4gIGNvbmZpcm1UZXh0LFxuICBwcmVwZW5kVGV4dCA9ICcnLFxuICBlcnJvclRleHQgPSAnJyxcbiAgdGhlbWVcbn06IExvYWREYXRhRm9vdGVyUHJvcHMgJiBXcmFwcGVkQ29tcG9uZW50UHJvcHMgJiBUaGVtZVByb3BzKSA9PiB7XG4gIHJldHVybiAoXG4gICAgPExvYWREYXRhRm9vdGVyQ29udGFpbmVyPlxuICAgICAgPGRpdj5cbiAgICAgICAge3ByZXBlbmRUZXh0fVxuICAgICAgICA8QWRkRGF0YUJ1dHRvblxuICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICBpc0xvYWRpbmc9e2lzTG9hZGluZ31cbiAgICAgICAgICBvbkNsaWNrPXtvbkNvbmZpcm19XG4gICAgICAgICAgd2lkdGg9XCIxMzBweFwiXG4gICAgICAgICAgY3RhXG4gICAgICAgID5cbiAgICAgICAgICB7aXNMb2FkaW5nICYmIChcbiAgICAgICAgICAgIDxMb2FkaW5nU3Bpbm5lciBjb2xvcj17dGhlbWUuYm9yZGVyQ29sb3JMVH0gYm9yZGVyQ29sb3I9XCJ0cmFuc3BhcmVudFwiIHNpemU9ezI0fSAvPlxuICAgICAgICAgICl9XG4gICAgICAgICAge2lzTG9hZGluZ1xuICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICA6IGludGwuZm9ybWF0TWVzc2FnZSh7XG4gICAgICAgICAgICAgICAgaWQ6IGNvbmZpcm1UZXh0XG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICA8L0FkZERhdGFCdXR0b24+XG4gICAgICAgIHtlcnJvclRleHQgJiYgPEVycm9yQ29udGFpbmVyPntlcnJvclRleHR9PC9FcnJvckNvbnRhaW5lcj59XG4gICAgICA8L2Rpdj5cbiAgICA8L0xvYWREYXRhRm9vdGVyQ29udGFpbmVyPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFRoZW1lKGluamVjdEludGwoTG9hZERhdGFGb290ZXIpKSBhcyBSZWFjdC5GQzxcbiAgT21pdDxMb2FkRGF0YUZvb3RlclByb3BzLCAndGhlbWUnPlxuPjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBR0EsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsVUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsaUJBQUEsR0FBQUMsdUJBQUEsQ0FBQUgsT0FBQTtBQUVBLElBQUFJLE9BQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLGVBQUEsR0FBQU4sc0JBQUEsQ0FBQUMsT0FBQTtBQUEwRCxJQUFBTSxlQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBUjFEO0FBQ0E7QUFBQSxTQUFBQyx5QkFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBRix3QkFBQSxZQUFBQSx5QkFBQUMsQ0FBQSxXQUFBQSxDQUFBLEdB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
|